diff --git a/.gitignore b/.gitignore index c6794c8186..cdeec9ebac 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,9 @@ docs/.obsidian .docusaurus .cache-loader .yarnclean +.yarn +.pnp.cjs +.pnp.loader.mjs # Misc .DS_Store diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000000..4bda78d16d --- /dev/null +++ b/.prettierignore @@ -0,0 +1 @@ +subtensor-storage-query-examples.md \ No newline at end of file diff --git a/README.md b/README.md index cfcb1aab0f..111bf6f3c9 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

Bittensor Developer Docs

-

https://docs.bittensor.com

+

https://docs.learnbittensor.org

----------------------------------------------------------------------------- @@ -17,7 +17,7 @@ In most cases you only need to follow this basic approach. If you know what you ### Installation ``` -git clone https://github.com/opentensor/developer-docs.git +git clone https://github.com/latent-to/developer-docs.git ``` ``` diff --git a/WRITING-STYLE-GUIDE.md b/WRITING-STYLE-GUIDE.md index 7023ada811..bcb33d8213 100644 --- a/WRITING-STYLE-GUIDE.md +++ b/WRITING-STYLE-GUIDE.md @@ -1,5 +1,5 @@

- + Tao Logo

@@ -7,7 +7,7 @@ ----------------------------------------------------------------------------- -When you write a developer document for Opentensor Foundation, your audience should find your documentation readable, informative, and concise. To accomplish these goals, here below are a few helpful writing style recommendations. We encourage you to stick to the writing style described on this page. +When you write a developer document for the Bittensor documentation, your audience should find your documentation readable, informative, and concise. To accomplish these goals, here below are a few helpful writing style recommendations. We encourage you to stick to the writing style described on this page. # General principles diff --git a/docs/_components.md b/docs/_components.md deleted file mode 100644 index c5f2fbdae1..0000000000 --- a/docs/_components.md +++ /dev/null @@ -1,164 +0,0 @@ ---- -title: "Components" ---- - - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - -### Admonition -:::note - -Please write down your wallet’s mnemonic seed and keep it in a safe place. The mnemonic can be used to restore your wallet. Keep it carefully to not lose your assets. Please write down your wallet’s mnemonic seed and keep it in a safe place. The mnemonic can be used to restore your wallet. Keep it carefully to not lose your assets. Please write down your wallet’s mnemonic seed and keep it in a safe place. The mnemonic can be used to restore your wallet. Keep it carefully to not lose your assets. Please write down your wallet’s mnemonic seed and keep it in a safe place. The mnemonic can be used to restore your wallet. Keep it carefully to not lose your assets.Please write down your wallet’s mnemonic seed and keep it in a safe place. The mnemonic can be used to restore your wallet. Keep it carefully to not lose your assets. Please write down your wallet’s mnemonic seed and keep it in a safe place. The mnemonic can be used to restore your wallet. Keep it carefully to not lose your assets.Please write down your wallet’s mnemonic seed and keep it in a safe place. The mnemonic can be used to restore your wallet. Keep it carefully to not lose your assets.Please write down your wallet’s mnemonic seed and keep it in a safe place. The mnemonic can be used to restore your wallet. Keep it carefully to not lose your assets. - -::: - -:::tip - - - -::: - -:::info - -Some **content** with _Markdown_ `syntax`. Check [this `api`](#). - -::: - -:::warning - -Some **content** with _Markdown_ `syntax`. Check [this `api`](#). - -::: - -:::danger[ ] - -Some **content** with _Markdown_ `syntax`. Check [this `api`](#). - -::: - -### Blockquote -> Sodales tempus turpis et eget mauris urna aliquet nisl. Tellus quam aliquam vitae pharetra. In porttitor luctus id neque cras vulputate donec blandit auctor. Amet lacus vitae ullamcorper blandit massa aliquet porttitor magna nisi. Mattis turpis orci neque dui morbi ut. Ullamcorper nullam elementum purus sed eu vel ligula sed. -> Lectus pharetra lobortis faucibus ullamcorper pretium. Sed est amet convallis in. Pharetra risus in viverra porta purus suspendisse. Ultrices sit dictumst et donec risus tellus nec faucibus. Venenatis in scelerisque augue eu aliquet mauris ut. Nunc consequat vitae nulla adipiscing molestie tellus nam. Egestas dapibus vitae faucibus augue ut in. Blandit in viverra feugiat pellentesque augue vestibulum elit nec a. Volutpat risus tristique leo mattis dolor nisl elit. Eget ultrices rutrum vestibulum ornare tristique id congue. -### Code Block -```bash -LPUSH bikes:repairs bike:1 -``` -### Show source -```tsx title="bitterson/App.tsx" link="https://figma.com" -const App = () => ( - - /* ... */ - -); -``` - - -### Show Tabs - - - - ```bash - npm i -g redis - ``` - - - - - ```bash - yarn add -g redis - ``` - - - -### Show Tabs with Source - - -```tsx title="Bittensor/help.ts" link="https://figma.com" -const App = () => ( - - /* ... */ - -); -``` - - -```tsx title="Bittensor/help.js" link="https://github.com/facebook/react" -const App = () => ( - - /* ... */ - -); -``` - - - -### Table -| Programming Language | Year | -|----------------------|------| -| C | 1972 | -| Python | 1991 | -| Java | 1995 | -| JavaScript | 1995 | -| Ruby | 1995 | -| C# | 2000 | -| Swift | 2014 | -| Rust | 2010 | -| Kotlin | 2011 | -| TypeScript | 2012 | - - -### Horizontal line ---- - -### Image -![image info](https://plainbackground.com/plain1024/565b5f.png) - -### Video -[![](https://markdown-videos-api.jorgenkh.no/youtube/f6zXyq4VPP8)](https://www.youtube.com/watch?v=f6zXyq4VPP8) - -## Order List - -### Ordered List -1. First item -2. Second item -3. Third item -4. Fourth item - - -### Unordered List -- First item -- Second item -- Third item -- Fourth item \ No newline at end of file diff --git a/docs/_sphinx-gen.md b/docs/_sphinx-gen.md deleted file mode 100644 index 2390647b9e..0000000000 --- a/docs/_sphinx-gen.md +++ /dev/null @@ -1,37 +0,0 @@ -Building and Publishing Bittensor Python Reference Docs with Sphinx -Install virtual env - -python3 -m venv sphinx_venv -source sphinx_venv/bin/activate - -Install Sphinx and the required extensions - -Download this "sphinx-starter.tar" file: https://drive.google.com/file/d/192MweEv_M4uonylOypQh8tCrO4yjLETP/view?usp=drive_link I made this file to simplify the Sphinx installation and set up so you can get to building the docs quickly. -Do a "tar xvf sphinx-starter.tar" in a new directory. This will extract three files and a directory, i.e., “Makefile”, “make.bat” and “requirements.txt” files, and a "source" directory. -Run "pip install -r requirements.txt". This will install Sphinx and the required extensions. -Build docs locally - -In the "source/conf.py" file, change line 67 (autoapi_dirs = ["/Users/rajkaramchedu/2scratch/bittensor/bittensor"]) and put in the path to your local Bittensor clone repo. -Also on line 28 of “source/conf.py”, put in your path for Python site-packages. -Run "make html". This will create a "build" directory and place reference html docs in it. -Open the docs with the command: open build/html/index.html and you will see all the reference docs, exactly like how the published version looks like, including CSS customizations. -When you edit a docstring in the Bittensor repo, run this command to delete old stuff and rebuild html: rm -r build && make html This will make sure the "build" directory is removed before rebuilding the docs, or else it will use the old stuff in the "build" directory, and we don't want that. -In the “source” directory, there are separate “index.rst” files for Wallet SDK, Bittensor SDK and for legacy docs. If you are generating Wallet API docs, then copy over the “index.rst.btwallet” into “index.rst” before you build the docs. -When you are ready to publish the docs, proceed to the below next step. - -Publish the docs - -To publish the docs on docs.bittensor.com, you will push the entire "build/html" directory into the docs repo. However, before you do that, remove the `html/_sources` directory. This directory contains reStructuredText source files and we don't want to version control them. So, do rm -r build/html/_sources first. -In the docs repo, https://github.com/opentensor/developer-docs/tree/main , this "html" directory is located in the "developer-docs/python-api" path. Always replace the entire "html" directory even if you updated a single word or letter in a docstring. -In the Markdown file that contains links to these Python reference docs and sections, you will use "pathname:///python-api/html/index.html" for linking to the homepage of the Python ref docs. See "docs/bt-api-ref.md" for examples. - -Conf.py - -The "source/conf.py" is where all the configuration for docs generation is defined. -See Sphinx website here: https://www.sphinx-doc.org/en/master/index.html -We use Sphinx AutoAPI extension for docstrings to html generation. See the docs for the extension here: https://sphinx-autoapi.readthedocs.io/en/latest/reference/config.html -We use Sphinx Book Theme with additional custom CSS tweaks. Our custom CSS file is located in the `source/_static` directory. The Sphinx Book Theme docs are in https://sphinx-book-theme.readthedocs.io/en/stable/tutorials/get-started.html -Finally, we use Google style for docstrings. See the description here: https://github.com/opentensor/developer-docs/blob/main/WRITING-STYLE-GUIDE.md#python-docstrings - -That's it. Happy documenting. - diff --git a/docs/_subnet-pages/index.md b/docs/_subnet-pages/index.md deleted file mode 100644 index 7947f213ad..0000000000 --- a/docs/_subnet-pages/index.md +++ /dev/null @@ -1,208 +0,0 @@ ---- -title: "Subnet Pages" -hide_table_of_contents: true ---- - -import { HiAcademicCap } from "react-icons/hi2"; -import { SiRootssage } from "react-icons/si"; - - -# Subnet Pages - -This section presents key information for each subnet. Click on a subnet card to go to its details page. - -:::tip Updating subnet details page -If your subnet details page need updates, then [submit a GitHub issue](https://github.com/opentensor/developer-docs/issues/new). -::: - - - - - - - α} - title='Subnet 1' - link='/subnet-pages/subnet-1' - body='text prompting' /> - β} - title='Subnet 2' - link='/subnet-pages/subnet-2' - body='Omron' /> - γ} - title='Subnet 3' - link='/subnet-pages/subnet-3' - body='data scraping' /> - Δ} - title='Subnet 4' - link='/subnet-pages/subnet-4' - body='Targon' /> - - - - ε} - title='Subnet 5' - link='/subnet-pages/subnet-5' - body='OpenKaito Search' /> - ζ} - title='Subnet 6' - link='/subnet-pages/subnet-6' - body='Nous Finetuning' /> - η} - title='Subnet 7' - link='/subnet-pages/subnet-7' - body='storage subnet' /> - θ} - title='Subnet 8' - link='/subnet-pages/subnet-8' - body='PTN' /> - - - - ι} - title='Subnet 9' - link='/subnet-pages/subnet-9' - body='pretraining' /> - κ} - title='Subnet 10' - link='/subnet-pages/subnet-10' - body='Map reduce' /> - λ} - title='Subnet 11' - link='/subnet-pages/subnet-11' - body='transcription' /> - μ} - title='Subnet 12' - link='/subnet-pages/subnet-12' - body='Compute Horde' /> - - - - ν} - title='Subnet 13' - link='/subnet-pages/subnet-13' - body='data universe' /> - ξ} - title='Subnet 14' - link='/subnet-pages/subnet-14' - body='llm defender' /> - ο} - title='Subnet 15' - link='/subnet-pages/subnet-15' - body='blockchain insights' /> - π} - title='Subnet 16' - link='/subnet-pages/subnet-16' - body='audio subnet' /> - - - - ρ} - title='Subnet 17' - link='/subnet-pages/subnet-17' - body='flavia inference' /> - σ} - title='Subnet 18' - link='/subnet-pages/subnet-18' - body='cortex.t' /> - τ} - title='Subnet 19' - link='/subnet-pages/subnet-19' - body='vision' /> - υ} - title='Subnet 20' - link='/subnet-pages/subnet-20' - body='bitagent' /> - - - - φ} - title='Subnet 21' - link='/subnet-pages/subnet-21' - body='filetao' /> - χ} - title='Subnet 22' - link='/subnet-pages/subnet-22' - body='smart-scrape' /> - ψ} - title='Subnet 23' - link='/subnet-pages/subnet-23' - body='NicheImage' /> - ω} - title='Subnet 24' - link='/subnet-pages/subnet-24' - body='cellular automata' /> - - - - א} - title='Subnet 25' - link='/subnet-pages/subnet-25' - body='distributed training' /> - ב} - title='Subnet 26' - link='/subnet-pages/subnet-26' - body='ImageAlchemy' /> - ג} - title='Subnet 27' - link='/subnet-pages/subnet-27' - body='compute subnet' /> - ד} - title='Subnet 28' - link='/subnet-pages/subnet-28' - body='S&P 500 Oracle' /> - - - - ה} - title='Subnet 29' - link='/subnet-pages/subnet-29' - body='Fractal' /> - ו} - title='Subnet 30' - link='/subnet-pages/subnet-30' - body='Unknown' /> - ז} - title='Subnet 31' - link='/subnet-pages/subnet-31' - body='healthcare' /> - ח} - title='Subnet 32' - link='/subnet-pages/subnet-32' - body='It's AI: LLM Detection' /> - diff --git a/docs/_subnet-pages/subnet-0.md b/docs/_subnet-pages/subnet-0.md deleted file mode 100644 index 7713934d50..0000000000 --- a/docs/_subnet-pages/subnet-0.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: "Subnet 0" ---- - -# Subnet 0 - -## Name - -Root network - -## Netuid -0 - -## Description - -The weights for the subnets are set by the root network validators. These root network weights determine the emissions for all the subnets. See more at [Root network](../emissions.md#root-network). - -## Subnet owner - -Opentensor Foundation - -## GitHub - -https://github.com/opentensor/bittensor - - \ No newline at end of file diff --git a/docs/_subnet-pages/subnet-1.md b/docs/_subnet-pages/subnet-1.md deleted file mode 100644 index 8c8adb7600..0000000000 --- a/docs/_subnet-pages/subnet-1.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: "Subnet 1" ---- - -# Subnet 1 - -## Name - -Text prompting - -## Netuid -1 - -## Description - -Incentivizes subnet miners who produce the best prompt completions in response to the prompts sent by the subnet validators in that subnet. - -## Subnet owner - -Macrocosmos - -## GitHub - -https://github.com/opentensor/prompting - - diff --git a/docs/_subnet-pages/subnet-10.md b/docs/_subnet-pages/subnet-10.md deleted file mode 100644 index a07db36ede..0000000000 --- a/docs/_subnet-pages/subnet-10.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: "Subnet 10" ---- - -# Subnet 10 - -## Name - -Map Reduce - -## Netuid -10 - -## Description - -This subnet (Map Reduce Subnet) incentivizes miners by offering rewards for contributing network bandwidth and memory resources. - -## Subnet owner - -https://github.com/dream-well/map-reduce-subnet/ - -## GitHub - -https://github.com/dream-well/map-reduce-subnet/ - - \ No newline at end of file diff --git a/docs/_subnet-pages/subnet-11.md b/docs/_subnet-pages/subnet-11.md deleted file mode 100644 index 4af96fe40b..0000000000 --- a/docs/_subnet-pages/subnet-11.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: "Subnet 11" ---- - -# Subnet 11 - -## Name - -Transcription Subnet - -## Netuid -11 - -## Description - -Miners are responsible for transcribing spoken language into accurate written text using advanced speech-to-text models, while validators ensure the quality and reliability of these transcriptions. This synergetic process not only makes audio content universally accessible and searchable but also significantly amplifies its value across diverse sectors. - -## Subnet owner - -https://github.com/Cazure8/transcription-subnet - -## GitHub - -https://github.com/Cazure8/transcription-subnet - - \ No newline at end of file diff --git a/docs/_subnet-pages/subnet-12.md b/docs/_subnet-pages/subnet-12.md deleted file mode 100644 index 03a7db0d7b..0000000000 --- a/docs/_subnet-pages/subnet-12.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: "Subnet 12" ---- - -# Subnet 12 - -## Name - -ComputeHorde - -## Netuid -12 - -## Description - -A subnet that provides compute resources. - -## Subnet owner - -https://github.com/backend-developers-ltd/ComputeHorde - -## GitHub - -https://github.com/backend-developers-ltd/ComputeHorde - - \ No newline at end of file diff --git a/docs/_subnet-pages/subnet-13.md b/docs/_subnet-pages/subnet-13.md deleted file mode 100644 index 35c7e399fd..0000000000 --- a/docs/_subnet-pages/subnet-13.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: "Subnet 13" ---- - -# Subnet 13 - -## Name - -Data Universe - -## Netuid -13 - -## Description - -Data Universe subnet collects and stores large amounts of data from across a wide-range of sources, for use by other Subnets. This subnet is built from the ground-up with a focus on decentralization and scalability. There is no centralized entity that controls the data; the data is stored across all Miner's on the network and is queryable via the Validators. - -At launch, Data Universe is able to support up to 50 Petabytes of data across 200 miners, while only requiring ~10GB of storage on the Validator. - -## Subnet owner - -https://github.com/RusticLuftig/data-universe/ - -## GitHub - -https://github.com/RusticLuftig/data-universe/ - - \ No newline at end of file diff --git a/docs/_subnet-pages/subnet-14.md b/docs/_subnet-pages/subnet-14.md deleted file mode 100644 index ef037ae626..0000000000 --- a/docs/_subnet-pages/subnet-14.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: "Subnet 14" ---- - -# Subnet 14 - -## Name - -Bittensor LLM Defender Subnet - -## Netuid -14 - -## Description - -The LLM Defender subnet provides Large Language Model (LLM) developers a way to decentralize the computing required to detect and prevent various attacks and exploits against LLM applications. - -## Subnet owner - -https://github.com/ceterum1/llm-defender-subnet/ - -## GitHub - -https://github.com/ceterum1/llm-defender-subnet/ - - \ No newline at end of file diff --git a/docs/_subnet-pages/subnet-15.md b/docs/_subnet-pages/subnet-15.md deleted file mode 100644 index eb9f566647..0000000000 --- a/docs/_subnet-pages/subnet-15.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: "Subnet 15" ---- - -# Subnet 15 - -## Name - -Bittensor Blockchain Insights Subnet - -## Netuid -15 - -## Description - -Blockchain Insights Subnet is an innovative project focusing on transforming raw blockchain data into structured graph models. This project aims to provide comprehensive insights into various blockchain activities, including simple transactions, DeFi protocol transactions, and NFT exchanges. - -## Subnet owner - -https://github.com/blockchain-insights/blockchain-data-subnet/ - -## GitHub - -https://github.com/blockchain-insights/blockchain-data-subnet/ - - \ No newline at end of file diff --git a/docs/_subnet-pages/subnet-16.md b/docs/_subnet-pages/subnet-16.md deleted file mode 100644 index 52101bf4fa..0000000000 --- a/docs/_subnet-pages/subnet-16.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: "Subnet 16" ---- - -# Subnet 16 - -## Name - -Audio Generation Subnetwork - -## Netuid -16 - -## Description - -This subnetwork is a decentralized system designed for text-to-audio applications within the Bittensor network. - -## Subnet owner - -https://github.com/UncleTensor/AudioSubnet/ - -## GitHub - -https://github.com/UncleTensor/AudioSubnet/ - - \ No newline at end of file diff --git a/docs/_subnet-pages/subnet-17.md b/docs/_subnet-pages/subnet-17.md deleted file mode 100644 index 5b05013bda..0000000000 --- a/docs/_subnet-pages/subnet-17.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: "Subnet 17" ---- - -# Subnet 17 - -## Name - -Flavia - Model Inference Subnet - -## Netuid -17 - -## Description - -The Flavia subnet focuses on decentralized model inference at different scales. - -## Subnet owner - -https://github.com/CortexLM/flavia/ - -## GitHub - -https://github.com/CortexLM/flavia/ - - \ No newline at end of file diff --git a/docs/_subnet-pages/subnet-18.md b/docs/_subnet-pages/subnet-18.md deleted file mode 100644 index 28d809165c..0000000000 --- a/docs/_subnet-pages/subnet-18.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: "Subnet 18" ---- - -# Subnet 18 - -## Name - -Cortex.t Subnet for AI Development and Synthetic Data Generation. - -## Netuid -18 - -## Description - -Cortex.t offers a dual-purpose solution that caters to the needs of app developers and innovators in the AI space. - -This subnet is meticulously designed to deliver reliable, high-quality text and image responses through API usage, utilising the decentralised Bittensor network. This subnet serves as a cornerstone for creating a fair, transparent, and manipulation-free environment for the incentivised production of intelligence (mining) and generation and fulfilment of diverse user prompts. - -## Subnet owner - -https://github.com/corcel-api/cortex.t/ - -## GitHub - -https://github.com/corcel-api/cortex.t/ - - \ No newline at end of file diff --git a/docs/_subnet-pages/subnet-19.md b/docs/_subnet-pages/subnet-19.md deleted file mode 100644 index 9a5048e994..0000000000 --- a/docs/_subnet-pages/subnet-19.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: "Subnet 19" ---- - -# Subnet 19 - -## Name - -Vision - -## Netuid -19 - -## Description - -This subnet is a world of images unlocked. Recognition, Embeddings, Object detection, Segmentation. Here, we will do it all. Starting with Meta's Segment Anything Model. - -## Subnet owner - -https://github.com/namoray/vision/ - -## GitHub - -https://github.com/namoray/vision/ - - \ No newline at end of file diff --git a/docs/_subnet-pages/subnet-2.md b/docs/_subnet-pages/subnet-2.md deleted file mode 100644 index 4a9deb59e2..0000000000 --- a/docs/_subnet-pages/subnet-2.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: "Subnet 2" ---- - -# Subnet 2 - -## Name - -Omron (𝜏, β) - -## Netuid -2 - -## Description - -The purpose of the Omron subnet is to provide verified AI inferences in order to optimize staking and re-staking yields. - -Omron allows a variety of yield optimization models to be hosted and run against the Bittensor network while being zk-verified. - -In specific, this subnet enhances the Bittensor network by providing utility to protocols and networks outside the Bittensor ecosystem. As a result, this subnet amplifies Bittensor’s mission throughout a variety of such external protocols and networks. - -Furthermore, this subnet provides internal benefits by guiding Bittensor users towards the most profitable validators to delegate to. This, in turn, benefits delegators and thereby benefits the Bittensor network as a whole. - -## Subnet owner - -https://twitter.com/omron_ai - -## GitHub - -https://github.com/inference-labs-inc/omron-subnet - - \ No newline at end of file diff --git a/docs/_subnet-pages/subnet-20.md b/docs/_subnet-pages/subnet-20.md deleted file mode 100644 index 43694dd109..0000000000 --- a/docs/_subnet-pages/subnet-20.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -title: "Subnet 20" ---- - -# Subnet 20 - -## Name - -BitAgent - -## Netuid - -20 - -## Description - -BitAgent has 2 core thrusts: - -1. **Q&A/Tasking**, available in a few flavors: -- a) with your data in real time (BYOD) -- b) summarization of large data (BYOD) -- c) logic-based reasoning -- d) agency (tool execution, operation performance) - -2. **Integrated Orchestration** - this is task completion initiated by natural language for application. - -## Subnet owner - -https://github.com/RogueTensor/bitagent_subnet - - -## GitHub - -https://github.com/RogueTensor/bitagent_subnet - - \ No newline at end of file diff --git a/docs/_subnet-pages/subnet-21.md b/docs/_subnet-pages/subnet-21.md deleted file mode 100644 index 7f171ec06d..0000000000 --- a/docs/_subnet-pages/subnet-21.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: "Subnet 21" ---- - -# Subnet 21 - -## Name - -FileTAO - -## Netuid -21 - -## Description - -FileTAO implements a novel, multi-layered zero-knowledge interactive proof-of-spacetime algorithm. It cleverly uses Pedersen commitments, random challenges leveraging elliptic curve cryptography, sequential seed-based chained hash verification, and merkle proofs to achieve an efficient, robust, secure, and highly available decentralized storage system on the Bittensor network. - -## Subnet owner - -https://github.com/ifrit98/storage-subnet/ - -## GitHub - -https://github.com/ifrit98/storage-subnet/ - - \ No newline at end of file diff --git a/docs/_subnet-pages/subnet-22.md b/docs/_subnet-pages/subnet-22.md deleted file mode 100644 index 5c92286bfd..0000000000 --- a/docs/_subnet-pages/subnet-22.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: "Subnet 22" ---- - -# Subnet 22 - -## Name - -Smart-Scrape - -## Netuid -22 - -## Description - -Smart-Scrape subnet is a cutting-edge tool hosted, designed for effective and simplified analysis of Twitter data. This subnet is ideal for researchers, marketers, and data analysts who seek to extract insightful information from Twitter with ease. - -## Subnet owner - -https://github.com/surcyf123/smart-scrape/ - -## GitHub - -https://github.com/surcyf123/smart-scrape/ - - \ No newline at end of file diff --git a/docs/_subnet-pages/subnet-23.md b/docs/_subnet-pages/subnet-23.md deleted file mode 100644 index e11fddd3de..0000000000 --- a/docs/_subnet-pages/subnet-23.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: "Subnet 23" ---- - -# Subnet 23 - -## Name - -NicheImage - -## Netuid - -23 - -## Description - -Image Generating Subnet - -## Subnet owner - -https://github.com/NicheTensor/NicheImage/ - -## GitHub - -https://github.com/NicheTensor/NicheImage/ - - \ No newline at end of file diff --git a/docs/_subnet-pages/subnet-24.md b/docs/_subnet-pages/subnet-24.md deleted file mode 100644 index 75f8494750..0000000000 --- a/docs/_subnet-pages/subnet-24.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: "Subnet 24" ---- - -# Subnet 24 - -## Name - -Cellular Automata - -## Netuid -24 - -## Description - -The primary focus of this subnet is to run, analyze, and store cellular automata to serve as a research and science accelerator. The subnet will serve as a conduit between cellular automata researchers in the scientific community and the computational resources available through the Bittensor community of miners and validators. - - -## Subnet owner - -https://github.com/vn-automata/bt-automata - -## GitHub - -https://github.com/vn-automata/bt-automata - - \ No newline at end of file diff --git a/docs/_subnet-pages/subnet-25.md b/docs/_subnet-pages/subnet-25.md deleted file mode 100644 index eb32b5c566..0000000000 --- a/docs/_subnet-pages/subnet-25.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: "Subnet 25" ---- - -# Subnet 25 - -## Name - -Distributed Training Subnet - -## Netuid -25 - -## Description - -Distributed Training. - -## Subnet owner -https://github.com/bit-current/DistributedTraining - -## GitHub -https://github.com/bit-current/DistributedTraining - - diff --git a/docs/_subnet-pages/subnet-26.md b/docs/_subnet-pages/subnet-26.md deleted file mode 100644 index 9544317121..0000000000 --- a/docs/_subnet-pages/subnet-26.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: "Subnet 26" ---- - -# Subnet 26 - -## Name - -Image Alchemy - -## Netuid -26 - -## Description - -Image Alchemy - -## Subnet owner - -https://github.com/Supreme-Emperor-Wang/ImageAlchemy/ - -## GitHub - -https://github.com/Supreme-Emperor-Wang/ImageAlchemy/ - - \ No newline at end of file diff --git a/docs/_subnet-pages/subnet-27.md b/docs/_subnet-pages/subnet-27.md deleted file mode 100644 index 3255f93e33..0000000000 --- a/docs/_subnet-pages/subnet-27.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: "Subnet 27" ---- - -# Subnet 27 - -## Name - -Compute Subnet - -## Netuid -27 - -## Description - -This is a compute-composable subnet, integrating various cloud platforms (e.g., Runpod, Lambda, AWS) into a cohesive unit. Its purpose is to enable higher-level cloud platforms to offer seamless compute composability across different underlying platforms. - -With the proliferation of cloud platforms, there's a growing need for a subnet that can seamlessly integrate these platforms, allowing efficient resource sharing and allocation. This compute-composable subnet empowers nodes to contribute computational power, with validators ensuring the integrity and efficiency of the shared resources. - -## Subnet owner - -https://github.com/neuralinternet/compute-subnet/ - -## GitHub - -https://github.com/neuralinternet/compute-subnet/ - - \ No newline at end of file diff --git a/docs/_subnet-pages/subnet-28.md b/docs/_subnet-pages/subnet-28.md deleted file mode 100644 index e097541916..0000000000 --- a/docs/_subnet-pages/subnet-28.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: "Subnet 28" ---- - -# Subnet 28 - -## Name - -Foundry S&P 500 Oracle - -## Netuid -28 - -## Description - -The Foundry S&P 500 Oracle incentivizes miners to frequently predict the S&P 500 price index during trading hours (9:30 AM - 4 PM Eastern Standard Time). This subnet serves as a suitable starting point for the traditional financial markets predictions given the S&P 500 index’s utility, accessibility, and world-wide acceptance. - -In this subnet, subnet validators send subnet miners a timestamp of a future time, for which the miners must make an S&P 500 price prediction. The miners must immediately respond with their price prediction for that given timestamp. Validators store these predictions and calculate the scores of the miners once the predictions mature. Miners then receive ranks to stack up against one another, naturally incentivizing competition. - -## Subnet owner -https://foundrydigital.com/accelerate/ - -## GitHub - -https://github.com/teast21/snpOracle - - diff --git a/docs/_subnet-pages/subnet-29.md b/docs/_subnet-pages/subnet-29.md deleted file mode 100644 index ea7dbe6d10..0000000000 --- a/docs/_subnet-pages/subnet-29.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: "Subnet 29" ---- - -# Subnet 29 - -## Name - -Fractal: Text-to-Video Generation Grid for Edge-Node Inference - -## Netuid -29 - -## Description - -Fractal, taking inspiration from Manifold Labs' Deterministic Verification Network, is utilizing deterministic verification to create a grid of decentralized nodes to perform inference for video generation. By incentivizing users to host text-to-video models, this subnet allows Fractal to develop a mechanism that optimizes how end-user inference requests are handled to minimize latency. Additionally, the subnet is incredibly gamification-resistant, as a random seed is generated for each inference request, and if the Verifier and Prover seeds do not match, the Prover will be penalized. - -## Subnet owner - -https://github.com/fractal-net/fractal - -## GitHub - -https://github.com/fractal-net/fractal - - \ No newline at end of file diff --git a/docs/_subnet-pages/subnet-3.md b/docs/_subnet-pages/subnet-3.md deleted file mode 100644 index 333247b738..0000000000 --- a/docs/_subnet-pages/subnet-3.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: "Subnet 3" ---- - -# Subnet 3 - -## Name - -Scraping Subnet - -## Netuid -3 - -## Description - -Data scraping is a critical component in numerous AI and machine learning models, often acting as the foundational layer for various subnets, including [Subnet 1](./subnet-1.md). - -The objective of this subnet is to harvest data from platforms such as Reddit, Twitter, and other social media sites, and aggregate this information into shared storage solutions like Wasabi s3 storage. - -Looking ahead, the developers of this subnet intend to leverage the storage subnet of Bittensor to augment the data storage capabilities. - -## Subnet owner - -https://github.com/gitphantomman/scraping_subnet/ - -## GitHub - -https://github.com/gitphantomman/scraping_subnet/ - - \ No newline at end of file diff --git a/docs/_subnet-pages/subnet-30.md b/docs/_subnet-pages/subnet-30.md deleted file mode 100644 index 16addc2186..0000000000 --- a/docs/_subnet-pages/subnet-30.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: "Subnet 30" ---- - -# Subnet 30 - -## Name - -TBD - -## Netuid -30 - -## Description - -TBD - -## Subnet owner - -TBD - -## GitHub - -TBD - - \ No newline at end of file diff --git a/docs/_subnet-pages/subnet-31.md b/docs/_subnet-pages/subnet-31.md deleted file mode 100644 index 9f5e56653b..0000000000 --- a/docs/_subnet-pages/subnet-31.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: "Subnet 31" ---- - -# Subnet 31 - -## Name - -Healthcare subnet - -## Netuid -31 - -## Description - -In this innovative healthcare subnet, miners play a crucial role in contributing to disease diagnosis by predicting from medical images. Through continuous training, miners strive to improve their models, with more accurate models earning substantial rewards. Miners have the flexibility to adapt and enhance the structure of their models, datasets, and other factors influencing model accuracy. This collaborative effort aims to advance disease prediction and underscores the vital role miners play in shaping the future of medical diagnostics. - -Validators play a pivotal role in evaluating miner's models by periodically sending diverse images for assessment. They meticulously score miners based on their responses, contributing to the ongoing refinement of models and ensuring the highest standards of performance and accuracy in our collaborative network. - - -## Subnet owner - -https://github.com/bthealthcare/healthcare-subnet - -## GitHub - -https://github.com/bthealthcare/healthcare-subnet - - \ No newline at end of file diff --git a/docs/_subnet-pages/subnet-32.md b/docs/_subnet-pages/subnet-32.md deleted file mode 100644 index da6bed0b18..0000000000 --- a/docs/_subnet-pages/subnet-32.md +++ /dev/null @@ -1,77 +0,0 @@ ---- -title: "Subnet 32" ---- - -# Subnet 32 - -## Name - -It's AI: LLM Detection solution - -## Netuid -32 - -## Description - -This subnet focuses on the detection of AI-generated content. Given the rapid growth of LLM-generated text, such as -ChatGPT's output of 100 billion words daily compared to humans' 100 trillion, -we believe that the ability to accurately determine AI-generated text will become increasingly necessary. - -For example, here are some scenarios where LLM detection is important: - -* **For ML-engineers**. Whether you are sourcing training data, developing a foundational LLM, or fine-tuning on your own data, -you need to ensure that generative text does not make it into your training set. We can help. -* **For teachers**. While tools like ChatGPT offer numerous benefits for the educational sector, these tools also present opportunities for students to cheat on assignments and exams. -Therefore, it is crucial to differentiate between responses authored by genuine students and those generated by LLMs. -* **For bloggers**. Many bloggers are now faced with a lot of AI-generated comments in -their social networks. These comments are not really meaningful, yet they attract the attention of their audience and promote unrelated products. -With our subnet, you can easily identify which comments are ai-generated and automatically ban them. - -And many more, like: -* **For writers**. By utilizing an LLM detection system, writers can assess their text, segment by segment, to identify sections that appear -machine-generated. This enables the writers to refine these areas to enhance the overall human-like quality of their writing. -* **For recruiting**. Have you noticed these days you are receiving far more applications with lower candidate quality? -AI has enabled people to spam the hiring teams with artificially written cover -letters and assessments. We help you find the candidates who care about your mission and your quality standards. -* **For cybersecurity**. Scammers can leverage LLMs to quickly and easily create realistic and personalized phishing emails. -We can help you determine the provenance of any document or email you are reviewing. - -As you can see there are a lot of areas where AI detection can -be very helpful. We believe that this LLM-detection subnet -not only is a useful tool at a good price for people to use, -but it also encourages competition to make better and smarter ways to spot AI-generated content. - -## Subnet owner - -[https://github.com/It-s-AI/llm-detection](https://github.com/It-s-AI/llm-detection.git) - -## GitHub - -[https://github.com/It-s-AI/llm-detection](https://github.com/It-s-AI/llm-detection.git) - - diff --git a/docs/_subnet-pages/subnet-4.md b/docs/_subnet-pages/subnet-4.md deleted file mode 100644 index bf594d0a6f..0000000000 --- a/docs/_subnet-pages/subnet-4.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: "Subnet 4" ---- - -# Subnet 4 - -## Name - -**TARGON**: A Redundant Deterministic Verification of Large Language Models. - -## Netuid -4 - -## Description - -TARGON is a redundant deterministic verification mechanism that can be used to interpret and analyze ground truth sources and a query. - -## Subnet owner - -https://github.com/manifold-inc/targon/ - -## GitHub - -https://github.com/manifold-inc/targon/ - - \ No newline at end of file diff --git a/docs/_subnet-pages/subnet-5.md b/docs/_subnet-pages/subnet-5.md deleted file mode 100644 index 37c9df1a6b..0000000000 --- a/docs/_subnet-pages/subnet-5.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: "Subnet 5" ---- - -# Subnet 5 - -## Name - -OpenKaito - -## Netuid -5 - -## Description - -A search index plays a crucial role in accessing information within Web3 and serves as the foundation for RAG applications. OpenKaito is dedicated to constructing a decentralized search index for Web3, and its incentive mechanism can be outlined as follows: - -1. Miners are encouraged to develop high-quality and efficient indexing and ranking schemes for Web3 data. - -2. Validators will submit structured or vector retrieval queries to perform spot checks on the indexing quality of the miners, using LLM. For instance, for a query "optimism", validators should anticipate receiving high quality content from miners. Miners are incentivized to differentiate between the English word "optimism" and the crypto project "optimism" within massive amounts of X (Twitter) data. The final reward will be determined based on the quality, ranking, recency, and uniqueness of the data indexed by miners. - -3. By collectively executing large-scale content understanding, indexing, and ranking, a decentralized search engine and data analytics platform can be established on top of OpenKaito. - -## Subnet owner - -https://www.kaito.ai - -## GitHub - -https://github.com/OpenKaito/openkaito - - diff --git a/docs/_subnet-pages/subnet-6.md b/docs/_subnet-pages/subnet-6.md deleted file mode 100644 index 5c97e45cb7..0000000000 --- a/docs/_subnet-pages/subnet-6.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: "Subnet 6" ---- - -# Subnet 6 - -## Name - -Nous Finetuning Subnet - -## Netuid -6 - -## Description - -The Nous-Bittensor subnet rewards miners for fine-tuning Large Language Models (LLMs) with data generated from a continuous stream of synthetic data provided by subnet 18 (also on Bittensor). It is the first-ever continuous fine-tuning benchmark, with new data generated daily, and the first incentivized fine-tuning benchmark. - -Additionally, it is the first Bittensor subnet to perform true cross-boundary communication, where data from one subnet is utilized in a secondary subnet. - -## Subnet owner - -[Nous Research](https://nousresearch.com/) - -## GitHub - -https://github.com/NousResearch/finetuning-subnet - - \ No newline at end of file diff --git a/docs/_subnet-pages/subnet-7.md b/docs/_subnet-pages/subnet-7.md deleted file mode 100644 index d6d0562147..0000000000 --- a/docs/_subnet-pages/subnet-7.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: "Subnet 7" ---- - -# Subnet 7 - -## Name - -Storage subnet. - -## Netuid - -7 - -## Description - -The storage subnet will allow nodes to contribute storage space, employing a prototype incentive mechanism similar to Filecoin. It will offer decentralized storage solutions, allowing nodes to serve their hard drive space to the network, proven to validators utilizing Yuma consensus. - -## Subnet owner - -https://github.com/tensorage/tensorage/ - -## GitHub - -https://github.com/tensorage/tensorage/ - - \ No newline at end of file diff --git a/docs/_subnet-pages/subnet-8.md b/docs/_subnet-pages/subnet-8.md deleted file mode 100644 index fad6e64ce0..0000000000 --- a/docs/_subnet-pages/subnet-8.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: "Subnet 8" ---- - -# Subnet 8 - -## Name - -Proprietary Trading Network (PTN) - -## Netuid - -8 - -## Description - -The PTN subnet receives signals from quant and machine learning trading systems, and delivers world's most complete trading signals across a variety of asset classes. - -PTN is the most challenging & competitive subnet in the world. Our subnet miners must provide futures-based signals (long and short) that are highly efficient and effective across various markets (forex, crypto, indices). The top subnet miners provide most returns while never exceeding the drawdown limits. - -## Subnet owner - -[https://www.taoshi.io/](https://www.taoshi.io/) - -## GitHub - -https://github.com/taoshidev/proprietary-trading-network - - diff --git a/docs/_subnet-pages/subnet-9.md b/docs/_subnet-pages/subnet-9.md deleted file mode 100644 index 467f515eb7..0000000000 --- a/docs/_subnet-pages/subnet-9.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: "Subnet 9" ---- - -# Subnet 9 - -## Name - -Pretrain Subnet - -## Netuid -9 - -## Description - -This subnet rewards miners for producing pretrained Foundation-Models on the Falcon Refined Web dataset. It acts like a continuous benchmark whereby miners are rewarded for attaining the best losses on randomly sampled pages of Falcon given a consistent model architecture. The reward mechanism works as follows: - -1. Miners train and periodically host trained model weights linked to their miner key as exampled by the code in neurons/miner.py. -2. Validators run a continuous eval on the hosted models, performing the validation system outlined in neurons/validator.py and setting weights to the chain based on the performance of each miner on the Falcon dataset. -3. The chain aggregates weights from all active validators and runs Yuma Consensus to determine the proportion of TAO emission rewarded to miners and validators. - -## Subnet owner - -Macrocosmos & collaborators - -## GitHub - -https://github.com/RaoFoundation/pretraining - - diff --git a/docs/bittensor-networks.md b/docs/bittensor-networks.md deleted file mode 100644 index fefbd67db6..0000000000 --- a/docs/bittensor-networks.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: "Bittensor Networks" ---- - -# Bittensor Networks - -The below table presents Bittensor networks and a few details: - -| DESCRIPTION | MAINNET | TESTNET | DEVNET | -|:---------------------|:------------------------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------|:----------------------------------------------------------------------------------------| -| **Chain URL** | wss://entrypoint-finney.opentensor.ai:443 | wss://test.finney.opentensor.ai:443 | wss://dev.chain.opentensor.ai:443 | -| **Example Usage** | Default | `btcli wallet swap_hotkey --subtensor.chain_endpoint wss://dev.chain.opentensor.ai:443` **or** `btcli wallet swap_hotkey --subtensor.network test` | `btcli wallet swap_hotkey --subtensor.chain_endpoint wss://dev.chain.opentensor.ai:443` | -| **Block processing** | One block every 12 seconds | One block every 12 seconds | One block every 12 seconds | -| **Mainnet Archive** | wss://archive.chain.opentensor.ai:443 | None | None | -| **Mainnet Lite** | wss://lite.chain.opentensor.ai:443 | None | None | -| **Experimental Mainnet Lite** | wss://lite.finney.test.opentensor.ai:443 | None | None | -| **Network Purpose** | For all | For all | **For OTF-internal development only** | -| **Faucet** | None | None | Available on internal project-basis | -| **Test TAO** | None | Available on request (not compatible with devnet test TAO) | Available internally on request (not compatible with testnet test TAO) | - diff --git a/docs/btcli.md b/docs/btcli.md deleted file mode 100644 index 771bd50b8c..0000000000 --- a/docs/btcli.md +++ /dev/null @@ -1,6882 +0,0 @@ ---- -title: "Bittensor CLI: btcli Reference Document" ---- - -# Bittensor CLI: `btcli` Reference Document - -Command line interface (CLI) for Bittensor. Uses the values in the configuration file. These values can be overriden by passing them explicitly in the command line. - -See [Getting Started](./getting-started/install-btcli.md) to install `btcli`. - -Command line interface (CLI) for Bittensor. Uses the values in the configuration file. These values can be - overriden by passing them explicitly in the command line. - -**Usage**: - -```console -btcli [OPTIONS] COMMAND [ARGS]... -``` - -**Options**: - -* `--version`: Show BTCLI version -* `--commands`: Show BTCLI commands -* `--install-completion`: Install completion for the current shell. -* `--show-completion`: Show completion for the current shell, to copy it or customize the installation. -* `--help`: Show this message and exit. - -**Commands**: - -* `config`: Config commands, aliases: `c`, `conf` -* `conf` -* `c` -* `wallet`: Wallet commands, aliases: `wallets`, `w` -* `w` -* `wallets` -* `stake`: Stake commands, alias: `st` -* `st` -* `sudo`: Sudo commands, alias: `su` -* `su` -* `subnets`: Subnets commands, alias: `s`, `subnet` -* `s` -* `subnet` -* `weights`: Weights commands, aliases: `wt`, `weight` -* `wt` -* `weight` -* `utils` - -## `btcli config` - -**Usage**: - -```console -btcli config [OPTIONS] COMMAND [ARGS]... -``` - -**Options**: - -* `--help`: Show this message and exit. - -**Commands**: - -* `set`: Sets or updates configuration values in... -* `get`: Prints the current config file in a table. -* `clear`: Clears the fields in the config file and... -* `metagraph`: Command option to configure the display of... - -### `btcli config set` - -Sets or updates configuration values in the BTCLI config file. - -This command allows you to set default values that will be used across all BTCLI commands. - -**Usage:** - -Interactive mode: - ``` - btcli config set - ``` - -Set specific values: - ``` - btcli config set --wallet-name default --network finney - ``` - ``` - btcli config set --safe-staking --rate-tolerance 0.1 - ``` - -Note: -- Network values can be network names (e.g., 'finney', 'test') or websocket URLs -- Rate tolerance is specified as a decimal (e.g., 0.05 for 0.05%) -- Changes are saved to ~/.bittensor/btcli.yaml -- Use `btcli config get` to view current settings - -**Usage**: - -```console -btcli config set [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--cache, --cache / --no-cache, --no_cache`: Disable caching of some commands. This will disable the `--reuse-last` and `--html` flags on commands such as `subnets metagraph`, `stake show` and `subnets list`. -* `--slippage, --slippage-tolerance, --tolerance FLOAT`: Set the rate tolerance percentage for transactions (e.g. 0.1 for 0.1%). -* `--safe-staking, --safe / --no-safe-staking, --unsafe`: Enable or disable safe staking mode. -* `--allow-partial-stake, --partial, --allow / --no-allow-partial-stake, --no-partial, --not-allow` -* `--help`: Show this message and exit. - -### `btcli config get` - -Prints the current config file in a table. - -**Usage**: - -```console -btcli config get [OPTIONS] -``` - -**Options**: - -* `--help`: Show this message and exit. - -### `btcli config clear` - -Clears the fields in the config file and sets them to 'None'. - - - - To clear the 'chain' and 'network' fields: - - ``` - btcli config clear --chain --network - ``` - - - To clear your config entirely: - - ``` - btcli config clear --all - ``` - -**Usage**: - -```console -btcli config clear [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name` -* `-p, --wallet-path, --wallet_path, --wallet.path` -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey` -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint` -* `--cache` -* `--slippage, --slippage-tolerance, --tolerance` -* `--safe-staking, --safe / --no-safe-staking, --unsafe`: [default: no-safe-staking] -* `--allow-partial-stake, --partial, --allow / --no-allow-partial-stake, --no-partial, --not-allow`: [default: no-allow-partial-stake] -* `--all` -* `--help`: Show this message and exit. - -### `btcli config metagraph` - -Command option to configure the display of the metagraph columns. - -**Usage**: - -```console -btcli config metagraph [OPTIONS] -``` - -**Options**: - -* `--reset`: Restore the display of metagraph columns to show all columns. -* `--help`: Show this message and exit. - -## `btcli conf` - -**Usage**: - -```console -btcli conf [OPTIONS] COMMAND [ARGS]... -``` - -**Options**: - -* `--help`: Show this message and exit. - -**Commands**: - -* `set`: Sets or updates configuration values in... -* `get`: Prints the current config file in a table. -* `clear`: Clears the fields in the config file and... -* `metagraph`: Command option to configure the display of... - -### `btcli conf set` - -Sets or updates configuration values in the BTCLI config file. - -This command allows you to set default values that will be used across all BTCLI commands. - -**Usage:** - -Interactive mode: - ``` - btcli config set - ``` - -Set specific values: - ``` - btcli config set --wallet-name default --network finney - ``` - ``` - btcli config set --safe-staking --rate-tolerance 0.1 - ``` - -Note: -- Network values can be network names (e.g., 'finney', 'test') or websocket URLs -- Rate tolerance is specified as a decimal (e.g., 0.05 for 0.05%) -- Changes are saved to ~/.bittensor/btcli.yaml -- Use `btcli config get` to view current settings - -**Usage**: - -```console -btcli conf set [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--cache, --cache / --no-cache, --no_cache`: Disable caching of some commands. This will disable the `--reuse-last` and `--html` flags on commands such as `subnets metagraph`, `stake show` and `subnets list`. -* `--slippage, --slippage-tolerance, --tolerance FLOAT`: Set the rate tolerance percentage for transactions (e.g. 0.1 for 0.1%). -* `--safe-staking, --safe / --no-safe-staking, --unsafe`: Enable or disable safe staking mode. -* `--allow-partial-stake, --partial, --allow / --no-allow-partial-stake, --no-partial, --not-allow` -* `--help`: Show this message and exit. - -### `btcli conf get` - -Prints the current config file in a table. - -**Usage**: - -```console -btcli conf get [OPTIONS] -``` - -**Options**: - -* `--help`: Show this message and exit. - -### `btcli conf clear` - -Clears the fields in the config file and sets them to 'None'. - - - - To clear the 'chain' and 'network' fields: - - ``` - btcli config clear --chain --network - ``` - - - To clear your config entirely: - - ``` - btcli config clear --all - ``` - -**Usage**: - -```console -btcli conf clear [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name` -* `-p, --wallet-path, --wallet_path, --wallet.path` -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey` -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint` -* `--cache` -* `--slippage, --slippage-tolerance, --tolerance` -* `--safe-staking, --safe / --no-safe-staking, --unsafe`: [default: no-safe-staking] -* `--allow-partial-stake, --partial, --allow / --no-allow-partial-stake, --no-partial, --not-allow`: [default: no-allow-partial-stake] -* `--all` -* `--help`: Show this message and exit. - -### `btcli conf metagraph` - -Command option to configure the display of the metagraph columns. - -**Usage**: - -```console -btcli conf metagraph [OPTIONS] -``` - -**Options**: - -* `--reset`: Restore the display of metagraph columns to show all columns. -* `--help`: Show this message and exit. - -## `btcli c` - -**Usage**: - -```console -btcli c [OPTIONS] COMMAND [ARGS]... -``` - -**Options**: - -* `--help`: Show this message and exit. - -**Commands**: - -* `set`: Sets or updates configuration values in... -* `get`: Prints the current config file in a table. -* `clear`: Clears the fields in the config file and... -* `metagraph`: Command option to configure the display of... - -### `btcli c set` - -Sets or updates configuration values in the BTCLI config file. - -This command allows you to set default values that will be used across all BTCLI commands. - -**Usage:** -Interactive mode: - ``` - btcli config set - ``` - -Set specific values: - ``` - btcli config set --wallet-name default --network finney - ``` - ``` - btcli config set --safe-staking --rate-tolerance 0.1 - ``` - -Note: -- Network values can be network names (e.g., 'finney', 'test') or websocket URLs -- Rate tolerance is specified as a decimal (e.g., 0.05 for 0.05%) -- Changes are saved to ~/.bittensor/btcli.yaml -- Use `btcli config get` to view current settings - -**Usage**: - -```console -btcli c set [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--cache, --cache / --no-cache, --no_cache`: Disable caching of some commands. This will disable the `--reuse-last` and `--html` flags on commands such as `subnets metagraph`, `stake show` and `subnets list`. -* `--slippage, --slippage-tolerance, --tolerance FLOAT`: Set the rate tolerance percentage for transactions (e.g. 0.1 for 0.1%). -* `--safe-staking, --safe / --no-safe-staking, --unsafe`: Enable or disable safe staking mode. -* `--allow-partial-stake, --partial, --allow / --no-allow-partial-stake, --no-partial, --not-allow` -* `--help`: Show this message and exit. - -### `btcli c get` - -Prints the current config file in a table. - -**Usage**: - -```console -btcli c get [OPTIONS] -``` - -**Options**: - -* `--help`: Show this message and exit. - -### `btcli c clear` - -Clears the fields in the config file and sets them to 'None'. - - - - To clear the 'chain' and 'network' fields: - - ``` - btcli config clear --chain --network - ``` - - - To clear your config entirely: - - ``` - btcli config clear --all - ``` - -**Usage**: - -```console -btcli c clear [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name` -* `-p, --wallet-path, --wallet_path, --wallet.path` -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey` -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint` -* `--cache` -* `--slippage, --slippage-tolerance, --tolerance` -* `--safe-staking, --safe / --no-safe-staking, --unsafe`: [default: no-safe-staking] -* `--allow-partial-stake, --partial, --allow / --no-allow-partial-stake, --no-partial, --not-allow`: [default: no-allow-partial-stake] -* `--all` -* `--help`: Show this message and exit. - -### `btcli c metagraph` - -Command option to configure the display of the metagraph columns. - -**Usage**: - -```console -btcli c metagraph [OPTIONS] -``` - -**Options**: - -* `--reset`: Restore the display of metagraph columns to show all columns. -* `--help`: Show this message and exit. - -## `btcli view dashboard` - -Display html dashboard with subnets list, stake, and neuron information. - -**Usage**: - -```console -btcli view dashboard -``` - -## `btcli wallet` - -**Usage**: - -```console -btcli wallet [OPTIONS] COMMAND [ARGS]... -``` - -**Options**: - -* `--help`: Show this message and exit. - -**Commands**: - -* `list`: Displays all the wallets and their... -* `swap-hotkey`: Swap hotkeys of a given wallet on the... -* `regen-coldkey`: Regenerate a coldkey for a wallet on the... -* `regen-coldkeypub`: Regenerates the public part of a coldkey... -* `regen-hotkey`: Regenerates a hotkey for a wallet. -* `new-hotkey`: Create a new hotkey for a wallet. -* `new-coldkey`: Create a new coldkey. -* `create`: Create a complete wallet by setting up... -* `balance`: Check the balance of the wallet. -* `history`: Show the history of the transfers carried... -* `overview`: Displays a detailed overview of the user's... -* `transfer`: Send TAO tokens from one wallet to another... -* `inspect`: Displays the details of the user's wallet... -* `faucet`: Obtain test TAO tokens by performing Proof... -* `set-identity`: Create or update the on-chain identity of... -* `get-identity`: Shows the identity details of a user's... -* `sign`: Allows users to sign a message with the... -* `swap_hotkey`: Swap hotkeys of a given wallet on the... -* `regen_coldkey`: Regenerate a coldkey for a wallet on the... -* `regen_coldkeypub`: Regenerates the public part of a coldkey... -* `regen_hotkey`: Regenerates a hotkey for a wallet. -* `new_hotkey`: Create a new hotkey for a wallet. -* `new_coldkey`: Create a new coldkey. -* `set_identity`: Create or update the on-chain identity of... -* `get_identity`: Shows the identity details of a user's... - -### `btcli wallet list` - -Displays all the wallets and their corresponding hotkeys that are located in the wallet path specified in the config. - -The output display shows each wallet and its associated `ss58` addresses for the coldkey public key and any hotkeys. The output is presented in a hierarchical tree format, with each wallet as a root node and any associated hotkeys as child nodes. The `ss58` address is displayed for each coldkey and hotkey that is not encrypted and exists on the device. - -Upon invocation, the command scans the wallet directory and prints a list of all the wallets, indicating whether the -public keys are available (`?` denotes unavailable or encrypted keys). - - -``` -btcli wallet list --path ~/.bittensor -``` - -Note: This command is read-only and does not modify the filesystem or the blockchain state. It is intended for use with the Bittensor CLI to provide a quick overview of the user's wallets. - -**Usage**: - -```console -btcli wallet list [OPTIONS] -``` - -**Options**: - -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli wallet swap-hotkey` - -Swap hotkeys of a given wallet on the blockchain. For a registered key pair, for example, a (coldkeyA, hotkeyA) pair, this command swaps the hotkeyA with a new, unregistered, hotkeyB to move the original registration to the (coldkeyA, hotkeyB) pair. - -**Usage:** - -The command is used to swap the hotkey of a wallet for another hotkey on that same wallet. - -**Important:** - -- Make sure that your original key pair (coldkeyA, hotkeyA) is already registered. -- Make sure that you use a newly created hotkeyB in this command. A hotkeyB that is already registered cannot be used in this command. -- Finally, note that this command requires a fee of 1 TAO for recycling and this fee is taken from your wallet (coldkeyA). - -**Example:** - -``` -btcli wallet swap_hotkey destination_hotkey_name --wallet-name your_wallet_name --wallet-hotkey original_hotkey -``` - -**Usage**: - -```console -btcli wallet swap-hotkey [OPTIONS] [DESTINATION_HOTKEY_NAME] -``` - -**Arguments**: - -* `[DESTINATION_HOTKEY_NAME]`: Destination hotkey name. - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--help`: Show this message and exit. - -### `btcli wallet regen-coldkey` - -Regenerate a coldkey for a wallet on the Bittensor blockchain network. - -This command is used to create a new coldkey from an existing mnemonic, seed, or JSON file. - -**Usage:** - -Users can specify a mnemonic, a seed string, or a JSON file path to regenerate a coldkey. The command supports optional password protection for the generated key. - -**Example:** - -``` -btcli wallet regen-coldkey --mnemonic "word1 word2 ... word12" -``` - - -Note: This command is critical for users who need to regenerate their coldkey either for recovery or for security reasons. - -**Usage**: - -```console -btcli wallet regen-coldkey [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--mnemonic TEXT`: Mnemonic used to regenerate your key. For example: horse cart dog ... -* `--seed TEXT`: Seed hex string used to regenerate your key. For example: 0x1234... -* `-j, --json TEXT`: Path to a JSON file containing the encrypted key backup. For example, a JSON file from PolkadotJS. -* `--json-password TEXT`: Password to decrypt the JSON file. -* `--use-password / --no-use-password`: Set this to `True` to protect the generated Bittensor key with a password. [default: use-password] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli wallet regen-coldkeypub` - -Regenerates the public part of a coldkey (coldkeypub.txt) for a wallet. - -Use this command when you need to move machine for subnet mining. Use the public key or SS58 address from your coldkeypub.txt that you have on another machine to regenerate the coldkeypub.txt on this new machine. - -**Usage:** - -The command requires either a public key in hexadecimal format or an ``SS58`` address from the existing coldkeypub.txt from old machine to regenerate the coldkeypub on the new machine. - -**Example:** - -``` -btcli wallet regen_coldkeypub --ss58_address 5DkQ4... -``` - -Note: This command is particularly useful for users who need to regenerate their coldkeypub, perhaps due to file corruption or loss. You will need either ss58 address or public hex key from your old coldkeypub.txt for the wallet. It is a recovery-focused utility that ensures continued access to your wallet functionalities. - -**Usage**: - -```console -btcli wallet regen-coldkeypub [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--public-key-hex TEXT`: The public key in hex format. -* `--ss58, --ss58-address TEXT`: The SS58 address of the coldkey. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli wallet regen-hotkey` - -Regenerates a hotkey for a wallet. - -Similar to regenerating a coldkey, this command creates a new hotkey from a mnemonic, seed, or JSON file. - -**Usage:** - -Users can provide a mnemonic, seed string, or a JSON file to regenerate the hotkey. The command supports optional password protection and can overwrite an existing hotkey. - - -``` -btcli wallet regen_hotkey --seed 0x1234... -``` - -Note: This command is essential for users who need to regenerate their hotkey, possibly for security upgrades or key recovery. -It should be used with caution to avoid accidental overwriting of existing keys. - -**Usage**: - -```console -btcli wallet regen-hotkey [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--mnemonic TEXT`: Mnemonic used to regenerate your key. For example: horse cart dog ... -* `--seed TEXT`: Seed hex string used to regenerate your key. For example: 0x1234... -* `-j, --json TEXT`: Path to a JSON file containing the encrypted key backup. For example, a JSON file from PolkadotJS. -* `--json-password TEXT`: Password to decrypt the JSON file. -* `--use-password / --no-use-password`: Set to 'True' to protect the generated Bittensor key with a password. [default: no-use-password] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli wallet new-hotkey` - -Create a new hotkey for a wallet. - -**Usage:** - -This command is used to generate a new hotkey for managing a neuron or participating in a subnet. It provides options for the mnemonic word count, and supports password protection. It also allows overwriting the -existing hotkey. - -**Example:** - -``` -btcli wallet new-hotkey --n_words 24 -``` - -Note: This command is useful to create additional hotkeys for different purposes, such as running multiple subnet miners or subnet validators or separating operational roles within the Bittensor network. - -**Usage**: - -```console -btcli wallet new-hotkey [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--n-words, --n_words INTEGER`: The number of words used in the mnemonic. Options: [12, 15, 18, 21, 24] -* `--use-password / --no-use-password`: Set to 'True' to protect the generated Bittensor key with a password. [default: no-use-password] -* `--uri TEXT`: Create wallet from uri (e.g. 'Alice', 'Bob', 'Charlie', 'Dave', 'Eve') -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli wallet new-coldkey` - -Create a new coldkey. A coldkey is required for holding TAO balances and performing high-value transactions. - -**Usage:** - -The command creates a new coldkey. It provides options for the mnemonic word count, and supports password protection. It also allows overwriting an existing coldkey. - -**Example:** - -``` -btcli wallet new_coldkey --n_words 15 -``` - -Note: This command is crucial for users who need to create a new coldkey for enhanced security or as part of setting up a new wallet. It is a foundational step in establishing a secure presence on the Bittensor network. - -**Usage**: - -```console -btcli wallet new-coldkey [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--n-words, --n_words INTEGER`: The number of words used in the mnemonic. Options: [12, 15, 18, 21, 24] -* `--use-password / --no-use-password`: Set this to `True` to protect the generated Bittensor key with a password. [default: use-password] -* `--uri TEXT`: Create wallet from uri (e.g. 'Alice', 'Bob', 'Charlie', 'Dave', 'Eve') -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli wallet create` - -Create a complete wallet by setting up both coldkey and hotkeys. - -**Usage:** - -The command creates a new coldkey and hotkey. It provides an option for mnemonic word count. It supports password protection for the coldkey and allows overwriting of existing keys. - -**Example:** - -``` -btcli wallet create --n_words 21 -``` - -Note: This command is for new users setting up their wallet for the first time, or for those who wish to completely renew their wallet keys. It ensures a fresh start with new keys for secure and effective participation in the Bittensor network. - -**Usage**: - -```console -btcli wallet create [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--n-words INTEGER` -* `--use-password / --no-use-password`: Set this to `True` to protect the generated Bittensor key with a password. [default: use-password] -* `--uri TEXT`: Create wallet from uri (e.g. 'Alice', 'Bob', 'Charlie', 'Dave', 'Eve') -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli wallet balance` - -Check the balance of the wallet. This command shows a detailed view of the wallet's coldkey balances, including free and staked balances. - -You can also pass multiple ss58 addresses of coldkeys to check their balance (using --ss58). - -**Example:** - -- To display the balance of a single wallet, use the command with the `--wallet-name` argument and provide the wallet name: - - ``` - btcli w balance --wallet-name WALLET - ``` - -- To use the default config values, use: - - ``` - btcli w balance - ``` - -- To display the balances of all your wallets, use the `--all` argument: - - ``` - btcli w balance --all - ``` - -- To display the balances of ss58 addresses, use the `--ss58` argument: - - ``` - btcli w balance --ss58 <ss58_address> --ss58 <ss58_address> - ``` - -**Usage**: - -```console -btcli wallet balance [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--ss58, --ss58-address TEXT`: The SS58 address of the coldkey. -* `-a, --all`: Whether to display the balances for all the wallets. -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli wallet history` - -Show the history of the transfers carried out with the provided wallet on the Bittensor network. - -**Usage:** - -The output shows the latest transfers of the provided wallet, showing the columns 'From', 'To', 'Amount', 'Extrinsic ID' and 'Block Number'. - -**Example:** - -``` -btcli wallet history -``` - -**Usage**: - -```console -btcli wallet history [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli wallet overview` - -Displays a detailed overview of the user's registered accounts on the Bittensor network. - -This command compiles and displays comprehensive information about each neuron associated with the user's wallets, including both hotkeys and coldkeys. It is especially useful for users managing multiple accounts or looking for a summary of their network activities and stake distributions. - -**Usage:** - -``` -btcli wallet overview -``` - -``` -btcli wallet overview --all -``` - -Note: This command is read-only and does not modify the blockchain state or account configuration. -It provides a quick and comprehensive view of the user's network presence, making it useful for monitoring account status, -stake distribution, and overall contribution to the Bittensor network. - -**Usage**: - -```console -btcli wallet overview [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `-a, --all`: See an overview for all the wallets -* `--sort-by, --sort_by TEXT`: Sort the hotkeys by the specified column title. For example: name, uid, axon. -* `--sort-order, --sort_order TEXT`: Sort the hotkeys in the specified order (ascending/asc or descending/desc/reverse). -* `-in, --include-hotkeys TEXT`: Hotkeys to include. Specify by name or ss58 address. If left empty, all hotkeys, except those in the '--exclude-hotkeys', will be included. -* `-ex, --exclude-hotkeys TEXT`: Hotkeys to exclude. Specify by name or ss58 address. If left empty, all hotkeys, except those in the '--include-hotkeys', will be excluded. -* `-n, --netuids, --netuid TEXT`: Set the netuid(s) to exclude. Separate multiple netuids with a comma, for example: `-n 0,1,2`. -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli wallet transfer` - -Send TAO tokens from one wallet to another wallet on the Bittensor network. - -This command is used for transactions between different wallet accounts, enabling users to send tokens to other -participants on the network. The command displays the user's current balance before prompting for the amount -to transfer (send), ensuring transparency and accuracy in the transaction. - -**Usage:** - -The command requires that you specify the destination address (public key) and the amount of TAO you want transferred. -It checks if sufficient balance exists in your wallet and prompts for confirmation before proceeding with the transaction. - -**Example:** - -``` -btcli wallet transfer --dest 5Dp8... --amount 100 -``` - -Note: This command is used for executing token transfers within the Bittensor network. Users should verify the destination address and the TAO amount before confirming the transaction to avoid errors or loss of funds. - -**Usage**: - -```console -btcli wallet transfer [OPTIONS] -``` - -**Options**: - -* `-d, --destination, --dest TEXT`: Destination address (ss58) of the wallet (coldkey). -* `-a, --amount FLOAT`: Amount (in TAO) to transfer. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli wallet inspect` - -Displays the details of the user's wallet pairs (coldkey, hotkey) on the Bittensor network. - -The output is presented as a table with the below columns: - -- Coldkey: The coldkey associated with the user's wallet. - -- Balance: The balance of the coldkey. - -- Delegate: The name of the delegate to which the coldkey has staked TAO. - -- Stake: The amount of stake held by both the coldkey and hotkey. - -- Emission: The emission or rewards earned from staking. - -- Netuid: The network unique identifier of the subnet where the hotkey is active (i.e., validating). - -- Hotkey: The hotkey associated with the neuron on the network. - -**Usage:** - -This command can be used to inspect a single wallet or all the wallets located at a specified path. It is useful for a comprehensive overview of a user's participation and performance in the Bittensor network. - -**Example:** - -``` -btcli wallet inspect -``` - -``` -btcli wallet inspect --all -n 1 -n 2 -n 3 -``` - -Note: The `inspect` command is for displaying information only and does not perform any transactions or state changes on the blockchain. It is intended to be used with Bittensor CLI and not as a standalone function in user code. - -**Usage**: - -```console -btcli wallet inspect [OPTIONS] -``` - -**Options**: - -* `-a, --all, --all-wallets`: Inspect all the wallets at the specified wallet path. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `-n, --netuids, --netuid TEXT`: Set the netuid(s) to exclude. Separate multiple netuids with a comma, for example: `-n 0,1,2`. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli wallet faucet` - -Obtain test TAO tokens by performing Proof of Work (PoW). - -This command is useful for users who need test tokens for operations on a local blockchain. - -**Important:**: THIS COMMAND IS DISABLED ON FINNEY AND TESTNET. - -**Usage:** - -The command uses the proof-of-work (POW) mechanism to validate the user's effort and rewards them with test TAO tokens. It is -typically used in local blockchain environments where transactions do not use real TAO tokens. - -**Example:** - -``` -btcli wallet faucet --faucet.num_processes 4 --faucet.cuda.use_cuda -``` - -Note: This command is meant for used in local environments where users can experiment with the blockchain without using real TAO tokens. Users must have the necessary hardware setup, especially when opting for CUDA-based GPU calculations. It is currently disabled on testnet and mainnet (finney). You can only use this command on a local blockchain. - -**Usage**: - -```console -btcli wallet faucet [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--processors INTEGER`: Number of processors to use for proof of work (POW) registration. -* `-u, --update-interval INTEGER`: The number of nonces to process before checking for next block during registration [default: 50000] -* `--output-in-place / --no-output-in-place`: Whether to output the registration statistics in-place. [default: output-in-place] -* `-v, --verbose`: Whether to output the registration statistics verbosely. -* `--use-cuda, --cuda / --no-use-cuda, --no-cuda`: Set flag to use CUDA for proof of work (POW) registration. [default: no-use-cuda] -* `-d, --dev-id INTEGER`: Set the CUDA device id(s) in the order of speed, where 0 is the fastest. [default: 0] -* `-tbp, --threads-per-block INTEGER`: Set the number of threads per block for CUDA. [default: 256] -* `--max-successes INTEGER`: Set the maximum number of times to successfully run the faucet for this command. [default: 3] -* `--help`: Show this message and exit. - -### `btcli wallet set-identity` - -Create or update the on-chain identity of a coldkey or a hotkey on the Bittensor network. Incurs a 1 TAO transaction fee. - -The on-chain identity includes attributes such as display name, legal name, web URL, PGP fingerprint, and contact information, among others. - -The command prompts the user for the identity attributes and validates the input size for each attribute. It provides an option to update an existing validator hotkey identity. If the user consents to the transaction cost, the identity is updated on the blockchain. - -Each field has a maximum size of 64 bytes. The PGP fingerprint field is an exception and has a maximum size of 20 bytes. The user is prompted to enter the PGP fingerprint as a hex string, which is then converted to bytes. The user is also prompted to enter the coldkey or hotkey ``ss58`` address for the identity to be updated. - -If the user does not have a hotkey, the coldkey address is used by default. If setting a validator identity, the hotkey will be used by default. If the user is setting an identity for a subnet, the coldkey will be used by default. - -**Example:** - -``` -btcli wallet set_identity -``` - -Note: This command should only be used if the user is willing to incur the a recycle fee associated with setting an identity on the blockchain. It is a high-level command that makes changes to the blockchain state and should not be used programmatically as part of other scripts or applications. - -**Usage**: - -```console -btcli wallet set-identity [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--name TEXT`: The display name for the identity. -* `--web-url, --web TEXT`: The web URL for the identity. -* `--image-url, --image TEXT`: The image URL for the identity. -* `--discord TEXT`: The Discord handle for the identity. -* `--description TEXT`: The description for the identity. -* `--additional TEXT`: Additional details for the identity. -* `--github TEXT`: The GitHub repository for the identity. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--help`: Show this message and exit. - -### `btcli wallet get-identity` - -Shows the identity details of a user's coldkey or hotkey. - -The command displays the information in a table format showing: - -- Address: The ``ss58`` address of the queried key. - -- Item: Various attributes of the identity such as stake, rank, and trust. - -- Value: The corresponding values of the attributes. - -**Example:** - -``` -btcli wallet get_identity --key <s58_address> -``` - -Note: This command is primarily used for informational purposes and has no side effects on the blockchain network state. - -**Usage**: - -```console -btcli wallet get-identity [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-k, --ss58, --coldkey_ss58, --coldkey.ss58_address, --coldkey.ss58, --key TEXT`: Coldkey address of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli wallet sign` - -Allows users to sign a message with the provided wallet or wallet hotkey. Use this command to easily prove your ownership of a coldkey or a hotkey. - -**Usage:** - -Using the provided wallet (coldkey), the command generates a signature for a given message. - -**Example:** - -``` -btcli wallet sign --wallet-name default --message '{"something": "here", "timestamp": 1719908486}' -``` - -``` -btcli wallet sign --wallet-name default --wallet-hotkey hotkey --message '{"something": "here", "timestamp": 1719908486}' -``` - -**Usage**: - -```console -btcli wallet sign [OPTIONS] -``` - -**Options**: - -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--use-hotkey / --no-use-hotkey`: If specified, the message will be signed by the hotkey. If not specified, the user will be prompted. -* `--message TEXT`: The message to encode and sign -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli wallet swap_hotkey` - -Swap hotkeys of a given wallet on the blockchain. For a registered key pair, for example, a (coldkeyA, hotkeyA) pair, this command swaps the hotkeyA with a new, unregistered, hotkeyB to move the original registration to the (coldkeyA, hotkeyB) pair. - -**Usage:** - -The command is used to swap the hotkey of a wallet for another hotkey on that same wallet. - -**Important:** - -- Make sure that your original key pair (coldkeyA, hotkeyA) is already registered. -- Make sure that you use a newly created hotkeyB in this command. A hotkeyB that is already registered cannot be used in this command. -- Finally, note that this command requires a fee of 1 TAO for recycling and this fee is taken from your wallet (coldkeyA). - -**Example:** - -``` -btcli wallet swap_hotkey destination_hotkey_name --wallet-name your_wallet_name --wallet-hotkey original_hotkey -``` - -**Usage**: - -```console -btcli wallet swap_hotkey [OPTIONS] [DESTINATION_HOTKEY_NAME] -``` - -**Arguments**: - -* `[DESTINATION_HOTKEY_NAME]`: Destination hotkey name. - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--help`: Show this message and exit. - -### `btcli wallet regen_coldkey` - -Regenerate a coldkey for a wallet on the Bittensor blockchain network. - -This command is used to create a new coldkey from an existing mnemonic, seed, or JSON file. - -**Usage:** - -Users can specify a mnemonic, a seed string, or a JSON file path to regenerate a coldkey. The command supports optional password protection for the generated key. - -**Example:** - -``` -btcli wallet regen-coldkey --mnemonic "word1 word2 ... word12" -``` - - -Note: This command is critical for users who need to regenerate their coldkey either for recovery or for security reasons. - -**Usage**: - -```console -btcli wallet regen_coldkey [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--mnemonic TEXT`: Mnemonic used to regenerate your key. For example: horse cart dog ... -* `--seed TEXT`: Seed hex string used to regenerate your key. For example: 0x1234... -* `-j, --json TEXT`: Path to a JSON file containing the encrypted key backup. For example, a JSON file from PolkadotJS. -* `--json-password TEXT`: Password to decrypt the JSON file. -* `--use-password / --no-use-password`: Set this to `True` to protect the generated Bittensor key with a password. [default: use-password] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli wallet regen_coldkeypub` - -Regenerates the public part of a coldkey (coldkeypub.txt) for a wallet. - -Use this command when you need to move machine for subnet mining. Use the public key or SS58 address from your coldkeypub.txt that you have on another machine to regenerate the coldkeypub.txt on this new machine. - -**Usage:** - -The command requires either a public key in hexadecimal format or an ``SS58`` address from the existing coldkeypub.txt from old machine to regenerate the coldkeypub on the new machine. - -**Example:** - -``` -btcli wallet regen_coldkeypub --ss58_address 5DkQ4... -``` - -Note: This command is particularly useful for users who need to regenerate their coldkeypub, perhaps due to file corruption or loss. You will need either ss58 address or public hex key from your old coldkeypub.txt for the wallet. It is a recovery-focused utility that ensures continued access to your wallet functionalities. - -**Usage**: - -```console -btcli wallet regen_coldkeypub [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--public-key-hex TEXT`: The public key in hex format. -* `--ss58, --ss58-address TEXT`: The SS58 address of the coldkey. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli wallet regen_hotkey` - -Regenerates a hotkey for a wallet. - -Similar to regenerating a coldkey, this command creates a new hotkey from a mnemonic, seed, or JSON file. - -**Usage:** - -Users can provide a mnemonic, seed string, or a JSON file to regenerate the hotkey. The command supports optional password protection and can overwrite an existing hotkey. - - -``` -btcli wallet regen_hotkey --seed 0x1234... -``` - -Note: This command is essential for users who need to regenerate their hotkey, possibly for security upgrades or key recovery. -It should be used with caution to avoid accidental overwriting of existing keys. - -**Usage**: - -```console -btcli wallet regen_hotkey [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--mnemonic TEXT`: Mnemonic used to regenerate your key. For example: horse cart dog ... -* `--seed TEXT`: Seed hex string used to regenerate your key. For example: 0x1234... -* `-j, --json TEXT`: Path to a JSON file containing the encrypted key backup. For example, a JSON file from PolkadotJS. -* `--json-password TEXT`: Password to decrypt the JSON file. -* `--use-password / --no-use-password`: Set to 'True' to protect the generated Bittensor key with a password. [default: no-use-password] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli wallet new_hotkey` - -Create a new hotkey for a wallet. - -**Usage:** - -This command is used to generate a new hotkey for managing a neuron or participating in a subnet. It provides options for the mnemonic word count, and supports password protection. It also allows overwriting the -existing hotkey. - -**Example:** - -``` -btcli wallet new-hotkey --n_words 24 -``` - -Note: This command is useful to create additional hotkeys for different purposes, such as running multiple subnet miners or subnet validators or separating operational roles within the Bittensor network. - -**Usage**: - -```console -btcli wallet new_hotkey [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--n-words, --n_words INTEGER`: The number of words used in the mnemonic. Options: [12, 15, 18, 21, 24] -* `--use-password / --no-use-password`: Set to 'True' to protect the generated Bittensor key with a password. [default: no-use-password] -* `--uri TEXT`: Create wallet from uri (e.g. 'Alice', 'Bob', 'Charlie', 'Dave', 'Eve') -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli wallet new_coldkey` - -Create a new coldkey. A coldkey is required for holding TAO balances and performing high-value transactions. - -**Usage:** - -The command creates a new coldkey. It provides options for the mnemonic word count, and supports password protection. It also allows overwriting an existing coldkey. - -**Example:** - -``` -btcli wallet new_coldkey --n_words 15 -``` - -Note: This command is crucial for users who need to create a new coldkey for enhanced security or as part of setting up a new wallet. It is a foundational step in establishing a secure presence on the Bittensor network. - -**Usage**: - -```console -btcli wallet new_coldkey [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--n-words, --n_words INTEGER`: The number of words used in the mnemonic. Options: [12, 15, 18, 21, 24] -* `--use-password / --no-use-password`: Set this to `True` to protect the generated Bittensor key with a password. [default: use-password] -* `--uri TEXT`: Create wallet from uri (e.g. 'Alice', 'Bob', 'Charlie', 'Dave', 'Eve') -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli wallet set_identity` - -Create or update the on-chain identity of a coldkey or a hotkey on the Bittensor network. Incurs a 1 TAO transaction fee. - -The on-chain identity includes attributes such as display name, legal name, web URL, PGP fingerprint, and contact information, among others. - -The command prompts the user for the identity attributes and validates the input size for each attribute. It provides an option to update an existing validator hotkey identity. If the user consents to the transaction cost, the identity is updated on the blockchain. - -Each field has a maximum size of 64 bytes. The PGP fingerprint field is an exception and has a maximum size of 20 bytes. The user is prompted to enter the PGP fingerprint as a hex string, which is then converted to bytes. The user is also prompted to enter the coldkey or hotkey ``ss58`` address for the identity to be updated. - -If the user does not have a hotkey, the coldkey address is used by default. If setting a validator identity, the hotkey will be used by default. If the user is setting an identity for a subnet, the coldkey will be used by default. - -**Example:** - -``` -btcli wallet set_identity -``` - -Note: This command should only be used if the user is willing to incur the a recycle fee associated with setting an identity on the blockchain. It is a high-level command that makes changes to the blockchain state and should not be used programmatically as part of other scripts or applications. - -**Usage**: - -```console -btcli wallet set_identity [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--name TEXT`: The display name for the identity. -* `--web-url, --web TEXT`: The web URL for the identity. -* `--image-url, --image TEXT`: The image URL for the identity. -* `--discord TEXT`: The Discord handle for the identity. -* `--description TEXT`: The description for the identity. -* `--additional TEXT`: Additional details for the identity. -* `--github TEXT`: The GitHub repository for the identity. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--help`: Show this message and exit. - -### `btcli wallet get_identity` - -Shows the identity details of a user's coldkey or hotkey. - -The command displays the information in a table format showing: - -- Address: The ``ss58`` address of the queried key. - -- Item: Various attributes of the identity such as stake, rank, and trust. - -- Value: The corresponding values of the attributes. - -**Example:** - -``` -btcli wallet get_identity --key <s58_address> -``` - -Note: This command is primarily used for informational purposes and has no side effects on the blockchain network state. - -**Usage**: - -```console -btcli wallet get_identity [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-k, --ss58, --coldkey_ss58, --coldkey.ss58_address, --coldkey.ss58, --key TEXT`: Coldkey address of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -## `btcli w` - -**Usage**: - -```console -btcli w [OPTIONS] COMMAND [ARGS]... -``` - -**Options**: - -* `--help`: Show this message and exit. - -**Commands**: - -* `list`: Displays all the wallets and their... -* `swap-hotkey`: Swap hotkeys of a given wallet on the... -* `regen-coldkey`: Regenerate a coldkey for a wallet on the... -* `regen-coldkeypub`: Regenerates the public part of a coldkey... -* `regen-hotkey`: Regenerates a hotkey for a wallet. -* `new-hotkey`: Create a new hotkey for a wallet. -* `new-coldkey`: Create a new coldkey. -* `create`: Create a complete wallet by setting up... -* `balance`: Check the balance of the wallet. -* `history`: Show the history of the transfers carried... -* `overview`: Displays a detailed overview of the user's... -* `transfer`: Send TAO tokens from one wallet to another... -* `inspect`: Displays the details of the user's wallet... -* `faucet`: Obtain test TAO tokens by performing Proof... -* `set-identity`: Create or update the on-chain identity of... -* `get-identity`: Shows the identity details of a user's... -* `sign`: Allows users to sign a message with the... -* `swap_hotkey`: Swap hotkeys of a given wallet on the... -* `regen_coldkey`: Regenerate a coldkey for a wallet on the... -* `regen_coldkeypub`: Regenerates the public part of a coldkey... -* `regen_hotkey`: Regenerates a hotkey for a wallet. -* `new_hotkey`: Create a new hotkey for a wallet. -* `new_coldkey`: Create a new coldkey. -* `set_identity`: Create or update the on-chain identity of... -* `get_identity`: Shows the identity details of a user's... - -### `btcli w list` - -Displays all the wallets and their corresponding hotkeys that are located in the wallet path specified in the config. - -The output display shows each wallet and its associated `ss58` addresses for the coldkey public key and any hotkeys. The output is presented in a hierarchical tree format, with each wallet as a root node and any associated hotkeys as child nodes. The `ss58` address is displayed for each coldkey and hotkey that is not encrypted and exists on the device. - -Upon invocation, the command scans the wallet directory and prints a list of all the wallets, indicating whether the -public keys are available (`?` denotes unavailable or encrypted keys). - - -``` -btcli wallet list --path ~/.bittensor -``` - -Note: This command is read-only and does not modify the filesystem or the blockchain state. It is intended for use with the Bittensor CLI to provide a quick overview of the user's wallets. - -**Usage**: - -```console -btcli w list [OPTIONS] -``` - -**Options**: - -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli w swap-hotkey` - -Swap hotkeys of a given wallet on the blockchain. For a registered key pair, for example, a (coldkeyA, hotkeyA) pair, this command swaps the hotkeyA with a new, unregistered, hotkeyB to move the original registration to the (coldkeyA, hotkeyB) pair. - -**Usage:** - -The command is used to swap the hotkey of a wallet for another hotkey on that same wallet. - -**Important:** - -- Make sure that your original key pair (coldkeyA, hotkeyA) is already registered. -- Make sure that you use a newly created hotkeyB in this command. A hotkeyB that is already registered cannot be used in this command. -- Finally, note that this command requires a fee of 1 TAO for recycling and this fee is taken from your wallet (coldkeyA). - -**Example:** - -``` -btcli wallet swap_hotkey destination_hotkey_name --wallet-name your_wallet_name --wallet-hotkey original_hotkey -``` - -**Usage**: - -```console -btcli w swap-hotkey [OPTIONS] [DESTINATION_HOTKEY_NAME] -``` - -**Arguments**: - -* `[DESTINATION_HOTKEY_NAME]`: Destination hotkey name. - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--help`: Show this message and exit. - -### `btcli w regen-coldkey` - -Regenerate a coldkey for a wallet on the Bittensor blockchain network. - -This command is used to create a new coldkey from an existing mnemonic, seed, or JSON file. - -**Usage:** - -Users can specify a mnemonic, a seed string, or a JSON file path to regenerate a coldkey. The command supports optional password protection for the generated key. - -**Example:** - -``` -btcli wallet regen-coldkey --mnemonic "word1 word2 ... word12" -``` - - -Note: This command is critical for users who need to regenerate their coldkey either for recovery or for security reasons. - -**Usage**: - -```console -btcli w regen-coldkey [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--mnemonic TEXT`: Mnemonic used to regenerate your key. For example: horse cart dog ... -* `--seed TEXT`: Seed hex string used to regenerate your key. For example: 0x1234... -* `-j, --json TEXT`: Path to a JSON file containing the encrypted key backup. For example, a JSON file from PolkadotJS. -* `--json-password TEXT`: Password to decrypt the JSON file. -* `--use-password / --no-use-password`: Set this to `True` to protect the generated Bittensor key with a password. [default: use-password] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli w regen-coldkeypub` - -Regenerates the public part of a coldkey (coldkeypub.txt) for a wallet. - -Use this command when you need to move machine for subnet mining. Use the public key or SS58 address from your coldkeypub.txt that you have on another machine to regenerate the coldkeypub.txt on this new machine. - -**Usage:** - -The command requires either a public key in hexadecimal format or an ``SS58`` address from the existing coldkeypub.txt from old machine to regenerate the coldkeypub on the new machine. - -**Example:** - -``` -btcli wallet regen_coldkeypub --ss58_address 5DkQ4... -``` - -Note: This command is particularly useful for users who need to regenerate their coldkeypub, perhaps due to file corruption or loss. You will need either ss58 address or public hex key from your old coldkeypub.txt for the wallet. It is a recovery-focused utility that ensures continued access to your wallet functionalities. - -**Usage**: - -```console -btcli w regen-coldkeypub [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--public-key-hex TEXT`: The public key in hex format. -* `--ss58, --ss58-address TEXT`: The SS58 address of the coldkey. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli w regen-hotkey` - -Regenerates a hotkey for a wallet. - -Similar to regenerating a coldkey, this command creates a new hotkey from a mnemonic, seed, or JSON file. - -**Usage:** - -Users can provide a mnemonic, seed string, or a JSON file to regenerate the hotkey. The command supports optional password protection and can overwrite an existing hotkey. - - -``` -btcli wallet regen_hotkey --seed 0x1234... -``` - -Note: This command is essential for users who need to regenerate their hotkey, possibly for security upgrades or key recovery. -It should be used with caution to avoid accidental overwriting of existing keys. - -**Usage**: - -```console -btcli w regen-hotkey [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--mnemonic TEXT`: Mnemonic used to regenerate your key. For example: horse cart dog ... -* `--seed TEXT`: Seed hex string used to regenerate your key. For example: 0x1234... -* `-j, --json TEXT`: Path to a JSON file containing the encrypted key backup. For example, a JSON file from PolkadotJS. -* `--json-password TEXT`: Password to decrypt the JSON file. -* `--use-password / --no-use-password`: Set to 'True' to protect the generated Bittensor key with a password. [default: no-use-password] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli w new-hotkey` - -Create a new hotkey for a wallet. - -**Usage:** - -This command is used to generate a new hotkey for managing a neuron or participating in a subnet. It provides options for the mnemonic word count, and supports password protection. It also allows overwriting the -existing hotkey. - -**Example:** - -``` -btcli wallet new-hotkey --n_words 24 -``` - -Note: This command is useful to create additional hotkeys for different purposes, such as running multiple subnet miners or subnet validators or separating operational roles within the Bittensor network. - -**Usage**: - -```console -btcli w new-hotkey [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--n-words, --n_words INTEGER`: The number of words used in the mnemonic. Options: [12, 15, 18, 21, 24] -* `--use-password / --no-use-password`: Set to 'True' to protect the generated Bittensor key with a password. [default: no-use-password] -* `--uri TEXT`: Create wallet from uri (e.g. 'Alice', 'Bob', 'Charlie', 'Dave', 'Eve') -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli w new-coldkey` - -Create a new coldkey. A coldkey is required for holding TAO balances and performing high-value transactions. - -**Usage:** - -The command creates a new coldkey. It provides options for the mnemonic word count, and supports password protection. It also allows overwriting an existing coldkey. - -**Example:** - -``` -btcli wallet new_coldkey --n_words 15 -``` - -Note: This command is crucial for users who need to create a new coldkey for enhanced security or as part of setting up a new wallet. It is a foundational step in establishing a secure presence on the Bittensor network. - -**Usage**: - -```console -btcli w new-coldkey [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--n-words, --n_words INTEGER`: The number of words used in the mnemonic. Options: [12, 15, 18, 21, 24] -* `--use-password / --no-use-password`: Set this to `True` to protect the generated Bittensor key with a password. [default: use-password] -* `--uri TEXT`: Create wallet from uri (e.g. 'Alice', 'Bob', 'Charlie', 'Dave', 'Eve') -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli w create` - -Create a complete wallet by setting up both coldkey and hotkeys. - -**Usage:** - -The command creates a new coldkey and hotkey. It provides an option for mnemonic word count. It supports password protection for the coldkey and allows overwriting of existing keys. - -**Example:** - -``` -btcli wallet create --n_words 21 -``` - -Note: This command is for new users setting up their wallet for the first time, or for those who wish to completely renew their wallet keys. It ensures a fresh start with new keys for secure and effective participation in the Bittensor network. - -**Usage**: - -```console -btcli w create [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--n-words INTEGER` -* `--use-password / --no-use-password`: Set this to `True` to protect the generated Bittensor key with a password. [default: use-password] -* `--uri TEXT`: Create wallet from uri (e.g. 'Alice', 'Bob', 'Charlie', 'Dave', 'Eve') -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli w balance` - -Check the balance of the wallet. This command shows a detailed view of the wallet's coldkey balances, including free and staked balances. - -You can also pass multiple ss58 addresses of coldkeys to check their balance (using --ss58). - -**Example:** - -- To display the balance of a single wallet, use the command with the `--wallet-name` argument and provide the wallet name: - - ``` - btcli w balance --wallet-name WALLET - ``` - -- To use the default config values, use: - - ``` - btcli w balance - ``` - -- To display the balances of all your wallets, use the `--all` argument: - - ``` - btcli w balance --all - ``` - -- To display the balances of ss58 addresses, use the `--ss58` argument: - - ``` - btcli w balance --ss58 <ss58_address> --ss58 <ss58_address> - ``` - -**Usage**: - -```console -btcli w balance [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--ss58, --ss58-address TEXT`: The SS58 address of the coldkey. -* `-a, --all`: Whether to display the balances for all the wallets. -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli w history` - -Show the history of the transfers carried out with the provided wallet on the Bittensor network. - -**Usage:** - -The output shows the latest transfers of the provided wallet, showing the columns 'From', 'To', 'Amount', 'Extrinsic ID' and 'Block Number'. - -**Example:** - -``` -btcli wallet history -``` - -**Usage**: - -```console -btcli w history [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli w overview` - -Displays a detailed overview of the user's registered accounts on the Bittensor network. - -This command compiles and displays comprehensive information about each neuron associated with the user's wallets, including both hotkeys and coldkeys. It is especially useful for users managing multiple accounts or looking for a summary of their network activities and stake distributions. - -**Usage:** - -``` -btcli wallet overview -``` - -``` -btcli wallet overview --all -``` - -Note: This command is read-only and does not modify the blockchain state or account configuration. -It provides a quick and comprehensive view of the user's network presence, making it useful for monitoring account status, -stake distribution, and overall contribution to the Bittensor network. - -**Usage**: - -```console -btcli w overview [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `-a, --all`: See an overview for all the wallets -* `--sort-by, --sort_by TEXT`: Sort the hotkeys by the specified column title. For example: name, uid, axon. -* `--sort-order, --sort_order TEXT`: Sort the hotkeys in the specified order (ascending/asc or descending/desc/reverse). -* `-in, --include-hotkeys TEXT`: Hotkeys to include. Specify by name or ss58 address. If left empty, all hotkeys, except those in the '--exclude-hotkeys', will be included. -* `-ex, --exclude-hotkeys TEXT`: Hotkeys to exclude. Specify by name or ss58 address. If left empty, all hotkeys, except those in the '--include-hotkeys', will be excluded. -* `-n, --netuids, --netuid TEXT`: Set the netuid(s) to exclude. Separate multiple netuids with a comma, for example: `-n 0,1,2`. -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli w transfer` - -Send TAO tokens from one wallet to another wallet on the Bittensor network. - -This command is used for transactions between different wallet accounts, enabling users to send tokens to other -participants on the network. The command displays the user's current balance before prompting for the amount -to transfer (send), ensuring transparency and accuracy in the transaction. - -**Usage:** - -The command requires that you specify the destination address (public key) and the amount of TAO you want transferred. -It checks if sufficient balance exists in your wallet and prompts for confirmation before proceeding with the transaction. - -**Example:** - -``` -btcli wallet transfer --dest 5Dp8... --amount 100 -``` - -Note: This command is used for executing token transfers within the Bittensor network. Users should verify the destination address and the TAO amount before confirming the transaction to avoid errors or loss of funds. - -**Usage**: - -```console -btcli w transfer [OPTIONS] -``` - -**Options**: - -* `-d, --destination, --dest TEXT`: Destination address (ss58) of the wallet (coldkey). -* `-a, --amount FLOAT`: Amount (in TAO) to transfer. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli w inspect` - -Displays the details of the user's wallet pairs (coldkey, hotkey) on the Bittensor network. - -The output is presented as a table with the below columns: - -- Coldkey: The coldkey associated with the user's wallet. - -- Balance: The balance of the coldkey. - -- Delegate: The name of the delegate to which the coldkey has staked TAO. - -- Stake: The amount of stake held by both the coldkey and hotkey. - -- Emission: The emission or rewards earned from staking. - -- Netuid: The network unique identifier of the subnet where the hotkey is active (i.e., validating). - -- Hotkey: The hotkey associated with the neuron on the network. - -**Usage:** - -This command can be used to inspect a single wallet or all the wallets located at a specified path. It is useful for a comprehensive overview of a user's participation and performance in the Bittensor network. - -**Example:** - -``` -btcli wallet inspect -``` - -``` -btcli wallet inspect --all -n 1 -n 2 -n 3 -``` - -Note: The `inspect` command is for displaying information only and does not perform any transactions or state changes on the blockchain. It is intended to be used with Bittensor CLI and not as a standalone function in user code. - -**Usage**: - -```console -btcli w inspect [OPTIONS] -``` - -**Options**: - -* `-a, --all, --all-wallets`: Inspect all the wallets at the specified wallet path. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `-n, --netuids, --netuid TEXT`: Set the netuid(s) to exclude. Separate multiple netuids with a comma, for example: `-n 0,1,2`. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli w faucet` - -Obtain test TAO tokens by performing Proof of Work (PoW). - -This command is useful for users who need test tokens for operations on a local blockchain. - -**Important:**: THIS COMMAND IS DISABLED ON FINNEY AND TESTNET. - -**Usage:** - -The command uses the proof-of-work (POW) mechanism to validate the user's effort and rewards them with test TAO tokens. It is -typically used in local blockchain environments where transactions do not use real TAO tokens. - -**Example:** - -``` -btcli wallet faucet --faucet.num_processes 4 --faucet.cuda.use_cuda -``` - -Note: This command is meant for used in local environments where users can experiment with the blockchain without using real TAO tokens. Users must have the necessary hardware setup, especially when opting for CUDA-based GPU calculations. It is currently disabled on testnet and mainnet (finney). You can only use this command on a local blockchain. - -**Usage**: - -```console -btcli w faucet [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--processors INTEGER`: Number of processors to use for proof of work (POW) registration. -* `-u, --update-interval INTEGER`: The number of nonces to process before checking for next block during registration [default: 50000] -* `--output-in-place / --no-output-in-place`: Whether to output the registration statistics in-place. [default: output-in-place] -* `-v, --verbose`: Whether to output the registration statistics verbosely. -* `--use-cuda, --cuda / --no-use-cuda, --no-cuda`: Set flag to use CUDA for proof of work (POW) registration. [default: no-use-cuda] -* `-d, --dev-id INTEGER`: Set the CUDA device id(s) in the order of speed, where 0 is the fastest. [default: 0] -* `-tbp, --threads-per-block INTEGER`: Set the number of threads per block for CUDA. [default: 256] -* `--max-successes INTEGER`: Set the maximum number of times to successfully run the faucet for this command. [default: 3] -* `--help`: Show this message and exit. - -### `btcli w set-identity` - -Create or update the on-chain identity of a coldkey or a hotkey on the Bittensor network. Incurs a 1 TAO transaction fee. - -The on-chain identity includes attributes such as display name, legal name, web URL, PGP fingerprint, and contact information, among others. - -The command prompts the user for the identity attributes and validates the input size for each attribute. It provides an option to update an existing validator hotkey identity. If the user consents to the transaction cost, the identity is updated on the blockchain. - -Each field has a maximum size of 64 bytes. The PGP fingerprint field is an exception and has a maximum size of 20 bytes. The user is prompted to enter the PGP fingerprint as a hex string, which is then converted to bytes. The user is also prompted to enter the coldkey or hotkey ``ss58`` address for the identity to be updated. - -If the user does not have a hotkey, the coldkey address is used by default. If setting a validator identity, the hotkey will be used by default. If the user is setting an identity for a subnet, the coldkey will be used by default. - -**Example:** - -``` -btcli wallet set_identity -``` - -Note: This command should only be used if the user is willing to incur the a recycle fee associated with setting an identity on the blockchain. It is a high-level command that makes changes to the blockchain state and should not be used programmatically as part of other scripts or applications. - -**Usage**: - -```console -btcli w set-identity [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--name TEXT`: The display name for the identity. -* `--web-url, --web TEXT`: The web URL for the identity. -* `--image-url, --image TEXT`: The image URL for the identity. -* `--discord TEXT`: The Discord handle for the identity. -* `--description TEXT`: The description for the identity. -* `--additional TEXT`: Additional details for the identity. -* `--github TEXT`: The GitHub repository for the identity. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--help`: Show this message and exit. - -### `btcli w get-identity` - -Shows the identity details of a user's coldkey or hotkey. - -The command displays the information in a table format showing: - -- Address: The ``ss58`` address of the queried key. - -- Item: Various attributes of the identity such as stake, rank, and trust. - -- Value: The corresponding values of the attributes. - -**Example:** - -``` -btcli wallet get_identity --key <s58_address> -``` - -Note: This command is primarily used for informational purposes and has no side effects on the blockchain network state. - -**Usage**: - -```console -btcli w get-identity [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-k, --ss58, --coldkey_ss58, --coldkey.ss58_address, --coldkey.ss58, --key TEXT`: Coldkey address of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli w sign` - -Allows users to sign a message with the provided wallet or wallet hotkey. Use this command to easily prove your ownership of a coldkey or a hotkey. - -**Usage:** - -Using the provided wallet (coldkey), the command generates a signature for a given message. - -**Example:** - -``` -btcli wallet sign --wallet-name default --message '{"something": "here", "timestamp": 1719908486}' -``` - -``` -btcli wallet sign --wallet-name default --wallet-hotkey hotkey --message '{"something": "here", "timestamp": 1719908486}' -``` - -**Usage**: - -```console -btcli w sign [OPTIONS] -``` - -**Options**: - -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--use-hotkey / --no-use-hotkey`: If specified, the message will be signed by the hotkey. If not specified, the user will be prompted. -* `--message TEXT`: The message to encode and sign -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli w swap_hotkey` - -Swap hotkeys of a given wallet on the blockchain. For a registered key pair, for example, a (coldkeyA, hotkeyA) pair, this command swaps the hotkeyA with a new, unregistered, hotkeyB to move the original registration to the (coldkeyA, hotkeyB) pair. - -**Usage:** - -The command is used to swap the hotkey of a wallet for another hotkey on that same wallet. - -**Important:** - -- Make sure that your original key pair (coldkeyA, hotkeyA) is already registered. -- Make sure that you use a newly created hotkeyB in this command. A hotkeyB that is already registered cannot be used in this command. -- Finally, note that this command requires a fee of 1 TAO for recycling and this fee is taken from your wallet (coldkeyA). - -**Example:** - -``` -btcli wallet swap_hotkey destination_hotkey_name --wallet-name your_wallet_name --wallet-hotkey original_hotkey -``` - -**Usage**: - -```console -btcli w swap_hotkey [OPTIONS] [DESTINATION_HOTKEY_NAME] -``` - -**Arguments**: - -* `[DESTINATION_HOTKEY_NAME]`: Destination hotkey name. - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--help`: Show this message and exit. - -### `btcli w regen_coldkey` - -Regenerate a coldkey for a wallet on the Bittensor blockchain network. - -This command is used to create a new coldkey from an existing mnemonic, seed, or JSON file. - -**Usage:** - -Users can specify a mnemonic, a seed string, or a JSON file path to regenerate a coldkey. The command supports optional password protection for the generated key. - -**Example:** - -``` -btcli wallet regen-coldkey --mnemonic "word1 word2 ... word12" -``` - - -Note: This command is critical for users who need to regenerate their coldkey either for recovery or for security reasons. - -**Usage**: - -```console -btcli w regen_coldkey [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--mnemonic TEXT`: Mnemonic used to regenerate your key. For example: horse cart dog ... -* `--seed TEXT`: Seed hex string used to regenerate your key. For example: 0x1234... -* `-j, --json TEXT`: Path to a JSON file containing the encrypted key backup. For example, a JSON file from PolkadotJS. -* `--json-password TEXT`: Password to decrypt the JSON file. -* `--use-password / --no-use-password`: Set this to `True` to protect the generated Bittensor key with a password. [default: use-password] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli w regen_coldkeypub` - -Regenerates the public part of a coldkey (coldkeypub.txt) for a wallet. - -Use this command when you need to move machine for subnet mining. Use the public key or SS58 address from your coldkeypub.txt that you have on another machine to regenerate the coldkeypub.txt on this new machine. - -**Usage:** - -The command requires either a public key in hexadecimal format or an ``SS58`` address from the existing coldkeypub.txt from old machine to regenerate the coldkeypub on the new machine. - -**Example:** - -``` -btcli wallet regen_coldkeypub --ss58_address 5DkQ4... -``` - -Note: This command is particularly useful for users who need to regenerate their coldkeypub, perhaps due to file corruption or loss. You will need either ss58 address or public hex key from your old coldkeypub.txt for the wallet. It is a recovery-focused utility that ensures continued access to your wallet functionalities. - -**Usage**: - -```console -btcli w regen_coldkeypub [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--public-key-hex TEXT`: The public key in hex format. -* `--ss58, --ss58-address TEXT`: The SS58 address of the coldkey. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli w regen_hotkey` - -Regenerates a hotkey for a wallet. - -Similar to regenerating a coldkey, this command creates a new hotkey from a mnemonic, seed, or JSON file. - -**Usage:** - -Users can provide a mnemonic, seed string, or a JSON file to regenerate the hotkey. The command supports optional password protection and can overwrite an existing hotkey. - - -``` -btcli wallet regen_hotkey --seed 0x1234... -``` - -Note: This command is essential for users who need to regenerate their hotkey, possibly for security upgrades or key recovery. -It should be used with caution to avoid accidental overwriting of existing keys. - -**Usage**: - -```console -btcli w regen_hotkey [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--mnemonic TEXT`: Mnemonic used to regenerate your key. For example: horse cart dog ... -* `--seed TEXT`: Seed hex string used to regenerate your key. For example: 0x1234... -* `-j, --json TEXT`: Path to a JSON file containing the encrypted key backup. For example, a JSON file from PolkadotJS. -* `--json-password TEXT`: Password to decrypt the JSON file. -* `--use-password / --no-use-password`: Set to 'True' to protect the generated Bittensor key with a password. [default: no-use-password] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli w new_hotkey` - -Create a new hotkey for a wallet. - -**Usage:** - -This command is used to generate a new hotkey for managing a neuron or participating in a subnet. It provides options for the mnemonic word count, and supports password protection. It also allows overwriting the -existing hotkey. - -**Example:** - -``` -btcli wallet new-hotkey --n_words 24 -``` - -Note: This command is useful to create additional hotkeys for different purposes, such as running multiple subnet miners or subnet validators or separating operational roles within the Bittensor network. - -**Usage**: - -```console -btcli w new_hotkey [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--n-words, --n_words INTEGER`: The number of words used in the mnemonic. Options: [12, 15, 18, 21, 24] -* `--use-password / --no-use-password`: Set to 'True' to protect the generated Bittensor key with a password. [default: no-use-password] -* `--uri TEXT`: Create wallet from uri (e.g. 'Alice', 'Bob', 'Charlie', 'Dave', 'Eve') -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli w new_coldkey` - -Create a new coldkey. A coldkey is required for holding TAO balances and performing high-value transactions. - -**Usage:** - -The command creates a new coldkey. It provides options for the mnemonic word count, and supports password protection. It also allows overwriting an existing coldkey. - -**Example:** - -``` -btcli wallet new_coldkey --n_words 15 -``` - -Note: This command is crucial for users who need to create a new coldkey for enhanced security or as part of setting up a new wallet. It is a foundational step in establishing a secure presence on the Bittensor network. - -**Usage**: - -```console -btcli w new_coldkey [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--n-words, --n_words INTEGER`: The number of words used in the mnemonic. Options: [12, 15, 18, 21, 24] -* `--use-password / --no-use-password`: Set this to `True` to protect the generated Bittensor key with a password. [default: use-password] -* `--uri TEXT`: Create wallet from uri (e.g. 'Alice', 'Bob', 'Charlie', 'Dave', 'Eve') -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli w set_identity` - -Create or update the on-chain identity of a coldkey or a hotkey on the Bittensor network. Incurs a 1 TAO transaction fee. - -The on-chain identity includes attributes such as display name, legal name, web URL, PGP fingerprint, and contact information, among others. - -The command prompts the user for the identity attributes and validates the input size for each attribute. It provides an option to update an existing validator hotkey identity. If the user consents to the transaction cost, the identity is updated on the blockchain. - -Each field has a maximum size of 64 bytes. The PGP fingerprint field is an exception and has a maximum size of 20 bytes. The user is prompted to enter the PGP fingerprint as a hex string, which is then converted to bytes. The user is also prompted to enter the coldkey or hotkey ``ss58`` address for the identity to be updated. - -If the user does not have a hotkey, the coldkey address is used by default. If setting a validator identity, the hotkey will be used by default. If the user is setting an identity for a subnet, the coldkey will be used by default. - -**Example:** - -``` -btcli wallet set_identity -``` - -Note: This command should only be used if the user is willing to incur the a recycle fee associated with setting an identity on the blockchain. It is a high-level command that makes changes to the blockchain state and should not be used programmatically as part of other scripts or applications. - -**Usage**: - -```console -btcli w set_identity [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--name TEXT`: The display name for the identity. -* `--web-url, --web TEXT`: The web URL for the identity. -* `--image-url, --image TEXT`: The image URL for the identity. -* `--discord TEXT`: The Discord handle for the identity. -* `--description TEXT`: The description for the identity. -* `--additional TEXT`: Additional details for the identity. -* `--github TEXT`: The GitHub repository for the identity. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--help`: Show this message and exit. - -### `btcli w get_identity` - -Shows the identity details of a user's coldkey or hotkey. - -The command displays the information in a table format showing: - -- Address: The ``ss58`` address of the queried key. - -- Item: Various attributes of the identity such as stake, rank, and trust. - -- Value: The corresponding values of the attributes. - -**Example:** - -``` -btcli wallet get_identity --key <s58_address> -``` - -Note: This command is primarily used for informational purposes and has no side effects on the blockchain network state. - -**Usage**: - -```console -btcli w get_identity [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-k, --ss58, --coldkey_ss58, --coldkey.ss58_address, --coldkey.ss58, --key TEXT`: Coldkey address of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -## `btcli wallets` - -**Usage**: - -```console -btcli wallets [OPTIONS] COMMAND [ARGS]... -``` - -**Options**: - -* `--help`: Show this message and exit. - -**Commands**: - -* `list`: Displays all the wallets and their... -* `swap-hotkey`: Swap hotkeys of a given wallet on the... -* `regen-coldkey`: Regenerate a coldkey for a wallet on the... -* `regen-coldkeypub`: Regenerates the public part of a coldkey... -* `regen-hotkey`: Regenerates a hotkey for a wallet. -* `new-hotkey`: Create a new hotkey for a wallet. -* `new-coldkey`: Create a new coldkey. -* `create`: Create a complete wallet by setting up... -* `balance`: Check the balance of the wallet. -* `history`: Show the history of the transfers carried... -* `overview`: Displays a detailed overview of the user's... -* `transfer`: Send TAO tokens from one wallet to another... -* `inspect`: Displays the details of the user's wallet... -* `faucet`: Obtain test TAO tokens by performing Proof... -* `set-identity`: Create or update the on-chain identity of... -* `get-identity`: Shows the identity details of a user's... -* `sign`: Allows users to sign a message with the... -* `swap_hotkey`: Swap hotkeys of a given wallet on the... -* `regen_coldkey`: Regenerate a coldkey for a wallet on the... -* `regen_coldkeypub`: Regenerates the public part of a coldkey... -* `regen_hotkey`: Regenerates a hotkey for a wallet. -* `new_hotkey`: Create a new hotkey for a wallet. -* `new_coldkey`: Create a new coldkey. -* `set_identity`: Create or update the on-chain identity of... -* `get_identity`: Shows the identity details of a user's... - -### `btcli wallets list` - -Displays all the wallets and their corresponding hotkeys that are located in the wallet path specified in the config. - -The output display shows each wallet and its associated `ss58` addresses for the coldkey public key and any hotkeys. The output is presented in a hierarchical tree format, with each wallet as a root node and any associated hotkeys as child nodes. The `ss58` address is displayed for each coldkey and hotkey that is not encrypted and exists on the device. - -Upon invocation, the command scans the wallet directory and prints a list of all the wallets, indicating whether the -public keys are available (`?` denotes unavailable or encrypted keys). - - -``` -btcli wallet list --path ~/.bittensor -``` - -Note: This command is read-only and does not modify the filesystem or the blockchain state. It is intended for use with the Bittensor CLI to provide a quick overview of the user's wallets. - -**Usage**: - -```console -btcli wallets list [OPTIONS] -``` - -**Options**: - -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli wallets swap-hotkey` - -Swap hotkeys of a given wallet on the blockchain. For a registered key pair, for example, a (coldkeyA, hotkeyA) pair, this command swaps the hotkeyA with a new, unregistered, hotkeyB to move the original registration to the (coldkeyA, hotkeyB) pair. - -**Usage:** - -The command is used to swap the hotkey of a wallet for another hotkey on that same wallet. - -**Important:** - -- Make sure that your original key pair (coldkeyA, hotkeyA) is already registered. -- Make sure that you use a newly created hotkeyB in this command. A hotkeyB that is already registered cannot be used in this command. -- Finally, note that this command requires a fee of 1 TAO for recycling and this fee is taken from your wallet (coldkeyA). - -**Example:** - -``` -btcli wallet swap_hotkey destination_hotkey_name --wallet-name your_wallet_name --wallet-hotkey original_hotkey -``` - -**Usage**: - -```console -btcli wallets swap-hotkey [OPTIONS] [DESTINATION_HOTKEY_NAME] -``` - -**Arguments**: - -* `[DESTINATION_HOTKEY_NAME]`: Destination hotkey name. - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--help`: Show this message and exit. - -### `btcli wallets regen-coldkey` - -Regenerate a coldkey for a wallet on the Bittensor blockchain network. - -This command is used to create a new coldkey from an existing mnemonic, seed, or JSON file. - -**Usage:** - -Users can specify a mnemonic, a seed string, or a JSON file path to regenerate a coldkey. The command supports optional password protection for the generated key. - -**Example:** - -``` -btcli wallet regen-coldkey --mnemonic "word1 word2 ... word12" -``` - - -Note: This command is critical for users who need to regenerate their coldkey either for recovery or for security reasons. - -**Usage**: - -```console -btcli wallets regen-coldkey [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--mnemonic TEXT`: Mnemonic used to regenerate your key. For example: horse cart dog ... -* `--seed TEXT`: Seed hex string used to regenerate your key. For example: 0x1234... -* `-j, --json TEXT`: Path to a JSON file containing the encrypted key backup. For example, a JSON file from PolkadotJS. -* `--json-password TEXT`: Password to decrypt the JSON file. -* `--use-password / --no-use-password`: Set this to `True` to protect the generated Bittensor key with a password. [default: use-password] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli wallets regen-coldkeypub` - -Regenerates the public part of a coldkey (coldkeypub.txt) for a wallet. - -Use this command when you need to move machine for subnet mining. Use the public key or SS58 address from your coldkeypub.txt that you have on another machine to regenerate the coldkeypub.txt on this new machine. - -**Usage:** - -The command requires either a public key in hexadecimal format or an ``SS58`` address from the existing coldkeypub.txt from old machine to regenerate the coldkeypub on the new machine. - -**Example:** - -``` -btcli wallet regen_coldkeypub --ss58_address 5DkQ4... -``` - -Note: This command is particularly useful for users who need to regenerate their coldkeypub, perhaps due to file corruption or loss. You will need either ss58 address or public hex key from your old coldkeypub.txt for the wallet. It is a recovery-focused utility that ensures continued access to your wallet functionalities. - -**Usage**: - -```console -btcli wallets regen-coldkeypub [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--public-key-hex TEXT`: The public key in hex format. -* `--ss58, --ss58-address TEXT`: The SS58 address of the coldkey. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli wallets regen-hotkey` - -Regenerates a hotkey for a wallet. - -Similar to regenerating a coldkey, this command creates a new hotkey from a mnemonic, seed, or JSON file. - -**Usage:** - -Users can provide a mnemonic, seed string, or a JSON file to regenerate the hotkey. The command supports optional password protection and can overwrite an existing hotkey. - - -``` -btcli wallet regen_hotkey --seed 0x1234... -``` - -Note: This command is essential for users who need to regenerate their hotkey, possibly for security upgrades or key recovery. -It should be used with caution to avoid accidental overwriting of existing keys. - -**Usage**: - -```console -btcli wallets regen-hotkey [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--mnemonic TEXT`: Mnemonic used to regenerate your key. For example: horse cart dog ... -* `--seed TEXT`: Seed hex string used to regenerate your key. For example: 0x1234... -* `-j, --json TEXT`: Path to a JSON file containing the encrypted key backup. For example, a JSON file from PolkadotJS. -* `--json-password TEXT`: Password to decrypt the JSON file. -* `--use-password / --no-use-password`: Set to 'True' to protect the generated Bittensor key with a password. [default: no-use-password] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli wallets new-hotkey` - -Create a new hotkey for a wallet. - -**Usage:** - -This command is used to generate a new hotkey for managing a neuron or participating in a subnet. It provides options for the mnemonic word count, and supports password protection. It also allows overwriting the -existing hotkey. - -**Example:** - -``` -btcli wallet new-hotkey --n_words 24 -``` - -Note: This command is useful to create additional hotkeys for different purposes, such as running multiple subnet miners or subnet validators or separating operational roles within the Bittensor network. - -**Usage**: - -```console -btcli wallets new-hotkey [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--n-words, --n_words INTEGER`: The number of words used in the mnemonic. Options: [12, 15, 18, 21, 24] -* `--use-password / --no-use-password`: Set to 'True' to protect the generated Bittensor key with a password. [default: no-use-password] -* `--uri TEXT`: Create wallet from uri (e.g. 'Alice', 'Bob', 'Charlie', 'Dave', 'Eve') -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli wallets new-coldkey` - -Create a new coldkey. A coldkey is required for holding TAO balances and performing high-value transactions. - -**Usage:** - -The command creates a new coldkey. It provides options for the mnemonic word count, and supports password protection. It also allows overwriting an existing coldkey. - -**Example:** - -``` -btcli wallet new_coldkey --n_words 15 -``` - -Note: This command is crucial for users who need to create a new coldkey for enhanced security or as part of setting up a new wallet. It is a foundational step in establishing a secure presence on the Bittensor network. - -**Usage**: - -```console -btcli wallets new-coldkey [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--n-words, --n_words INTEGER`: The number of words used in the mnemonic. Options: [12, 15, 18, 21, 24] -* `--use-password / --no-use-password`: Set this to `True` to protect the generated Bittensor key with a password. [default: use-password] -* `--uri TEXT`: Create wallet from uri (e.g. 'Alice', 'Bob', 'Charlie', 'Dave', 'Eve') -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli wallets create` - -Create a complete wallet by setting up both coldkey and hotkeys. - -**Usage:** - -The command creates a new coldkey and hotkey. It provides an option for mnemonic word count. It supports password protection for the coldkey and allows overwriting of existing keys. - -**Example:** - -``` -btcli wallet create --n_words 21 -``` - -Note: This command is for new users setting up their wallet for the first time, or for those who wish to completely renew their wallet keys. It ensures a fresh start with new keys for secure and effective participation in the Bittensor network. - -**Usage**: - -```console -btcli wallets create [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--n-words INTEGER` -* `--use-password / --no-use-password`: Set this to `True` to protect the generated Bittensor key with a password. [default: use-password] -* `--uri TEXT`: Create wallet from uri (e.g. 'Alice', 'Bob', 'Charlie', 'Dave', 'Eve') -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli wallets balance` - -Check the balance of the wallet. This command shows a detailed view of the wallet's coldkey balances, including free and staked balances. - -You can also pass multiple ss58 addresses of coldkeys to check their balance (using --ss58). - -**Example:** - -- To display the balance of a single wallet, use the command with the `--wallet-name` argument and provide the wallet name: - - ``` - btcli w balance --wallet-name WALLET - ``` - -- To use the default config values, use: - - ``` - btcli w balance - ``` - -- To display the balances of all your wallets, use the `--all` argument: - - ``` - btcli w balance --all - ``` - -- To display the balances of ss58 addresses, use the `--ss58` argument: - - ``` - btcli w balance --ss58 <ss58_address> --ss58 <ss58_address> - ``` - -**Usage**: - -```console -btcli wallets balance [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--ss58, --ss58-address TEXT`: The SS58 address of the coldkey. -* `-a, --all`: Whether to display the balances for all the wallets. -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli wallets history` - -Show the history of the transfers carried out with the provided wallet on the Bittensor network. - -**Usage:** - -The output shows the latest transfers of the provided wallet, showing the columns 'From', 'To', 'Amount', 'Extrinsic ID' and 'Block Number'. - -**Example:** - -``` -btcli wallet history -``` - -**Usage**: - -```console -btcli wallets history [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli wallets overview` - -Displays a detailed overview of the user's registered accounts on the Bittensor network. - -This command compiles and displays comprehensive information about each neuron associated with the user's wallets, including both hotkeys and coldkeys. It is especially useful for users managing multiple accounts or looking for a summary of their network activities and stake distributions. - -**Usage:** - -``` -btcli wallet overview -``` - -``` -btcli wallet overview --all -``` - -Note: This command is read-only and does not modify the blockchain state or account configuration. -It provides a quick and comprehensive view of the user's network presence, making it useful for monitoring account status, -stake distribution, and overall contribution to the Bittensor network. - -**Usage**: - -```console -btcli wallets overview [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `-a, --all`: See an overview for all the wallets -* `--sort-by, --sort_by TEXT`: Sort the hotkeys by the specified column title. For example: name, uid, axon. -* `--sort-order, --sort_order TEXT`: Sort the hotkeys in the specified order (ascending/asc or descending/desc/reverse). -* `-in, --include-hotkeys TEXT`: Hotkeys to include. Specify by name or ss58 address. If left empty, all hotkeys, except those in the '--exclude-hotkeys', will be included. -* `-ex, --exclude-hotkeys TEXT`: Hotkeys to exclude. Specify by name or ss58 address. If left empty, all hotkeys, except those in the '--include-hotkeys', will be excluded. -* `-n, --netuids, --netuid TEXT`: Set the netuid(s) to exclude. Separate multiple netuids with a comma, for example: `-n 0,1,2`. -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli wallets transfer` - -Send TAO tokens from one wallet to another wallet on the Bittensor network. - -This command is used for transactions between different wallet accounts, enabling users to send tokens to other -participants on the network. The command displays the user's current balance before prompting for the amount -to transfer (send), ensuring transparency and accuracy in the transaction. - -**Usage:** - -The command requires that you specify the destination address (public key) and the amount of TAO you want transferred. -It checks if sufficient balance exists in your wallet and prompts for confirmation before proceeding with the transaction. - -**Example:** - -``` -btcli wallet transfer --dest 5Dp8... --amount 100 -``` - -Note: This command is used for executing token transfers within the Bittensor network. Users should verify the destination address and the TAO amount before confirming the transaction to avoid errors or loss of funds. - -**Usage**: - -```console -btcli wallets transfer [OPTIONS] -``` - -**Options**: - -* `-d, --destination, --dest TEXT`: Destination address (ss58) of the wallet (coldkey). -* `-a, --amount FLOAT`: Amount (in TAO) to transfer. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli wallets inspect` - -Displays the details of the user's wallet pairs (coldkey, hotkey) on the Bittensor network. - -The output is presented as a table with the below columns: - -- Coldkey: The coldkey associated with the user's wallet. - -- Balance: The balance of the coldkey. - -- Delegate: The name of the delegate to which the coldkey has staked TAO. - -- Stake: The amount of stake held by both the coldkey and hotkey. - -- Emission: The emission or rewards earned from staking. - -- Netuid: The network unique identifier of the subnet where the hotkey is active (i.e., validating). - -- Hotkey: The hotkey associated with the neuron on the network. - -**Usage:** - -This command can be used to inspect a single wallet or all the wallets located at a specified path. It is useful for a comprehensive overview of a user's participation and performance in the Bittensor network. - -**Example:** - -``` -btcli wallet inspect -``` - -``` -btcli wallet inspect --all -n 1 -n 2 -n 3 -``` - -Note: The `inspect` command is for displaying information only and does not perform any transactions or state changes on the blockchain. It is intended to be used with Bittensor CLI and not as a standalone function in user code. - -**Usage**: - -```console -btcli wallets inspect [OPTIONS] -``` - -**Options**: - -* `-a, --all, --all-wallets`: Inspect all the wallets at the specified wallet path. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `-n, --netuids, --netuid TEXT`: Set the netuid(s) to exclude. Separate multiple netuids with a comma, for example: `-n 0,1,2`. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli wallets faucet` - -Obtain test TAO tokens by performing Proof of Work (PoW). - -This command is useful for users who need test tokens for operations on a local blockchain. - -**Important:**: THIS COMMAND IS DISABLED ON FINNEY AND TESTNET. - -**Usage:** - -The command uses the proof-of-work (POW) mechanism to validate the user's effort and rewards them with test TAO tokens. It is -typically used in local blockchain environments where transactions do not use real TAO tokens. - -**Example:** - -``` -btcli wallet faucet --faucet.num_processes 4 --faucet.cuda.use_cuda -``` - -Note: This command is meant for used in local environments where users can experiment with the blockchain without using real TAO tokens. Users must have the necessary hardware setup, especially when opting for CUDA-based GPU calculations. It is currently disabled on testnet and mainnet (finney). You can only use this command on a local blockchain. - -**Usage**: - -```console -btcli wallets faucet [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--processors INTEGER`: Number of processors to use for proof of work (POW) registration. -* `-u, --update-interval INTEGER`: The number of nonces to process before checking for next block during registration [default: 50000] -* `--output-in-place / --no-output-in-place`: Whether to output the registration statistics in-place. [default: output-in-place] -* `-v, --verbose`: Whether to output the registration statistics verbosely. -* `--use-cuda, --cuda / --no-use-cuda, --no-cuda`: Set flag to use CUDA for proof of work (POW) registration. [default: no-use-cuda] -* `-d, --dev-id INTEGER`: Set the CUDA device id(s) in the order of speed, where 0 is the fastest. [default: 0] -* `-tbp, --threads-per-block INTEGER`: Set the number of threads per block for CUDA. [default: 256] -* `--max-successes INTEGER`: Set the maximum number of times to successfully run the faucet for this command. [default: 3] -* `--help`: Show this message and exit. - -### `btcli wallets set-identity` - -Create or update the on-chain identity of a coldkey or a hotkey on the Bittensor network. Incurs a 1 TAO transaction fee. - -The on-chain identity includes attributes such as display name, legal name, web URL, PGP fingerprint, and contact information, among others. - -The command prompts the user for the identity attributes and validates the input size for each attribute. It provides an option to update an existing validator hotkey identity. If the user consents to the transaction cost, the identity is updated on the blockchain. - -Each field has a maximum size of 64 bytes. The PGP fingerprint field is an exception and has a maximum size of 20 bytes. The user is prompted to enter the PGP fingerprint as a hex string, which is then converted to bytes. The user is also prompted to enter the coldkey or hotkey ``ss58`` address for the identity to be updated. - -If the user does not have a hotkey, the coldkey address is used by default. If setting a validator identity, the hotkey will be used by default. If the user is setting an identity for a subnet, the coldkey will be used by default. - -**Example:** - -``` -btcli wallet set_identity -``` - -Note: This command should only be used if the user is willing to incur the a recycle fee associated with setting an identity on the blockchain. It is a high-level command that makes changes to the blockchain state and should not be used programmatically as part of other scripts or applications. - -**Usage**: - -```console -btcli wallets set-identity [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--name TEXT`: The display name for the identity. -* `--web-url, --web TEXT`: The web URL for the identity. -* `--image-url, --image TEXT`: The image URL for the identity. -* `--discord TEXT`: The Discord handle for the identity. -* `--description TEXT`: The description for the identity. -* `--additional TEXT`: Additional details for the identity. -* `--github TEXT`: The GitHub repository for the identity. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--help`: Show this message and exit. - -### `btcli wallets get-identity` - -Shows the identity details of a user's coldkey or hotkey. - -The command displays the information in a table format showing: - -- Address: The ``ss58`` address of the queried key. - -- Item: Various attributes of the identity such as stake, rank, and trust. - -- Value: The corresponding values of the attributes. - -**Example:** - -``` -btcli wallet get_identity --key <s58_address> -``` - -Note: This command is primarily used for informational purposes and has no side effects on the blockchain network state. - -**Usage**: - -```console -btcli wallets get-identity [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-k, --ss58, --coldkey_ss58, --coldkey.ss58_address, --coldkey.ss58, --key TEXT`: Coldkey address of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli wallets sign` - -Allows users to sign a message with the provided wallet or wallet hotkey. Use this command to easily prove your ownership of a coldkey or a hotkey. - -**Usage:** - -Using the provided wallet (coldkey), the command generates a signature for a given message. - -**Example:** - -``` -btcli wallet sign --wallet-name default --message '{"something": "here", "timestamp": 1719908486}' -``` - -``` -btcli wallet sign --wallet-name default --wallet-hotkey hotkey --message '{"something": "here", "timestamp": 1719908486}' -``` - - -**Usage**: - -```console -btcli wallets sign [OPTIONS] -``` - -**Options**: - -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--use-hotkey / --no-use-hotkey`: If specified, the message will be signed by the hotkey. If not specified, the user will be prompted. -* `--message TEXT`: The message to encode and sign -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli wallets swap_hotkey` - -Swap hotkeys of a given wallet on the blockchain. For a registered key pair, for example, a (coldkeyA, hotkeyA) pair, this command swaps the hotkeyA with a new, unregistered, hotkeyB to move the original registration to the (coldkeyA, hotkeyB) pair. - -**Usage:** - -The command is used to swap the hotkey of a wallet for another hotkey on that same wallet. - -**Important:** - -- Make sure that your original key pair (coldkeyA, hotkeyA) is already registered. -- Make sure that you use a newly created hotkeyB in this command. A hotkeyB that is already registered cannot be used in this command. -- Finally, note that this command requires a fee of 1 TAO for recycling and this fee is taken from your wallet (coldkeyA). - -**Example:** - -``` -btcli wallet swap_hotkey destination_hotkey_name --wallet-name your_wallet_name --wallet-hotkey original_hotkey -``` - -**Usage**: - -```console -btcli wallets swap_hotkey [OPTIONS] [DESTINATION_HOTKEY_NAME] -``` - -**Arguments**: - -* `[DESTINATION_HOTKEY_NAME]`: Destination hotkey name. - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--help`: Show this message and exit. - -### `btcli wallets regen_coldkey` - -Regenerate a coldkey for a wallet on the Bittensor blockchain network. - -This command is used to create a new coldkey from an existing mnemonic, seed, or JSON file. - -**Usage:** - -Users can specify a mnemonic, a seed string, or a JSON file path to regenerate a coldkey. The command supports optional password protection for the generated key. - -**Example:** - -``` -btcli wallet regen-coldkey --mnemonic "word1 word2 ... word12" -``` - - -Note: This command is critical for users who need to regenerate their coldkey either for recovery or for security reasons. - -**Usage**: - -```console -btcli wallets regen_coldkey [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--mnemonic TEXT`: Mnemonic used to regenerate your key. For example: horse cart dog ... -* `--seed TEXT`: Seed hex string used to regenerate your key. For example: 0x1234... -* `-j, --json TEXT`: Path to a JSON file containing the encrypted key backup. For example, a JSON file from PolkadotJS. -* `--json-password TEXT`: Password to decrypt the JSON file. -* `--use-password / --no-use-password`: Set this to `True` to protect the generated Bittensor key with a password. [default: use-password] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli wallets regen_coldkeypub` - -Regenerates the public part of a coldkey (coldkeypub.txt) for a wallet. - -Use this command when you need to move machine for subnet mining. Use the public key or SS58 address from your coldkeypub.txt that you have on another machine to regenerate the coldkeypub.txt on this new machine. - -**Usage:** - -The command requires either a public key in hexadecimal format or an ``SS58`` address from the existing coldkeypub.txt from old machine to regenerate the coldkeypub on the new machine. - -**Example:** - -``` -btcli wallet regen_coldkeypub --ss58_address 5DkQ4... -``` - -Note: This command is particularly useful for users who need to regenerate their coldkeypub, perhaps due to file corruption or loss. You will need either ss58 address or public hex key from your old coldkeypub.txt for the wallet. It is a recovery-focused utility that ensures continued access to your wallet functionalities. - -**Usage**: - -```console -btcli wallets regen_coldkeypub [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--public-key-hex TEXT`: The public key in hex format. -* `--ss58, --ss58-address TEXT`: The SS58 address of the coldkey. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli wallets regen_hotkey` - -Regenerates a hotkey for a wallet. - -Similar to regenerating a coldkey, this command creates a new hotkey from a mnemonic, seed, or JSON file. - -**Usage:** - -Users can provide a mnemonic, seed string, or a JSON file to regenerate the hotkey. The command supports optional password protection and can overwrite an existing hotkey. - - -``` -btcli wallet regen_hotkey --seed 0x1234... -``` - -Note: This command is essential for users who need to regenerate their hotkey, possibly for security upgrades or key recovery. -It should be used with caution to avoid accidental overwriting of existing keys. - -**Usage**: - -```console -btcli wallets regen_hotkey [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--mnemonic TEXT`: Mnemonic used to regenerate your key. For example: horse cart dog ... -* `--seed TEXT`: Seed hex string used to regenerate your key. For example: 0x1234... -* `-j, --json TEXT`: Path to a JSON file containing the encrypted key backup. For example, a JSON file from PolkadotJS. -* `--json-password TEXT`: Password to decrypt the JSON file. -* `--use-password / --no-use-password`: Set to 'True' to protect the generated Bittensor key with a password. [default: no-use-password] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli wallets new_hotkey` - -Create a new hotkey for a wallet. - -**Usage:** - -This command is used to generate a new hotkey for managing a neuron or participating in a subnet. It provides options for the mnemonic word count, and supports password protection. It also allows overwriting the -existing hotkey. - -**Example:** - -``` -btcli wallet new-hotkey --n_words 24 -``` - -Note: This command is useful to create additional hotkeys for different purposes, such as running multiple subnet miners or subnet validators or separating operational roles within the Bittensor network. - -**Usage**: - -```console -btcli wallets new_hotkey [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--n-words, --n_words INTEGER`: The number of words used in the mnemonic. Options: [12, 15, 18, 21, 24] -* `--use-password / --no-use-password`: Set to 'True' to protect the generated Bittensor key with a password. [default: no-use-password] -* `--uri TEXT`: Create wallet from uri (e.g. 'Alice', 'Bob', 'Charlie', 'Dave', 'Eve') -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli wallets new_coldkey` - -Create a new coldkey. A coldkey is required for holding TAO balances and performing high-value transactions. - -**Usage:** - -The command creates a new coldkey. It provides options for the mnemonic word count, and supports password protection. It also allows overwriting an existing coldkey. - -**Example:** - -``` -btcli wallet new_coldkey --n_words 15 -``` - -Note: This command is crucial for users who need to create a new coldkey for enhanced security or as part of setting up a new wallet. It is a foundational step in establishing a secure presence on the Bittensor network. - -**Usage**: - -```console -btcli wallets new_coldkey [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--n-words, --n_words INTEGER`: The number of words used in the mnemonic. Options: [12, 15, 18, 21, 24] -* `--use-password / --no-use-password`: Set this to `True` to protect the generated Bittensor key with a password. [default: use-password] -* `--uri TEXT`: Create wallet from uri (e.g. 'Alice', 'Bob', 'Charlie', 'Dave', 'Eve') -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli wallets set_identity` - -Create or update the on-chain identity of a coldkey or a hotkey on the Bittensor network. Incurs a 1 TAO transaction fee. - -The on-chain identity includes attributes such as display name, legal name, web URL, PGP fingerprint, and contact information, among others. - -The command prompts the user for the identity attributes and validates the input size for each attribute. It provides an option to update an existing validator hotkey identity. If the user consents to the transaction cost, the identity is updated on the blockchain. - -Each field has a maximum size of 64 bytes. The PGP fingerprint field is an exception and has a maximum size of 20 bytes. The user is prompted to enter the PGP fingerprint as a hex string, which is then converted to bytes. The user is also prompted to enter the coldkey or hotkey ``ss58`` address for the identity to be updated. - -If the user does not have a hotkey, the coldkey address is used by default. If setting a validator identity, the hotkey will be used by default. If the user is setting an identity for a subnet, the coldkey will be used by default. - -**Example:** - -``` -btcli wallet set_identity -``` - -Note: This command should only be used if the user is willing to incur the a recycle fee associated with setting an identity on the blockchain. It is a high-level command that makes changes to the blockchain state and should not be used programmatically as part of other scripts or applications. - -**Usage**: - -```console -btcli wallets set_identity [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--name TEXT`: The display name for the identity. -* `--web-url, --web TEXT`: The web URL for the identity. -* `--image-url, --image TEXT`: The image URL for the identity. -* `--discord TEXT`: The Discord handle for the identity. -* `--description TEXT`: The description for the identity. -* `--additional TEXT`: Additional details for the identity. -* `--github TEXT`: The GitHub repository for the identity. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--help`: Show this message and exit. - -### `btcli wallets get_identity` - -Shows the identity details of a user's coldkey or hotkey. - -The command displays the information in a table format showing: - -- Address: The ``ss58`` address of the queried key. - -- Item: Various attributes of the identity such as stake, rank, and trust. - -- Value: The corresponding values of the attributes. - -**Example:** - -``` -btcli wallet get_identity --key <s58_address> -``` - -Note: This command is primarily used for informational purposes and has no side effects on the blockchain network state. - -**Usage**: - -```console -btcli wallets get_identity [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-k, --ss58, --coldkey_ss58, --coldkey.ss58_address, --coldkey.ss58, --key TEXT`: Coldkey address of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -## `btcli stake` - -**Usage**: - -```console -btcli stake [OPTIONS] COMMAND [ARGS]... -``` - -**Options**: - -* `--help`: Show this message and exit. - -**Commands**: - -* `add`: Stake TAO to one or more hotkeys on... -* `remove`: Unstake TAO from one or more hotkeys and... -* `list`: Display detailed stake information for a... -* `move`: Move staked TAO between hotkeys while... -* `transfer`: Transfer stake between coldkeys while... -* `swap`: Swap stake between different subnets while... -* `child`: Child Hotkey commands, alias: `children` -* `children` - -### `btcli stake add` - -Stake TAO to one or more hotkeys on specific netuids with your coldkey. - -Stake is always added through your coldkey's free balance. For stake movement, see the `btcli stake move` command. - -Common Examples: -1. Interactive staking (guided prompts): - ``` - btcli stake add - ``` - -2. Safe staking with rate tolerance of 10% with partial transaction disabled: - ``` - btcli stake add --amount 100 --netuid 1 --safe --tolerance 0.1 --no-partial - ``` - -3. Allow partial stake if rates change with tolerance of 10%: - ``` - btcli stake add --amount 300 --safe --partial --tolerance 0.1 - ``` - -4. Unsafe staking with no rate protection: - ``` - btcli stake add --amount 300 --netuid 1 --unsafe - ``` - -5. Stake to multiple hotkeys: - ``` - btcli stake add --amount 200 --include-hotkeys hk_ss58_1,hk_ss58_2,hk_ss58_3 - ``` - -6. Stake all balance to a subnet: - ``` - btcli stake add --all --netuid 3 - ``` - -Safe Staking Parameters:--safe: Enables rate tolerance checks - --tolerance: Maximum % rate change allowed (0.05 = 5%) - --partial: Complete partial stake if rates exceed tolerance - -**Usage**: - -```console -btcli stake add [OPTIONS] -``` - -**Options**: - -* `-a, --all-tokens, --all`: When set, the command stakes all the available TAO from the coldkey. -* `--amount FLOAT`: The amount of TAO to stake [default: 0.0] -* `-in, --include-hotkeys, --hotkey-ss58-address TEXT`: Specifies hotkeys by name or ss58 address to stake to. For example, `-in hk1,hk2` -* `-ex, --exclude-hotkeys TEXT`: Specifies hotkeys by name or ss58 address to not to stake to (use this option only with `--all-hotkeys`) i.e. `--all-hotkeys -ex hk3,hk4` -* `--all-hotkeys / --no-all-hotkeys`: When set, this command stakes to all hotkeys associated with the wallet. Do not use if specifying hotkeys in `--include-hotkeys`. [default: no-all-hotkeys] -* `--netuid INTEGER`: The netuid of the subnet in the network, (e.g. 1). -* `--all-netuids / --no-all-netuids`: Use all netuids [default: no-all-netuids] -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--slippage, --slippage-tolerance, --tolerance FLOAT`: Set the rate tolerance percentage for transactions (default: 0.05%). -* `--safe-staking, --safe / --no-safe-staking, --unsafe`: Enable or disable safe staking mode (default: enabled). -* `--allow-partial-stake, --partial, --allow, --allow-partial / --no-allow-partial-stake, --no-partial, --not-allow, --not-partial`: Enable or disable partial stake mode (default: disabled). -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli stake remove` - -Unstake TAO from one or more hotkeys and transfer them back to the user's coldkey wallet. - -This command is used to withdraw TAO or Alpha stake from different hotkeys. - -Common Examples: -1. Interactive unstaking (guided prompts): - ``` - btcli stake remove - ``` - -2. Safe unstaking with 10% rate tolerance: - ``` - btcli stake remove --amount 100 --netuid 1 --safe --tolerance 0.1 - ``` - -3. Allow partial unstake if rates change: - ``` - btcli stake remove --amount 300 --safe --partial - ``` - -4. Unstake from multiple hotkeys: - ``` - btcli stake remove --amount 200 --include-hotkeys hk1,hk2,hk3 - ``` - -5. Unstake all from a hotkey: - ``` - btcli stake remove --all - ``` - -6. Unstake all Alpha from a hotkey and stake to Root: - ``` - btcli stake remove --all-alpha - ``` - -Safe Staking Parameters: - --safe: Enables rate tolerance checks during unstaking - --tolerance: Max allowed rate change (0.05 = 5%) - --partial: Complete partial unstake if rates exceed tolerance - -**Usage**: - -```console -btcli stake remove [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--netuid INTEGER`: The netuid of the subnet in the network, (e.g. 1). -* `--all-netuids / --no-all-netuids`: Use all netuids [default: no-all-netuids] -* `-a, --amount FLOAT`: The amount of TAO to unstake. [default: 0.0] -* `--hotkey-ss58-address TEXT`: The ss58 address of the hotkey to unstake from. -* `-in, --include-hotkeys TEXT`: Specifies the hotkeys by name or ss58 address to unstake from. For example, `-in hk1,hk2` -* `-ex, --exclude-hotkeys TEXT`: Specifies the hotkeys by name or ss58 address not to unstake from (only use with `--all-hotkeys`) i.e. `--all-hotkeys -ex hk3,hk4` -* `--all-hotkeys / --no-all-hotkeys`: When set, this command unstakes from all the hotkeys associated with the wallet. Do not use if specifying hotkeys in `--include-hotkeys`. [default: no-all-hotkeys] -* `--slippage, --slippage-tolerance, --tolerance FLOAT`: Set the rate tolerance percentage for transactions (default: 0.05%). -* `--safe-staking, --safe / --no-safe-staking, --unsafe`: Enable or disable safe staking mode (default: enabled). -* `--allow-partial-stake, --partial, --allow, --allow-partial / --no-allow-partial-stake, --no-partial, --not-allow, --not-partial`: Enable or disable partial stake mode (default: disabled). -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `-i, --interactive`: Enter interactive mode for unstaking. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli stake list` - -Display detailed stake information for a wallet across all subnets. - -Shows stake allocations, exchange rates, and emissions for each hotkey. - -Common Examples: -1. Basic stake overview: -``` -btcli stake list --wallet.name my_wallet -``` - -2. Live updating view with refresh: -``` -btcli stake list --wallet.name my_wallet --live -``` - -3. View specific coldkey by address: -``` -btcli stake list --ss58 5Dk...X3q -``` - -4. Verbose output with full values: -``` -btcli stake list --wallet.name my_wallet --verbose -``` - -**Usage**: - -```console -btcli stake list [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `--ss58, --coldkey_ss58, --coldkey.ss58_address, --coldkey.ss58 TEXT`: Coldkey address of the wallet -* `--live`: Display live view of the table -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--help`: Show this message and exit. - -### `btcli stake move` - -Move staked TAO between hotkeys while keeping the same coldkey ownership. - -This command allows you to: -- Move stake from one hotkey to another hotkey -- Move stake between different subnets -- Keep the same coldkey ownership - -You can specify: -- The origin subnet (--origin-netuid) -- The destination subnet (--dest-netuid) -- The destination hotkey (--dest-hotkey) -- The amount to move (--amount) - -If no arguments are provided, an interactive selection menu will be shown. - -**Example:** - -``` -btcli stake move -``` - -**Usage**: - -```console -btcli stake move [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--origin-netuid INTEGER`: Origin netuid -* `--dest-netuid INTEGER`: Destination netuid -* `--dest-ss58, --dest TEXT`: Destination hotkey -* `--amount FLOAT`: The amount of TAO to stake -* `--stake-all, --all`: Stake all -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--help`: Show this message and exit. - -### `btcli stake transfer` - -Transfer stake between coldkeys while keeping the same hotkey ownership. - -This command allows you to: -- Transfer stake from one coldkey to another coldkey -- Keep the same hotkey ownership -- Transfer stake between different subnets - -You can specify: -- The origin subnet (--origin-netuid) -- The destination subnet (--dest-netuid) -- The destination wallet/address (--dest) -- The amount to transfer (--amount) - -If no arguments are provided, an interactive selection menu will be shown. - -**Example:** - -Transfer 100 TAO from subnet 1 to subnet 2: -``` -btcli stake transfer --origin-netuid 1 --dest-netuid 2 --dest wallet2 --amount 100 -``` - -Using SS58 address: -``` -btcli stake transfer --origin-netuid 1 --dest-netuid 2 --dest 5FrLxJsyJ5x9n2rmxFwosFraxFCKcXZDngEP9H7qjkKgHLcK --amount 100 -``` - -**Usage**: - -```console -btcli stake transfer [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--origin-netuid INTEGER`: The netuid to transfer stake from -* `--dest-netuid INTEGER`: The netuid to transfer stake to -* `--dest-ss58, --dest, --dest-coldkey TEXT`: The destination wallet name or SS58 address to transfer stake to -* `-a, --amount FLOAT`: Amount of stake to transfer -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli stake swap` - -Swap stake between different subnets while keeping the same coldkey-hotkey pair ownership. - -This command allows you to: -- Move stake from one subnet to another subnet -- Keep the same coldkey ownership -- Keep the same hotkey ownership - -You can specify: -- The origin subnet (--origin-netuid) -- The destination subnet (--dest-netuid) -- The amount to swap (--amount) - -If no arguments are provided, an interactive selection menu will be shown. - -**Example:** - -Swap 100 TAO from subnet 1 to subnet 2: -``` -btcli stake swap --wallet-name default --wallet-hotkey default --origin-netuid 1 --dest-netuid 2 --amount 100 -``` - -**Usage**: - -```console -btcli stake swap [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `-o, --origin-netuid, --origin INTEGER`: The netuid to swap stake from -* `-d, --dest-netuid, --dest INTEGER`: The netuid to swap stake to -* `-a, --amount FLOAT`: Amount of stake to swap -* `--swap-all, --all`: Swap all available stake -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--wait-for-inclusion / --no-wait-for-inclusion`: If `True`, waits until the transaction is included in a block. [default: wait-for-inclusion] -* `--wait-for-finalization / --no-wait-for-finalization`: If `True`, waits until the transaction is finalized on the blockchain. [default: wait-for-finalization] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli stake child` - -**Usage**: - -```console -btcli stake child [OPTIONS] COMMAND [ARGS]... -``` - -**Options**: - -* `--help`: Show this message and exit. - -**Commands**: - -* `get`: Get all the child hotkeys on a specified... -* `set`: Set child hotkeys on specified subnets. -* `revoke`: Remove all children hotkeys on a specified... -* `take`: Get and set your child hotkey take on a... - -#### `btcli stake child get` - -Get all the child hotkeys on a specified subnet. - -Users can specify the subnet and see the child hotkeys and the proportion that is given to them. This command is used to view the authority delegated to different hotkeys on the subnet. - -**Example:** - -``` -btcli stake child get --netuid 1 -``` -``` -btcli stake child get --all-netuids -``` - -**Usage**: - -```console -btcli stake child get [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--netuid INTEGER`: The netuid of the subnet (e.g. 2) -* `--all-netuids, --all, --allnetuids`: When set, gets the child hotkeys from all the subnets. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -#### `btcli stake child set` - -Set child hotkeys on specified subnets. - -Users can specify the 'proportion' to delegate to child hotkeys (ss58 address). The sum of proportions cannot be greater than 1. - -This command is used to delegate authority to different hotkeys, securing their position and influence on the subnet. - -**Example:** - -``` -btcli stake child set -c 5FCL3gmjtQV4xxxxuEPEFQVhyyyyqYgNwX7drFLw7MSdBnxP -c 5Hp5dxxxxtGg7pu8dN2btyyyyVA1vELmM9dy8KQv3LxV8PA7 --hotkey default --netuid 1 -p 0.3 -p 0.7 -``` - -**Usage**: - -```console -btcli stake child set [OPTIONS] -``` - -**Options**: - -* `-c, --children TEXT`: Enter child hotkeys (ss58) -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--netuid INTEGER`: The netuid of the subnet in the network, (e.g. 1). -* `--all-netuids / --no-all-netuids`: Use all netuids [default: no-all-netuids] -* `-p, --proportions, --prop FLOAT`: Enter the stake weight proportions for the child hotkeys (sum should be less than or equal to 1) -* `--wait-for-inclusion / --no-wait-for-inclusion`: If `True`, waits until the transaction is included in a block. [default: wait-for-inclusion] -* `--wait-for-finalization / --no-wait-for-finalization`: If `True`, waits until the transaction is finalized on the blockchain. [default: wait-for-finalization] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -#### `btcli stake child revoke` - -Remove all children hotkeys on a specified subnet. - -This command is used to remove delegated authority from all child hotkeys, removing their position and influence on the subnet. - -**Example:** - -``` -btcli stake child revoke --hotkey <parent_hotkey> --netuid 1 -``` - -**Usage**: - -```console -btcli stake child revoke [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--netuid INTEGER`: The netuid of the subnet, (e.g. 8) -* `--all-netuids, --all, --allnetuids`: When this flag is used it sets child hotkeys on all the subnets. -* `--wait-for-inclusion / --no-wait-for-inclusion`: If `True`, waits until the transaction is included in a block. [default: wait-for-inclusion] -* `--wait-for-finalization / --no-wait-for-finalization`: If `True`, waits until the transaction is finalized on the blockchain. [default: wait-for-finalization] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -#### `btcli stake child take` - -Get and set your child hotkey take on a specified subnet. - -The child hotkey take must be between 0 - 18%. - -**Example:** - -To get the current take value, do not use the '--take' option: - - ``` - btcli stake child take --hotkey <child_hotkey> --netuid 1 - ``` - -To set a new take value, use the '--take' option: - - ``` - btcli stake child take --hotkey <child_hotkey> --take 0.12 --netuid 1 - ``` - -**Usage**: - -```console -btcli stake child take [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--hotkey TEXT` -* `--netuid INTEGER`: The netuid of the subnet, (e.g. 23) -* `--all-netuids, --all, --allnetuids`: When this flag is used it sets child hotkeys on all the subnets. -* `-t, --take FLOAT`: Use to set the take value for your child hotkey. When not used, the command will fetch the current take value. -* `--wait-for-inclusion / --no-wait-for-inclusion`: If `True`, waits until the transaction is included in a block. [default: wait-for-inclusion] -* `--wait-for-finalization / --no-wait-for-finalization`: If `True`, waits until the transaction is finalized on the blockchain. [default: wait-for-finalization] -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli stake children` - -**Usage**: - -```console -btcli stake children [OPTIONS] COMMAND [ARGS]... -``` - -**Options**: - -* `--help`: Show this message and exit. - -**Commands**: - -* `get`: Get all the child hotkeys on a specified... -* `set`: Set child hotkeys on specified subnets. -* `revoke`: Remove all children hotkeys on a specified... -* `take`: Get and set your child hotkey take on a... - -#### `btcli stake children get` - -Get all the child hotkeys on a specified subnet. - -Users can specify the subnet and see the child hotkeys and the proportion that is given to them. This command is used to view the authority delegated to different hotkeys on the subnet. - -**Example:** - -``` -btcli stake child get --netuid 1 -``` -``` -btcli stake child get --all-netuids -``` - -**Usage**: - -```console -btcli stake children get [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--netuid INTEGER`: The netuid of the subnet (e.g. 2) -* `--all-netuids, --all, --allnetuids`: When set, gets the child hotkeys from all the subnets. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -#### `btcli stake children set` - -Set child hotkeys on specified subnets. - -Users can specify the 'proportion' to delegate to child hotkeys (ss58 address). The sum of proportions cannot be greater than 1. - -This command is used to delegate authority to different hotkeys, securing their position and influence on the subnet. - -**Example:** - -``` -btcli stake child set -c 5FCL3gmjtQV4xxxxuEPEFQVhyyyyqYgNwX7drFLw7MSdBnxP -c 5Hp5dxxxxtGg7pu8dN2btyyyyVA1vELmM9dy8KQv3LxV8PA7 --hotkey default --netuid 1 -p 0.3 -p 0.7 -``` - -**Usage**: - -```console -btcli stake children set [OPTIONS] -``` - -**Options**: - -* `-c, --children TEXT`: Enter child hotkeys (ss58) -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--netuid INTEGER`: The netuid of the subnet in the network, (e.g. 1). -* `--all-netuids / --no-all-netuids`: Use all netuids [default: no-all-netuids] -* `-p, --proportions, --prop FLOAT`: Enter the stake weight proportions for the child hotkeys (sum should be less than or equal to 1) -* `--wait-for-inclusion / --no-wait-for-inclusion`: If `True`, waits until the transaction is included in a block. [default: wait-for-inclusion] -* `--wait-for-finalization / --no-wait-for-finalization`: If `True`, waits until the transaction is finalized on the blockchain. [default: wait-for-finalization] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -#### `btcli stake children revoke` - -Remove all children hotkeys on a specified subnet. - -This command is used to remove delegated authority from all child hotkeys, removing their position and influence on the subnet. - -**Example:** - -``` -btcli stake child revoke --hotkey <parent_hotkey> --netuid 1 -``` - -**Usage**: - -```console -btcli stake children revoke [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--netuid INTEGER`: The netuid of the subnet, (e.g. 8) -* `--all-netuids, --all, --allnetuids`: When this flag is used it sets child hotkeys on all the subnets. -* `--wait-for-inclusion / --no-wait-for-inclusion`: If `True`, waits until the transaction is included in a block. [default: wait-for-inclusion] -* `--wait-for-finalization / --no-wait-for-finalization`: If `True`, waits until the transaction is finalized on the blockchain. [default: wait-for-finalization] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -#### `btcli stake children take` - -Get and set your child hotkey take on a specified subnet. - -The child hotkey take must be between 0 - 18%. - -**Example:** - -To get the current take value, do not use the '--take' option: - - ``` - btcli stake child take --hotkey <child_hotkey> --netuid 1 - ``` - -To set a new take value, use the '--take' option: - - ``` - btcli stake child take --hotkey <child_hotkey> --take 0.12 --netuid 1 - ``` - -**Usage**: - -```console -btcli stake children take [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--hotkey TEXT` -* `--netuid INTEGER`: The netuid of the subnet, (e.g. 23) -* `--all-netuids, --all, --allnetuids`: When this flag is used it sets child hotkeys on all the subnets. -* `-t, --take FLOAT`: Use to set the take value for your child hotkey. When not used, the command will fetch the current take value. -* `--wait-for-inclusion / --no-wait-for-inclusion`: If `True`, waits until the transaction is included in a block. [default: wait-for-inclusion] -* `--wait-for-finalization / --no-wait-for-finalization`: If `True`, waits until the transaction is finalized on the blockchain. [default: wait-for-finalization] -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -## `btcli st` - -**Usage**: - -```console -btcli st [OPTIONS] COMMAND [ARGS]... -``` - -**Options**: - -* `--help`: Show this message and exit. - -**Commands**: - -* `add`: Stake TAO to one or more hotkeys on... -* `remove`: Unstake TAO from one or more hotkeys and... -* `list`: Display detailed stake information for a... -* `move`: Move staked TAO between hotkeys while... -* `transfer`: Transfer stake between coldkeys while... -* `swap`: Swap stake between different subnets while... -* `child`: Child Hotkey commands, alias: `children` -* `children` - -### `btcli st add` - -Stake TAO to one or more hotkeys on specific netuids with your coldkey. - -Stake is always added through your coldkey's free balance. For stake movement, see -the `btcli stake move` command. - - -Common Examples: -1. Interactive staking (guided prompts): - ``` - btcli stake add - ``` - -2. Safe staking with rate tolerance of 10% with partial transaction disabled: - ``` - btcli stake add --amount 100 --netuid 1 --safe --tolerance 0.1 --no-partial - ``` - -3. Allow partial stake if rates change with tolerance of 10%: - ``` - btcli stake add --amount 300 --safe --partial --tolerance 0.1 - ``` - -4. Unsafe staking with no rate protection: - ``` - btcli stake add --amount 300 --netuid 1 --unsafe - ``` - -5. Stake to multiple hotkeys: - ``` - btcli stake add --amount 200 --include-hotkeys hk_ss58_1,hk_ss58_2,hk_ss58_3 - ``` - -6. Stake all balance to a subnet: - ``` - btcli stake add --all --netuid 3 - ``` - -Safe Staking Parameters: --safe: Enables rate tolerance checks - --tolerance: Maximum % rate change allowed (0.05 = 5%) - --partial: Complete partial stake if rates exceed tolerance - -**Usage**: - -```console -btcli st add [OPTIONS] -``` - -**Options**: - -* `-a, --all-tokens, --all`: When set, the command stakes all the available TAO from the coldkey. -* `--amount FLOAT`: The amount of TAO to stake [default: 0.0] -* `-in, --include-hotkeys, --hotkey-ss58-address TEXT`: Specifies hotkeys by name or ss58 address to stake to. For example, `-in hk1,hk2` -* `-ex, --exclude-hotkeys TEXT`: Specifies hotkeys by name or ss58 address to not to stake to (use this option only with `--all-hotkeys`) i.e. `--all-hotkeys -ex hk3,hk4` -* `--all-hotkeys / --no-all-hotkeys`: When set, this command stakes to all hotkeys associated with the wallet. Do not use if specifying hotkeys in `--include-hotkeys`. [default: no-all-hotkeys] -* `--netuid INTEGER`: The netuid of the subnet in the network, (e.g. 1). -* `--all-netuids / --no-all-netuids`: Use all netuids [default: no-all-netuids] -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--slippage, --slippage-tolerance, --tolerance FLOAT`: Set the rate tolerance percentage for transactions (default: 0.05%). -* `--safe-staking, --safe / --no-safe-staking, --unsafe`: Enable or disable safe staking mode (default: enabled). -* `--allow-partial-stake, --partial, --allow, --allow-partial / --no-allow-partial-stake, --no-partial, --not-allow, --not-partial`: Enable or disable partial stake mode (default: disabled). -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli st remove` - -Unstake TAO from one or more hotkeys and transfer them back to the user's coldkey wallet. - -This command is used to withdraw TAO or Alpha stake from different hotkeys. - -Common Examples: -1. Interactive unstaking (guided prompts): - ``` - btcli stake remove - ``` - -2. Safe unstaking with 10% rate tolerance: - ``` - btcli stake remove --amount 100 --netuid 1 --safe --tolerance 0.1 - ``` - -3. Allow partial unstake if rates change: - ``` - btcli stake remove --amount 300 --safe --partial - ``` - -4. Unstake from multiple hotkeys: - ``` - btcli stake remove --amount 200 --include-hotkeys hk1,hk2,hk3 - ``` - -5. Unstake all from a hotkey: - ``` - btcli stake remove --all - ``` - -6. Unstake all Alpha from a hotkey and stake to Root: - ``` - btcli stake remove --all-alpha - ``` - -Safe Staking Parameters: --safe: Enables rate tolerance checks during unstaking - --tolerance: Max allowed rate change (0.05 = 5%) - --partial: Complete partial unstake if rates exceed tolerance - -**Usage**: - -```console -btcli st remove [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--netuid INTEGER`: The netuid of the subnet in the network, (e.g. 1). -* `--all-netuids / --no-all-netuids`: Use all netuids [default: no-all-netuids] -* `-a, --amount FLOAT`: The amount of TAO to unstake. [default: 0.0] -* `--hotkey-ss58-address TEXT`: The ss58 address of the hotkey to unstake from. -* `-in, --include-hotkeys TEXT`: Specifies the hotkeys by name or ss58 address to unstake from. For example, `-in hk1,hk2` -* `-ex, --exclude-hotkeys TEXT`: Specifies the hotkeys by name or ss58 address not to unstake from (only use with `--all-hotkeys`) i.e. `--all-hotkeys -ex hk3,hk4` -* `--all-hotkeys / --no-all-hotkeys`: When set, this command unstakes from all the hotkeys associated with the wallet. Do not use if specifying hotkeys in `--include-hotkeys`. [default: no-all-hotkeys] -* `--slippage, --slippage-tolerance, --tolerance FLOAT`: Set the rate tolerance percentage for transactions (default: 0.05%). -* `--safe-staking, --safe / --no-safe-staking, --unsafe`: Enable or disable safe staking mode (default: enabled). -* `--allow-partial-stake, --partial, --allow, --allow-partial / --no-allow-partial-stake, --no-partial, --not-allow, --not-partial`: Enable or disable partial stake mode (default: disabled). -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `-i, --interactive`: Enter interactive mode for unstaking. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli st list` - -Display detailed stake information for a wallet across all subnets. - -Shows stake allocations, exchange rates, and emissions for each hotkey. - -Common Examples: -1. Basic stake overview: -``` -btcli stake list --wallet.name my_wallet -``` - -2. Live updating view with refresh: -``` -btcli stake list --wallet.name my_wallet --live -``` - -3. View specific coldkey by address: -``` -btcli stake list --ss58 5Dk...X3q -``` - -4. Verbose output with full values: -``` -btcli stake list --wallet.name my_wallet --verbose -``` - -**Usage**: - -```console -btcli st list [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `--ss58, --coldkey_ss58, --coldkey.ss58_address, --coldkey.ss58 TEXT`: Coldkey address of the wallet -* `--live`: Display live view of the table -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--help`: Show this message and exit. - -### `btcli st move` - -Move staked TAO between hotkeys while keeping the same coldkey ownership. - -This command allows you to: -- Move stake from one hotkey to another hotkey -- Move stake between different subnets -- Keep the same coldkey ownership - -You can specify: -- The origin subnet (--origin-netuid) -- The destination subnet (--dest-netuid) -- The destination hotkey (--dest-hotkey) -- The amount to move (--amount) - -If no arguments are provided, an interactive selection menu will be shown. - -**Example:** - -``` -btcli stake move -``` - -**Usage**: - -```console -btcli st move [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--origin-netuid INTEGER`: Origin netuid -* `--dest-netuid INTEGER`: Destination netuid -* `--dest-ss58, --dest TEXT`: Destination hotkey -* `--amount FLOAT`: The amount of TAO to stake -* `--stake-all, --all`: Stake all -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--help`: Show this message and exit. - -### `btcli st transfer` - -Transfer stake between coldkeys while keeping the same hotkey ownership. - -This command allows you to: -- Transfer stake from one coldkey to another coldkey -- Keep the same hotkey ownership -- Transfer stake between different subnets - -You can specify: -- The origin subnet (--origin-netuid) -- The destination subnet (--dest-netuid) -- The destination wallet/address (--dest) -- The amount to transfer (--amount) - -If no arguments are provided, an interactive selection menu will be shown. - -**Example:** - -Transfer 100 TAO from subnet 1 to subnet 2: -``` -btcli stake transfer --origin-netuid 1 --dest-netuid 2 --dest wallet2 --amount 100 -``` - -Using SS58 address: -``` -btcli stake transfer --origin-netuid 1 --dest-netuid 2 --dest 5FrLxJsyJ5x9n2rmxFwosFraxFCKcXZDngEP9H7qjkKgHLcK --amount 100 -``` - -**Usage**: - -```console -btcli st transfer [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--origin-netuid INTEGER`: The netuid to transfer stake from -* `--dest-netuid INTEGER`: The netuid to transfer stake to -* `--dest-ss58, --dest, --dest-coldkey TEXT`: The destination wallet name or SS58 address to transfer stake to -* `-a, --amount FLOAT`: Amount of stake to transfer -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli st swap` - -Swap stake between different subnets while keeping the same coldkey-hotkey pair ownership. - -This command allows you to: -- Move stake from one subnet to another subnet -- Keep the same coldkey ownership -- Keep the same hotkey ownership - -You can specify: -- The origin subnet (--origin-netuid) -- The destination subnet (--dest-netuid) -- The amount to swap (--amount) - -If no arguments are provided, an interactive selection menu will be shown. - -**Example:** - -Swap 100 TAO from subnet 1 to subnet 2: -``` -btcli stake swap --wallet-name default --wallet-hotkey default --origin-netuid 1 --dest-netuid 2 --amount 100 -``` - -**Usage**: - -```console -btcli st swap [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `-o, --origin-netuid, --origin INTEGER`: The netuid to swap stake from -* `-d, --dest-netuid, --dest INTEGER`: The netuid to swap stake to -* `-a, --amount FLOAT`: Amount of stake to swap -* `--swap-all, --all`: Swap all available stake -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--wait-for-inclusion / --no-wait-for-inclusion`: If `True`, waits until the transaction is included in a block. [default: wait-for-inclusion] -* `--wait-for-finalization / --no-wait-for-finalization`: If `True`, waits until the transaction is finalized on the blockchain. [default: wait-for-finalization] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli st child` - -**Usage**: - -```console -btcli st child [OPTIONS] COMMAND [ARGS]... -``` - -**Options**: - -* `--help`: Show this message and exit. - -**Commands**: - -* `get`: Get all the child hotkeys on a specified... -* `set`: Set child hotkeys on specified subnets. -* `revoke`: Remove all children hotkeys on a specified... -* `take`: Get and set your child hotkey take on a... - -#### `btcli st child get` - -Get all the child hotkeys on a specified subnet. - -Users can specify the subnet and see the child hotkeys and the proportion that is given to them. This command is used to view the authority delegated to different hotkeys on the subnet. - -**Example:** - -``` -btcli stake child get --netuid 1 -``` -``` -btcli stake child get --all-netuids -``` - -**Usage**: - -```console -btcli st child get [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--netuid INTEGER`: The netuid of the subnet (e.g. 2) -* `--all-netuids, --all, --allnetuids`: When set, gets the child hotkeys from all the subnets. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -#### `btcli st child set` - -Set child hotkeys on specified subnets. - -Users can specify the 'proportion' to delegate to child hotkeys (ss58 address). The sum of proportions cannot be greater than 1. - -This command is used to delegate authority to different hotkeys, securing their position and influence on the subnet. - -**Example:** - -``` -btcli stake child set -c 5FCL3gmjtQV4xxxxuEPEFQVhyyyyqYgNwX7drFLw7MSdBnxP -c 5Hp5dxxxxtGg7pu8dN2btyyyyVA1vELmM9dy8KQv3LxV8PA7 --hotkey default --netuid 1 -p 0.3 -p 0.7 -``` - -**Usage**: - -```console -btcli st child set [OPTIONS] -``` - -**Options**: - -* `-c, --children TEXT`: Enter child hotkeys (ss58) -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--netuid INTEGER`: The netuid of the subnet in the network, (e.g. 1). -* `--all-netuids / --no-all-netuids`: Use all netuids [default: no-all-netuids] -* `-p, --proportions, --prop FLOAT`: Enter the stake weight proportions for the child hotkeys (sum should be less than or equal to 1) -* `--wait-for-inclusion / --no-wait-for-inclusion`: If `True`, waits until the transaction is included in a block. [default: wait-for-inclusion] -* `--wait-for-finalization / --no-wait-for-finalization`: If `True`, waits until the transaction is finalized on the blockchain. [default: wait-for-finalization] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -#### `btcli st child revoke` - -Remove all children hotkeys on a specified subnet. - -This command is used to remove delegated authority from all child hotkeys, removing their position and influence on the subnet. - -**Example:** - -``` -btcli stake child revoke --hotkey <parent_hotkey> --netuid 1 -``` - -**Usage**: - -```console -btcli st child revoke [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--netuid INTEGER`: The netuid of the subnet, (e.g. 8) -* `--all-netuids, --all, --allnetuids`: When this flag is used it sets child hotkeys on all the subnets. -* `--wait-for-inclusion / --no-wait-for-inclusion`: If `True`, waits until the transaction is included in a block. [default: wait-for-inclusion] -* `--wait-for-finalization / --no-wait-for-finalization`: If `True`, waits until the transaction is finalized on the blockchain. [default: wait-for-finalization] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -#### `btcli st child take` - -Get and set your child hotkey take on a specified subnet. - -The child hotkey take must be between 0 - 18%. - -**Example:** - -To get the current take value, do not use the '--take' option: - - ``` - btcli stake child take --hotkey <child_hotkey> --netuid 1 - ``` - -To set a new take value, use the '--take' option: - - ``` - btcli stake child take --hotkey <child_hotkey> --take 0.12 --netuid 1 - ``` - -**Usage**: - -```console -btcli st child take [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--hotkey TEXT` -* `--netuid INTEGER`: The netuid of the subnet, (e.g. 23) -* `--all-netuids, --all, --allnetuids`: When this flag is used it sets child hotkeys on all the subnets. -* `-t, --take FLOAT`: Use to set the take value for your child hotkey. When not used, the command will fetch the current take value. -* `--wait-for-inclusion / --no-wait-for-inclusion`: If `True`, waits until the transaction is included in a block. [default: wait-for-inclusion] -* `--wait-for-finalization / --no-wait-for-finalization`: If `True`, waits until the transaction is finalized on the blockchain. [default: wait-for-finalization] -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli st children` - -**Usage**: - -```console -btcli st children [OPTIONS] COMMAND [ARGS]... -``` - -**Options**: - -* `--help`: Show this message and exit. - -**Commands**: - -* `get`: Get all the child hotkeys on a specified... -* `set`: Set child hotkeys on specified subnets. -* `revoke`: Remove all children hotkeys on a specified... -* `take`: Get and set your child hotkey take on a... - -#### `btcli st children get` - -Get all the child hotkeys on a specified subnet. - -Users can specify the subnet and see the child hotkeys and the proportion that is given to them. This command is used to view the authority delegated to different hotkeys on the subnet. - -**Example:** - -``` -btcli stake child get --netuid 1 -``` -``` -btcli stake child get --all-netuids -``` - -**Usage**: - -```console -btcli st children get [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--netuid INTEGER`: The netuid of the subnet (e.g. 2) -* `--all-netuids, --all, --allnetuids`: When set, gets the child hotkeys from all the subnets. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -#### `btcli st children set` - -Set child hotkeys on specified subnets. - -Users can specify the 'proportion' to delegate to child hotkeys (ss58 address). The sum of proportions cannot be greater than 1. - -This command is used to delegate authority to different hotkeys, securing their position and influence on the subnet. - -**Example:** - -``` -btcli stake child set -c 5FCL3gmjtQV4xxxxuEPEFQVhyyyyqYgNwX7drFLw7MSdBnxP -c 5Hp5dxxxxtGg7pu8dN2btyyyyVA1vELmM9dy8KQv3LxV8PA7 --hotkey default --netuid 1 -p 0.3 -p 0.7 -``` - -**Usage**: - -```console -btcli st children set [OPTIONS] -``` - -**Options**: - -* `-c, --children TEXT`: Enter child hotkeys (ss58) -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--netuid INTEGER`: The netuid of the subnet in the network, (e.g. 1). -* `--all-netuids / --no-all-netuids`: Use all netuids [default: no-all-netuids] -* `-p, --proportions, --prop FLOAT`: Enter the stake weight proportions for the child hotkeys (sum should be less than or equal to 1) -* `--wait-for-inclusion / --no-wait-for-inclusion`: If `True`, waits until the transaction is included in a block. [default: wait-for-inclusion] -* `--wait-for-finalization / --no-wait-for-finalization`: If `True`, waits until the transaction is finalized on the blockchain. [default: wait-for-finalization] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -#### `btcli st children revoke` - -Remove all children hotkeys on a specified subnet. - -This command is used to remove delegated authority from all child hotkeys, removing their position and influence on the subnet. - -**Example:** - -``` -btcli stake child revoke --hotkey <parent_hotkey> --netuid 1 -``` - -**Usage**: - -```console -btcli st children revoke [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--netuid INTEGER`: The netuid of the subnet, (e.g. 8) -* `--all-netuids, --all, --allnetuids`: When this flag is used it sets child hotkeys on all the subnets. -* `--wait-for-inclusion / --no-wait-for-inclusion`: If `True`, waits until the transaction is included in a block. [default: wait-for-inclusion] -* `--wait-for-finalization / --no-wait-for-finalization`: If `True`, waits until the transaction is finalized on the blockchain. [default: wait-for-finalization] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -#### `btcli st children take` - -Get and set your child hotkey take on a specified subnet. - -The child hotkey take must be between 0 - 18%. - -**Example:** - -To get the current take value, do not use the '--take' option: - - ``` - btcli stake child take --hotkey <child_hotkey> --netuid 1 - ``` - -To set a new take value, use the '--take' option: - - ``` - btcli stake child take --hotkey <child_hotkey> --take 0.12 --netuid 1 - ``` - -**Usage**: - -```console -btcli st children take [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--hotkey TEXT` -* `--netuid INTEGER`: The netuid of the subnet, (e.g. 23) -* `--all-netuids, --all, --allnetuids`: When this flag is used it sets child hotkeys on all the subnets. -* `-t, --take FLOAT`: Use to set the take value for your child hotkey. When not used, the command will fetch the current take value. -* `--wait-for-inclusion / --no-wait-for-inclusion`: If `True`, waits until the transaction is included in a block. [default: wait-for-inclusion] -* `--wait-for-finalization / --no-wait-for-finalization`: If `True`, waits until the transaction is finalized on the blockchain. [default: wait-for-finalization] -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -## `btcli sudo` - -**Usage**: - -```console -btcli sudo [OPTIONS] COMMAND [ARGS]... -``` - -**Options**: - -* `--help`: Show this message and exit. - -**Commands**: - -* `set`: Used to set hyperparameters for a specific... -* `get`: Shows a list of the hyperparameters for... -* `senate`: Shows the Senate members of the... -* `proposals`: View active proposals for the senate in... -* `senate-vote`: Cast a vote on an active proposal in... -* `set-take`: Allows users to change their delegate take... -* `get-take`: Allows users to check their delegate take... -* `senate_vote`: Cast a vote on an active proposal in... -* `get_take`: Allows users to check their delegate take... -* `set_take`: Allows users to change their delegate take... - -### `btcli sudo set` - -Used to set hyperparameters for a specific subnet. - -This command allows subnet owners to modify hyperparameters such as its tempo, emission rates, and other hyperparameters. - -**Example:** - -``` -btcli sudo set --netuid 1 --param tempo --value 400 -``` - -**Usage**: - -```console -btcli sudo set [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--netuid INTEGER`: The netuid of the subnet in the network, (e.g. 1). -* `--param, --parameter TEXT`: The subnet hyperparameter to set -* `--value TEXT`: Value to set the hyperparameter to. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli sudo get` - -Shows a list of the hyperparameters for the specified subnet. - -**Example:** - -``` -btcli sudo get --netuid 1 -``` - -**Usage**: - -```console -btcli sudo get [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--netuid INTEGER`: The netuid of the subnet in the network, (e.g. 1). -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli sudo senate` - -Shows the Senate members of the Bittensor's governance protocol. - -This command lists the delegates involved in the decision-making process of the Bittensor network, showing their names and wallet addresses. This information is crucial for understanding who holds governance roles within the network. - -**Example:** -``` -btcli sudo senate -``` - -**Usage**: - -```console -btcli sudo senate [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli sudo proposals` - -View active proposals for the senate in the Bittensor's governance protocol. - -This command displays the details of ongoing proposals, including proposal hashes, votes, thresholds, and proposal data. - -**Example:** -``` -btcli sudo proposals -``` - -**Usage**: - -```console -btcli sudo proposals [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli sudo senate-vote` - -Cast a vote on an active proposal in Bittensor's governance protocol. - -This command is used by Senate members to vote on various proposals that shape the network's future. Use `btcli sudo proposals` to see the active proposals and their hashes. - -**Usage:** -The user must specify the hash of the proposal they want to vote on. The command then allows the Senate member to cast a 'Yes' or 'No' vote, contributing to the decision-making process on the proposal. This command is crucial for Senate members to exercise their voting rights on key proposals. It plays a vital role in the governance and evolution of the Bittensor network. - -**Example:** -``` -btcli sudo senate_vote --proposal <proposal_hash> -``` - -**Usage**: - -```console -btcli sudo senate-vote [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--proposal, --proposal-hash TEXT`: The hash of the proposal to vote on. -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--vote-aye / --vote-nay`: The vote casted on the proposal -* `--help`: Show this message and exit. - -### `btcli sudo set-take` - -Allows users to change their delegate take percentage. - -This command can be used to update the delegate takes. To run the command, the user must have a configured wallet with both hotkey and coldkey. -The command makes sure the new take value is within 0-18% range. - -**Example:** -``` -btcli sudo set-take --wallet-name my_wallet --wallet-hotkey my_hotkey -``` - -**Usage**: - -```console -btcli sudo set-take [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--take FLOAT`: The new take value. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli sudo get-take` - -Allows users to check their delegate take percentage. - -This command can be used to fetch the delegate take of your hotkey. - -**Example:** -``` -btcli sudo get-take --wallet-name my_wallet --wallet-hotkey my_hotkey -``` - -**Usage**: - -```console -btcli sudo get-take [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli sudo senate_vote` - -Cast a vote on an active proposal in Bittensor's governance protocol. - -This command is used by Senate members to vote on various proposals that shape the network's future. Use `btcli sudo proposals` to see the active proposals and their hashes. - -**Usage:** -The user must specify the hash of the proposal they want to vote on. The command then allows the Senate member to cast a 'Yes' or 'No' vote, contributing to the decision-making process on the proposal. This command is crucial for Senate members to exercise their voting rights on key proposals. It plays a vital role in the governance and evolution of the Bittensor network. - -**Example:** -``` -btcli sudo senate_vote --proposal <proposal_hash> -``` - -**Usage**: - -```console -btcli sudo senate_vote [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--proposal, --proposal-hash TEXT`: The hash of the proposal to vote on. -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--vote-aye / --vote-nay`: The vote casted on the proposal -* `--help`: Show this message and exit. - -### `btcli sudo get_take` - -Allows users to check their delegate take percentage. - -This command can be used to fetch the delegate take of your hotkey. - -**Example:** -``` -btcli sudo get-take --wallet-name my_wallet --wallet-hotkey my_hotkey -``` - -**Usage**: - -```console -btcli sudo get_take [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli sudo set_take` - -Allows users to change their delegate take percentage. - -This command can be used to update the delegate takes. To run the command, the user must have a configured wallet with both hotkey and coldkey. -The command makes sure the new take value is within 0-18% range. - -**Example:** -``` -btcli sudo set-take --wallet-name my_wallet --wallet-hotkey my_hotkey -``` - -**Usage**: - -```console -btcli sudo set_take [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--take FLOAT`: The new take value. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -## `btcli su` - -**Usage**: - -```console -btcli su [OPTIONS] COMMAND [ARGS]... -``` - -**Options**: - -* `--help`: Show this message and exit. - -**Commands**: - -* `set`: Used to set hyperparameters for a specific... -* `get`: Shows a list of the hyperparameters for... -* `senate`: Shows the Senate members of the... -* `proposals`: View active proposals for the senate in... -* `senate-vote`: Cast a vote on an active proposal in... -* `set-take`: Allows users to change their delegate take... -* `get-take`: Allows users to check their delegate take... -* `senate_vote`: Cast a vote on an active proposal in... -* `get_take`: Allows users to check their delegate take... -* `set_take`: Allows users to change their delegate take... - -### `btcli su set` - -Used to set hyperparameters for a specific subnet. - -This command allows subnet owners to modify hyperparameters such as its tempo, emission rates, and other hyperparameters. - -**Example:** - -``` -btcli sudo set --netuid 1 --param tempo --value 400 -``` - -**Usage**: - -```console -btcli su set [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--netuid INTEGER`: The netuid of the subnet in the network, (e.g. 1). -* `--param, --parameter TEXT`: The subnet hyperparameter to set -* `--value TEXT`: Value to set the hyperparameter to. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli su get` - -Shows a list of the hyperparameters for the specified subnet. - -**Example:** - -``` -btcli sudo get --netuid 1 -``` - -**Usage**: - -```console -btcli su get [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--netuid INTEGER`: The netuid of the subnet in the network, (e.g. 1). -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli su senate` - -Shows the Senate members of the Bittensor's governance protocol. - -This command lists the delegates involved in the decision-making process of the Bittensor network, showing their names and wallet addresses. This information is crucial for understanding who holds governance roles within the network. - -**Example:** -``` -btcli sudo senate -``` - -**Usage**: - -```console -btcli su senate [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli su proposals` - -View active proposals for the senate in the Bittensor's governance protocol. - -This command displays the details of ongoing proposals, including proposal hashes, votes, thresholds, and proposal data. - -**Example:** -``` -btcli sudo proposals -``` - -**Usage**: - -```console -btcli su proposals [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli su senate-vote` - -Cast a vote on an active proposal in Bittensor's governance protocol. - -This command is used by Senate members to vote on various proposals that shape the network's future. Use `btcli sudo proposals` to see the active proposals and their hashes. - -**Usage:** -The user must specify the hash of the proposal they want to vote on. The command then allows the Senate member to cast a 'Yes' or 'No' vote, contributing to the decision-making process on the proposal. This command is crucial for Senate members to exercise their voting rights on key proposals. It plays a vital role in the governance and evolution of the Bittensor network. - -**Example:** -``` -btcli sudo senate_vote --proposal <proposal_hash> -``` - -**Usage**: - -```console -btcli su senate-vote [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--proposal, --proposal-hash TEXT`: The hash of the proposal to vote on. -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--vote-aye / --vote-nay`: The vote casted on the proposal -* `--help`: Show this message and exit. - -### `btcli su set-take` - -Allows users to change their delegate take percentage. - -This command can be used to update the delegate takes. To run the command, the user must have a configured wallet with both hotkey and coldkey. -The command makes sure the new take value is within 0-18% range. - -**Example:** -``` -btcli sudo set-take --wallet-name my_wallet --wallet-hotkey my_hotkey -``` - -**Usage**: - -```console -btcli su set-take [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--take FLOAT`: The new take value. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli su get-take` - -Allows users to check their delegate take percentage. - -This command can be used to fetch the delegate take of your hotkey. - -**Example:** -``` -btcli sudo get-take --wallet-name my_wallet --wallet-hotkey my_hotkey -``` - -**Usage**: - -```console -btcli su get-take [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli su senate_vote` - -Cast a vote on an active proposal in Bittensor's governance protocol. - -This command is used by Senate members to vote on various proposals that shape the network's future. Use `btcli sudo proposals` to see the active proposals and their hashes. - -**Usage:** -The user must specify the hash of the proposal they want to vote on. The command then allows the Senate member to cast a 'Yes' or 'No' vote, contributing to the decision-making process on the proposal. This command is crucial for Senate members to exercise their voting rights on key proposals. It plays a vital role in the governance and evolution of the Bittensor network. - -**Example:** -``` -btcli sudo senate_vote --proposal <proposal_hash> -``` - -**Usage**: - -```console -btcli su senate_vote [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--proposal, --proposal-hash TEXT`: The hash of the proposal to vote on. -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--vote-aye / --vote-nay`: The vote casted on the proposal -* `--help`: Show this message and exit. - -### `btcli su get_take` - -Allows users to check their delegate take percentage. - -This command can be used to fetch the delegate take of your hotkey. - -**Example:** -``` -btcli sudo get-take --wallet-name my_wallet --wallet-hotkey my_hotkey -``` - -**Usage**: - -```console -btcli su get_take [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli su set_take` - -Allows users to change their delegate take percentage. - -This command can be used to update the delegate takes. To run the command, the user must have a configured wallet with both hotkey and coldkey. -The command makes sure the new take value is within 0-18% range. - -**Example:** -``` -btcli sudo set-take --wallet-name my_wallet --wallet-hotkey my_hotkey -``` - -**Usage**: - -```console -btcli su set_take [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--take FLOAT`: The new take value. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -## `btcli subnets` - -**Usage**: - -```console -btcli subnets [OPTIONS] COMMAND [ARGS]... -``` - -**Options**: - -* `--help`: Show this message and exit. - -**Commands**: - -* `hyperparameters`: Shows a list of the hyperparameters for... -* `list`: List all subnets and their detailed... -* `burn-cost`: Shows the required amount of TAO to be... -* `create`: Registers a new subnet on the network. -* `pow-register`: Register a neuron (a subnet validator or a... -* `register`: Register a neuron (a subnet validator or a... -* `metagraph`: Displays detailed information about a... -* `show`: Displays detailed information about a... -* `price`: Shows the historical price of a subnet for... -* `burn_cost`: Shows the required amount of TAO to be... -* `pow_register`: Register a neuron (a subnet validator or a... - -### `btcli subnets hyperparameters` - -Shows a list of the hyperparameters for the specified subnet. - -**Example:** - -``` -btcli sudo get --netuid 1 -``` - -**Usage**: - -```console -btcli subnets hyperparameters [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--netuid INTEGER`: The netuid of the subnet in the network, (e.g. 1). -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli subnets list` - -List all subnets and their detailed information. - - Common Examples: - 1. List all subnets: - ``` - btcli subnets list - ``` - - 2. List all subnets in live mode: - ``` - btcli subnets list --live - ``` - -Output Columns: Netuid - Subnet identifier number - Name - Subnet name with currency symbol (τ/α/β etc) - Price (τ_in/α_in) - Exchange rate (TAO per alpha token) - Market Cap (α * Price) - Total value in TAO (alpha tokens × price) - Emission (τ) - TAO rewards emitted per block to subnet - P (τ_in, α_in) - Pool reserves (Tao reserves, alpha reserves) in liquidity pool - Stake (α_out) - Total staked alpha tokens across all hotkeys (alpha outstanding) - Supply (α) - Circulating alpha token supply - Tempo (k/n) - Block interval for subnet updates - - **Example:** - - ``` - btcli subnets list - ``` - -**Usage**: - -```console -btcli subnets list [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--live`: Display live view of the table -* `--help`: Show this message and exit. - -### `btcli subnets burn-cost` - -Shows the required amount of TAO to be recycled for creating a new subnet, i.e., cost of registering a new subnet. - -The current implementation anneals the cost of creating a subnet over a period of two days. If the displayed cost is unappealing to you, check back in a day or two to see if it has decreased to a more affordable level. - -**Example:** - -``` -btcli subnets burn_cost -``` - -**Usage**: - -```console -btcli subnets burn-cost [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli subnets create` - -Registers a new subnet on the network. - -This command allows you to create a new subnet and set the subnet's identity. -You also have the option to set your own identity after the registration is complete. - -Common Examples: -1. Interactive subnet creation: -``` -btcli subnets create -``` - -2. Create with GitHub repo and contact email: - -``` -btcli subnets create --subnet-name MySubnet --github-repo https://github.com/myorg/mysubnet --subnet-contact team@mysubnet.net -``` -**Usage**: - -```console -btcli subnets create [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--subnet-name, --name TEXT`: Name of the subnet -* `--github-repo, --repo TEXT`: GitHub repository URL -* `--subnet-contact, --contact, --email TEXT`: Contact email for subnet -* `--subnet-url, --url TEXT`: Subnet URL -* `--discord-handle, --discord TEXT`: Discord handle -* `--description TEXT`: Description -* `--additional-info TEXT`: Additional information -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli subnets pow-register` - -Register a neuron (a subnet validator or a subnet miner) using Proof of Work (POW). - -This method is an alternative registration process that uses computational work for securing a neuron's place on the subnet. - -The command starts by verifying the existence of the specified subnet. If the subnet does not exist, it terminates with an error message. On successful verification, the POW registration process is initiated, which requires solving computational puzzles. - -The command also supports additional wallet and subtensor arguments, enabling further customization of the registration process. - -**Example:** - -``` -btcli pow_register --netuid 1 --num_processes 4 --cuda -``` - -Note: This command is suitable for users with adequate computational resources to participate in POW registration. -It requires a sound understanding of the network's operations and POW mechanics. Users should ensure their systems meet the necessary hardware and software requirements, particularly when opting for CUDA-based GPU acceleration. - -This command may be disabled by the subnet owner. For example, on netuid 1 this is permanently disabled. - -**Usage**: - -```console -btcli subnets pow-register [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--netuid INTEGER`: The netuid of the subnet in the network, (e.g. 1). -* `--processors INTEGER`: Number of processors to use for POW registration. -* `-u, --update-interval INTEGER`: The number of nonces to process before checking for the next block during registration [default: 50000] -* `--output-in-place / --no-output-in-place`: Whether to output the registration statistics in-place. [default: output-in-place] -* `-v, --verbose`: Whether to output the registration statistics verbosely. -* `--use-cuda, --cuda / --no-use-cuda, --no-cuda`: Set the flag to use CUDA for POW registration. [default: no-use-cuda] -* `-d, --dev-id INTEGER`: Set the CUDA device id(s), in the order of the device speed (0 is the fastest). [default: 0] -* `-tbp, --threads-per-block INTEGER`: Set the number of threads per block for CUDA. [default: 256] -* `--help`: Show this message and exit. - -### `btcli subnets register` - -Register a neuron (a subnet validator or a subnet miner) in the specified subnet by recycling some TAO. - -Before registering, the command checks if the specified subnet exists and whether the user's balance is sufficient to cover the registration cost. - -The registration cost is determined by the current recycle amount for the specified subnet. If the balance is insufficient or the subnet does not exist, the command will exit with an error message. - -**Example:** - -``` -btcli subnets register --netuid 1 -``` - -**Usage**: - -```console -btcli subnets register [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--netuid INTEGER`: The netuid of the subnet in the network, (e.g. 1). -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli subnets metagraph` - -Displays detailed information about a subnet including participants and their state. - -**Example:** - -``` -btcli subnets list -``` - -**Usage**: - -```console -btcli subnets metagraph [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--netuid INTEGER`: The netuid of the subnet in the network, (e.g. 1). -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--help`: Show this message and exit. - -### `btcli subnets show` - -Displays detailed information about a subnet including participants and their state. - -**Example:** - -``` -btcli subnets list -``` - -**Usage**: - -```console -btcli subnets show [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--netuid INTEGER`: The netuid of the subnet in the network, (e.g. 1). -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--help`: Show this message and exit. - -### `btcli subnets price` - -Shows the historical price of a subnet for the past 24 hours. - -This command displays the historical price of a subnet for the past 24 hours. -If the `--all` flag is used, the command will display the price for all subnets in html format. -If the `--html` flag is used, the command will display the price in an HTML chart. -If the `--log-scale` flag is used, the command will display the price in log scale. -If no html flag is used, the command will display the price in the cli. - -**Example:** - -``` -btcli subnets price --netuid 1 -``` -``` -btcli subnets price --netuid 1 --html --log -``` -``` -btcli subnets price --all --html -``` -``` -btcli subnets price --netuids 1,2,3,4 --html -``` - -**Usage**: - -```console -btcli subnets price [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `-n, --netuids, --netuid TEXT`: Netuid(s) to show the price for. -* `--interval-hours, --interval INTEGER`: The number of hours to show the historical price for. [default: 24] -* `--all-netuids, --all`: Show the price for all subnets. -* `--log-scale, --log`: Show the price in log scale. -* `--html`: Display the table as HTML in the browser. -* `--help`: Show this message and exit. - -### `btcli subnets burn_cost` - -Shows the required amount of TAO to be recycled for creating a new subnet, i.e., cost of registering a new subnet. - -The current implementation anneals the cost of creating a subnet over a period of two days. If the displayed cost is unappealing to you, check back in a day or two to see if it has decreased to a more affordable level. - -**Example:** - -``` -btcli subnets burn_cost -``` - -**Usage**: - -```console -btcli subnets burn_cost [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli subnets pow_register` - -Register a neuron (a subnet validator or a subnet miner) using Proof of Work (POW). - -This method is an alternative registration process that uses computational work for securing a neuron's place on the subnet. - -The command starts by verifying the existence of the specified subnet. If the subnet does not exist, it terminates with an error message. On successful verification, the POW registration process is initiated, which requires solving computational puzzles. - -The command also supports additional wallet and subtensor arguments, enabling further customization of the registration process. - -**Example:** - -``` -btcli pow_register --netuid 1 --num_processes 4 --cuda -``` - -Note: This command is suitable for users with adequate computational resources to participate in POW registration. -It requires a sound understanding of the network's operations and POW mechanics. Users should ensure their systems meet the necessary hardware and software requirements, particularly when opting for CUDA-based GPU acceleration. - -This command may be disabled by the subnet owner. For example, on netuid 1 this is permanently disabled. - -**Usage**: - -```console -btcli subnets pow_register [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--netuid INTEGER`: The netuid of the subnet in the network, (e.g. 1). -* `--processors INTEGER`: Number of processors to use for POW registration. -* `-u, --update-interval INTEGER`: The number of nonces to process before checking for the next block during registration [default: 50000] -* `--output-in-place / --no-output-in-place`: Whether to output the registration statistics in-place. [default: output-in-place] -* `-v, --verbose`: Whether to output the registration statistics verbosely. -* `--use-cuda, --cuda / --no-use-cuda, --no-cuda`: Set the flag to use CUDA for POW registration. [default: no-use-cuda] -* `-d, --dev-id INTEGER`: Set the CUDA device id(s), in the order of the device speed (0 is the fastest). [default: 0] -* `-tbp, --threads-per-block INTEGER`: Set the number of threads per block for CUDA. [default: 256] -* `--help`: Show this message and exit. - -## `btcli s` - -**Usage**: - -```console -btcli s [OPTIONS] COMMAND [ARGS]... -``` - -**Options**: - -* `--help`: Show this message and exit. - -**Commands**: - -* `hyperparameters`: Shows a list of the hyperparameters for... -* `list`: List all subnets and their detailed... -* `burn-cost`: Shows the required amount of TAO to be... -* `create`: Registers a new subnet on the network. -* `pow-register`: Register a neuron (a subnet validator or a... -* `register`: Register a neuron (a subnet validator or a... -* `metagraph`: Displays detailed information about a... -* `show`: Displays detailed information about a... -* `price`: Shows the historical price of a subnet for... -* `burn_cost`: Shows the required amount of TAO to be... -* `pow_register`: Register a neuron (a subnet validator or a... - -### `btcli s hyperparameters` - -Shows a list of the hyperparameters for the specified subnet. - -**Example:** - -``` -btcli sudo get --netuid 1 -``` - -**Usage**: - -```console -btcli s hyperparameters [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--netuid INTEGER`: The netuid of the subnet in the network, (e.g. 1). -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli s list` - -List all subnets and their detailed information. - - Common Examples: - 1. List all subnets: - ``` - btcli subnets list - ``` - - 2. List all subnets in live mode: - ``` - btcli subnets list --live - ``` - -Output Columns: Netuid - Subnet identifier number - Name - Subnet name with currency symbol (τ/α/β etc) - Price (τ_in/α_in) - Exchange rate (TAO per alpha token) - Market Cap (α * Price) - Total value in TAO (alpha tokens × price) - Emission (τ) - TAO rewards emitted per block to subnet - P (τ_in, α_in) - Pool reserves (Tao reserves, alpha reserves) in liquidity pool - Stake (α_out) - Total staked alpha tokens across all hotkeys (alpha outstanding) - Supply (α) - Circulating alpha token supply - Tempo (k/n) - Block interval for subnet updates - - **Example:** - - ``` - btcli subnets list - ``` - -**Usage**: - -```console -btcli s list [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--live`: Display live view of the table -* `--help`: Show this message and exit. - -### `btcli s burn-cost` - -Shows the required amount of TAO to be recycled for creating a new subnet, i.e., cost of registering a new subnet. - -The current implementation anneals the cost of creating a subnet over a period of two days. If the displayed cost is unappealing to you, check back in a day or two to see if it has decreased to a more affordable level. - -**Example:** - -``` -btcli subnets burn_cost -``` - -**Usage**: - -```console -btcli s burn-cost [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli s create` - -Registers a new subnet on the network. - -This command allows you to create a new subnet and set the subnet's identity. -You also have the option to set your own identity after the registration is complete. - -Common Examples: -1. Interactive subnet creation: -``` -btcli subnets create -``` - -2. Create with GitHub repo and contact email: - -``` -btcli subnets create --subnet-name MySubnet --github-repo https://github.com/myorg/mysubnet --subnet-contact team@mysubnet.net -``` - -**Usage**: - -```console -btcli s create [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--subnet-name, --name TEXT`: Name of the subnet -* `--github-repo, --repo TEXT`: GitHub repository URL -* `--subnet-contact, --contact, --email TEXT`: Contact email for subnet -* `--subnet-url, --url TEXT`: Subnet URL -* `--discord-handle, --discord TEXT`: Discord handle -* `--description TEXT`: Description -* `--additional-info TEXT`: Additional information -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli s pow-register` - -Register a neuron (a subnet validator or a subnet miner) using Proof of Work (POW). - -This method is an alternative registration process that uses computational work for securing a neuron's place on the subnet. - -The command starts by verifying the existence of the specified subnet. If the subnet does not exist, it terminates with an error message. On successful verification, the POW registration process is initiated, which requires solving computational puzzles. - -The command also supports additional wallet and subtensor arguments, enabling further customization of the registration process. - -**Example:** - -``` -btcli pow_register --netuid 1 --num_processes 4 --cuda -``` - -Note: This command is suitable for users with adequate computational resources to participate in POW registration. -It requires a sound understanding of the network's operations and POW mechanics. Users should ensure their systems meet the necessary hardware and software requirements, particularly when opting for CUDA-based GPU acceleration. - -This command may be disabled by the subnet owner. For example, on netuid 1 this is permanently disabled. - -**Usage**: - -```console -btcli s pow-register [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--netuid INTEGER`: The netuid of the subnet in the network, (e.g. 1). -* `--processors INTEGER`: Number of processors to use for POW registration. -* `-u, --update-interval INTEGER`: The number of nonces to process before checking for the next block during registration [default: 50000] -* `--output-in-place / --no-output-in-place`: Whether to output the registration statistics in-place. [default: output-in-place] -* `-v, --verbose`: Whether to output the registration statistics verbosely. -* `--use-cuda, --cuda / --no-use-cuda, --no-cuda`: Set the flag to use CUDA for POW registration. [default: no-use-cuda] -* `-d, --dev-id INTEGER`: Set the CUDA device id(s), in the order of the device speed (0 is the fastest). [default: 0] -* `-tbp, --threads-per-block INTEGER`: Set the number of threads per block for CUDA. [default: 256] -* `--help`: Show this message and exit. - -### `btcli s register` - -Register a neuron (a subnet validator or a subnet miner) in the specified subnet by recycling some TAO. - -Before registering, the command checks if the specified subnet exists and whether the user's balance is sufficient to cover the registration cost. - -The registration cost is determined by the current recycle amount for the specified subnet. If the balance is insufficient or the subnet does not exist, the command will exit with an error message. - -**Example:** - -``` -btcli subnets register --netuid 1 -``` - -**Usage**: - -```console -btcli s register [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--netuid INTEGER`: The netuid of the subnet in the network, (e.g. 1). -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli s metagraph` - -Displays detailed information about a subnet including participants and their state. - -**Example:** - -``` -btcli subnets list -``` - -**Usage**: - -```console -btcli s metagraph [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--netuid INTEGER`: The netuid of the subnet in the network, (e.g. 1). -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--help`: Show this message and exit. - -### `btcli s show` - -Displays detailed information about a subnet including participants and their state. - -**Example:** - -``` -btcli subnets list -``` - -**Usage**: - -```console -btcli s show [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--netuid INTEGER`: The netuid of the subnet in the network, (e.g. 1). -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--help`: Show this message and exit. - -### `btcli s price` - -Shows the historical price of a subnet for the past 24 hours. - -This command displays the historical price of a subnet for the past 24 hours. -If the `--all` flag is used, the command will display the price for all subnets in html format. -If the `--html` flag is used, the command will display the price in an HTML chart. -If the `--log-scale` flag is used, the command will display the price in log scale. -If no html flag is used, the command will display the price in the cli. - -**Example:** - -``` -btcli subnets price --netuid 1 -``` -``` -btcli subnets price --netuid 1 --html --log -``` -``` -btcli subnets price --all --html -``` -``` -btcli subnets price --netuids 1,2,3,4 --html -``` - -**Usage**: - -```console -btcli s price [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `-n, --netuids, --netuid TEXT`: Netuid(s) to show the price for. -* `--interval-hours, --interval INTEGER`: The number of hours to show the historical price for. [default: 24] -* `--all-netuids, --all`: Show the price for all subnets. -* `--log-scale, --log`: Show the price in log scale. -* `--html`: Display the table as HTML in the browser. -* `--help`: Show this message and exit. - -### `btcli s burn_cost` - -Shows the required amount of TAO to be recycled for creating a new subnet, i.e., cost of registering a new subnet. - -The current implementation anneals the cost of creating a subnet over a period of two days. If the displayed cost is unappealing to you, check back in a day or two to see if it has decreased to a more affordable level. - -**Example:** - -``` -btcli subnets burn_cost -``` - -**Usage**: - -```console -btcli s burn_cost [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli s pow_register` - -Register a neuron (a subnet validator or a subnet miner) using Proof of Work (POW). - -This method is an alternative registration process that uses computational work for securing a neuron's place on the subnet. - -The command starts by verifying the existence of the specified subnet. If the subnet does not exist, it terminates with an error message. On successful verification, the POW registration process is initiated, which requires solving computational puzzles. - -The command also supports additional wallet and subtensor arguments, enabling further customization of the registration process. - -**Example:** - -``` -btcli pow_register --netuid 1 --num_processes 4 --cuda -``` - -Note: This command is suitable for users with adequate computational resources to participate in POW registration. -It requires a sound understanding of the network's operations and POW mechanics. Users should ensure their systems meet the necessary hardware and software requirements, particularly when opting for CUDA-based GPU acceleration. - -This command may be disabled by the subnet owner. For example, on netuid 1 this is permanently disabled. - -**Usage**: - -```console -btcli s pow_register [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--netuid INTEGER`: The netuid of the subnet in the network, (e.g. 1). -* `--processors INTEGER`: Number of processors to use for POW registration. -* `-u, --update-interval INTEGER`: The number of nonces to process before checking for the next block during registration [default: 50000] -* `--output-in-place / --no-output-in-place`: Whether to output the registration statistics in-place. [default: output-in-place] -* `-v, --verbose`: Whether to output the registration statistics verbosely. -* `--use-cuda, --cuda / --no-use-cuda, --no-cuda`: Set the flag to use CUDA for POW registration. [default: no-use-cuda] -* `-d, --dev-id INTEGER`: Set the CUDA device id(s), in the order of the device speed (0 is the fastest). [default: 0] -* `-tbp, --threads-per-block INTEGER`: Set the number of threads per block for CUDA. [default: 256] -* `--help`: Show this message and exit. - -## `btcli subnet` - -**Usage**: - -```console -btcli subnet [OPTIONS] COMMAND [ARGS]... -``` - -**Options**: - -* `--help`: Show this message and exit. - -**Commands**: - -* `hyperparameters`: Shows a list of the hyperparameters for... -* `list`: List all subnets and their detailed... -* `burn-cost`: Shows the required amount of TAO to be... -* `create`: Registers a new subnet on the network. -* `pow-register`: Register a neuron (a subnet validator or a... -* `register`: Register a neuron (a subnet validator or a... -* `metagraph`: Displays detailed information about a... -* `show`: Displays detailed information about a... -* `price`: Shows the historical price of a subnet for... -* `burn_cost`: Shows the required amount of TAO to be... -* `pow_register`: Register a neuron (a subnet validator or a... - -### `btcli subnet hyperparameters` - -Shows a list of the hyperparameters for the specified subnet. - -**Example:** - -``` -btcli sudo get --netuid 1 -``` - -**Usage**: - -```console -btcli subnet hyperparameters [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--netuid INTEGER`: The netuid of the subnet in the network, (e.g. 1). -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli subnet list` - -List all subnets and their detailed information. - - Common Examples: - 1. List all subnets: - ``` - btcli subnets list - ``` - - 2. List all subnets in live mode: - ``` - btcli subnets list --live - ``` - -Output Columns: Netuid - Subnet identifier number - Name - Subnet name with currency symbol (τ/α/β etc) - Price (τ_in/α_in) - Exchange rate (TAO per alpha token) - Market Cap (α * Price) - Total value in TAO (alpha tokens × price) - Emission (τ) - TAO rewards emitted per block to subnet - P (τ_in, α_in) - Pool reserves (Tao reserves, alpha reserves) in liquidity pool - Stake (α_out) - Total staked alpha tokens across all hotkeys (alpha outstanding) - Supply (α) - Circulating alpha token supply - Tempo (k/n) - Block interval for subnet updates - - **Example:** - - ``` - btcli subnets list - ``` - -**Usage**: - -```console -btcli subnet list [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--live`: Display live view of the table -* `--help`: Show this message and exit. - -### `btcli subnet burn-cost` - -Shows the required amount of TAO to be recycled for creating a new subnet, i.e., cost of registering a new subnet. - -The current implementation anneals the cost of creating a subnet over a period of two days. If the displayed cost is unappealing to you, check back in a day or two to see if it has decreased to a more affordable level. - -**Example:** - -``` -btcli subnets burn_cost -``` - -**Usage**: - -```console -btcli subnet burn-cost [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli subnet create` - -Registers a new subnet on the network. - -This command allows you to create a new subnet and set the subnet's identity. -You also have the option to set your own identity after the registration is complete. - -Common Examples: -1. Interactive subnet creation: -``` -btcli subnets create -``` - -2. Create with GitHub repo and contact email: - -``` -btcli subnets create --subnet-name MySubnet --github-repo https://github.com/myorg/mysubnet --subnet-contact team@mysubnet.net -``` - -**Usage**: - -```console -btcli subnet create [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--subnet-name, --name TEXT`: Name of the subnet -* `--github-repo, --repo TEXT`: GitHub repository URL -* `--subnet-contact, --contact, --email TEXT`: Contact email for subnet -* `--subnet-url, --url TEXT`: Subnet URL -* `--discord-handle, --discord TEXT`: Discord handle -* `--description TEXT`: Description -* `--additional-info TEXT`: Additional information -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli subnet pow-register` - -Register a neuron (a subnet validator or a subnet miner) using Proof of Work (POW). - -This method is an alternative registration process that uses computational work for securing a neuron's place on the subnet. - -The command starts by verifying the existence of the specified subnet. If the subnet does not exist, it terminates with an error message. On successful verification, the POW registration process is initiated, which requires solving computational puzzles. - -The command also supports additional wallet and subtensor arguments, enabling further customization of the registration process. - -**Example:** - -``` -btcli pow_register --netuid 1 --num_processes 4 --cuda -``` - -Note: This command is suitable for users with adequate computational resources to participate in POW registration. -It requires a sound understanding of the network's operations and POW mechanics. Users should ensure their systems meet the necessary hardware and software requirements, particularly when opting for CUDA-based GPU acceleration. - -This command may be disabled by the subnet owner. For example, on netuid 1 this is permanently disabled. - -**Usage**: - -```console -btcli subnet pow-register [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--netuid INTEGER`: The netuid of the subnet in the network, (e.g. 1). -* `--processors INTEGER`: Number of processors to use for POW registration. -* `-u, --update-interval INTEGER`: The number of nonces to process before checking for the next block during registration [default: 50000] -* `--output-in-place / --no-output-in-place`: Whether to output the registration statistics in-place. [default: output-in-place] -* `-v, --verbose`: Whether to output the registration statistics verbosely. -* `--use-cuda, --cuda / --no-use-cuda, --no-cuda`: Set the flag to use CUDA for POW registration. [default: no-use-cuda] -* `-d, --dev-id INTEGER`: Set the CUDA device id(s), in the order of the device speed (0 is the fastest). [default: 0] -* `-tbp, --threads-per-block INTEGER`: Set the number of threads per block for CUDA. [default: 256] -* `--help`: Show this message and exit. - -### `btcli subnet register` - -Register a neuron (a subnet validator or a subnet miner) in the specified subnet by recycling some TAO. - -Before registering, the command checks if the specified subnet exists and whether the user's balance is sufficient to cover the registration cost. - -The registration cost is determined by the current recycle amount for the specified subnet. If the balance is insufficient or the subnet does not exist, the command will exit with an error message. - -**Example:** - -``` -btcli subnets register --netuid 1 -``` - -**Usage**: - -```console -btcli subnet register [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--netuid INTEGER`: The netuid of the subnet in the network, (e.g. 1). -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli subnet metagraph` - -Displays detailed information about a subnet including participants and their state. - -**Example:** - -``` -btcli subnets list -``` - -**Usage**: - -```console -btcli subnet metagraph [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--netuid INTEGER`: The netuid of the subnet in the network, (e.g. 1). -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--help`: Show this message and exit. - -### `btcli subnet show` - -Displays detailed information about a subnet including participants and their state. - -**Example:** - -``` -btcli subnets list -``` - -**Usage**: - -```console -btcli subnet show [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--netuid INTEGER`: The netuid of the subnet in the network, (e.g. 1). -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--help`: Show this message and exit. - -### `btcli subnet price` - -Shows the historical price of a subnet for the past 24 hours. - -This command displays the historical price of a subnet for the past 24 hours. -If the `--all` flag is used, the command will display the price for all subnets in html format. -If the `--html` flag is used, the command will display the price in an HTML chart. -If the `--log-scale` flag is used, the command will display the price in log scale. -If no html flag is used, the command will display the price in the cli. - -**Example:** - -``` -btcli subnets price --netuid 1 -``` -``` -btcli subnets price --netuid 1 --html --log -``` -``` -btcli subnets price --all --html -``` -``` -btcli subnets price --netuids 1,2,3,4 --html -``` - -**Usage**: - -```console -btcli subnet price [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `-n, --netuids, --netuid TEXT`: Netuid(s) to show the price for. -* `--interval-hours, --interval INTEGER`: The number of hours to show the historical price for. [default: 24] -* `--all-netuids, --all`: Show the price for all subnets. -* `--log-scale, --log`: Show the price in log scale. -* `--html`: Display the table as HTML in the browser. -* `--help`: Show this message and exit. - -### `btcli subnet burn_cost` - -Shows the required amount of TAO to be recycled for creating a new subnet, i.e., cost of registering a new subnet. - -The current implementation anneals the cost of creating a subnet over a period of two days. If the displayed cost is unappealing to you, check back in a day or two to see if it has decreased to a more affordable level. - -**Example:** - -``` -btcli subnets burn_cost -``` - -**Usage**: - -```console -btcli subnet burn_cost [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli subnet pow_register` - -Register a neuron (a subnet validator or a subnet miner) using Proof of Work (POW). - -This method is an alternative registration process that uses computational work for securing a neuron's place on the subnet. - -The command starts by verifying the existence of the specified subnet. If the subnet does not exist, it terminates with an error message. On successful verification, the POW registration process is initiated, which requires solving computational puzzles. - -The command also supports additional wallet and subtensor arguments, enabling further customization of the registration process. - -**Example:** - -``` -btcli pow_register --netuid 1 --num_processes 4 --cuda -``` - -Note: This command is suitable for users with adequate computational resources to participate in POW registration. -It requires a sound understanding of the network's operations and POW mechanics. Users should ensure their systems meet the necessary hardware and software requirements, particularly when opting for CUDA-based GPU acceleration. - -This command may be disabled by the subnet owner. For example, on netuid 1 this is permanently disabled. - -**Usage**: - -```console -btcli subnet pow_register [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--netuid INTEGER`: The netuid of the subnet in the network, (e.g. 1). -* `--processors INTEGER`: Number of processors to use for POW registration. -* `-u, --update-interval INTEGER`: The number of nonces to process before checking for the next block during registration [default: 50000] -* `--output-in-place / --no-output-in-place`: Whether to output the registration statistics in-place. [default: output-in-place] -* `-v, --verbose`: Whether to output the registration statistics verbosely. -* `--use-cuda, --cuda / --no-use-cuda, --no-cuda`: Set the flag to use CUDA for POW registration. [default: no-use-cuda] -* `-d, --dev-id INTEGER`: Set the CUDA device id(s), in the order of the device speed (0 is the fastest). [default: 0] -* `-tbp, --threads-per-block INTEGER`: Set the number of threads per block for CUDA. [default: 256] -* `--help`: Show this message and exit. - -## `btcli weights` - -**Usage**: - -```console -btcli weights [OPTIONS] COMMAND [ARGS]... -``` - -**Options**: - -* `--help`: Show this message and exit. - -**Commands**: - -* `reveal`: Reveal weights for a specific subnet. -* `commit`: Commit weights for specific subnet. - -### `btcli weights reveal` - -Reveal weights for a specific subnet. - -You must specify the netuid, the UIDs you are interested in, and weights you wish to reveal. - -**Example:** - -``` -btcli wt reveal --netuid 1 --uids 1,2,3,4 --weights 0.1,0.2,0.3,0.4 --salt 163,241,217,11,161,142,147,189 -``` - -**Usage**: - -```console -btcli weights reveal [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--netuid INTEGER`: The netuid of the subnet in the network, (e.g. 1). -* `-u, --uids TEXT`: Corresponding UIDs for the specified netuid, e.g. -u 1,2,3 ... -* `-w, --weights TEXT`: Weights for the specified UIDs, e.g. `-w 0.2,0.4,0.1 ...` Must correspond to the order of the UIDs. -* `-s, --salt TEXT`: Corresponding salt for the hash function, e.g. -s 163,241,217 ... -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli weights commit` - -Commit weights for specific subnet. - -Use this command to commit weights for a specific subnet. You must specify the netuid, the UIDs you are interested in, and the weights you wish to commit. - -**Example:** - -``` -btcli wt commit --netuid 1 --uids 1,2,3,4 --w 0.1,0.2,0.3 -``` - -Note: This command is used to commit weights for a specific subnet and requires the user to have the necessary -permissions. - -**Usage**: - -```console -btcli weights commit [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--netuid INTEGER`: The netuid of the subnet in the network, (e.g. 1). -* `-u, --uids TEXT`: UIDs of interest for the specified netuid, e.g. -u 1,2,3 ... -* `-w, --weights TEXT`: Weights for the specified UIDs, e.g. `-w 0.2,0.4,0.1 ...` Must correspond to the order of the UIDs. -* `-s, --salt TEXT`: Corresponding salt for the hash function, e.g. -s 163 -s 241 -s 217 ... -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -## `btcli wt` - -**Usage**: - -```console -btcli wt [OPTIONS] COMMAND [ARGS]... -``` - -**Options**: - -* `--help`: Show this message and exit. - -**Commands**: - -* `reveal`: Reveal weights for a specific subnet. -* `commit`: Commit weights for specific subnet. - -### `btcli wt reveal` - -Reveal weights for a specific subnet. - -You must specify the netuid, the UIDs you are interested in, and weights you wish to reveal. - -**Example:** - -``` -btcli wt reveal --netuid 1 --uids 1,2,3,4 --weights 0.1,0.2,0.3,0.4 --salt 163,241,217,11,161,142,147,189 -``` - -**Usage**: - -```console -btcli wt reveal [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--netuid INTEGER`: The netuid of the subnet in the network, (e.g. 1). -* `-u, --uids TEXT`: Corresponding UIDs for the specified netuid, e.g. -u 1,2,3 ... -* `-w, --weights TEXT`: Weights for the specified UIDs, e.g. `-w 0.2,0.4,0.1 ...` Must correspond to the order of the UIDs. -* `-s, --salt TEXT`: Corresponding salt for the hash function, e.g. -s 163,241,217 ... -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli wt commit` - -Commit weights for specific subnet. - -Use this command to commit weights for a specific subnet. You must specify the netuid, the UIDs you are interested in, and the weights you wish to commit. - -**Example:** - -``` -btcli wt commit --netuid 1 --uids 1,2,3,4 --w 0.1,0.2,0.3 -``` - -Note: This command is used to commit weights for a specific subnet and requires the user to have the necessary -permissions. - -**Usage**: - -```console -btcli wt commit [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--netuid INTEGER`: The netuid of the subnet in the network, (e.g. 1). -* `-u, --uids TEXT`: UIDs of interest for the specified netuid, e.g. -u 1,2,3 ... -* `-w, --weights TEXT`: Weights for the specified UIDs, e.g. `-w 0.2,0.4,0.1 ...` Must correspond to the order of the UIDs. -* `-s, --salt TEXT`: Corresponding salt for the hash function, e.g. -s 163 -s 241 -s 217 ... -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -## `btcli weight` - -**Usage**: - -```console -btcli weight [OPTIONS] COMMAND [ARGS]... -``` - -**Options**: - -* `--help`: Show this message and exit. - -**Commands**: - -* `reveal`: Reveal weights for a specific subnet. -* `commit`: Commit weights for specific subnet. - -### `btcli weight reveal` - -Reveal weights for a specific subnet. - -You must specify the netuid, the UIDs you are interested in, and weights you wish to reveal. - -**Example:** - -``` -btcli wt reveal --netuid 1 --uids 1,2,3,4 --weights 0.1,0.2,0.3,0.4 --salt 163,241,217,11,161,142,147,189 -``` - -**Usage**: - -```console -btcli weight reveal [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--netuid INTEGER`: The netuid of the subnet in the network, (e.g. 1). -* `-u, --uids TEXT`: Corresponding UIDs for the specified netuid, e.g. -u 1,2,3 ... -* `-w, --weights TEXT`: Weights for the specified UIDs, e.g. `-w 0.2,0.4,0.1 ...` Must correspond to the order of the UIDs. -* `-s, --salt TEXT`: Corresponding salt for the hash function, e.g. -s 163,241,217 ... -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### `btcli weight commit` - -Commit weights for specific subnet. - -Use this command to commit weights for a specific subnet. You must specify the netuid, the UIDs you are interested in, and the weights you wish to commit. - -**Example:** - -``` -btcli wt commit --netuid 1 --uids 1,2,3,4 --w 0.1,0.2,0.3 -``` - -Note: This command is used to commit weights for a specific subnet and requires the user to have the necessary -permissions. - -**Usage**: - -```console -btcli weight commit [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--netuid INTEGER`: The netuid of the subnet in the network, (e.g. 1). -* `-u, --uids TEXT`: UIDs of interest for the specified netuid, e.g. -u 1,2,3 ... -* `-w, --weights TEXT`: Weights for the specified UIDs, e.g. `-w 0.2,0.4,0.1 ...` Must correspond to the order of the UIDs. -* `-s, --salt TEXT`: Corresponding salt for the hash function, e.g. -s 163 -s 241 -s 217 ... -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -## `btcli utils` - -**Usage**: - -```console -btcli utils [OPTIONS] COMMAND [ARGS]... -``` - -**Options**: - -* `--help`: Show this message and exit. - -**Commands**: - -* `convert`: Allows for converting between tao and rao... - -### `btcli utils convert` - -Allows for converting between tao and rao using the specified flags - -**Usage**: - -```console -btcli utils convert [OPTIONS] -``` - -**Options**: - -* `--rao TEXT`: Convert amount from Rao -* `--tao FLOAT`: Convert amount from Tao -* `--help`: Show this message and exit. ---- -Made with :heart: by The Openτensor Foundaτion \ No newline at end of file diff --git a/docs/btcli-permissions.md b/docs/btcli/btcli-permissions.md similarity index 75% rename from docs/btcli-permissions.md rename to docs/btcli/btcli-permissions.md index 65aa684863..667481dffe 100644 --- a/docs/btcli-permissions.md +++ b/docs/btcli/btcli-permissions.md @@ -8,16 +8,16 @@ This page details the requirements for all of the `btcli` commands. See also the `btcli` permissions guides for specific Bittensor personas: -- [Staker's Guide to `BTCLI`](./staking-and-delegation/stakers-btcli-guide) -- [Miner's Guide to `BTCLI`](./miners/miners-btcli-guide) -- [Validator's Guide to `BTCLI`](./validators/validators-btcli-guide) -- [Subnet Creator's Guide to `BTCLI`](./subnets/subnet-creators-btcli-guide) -- [Senator's Guide to `BTCLI`](./governance/senators-btcli-guide) +- [Staker's Guide to `BTCLI`](../staking-and-delegation/stakers-btcli-guide) +- [Miner's Guide to `BTCLI`](../miners/miners-btcli-guide) +- [Validator's Guide to `BTCLI`](../validators/validators-btcli-guide) +- [Subnet Creator's Guide to `BTCLI`](../subnets/subnet-creators-btcli-guide) +- [Senator's Guide to `BTCLI`](../governance/senators-btcli-guide) Other resources: -- [Introduction to Wallets, Coldkeys and Hotkeys in Bittensor](./getting-started/wallets) -- [Coldkey and Hotkey Workstation Security](./getting-started/coldkey-hotkey-security) +- [Introduction to Wallets, Coldkeys and Hotkeys in Bittensor](../keys/wallets) +- [Coldkey and Hotkey Workstation Security](../keys/coldkey-hotkey-security) ## Bittensor work environments and security requirements @@ -25,32 +25,34 @@ Interacting with Bittensor generally falls into one of three levels of security, The workstations you use to do this work can be referred to as a permissionless workstation (requiring neither private key), a coldkey workstation or a hotkey workstation, depending on which private key is provisioned. -1. A **permissionless workstation** has only coldkey *public keys* on it. Public keys are sufficient for viewing all information about a wallet, such as TAO and alpha stake balances. Information about wallets, subnets, miners, and validators can and should be viewed without initializing your private keys on a device, to avoid the security risk of compromising your keys. +1. A **permissionless workstation** has only coldkey _public keys_ on it. Public keys are sufficient for viewing all information about a wallet, such as TAO and alpha stake balances. Information about wallets, subnets, miners, and validators can and should be viewed without initializing your private keys on a device, to avoid the security risk of compromising your keys. - :::tip coldkey workstation security - See [Permissionless workstation](./getting-started/coldkey-hotkey-security#permissionless-workstation) - ::: + :::tip coldkey workstation security + See [Permissionless workstation](../keys/coldkey-hotkey-security#permissionless-workstation) + ::: -1. A **coldkey workstation** contains one or more coldkey private key in the `wallet_path`. For any coldkey associated with mainnet TAO, the coldkey workstation should be held to the highest possible security standards. +1. A **coldkey workstation** contains one or more coldkey private key in the `wallet_path`. For any coldkey associated with mainnet TAO, the coldkey workstation should be held to the highest possible security standards. - :::tip coldkey workstation security - See [Coldkey workstation](./ getting-started/coldkey-hotkey-security#coldkey-workstation) - ::: + :::tip coldkey workstation security + See [Coldkey workstation](../keys/coldkey-hotkey-security#coldkey-workstation) + ::: 1. **A hotkey workstation**—which is generally a server used for mining or validation—contains a hotkey private key in the `wallet_path` located in the `btcli config`, as well as a coldkey public key for the corresponding coldkey. Compromised hotkeys can damage your reputation if they are used to maliciously to submit inaccurate weights as a validator, or bad work as a miner. However, ownership of TAO or alpha stake can only be transferred with a coldkey, and a leaked hotkey can be swapped using the coldkey; therefore hotkey leaks are far less dangerous than coldkey leaks. - :::tip hotkey workstation - See [Hotkey workstation security](./getting-started/coldkey-hotkey-security#hotkey-workstation) - ::: + :::tip hotkey workstation + See [Hotkey workstation security](../keys/coldkey-hotkey-security#hotkey-workstation) + ::: ## Requirements for `btcli` functions + ### Coldkey Your coldkey is your primary, fully privileged key; important for all users. This key should be handled on a maximum security **coldkey workstation** only, to avoid catastrophic loss or malicious actions if compromised. -See [Coldkey and Hotkey Workstation Security](../getting-started/coldkey-hotkey-security). +See [Coldkey and Hotkey Workstation Security](../keys/coldkey-hotkey-security). Required for: + - Moving and transferring TAO - Managing stake (add/remove/move) - Creating hotkeys @@ -63,7 +65,8 @@ Required for: Hotkeys are used by **miners** and **validators** to sign transactions, and are required for governance. Required for: -- Running miners: + +- Running miners: - Serving requests from validators - Making on-chain data commitments (if applicable) - Running validators: @@ -82,23 +85,24 @@ Some operations require a TAO balance or alpha stake balance to execute. ### Validator Permit -To set weights, a validator must meet several requirements. See [Requirements for validation](./validators/#requirements-for-validation). +To set weights, a validator must meet several requirements. See [Requirements for validation](../validators/#requirements-for-validation). ### Senate requirements -See [Senate: Requirements](./senate#requirements) +See [Senate: Requirements](../governance/senate#requirements) ## `btcli` commands ### `config` The `btcli config ...` commands are used to configure `btcli`, including: + - selecting the targeted network (`finney` a.k.a. mainnet or `test` for test network) - setting the directory where your Bittensor wallet coldkeys and/or hotkeys are stored These commands don't require any permissions to run. Rather, you run these commands on all `btcli` workstations to initialize them. -See: [Coldkey and Hotkey Workstation Security](./getting-started/coldkey-hotkey-security) +See: [Coldkey and Hotkey Workstation Security](../keys/coldkey-hotkey-security)
btcli config @@ -125,22 +129,22 @@ See: [Coldkey and Hotkey Workstation Security](./getting-started/coldkey-hotkey- The `wallet` command is required to provision keys to `btcli`, so it can access your wallet. This is essentially the equivalent of logging in/authentication. This is true for both coldkeys, which all users require, and hotkeys, which are required only by miners and validators as well as for advanced functions. :::tip mind your keys -See: [Coldkey and Hotkey Workstation Security](./getting-started/coldkey-hotkey-security) +See: [Coldkey and Hotkey Workstation Security](../keys/coldkey-hotkey-security) ::: -#### Provisioning keys +#### Provisioning keys -1. **`btcli wallet regen-coldkeypub`**: This initializes a wallet for a **permissionless workstation** with a public key only. It allows you to read all information about your wallet, which is public information. However, it doesn't allow you to sign any transactions and therefore doesn't allow you to make any *changes* to the state of the blockchain, including any of your balances or stakes. +1. **`btcli wallet regen-coldkeypub`**: This initializes a wallet for a **permissionless workstation** with a public key only. It allows you to read all information about your wallet, which is public information. However, it doesn't allow you to sign any transactions and therefore doesn't allow you to make any _changes_ to the state of the blockchain, including any of your balances or stakes. -1. **`new coldkey`** is used to initialize a coldkey workstation using a newly created *seed phrase*. This is a high security risk operation due to the inherent risk of handling the seed phrase. +1. **`new coldkey`** is used to initialize a coldkey workstation using a newly created _seed phrase_. This is a high security risk operation due to the inherent risk of handling the seed phrase. -1. **`regen coldkey`** is used to initialize a coldkey workstation using a pre-existing wallet's *seed phrase*. This is a high security risk operation due to the inherent risk of handling the seed phrase. +1. **`regen coldkey`** is used to initialize a coldkey workstation using a pre-existing wallet's _seed phrase_. This is a high security risk operation due to the inherent risk of handling the seed phrase. -1. **`new hotkey`** is used to initialize a hotkey workstation using a newly created *seed phrase*. This is a high security risk operation due to the inherent risk of handling the seed phrase. Hotkeys should be created on secure coldkey workstation and then carefully provisioned to working nodes for mining and validation. +1. **`new hotkey`** is used to initialize a hotkey workstation using a newly created _seed phrase_. This is a high security risk operation due to the inherent risk of handling the seed phrase. Hotkeys should be created on secure coldkey workstation and then carefully provisioned to working nodes for mining and validation. -1. **`regen hotkey`** is used to initialize a hotkey workstation using a pre-existing wallet's *seed phrase*. This is a high security risk operation due to the inherent risk of handling the seed phrase. +1. **`regen hotkey`** is used to initialize a hotkey workstation using a pre-existing wallet's _seed phrase_. This is a high security risk operation due to the inherent risk of handling the seed phrase. -#### Permissionless operations +#### Permissionless operations - **`btcli wallet balance`**: Displays a wallet balance. - **`btcli wallet overview`**: Displays a wallet overview. @@ -154,8 +158,8 @@ See: [Coldkey and Hotkey Workstation Security](./getting-started/coldkey-hotkey- - **`sign`(with coldkey)** signs a message with the coldkey. #### Operations requiring hotkey private key: -- **`sign`** (with hotkey): sign a message with the hotkey +- **`sign`** (with hotkey): sign a message with the hotkey
`btcli wallet` @@ -171,7 +175,6 @@ See: [Coldkey and Hotkey Workstation Security](./getting-started/coldkey-hotkey- #### `btcli wallet overview` #### `btcli wallet transfer` #### `btcli wallet inspect` -#### `btcli wallet faucet` #### `btcli wallet set-identity` #### `btcli wallet get-identity` #### `btcli wallet sign` @@ -185,54 +188,99 @@ See: [Coldkey and Hotkey Workstation Security](./getting-started/coldkey-hotkey- #### `btcli wallet get_identity` #### `btcli w list` + #### `btcli w swap-hotkey` + #### `btcli w regen-coldkey` + #### `btcli w regen-coldkeypub` + #### `btcli w regen-hotkey` + #### `btcli w new-hotkey` + #### `btcli w new-coldkey` + #### `btcli w create` + #### `btcli w balance` + #### `btcli w overview` + #### `btcli w transfer` + #### `btcli w inspect` -#### `btcli w faucet` + #### `btcli w set-identity` + #### `btcli w get-identity` + #### `btcli w sign` + #### `btcli w swap_hotkey` + #### `btcli w regen_coldkey` + #### `btcli w regen_coldkeypub` + #### `btcli w regen_hotkey` + #### `btcli w new_hotkey` + #### `btcli w new_coldkey` + #### `btcli w set_identity` + #### `btcli w get_identity` + #### `btcli wallets list` + #### `btcli wallets swap-hotkey` + #### `btcli wallets regen-coldkey` + #### `btcli wallets regen-coldkeypub` + #### `btcli wallets regen-hotkey` + #### `btcli wallets new-hotkey` + #### `btcli wallets new-coldkey` + #### `btcli wallets create` + #### `btcli wallets balance` + #### `btcli wallets history` + #### `btcli wallets overview` + #### `btcli wallets transfer` + #### `btcli wallets inspect` -#### `btcli wallets faucet` + #### `btcli wallets set-identity` + #### `btcli wallets get-identity` + #### `btcli wallets sign` + #### `btcli wallets swap_hotkey` + #### `btcli wallets regen_coldkey` + #### `btcli wallets regen_coldkeypub` + #### `btcli wallets regen_hotkey` + #### `btcli wallets new_hotkey` + #### `btcli wallets new_coldkey` + #### `btcli wallets set_identity` + #### `btcli wallets get_identity` +
### `stake` @@ -240,7 +288,7 @@ See: [Coldkey and Hotkey Workstation Security](./getting-started/coldkey-hotkey- Read operations require public keys. Write operations (stake add, move, remove...) require a coldkey private key. :::tip mind your keys -See: [Coldkey and Hotkey Workstation Security](./getting-started/coldkey-hotkey-security) +See: [Coldkey and Hotkey Workstation Security](../keys/coldkey-hotkey-security) :::
@@ -310,13 +358,21 @@ See: [Coldkey and Hotkey Workstation Security](./getting-started/coldkey-hotkey- #### `btcli su get` #### `btcli su senate` + #### `btcli su proposals` + #### `btcli su senate-vote` + #### `btcli su set-take` + #### `btcli su get-take` + #### `btcli su senate_vote` + #### `btcli su get_take` + #### `btcli su set_take` +
### `subnets` @@ -341,6 +397,7 @@ hyperparams are set with `btcli sudo`. Creating subnets requires a coldkey with sufficient balance. Miner and validator registering a hotkey uses a coldkey, has a TAO cost unless proof-of-work +
@@ -385,7 +442,7 @@ Miner and validator registering a hotkey uses a coldkey, has a TAO cost unless p Reading weights with `reveal` is permissionless. -To set weights with `commit`, a validator must meet several requirements. See [Requirements for validation](./#requirements-for-validation). +To set weights with `commit`, a validator must meet several requirements. See [Requirements for validation](#validator-permit).
`btcli weight` @@ -393,12 +450,65 @@ To set weights with `commit`, a validator must meet several requirements. See [R #### `btcli weights commit` #### `btcli wt reveal` + #### `btcli wt commit` + #### `btcli weight reveal` + #### `btcli weight commit` + +
+ +### `proxy` + +The `proxy` command group allows you to create and manage proxy accounts for secure delegation of account permissions. + +#### Read/permissionless commands + +There are no read-only proxy commands in btcli. To view proxies associated with an account, use the SDK's `get_proxies_for_real_account()` method or query chain state directly via Polkadot.js. + +#### Write commands (require coldkey) + +- **`proxy create`**: Creates a new pure proxy account. This generates a keyless account that can only be controlled through the proxy relationship. Requires the spawner's coldkey. +- **`proxy add`**: Adds a standard proxy relationship, authorizing a delegate account to perform specific operations on behalf of the real account. Requires the real account's coldkey. +- **`proxy remove`**: Removes a proxy relationship, revoking the delegate's permissions. Requires the real account's coldkey. +- **`proxy kill`**: Permanently destroys a pure proxy account. **Warning**: All funds in the pure proxy will be permanently lost. Requires the spawner's coldkey. + +#### Proxy execution commands + +- **`proxy execute`**: Executes a previously announced proxy call after the delay period has passed. This is used with delayed proxies (non-zero delay). + +:::tip Address book management +The `btcli config` commands provide convenient local address book management for proxies: +- `btcli config add-proxy` - Save a proxy to your local address book +- `btcli config proxies` - List all proxies in your address book +- `btcli config remove-proxy` - Remove a proxy from your address book (local only, does not affect on-chain state) +- `btcli config update-proxy` - Update a proxy entry in your address book +::: + +:::info Using proxies with other commands +Many btcli commands support the `--proxy` flag, allowing you to execute operations through a proxy account. You can specify either: +- The proxy's SS58 address directly: `--proxy 5ABC...` +- The proxy's name from your address book: `--proxy my-staking-proxy` + +For delayed proxies, use the `--announce-only` flag to announce a call without executing it immediately. +::: + +See also: [Proxies Documentation](../keys/proxies/) + +
+ `btcli proxy` + +#### `btcli proxy create` +#### `btcli proxy add` +#### `btcli proxy remove` +#### `btcli proxy kill` +#### `btcli proxy execute` +
### `utils` #### `btcli utils convert` -`btcli utils convert` is a convenience command for performing conversions between minimal units (RAO) and TAO, or other chain-specific conversions. It is permissionless (no key required) because it performs no on-chain operation, just a local calculation. + +`btcli utils convert` is a convenience command for performing conversions between minimal units (RAO) and TAO, or other chain-specific conversions. It is permissionless (no key required) because it performs no on-chain operation, just a local calculation. diff --git a/docs/btcli/btcli-playground.md b/docs/btcli/btcli-playground.md index a155ddc9ae..f437c26809 100644 --- a/docs/btcli/btcli-playground.md +++ b/docs/btcli/btcli-playground.md @@ -20,7 +20,7 @@ This is not a secure code execution environment. This page is for practice/educa See: - [Handle your Seed Phrase/Mnemonic Securely](../keys/handle-seed-phrase) -- [Coldkey and Hotkey Workstation Security](../getting-started/coldkey-hotkey-security) +- [Coldkey and Hotkey Workstation Security](../keys/coldkey-hotkey-security) ::: ## Import wallets and check balances. diff --git a/docs/btcli/btcli.md b/docs/btcli/btcli.md new file mode 100644 index 0000000000..a35964caf9 --- /dev/null +++ b/docs/btcli/btcli.md @@ -0,0 +1,3427 @@ +--- +title: "Bittensor CLI: btcli Reference Document" +--- + +# Bittensor CLI: `btcli` Reference Document + +Command line interface (CLI) for Bittensor. Uses the values in the configuration file. These values can be overriden by passing them explicitly in the command line. + +See [Getting Started](../getting-started/install-btcli.md) to install `btcli`. + +:::note Transaction Fees +Many BTCLI operations incur transaction fees. See [Transaction Fees in Bittensor](../learn/fees.md) for details. +::: + +Command line interface (CLI) for Bittensor. Uses the values in the configuration file. These values can be +overriden by passing them explicitly in the command line. + +**Usage**: + +```bash +btcli [OPTIONS] COMMAND [ARGS]... +``` + +**Options**: + +- `--version`: Show BTCLI version. +- `--commands`: Show BTCLI commands. +- `--debug`: Saves the debug log from the last used command. +- `--install-completion`: Install completion for the current shell. +- `--show-completion`: Show completion for the current shell, to copy it or customize the installation. +- `--help`: Show this message and exit. + +**Commands**: + +- `config`: Config commands, aliases: `c`, `conf` +- `wallet`: Wallet commands, aliases: `wallets`, `w` +- `stake`: Stake commands, alias: `st` +- `sudo`: Sudo commands, alias: `su` +- `subnets`: Subnets commands, alias: `s`, `subnet` +- `weights`: Weights commands, aliases: `wt`, `weight` +- `crowd`: Crowdloan commands, aliases: `cr`, `crowdloan` +- `liquidity`: Liquidity commands, aliases: `l` +- `utils` +- `view`: HTML view commands + +## `btcli config` + +**Usage**: + +```bash +btcli config [OPTIONS] COMMAND [ARGS]... + +aliases: conf, c +``` + +**Options**: + +- `--help`: Show this message and exit. + +**Commands**: + +- `set`: Sets or updates configuration values in the BTCLI config file. +- `get`: Prints the current config file in a table. +- `clear`: Clears the fields in the config file and sets them to 'None'. + +### `btcli config set` + +Sets or updates configuration values in the BTCLI config file. + +This command allows you to set default values that will be used across all BTCLI commands. + +**Usage:** + +Interactive mode: +`btcli config set` + +Set specific values: +`btcli config set --wallet-name default --network finney` +`btcli config set --safe-staking --rate-tolerance 0.1` + +Note: + +- Network values can be network names (e.g., 'finney', 'test') or websocket URLs +- Rate tolerance is specified as a decimal (e.g., 0.05 for 0.05%) +- Changes are saved to `~/.bittensor/btcli.yaml` +- Use `btcli config get` to view current settings + +**Usage**: + +```console +btcli config set [OPTIONS] +``` + +**Options**: + +| Option | Type | Description | +| --------------------------------------------------------------------------------------------------------- | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `-p`, `--wallet-path`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `-H`, `--hotkey`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey` | TEXT | Hotkey of the wallet | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | TEXT | The subtensor network to connect to. Default: finney. | +| `--cache`, `--cache`/`--no-cache`, `--no_cache` | | Disable caching of some commands. This will disable the `--reuse-last` and `--html` flags on commands such as `subnets metagraph`, `stake show` and `subnets list`. | +| `--tolerance` | FLOAT | Set the rate tolerance percentage for transactions (e.g. 0.1 for 0.1%) | +| `--safe-staking`, `--safe`/`--no-safe-staking`, `--unsafe` | | Enable or disable safe staking mode. | +| `--allow-partial-stake`, `--partial`, `--allow`/`--no-allow-partial-stake`, `--no-partial`, `--not-allow` | | Allow or prevent partial stakes | +| `--dashboard-path`, `--dashboard_path`, `--dash_path`, `--dash.path` | TEXT | Path to save the dashboard HTML file. For example: `~/.bittensor/dashboard`. | +| `--help` | | Show this message and exit. | + +### `btcli config get` + +Prints the current config file in a table. + +**Usage**: + +```console +btcli config get [OPTIONS] +``` + +**Options**: + +| Option | Type | Description | +| -------- | ---- | --------------------------- | +| `--help` | | Show this message and exit. | + +### `btcli config clear` + +Clears the fields in the config file and sets them to 'None'. + + - To clear the 'chain' and 'network' fields: + + ``` + btcli config clear --chain --network + ``` + + - To clear your config entirely: + + ``` + btcli config clear --all + ``` + +**Usage**: + +```console +btcli config clear [OPTIONS] +``` + +**Options**: + +| Option | Type | Description | +| --------------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `-p`, `--wallet-path`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `-H`, `--hotkey`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey` | TEXT | Hotkey of the wallet | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | TEXT | The subtensor network to connect to. Default: finney. | +| `--cache` | | Disable caching of some commands. This will disable the `--reuse-last` and `--html` flags on commands such as `subnets metagraph`, `stake show` and `subnets list`. | +| `--tolerance` | | | +| `--safe-staking`, `--safe`/`--no-safe-staking`, `--unsafe` | | Enable or disable safe staking mode. | +| `--allow-partial-stake`, `--partial`, `--allow`/`--no-allow-partial-stake`, `--no-partial`, `--not-allow` | | Allow or prevent partial stakes | +| `--all` | | Clears the entire config. | +| `--dashboard-path`, `--dashboard_path`, `--dash_path`, `--dash.path` | TEXT | Path to save the dashboard HTML file. For example: `~/.bittensor/dashboard`. | +| `--help` | | Show this message and exit. | + +## `btcli view` + +Display html dashboard with subnets list, stake, and neuron information. + +**Usage**: + +```console +btcli view [OPTIONS] COMMAND [ARGS]... +``` + +**Options**: + +- `--help`: Show this message and exit. + +**Commands**: + +- `dashboard`: Display html dashboard with subnets list, stake, and neuron information. + +### `btcli view dashboard` + +Display html dashboard with subnets list, stake, and neuron information. + +**Usage**: + +```bash +btcli view dashboard +``` + +**Options**: + +| Option | Type | Description | +| -------- | ---- | --------------------------- | +| `--help` | | Show this message and exit. | + +## `btcli wallet` + +**Usage**: + +```console +btcli wallet [OPTIONS] COMMAND [ARGS]... + +aliases: w, wallets +``` + +**Options**: + +- `--help`: Show this message and exit. + +**Commands**: + +- `list`: Displays all the wallets and their corresponding hotkeys that are located in the wallet path specified in the config. +- `associate_hotkey`: Associate a hotkey with a wallet(coldkey). +- `swap-hotkey`: Swap hotkeys of a given wallet on the blockchain. +- `swap-coldkey`: Schedule a coldkey swap for a wallet. +- `swap-check`: Check the status of scheduled coldkey swaps. +- `regen-coldkey`: Regenerate a coldkey for a wallet on the Bittensor blockchain network. +- `regen-coldkeypub`: Regenerates the public part of a coldkey (`coldkeypub.txt`) for a wallet. +- `regen-hotkey`: Regenerates a hotkey for a wallet. +- `regen-hotkeypub`: Regenerates the public part of a hotkey (`hotkeypub.txt`) for a wallet. +- `new-hotkey`: Create a new hotkey for a wallet. +- `new-coldkey`: Create a new coldkey. +- `create`: Create a complete wallet by setting up both coldkey and hotkeys. +- `balance`: Check the balance of the wallet. +- `overview`: Displays a detailed overview of the user's registered accounts on the Bittensor network. +- `transfer`: Send TAO tokens from one wallet to another wallet on the Bittensor network. +- `set-identity`: Create or update the on-chain identity of a coldkey or a hotkey on the Bittensor network. +- `get-identity`: Shows the identity details of a user's coldkey or hotkey. +- `sign`: Allows users to sign a message with the provided wallet or wallet hotkey. +- `verify`: Verify a message signature using the signer's public key or SS58 address. + +### `btcli wallet list` + +Displays all the wallets and their corresponding hotkeys that are located in the wallet path specified in the config. + +The output display shows each wallet and its associated `ss58` addresses for the coldkey public key and any hotkeys. The output is presented in a hierarchical tree format, with each wallet as a root node and any associated hotkeys as child nodes. The `ss58` address is displayed for each coldkey and hotkey that is not encrypted and exists on the device. + +Upon invocation, the command scans the wallet directory and prints a list of all the wallets, indicating whether the +public keys are available (`?` denotes unavailable or encrypted keys). + +``` +btcli wallet list --path ~/.bittensor +``` + +Note: This command is read-only and does not modify the filesystem or the blockchain state. It is intended for use with the Bittensor CLI to provide a quick overview of the user's wallets. + +**Usage**: + +```console +btcli wallet list [OPTIONS] +``` + +**Options**: + +| Option | Type | Description | +| ----------------------------------------------------------- | ---- | ------------------------------------------------------------------------------------ | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `-p`, `--wallet-path`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--help` | | Show this message and exit. | + +### `btcli wallet associate-hotkey` + +This command is used to associate a hotkey with a wallet(coldkey). + +**Example** + +```sh +btcli wallet associate-hotkey --hotkey-name hotkey_name +``` + +```sh +btcli wallet associate-hotkey --hotkey-ss58 5DkQ4... +``` + +**Usage:** + +```sh +btcli w associate-hotkey [OPTIONS] + +alias: associate_hotkey +``` + +**Options** + +| Option | Type | Description | +| --------------------------------------------------------------------------- | ---- | ------------------------------------------------------------------------------------ | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `-p`, `--wallet-path`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `-H`, `--hotkey`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey` | TEXT | Hotkey name or SS58 address of the hotkey. | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | TEXT | The subtensor network to connect to. Default: finney. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--prompt`, `--prompt`, `--no-prompt`, `--yes`, `--no_prompt`, `-y` | | Enable or disable interactive prompts. | +| `--help` | | Show this message and exit. | +| | + +### `btcli wallet swap-hotkey` + +Swap hotkeys of a given wallet on the blockchain. For a registered key pair, for example, a (coldkeyA, hotkeyA) pair, this command swaps the hotkeyA with a new, unregistered, hotkeyB to move the original registration to the (coldkeyA, hotkeyB) pair. + +:::info + +- Make sure that your original key pair (coldkeyA, hotkeyA) is already registered. +- Make sure that you use a newly created hotkeyB in this command. A hotkeyB that is already registered cannot be used in this command. +- Finally, note that this command requires a fee of 1 TAO for recycling and this fee is taken from your wallet (coldkeyA). + ::: + +**Example:** + +``` +btcli wallet swap_hotkey destination_hotkey_name --wallet-name your_wallet_name --wallet-hotkey original_hotkey +``` + +**Usage**: + +```console +btcli wallet swap-hotkey [OPTIONS] [DESTINATION_HOTKEY_NAME] + +alias: swap_hotkey +``` + +**Arguments**: + +- `[DESTINATION_HOTKEY_NAME]`: Destination hotkey name. + +**Options**: + +| Option | Type | Description | +| --------------------------------------------------------------------------- | ------- | ------------------------------------------------------------------------------------ | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `-p`, `--wallet-path`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `-H`, `--hotkey`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey` | TEXT | Hotkey of the wallet | +| `--netuid` | INTEGER | The netuid of the subnet in the network, (e.g. 1). | +| ` --all-netuids`/`--no-all-netuids`, | | Use all netuids | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | TEXT | The subtensor network to connect to. Default: finney. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--prompt`, `--prompt`, `--no-prompt`, `--yes`, `--no_prompt`, `-y` | | Enable or disable interactive prompts. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | +| | + +### `btcli wallet swap-coldkey` + +This command allows you to schedule a coldkey swap for a wallet. You can either provide a new wallet name, or SS58 address. + +**Example** + +```sh +btcli wallet swap-coldkey --new-wallet my_new_wallet +``` + +```sh +btcli wallet swap-coldkey --new-coldkey-ss58 5Dk...X3q +``` + +**Usage:** + +```sh +btcli wallet swap-coldkey [OPTIONS] + +alias: swap_coldkey +``` + +**Options** + +| Option | Type | Description | +| --------------------------------------------------------------------------- | ---- | ------------------------------------------------------------------------------------ | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `-p`, `--wallet-path`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `-H`, `--hotkey`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey` | TEXT | Hotkey of the wallet | +| `--new-coldkey`, `--new-coldkey-ss58`, `--new-wallet`, `--new` | TEXT | SS58 address of the new coldkey that will replace the current one. | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | TEXT | The subtensor network to connect to. Default: finney. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--force`, `--force-swap`, `-f` | | Force the swap even if the new coldkey is already scheduled for a swap. | +| `--help` | | Show this message and exit. | +| | + +### `btcli wallet swap-check` + +This command checks the status of scheduled coldkey swaps. It can be used in one of three ways: + +- Show all pending swaps using the `--all` flag. +- Check status of a specific wallet's swap or SS58 address. +- Check detailed swap status with block number using the `--block` flag. + +**Example** + +Show all pending swaps: + +```sh +btcli wallet swap-check --all +``` + +Check specific wallet's swap: + +```sh + btcli wallet swap-check --wallet-name my_wallet +``` + +Check swap using SS58 address: + +```sh + btcli wallet swap-check --ss58 5DkQ4... +``` + +Check swap details with block number: + +```sh + btcli wallet swap-check --wallet-name my_wallet --block 12345 +``` + +**Usage:** + +```sh +btcli wallet swap-check [OPTIONS] + +alias: swap_check +``` + +**Options** +| Option | Type | Description | +| --------------------------------------------------------------------------- | ---- | ------------------------------------------------------------------------------------ | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `-p`, `--wallet-path`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `-H`, `--hotkey`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey` | TEXT | Hotkey of the wallet | +| `--block` | INTEGER | Block number where the swap was scheduled. | +| `--all` | | Show all pending coldkey swaps | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | TEXT | The subtensor network to connect to. Default: finney. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--help` | | Show this message and exit. | +| | + +### `btcli wallet regen-coldkey` + +Regenerate a coldkey for a wallet on the Bittensor blockchain network. + +This command is used to create a new instance of a coldkey from an existing mnemonic, seed, or JSON file. + +**Usage:** + +Users can specify a mnemonic, a seed string, or a JSON file path to regenerate a coldkey. The command supports optional password protection for the generated key. + +**Example:** + +``` +btcli wallet regen-coldkey --mnemonic "word1 word2 ... word12" +``` + +:::info +This command is critical for users who need to regenerate their coldkey either for recovery or for security reasons. +::: + +**Usage**: + +```console +btcli wallet regen-coldkey [OPTIONS] + +alias: regen_coldkey +``` + +**Options**: + +| Option | Type | Description | +| ------------------------------------------------------------------------- | ---- | ------------------------------------------------------------------------------------ | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `-p`, `--wallet-path`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `-H`, `--hotkey`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey` | TEXT | Hotkey of the wallet | +| `--mnemonic` | TEXT | Mnemonic used to regenerate your key. | +| `--seed`, | TEXT | Seed hex string used to regenerate your key. | +| `--json`, `-j` | TEXT | Path to a JSON file containing the encrypted key backup. | +| `--json-password`, | TEXT | Password to decrypt the JSON file.key. | +| `--use-password`/`--no-use-password `, | | Set this to `True` to protect the generated Bittensor key with a password. | +| `--overwrite`/`--no-overwrite` | | Overwrite the existing wallet file with the new one. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli wallet regen-coldkeypub` + +Regenerates the public part of a coldkey (`coldkeypub.txt`) for a wallet. + +Use this command when you need to move machine for subnet mining. Use the public key or SS58 address from your `coldkeypub.txt` that you have on another machine to regenerate the `coldkeypub.txt` on this new machine. + +**Usage:** + +The command requires either a public key in hexadecimal format or an `SS58` address from the existing `coldkeypub.txt` from old machine to regenerate the coldkeypub on the new machine. + +**Example:** + +``` +btcli wallet regen_coldkeypub --ss58_address 5DkQ4... +``` + +:::info +This command is particularly useful for users who need to regenerate their coldkeypub, perhaps due to file corruption or loss. You will need either ss58 address or public hex key from your old `coldkeypub.txt` for the wallet. It is a recovery-focused utility that ensures continued access to your wallet functionalities. +::: +**Usage**: + +```console +btcli wallet regen-coldkeypub [OPTIONS] + +alias: regen_coldkeypub +``` + +**Options**: + +| Option | Type | Description | +| ------------------------------------------------------------------------- | ---- | ------------------------------------------------------------------------------------ | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `-p`, `--wallet-path`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `-H`, `--hotkey`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey` | TEXT | Hotkey of the wallet | +| `--public-key-hex`, | TEXT | The public key in hex format. | +| `--ss58`, `--ss58-address`, | TEXT | The SS58 address of the coldkey. | +| `--overwrite`/`--no-overwrite` | | Overwrite the existing wallet file with the new one. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli wallet regen-hotkey` + +Regenerates a hotkey for a wallet. + +Similar to regenerating a coldkey, this command creates a new hotkey from a mnemonic, seed, or JSON file. + +**Usage:** + +Users can provide a mnemonic, seed string, or a JSON file to regenerate the hotkey. The command supports optional password protection and can overwrite an existing hotkey. + +``` +btcli wallet regen_hotkey --seed 0x1234... +``` + +:::info +This command is essential for users who need to regenerate their hotkey, possibly for security upgrades or key recovery. +It should be used with caution to avoid accidental overwriting of existing keys. +::: + +**Usage**: + +```console +btcli wallet regen-hotkey [OPTIONS] + +alias: regen_hotkey +``` + +**Options**: + +| Option | Type | Description | +| ------------------------------------------------------------------------- | ---- | ------------------------------------------------------------------------------------ | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `-p`, `--wallet-path`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `-H`, `--hotkey`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey` | TEXT | Hotkey of the wallet | +| `--mnemonic` | TEXT | Mnemonic used to regenerate your key. | +| `--seed`, | TEXT | Seed hex string used to regenerate your key. | +| `--json`, `-j` | TEXT | Path to a JSON file containing the encrypted key backup. | +| `--json-password`, | TEXT | Password to decrypt the JSON file.key. | +| `--use-password`/`--no-use-password`, | | Set this to `True` to protect the generated Bittensor key with a password. | +| `--overwrite`/`--no-overwrite` | | Overwrite the existing wallet file with the new one. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli wallet regen-hotkeypub` + +This command regenerates the public part of a hotkey (hotkeypub.txt) for a wallet. Use this command when you need to move machine for subnet mining. Use the public key or SS58 address from your hotkeypub.txt that you have on another machine to regenerate the hotkeypub.txt on this new machine. + +**Usage** +The command requires either a public key in hexadecimal format or an `SS58` address from the existing `hotkeypub.txt` from old machine to regenerate the hotkeypub on the new machine. + +**Example:** + +```sh +btcli wallet regen-hotkeypub --ss58_address 5DkQ4... +``` + +**Usage** + +```sh +btcli wallet regen-hotkeypub [OPTIONS] + +alias: regen_hotkeypub +``` + +:::info +This command is particularly useful for users who need to regenerate their hotkeypub, perhaps due to file corruption or loss. You will need either ss58 address or public hex key from your old `hotkeypub.txt` for the wallet. It is a recovery-focused utility that ensures continued access to your wallet functionalities. +::: + +**Options** + +| Option | Type | Description | +| ------------------------------------------------------------------------- | ---- | ------------------------------------------------------------------------------------ | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `-p`, `--wallet-path`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `-H`, `--hotkey`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey` | TEXT | Hotkey of the wallet | +| `--public-key-hex`, | TEXT | The public key in hex format. | +| `--ss58`, `--ss58-address`, | TEXT | The SS58 address of the coldkey. | +| `--overwrite`/`--no-overwrite` | | Overwrite the existing wallet file with the new one. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli wallet new-hotkey` + +Create a new hotkey for a wallet. + +**Usage:** + +This command is used to generate a new hotkey for managing a neuron or participating in a subnet. It provides options for the mnemonic word count, and supports password protection. It also allows overwriting the +existing hotkey. + +**Example:** + +``` +btcli wallet new-hotkey --n_words 24 +``` + +:::info +This command is useful to create additional hotkeys for different purposes, such as running multiple subnet miners or subnet validators or separating operational roles within the Bittensor network. +::: + +**Usage**: + +```console +btcli wallet new-hotkey [OPTIONS] + +alias: new_hotkey +``` + +**Options**: + +| Option | Type | Description | +| ------------------------------------------------------------------------- | ------- | ------------------------------------------------------------------------------------ | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `-p`, `--wallet-path`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `-H`, `--hotkey`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey` | TEXT | Hotkey of the wallet | +| `--n-words`, `--n_words` | INTEGER | The number of words used in the mnemonic. | +| `--use-password`/`--no-use-password `, | | Set this to `True` to protect the generated Bittensor key with a password. | +| `--uri` | TEXT | Create wallet from uri (e.g. 'Alice', 'Bob', 'Charlie') | +| `--overwrite`/`--no-overwrite` | | Overwrite the existing wallet file with the new one. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli wallet new-coldkey` + +Create a new coldkey. A coldkey is required for holding TAO balances and performing high-value transactions. + +**Usage:** + +The command creates a new coldkey. It provides options for the mnemonic word count, and supports password protection. It also allows overwriting an existing coldkey. + +**Example:** + +``` +btcli wallet new_coldkey --n_words 15 +``` + +:::info +This command is crucial for users who need to create a new coldkey for enhanced security or as part of setting up a new wallet. It is a foundational step in establishing a secure presence on the Bittensor network. +::: + +**Usage**: + +```console +btcli wallet new-coldkey [OPTIONS] + +alias: new_coldkey +``` + +**Options**: + +| Option | Type | Description | +| ------------------------------------------------------------------------- | ------- | ------------------------------------------------------------------------------------ | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `-p`, `--wallet-path`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `-H`, `--hotkey`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey` | TEXT | Hotkey of the wallet | +| `--n-words`, `--n_words` | INTEGER | The number of words used in the mnemonic. | +| `--use-password`/`--no-use-password `, | | Set this to `True` to protect the generated Bittensor key with a password. | +| `--uri` | TEXT | Create wallet from uri (e.g. 'Alice', 'Bob', 'Charlie') | +| `--overwrite`/`--no-overwrite` | | Overwrite the existing wallet file with the new one. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli wallet create` + +Create a complete wallet by setting up both coldkey and hotkeys. + +**Usage:** + +The command creates a new coldkey and hotkey. It provides an option for mnemonic word count. It supports password protection for the coldkey and allows overwriting of existing keys. + +**Example:** + +``` +btcli wallet create --n-words 21 +``` + +Note: This command is for new users setting up their wallet for the first time, or for those who wish to completely renew their wallet keys. It ensures a fresh start with new keys for secure and effective participation in the Bittensor network. + +**Usage**: + +```console +btcli wallet create [OPTIONS] +``` + +**Options**: + +| Option | Type | Description | +| ------------------------------------------------------------------------- | ------- | ------------------------------------------------------------------------------------ | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `-p`, `--wallet-path`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `-H`, `--hotkey`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey` | TEXT | Hotkey of the wallet | +| `--n-words` | INTEGER | The number of words used in the mnemonic. | +| `--use-password`/`--no-use-password `, | | Set this to `True` to protect the generated Bittensor key with a password. | +| `--uri` | TEXT | Create wallet from uri (e.g. 'Alice', 'Bob', 'Charlie') | +| `--overwrite`/`--no-overwrite` | | Overwrite the existing wallet file with the new one. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli wallet balance` + +Check the balance of the wallet. This command shows a detailed view of the wallet's coldkey balances, including free and staked balances. + +You can also pass multiple ss58 addresses of coldkeys to check their balance (using --ss58). + +**Example:** + +- To display the balance of a single wallet, use the command with the `--wallet-name` argument and provide the wallet name: + + ``` + btcli w balance --wallet-name WALLET + ``` + +- To use the default config values, use: + + ``` + btcli w balance + ``` + +- To display the balances of all your wallets, use the `--all` argument: + + ``` + btcli w balance --all + ``` + +- To display the balances of ss58 addresses, use the `--ss58` argument: + + ``` + btcli w balance --ss58 <ss58_address> --ss58 <ss58_address> + ``` + +**Usage**: + +```console +btcli wallet balance [OPTIONS] +``` + +**Options**: + +| Option | Type | Description | +| --------------------------------------------------------------------------- | ------------------------------ | ------------------------------------------------------------------------------------ | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `-p`, `--wallet-path`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `-H`, `--hotkey`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey` | TEXT | Hotkey of the wallet | +| `--ss58`, `--ss58-address`, | TEXT | The SS58 address of the coldkey. | +| `--all`, `-a` | | Whether to display the balances for all the wallets. | +| `--sort` | `name`/`free`/`staked`/`total` | When using `--all`, sorts the wallets by a given column | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | TEXT | The subtensor network to connect to. Default: finney. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli wallet overview` + +Displays a detailed overview of the user's registered accounts on the Bittensor network. + +This command compiles and displays comprehensive information about each neuron associated with the user's wallets, including both hotkeys and coldkeys. It is especially useful for users managing multiple accounts or looking for a summary of their network activities and stake distributions. + +**Usage:** + +``` +btcli wallet overview +``` + +``` +btcli wallet overview --all +``` + +Note: This command is read-only and does not modify the blockchain state or account configuration. +It provides a quick and comprehensive view of the user's network presence, making it useful for monitoring account status, +stake distribution, and overall contribution to the Bittensor network. + +**Usage**: + +```console +btcli wallet overview [OPTIONS] +``` + +**Options**: + +| Option | Type | Description | +| --------------------------------------------------------------------------- | ---- | ------------------------------------------------------------------------------------------------------------------------------------------- | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `-p`, `--wallet-path`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `-H`, `--hotkey`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey` | TEXT | Hotkey of the wallet | +| `--all`, `-a` | | See an overview for all the wallets | +| `--sort-by`, `--sort_by` | TEXT | Sort the hotkeys by the specified column title. For example: name, uid, axon. | +| `--sort-order`, `--sort_order` | TEXT | Sort the hotkeys in the specified order (ascending/asc or descending/desc/reverse). | +| `--include-hotkeys`, `-in` | TEXT | Hotkeys to include. Specify by name or ss58 address. If left empty, all hotkeys, except those in the `--exclude-hotkeys`, will be included. | +| `--exclude-hotkeys`, `-ex` | TEXT | Hotkeys to exclude. Specify by name or ss58 address. If left empty, all hotkeys, except those in the `--include-hotkeys`, will be excluded. | +| `--netuids`, `--netuid`, `-n` | TEXT | Set the netuid(s) to exclude. Separate multiple netuids with a comma, for example: `-n 0,1,2`. | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | TEXT | The subtensor network to connect to. Default: finney. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli wallet transfer` + +Send TAO tokens from one wallet to another wallet on the Bittensor network. + +This command is used for transactions between different wallet accounts, enabling users to send tokens to other +participants on the network. The command displays the user's current balance before prompting for the amount +to transfer (send), ensuring transparency and accuracy in the transaction. + +**Usage:** + +The command requires that you specify the destination address (public key) and the amount of TAO you want transferred. +It checks if sufficient balance exists in your wallet and prompts for confirmation before proceeding with the transaction. + +**Example:** + +``` +btcli wallet transfer --dest 5Dp8... --amount 100 +``` + +Note: This command is used for executing token transfers within the Bittensor network. Users should verify the destination address and the TAO amount before confirming the transaction to avoid errors or loss of funds. + +**Usage**: + +```console +btcli wallet transfer [OPTIONS] +``` + +**Options**: + +| Option | Type | Description | +| --------------------------------------------------------------------------- | ------- | ------------------------------------------------------------------------------------ | +| `--destination`, `--dest`, `-d` | TEXT | Destination address (ss58) of the wallet (coldkey). | +| `--amount`, `-a` | FLOAT | Amount (in TAO) to transfer. | +| `--all` | | Transfer all available balance. | +| `--all` | | Whether to display the balances for all the wallets. | +| `--period`, `-era` | INTEGER | Length (in blocks) for which the transaction should be valid. | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `-p`, `--wallet-path`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `-H`, `--hotkey`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey` | TEXT | Hotkey of the wallet | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | TEXT | The subtensor network to connect to. Default: finney. | +| `--prompt`, `--prompt`, `--no-prompt`, `--yes`, `--no_prompt`, `-y` | | Enable or disable interactive prompts. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli wallet set-identity` + +Create or update the on-chain identity of a coldkey or a hotkey on the Bittensor network. Incurs a 1 TAO transaction fee. + +The on-chain identity includes attributes such as display name, legal name, web URL, PGP fingerprint, and contact information, among others. + +The command prompts the user for the identity attributes and validates the input size for each attribute. It provides an option to update an existing validator hotkey identity. If the user consents to the transaction cost, the identity is updated on the blockchain. + +Each field has a maximum size of 64 bytes. The PGP fingerprint field is an exception and has a maximum size of 20 bytes. The user is prompted to enter the PGP fingerprint as a hex string, which is then converted to bytes. The user is also prompted to enter the coldkey or hotkey `ss58` address for the identity to be updated. + +If the user does not have a hotkey, the coldkey address is used by default. If setting a validator identity, the hotkey will be used by default. If the user is setting an identity for a subnet, the coldkey will be used by default. + +**Example:** + +``` +btcli wallet set_identity +``` + +:::info +This command should only be used if the user is willing to incur the a recycle fee associated with setting an identity on the blockchain. It is a high-level command that makes changes to the blockchain state and should not be used programmatically as part of other scripts or applications. +::: + +**Usage**: + +```console +btcli wallet set-identity [OPTIONS] + +alias: set_identity +``` + +**Options**: + +| Option | Type | Description | +| --------------------------------------------------------------------------- | ---- | ------------------------------------------------------------------------------------ | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `-p`, `--wallet-path`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `-H`, `--hotkey`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey` | TEXT | Hotkey of the wallet | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | TEXT | The subtensor network to connect to. Default: finney. | +| `--id-name` | TEXT | The display name for the identity. | +| `--web-url`, `--web` | TEXT | The web URL for the identity. | +| `--image-url`, `--image` | TEXT | The image URL for the identity. | +| `--discord` | TEXT | The Discord handle for the identity. | +| `--description` | TEXT | The description for the identity. | +| `--additional` | TEXT | Additional details for the identity. | +| `--github` | TEXT | The GitHub repository for the identity. | +| `--prompt`, `--prompt`, `--no-prompt`, `--yes`, `--no_prompt`, `-y` | | Enable or disable interactive prompts. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli wallet get-identity` + +Shows the identity details of a user's coldkey or hotkey. + +The command displays the information in a table format showing: + +- Address: The `ss58` address of the queried key. + +- Item: Various attributes of the identity such as stake, rank, and trust. + +- Value: The corresponding values of the attributes. + +**Example:** + +```sh +btcli wallet get_identity --key <s58_address> +``` + +:::info +This command is primarily used for informational purposes and has no side effects on the blockchain network state. +::: + +**Usage**: + +```console +btcli wallet get-identity [OPTIONS] + +alias: get_identity +``` + +**Options**: + +| Option | Type | Description | +| -------------------------------------------------------------------------------------- | ---- | ------------------------------------------------------------------------------------ | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `-p`, `--wallet-path`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `-H`, `--hotkey`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey` | TEXT | Hotkey of the wallet | +| `--ss58`, `--coldkey_ss58`, `--coldkey.ss58_address`, `--coldkey.ss58`, `--key`, `-k ` | TEXT | Coldkey address of the wallet | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | TEXT | The subtensor network to connect to. Default: finney. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli wallet sign` + +Allows users to sign a message with the provided wallet or wallet hotkey. Use this command to easily prove your ownership of a coldkey or a hotkey. + +**Usage:** + +Using the provided wallet (coldkey), the command generates a signature for a given message. + +**Example:** + +```sh +btcli wallet sign --wallet-name default --message '{"something": "here", "timestamp": 1719908486}' +``` + +```sh +btcli wallet sign --wallet-name default --wallet-hotkey hotkey --message '{"something": "here", "timestamp": 1719908486}' +``` + +**Usage**: + +```console +btcli wallet sign [OPTIONS] +``` + +**Options**: + +| Option | Type | Description | +| ------------------------------------------------------------------------- | ---- | ---------------------------------------------------------------------------------------------------- | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `-p`, `--wallet-path`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `-H`, `--hotkey`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey` | TEXT | Hotkey of the wallet | +| `--use-hotkey` / `--no-use-hotkey` | | If specified, the message will be signed by the hotkey. If not specified, the user will be prompted. | +| `--message` | TEXT | The message to encode and sign. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli wallet verify` + +Verify a message signature using the signer's public key or SS58 address. This command allows you to verify that a message was signed by the owner of a specific address. + +**Usage:** + +Provide the original message, the signature (in hex format), and either the SS58 address or public key of the signer to verify the signature. + +**Example:** + +```sh +btcli wallet verify --message "Hello world" --signature "0xabc123..." --address "5GrwvaEF..." +``` + +```sh +btcli wallet verify -m "Test message" -s "0xdef456..." -p "0x1234abcd..." +``` + +**Usage**: + +```console +btcli wallet verify [OPTIONS] +``` + +**Options**: + +| Option | Type | Description | +| -------------------------------------- | ---- | --------------------------------------------------------------- | +| `--message` | TEXT | The message that was signed. [default: None] | +| `--signature`, `-s` | TEXT | The signature to verify. (hex format) [default: None] | +| `--address`, `--public-key` `-a`, `-p` | TEXT | SS58 address or public key (hex) of the signer. [default: None] | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +## `btcli stake` + +**Usage**: + +```console +btcli stake [OPTIONS] COMMAND [ARGS]... + +alias: st +``` + +**Options**: + +- `--help`: Show this message and exit. + +**Commands**: + +- `add`: Stake TAO to one or more hotkeys on specific netuids with your coldkey. +- `remove`: Unstake TAO from one or more hotkeys and transfer them back to the user's coldkey wallet. +- `list`: Display detailed stake information for a wallet across all subnets. +- `move`: Move staked TAO between hotkeys while keeping the same coldkey ownership. +- `transfer`: Transfer stake between coldkeys while keeping the same hotkey ownership. +- `swap`: Swap stake between different subnets while keeping the same coldkey-hotkey pair ownership. +- `claim`: Set the root claim type for your coldkey, alias `set-claim`. +- `process-claim`: Manually claim accumulated root network emissions for your coldkey. +- `child`: Child Hotkey commands, alias: `children` +- `children` + +### `btcli stake add` + +Stake TAO to one or more hotkeys on specific or multiple netuids with your coldkey. + +Stakes are always added through your coldkey's free balance. For stake movement, see the [`btcli stake move`](#btcli-stake-move) command. + +Common Examples: + +1. Interactive staking (guided prompts): + + ```sh + btcli stake add + ``` + +2. Safe staking with rate tolerance of 10% with partial transaction disabled: + + ```sh + btcli stake add --amount 100 --netuid 1 --safe --tolerance 0.1 --no-partial + ``` + +3. Allow partial stake if rates change with tolerance of 10%: + + ```sh + btcli stake add --amount 300 --safe --partial --tolerance 0.1 + ``` + +4. Unsafe staking with no rate protection: + + ```sh + btcli stake add --amount 300 --netuid 1 --unsafe + ``` + +5. Stake to multiple hotkeys: + + ```sh + btcli stake add --amount 200 --include-hotkeys hk_ss58_1,hk_ss58_2,hk_ss58_3 + ``` + +6. Stake the same amount of TAO into multiple subnets: + + ```sh + btcli stake add -n 4,14,64 --amount 100 + ``` + +7. Stake all balance to a subnet: + ```sh + btcli stake add --all --netuid 3 + ``` + +Safe Staking Parameters:--safe: Enables rate tolerance checks +`--tolerance`: Maximum % rate change allowed (0.05 = 5%) +`--partial`: Complete partial stake if rates exceed tolerance + +**Usage**: + +```console +btcli stake add [OPTIONS] +``` + +**Options**: + +| Option | Type | Description | +| --------------------------------------------------------------------------------------------------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------- | +| `--all-tokens`, `--all`, `-a` | | When set, the command stakes all the available TAO from the coldkey. | +| `--amount` | FLOAT | The amount of TAO to stake | +| `--include-hotkeys`, `--hotkey-ss58-address`, `-in` | TEXT | Specifies hotkeys by name or ss58 address to stake to. For example, `-in hk1,hk2` | +| `--exclude-hotkeys`, `-ex` | TEXT | Specifies hotkeys by name or ss58 address to not to stake to (use this option only with `--all-hotkeys`) i.e. `--all-hotkeys -ex hk3,hk4` | +| `--all-hotkeys`/ `--no-all-hotkeys` | | When set, this command stakes to all hotkeys associated with the wallet. Do not use if specifying hotkeys in `--include-hotkeys`. | +| `--netuids`, `--netuid`, `-n` | TEXT | Netuid(s) to for which to add stake. Specify multiple netuids by separating with a comma, for example: `-n 0,1,2`. | +| `--all-netuids`/ `--no-all-netuid` | | Use all netuids. | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `-p`, `--wallet-path`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `-H`, `--hotkey`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey` | TEXT | Hotkey of the wallet | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | TEXT | The subtensor network to connect to. Default: finney. | +| `--tolerance`, `--rate-tolerance` | FLOAT | Set the rate tolerance percentage for transactions (e.g. 0.1 for 0.1%) | +| `--safe-staking`, `--safe`/`--no-safe-staking`, `--unsafe` | | Enable or disable safe staking mode. | +| `--allow-partial-stake`, `--partial`, `--allow`/`--no-allow-partial-stake`, `--no-partial`, `--not-allow` | | Allow or prevent partial stakes | +| `--period`, `-era` | INTEGER | Length (in blocks) for which the transaction should be valid. | +| `--prompt`, `--prompt`, `--no-prompt`, `--yes`, `--no_prompt`, `-y` | | Enable or disable interactive prompts. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli stake auto` + +Display auto-stake destinations for a wallet across all subnets. + +**Usage:** + +```bash +btcli stake auto [OPTIONS] +``` + +**Parameters:** + +| Options | Type | Description | +| --------------------------------------------------------------------------- | ---- | ------------------------------------------------------------------------------------ | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | | The subtensor network to connect to. Default: finney. | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `--wallet-path`, `-p`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `--ss58`, `--coldkey_ss58`, `--coldkey.ss58_address`, `--coldkey.ss58` | | Coldkey address of the wallet | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli stake set-auto` + +Set the auto-stake destination hotkey for a coldkey. + +**Usage:** + +```bash +btcli stake set-auto [OPTIONS] +``` + +**Parameters:** + +| Options | Type | Description | +| --------------------------------------------------------------------------- | ------- | ------------------------------------------------------------------------------------ | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | | The subtensor network to connect to. Default: finney. | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `--wallet-path`, `-p`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `--netuid` | INTEGER | The netuid of the subnet in the network, (e.g. 1). | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--prompt/--no-prompt`, ` /--yes`, ` /--no_prompt`, ` /-y` | | Enable or disable interactive prompts. | +| `--wait_for_inclusion` | | If `True`, waits until the transaction is included in a block. | +| `--wait_for_finalization` | | If `True`, waits until the transaction is finalized on the blockchain. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli stake remove` + +Unstake TAO from one or more hotkeys and transfer them back to the user's coldkey wallet. + +This command is used to withdraw TAO or Alpha stake from different hotkeys. + +Common Examples: + +1. Interactive unstaking (guided prompts): + + ``` + btcli stake remove + ``` + +2. Safe unstaking with 10% rate tolerance: + + ``` + btcli stake remove --amount 100 --netuid 1 --safe --tolerance 0.1 + ``` + +3. Allow partial unstake if rates change: + + ``` + btcli stake remove --amount 300 --safe --partial + ``` + +4. Unstake from multiple hotkeys: + + ``` + btcli stake remove --amount 200 --include-hotkeys hk1,hk2,hk3 + ``` + +5. Unstake all from a hotkey: + + ``` + btcli stake remove --all + ``` + +6. Unstake all Alpha from a hotkey and stake to Root: + ``` + btcli stake remove --all-alpha + ``` + +Safe Staking Parameters: +`--safe`: Enables rate tolerance checks during unstaking +`--tolerance`: Max allowed rate change (0.05 = 5%) +`--partial`: Complete partial unstake if rates exceed tolerance + +**Usage**: + +```console +btcli stake remove [OPTIONS] +``` + +**Options**: + +| Option | Type | Description | +| --------------------------------------------------------------------------------------------------------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------- | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | TEXT | The subtensor network to connect to. Default: finney. | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `-p`, `--wallet-path`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `-H`, `--hotkey`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey` | TEXT | Hotkey of the wallet | +| `--netuid`, | INTEGER | The netuid of the subnet in the network, (e.g. 1). | +| `--all-netuids`/ `--no-all-netuid` | | Use all netuids. | +| `--unstake-all`, `--all` | | When set, this command unstakes all staked TAO + Alpha from the all hotkeys. | +| `--unstake-all-alpha`, `--all-alpha` | | When set, this command unstakes all staked Alpha from the all hotkeys. | +| `--amount`, `-a` | FLOAT | The amount of TAO to unstake | +| `--hotkey-ss58-address` | TEXT | The ss58 address of the hotkey to unstake from. | +| `--include-hotkeys`, `-in` | TEXT | Specifies hotkeys by name or ss58 address to unstake from. For example, `-in hk1,hk2` | +| `--exclude-hotkeys`, `-ex` | TEXT | Specifies hotkeys by name or ss58 address to not to unstake from (use this option only with `--all-hotkeys`) i.e. `--all-hotkeys -ex hk3,hk4` | +| `--all-hotkeys`/ `--no-all-hotkeys` | | When set, this command unstakes from all hotkeys associated with the wallet. Do not use if specifying hotkeys in `--include-hotkeys`. | +| `--tolerance`, `--rate-tolerance` | FLOAT | Set the rate tolerance percentage for transactions (e.g. 0.1 for 0.1%) | +| `--safe-staking`, `--safe`/`--no-safe-staking`, `--unsafe` | | Enable or disable safe staking mode. | +| `--allow-partial-stake`, `--partial`, `--allow`/`--no-allow-partial-stake`, `--no-partial`, `--not-allow` | | Allow or prevent partial stakes | +| `--period`, `-era` | INTEGER | Length (in blocks) for which the transaction should be valid. | +| `--prompt`, `--prompt`, `--no-prompt`, `--yes`, `--no_prompt`, `-y` | | Enable or disable interactive prompts. | +| `--interactive`, `-t` | | Enter interactive mode for unstaking. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli stake list` + +Display detailed stake information for a wallet across all subnets. + +Shows stake allocations, exchange rates, and emissions for each hotkey. + +Common Examples: + +1. Basic stake overview: + +``` +btcli stake list --wallet.name my_wallet +``` + +2. Live updating view with refresh: + +``` +btcli stake list --wallet.name my_wallet --live +``` + +3. View specific coldkey by address: + +``` +btcli stake list --ss58 5Dk...X3q +``` + +4. Verbose output with full values: + +``` +btcli stake list --wallet.name my_wallet --verbose +``` + +**Usage**: + +```console +btcli stake list [OPTIONS] +``` + +**Options**: + +| Option | Type | Description | +| -------------------------------------------------------------------------------------- | ---- | ------------------------------------------------------------------------------------ | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | TEXT | The subtensor network to connect to. Default: finney. | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `-p`, `--wallet-path`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `-H`, `--hotkey`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey` | TEXT | Hotkey of the wallet | +| `--ss58`, `--coldkey_ss58`, `--coldkey.ss58_address`, `--coldkey.ss58`, `--key`, `-k ` | TEXT | Coldkey address of the wallet | +| `--prompt`, `--prompt`, `--no-prompt`, `--yes`, `--no_prompt`, `-y` | | Enable or disable interactive prompts. | +| `--live` | | Display live view of the table | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli stake move` + +Move staked TAO between hotkeys while keeping the same coldkey ownership. + +This command allows you to: + +- Move stake from one hotkey to another hotkey +- Move stake between different subnets +- Keep the same coldkey ownership + +You can specify: + +- The origin subnet (--origin-netuid) +- The destination subnet (--dest-netuid) +- The destination hotkey (--dest-hotkey) +- The amount to move (--amount) + +If no arguments are provided, an interactive selection menu will be shown. + +**Example:** + +``` +btcli stake move +``` + +**Usage**: + +```console +btcli stake move [OPTIONS] +``` + +**Options**: + +| Option | Type | Description | +| -------------------------------------------------------------------------------------------------- | ------- | ------------------------------------------------------------------------------------ | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | TEXT | The subtensor network to connect to. Default: finney. | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `-p`, `--wallet-path`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `from`, `-H`, `--hotkey`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey`, `--hotkey-ss58` | TEXT | Validator hotkey or SS58 where the stake is currently located. | +| `--origin-netuid` | INTEGER | Origin netuid. | +| `--dest-netuid` | INTEGER | Destination netuid. | +| `to`, `--dest-ss58`, `--dest` | TEXT | Destination validator hotkey SS58. | +| `--amount` | FLOAT | The amount of TAO to stake | +| `--stake-all`, `--all` | | Stake all. | +| `--period`, `-era` | INTEGER | Length (in blocks) for which the transaction should be valid. | +| `--prompt`, `--prompt`, `--no-prompt`, `--yes`, `--no_prompt`, `-y` | | Enable or disable interactive prompts. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli stake transfer` + +Transfer stake between coldkeys while keeping the same hotkey ownership. + +This command allows you to: + +- Transfer stake from one coldkey to another coldkey +- Keep the same hotkey ownership +- Transfer stake between different subnets + +You can specify: + +- The origin subnet (--origin-netuid) +- The destination subnet (--dest-netuid) +- The destination wallet/address (--dest) +- The amount to transfer (--amount) + +If no arguments are provided, an interactive selection menu will be shown. + +**Example:** + +Transfer 100 TAO from subnet 1 to subnet 2: + +``` +btcli stake transfer --origin-netuid 1 --dest-netuid 2 --dest wallet2 --amount 100 +``` + +Using SS58 address: + +``` +btcli stake transfer --origin-netuid 1 --dest-netuid 2 --dest 5FrLxJsyJ5x9n2rmxFwosFraxFCKcXZDngEP9H7qjkKgHLcK --amount 100 +``` + +**Usage**: + +```console +btcli stake transfer [OPTIONS] +``` + +**Options**: + +| Option | Type | Description | +| ------------------------------------------------------------------------------------------ | ------- | ------------------------------------------------------------------------------------ | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | TEXT | The subtensor network to connect to. Default: finney. | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `-p`, `--wallet-path`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `-H`, `--hotkey`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey`, `--hotkey-ss58` | TEXT | Hotkey name or SS58 address of the hotkey | +| `--origin-netuid` | INTEGER | The netuid to transfer stake from. | +| `--dest-netuid` | INTEGER | The netuid to transfer stake to. | +| `--dest-ss58`, `--dest` | TEXT | The destination wallet name or SS58 address to transfer stake to. | +| `--amount` | FLOAT | The amount of stake to transfer. | +| `--stake-all`, `--all` | | Stake all. | +| `--period`, `-era` | INTEGER | Length (in blocks) for which the transaction should be valid. | +| `--prompt`, `--prompt`, `--no-prompt`, `--yes`, `--no_prompt`, `-y` | | Enable or disable interactive prompts. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli stake swap` + +Swap stake between different subnets while keeping the same coldkey-hotkey pair ownership. + +This command allows you to: + +- Move stake from one subnet to another subnet +- Keep the same coldkey ownership +- Keep the same hotkey ownership + +You can specify: + +- The origin subnet (--origin-netuid) +- The destination subnet (--dest-netuid) +- The amount to swap (--amount) + +If no arguments are provided, an interactive selection menu will be shown. + +**Example:** + +Swap 100 TAO from subnet 1 to subnet 2: + +``` +btcli stake swap --wallet-name default --wallet-hotkey default --origin-netuid 1 --dest-netuid 2 --amount 100 +``` + +**Usage**: + +```console +btcli stake swap [OPTIONS] +``` + +**Options**: + +| Option | Type | Description | +| ------------------------------------------------------------------------------------------ | ------- | ------------------------------------------------------------------------------------ | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | TEXT | The subtensor network to connect to. Default: finney. | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `-p`, `--wallet-path`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `-H`, `--hotkey`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey`, `--hotkey-ss58` | TEXT | Hotkey name or SS58 address of the hotkey | +| `--origin-netuid`, `-o` | INTEGER | The netuid to swap stake from. | +| `--dest-netuid`, `-d` | INTEGER | The netuid to swap stake to. | +| `--amount`, `-a` | FLOAT | The amount of stake to swap. | +| `--swap-all`, `--all` | | Swap all available stake. | +| `--period`, `-era` | INTEGER | Length (in blocks) for which the transaction should be valid. | +| `--prompt`, `--prompt`, `--no-prompt`, `--yes`, `--no_prompt`, `-y` | | Enable or disable interactive prompts. | +| `--wait-for-inclusion`/ `--no-wait-for-inclusion` | | If `True`, waits until the transaction is included in a block. | +| `--wait-for-finalization`/ `--no-wait-for-finalization` | | If `True`, waits until the transaction is finalized on the blockchain. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli stake claim` + +Set the root claim type for your coldkey. + +Root claim types control how staking emissions are handled on the ROOT network (subnet 0): + +**Claim Types:** + +- Swap: Future Root Alpha Emissions are swapped to TAO and added to root stake (default) +- Keep: Future Root Alpha Emissions are kept as Alpha tokens + +**USAGE:** + +```bash +btcli stake claim +btcli stake claim keep +btcli stake claim swap +``` + +With specific wallet: + +```bash +btcli stake claim swap --wallet-name my_wallet +``` + +**Usage:** + +```bash +btcli stake claim [OPTIONS] + +alias: set-claim +``` + +:::info claim type +If a claim type—`keep` or `swap`—is not provided, you'll be prompted to choose. [default: None] +::: + +**Parameters:** + +| Options | Type | Description | +| --------------------------------------------------------------------------- | ---- | ------------------------------------------------------------------------------------ | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `--wallet-path`, `-p`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `--hotkey`, `-H`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey` | TEXT | Hotkey of the wallet | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | | The subtensor network to connect to. Default: finney. | +| `--prompt/--no-prompt`, ` /--yes`, ` /--no_prompt`, ` /-y` | | Enable or disable interactive prompts. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli stake process-claim` + +A maximum of 5 netuids can be processed in one call. Manually claim accumulated root network emissions for your coldkey. + +:::info +The network will eventually process your pending emissions automatically. However, you can choose to manually claim your emissions with a small extrinsic fee. +::: + +**USAGE:** + +```bash +btcli stake process-claim +``` + +Claim from specific netuids: + +```bash +btcli stake process-claim --netuids 1,2,3 +``` + +Claim with specific wallet: + +```bash +btcli stake process-claim --netuids 1,2 --wallet-name my_wallet +``` + +**Usage:** + +```bash +btcli stake process-claim [OPTIONS] +``` + +**Parameters:** + +| Options | Type | Description | +| --------------------------------------------------------------------------- | ---- | ---------------------------------------------------------------------------------------------- | +| `--netuids`, `--netuid`, `-n` | TEXT | Set the netuid(s) to exclude. Separate multiple netuids with a comma, for example: `-n 0,1,2`. | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `--wallet-path`, `-p`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `--hotkey`, `-H`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey` | TEXT | Hotkey of the wallet | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | | The subtensor network to connect to. Default: finney. | +| `--prompt/--no-prompt`, ` /--yes`, ` /--no_prompt`, ` /-y` | | Enable or disable interactive prompts. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli stake child` + +**Usage**: + +```console +btcli stake child [OPTIONS] COMMAND [ARGS]... + +alias: children +``` + +**Options**: + +- `--help`: Show this message and exit. + +**Commands**: + +- `get`: Get all the child hotkeys on a specified subnet. +- `set`: Set child hotkeys on a specified subnet (or all). Overrides currently set children. +- `revoke`: Remove all children hotkeys on a specified subnet (or all). +- `take`: Get and set your child hotkey take on a specified subnet. + +#### `btcli stake child get` + +Get all the child hotkeys on a specified subnet. + +Users can specify the subnet and see the child hotkeys and the proportion that is given to them. This command is used to view the authority delegated to different hotkeys on the subnet. + +**Example:** + +``` +btcli stake child get --netuid 1 +``` + +``` +btcli stake child get --all-netuids +``` + +**Usage**: + +```console +btcli stake child get [OPTIONS] + +alias: children +``` + +**Options**: + +| Option | Type | Description | +| ------------------------------------------------------------------------------------------ | ------- | ------------------------------------------------------------------------------------ | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | TEXT | The subtensor network to connect to. Default: finney. | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `-p`, `--wallet-path`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `-H`, `--hotkey`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey`, `--hotkey-ss58` | TEXT | Hotkey name or SS58 address of the hotkey | +| `--netuid` | INTEGER | The netuid of the subnet. | +| `--all-netuids`, `--all`, `--allnetuids` | | When set, gets the child hotkeys from all the subnets. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +#### `btcli stake child set` + +Set child hotkeys on specified subnets. + +Users can specify the 'proportion' to delegate to child hotkeys (ss58 address). The sum of proportions cannot be greater than 1. + +This command is used to delegate authority to different hotkeys, securing their position and influence on the subnet. + +**Example:** + +``` +btcli stake child set -c 5FCL3gmjtQV4xxxxuEPEFQVhyyyyqYgNwX7drFLw7MSdBnxP -c 5Hp5dxxxxtGg7pu8dN2btyyyyVA1vELmM9dy8KQv3LxV8PA7 --hotkey default --netuid 1 -p 0.3 -p 0.7 +``` + +**Usage**: + +```console +btcli stake child set [OPTIONS] + +alias: children +``` + +**Options**: + +| Option | Type | Description | +| ------------------------------------------------------------------------------------------ | ------- | ------------------------------------------------------------------------------------------------ | +| `--children`, `-c` | TEXT | Enter child hotkeys (ss58) | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | TEXT | The subtensor network to connect to. Default: finney. | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `-p`, `--wallet-path`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `-H`, `--hotkey`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey`, `--hotkey-ss58` | TEXT | Hotkey name or SS58 address of the hotkey | +| `--netuid` | INTEGER | The netuid of the subnet in the network. | +| `--all-netuids`/`--no-all-netuids` | | Use all netuids. | +| `--proportions`, `--prop` | FLOAT | Enter the stake weight proportions for the child hotkeys (sum should be less than or equal to 1) | +| `--wait-for-inclusion`/ `--no-wait-for-inclusion` | | If `True`, waits until the transaction is included in a block. | +| `--wait-for-finalization`/ `--no-wait-for-finalization` | | If `True`, waits until the transaction is finalized on the blockchain. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--prompt`, `--prompt`, `--no-prompt`, `--yes`, `--no_prompt`, `-y` | | Enable or disable interactive prompts. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +#### `btcli stake child revoke` + +Remove all children hotkeys on a specified subnet. + +This command is used to remove delegated authority from all child hotkeys, removing their position and influence on the subnet. + +**Example:** + +``` +btcli stake child revoke --hotkey <parent_hotkey> --netuid 1 +``` + +**Usage**: + +```console +btcli stake child revoke [OPTIONS] + +alias: children +``` + +**Options**: + +| Option | Type | Description | +| ------------------------------------------------------------------------------------------ | ------- | ------------------------------------------------------------------------------------ | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | TEXT | The subtensor network to connect to. Default: finney. | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `-p`, `--wallet-path`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `-H`, `--hotkey`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey`, `--hotkey-ss58` | TEXT | Hotkey name or SS58 address of the hotkey | +| `--netuid` | INTEGER | The netuid of the subnet in the network. | +| `--all-netuids`, `--all`, `--allnetuids` | | When this flag is used it sets child hotkeys on all the subnets. | +| `--wait-for-inclusion`/ `--no-wait-for-inclusion` | | If `True`, waits until the transaction is included in a block. | +| `--wait-for-finalization`/ `--no-wait-for-finalization` | | If `True`, waits until the transaction is finalized on the blockchain. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--prompt`, `--prompt`, `--no-prompt`, `--yes`, `--no_prompt`, `-y` | | Enable or disable interactive prompts. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +#### `btcli stake child take` + +Get and set your child hotkey take on a specified subnet. + +The child hotkey take must be between 0 - 18%. + +**Example:** + +To get the current take value, do not use the '--take' option: + +``` +btcli stake child take --child-hotkey-ss58 --netuid 1 +``` + +To set a new take value, use the '--take' option: + +``` +btcli stake child take --child-hotkey-ss58 --take 0.12 --netuid 1 +``` + +**Usage**: + +```console +btcli stake child take [OPTIONS] + +alias: children +``` + +**Options**: + +| Option | Type | Description | +| ------------------------------------------------------------------------------------------ | ------- | -------------------------------------------------------------------------------------------------------------- | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | TEXT | The subtensor network to connect to. Default: finney. | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `-p`, `--wallet-path`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `-H`, `--hotkey`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey`, `--hotkey-ss58` | TEXT | Hotkey name or SS58 address of the hotkey | +| `--child-hotkey-ss58` | TEXT | The hotkey SS58 to designate as child (not specifying will use the provided wallet's hotkey) | +| `--netuid` | INTEGER | The netuid of the subnet in the network. | +| `--all-netuids`, `--all`, `--allnetuids` | | When this flag is used it sets child hotkeys on all the subnets. | +| `--take` | FLOAT | Use to set the take value for your child hotkey. When not used, the command will fetch the current take value. | +| `--wait-for-inclusion`/ `--no-wait-for-inclusion` | | If `True`, waits until the transaction is included in a block. | +| `--wait-for-finalization`/ `--no-wait-for-finalization` | | If `True`, waits until the transaction is finalized on the blockchain. | +| `--prompt`, `--prompt`, `--no-prompt`, `--yes`, `--no_prompt`, `-y` | | Enable or disable interactive prompts. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +## `btcli sudo` + +**Usage**: + +```console +btcli sudo [OPTIONS] COMMAND [ARGS]... + +alias: su +``` + +**Options**: + +- `--help`: Show this message and exit. + +**Commands**: + +- `set`: Used to set hyperparameters for a specific subnet. +- `get`: Shows a list of the hyperparameters for the specified subnet. +- `senate`: Shows the Senate members of the Bittensor's governance protocol. +- `proposals`: View active proposals for the senate in the Bittensor's governance protocol. +- `senate-vote`: Cast a vote on an active proposal in Bittensor's governance protocol. +- `set-take`: Allows users to change their delegate take percentage. +- `get-take`: Allows users to check their delegate take percentage. +- `trim`: Allows subnet owners to trim UIDs on their subnet to a specified max number of netuids. + +### `btcli sudo set` + +Used to set hyperparameters for a specific subnet. + +This command allows subnet owners to modify hyperparameters such as its tempo, emission rates, and other hyperparameters. + +**Example:** + +``` +btcli sudo set --netuid 1 --param tempo --value 400 +``` + +**Usage**: + +```console +btcli sudo set [OPTIONS] +``` + +**Options**: + +| Option | Type | Description | +| ------------------------------------------------------------------------------------------ | ------- | ------------------------------------------------------------------------------------ | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | TEXT | The subtensor network to connect to. Default: finney. | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `-p`, `--wallet-path`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `-H`, `--hotkey`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey`, `--hotkey-ss58` | TEXT | Hotkey name or SS58 address of the hotkey | +| `--netuid` | INTEGER | The netuid of the subnet in the network. | +| `--param`, `--parameter` | TEXT | The subnet hyperparameter to set | +| `--value` | TEXT | Value to set the hyperparameter to. | +| `--prompt`, `--prompt`, `--no-prompt`, `--yes`, `--no_prompt`, `-y` | | Enable or disable interactive prompts. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli sudo get` + +Shows a list of the hyperparameters for the specified subnet. + +**Example:** + +``` +btcli sudo get --netuid 1 +``` + +**Usage**: + +```console +btcli sudo get [OPTIONS] +``` + +**Options**: + +| Option | Type | Description | +| --------------------------------------------------------------------------- | ------- | ----------------------------------------------------- | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | TEXT | The subtensor network to connect to. Default: finney. | +| `--netuid` | INTEGER | The netuid of the subnet in the network. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli sudo senate` + +Shows the Senate members of the Bittensor's governance protocol. + +This command lists the delegates involved in the decision-making process of the Bittensor network, showing their names and wallet addresses. This information is crucial for understanding who holds governance roles within the network. + +**Example:** + +``` +btcli sudo senate +``` + +**Usage**: + +```console +btcli sudo senate [OPTIONS] +``` + +**Options**: + +| Option | Type | Description | +| --------------------------------------------------------------------------- | ---- | ----------------------------------------------------- | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | TEXT | The subtensor network to connect to. Default: finney. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli sudo proposals` + +View active proposals for the senate in the Bittensor's governance protocol. + +This command displays the details of ongoing proposals, including proposal hashes, votes, thresholds, and proposal data. + +**Example:** + +``` +btcli sudo proposals +``` + +**Usage**: + +```console +btcli sudo proposals [OPTIONS] +``` + +**Options**: + +| Option | Type | Description | +| --------------------------------------------------------------------------- | ---- | ----------------------------------------------------- | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | TEXT | The subtensor network to connect to. Default: finney. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli sudo senate-vote` + +Cast a vote on an active proposal in Bittensor's governance protocol. + +This command is used by Senate members to vote on various proposals that shape the network's future. Use `btcli sudo proposals` to see the active proposals and their hashes. + +**Usage:** +The user must specify the hash of the proposal they want to vote on. The command then allows the Senate member to cast a 'Yes' or 'No' vote, contributing to the decision-making process on the proposal. This command is crucial for Senate members to exercise their voting rights on key proposals. It plays a vital role in the governance and evolution of the Bittensor network. + +**Example:** + +``` +btcli sudo senate-vote --proposal <proposal_hash> +``` + +**Usage**: + +```console +btcli sudo senate-vote [OPTIONS] + +alias: senate_vote +``` + +**Options**: + +| Option | Type | Description | +| ------------------------------------------------------------------------------------------ | ---- | ------------------------------------------------------------------------------------ | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | TEXT | The subtensor network to connect to. Default: finney. | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `-p`, `--wallet-path`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `-H`, `--hotkey`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey`, `--hotkey-ss58` | TEXT | Hotkey name or SS58 address of the hotkey | +| `--proposal`, `--proposal-hash` | TEXT | The hash of the proposal to vote on. | +| `--prompt`, `--prompt`, `--no-prompt`, `--yes`, `--no_prompt`, `-y` | | Enable or disable interactive prompts. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--vote-aye/--vote-nay` | | The vote cast on the proposal | +| `--help` | | Show this message and exit. | + +### `btcli sudo set-take` + +Allows users to change their delegate take percentage. + +This command can be used to update the delegate takes. To run the command, the user must have a configured wallet with both hotkey and coldkey. +The command makes sure the new take value is within 0-18% range. + +**Example:** + +``` +btcli sudo set-take --wallet-name my_wallet --wallet-hotkey my_hotkey +``` + +**Usage**: + +```console +btcli sudo set-take [OPTIONS] + +alias: set_take +``` + +**Options**: + +| Option | Type | Description | +| ------------------------------------------------------------------------------------------ | ----- | ------------------------------------------------------------------------------------ | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | TEXT | The subtensor network to connect to. Default: finney. | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `-p`, `--wallet-path`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `-H`, `--hotkey`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey`, `--hotkey-ss58` | TEXT | Hotkey name or SS58 address of the hotkey | +| `--take` | FLOAT | The new take value. | +| `--prompt`, `--prompt`, `--no-prompt`, `--yes`, `--no_prompt`, `-y` | | Enable or disable interactive prompts. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli sudo get-take` + +Allows users to check their delegate take percentage. + +This command can be used to fetch the delegate take of your hotkey. + +**Example:** + +``` +btcli sudo get-take --wallet-name my_wallet --wallet-hotkey my_hotkey +``` + +**Usage**: + +```console +btcli sudo get-take [OPTIONS] + +alias: get_take +``` + +**Options**: + +| Option | Type | Description | +| ------------------------------------------------------------------------------------------ | ---- | ------------------------------------------------------------------------------------ | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | TEXT | The subtensor network to connect to. Default: finney. | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `-p`, `--wallet-path`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `-H`, `--hotkey`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey`, `--hotkey-ss58` | TEXT | Hotkey name or SS58 address of the hotkey | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli sudo trim` + +Allows subnet owners to trim UIDs on their subnet to a specified max number of netuids. + +**EXAMPLE** + +```bash +btcli sudo trim --netuid 95 --wallet-name my_wallet --wallet-hotkey my_hotkey --max 64 +``` + +**Usage:** + +```bash +btcli sudo trim [OPTIONS] +``` + +**Parameters:** + +| Options | Type | Description | +| --------------------------------------------------------------------------- | ------- | ------------------------------------------------------------------------------------ | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | | The subtensor network to connect to. Default: finney. | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `--wallet-path`, `-p`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `--hotkey`, `-H`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey` | TEXT | Hotkey of the wallet | +| `--netuid` | INTEGER | The netuid of the subnet in the network, (e.g. 1). | +| `--max`, `--max-uids` | INTEGER | The maximum number of allowed uids to which to trim | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--prompt/--no-prompt`, ` /--yes`, ` /--no_prompt`, ` /-y` | | Enable or disable interactive prompts. | +| `--help` | | Show this message and exit. | + +## `btcli subnets` + +**Usage**: + +```console +btcli subnets [OPTIONS] COMMAND [ARGS]... + +aliases: subnet, s +``` + +**Options**: + +- `--help`: Show this message and exit. + +**Commands**: + +- `mechanisms`: Subnet mechanism commands, alias: `mech` +- `hyperparameters`: Shows a list of the hyperparameters for the specified subnet. +- `list`: List all subnets and their detailed information. +- `burn-cost`: Shows the required amount of TAO to be recycled for creating a new subnet, i.e., cost of registering a new subnet. +- `create`: Registers a new subnet on the network. +- `pow-register`: Register a neuron (a subnet validator or a subnet miner) using Proof of Work (POW). +- `register`: Register a neuron (a subnet validator or a subnet miner) in the specified subnet by recycling some TAO. +- `metagraph`: Displays detailed information about a... +- `show`: Displays detailed information about a subnet including participants and their state. +- `price`: Shows the historical price of a subnet for the past 4 hours. +- `check-start`: Checks if a subnet's emission schedule can be started. +- `set-identity`: Get the identity information for a subnet. +- `get-identity`: Set or update the identity information for a subnet. +- `set-symbol`: Allows the user to update their subnet symbol to a different available symbol. The full list of available symbols can be found here: https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/subnets/symbols.rs#L8 + +### `btcli subnet mechanisms` + +**Usage**: + +```console +btcli s mechanisms [OPTIONS] COMMAND [ARGS]... + +alias: mech +``` + +**Options**: + +- `--help`: Show this message and exit. + +**Commands**: + +- `count`: Display how many mechanisms are registered under a subnet. +- `set`: Configure how many mechanisms are registered for a subnet. +- `emissions`: Display the current emission split across mechanisms for a subnet. +- `split-emissions`: Update the emission split across mechanisms for a subnet. + +#### `btcli subnet mechanisms count` + +Display how many mechanisms are registered under a subnet. Includes the base mechanism (index 0). Helpful for verifying the active mechanism counts in a subnet. + +```bash +btcli subnet mechanisms count --netuid 12 +``` + +**Usage:** + +```bash +btcli subnet mechanisms count [OPTIONS] +``` + +**Parameters:** + +| Options | Type | Description | +| --------------------------------------------------------------------------- | ------- | ----------------------------------------------------- | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | | The subtensor network to connect to. Default: finney. | +| `--netuid` | INTEGER | The netuid of the subnet in the network, (e.g. 1). | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +#### `btcli subnet mechanisms set` + +Configure how many mechanisms are registered for a subnet. + +The base mechanism at index 0 and new ones are incremented by 1. + +Common Examples: + +1. Prompt for the new mechanism count interactively: + +```bash +btcli subnet mechanisms set --netuid 12 +``` + +2. Set the count to 2 using a specific wallet: + +```bash +btcli subnet mechanisms set --netuid 12 --count 2 --wallet.name my_wallet --wallet.hotkey admin +``` + +**Usage:** + +```bash +btcli subnet mechanisms set [OPTIONS] +``` + +**Parameters:** + +| Options | Type | Description | +| --------------------------------------------------------------------------- | ------- | ------------------------------------------------------------------------------------ | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | | The subtensor network to connect to. Default: finney. | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `--wallet-path`, `-p`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `--hotkey`, `-H`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey` | TEXT | Hotkey of the wallet | +| `--netuid` | INTEGER | The netuid of the subnet in the network, (e.g. 1). | +| `--count`, `--mech-count` | INTEGER | Number of mechanisms to set for the subnet. | +| `--wait_for_inclusion` | | If `True`, waits until the transaction is included in a block. | +| `--wait_for_finalization` | | If `True`, waits until the transaction is finalized on the blockchain. | +| `--prompt/--no-prompt`, ` /--yes`, ` /--no_prompt`, ` /-y` | | Enable or disable interactive prompts. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +#### `btcli subnet mechanisms emissions` + +Display the current emission split across mechanisms for a subnet. Shows raw `U16` weights alongside percentage shares for each mechanism. Useful for verifying the emission split in a subnet. + +```bash +btcli subnet mechanisms emissions --netuid 12 +``` + +**Usage:** + +```bash +btcli subnet mechanisms emissions [OPTIONS] +``` + +**Parameters:** + +| Options | Type | Description | +| --------------------------------------------------------------------------- | ------- | ----------------------------------------------------- | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | | The subtensor network to connect to. Default: finney. | +| `--netuid` | INTEGER | The netuid of the subnet in the network, (e.g. 1). | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +#### `btcli subnet mechanisms split-emissions` + +Update the emission split across mechanisms for a subnet. + +Accepts comma-separated weights (`U16` values or percentages). When `--split` is omitted and prompts remain enabled, you will be guided interactively and the CLI automatically normalises the weights. + +Common Examples: + +1. Configure the split interactively: + +```bash +btcli subnet mechanisms split-emissions --netuid 12 +``` + +2. Apply a 70/30 distribution in one command: + +```bash +btcli subnet mechanisms split-emissions --netuid 12 --split 70,30 --wallet.name my_wallet --wallet.hotkey admin +``` + +**Usage:** + +```bash +btcli subnet mechanisms split-emissions [OPTIONS] + +alias: emissions-split +``` + +**Parameters:** + +| Options | Type | Description | +| --------------------------------------------------------------------------- | ------- | ------------------------------------------------------------------------------------ | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | | The subtensor network to connect to. Default: finney. | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `--wallet-path`, `-p`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `--hotkey`, `-H`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey` | TEXT | Hotkey of the wallet | +| `--netuid` | INTEGER | The netuid of the subnet in the network, (e.g. 1). | +| `--split` | TEXT | Comma-separated relative weights for each mechanism (normalised automatically). | +| `--wait_for_inclusion` | | If `True`, waits until the transaction is included in a block. | +| `--wait_for_finalization` | | If `True`, waits until the transaction is finalized on the blockchain. | +| `--prompt/--no-prompt`, ` /--yes`, ` /--no_prompt`, ` /-y` | | Enable or disable interactive prompts. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli subnets hyperparameters` + +Shows a list of the hyperparameters for the specified subnet. + +**Example:** + +``` +btcli sudo get --netuid 1 +``` + +**Usage**: + +```console +btcli subnets hyperparameters [OPTIONS] +``` + +**Options**: + +| Option | Type | Description | +| --------------------------------------------------------------------------- | ------- | ----------------------------------------------------- | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | TEXT | The subtensor network to connect to. Default: finney. | +| `--netuid` | INTEGER | The netuid of the subnet in the network, (e.g. 1). | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli subnets list` + +List all subnets and their detailed information. + +Common Examples: + +1. List all subnets: + +``` +btcli subnets list +``` + +2. List all subnets in live mode: + +``` +btcli subnets list --live +``` + +**Output Columns:** + +- **Netuid** - Subnet identifier number +- **Name** - Subnet name with currency symbol (τ/α/β etc) +- **Price** (τ_in/α_in) - Exchange rate (TAO per alpha token) +- **Market Cap** (α \* Price) - Total value in TAO (alpha tokens × price) +- **Emission** (τ) - TAO rewards emitted per block to subnet +- **P** (τ_in, α_in) - Pool reserves (Tao reserves, alpha reserves) in liquidity pool +- **Stake** (α_out) - Total staked alpha tokens across all hotkeys (alpha outstanding) +- **Supply** (α) - Circulating alpha token supply +- **Tempo** (k/n) - Block interval for subnet updates + +**Example:** + +``` +btcli subnets list +``` + +**Usage**: + +```console +btcli subnets list [OPTIONS] +``` + +**Options**: + +| Option | Type | Description | +| --------------------------------------------------------------------------- | ---- | ----------------------------------------------------- | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | TEXT | The subtensor network to connect to. Default: finney. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--live` | | Display live view of the table | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli subnets burn-cost` + +Shows the required amount of TAO to be recycled for creating a new subnet, i.e., cost of registering a new subnet. + +The current implementation anneals the cost of creating a subnet over a period of two days. If the displayed cost is unappealing to you, check back in a day or two to see if it has decreased to a more affordable level. + +**Example:** + +``` +btcli subnets burn_cost +``` + +**Usage**: + +```console +btcli subnets burn-cost [OPTIONS] + +alias: burn_cost +``` + +**Options**: + +| Option | Type | Description | +| --------------------------------------------------------------------------- | ---- | ----------------------------------------------------- | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | TEXT | The subtensor network to connect to. Default: finney. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli subnets create` + +Creates a new subnet on the network. + +This command allows you to create a new subnet and set the subnet's identity. +You also have the option to set your own identity after the registration is complete. + +Common Examples: + +1. Interactive subnet creation: + +``` +btcli subnets create +``` + +2. Create with GitHub repo and contact email: + +``` +btcli subnets create --subnet-name MySubnet --github-repo https://github.com/myorg/mysubnet --subnet-contact team@mysubnet.net +``` + +**Usage**: + +```console +btcli subnets create [OPTIONS] +``` + +**Options**: + +| Option | Type | Description | +| --------------------------------------------------------------------------- | ---- | ------------------------------------------------------------------------------------ | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `-p`, `--wallet-path`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `-H`, `--hotkey`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey` | TEXT | Hotkey of the wallet | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | TEXT | The subtensor network to connect to. Default: finney. | +| `--subnet-name` | TEXT | Name of the subnet. | +| `--github-repo`, `repo` | TEXT | The GitHub repository URL. | +| `--subnet-contact`, `--contact`, `--email` | TEXT | Contact email for subnet. | +| `--subnet-url`, `--url` | TEXT | The web URL for the subnet. | +| `--discord-handle`, `discord` | TEXT | The Discord handle for the subnet. | +| `--description` | TEXT | The description for the subnet. | +| `--additional-info` | TEXT | Additional details for the subnet. | +| `--prompt`, `--prompt`, `--no-prompt`, `--yes`, `--no_prompt`, `-y` | | Enable or disable interactive prompts. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli subnets pow-register` + +Register a neuron (a subnet validator or a subnet miner) using Proof of Work (POW). + +This method is an alternative registration process that uses computational work for securing a neuron's place on the subnet. + +The command starts by verifying the existence of the specified subnet. If the subnet does not exist, it terminates with an error message. On successful verification, the POW registration process is initiated, which requires solving computational puzzles. + +The command also supports additional wallet and subtensor arguments, enabling further customization of the registration process. + +**Example:** + +``` +btcli pow_register --netuid 1 --num_processes 4 --cuda +``` + +Note: This command is suitable for users with adequate computational resources to participate in POW registration. +It requires a sound understanding of the network's operations and POW mechanics. Users should ensure their systems meet the necessary hardware and software requirements, particularly when opting for CUDA-based GPU acceleration. + +This command may be disabled by the subnet owner. For example, on netuid 1 this is permanently disabled. + +**Usage**: + +```console +btcli subnets pow-register [OPTIONS] + +alias pow_register +``` + +**Options**: + +| Option | Type | Description | +| --------------------------------------------------------------------------- | ------- | -------------------------------------------------------------------------------------- | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `-p`, `--wallet-path`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `-H`, `--hotkey`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey` | TEXT | Hotkey of the wallet | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | TEXT | The subtensor network to connect to. Default: finney. | +| `--netuid` | INTEGER | The netuid of the subnet in the network, (e.g. 1). | +| `--processors` | INTEGER | Number of processors to use for POW registration. | +| `-u`, `--update-interval` | INTEGER | The number of nonces to process before checking for the next block during registration | +| `--output-in-place`/`--no-output-in-place` | | Whether to output the registration statistics in-place. | +| `--verbose`, `-v` | | Enable verbose output. | +| `--use-cuda`, `--cuda`/`--no-use-cuda`, `--no-cuda` | | Set the flag to use CUDA for POW registration. | +| `--dev-id`, `-d` | INTEGER | Set the CUDA device id(s), in the order of the device speed (0 is the fastest). | +| `--threads-per-block`, `-tpb` | INTEGER | Set the number of threads per block for CUDA. | +| `--prompt`, `--prompt`, `--no-prompt`, `--yes`, `--no_prompt`, `-y` | | Enable or disable interactive prompts. | +| `--help` | | Show this message and exit. | + +### `btcli subnets register` + +Register a neuron (a subnet validator or a subnet miner) in the specified subnet by recycling some TAO. + +Before registering, the command checks if the specified subnet exists and whether the user's balance is sufficient to cover the registration cost. + +The registration cost is determined by the current recycle amount for the specified subnet. If the balance is insufficient or the subnet does not exist, the command will exit with an error message. + +**Example:** + +``` +btcli subnets register --netuid 1 +``` + +**Usage**: + +```console +btcli subnets register [OPTIONS] +``` + +**Options**: + +| Option | Type | Description | +| --------------------------------------------------------------------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | TEXT | The subtensor network to connect to. Default: finney. | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `-p`, `--wallet-path`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `-H`, `--hotkey`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey` | TEXT | Hotkey of the wallet | +| `--netuid`, | INTEGER | The netuid of the subnet in the network, (e.g. 1). | +| `--period`, `-era` | INTEGER | Length (in blocks) for which the transaction should be valid. Note that it is possible that if you use an era for this transaction that you may pay a different fee to register than the one stated. | +| `--prompt`, `--prompt`, `--no-prompt`, `--yes`, `--no_prompt`, `-y` | | Enable or disable interactive prompts. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli subnets metagraph` + +Inspect the metagraph for a subnet. + +Shows miners, validators, stake, ranks, emissions, and other runtime stats. When multiple mechanisms exist, the CLI prompts for one unless `--mechid` is supplied. Netuid `0` always uses mechid `0`. + +Common Examples: + +1. Inspect the mechanism with prompts for selection: + +```bash +btcli subnets metagraph --netuid 12 +``` + +2. Pick mechanism 1 explicitly: + +```bash +btcli subnets metagraph --netuid 12 --mechid 1 +``` + +**Usage**: + +```console +btcli subnets metagraph [OPTIONS] +``` + +**Options**: + +| Option | Type | Description | +| --------------------------------------------------------------------------- | ------- | ----------------------------------------------------- | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | TEXT | The subtensor network to connect to. Default: finney. | +| `--netuid`, | INTEGER | The netuid of the subnet in the network, (e.g. 1). | +| `--mechid`, `--mech-id`, `--mech_id`, `--mechanism_id`, `--mechanism-id` | INTEGER | Mechanism ID within the subnet (defaults to 0). | +| `--sort` | | Sort the subnets by uid. | +| `--quiet` | | Display only critical information on the console. | +| `--prompt`, `--prompt`, `--no-prompt`, `--yes`, `--no_prompt`, `-y` | | Enable or disable interactive prompts. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli subnets show` + +Inspect the metagraph for a subnet. + +Shows miners, validators, stake, ranks, emissions, and other runtime stats. When multiple mechanisms exist, the CLI prompts for one unless `--mechid` is supplied. Netuid `0` always uses mechid `0`. + +Common Examples: + +1. Inspect the mechanism with prompts for selection: + +```bash +btcli subnets show --netuid 12 +``` + +2. Pick mechanism 1 explicitly: + +```bash +btcli subnets show --netuid 12 --mechid 1 +``` + +**Usage**: + +```console +btcli subnets show [OPTIONS] +``` + +**Options**: + +| Option | Type | Description | +| --------------------------------------------------------------------------- | ------- | ----------------------------------------------------- | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | TEXT | The subtensor network to connect to. Default: finney. | +| `--netuid`, | INTEGER | The netuid of the subnet in the network, (e.g. 1). | +| `--mechid`, `--mech-id`, `--mech_id`, `--mechanism_id`, `--mechanism-id` | INTEGER | Mechanism ID within the subnet (defaults to 0). | +| `--sort` | | Sort the subnets by uid. | +| `--quiet` | | Display only critical information on the console. | +| `--prompt`, `--prompt`, `--no-prompt`, `--yes`, `--no_prompt`, `-y` | | Enable or disable interactive prompts. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli subnets price` + +Shows the historical price of a subnet for the past 4 hours. + +This command displays the historical price of a subnet for the past 4 hours. + +- If the `--all` flag is used, the command will display the price for all subnets in html format. +- If the `--html` flag is used, the command will display the price in an HTML chart. +- If the `--log-scale` flag is used, the command will display the price in log scale. +- If no html flag is used, the command will display the price in the cli. + +**Example:** + +```bash +btcli subnets price --netuid 1 +``` + +```bash +btcli subnets price --netuid 1 --html --log +``` + +```bash +btcli subnets price --all --html +``` + +```bash +btcli subnets price --netuids 1,2,3,4 --html +``` + +**Usage**: + +```bash +btcli subnets price [OPTIONS] +``` + +**Options**: + +| Option | Type | Description | +| --------------------------------------------------------------------------- | ------- | ----------------------------------------------------------------------------------------------- | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | TEXT | The subtensor network to connect to. Default: finney. | +| `--netuids`, `--netuid`, `-n` | TEXT | Netuids to show the price for. Separate multiple netuids with a comma, for example: `-n 0,1,2`. | +| `--interval-hours`, `--interval` | INTEGER | The number of hours to show the historical price for. | +| `--all-netuids`, `--all` | | Show the price for all subnets. | +| `--log-scale`, `--log` | | Show the price in log scale. | +| `--current` | | Show only the current data, and no historical data. | +| `--html` | | Display the table as HTML in the browser. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli subnets check-start` + +Checks if a subnet's emission schedule can be started. This command verifies if a subnet's emission schedule can be started based on the subnet's registration block. + +**Example:** + +```bash +btcli subnets check_start --netuid 1 +``` + +**Usage** + +```bash +btcli subnets check-start [OPTIONS] + +alias check_start +``` + +**Options**: + +| Option | Type | Description | +| --------------------------------------------------------------------------- | ------- | ----------------------------------------------------- | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | TEXT | The subtensor network to connect to. Default: finney. | +| `--netuid` | INTEGER | The netuid of the subnet in the network, (e.g. 1). | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--help` | | Show this message and exit. | + +### `btcli subnets set-identity` + +Set or update the identity information for a subnet. This command allows subnet owners to set or update identity information like name, GitHub repo, contact details, etc. + +**Examples:** + +1. Interactive subnet identity setting: + +```bash +btcli subnets set-identity --netuid 1 +``` + +2. Set subnet identity with specific values: + +```bash +btcli subnets set-identity --netuid 1 --subnet-name MySubnet --github-repo https://github.com/myorg/mysubnet --subnet-contact team@mysubnet.net +``` + +**Usage**: + +```sh +btcli subnets set-identity [OPTIONS] + +alias: set_identity +``` + +**Options**: + +| Option | Type | Description | +| --------------------------------------------------------------------------- | ------- | ------------------------------------------------------------------------------------ | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `-p`, `--wallet-path`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `-H`, `--hotkey`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey` | TEXT | Hotkey of the wallet | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | TEXT | The subtensor network to connect to. Default: finney. | +| `--netuid` | INTEGER | The netuid of the subnet in the network, (e.g. 1). | +| `--subnet-name`, `--sn-name` | TEXT | Name of the subnet | +| `--github-repo`, `repo` | TEXT | The GitHub repository URL. | +| `--subnet-contact`, `--contact`, `--email` | TEXT | Contact email for subnet. | +| `--subnet-url`, `--url` | TEXT | The web URL for the subnet. | +| `--discord-handle`, `discord` | TEXT | The Discord handle for the subnet. | +| `--description` | TEXT | The description for the subnet. | +| `--additional-info` | TEXT | Additional details for the subnet. | +| `--prompt`, `--prompt`, `--no-prompt`, `--yes`, `--no_prompt`, `-y` | | Enable or disable interactive prompts. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli subnets get-identity` + +Get the identity information for a subnet. This command displays the identity information of a subnet including name, GitHub repo, contact details, etc. + +**Examples:** + +```sh +btcli subnets get-identity --netuid 1 +``` + +**Usage**: + +```sh +btcli subnets get-identity [OPTIONS] + +alias: get_identity +``` + +**Options**: + +| Option | Type | Description | +| --------------------------------------------------------------------------- | ------- | ----------------------------------------------------- | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | TEXT | The subtensor network to connect to. Default: finney. | +| `--netuid` | INTEGER | The netuid of the subnet in the network, (e.g. 1). | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli subnets set-symbol` + +Allows the user to update their subnet symbol to a different available symbol. The full list of available symbols can be found here: +https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/subnets/symbols.rs#L8 + +**EXAMPLE** + +```bash +btcli subnets set-symbol --netuid 1 シ +``` + +:::info +JSON OUTPUT: +If --json-output is used, the output will be in the following schema: `{success: bool, message: str}` +::: + +**Usage:** + +```bash +btcli subnets set-symbol [OPTIONS] +``` + +**Parameters:** + +| Options | Type | Description | +| --------------------------------------------------------------------------- | ------- | ------------------------------------------------------------------------------------ | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `--wallet-path`, `-p`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `--hotkey`, `-H`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey` | TEXT | Hotkey of the wallet | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | | The subtensor network to connect to. Default: finney. | +| `--netuid` | INTEGER | The netuid of the subnet in the network, (e.g. 1). | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--prompt/--no-prompt`, ` /--yes`, ` /--no_prompt`, ` /-y` | | Enable or disable interactive prompts. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--help` | | Show this message and exit. | + +## `btcli weights` + +**Usage**: + +```console +btcli weights [OPTIONS] COMMAND [ARGS]... + +aliases: wt, weight +``` + +**Options**: + +- `--help`: Show this message and exit. + +**Commands**: + +- `reveal`: Reveal weights for a specific subnet. +- `commit`: Commit weights for specific subnet. + +### `btcli weights reveal` + +Reveal weights for a specific subnet. + +You must specify the netuid, the UIDs you are interested in, and weights you wish to reveal. + +**Example:** + +``` +btcli wt reveal --netuid 1 --uids 1,2,3,4 --weights 0.1,0.2,0.3,0.4 --salt 163,241,217,11,161,142,147,189 +``` + +**Usage**: + +```console +btcli weights reveal [OPTIONS] +``` + +**Options**: + +| Option | Type | Description | +| --------------------------------------------------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------- | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `-p`, `--wallet-path`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `-H`, `--hotkey`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey` | TEXT | Hotkey of the wallet | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | TEXT | The subtensor network to connect to. Default: finney. | +| `--netuid` | INTEGER | The netuid of the subnet in the network, (e.g. 1). | +| `--uids`, `-u` | TEXT | Corresponding UIDs for the specified netuid, e.g. -u 1,2,3 .. | +| `--weights`, `-w` | TEXT | Weights for the specified UIDs, e.g. `-w 0.2,0.4,0.1 ...` Must correspond to the order of the specified UIDs. | +| `--salt`, `-s` | TEXT | Corresponding salt for the hash function, e.g. -s 163,241,217 ... | +| `--prompt`, `--prompt`, `--no-prompt`, `--yes`, `--no_prompt`, `-y` | | Enable or disable interactive prompts. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli weights commit` + +Commit weights for specific subnet. + +Use this command to commit weights for a specific subnet. You must specify the netuid, the UIDs you are interested in, and the weights you wish to commit. + +**Example:** + +``` +btcli wt commit --netuid 1 --uids 1,2,3,4 --w 0.1,0.2,0.3 +``` + +Note: This command is used to commit weights for a specific subnet and requires the user to have the necessary +permissions. + +**Usage**: + +```console +btcli weights commit [OPTIONS] +``` + +**Options**: + +| Option | Type | Description | +| --------------------------------------------------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------- | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `-p`, `--wallet-path`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `-H`, `--hotkey`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey` | TEXT | Hotkey of the wallet | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | TEXT | The subtensor network to connect to. Default: finney. | +| `--netuid` | INTEGER | The netuid of the subnet in the network, (e.g. 1). | +| `--uids`, `-u` | TEXT | Corresponding UIDs for the specified netuid, e.g. -u 1,2,3 .. | +| `--weights`, `-w` | TEXT | Weights for the specified UIDs, e.g. `-w 0.2,0.4,0.1 ...` Must correspond to the order of the specified UIDs. | +| `--salt`, `-s` | TEXT | Corresponding salt for the hash function, e.g. -s 163,241,217 ... | +| `--prompt`, `--prompt`, `--no-prompt`, `--yes`, `--no_prompt`, `-y` | | Enable or disable interactive prompts. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +## `btcli crowd` + +**Usage:** + +```sh +btcli crowdloan [OPTIONS] COMMAND [ARGS]... + +alias: cr, crowdloan +``` + +**Options:** + +`--help`: Show this message and exit. + +**Commands:** + +- `create`: Start a new crowdloan campaign for fundraising or subnet leasing. +- `contribute` : Contribute TAO to an active crowdloan. +- `withdraw` : Withdraw contributions from a non-finalized crowdloan. +- `finalize` Finalize a successful crowdloan that has reached its cap. +- `update` : Update one mutable field on a non-finalized crowdloan. +- `refund`: Refund contributors of a non-finalized crowdloan. +- `dissolve`: Dissolve a crowdloan after all contributors have been refunded. +- `list`: List crowdloans together with their funding progress and key metadata. +- `info`: Display detailed information about a specific crowdloan. + +### `btcli crowd create` + +Start a new crowdloan campaign for fundraising or subnet leasing. + +Create a crowdloan that can either: + +1. Raise funds for a specific address (general fundraising) +2. Create a new leased subnet where contributors receive emissions + +**EXAMPLES** + +General fundraising: + +```bash +btcli crowd create --deposit 10 --cap 1000 --target-address 5D... +``` + +Subnet leasing with 30% emissions for contributors: + +```bash +btcli crowd create --subnet-lease --emissions-share 30 +``` + +Subnet lease ending at block 500000: + +```bash +btcli crowd create --subnet-lease --emissions-share 25 --lease-end-block 500000 +``` + +**Usage:** + +```bash +btcli crowd create [OPTIONS] +``` + +**Parameters:** + +| Options | Type | Description | +| --------------------------------------------------------------------------- | ------- | ------------------------------------------------------------------------------------ | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | | The subtensor network to connect to. Default: finney. | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `--wallet-path`, `-p`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `--hotkey`, `-H`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey` | TEXT | Hotkey of the wallet | +| `--deposit` | FLOAT | Initial deposit in TAO to secure the crowdloan. | +| `--min-contribution`, `--min_contribution` | FLOAT | Minimum contribution amount in TAO. | +| `--cap` | INTEGER | Maximum amount in TAO the crowdloan will raise. | +| `--duration` | INTEGER | Crowdloan duration in blocks. | +| `--target-address`, `--target` | TEXT | Optional target SS58 address to receive the raised funds (for fundraising type). | +| `--subnet-lease/--fundraising` | | Create a subnet leasing crowdloan (True) or general fundraising (False). | +| `--emissions-share`, `--emissions` | INTEGER | Percentage of emissions for contributors (0-100) for subnet leasing. | +| `--lease-end-block`, `--lease-end` | INTEGER | Block number when subnet lease ends (omit for perpetual lease). | +| `--prompt/--no-prompt`, ` /--yes`, ` /--no_prompt`, ` /-y` | | Enable or disable interactive prompts. | +| `--wait_for_inclusion` | | If `True`, waits until the transaction is included in a block. | +| `--wait_for_finalization` | | If `True`, waits until the transaction is finalized on the blockchain. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli crowd contribute` + +Contribute TAO to an active crowdloan. + +This command allows you to contribute TAO to a crowdloan that is currently accepting contributions. +The contribution will be automatically adjusted if it would exceed the crowdloan's cap. + +**EXAMPLES** + +```bash +btcli crowd contribute --id 0 --amount 100 +``` + +```bash +btcli crowd contribute --id 1 +``` + +**Usage:** + +```bash +btcli crowd contribute [OPTIONS] +``` + +**Parameters:** + +| Options | Type | Description | +| --------------------------------------------------------------------------- | ------- | ------------------------------------------------------------------------------------ | +| `--crowdloan-id`, `--crowdloan_id`, `--id` | INTEGER | The ID of the crowdloan to display | +| `--amount`, `-a` | FLOAT | Amount to contribute in TAO | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | | The subtensor network to connect to. Default: finney. | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `--wallet-path`, `-p`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `--hotkey`, `-H`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey` | TEXT | Hotkey of the wallet | +| `--prompt/--no-prompt`, ` /--yes`, ` /--no_prompt`, ` /-y` | | Enable or disable interactive prompts. | +| `--wait_for_inclusion` | | If `True`, waits until the transaction is included in a block. | +| `--wait_for_finalization` | | If `True`, waits until the transaction is finalized on the blockchain. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli crowd withdraw` + +Withdraw contributions from a non-finalized crowdloan. + +:::info +Non-creators can withdraw their full contribution. Creators can only withdraw amounts above their initial deposit. +::: + +**Usage:** + +```bash +btcli crowd withdraw [OPTIONS] +``` + +**Parameters:** + +| Options | Type | Description | +| --------------------------------------------------------------------------- | ------- | ------------------------------------------------------------------------------------ | +| `--crowdloan-id`, `--crowdloan_id`, `--id` | INTEGER | The ID of the crowdloan to withdraw from | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | | The subtensor network to connect to. Default: finney. | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `--wallet-path`, `-p`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `--hotkey`, `-H`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey` | TEXT | Hotkey of the wallet | +| `--prompt/--no-prompt`, ` /--yes`, ` /--no_prompt`, ` /-y` | | Enable or disable interactive prompts. | +| `--wait_for_inclusion` | | If `True`, waits until the transaction is included in a block. | +| `--wait_for_finalization` | | If `True`, waits until the transaction is finalized on the blockchain. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli crowd finalize` + +Finalize a successful crowdloan that has reached its cap. + +:::info +Only the creator can finalize. This will transfer funds to the target +address (if specified) and execute any attached call (e.g., subnet creation). +::: + +**Usage:** + +```bash +btcli crowd finalize [OPTIONS] +``` + +**Parameters:** + +| Options | Type | Description | +| --------------------------------------------------------------------------- | ------- | ------------------------------------------------------------------------------------ | +| `--crowdloan-id`, `--crowdloan_id`, `--id` | INTEGER | The ID of the crowdloan to finalize | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | | The subtensor network to connect to. Default: finney. | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `--wallet-path`, `-p`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `--hotkey`, `-H`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey` | TEXT | Hotkey of the wallet | +| `--prompt/--no-prompt`, ` /--yes`, ` /--no_prompt`, ` /-y` | | Enable or disable interactive prompts. | +| `--wait_for_inclusion` | | If `True`, waits until the transaction is included in a block. | +| `--wait_for_finalization` | | If `True`, waits until the transaction is finalized on the blockchain. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli crowd update` + +Update one mutable field on a non-finalized crowdloan. + +:::info + +Only the creator can invoke this. You may change the minimum contribution, the end block, or the cap in a single call. When no flag is provided an interactive prompt guides you through the update and validates the input against the chain constants (absolute minimum contribution, block-duration +bounds, etc.). +::: + +**Usage:** + +```bash +btcli crowd update [OPTIONS] +``` + +**Parameters:** + +| Options | Type | Description | +| --------------------------------------------------------------------------- | ------- | ------------------------------------------------------------------------------------ | +| `--crowdloan-id`, `--crowdloan_id`, `--id` | INTEGER | The ID of the crowdloan to update | +| `--min-contribution`, `--min` | FLOAT | Update the minimum contribution amount (in TAO) | +| `--end`, `--end-block` | INTEGER | Update the end block number | +| `--cap` | FLOAT | Update the cap amount (in TAO) | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | | The subtensor network to connect to. Default: finney. | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `--wallet-path`, `-p`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `--hotkey`, `-H`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey` | TEXT | Hotkey of the wallet | +| `--prompt/--no-prompt`, ` /--yes`, ` /--no_prompt`, ` /-y` | | Enable or disable interactive prompts. | +| `--wait_for_inclusion` | | If `True`, waits until the transaction is included in a block. | +| `--wait_for_finalization` | | If `True`, waits until the transaction is finalized on the blockchain. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli crowd refund` + +Refund contributors of a non-finalized crowdloan. + +:::info +Only the creator may call this. Each call refunds up to the on-chain `RefundContributorsLimit` contributors (currently 50) excluding the creator. Run it repeatedly until everyone except the creator has been reimbursed. + +::: + +Contributors can call `btcli crowdloan withdraw` at will. + +**Usage:** + +```bash +btcli crowd refund [OPTIONS] +``` + +**Parameters:** + +| Options | Type | Description | +| --------------------------------------------------------------------------- | ------- | ------------------------------------------------------------------------------------ | +| `--crowdloan-id`, `--crowdloan_id`, `--id` | INTEGER | The ID of the crowdloan to refund | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | | The subtensor network to connect to. Default: finney. | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `--wallet-path`, `-p`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `--hotkey`, `-H`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey` | TEXT | Hotkey of the wallet | +| `--prompt/--no-prompt`, ` /--yes`, ` /--no_prompt`, ` /-y` | | Enable or disable interactive prompts. | +| `--wait_for_inclusion` | | If `True`, waits until the transaction is included in a block. | +| `--wait_for_finalization` | | If `True`, waits until the transaction is finalized on the blockchain. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli crowd dissolve` + +Dissolve a crowdloan after all contributors have been refunded. + +Only the creator can dissolve. The crowdloan must be non-finalized and the raised balance must equal the creator's own contribution (i.e., all other contributions have been withdrawn or refunded). Dissolving returns the creator's deposit and removes the crowdloan from storage. + +:::info +If there are funds still available other than the creator's contribution, +you can run `btcli crowd refund` to refund the remaining contributors. +::: + +**Usage:** + +```bash +btcli crowd dissolve [OPTIONS] +``` + +**Parameters:** + +| Options | Type | Description | +| --------------------------------------------------------------------------- | ------- | ------------------------------------------------------------------------------------ | +| `--crowdloan-id`, `--crowdloan_id`, `--id` | INTEGER | The ID of the crowdloan to dissolve | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | | The subtensor network to connect to. Default: finney. | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `--wallet-path`, `-p`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `--hotkey`, `-H`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey` | TEXT | Hotkey of the wallet | +| `--prompt/--no-prompt`, ` /--yes`, ` /--no_prompt`, ` /-y` | | Enable or disable interactive prompts. | +| `--wait_for_inclusion` | | If `True`, waits until the transaction is included in a block. | +| `--wait_for_finalization` | | If `True`, waits until the transaction is finalized on the blockchain. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli crowd list` + +List crowdloans together with their funding progress and key metadata. + +Shows every crowdloan on the selected network, including current status (Active, Funded, Closed, Finalized), whether it is a subnet leasing crowdloan, or a general fundraising crowdloan. + +Use `--verbose` for full-precision amounts and longer addresses. + +**EXAMPLES** + +```bash +btcli crowd list +``` + +```bash +btcli crowd list --verbose +``` + +**Usage:** + +```bash +btcli crowd list [OPTIONS] +``` + +**Parameters:** + +| Options | Type | Description | +| --------------------------------------------------------------------------- | ---- | ----------------------------------------------------- | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | | The subtensor network to connect to. Default: finney. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli crowd info` + +Display detailed information about a specific crowdloan. + +Includes funding progress, target account, and call details among other information. + +**EXAMPLES** + +```bash +btcli crowd info --id 0 +``` + +```bash +btcli crowd info --id 1 --verbose +``` + +**Usage:** + +```bash +btcli crowd info [OPTIONS] +``` + +**Parameters:** + +| Options | Type | Description | +| --------------------------------------------------------------------------- | ------- | ------------------------------------------------------------------------------------ | +| `--crowdloan-id`, `--crowdloan_id`, `--id` | INTEGER | The ID of the crowdloan to display | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | | The subtensor network to connect to. Default: finney. | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `--wallet-path`, `-p`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `--hotkey`, `-H`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey` | TEXT | Hotkey of the wallet | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +## `btcli liquidity` + +**Usage:** + +```sh +btcli liquidity [OPTIONS] COMMAND [ARGS]... + +alias: l +``` + +Options: + +`--help`: Show this message and exit. + +Commands: + +- `add`: Add liquidity to the swap (as a combination of TAO + Alpha). +- `list`: Displays liquidity positions in given subnet. +- `modify`: Modifies the liquidity position for the given subnet. +- `remove`: Remove liquidity from the swap (as a combination of TAO + Alpha). + +### `btcli liquidity add` + +Add liquidity to the swap (as a combination of TAO + Alpha). + +**Usage:** + +```bash +btcli liquidity add [OPTIONS] +``` + +**Parameters:** + +| Options | Type | Description | +| ---------------------------------------------------------------------------------- | ------- | ------------------------------------------------------------------------------------ | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | TEXT | The subtensor network to connect to. Default: finney. | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `--wallet-path`, `-p`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `--hotkey`, `-H`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey` | TEXT | Hotkey of the wallet | +| `--netuid` | INTEGER | The netuid of the subnet in the network, (e.g. 1). | +| `--liquidity` | FLOAT | Amount of liquidity to add to the subnet. | +| `--price-low`, `--price_low`, `--liquidity-price-low`, `--liquidity_price_low` | FLOAT | Low price for the adding liquidity position. | +| `--price-high`, `--price_high`, `--liquidity-price-high`, `--liquidity_price_high` | FLOAT | High price for the adding liquidity position. | +| `--prompt/--no-prompt`, ` /--yes`, ` /--no_prompt`, ` /-y` | | Enable or disable interactive prompts. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli liquidity list` + +Displays liquidity positions in given subnet. + +**Usage:** + +```bash +btcli liquidity list [OPTIONS] +``` + +**Parameters:** + +| Options | Type | Description | +| --------------------------------------------------------------------------- | ------- | ------------------------------------------------------------------------------------ | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | TEXT | The subtensor network to connect to. Default: finney. | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `--wallet-path`, `-p`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `--hotkey`, `-H`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey` | TEXT | Hotkey of the wallet | +| `--netuid` | INTEGER | The netuid of the subnet in the network, (e.g. 1). | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli liquidity modify` + +Modifies the liquidity position for the given subnet. + +**Usage:** + +```bash +btcli liquidity modify [OPTIONS] +``` + +**Parameters:** + +| Options | Type | Description | +| --------------------------------------------------------------------------- | ------- | ------------------------------------------------------------------------------------ | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | TEXT | The subtensor network to connect to. Default: finney. | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `--wallet-path`, `-p`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `--hotkey`, `-H`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey` | TEXT | Hotkey of the wallet | +| `--netuid` | INTEGER | The netuid of the subnet in the network, (e.g. 1). | +| `--position-id`, `--position_id` | INTEGER | Position ID for modification or removing. | +| `--liquidity-delta`, `--liquidity_delta` | FLOAT | Liquidity amount for modification. | +| `--prompt/--no-prompt`, ` /--yes`, ` /--no_prompt`, ` /-y` | | Enable or disable interactive prompts. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +### `btcli liquidity remove` + +Remove liquidity from the swap (as a combination of TAO + Alpha). + +**Usage:** + +```bash +btcli liquidity remove [OPTIONS] +``` + +**Parameters:** + +| Options | Type | Description | +| --------------------------------------------------------------------------- | ------- | ------------------------------------------------------------------------------------ | +| `--network`, `--subtensor.network`, `--chain`, `--subtensor.chain_endpoint` | TEXT | The subtensor network to connect to. Default: finney. | +| `--wallet-name`, `--name`, `--wallet_name`, `--wallet.name` | TEXT | Name of the wallet. | +| `--wallet-path`, `-p`, `--wallet_path`, `--wallet.path` | TEXT | Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. | +| `--hotkey`, `-H`, `--wallet_hotkey`, `--wallet-hotkey`, `--wallet.hotkey` | TEXT | Hotkey of the wallet | +| `--netuid` | INTEGER | The netuid of the subnet in the network, (e.g. 1). | +| `--position-id`, `--position_id` | INTEGER | Position ID for modification or removal. | +| `--all`, `--a` | | Whether to remove all liquidity positions for given subnet. | +| `--prompt/--no-prompt`, ` /--yes`, ` /--no_prompt`, ` /-y` | | Enable or disable interactive prompts. | +| `--quiet` | | Display only critical information on the console. | +| `--verbose` | | Enable verbose output. | +| `--json-output`, `--json-out` | | Outputs the result of the command as JSON. | +| `--help` | | Show this message and exit. | + +## `btcli utils` + +**Usage**: + +```console +btcli utils [OPTIONS] COMMAND [ARGS]... +``` + +**Options**: + +- `--help`: Show this message and exit. + +**Commands**: + +- `convert`: Allows for converting between tao and rao... +- `latency`: This command will give you the latency of all finney-like network in additional to any additional networks you specify via the '--network' flag. + +### `btcli utils convert` + +Allows for converting between tao and rao using the specified flags + +**Usage**: + +```sh +btcli utils convert [OPTIONS] +``` + +**Options**: + +| Option | Type | Description | +| -------- | ----- | --------------------------- | +| `--rao` | TEXT | Convert amount from Rao | +| `--tao` | FLOAT | Convert amount from Tao | +| `--help` | | Show this message and exit. | + +### `btcli utils latency` + +This command will give you the latency of all finney-like network in addition to any additional networks you specify via the `--network` flag + +The results are three-fold. One column is the overall time to initialise a connection, send the requests, and wait for the results. The second column measures single ping-pong speed once connected. The third makes a real world call to fetch the chain head. + +**Example:** + +```sh +btcli utils latency --network ws://189.234.12.45 --network wss://mysubtensor.duckdns.org +``` + +**Usage**: + +```sh +btcli utils latency [OPTIONS] +``` + +**Options**: + +| Option | Type | Description | +| ----------- | ---- | ---------------------------------------------------------- | +| `--network` | TEXT | Network(s) to test for the best connection [default: None] | +| `--help` | | Show this message and exit. | + +--- diff --git a/docs/btcli/overview.md b/docs/btcli/overview.md index 20cc4c597b..d15782ddfe 100644 --- a/docs/btcli/overview.md +++ b/docs/btcli/overview.md @@ -4,10 +4,10 @@ title: "Bittensor CLI Overview" # Bittensor CLI Overview -The Bittensor command line interface (CLI), `btcli`, provides the simplest way to interact with the Bittensor network and its subnets from the command line. This includes managing [wallets (coldkeys and hotkeys)](../getting-started/wallets), TAO balances, transfer, staking and unstaking functions, node registration, governance functions, and more. - +The Bittensor command line interface (CLI), `btcli`, provides the simplest way to interact with the Bittensor network and its subnets from the command line. This includes managing [wallets (coldkeys and hotkeys)](../keys/wallets), TAO balances, transfer, staking and unstaking functions, node registration, governance functions, and more. See: + - [Install `btcli`](../getting-started/install-btcli) - [Managing Stake with BTCLI](../staking-and-delegation/managing-stake-btcli.md) -- [`btcli reference document`](../btcli.md) \ No newline at end of file +- [`btcli reference document`](./btcli.md) diff --git a/docs/concepts/_equations.md b/docs/concepts/_equations.md deleted file mode 100644 index 4d5a72f3d2..0000000000 --- a/docs/concepts/_equations.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: "Equations" ---- - -import ThemedImage from '@theme/ThemedImage'; -import useBaseUrl from '@docusaurus/useBaseUrl'; - -# Equations - -$$ -W = \begin{bmatrix} w_{0,0} & w_{0,1} & w_{0,2} & w_{0,3} \\\\ w_{1,0} & w_{1,1} & w_{1,2} & w_{1,3} \\\\ w_{2,0} & w_{2,1} & w_{2,2} & w_{2,3} \\\\ w_{3,0} & w_{3,1} & w_{3,2} & w_{3,3} \end{bmatrix} -$$ -$$ -T = \begin{bmatrix} t_{0,0} & t_{0,1} & t_{0,2} & t_{0,3} \\\\ t_{1,0} & t_{1,1} & t_{1,2} & t_{1,3} \\\\ t_{2,0} & t_{2,1} & t_{2,2} & t_{2,3} \\\\ t_{3,0} & t_{3,1} & t_{3,2} & t_{3,3} \end{bmatrix} -$$ -$$ -B = \begin{bmatrix} b_{0,0} & b_{0,1} & b_{0,2} & b_{0,3} \\\\ b_{1,0} & b_{1,1} & b_{1,2} & b_{1,3} \\\\ b_{2,0} & b_{2,1} & b_{2,2} & b_{2,3} \\\\ b_{3,0} & b_{3,1} & b_{3,2} & b_{3,3} \end{bmatrix} -$$ -$$ -S = \begin{bmatrix} s_{0} \\\\ s_{1} \\\\ s_{2} \\\\ s_{3} \end{bmatrix} -$$ - diff --git a/docs/concepts/bittensor-networks.md b/docs/concepts/bittensor-networks.md new file mode 100644 index 0000000000..bb7a16c8ed --- /dev/null +++ b/docs/concepts/bittensor-networks.md @@ -0,0 +1,18 @@ +--- +title: "Bittensor Networks" +--- + +# Bittensor Networks + +The below table presents Bittensor networks and a few details: + +| DESCRIPTION | MAINNET | TESTNET | LOCALNET | +| :---------------------------- | :------------------------------------------ | :--------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| **Chain URL** | wss://entrypoint-finney.opentensor.ai:443 | wss://test.finney.opentensor.ai:443 | ws://127.0.0.1:9944 | +| **Example Usage** | `btcli wallet swap_hotkey --network finney` | `btcli wallet swap_hotkey --network test` | `btcli wallet swap_hotkey --network local` | +| **Block processing** | One block every 12 seconds | One block every 12 seconds | One block every 0.25s seconds in fast blocks mode and one block every 12s in non-fast blocks mode. | +| **Mainnet Archive** | wss://archive.chain.opentensor.ai:443 | None | None | +| **Mainnet Lite** | wss://lite.chain.opentensor.ai:443 | None | None | +| **Experimental Mainnet Lite** | wss://lite.finney.test.opentensor.ai:443 | None | None | +| **Network Purpose** | Transactions with financial value | Test transactions with no value, constrained by tokenomics | Development and testing in fully user-controlled environment | +| **Test TAO** | None | Available on request (not compatible with devnet test TAO) | Available in Alice wallet. See [Access the Alice account](../local-build/provision-wallets#access-the-alice-account). | diff --git a/docs/subnets/bt-logging-levels.md b/docs/concepts/bt-logging-levels.md similarity index 98% rename from docs/subnets/bt-logging-levels.md rename to docs/concepts/bt-logging-levels.md index d104457be4..41c37302b0 100644 --- a/docs/subnets/bt-logging-levels.md +++ b/docs/concepts/bt-logging-levels.md @@ -2,6 +2,8 @@ title: "Logging" --- +import { SdkVersion } from "../sdk/_sdk-version.mdx"; + # Logging The `logging` module in Bittensor uses several levels to categorize log messages by their severity. Each level has a numeric value and the verbosity decreases as the level increases. See the below table. @@ -29,6 +31,8 @@ You can control the verbosity of log output by changing the logging level. Messa ## Using state methods + + The `logging` module uses a state machine to manage logging levels. You can switch between different states using the provided methods. ```python diff --git a/docs/concepts/commit-reveal.md b/docs/concepts/commit-reveal.md new file mode 100644 index 0000000000..b1320268e9 --- /dev/null +++ b/docs/concepts/commit-reveal.md @@ -0,0 +1,151 @@ +--- +title: "Commit Reveal" +--- + +import ThemedImage from '@theme/ThemedImage'; +import useBaseUrl from '@docusaurus/useBaseUrl'; + +# Commit Reveal + +This page describes the **Commit Reveal** feature: a configurable waiting period that elapses between when consensus weights set by subnet validators are first committed, and when they are revealed publicly and included in [Yuma Consensus](../learn/yuma-consensus). + + +## Overview + +In each Bittensor subnet, each validator scores—or _'weights'_—each miner, producing what is referred to as a [weight vector](../resources/glossary.md#weight-vector). The weight vectors for each validator in a subnet are combined into a weight matrix. This matrix determines emissions to miners in the subnet based on the consensus evaluation of their performance, according to [Yuma Consensus](../resources/glossary.md#yuma-consensus). + +The weight matrix is public information, and must be, so that emissions in the Bittensor platform can be transparently fair. However, this transparency makes it possible for subnet validators to free-ride on the work of other validators by copying the latest consensus rather than independently evaluating subnet miners. This is unfair and potentially degrades the quality of validation work, undermining Bittensor's ability to incentivize the best miners and produce the best digital commodities overall. This is known as the **weight copying problem**. + +See [The Weight Copying Problem](./weight-copying-in-bittensor.md). + + +The Commit Reveal feature is designed to solve the **weight copying problem** by hiding weights until they are stale. Copying stale weights should result in validators departing from consensus. + +The Commit Reveal feature uses **[Drand time-lock encryption](https://drand.love/docs/timelock-encryption/)** to automatically reveal validator weights after a concealment period. When a validator sets weights, they are cryptographically encrypted and can only be decrypted after the configured number of tempos has passed. This automation eliminates the need for manual reveals and prevents selective revelation attacks. + +However, it is critical to note that this only works if the consensus weight matrix changes sufficiently on the time scale of the Commit Reveal interval. If the demands on miners are too static, and miner performance is very stable, weight copying will still be successful. The primary solution for this is to demand continuous improvement from miners, requiring them to continuously evolve to maintain their scoring. Combined with a properly tuned Commit Reveal interval, this will keep validators honest, as well as producing the best digital commodities generally. If weights change relatively infrequently (such as once per week), Liquid Alpha 2 can be used to deregister weight copiers. + +## The Commit Reveal Flow + +### Validator Sets Weights + +The sequence of events begins when a validator calls [`set_weights`](pathname:///python-api/html/autoapi/bittensor/core/extrinsics/set_weights/index.html), to commit their ratings of the subnet's miners. Validators do not need to do anything different whether or not Commit Reveal is operating. + +### Automatic Commit with Time-Lock Encryption + +Without Commit Reveal, values are committed openly to the chain. + +With Commit Reveal, the chain automatically: +- Encrypts the weights using **[Drand time-lock encryption](https://drand.love/docs/timelock-encryption/)** +- Commits the encrypted weights to the blockchain via an internal method called [`commit_weights`](pathname:///python-api/html/autoapi/bittensor/core/extrinsics/commit_weights/index.html) +- Calculates the target Drand round based on the current block and `commit_reveal_period` + +The encrypted weights cannot be decrypted by anyone—including the validator who submitted them—until the designated Drand round is reached. + +### Concealment Period + +A waiting interval, specified as a number of tempos, elapses. Subnet owners configure this interval with the `commit_reveal_period` hyperparameter. During this time, the weights remain encrypted on-chain and are therefore not included in Yuma Consensus. + +### Automatic Reveal + +After the `commit_reveal_period` has elapsed, the chain automatically decrypts and reveals the weights at the beginning of the next tempo. This happens when the corresponding Drand beacon pulse becomes available, providing the cryptographic key needed to unlock the time-locked encryption. This use of Drand as the reveal feature gives Commit Reveal a strong cryptographic guarantee. + +### Consensus Processing + +The revealed weights are now publicly visible and input into Yuma Consensus for the next epoch calculation, just as if they had been submitted without Commit Reveal. + + + +The below diagram shows the Commit Reveal process across three tempos. Key things to note: +- **Drand pulse** triggers automatic reveals at block 1005, 1105, 1205 (shortly after each tempo starts) +- **Commit window** is blocks 1090-1099, 1190-1199, 1290-1299 (last 10 blocks of each tempo) +- **Concealment period** protects weights during the tempo +- **Epoch calculation** uses revealed weights at block 1100, 1200, etc. + +
+ +
+ + +## Migrating to Commit Reveal + +### Validators and Miners + +After a subnet owner enables Commit Reveal, validators and miners don't need to change anything. Validators continue calling [`set_weights`](pathname:///python-api/html/autoapi/bittensor/core/extrinsics/set_weights/index.html) as before. All encryption, time-locking, and revealing happens automatically at the chain level. + +### Subnet Owners + +As a subnet owner, you must enable and configure the Commit Reveal feature using two hyperparameters: + +1. **`commit_reveal_weights_enabled`** (boolean) + - Set to `True` to activate Commit Reveal for your subnet + - Default: `False` (disabled) + - When enabled, all validator weights are automatically committed with time-lock encryption + +2. **`commit_reveal_period`** (integer) + - The number of tempos that must elapse before weights are revealed + - Default: `1` (weights revealed after 1 tempo) + - Example: If set to `3`, weights committed in tempo 10 will be revealed at the start of tempo 13 + +See [Setting subnet hyperparameters](../subnets/subnet-hyperparameters.md#set-hyperparameters) for how to update these values. + +#### Commit Reveal and the neuron immunity period + + + +The [Immunity Period](../resources/glossary.md#immunity-period) for neurons is the interval (measured in blocks) during which a neuron (miner or validator) newly registered on a subnet is 'immune' from deregistration due to performance. The duration of this period (in blocks) should always be larger than the Commit Reveal interval (in blocks), otherwise the immunity period will expire before a given miner's scores are available, and they may be deregistered without having their work counted. + +Note: To compare these values, multiply the `commit_reveal_period` by the `tempo` to get the reveal interval in blocks. + +:::danger +Subnet owners must ensure that the miner immunity period (in blocks) is larger than the Commit Reveal interval converted to blocks (commit_reveal_period × tempo). +::: + +When updating the immunity period or Commit Reveal interval hyperparameters for a subnet, use the following formula: + +**Note**: Both values are in blocks after conversion. + +$$ +\begin{align} +\text{new immunity period}_{\text{blocks}} &= (\text{new commit\_reveal\_period}_{\text{tempos}} \times \text{tempo}) \\ +&\quad - (\text{old commit\_reveal\_period}_{\text{tempos}} \times \text{tempo}) \\ +&\quad + \text{old immunity\_period}_{\text{blocks}} +\end{align} +$$ + +Where: +- $\text{tempo}$ is the subnet's tempo hyperparameter (typically 361 blocks per tempo) +- Values are converted to blocks for the calculation +- Both input and output for immunity_period are in blocks +- Both input and output for commit_reveal_period must be multiplied by tempo to convert to blocks + +## Automatic Commit Reveal (added in Commit Reveal 4) + +Previous versions of Commit Reveal required validators to explicitly reveal their committed weights in order to input them to Yuma Consensus. This opened an exploit vector where validators could wait until after other weights are revealed, then decide whether or not to reveal their own previously submitted weights for the tempo based on whether or not it would hurt or help vtrust. + +The Drand-based automatic reveal system prevents that exploit, and more generally provides several important benefits: + +1. **No manual reveals required**: Validators don't need to remember to reveal weights or maintain uptime for reveals +2. **Eliminates selective revelation**: Validators cannot choose not to reveal if they see unfavorable consensus forming +3. **Cryptographic guarantees**: Time-lock encryption ensures weights are revealed on schedule +4. **Reduced transaction costs**: No separate reveal transaction is needed +5. **Trustless operation**: Drand is a decentralized network; no single party controls reveal timing + +
+ +
+ diff --git a/docs/subnets/consensus-based-weights.md b/docs/concepts/consensus-based-weights.md similarity index 66% rename from docs/subnets/consensus-based-weights.md rename to docs/concepts/consensus-based-weights.md index 3e1838df5c..1f21f03167 100644 --- a/docs/subnets/consensus-based-weights.md +++ b/docs/concepts/consensus-based-weights.md @@ -2,25 +2,20 @@ title: "Consensus-based Weights/Liquid alpha" --- -# Consensus-based Weights +import { SdkVersion } from "../sdk/_sdk-version.mdx"; -This guide describes how to use the **consensus-based weights** feature (also called "liquid alpha"). +# Consensus-based Weights/Liquid Alpha + +This guide describes how to use the **consensus-based weights** feature (also called "liquid alpha"). With this feature, a subnet validator's dividends are better correlated to the performance of the subnet miner on which the subnet validator is setting the weights. In this context, see also the documentation for the [Commit Reveal](./commit-reveal.md) feature, as both these features help the subnet validators find new subnet miners that perform well and bond to them quickly. -## Technical paper, blog +## Technical paper, blog, notebooks - See [Amplifying the Weight-copying Penalty in Bittensor, a working paper (PDF)](pathname:///papers/BT-Consensus-based-Weights.pdf). - Blog post: [Consensus-based Weights](https://blog.bittensor.com/consensus-based-weights-1c5bbb4e029b). - Subtensor document section: [Validator bonding](https://github.com/opentensor/subtensor/blob/main/docs/consensus.md#validator-bonding). - -## Collab notebooks - -A subnet owner can run the `weight_copy/liquid_alpha_diagnostic.ipynb` in the Python notebook below to experiment and choose the right values for the hyperparameters `alpha_low`, `alpha_high`, and `commit_reveal_interval`. - -- For commit reveal diagnostic: https://colab.research.google.com/github/opentensor/developer-docs/blob/main/static/weight_copy/commit_reveal_diagnostic.ipynb?authuser=5 -- For liquid alpha diagnostic: https://colab.research.google.com/github/opentensor/developer-docs/blob/main/static/weight_copy/liquid_alpha_diagnostic.ipynb?authuser=5 -- [GitHub directory with Python notebooks](https://github.com/opentensor/developer-docs/tree/main/static/weight_copy/). +- [Python notebooks](https://github.com/latent-to/developer-docs/tree/main/static/weight_copy/). Run the `weight_copy/liquid_alpha_diagnostic.ipynb` to experiment and choose the right values for the hyperparameters `alpha_low`, `alpha_high`, and `commit_reveal_interval`. ## Description @@ -32,45 +27,39 @@ $$ B_{ij}^{(t)} = \alpha\cdot\Delta B_{ij}^{(t)} + (1-\alpha)\cdot B_{ij}^{(t-1)} $$ -This EMA, $B_{ij}^{(t)}$, helps in the early discovery of promising subnet miners and prevents abrupt changes to the bond value. Typically, any abrupt change in the bond value indicates exploitation. +This EMA, $B_{ij}^{(t)}$, helps in the early discovery of promising subnet miners and prevents abrupt changes to the bond value. Typically, any abrupt change in the bond value indicates exploitation. Finally, the **dividend $D_i$ to a subnet validator $i$** is calculated as: $$ D_i = \sum_j B_{ij} \cdot I_j -$$ +$$ -where $B_{ij}$ is the EMA bond value of the subnet validator $i$ with the subnet miner $j$, and $I_j$ is the subnet miner's incentive. See the subtensor document section, [Validator bonding](https://github.com/opentensor/subtensor/blob/main/docs/consensus.md#validator-bonding) for a rigorous mathematical treatment of this topic. +where $B_{ij}$ is the EMA bond value of the subnet validator $i$ with the subnet miner $j$, and $I_j$ is the subnet miner's incentive. See the subtensor document section, [Validator bonding](https://github.com/opentensor/subtensor/blob/main/docs/consensus.md#validator-bonding) for a rigorous mathematical treatment of this topic. ### What changed with this feature Without the consensus-based weights feature, the $\alpha$ in the above equation is set to `0.9`. With the consensus-based weights feature, this $\alpha$ value is made into a variable. An optimum value for the variable $\alpha$ is determined based on the current consensus (YC-2) in a given subnet. Hence, this feature is called **consensus-based weights**. -Using the new subnet hyperparameters that are described below, a subnet owner should experiment and discover the optimum $\alpha$ for their subnet. +Using the new subnet hyperparameters that are described below, a subnet owner should experiment and discover the optimum $\alpha$ for their subnet. ## Installing the consensus-based weights feature The consensus-based weights feature is available in Bittensor 7.3.0 and later versions. To use this feature, make sure you update to the `7.3.0` version. ---- - ## Using test consensus-based weights feature -### Summary steps +### Steps Here are summary steps to use the consensus-based weights feature. A subnet owner typically executes these steps: 1. To activate this feature, a subnet owner should set the `liquid_alpha_enabled` (bool) hyperparameter to `True`. -2. Next, the subnet owner should set the upper and lower bounds for $\alpha$ by using a single subnet hyperparameter, `alpha_values` (List[int]). +2. Next, the subnet owner should set the upper and lower bounds for $\alpha$ by using a single subnet hyperparameter, `alpha_values` (List[int]). :::danger Set alpha low and high together You must set `alpha_low` and `alpha_high` together using `alpha_values`. See below. ::: ---- - -## Default values, allowed ranges and value format - ### Default values - The default value for `alpha_low` is `0.7`. @@ -85,97 +74,21 @@ You must set `alpha_low` and `alpha_high` together using `alpha_values`. See bel ### Value format -When you set the subnet hyperparameters `alpha_low` and `alpha_high`, you must pass their integer equivalents in `u16`. This applies whether you set these hyperparameters using the `btcli` command or in your Python code. These integer values are then converted by the subtensor into their corresponding decimal values in the `u16` format. +When you set the subnet hyperparameters `alpha_low` and `alpha_high`, you must pass their integer equivalents in `u16`. This applies whether you set these hyperparameters using the `btcli` command or in your Python code. These integer values are then converted by the subtensor into their corresponding decimal values in the `u16` format. Use the below conversion formula to determine the integer values for your desired decimal values for both `alpha_low` and `alpha_high` hyperparameters. -$$ +$$ \text{Integer value} = \text{(your-desired-decimal-value)} \times 65535 $$ Hence, for example: -- If you want `alpha_low` to be `0.1`, then you would pass `6554`, which is the rounded up value of `0.1 * 65535`. -- If you want `alpha_high` to be `0.8`, then you would pass `52428`, which is the value of `0.8 * 65535`. - ---- - -## Detailed steps using Python code -### Method signatures - -See below the Python definitions for the consensus-based weights feature: - -```python -import bittensor as bt - -wallet = bt.wallet(name=) -subtensor = bt.subtensor(network="127.0.0.1:9946") - -# Enable consensus-based weights (liquid alpha) feature -enabled_result = subtensor.set_hyperparameter( -wallet=wallet, -netuid=, -parameter="liquid_alpha_enabled", -value=value, -wait_for_inclusion=True, -wait_for_finalization=True, -) -print(enabled_result) - -# Set alpha_values as a list of integers passed to "value" parameter in this order: alpha_low, alpha_high -alpha_low_high_result = subtensor.set_hyperparameter( -wallet=wallet, -netuid=, -parameter="alpha_values", -value=[], # decimal 0.1 for alpha_low and 0.8 for alpha_high -wait_for_inclusion=True, -wait_for_finalization=True, -) -print(alpha_low_high_result) -``` - -### Example Python code - -Below is the example Python code showing how to use the above definitions for the commit reveal feature: - -```python -import bittensor as bt - -wallet = bt.wallet(name="test-coldkey") -subtensor = bt.subtensor(network="127.0.0.1:9946") - -# Enable consensus-based weights (liquid alpha) feature -enabled_result = subtensor.set_hyperparameter( -wallet=wallet, -netuid=1, -parameter="liquid_alpha_enabled", -value=True, -wait_for_inclusion=True, -wait_for_finalization=True, -) -print(enabled_result) - -# Set alpha low and high values -alpha_low_high_result = subtensor.set_hyperparameter( -wallet=wallet, -netuid=1, -parameter="alpha_values", -value=[6554, 52428], # decimal 0.1 for alpha_low and 0.8 for alpha_high -wait_for_inclusion=True, -wait_for_finalization=True, -) -print(alpha_low_high_result) -``` - -:::danger you must always set alpha_low and alpha_high together -You must set the values for both `alpha_low` and `alpha_high` together. Current functionality does not allow setting a value to only one of `alpha_low` or `alpha_high`. - -For example, if you want to set a new value to `alpha_low` but do not want to change the `alpha_high` value, you must pass the new value of `alpha_low`, and also the current, unchanging value of `alpha_high`, while setting the `alpha_values`. -::: +- If you want `alpha_low` to be `0.1`, then you would pass `6554`, which is the rounded up value of `0.1 * 65535`. +- If you want `alpha_high` to be `0.8`, then you would pass `52428`, which is the value of `0.8 * 65535`. ---- -## Detailed steps using `btcli` +## Using `btcli` ### Set the subnet hyperparameters @@ -184,7 +97,7 @@ For example, if you want to set a new value to `alpha_low` but do not want to ch **Syntax** ```bash -btcli sudo set hyperparameters --netuid --param liquid_alpha_enabled --value or +btcli sudo set --netuid --param liquid_alpha_enabled --value or ``` **Example** @@ -192,13 +105,15 @@ btcli sudo set hyperparameters --netuid --param liquid_a For subnet 1 (`netuid` of `1`): ```bash -btcli sudo set hyperparameters --netuid 1 --param liquid_alpha_enabled --value True +btcli sudo set --netuid 1 --param liquid_alpha_enabled --value True ``` + or you can also use, ```bash btcli sudo set ``` + and follow the terminal prompts: ```bash @@ -210,7 +125,7 @@ and follow the terminal prompts: ``` :::info tip -When you use `btcli sudo set` you can use `1` or `0` to enable or disable the `liquid_alpha_enabled` hyperparameter. You can also use `true` or `True`, or `false` or `False`. +When you use `btcli sudo set` you can use `1` or `0` to enable or disable the `liquid_alpha_enabled` hyperparameter. You can also use `true` or `True`, or `false` or `False`. ::: #### 2. Use the `alpha_values` to set the `alpha_low` and `alpha_high` @@ -218,7 +133,7 @@ When you use `btcli sudo set` you can use `1` or `0` to enable or disable the `l **Syntax** ```bash -btcli sudo set hyperparameters --netuid --param alpha_values --value +btcli sudo set --netuid --param alpha_values --value ``` **Example** @@ -226,10 +141,11 @@ btcli sudo set hyperparameters --netuid --param alpha_va Setting the value of `alpha_low` to the decimal `0.1` (integer `6554`) and `alpha_high` to the decimal `0.8` (integer `52428`) for subnet 1 (`netuid` of `1`): ```bash -btcli sudo set hyperparameters --netuid 1 --param alpha_values --value 6554,52429 +btcli sudo set --netuid 1 --param alpha_values --value 6554,52429 ``` Output: + ```bash >> Enter wallet name (default): # >> Enter password to unlock key: # @@ -238,7 +154,7 @@ Output: Now, if you want to only change the `alpha_high` value from `0.8` to `0.85` (integer `55705`), then: -First, execute the `btcli sudo set` command and provide the `netuid`. The terminal will display the current alpha_low` and `alpha_high` values. +First, execute the `btcli sudo set` command and provide the `netuid`. The terminal will display the current alpha_low`and`alpha_high` values. :::warning alert When you use `btcli sudo set,` the display will not show the `alpha_values` parameter. It will only show the `alpha_low` and `alpha_high` parameters. @@ -247,5 +163,51 @@ When you use `btcli sudo set,` the display will not show the `alpha_values` para Use the current value of `alpha_low` from the above display and the new desired value of `alpha_high` and set both like below: ```bash -btcli sudo set hyperparameters --netuid 1 --param alpha_values --value 6554,55706 +btcli sudo set --netuid 1 --param alpha_values --value 6554,55706 ``` + + +## Using Bittensor Python SDK + + + +Below is example Python code showing how to use the Commit Reveal feature: + +```python +import bittensor as bt +from bittensor.core.extrinsics.utils import sudo_call_extrinsic + +wallet = bt.Wallet(name="test-coldkey") +subtensor = bt.Subtensor(network="127.0.0.1:9946") + +result = sudo_call_extrinsic( + subtensor=subtensor, + wallet=wallet, + call_function="sudo_set_liquid_alpha_enabled", + call_params={"netuid": 2, "enabled": True}, + call_module="AdminUtils" +) +print(result) + +# Set alpha values as subnet owner +result = sudo_call_extrinsic( + subtensor=subtensor, + wallet=wallet, + call_function="sudo_set_alpha_values", + call_params={ + "netuid": 2, + "alpha_low": 6553, + "alpha_high": 53083 + }, + call_module="AdminUtils" +) +print(result) +``` + +:::danger you must always set alpha_low and alpha_high together +You must set the values for both `alpha_low` and `alpha_high` together. Current functionality does not allow setting a value to only one of `alpha_low` or `alpha_high`. + +For example, if you want to set a new value to `alpha_low` but do not want to change the `alpha_high` value, you must pass the new value of `alpha_low`, and also the current, unchanging value of `alpha_high`, while setting the `alpha_values`. +::: + + diff --git a/docs/concepts/halving.md b/docs/concepts/halving.md new file mode 100644 index 0000000000..cf0b2cf68f --- /dev/null +++ b/docs/concepts/halving.md @@ -0,0 +1,34 @@ +--- +title: "TAO Halving" +--- + +# TAO Halving + +This page explains the TAO halving mechanism and describes how it affects the creation and distribution of new tokens across the network. + +## What is TAO Halving? + +**TAO halving** is a scheduled event in the Bittensor network where the block reward is reduced by 50%. This happens automatically at regular intervals based on the amount of TAO in circulation. + +Follow the approach of the halving at TAO.app's tokenomics dashboard: [tao.app/tokenomics](https://www.tao.app/tokenomics) + + +:::info +_Recycling_ of TAO from subnet registration fees can delay halving events. When tokens are recycled, they are returned to the emission pool and removed from circulation. This process continuously extends the time until the next halving threshold is reached. +::: + +## TAO halving Mechanism + +Halving occurs when the total TAO issuance reaches predetermined thresholds. Before a halving event, the network emits TAO at its current block reward, with the full amount flowing into subnet pools. Once a halving occurs, the block reward is reduced by 50%, which lowers the daily TAO emission and cuts subnet pool injections in half. + +### Effect on Alpha Emissions + +Alpha emissions are split into two distinct components that respond differently to the halving. The portion of Alpha tokens that is injected into subnet pools alongside TAO will halve, since it directly tracks TAO emissions at the current price ratio. In contrast, Alpha rewards distributed to miners, validators, and subnet owners do not halve and will remain constant. In simple terms, Alpha pool injections decrease with TAO, but participant Alpha rewards stay unchanged. + +## Summary + +- TAO halving reduces emission rate by 50% at supply-based thresholds +- Timing depends on total issuance, not block numbers +- Recycling can delay halving events +- TAO emissions and Alpha pool injections halve; Alpha participant rewards remain constant +- Current daily emission: ~7,200 TAO → ~3,600 TAO after first halving diff --git a/docs/concepts/mev-shield/index.md b/docs/concepts/mev-shield/index.md new file mode 100644 index 0000000000..c03a633dd7 --- /dev/null +++ b/docs/concepts/mev-shield/index.md @@ -0,0 +1,90 @@ +--- +title: "MEV Shield: Encrypted Mempool Protection" +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +# MEV Shield: Encrypted Mempool Protection + +MEV Shield is a Bittensor security feature that protects transactions from maximal extractable value (MEV) attacks by keeping details hidden until they are on-chain. It (optionally) encrypts any Bittensor transaction until after block inclusion, preventing other users from profiting from any foreknowldge of your transaction details. + +See also: [MEV Shield Bittensor Python SDK Guide](/sdk/mev-protection). + + +## How MEV Shield Works + +When you submit a transaction, it first enters the [_mempool_](../../resources/glossary.md#mempool), where it becomes visible to all network participants. This transparency allows for a variety of exploits where one user can profit from other user's predictable actions in a way that is considered parasitic or unfair. + +This is the _Maximal Extractable Value_ (_MEV_) problem. + +With MEV shield, transaction data is encrypted with a public key provided by the blockchain validator. The blockchain validator decrypts it right before finalizing the transaction, so the transaction details are inaccessible to would-be-MEV-attackers. + +## Basic Usage + +Both of Bittensor's official clients, the command line interface `BTCLI` and the Python SDK, enable MEV shield by default for sensitive operations. Under the hood, MEV-Shielded transactions are submitted by these clients (or directly by users) to the blockchain through the `mevShield::submit_encrypted()` extrinsic. + +:::warning MEV shield with hotkey-signed extrinsics +MEV shield should not be used for transactions that are signed by a hotkey. Attempting to use MEV shield with extrinsics signed by a hotkey will fail. + +Note that while it is technically possible to transfer TAO to a hotkey, which would, technically, allow you to use MEV protection for HK operations, this is neither intended nor advisable. + +**Because hotkeys are not intended to hold TAO, you are in *untested waters* if you do so, and there may be unintended consequences that could result in asset loss.** +::: + + + + + + +BTCLI automatically applies MEV Shield to commands that are more prone to MEV attacks, such as staking, subnet creation, and proxy execution, while all other commands run without it. + +For these sensitive operations, MEV protection is enabled by default, but you can turn it off by adding the `--no-mev-protection` flag as shown: + +```bash +# Add stake with MEV protection (default) +btcli stake add \ + --wallet.name my_wallet \ + --wallet.hotkey my_hotkey \ + --amount 10.0 \ + --mev-protection # redundant, since this is the default behavior! + +# Remove stake without MEV protection +btcli stake remove \ + --wallet.name my_wallet \ + --wallet.hotkey my_hotkey \ + --amount 5.0 \ + --no-mev-protection # Danger, you are giving your TAO to bots! + +``` + + + + + When using the SDK, MEV Shield can be applied to any Bittensor extrinsic function using the `mev_protection` parameter. To do this: + +```python +from bittensor import Subtensor, Wallet +from bittensor.utils.balance import Balance + +# Initialize subtensor and wallet +subtensor = Subtensor() +wallet = Wallet() + +# Add stake with MEV protection enabled +response = subtensor.add_stake( + wallet=wallet, + netuid=1, + hotkey_ss58='5C86aJ2uQawR6P6veaJQXNK9HaWh6NMbUhTiLs65kq4ZW3NH', + amount=Balance.from_tao(1), + mev_protection=True, # Enable MEV Shield protection + wait_for_inclusion=True, + wait_for_finalization=True +) + +print(response) +``` + + + + diff --git a/docs/tools.md b/docs/concepts/tools.md similarity index 76% rename from docs/tools.md rename to docs/concepts/tools.md index a83587fb09..d5d8c0a773 100644 --- a/docs/tools.md +++ b/docs/concepts/tools.md @@ -11,36 +11,38 @@ Bittensor provides several tools to help developers, miners, and validators inte ## Bittensor SDK The Bittensor SDK is a Python-based library that allows developers to interact programmatically with the Bittensor network. You can use the SDK to: + - Create and manage wallets - Register miners and validators - Query and monitor network activity - Build applications on top of Bittensor’s decentralized AI infrastructure -**Learn more in the [Bittensor SDK documentation](./bt-api-ref.md)** (link for illustration). +**Learn more in the [Bittensor SDK documentation](../sdk/bt-api-ref.md)** (link for illustration). --- ## Bittensor CLI The Bittensor command-line interface (`btcli`) provides a straightforward way to: + - Create, manage, and encrypt wallet keys - Transfer and stake TAO - Perform subnet management operations (e.g., creating subnets, registering miners/validators) - View wallet information and network status It is designed for users who prefer quick terminal commands or those managing multiple nodes and subnet interactions. -**See [Bittensor CLI reference](./btcli.md)** for detailed usage instructions. +**See [Bittensor CLI reference](../btcli/btcli.md)** for detailed usage instructions. --- ## Wallets and Keys -In Bittensor (like other cryptocurrency applications), a *wallet* is a tool for managing the cryptographic key-pairs required to prove your identity, sign transactions, and access your currency +In Bittensor (like other cryptocurrency applications), a _wallet_ is a tool for managing the cryptographic key-pairs required to prove your identity, sign transactions, and access your currency Bittensor uses a dual-key wallet structure: -- **Coldkey** for secure storage of TAO and high-security operations + +- **Coldkey** for secure storage of TAO and high-security operations - **Hotkey** for operational tasks like validation, mining, and day-to-day transactions Both keys are crucial for safeguarding and participating in the network. -**For a complete guide, see [Wallets & Keys](./getting-started/wallets)** and [Working with Keys](./working-with-keys). - +**For a complete guide, see [Wallets & Keys](../keys/wallets)** and [Working with Keys](../keys/working-with-keys). diff --git a/docs/concepts/weight-copying-in-bittensor.md b/docs/concepts/weight-copying-in-bittensor.md new file mode 100644 index 0000000000..0597fea547 --- /dev/null +++ b/docs/concepts/weight-copying-in-bittensor.md @@ -0,0 +1,100 @@ +--- +title: "The Weight Copying Problem" +--- + + +import ThemedImage from '@theme/ThemedImage'; +import useBaseUrl from '@docusaurus/useBaseUrl'; + + +# The Weight Copying Problem + +This page explains **weight copying**—a free-riding behavior where validators copy other validators' work instead of independently evaluating miners. This article covers how weight copying works, why it is problematic, and how subnet owners can prevent weight copying on their subnets using Bittensor's [Commit Reveal](./commit-reveal.md) feature. + +See also: +- [Opentensor Weight Copying technical paper (PDF)](pathname:///papers/BT_Weight_Copier-29May2024.pdf) +- [Opentesor Blog: Weight Copying in Bittensor](https://blog.bittensor.com/weight-copying-in-bittensor-422585ab8fa5) + +## What is weight copying? + +In Bittensor subnets, validators are supposed to independently evaluate miners and set weights based on their performance. These weights determine miner emissions through [Yuma Consensus](../learn/yuma-consensus.md). + +**Weight copying** occurs when a validator reads the publicly available weight matrix and copies (or derives from) other validators' weights instead of doing their own evaluation work. This allows them to: +- Avoid the computational cost of evaluation +- Avoid the development cost of building good evaluation systems +- Still earn validator dividends by appearing to participate in consensus + +While this might seem like a minor optimization, it undermines the entire incentive mechanism and can lead to cascading failures in subnet quality. + +
+ +
+ +## The problems with weight copying + +### Degraded subnet quality + +Validators are the quality control mechanism for subnets. When validators copy weights instead of independently evaluating miners: +- Bad miners can persist longer than they should +- Good innovations from new miners take longer to be recognized +- The subnet's ability to produce quality output degrades over time + +### Unfair validator rewards + +Weight copiers earn dividends without doing the work, in a sense free-riding or parasitising validators that actually do perform validation work. In the worst case scenario, this can lead to most validators becoming weight copiers, with real evaluation work being effectively centralized to a small number of honest validators. This would undermine the benefits of distributed consensus as well as being unfair and inefficient. + +If weight copying is more profitable than honest validation, rational actors will copy weights. Another way of thinking about this is that validators must actually pay a cost to validate honestly. Therefore, when weight copying is profitable, the incentive system driving Bittensor is distorted, weakening its ability to fulfill its purpose: producing the best digital commodities in the world. + +Therefore, it can be seen as the subnet owners' responsibility to the community, as well as being in their own interests, to ensure that weight copying is not profitable in their subnets. The best way to do this is by enabling and properly configuring [Commit Reveal](./commit-reveal). + + +Historically, many large weight copiers used an optimized strategy which we can call the stake-weighted averaging attack, that actually gives them *higher* returns than any single honest validator: + +1. Weight copiers wait for weights to be publicly revealed. +2. They compute what weights they can submit that Yuma Consensus will judge as maximally in consensus, by giving the stake-weighted median of validators' weight scores for each miner. See [Glossary: Consensus Score](../resources/glossary#consensus-score). +3. By submitting weights that match the predicted consensus, they maximize their vtrust (validator trust score). +4. Higher vtrust → higher dividends per TAO staked → higher APY. + +This works because in Yuma Consensus, validators are rewarded based on how well their weights align with the emerging consensus. By calculating the stake-weighted median, weight copiers can predict consensus better than any individual honest validator who might have some disagreement with others. As a result, optimized weight copiers achieve higher validator dividends per stake than honest validators, making weight copying more profitable than honest work. + +This is a fundamental incentive problem for Bittensor subnet owners: if validators are needed to do validation work rather than weight copy, the validation work itself must be incentivized more than weight-copying. Fortunately, the Commit Reveal feature exists to make weight copying impossible. + +## How Commit Reveal prevents weight copying + +Bittensor's [Commit Reveal feature](./commit-reveal.md) solves weight copying by introducing a time delay between when weights are set and when they're publicly visible. + +When weights are concealed for one or more tempos, weight copiers only have access to **stale weights** from previous tempos. If miner performance has changed since those old weights were set, the old weights are inaccurate, and copying them will put the copiers far from consensus. This will wreck their vtrust and their emissions, making weight copying unprofitable. + +### The Commit Reveal Flow + +1. Validators set weights +2. Weights are encrypted using time-lock encryption +3. Weights remain hidden for a configured number of tempos (the `commit_reveal_period`) +4. Weights are automatically revealed after the concealment period +5. Revealed weights are then used in Yuma Consensus calculations + + +
+ +
+ + +## The caveat: Dynamic scoring required + +Commit Reveal only prevents weight copying if **miner performance actually changes** over the timescale of the concealment period. If the ground truth about miner rankings is overly static, then even stale weights will be accurate enough to be profitable, and in this case, nothing can prevent weight copying. + +Subnet owners should design subnets that demand continuous miner improvement, which is important generally for producing best-in-class digital commodities, and also ensures that weights from yesterday are less accurate than fresh evaluations today, preventing weight copying. Alternatively, even if weights change infrequently (such as once per week), Liquid Alpha 2 can be used to deregister weight copiers. diff --git a/docs/dynamic-tao/_dtao-btcli.md b/docs/dynamic-tao/_dtao-btcli.md deleted file mode 100644 index 08b0cae694..0000000000 --- a/docs/dynamic-tao/_dtao-btcli.md +++ /dev/null @@ -1,1955 +0,0 @@ ---- -title: "BTCLI with Dynamic TAO" ---- - -# BTCLI with Dynamic TAO - -This page documents the command line interface (CLI) for Bittensor with dynamic TAO enabled. Dynamic TAO is a planned evolution of Bittensor currently being tested. - -Access the Dynamic TAO-enabled Bittensor test network at: `wss://rao.chain.opentensor.ai:443/` - -:::tip Looking for legacy BTCLI doc? -For current/legacy `btcli` doc that supports the `btcli root` commands, see [Bittensor CLI](../btcli.md). -::: - -**Usage**: - -```bash -btcli [OPTIONS] COMMAND [ARGS]... -``` - -**Options**: - -* `--version` -* `--install-completion`: Install completion for the current shell. -* `--show-completion`: Show completion for the current shell, to copy it or customize the installation. -* `--help`: Show this message and exit. - -**Commands**: - -* `config`: Config commands, aliases: `c`, `conf` -* `wallet`: Wallet commands, aliases: `wallets`, `w` -* `stake`: Stake commands, alias: `s`, `st` -* `sudo`: Sudo commands, alias: `su` -* `subnet`: Subnet commands, alias: `s`, `subnets` -* `utils`: Utility commands. ??? This seems to work but is not in the `--help` output ??? -* `weights`: Weights commands, aliases: `wt`, `weight` - -## btcli config - -**Usage**: - -```bash -btcli config [OPTIONS] COMMAND [ARGS]... -``` - -**Options**: - -* `--help`: Show this message and exit. - -### btcli config clear - -Clears the fields in the config file and sets them to `None`. - -#### EXAMPLE - - - To clear the `chain` and `network` fields: - -```bash - btcli config clear --chain --network -``` - - - To clear your config entirely: - -```bash - btcli config clear --all -``` - -**Usage**: - -```bash -btcli config clear [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name` -* `-p, --wallet-path, --wallet_path, --wallet.path` -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey` -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint` -* `--cache` -* `--all` -* `--help`: Show this message and exit. - -### btcli config get - -Prints the current config file in a table. - -**Usage**: - -```bash -btcli config get [OPTIONS] -``` - -**Options**: - -* `--help`: Show this message and exit. - -### btcli config metagraph - -Command option to configure the display of the metagraph columns. - -**Usage**: - -```bash -btcli config metagraph [OPTIONS] -``` - -**Options**: - -* `--reset`: Restore the display of metagraph columns to show all columns. -* `--help`: Show this message and exit. - -### btcli config set - -Sets the values in the config file. To set the metagraph configuration, use the command `btcli config metagraph` - -**Usage**: - -```bash -btcli config set [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--cache, --cache / --no-cache, --no_cache`: Disable caching of some commands. This will disable the `--reuse-last` and `--html` flags on commands such as `subnets metagraph`, `stake show` and `subnets list`. -* `--help`: Show this message and exit. - -## btcli stake - -**Usage**: - -```bash -btcli stake [OPTIONS] COMMAND [ARGS]... -``` - -**Options**: - -* `--help`: Show this message and exit. - -### btcli stake add - -Stake TAO to one or more hotkeys associated with the user's coldkey. - -This command is used by a subnet validator to stake to their own hotkey. Compare this command with `btcli root delegate` (supported in legacy `btcli` only) that is typically run by a TAO holder to delegate their TAO to a delegate's hotkey. - -This command is used by a subnet validator to allocate stake TAO to their different hotkeys, securing their position and influence on the network. - -#### EXAMPLE - -```bash -btcli stake add --amount 100 --wallet-name --wallet-hotkey -``` - -**Usage**: - -```bash -btcli stake add [OPTIONS] -``` - -**Options**: - -* `-a, --all-tokens, --all`: When set, the command stakes all the available TAO from the coldkey. -* `--amount FLOAT`: The amount of TAO to stake [default: 0.0] -* `-m, --max-stake FLOAT`: Stake is sent to a hotkey only until the hotkey's total stake is less than or equal to this maximum staked TAO. If a hotkey already has stake greater than this amount, then stake is not added to this hotkey. [default: 0.0] -* `-in, --include-hotkeys, --hotkey-ss58-address TEXT`: Specifies hotkeys by name or ss58 address to stake to. For example, `-in hk1,hk2` -* `-ex, --exclude-hotkeys TEXT`: Specifies hotkeys by name or ss58 address to not to stake to (use this option only with `--all-hotkeys`) i.e. `--all-hotkeys -ex hk3,hk4` -* `--all-hotkeys / --`no-all-hotkeys``: When set, this command stakes to all hotkeys associated with the wallet. Do not use if specifying hotkeys in `--include-hotkeys`. [default: `no-all-hotkeys`] -* `--netuid INTEGER`: The netuid of the subnet in the root network, (e.g. 1). -* `--all-netuids / --no-all-netuids`: Use all netuids [default: no-all-netuids] -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### btcli stake child - -**Usage**: - -```bash -btcli stake child [OPTIONS] COMMAND [ARGS]... -``` - -**Options**: - -* `--help`: Show this message and exit. - -#### btcli stake child get - -Get all the child hotkeys on a specified subnet. - -Users can specify the subnet and see the child hotkeys and the proportion that is given to them. This command is used to view the authority delegated to different hotkeys on the subnet. - -#### EXAMPLE - -```bash -btcli stake child get --all-netuids -``` - -**Usage**: - -```bash -btcli stake child get [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--netuid INTEGER`: The netuid of the subnet (e.g. 2) -* `--all-netuids, --all, --allnetuids`: When set, gets the child hotkeys from all the subnets. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -#### btcli stake child revoke - -Remove all children hotkeys on a specified subnet. - -This command is used to remove delegated authority from all child hotkeys, removing their position and influence on the subnet. - -#### EXAMPLE - -```bash -btcli stake child revoke --hotkey --netuid 1 -``` - -**Usage**: - -```bash -btcli stake child revoke [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--netuid INTEGER`: The netuid of the subnet, (e.g. 8) -* `--all-netuids, --all, --allnetuids`: When this flag is used it sets child hotkeys on all the subnets. -* `--wait-for-inclusion / --no-wait-for-inclusion`: If `True`, waits until the transaction is included in a block. [default: wait-for-inclusion] -* `--wait-for-finalization / --no-wait-for-finalization`: If `True`, waits until the transaction is finalized on the blockchain. [default: wait-for-finalization] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -#### btcli stake child set - -Set child hotkeys on specified subnets. - -Users can specify the 'proportion' to delegate to child hotkeys (ss58 address). The sum of proportions cannot be greater than 1. - -This command is used to delegate authority to different hotkeys, securing their position and influence on the subnet. - -#### EXAMPLE - -```bash -btcli stake child set -c 5FCL3gmjtQV4xxxxuEPEFQVhyyyyqYgNwX7drFLw7MSdBnxP -c 5Hp5dxxxxtGg7pu8dN2btyyyyVA1vELmM9dy8KQv3LxV8PA7 --hotkey default --netuid 1 -p 0.3 -p 0.7 -``` - -**Usage**: - -```bash -btcli stake child set [OPTIONS] -``` - -**Options**: - -* `-c, --children TEXT`: Enter child hotkeys (ss58) -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--netuid INTEGER`: The netuid of the subnet in the root network, (e.g. 1). -* `--all-netuids / --no-all-netuids`: Use all netuids [default: no-all-netuids] -* `-p, --proportions, --prop FLOAT`: Enter the stake weight proportions for the child hotkeys (sum should be less than or equal to 1) -* `--wait-for-inclusion / --no-wait-for-inclusion`: If `True`, waits until the transaction is included in a block. [default: wait-for-inclusion] -* `--wait-for-finalization / --no-wait-for-finalization`: If `True`, waits until the transaction is finalized on the blockchain. [default: wait-for-finalization] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -#### btcli stake child take - -Get and set your child hotkey take on a specified subnet. - -The child hotkey take must be between 0 - 18%. - -#### EXAMPLE - -To get the current take value, do not use the '--take' option: - -```bash - btcli stake child take --hotkey --netuid 1 -``` - -To set a new take value, use the '--take' option: - -```bash - btcli stake child take --hotkey --take 0.12 --netuid 1 -``` - -**Usage**: - -```bash -btcli stake child take [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--hotkey TEXT` -* `--netuid INTEGER`: The netuid of the subnet, (e.g. 23) -* `--all-netuids, --all, --allnetuids`: When this flag is used it sets child hotkeys on all the subnets. -* `-t, --take FLOAT`: Use to set the take value for your child hotkey. When not used, the command will fetch the current take value. -* `--wait-for-inclusion / --no-wait-for-inclusion`: If `True`, waits until the transaction is included in a block. [default: wait-for-inclusion] -* `--wait-for-finalization / --no-wait-for-finalization`: If `True`, waits until the transaction is finalized on the blockchain. [default: wait-for-finalization] -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### btcli stake children - -**Usage**: - -```bash -btcli stake children [OPTIONS] COMMAND [ARGS]... -``` - -**Options**: - -* `--help`: Show this message and exit. - -#### btcli stake children get - -Get all the child hotkeys on a specified subnet. - -Users can specify the subnet and see the child hotkeys and the proportion that is given to them. This command is used to view the authority delegated to different hotkeys on the subnet. - -#### EXAMPLE - -```bash -btcli stake child get --all-netuids -``` - -**Usage**: - -```bash -btcli stake children get [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--netuid INTEGER`: The netuid of the subnet (e.g. 2) -* `--all-netuids, --all, --allnetuids`: When set, gets the child hotkeys from all the subnets. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -#### btcli stake children revoke - -Remove all children hotkeys on a specified subnet. - -This command is used to remove delegated authority from all child hotkeys, removing their position and influence on the subnet. - -#### EXAMPLE - -```bash -btcli stake child revoke --hotkey --netuid 1 -``` - -**Usage**: - -```bash -btcli stake children revoke [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--netuid INTEGER`: The netuid of the subnet, (e.g. 8) -* `--all-netuids, --all, --allnetuids`: When this flag is used it sets child hotkeys on all the subnets. -* `--wait-for-inclusion / --no-wait-for-inclusion`: If `True`, waits until the transaction is included in a block. [default: wait-for-inclusion] -* `--wait-for-finalization / --no-wait-for-finalization`: If `True`, waits until the transaction is finalized on the blockchain. [default: wait-for-finalization] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -#### btcli stake children set - -Set child hotkeys on specified subnets. - -Users can specify the 'proportion' to delegate to child hotkeys (ss58 address). The sum of proportions cannot be greater than 1. - -This command is used to delegate authority to different hotkeys, securing their position and influence on the subnet. - -#### EXAMPLE - -```bash -btcli stake child set -c 5FCL3gmjtQV4xxxxuEPEFQVhyyyyqYgNwX7drFLw7MSdBnxP -c 5Hp5dxxxxtGg7pu8dN2btyyyyVA1vELmM9dy8KQv3LxV8PA7 --hotkey default --netuid 1 -p 0.3 -p 0.7 -``` - -**Usage**: - -```bash -btcli stake children set [OPTIONS] -``` - -**Options**: - -* `-c, --children TEXT`: Enter child hotkeys (ss58) -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--netuid INTEGER`: The netuid of the subnet in the root network, (e.g. 1). -* `--all-netuids / --no-all-netuids`: Use all netuids [default: no-all-netuids] -* `-p, --proportions, --prop FLOAT`: Enter the stake weight proportions for the child hotkeys (sum should be less than or equal to 1) -* `--wait-for-inclusion / --no-wait-for-inclusion`: If `True`, waits until the transaction is included in a block. [default: wait-for-inclusion] -* `--wait-for-finalization / --no-wait-for-finalization`: If `True`, waits until the transaction is finalized on the blockchain. [default: wait-for-finalization] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -#### btcli stake children take - -Get and set your child hotkey take on a specified subnet. - -The child hotkey take must be between 0 - 18%. - -#### EXAMPLE - -To get the current take value, do not use the '--take' option: - -```bash - btcli stake child take --hotkey --netuid 1 -``` - -To set a new take value, use the '--take' option: - -```bash - btcli stake child take --hotkey --take 0.12 --netuid 1 -``` - -**Usage**: - -```bash -btcli stake children take [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--hotkey TEXT` -* `--netuid INTEGER`: The netuid of the subnet, (e.g. 23) -* `--all-netuids, --all, --allnetuids`: When this flag is used it sets child hotkeys on all the subnets. -* `-t, --take FLOAT`: Use to set the take value for your child hotkey. When not used, the command will fetch the current take value. -* `--wait-for-inclusion / --no-wait-for-inclusion`: If `True`, waits until the transaction is included in a block. [default: wait-for-inclusion] -* `--wait-for-finalization / --no-wait-for-finalization`: If `True`, waits until the transaction is finalized on the blockchain. [default: wait-for-finalization] -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### btcli stake list - -List all stake accounts for wallet. - -**Usage**: - -```bash -btcli stake list [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### btcli stake move - -Move Staked TAO to a hotkey from one subnet to another. - -THe move commands converts the origin subnet's dTao to Tao, and then converts Tao to destination subnet's dTao. - -#### EXAMPLE - -```bash -btcli stake move -``` - -**Usage**: - -```bash -btcli stake move [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--origin-netuid INTEGER`: Origin netuid [required] -* `--destination-netuid INTEGER`: Destination netuid [required] -* `--destination-hotkey TEXT`: Destination hotkey -* `--amount FLOAT`: The amount of TAO to stake [default: 0.0] -* `--stake-all, --all`: Stake all -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--help`: Show this message and exit. - -### btcli stake remove - -Unstake TAO from one or more hotkeys and transfer them back to the user's coldkey. - -This command is used to withdraw TAO previously staked to different hotkeys. - -#### EXAMPLE - -```bash -btcli stake remove --amount 100 -in hk1,hk2 -``` - -:::tip -This command is for users who wish to reallocate their stake or withdraw them from the network. It allows for flexible management of TAO stake across different neurons (hotkeys) on the network. -::: - - -**Usage**: - -```bash -btcli stake remove [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--netuid INTEGER`: The netuid of the subnet in the root network, (e.g. 1). -* `--all-netuids / --no-all-netuids`: Use all netuids [default: no-all-netuids] -* `--unstake-all, --all`: When set, this command unstakes all staked TAO from the specified hotkeys. -* `-a, --amount FLOAT`: The amount of TAO to unstake. [default: 0.0] -* `--hotkey-ss58-address TEXT`: The ss58 address of the hotkey to unstake from. -* `--keep-stake, --keep FLOAT`: Sets the maximum amount of TAO to remain staked in each hotkey. [default: 0.0] -* `-in, --include-hotkeys TEXT`: Specifies the hotkeys by name or ss58 address to unstake from. For example, `-in hk1,hk2` -* `-ex, --exclude-hotkeys TEXT`: Specifies the hotkeys by name or ss58 address not to unstake from (only use with `--all-hotkeys`) i.e. `--all-hotkeys -ex hk3,hk4` -* `--all-hotkeys / --`no-all-hotkeys``: When set, this command unstakes from all the hotkeys associated with the wallet. Do not use if specifying hotkeys in `--include-hotkeys`. [default: `no-all-hotkeys`] -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -## btcli subnet - -**Usage**: - -```bash -btcli subnet [OPTIONS] COMMAND [ARGS]... -``` - -**Options**: - -* `--help`: Show this message and exit. - - -### btcli subnet create - -Registers a new subnet. - -#### EXAMPLE - -```bash -btcli subnets create -``` - -**Usage**: - -```bash -btcli subnet create [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### btcli subnet hyperparameters - -Shows a list of the hyperparameters for the specified subnet. - -The output of this command is the same as that of `btcli subnets hyperparameters`. - -#### EXAMPLE - -```bash -btcli sudo get --netuid 1 -``` - -**Usage**: - -```bash -btcli subnet hyperparameters [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--netuid INTEGER`: The netuid of the subnet in the root network, (e.g. 1). -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### btcli subnet list - -List all subnets and their detailed information. - -This command displays a table with the below columns: - -- NETUID: The subnet's netuid. -- N: The number of neurons (subnet validators and subnet miners) in the subnet. -- MAX_N: The maximum allowed number of neurons in the subnet. -- EMISSION: The percentage of emissions to the subnet as of the last tempo. -- TEMPO: The subnet's tempo, expressed in number of blocks. -- RECYCLE: The recycle register cost for this subnet. -- POW: The proof of work (PoW) difficulty. -- SUDO: The subnet owner's name or the owner's ss58 address. - -#### EXAMPLE - -```bash -btcli subnets list -``` - -**Usage**: - -```bash -btcli subnet list [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### btcli subnet lock-cost - -Shows the required amount of TAO to be locked for creating a new subnet, i.e., cost of registering a new subnet. - -The current implementation anneals the cost of creating a subnet over a period of two days. If the displayed cost is unappealing to you, check back in a day or two to see if it has decreased to a more affordable level. - -#### EXAMPLE - -```bash -btcli subnets lock_cost -``` - -**Usage**: - -```bash -btcli subnet lock-cost [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### btcli subnet metagraph - -Disabled for dynamic TAO. - - - -### btcli subnet pow-register - -Register a neuron (a subnet validator or a subnet miner) using Proof of Work (POW). - -This method is an alternative registration process that uses computational work for securing a neuron's place on the subnet. - -The command starts by verifying the existence of the specified subnet. If the subnet does not exist, it terminates with an error message. On successful verification, the POW registration process is initiated, which requires solving computational puzzles. - -The command also supports additional wallet and subtensor arguments, enabling further customization of the registration process. - -#### EXAMPLE - -```bash -btcli pow_register --netuid 1 --num_processes 4 --cuda -``` - -:::tip -This command is suitable for users with adequate computational resources to participate in POW registration. It requires a sound understanding of the network's operations and POW mechanics. Users should ensure their systems meet the necessary hardware and software requirements, particularly when opting for CUDA-based GPU acceleration. -::: - - -This command may be disabled by the subnet owner. For example, on netuid 1 this is permanently disabled. - -**Usage**: - -```bash -btcli subnet pow-register [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--netuid INTEGER`: The netuid of the subnet in the root network, (e.g. 1). -* `--processors INTEGER`: Number of processors to use for POW registration. -* `-u, --update-interval INTEGER`: The number of nonces to process before checking for the next block during registration [default: 50000] -* `--output-in-place / --no-output-in-place`: Whether to output the registration statistics in-place. [default: output-in-place] -* `-v, --verbose`: Whether to output the registration statistics verbosely. -* `--use-cuda, --cuda / --no-use-cuda, --no-cuda`: Set the flag to use CUDA for POW registration. [default: no-use-cuda] -* `-d, --dev-id INTEGER`: Set the CUDA device id(s), in the order of the device speed (0 is the fastest). [default: 0] -* `-tbp, --threads-per-block INTEGER`: Set the number of threads per block for CUDA. [default: 256] -* `--help`: Show this message and exit. - -### btcli subnet register - -Register a neuron (a subnet validator or a subnet miner) in the specified subnet by recycling some TAO. - -Before registering, the command checks if the specified subnet exists and whether the user's balance is sufficient to cover the registration cost. - -The registration cost is determined by the current recycle amount for the specified subnet. If the balance is insufficient or the subnet does not exist, the command will exit with an error message. - -#### EXAMPLE - -```bash -btcli subnets register --netuid 1 -``` - -**Usage**: - -```bash -btcli subnet register [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--netuid INTEGER`: The netuid of the subnet in the root network, (e.g. 1). -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### btcli subnet show - -Displays detailed information about a subnet including participants and their state. - -#### EXAMPLE - -```bash -btcli subnets list -``` - -**Usage**: - -```bash -btcli subnet show [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--netuid INTEGER`: The netuid of the subnet in the root network, (e.g. 1). -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--help`: Show this message and exit. - -## btcli sudo - -**Usage**: - -```bash -btcli sudo [OPTIONS] COMMAND [ARGS]... -``` - -**Options**: - -* `--help`: Show this message and exit. - - -### btcli sudo get - -Shows a list of the hyperparameters for the specified subnet. - -The output of this command is the same as that of `btcli subnets hyperparameters`. - -#### EXAMPLE - -```bash -btcli sudo get --netuid 1 -``` - -**Usage**: - -```bash -btcli sudo get [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--netuid INTEGER`: The netuid of the subnet in the root network, (e.g. 1). -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### btcli sudo get-take - -Allows users to check their delegate take percentage. - -This command can be used to fetch the delegate take of your hotkey. - -#### EXAMPLE -```bash -btcli sudo get-take --wallet-name my_wallet --wallet-hotkey my_hotkey -``` - -**Usage**: - -```bash -btcli sudo get-take [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### btcli sudo proposals - -View active proposals for the senate in the Bittensor's governance protocol. - -This command displays the details of ongoing proposals, including proposal hashes, votes, thresholds, and proposal data. - -#### EXAMPLE -```bash -btcli sudo proposals -``` - -**Usage**: - -```bash -btcli sudo proposals [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### btcli sudo senate - -Shows the Senate members of the Bittensor's governance protocol. - -This command lists the delegates involved in the decision-making process of the Bittensor network, showing their names and wallet addresses. This information is crucial for understanding who holds governance roles within the network. - -#### EXAMPLE -```bash -btcli sudo senate -``` - -**Usage**: - -```bash -btcli sudo senate [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### btcli sudo senate-vote - -Cast a vote on an active proposal in Bittensor's governance protocol. - -This command is used by Senate members to vote on various proposals that shape the network's future. Use `btcli sudo proposals` to see the active proposals and their hashes. - -USAGE -The user must specify the hash of the proposal they want to vote on. The command then allows the Senate member to cast a 'Yes' or 'No' vote, contributing to the decision-making process on the proposal. This command is crucial for Senate members to exercise their voting rights on key proposals. It plays a vital role in the governance and evolution of the Bittensor network. - -#### EXAMPLE -```bash -btcli sudo senate_vote --proposal -``` - -**Usage**: - -```bash -btcli sudo senate-vote [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--proposal, --proposal-hash TEXT`: The hash of the proposal to vote on. -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--vote-aye / --vote-nay`: The vote casted on the proposal -* `--help`: Show this message and exit. - -### btcli sudo set - -Used to set hyperparameters for a specific subnet. - -This command allows subnet owners to modify hyperparameters such as its tempo, emission rates, and other hyperparameters. - -#### EXAMPLE - -```bash -btcli sudo set --netuid 1 --param tempo --value 400 -``` - -**Usage**: - -```bash -btcli sudo set [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--netuid INTEGER`: The netuid of the subnet in the root network, (e.g. 1). -* `--param, --parameter TEXT`: The subnet hyperparameter to set -* `--value TEXT`: Value to set the hyperparameter to. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### btcli sudo set-take - -Allows users to change their delegate take percentage. - -This command can be used to update the delegate takes. To run the command, the user must have a configured wallet with both hotkey and coldkey. -The command makes sure the new take value is within 0-18% range. - -#### EXAMPLE -```bash -btcli sudo set-take --wallet-name my_wallet --wallet-hotkey my_hotkey -``` - -**Usage**: - -```bash -btcli sudo set-take [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--take FLOAT`: The new take value. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -## btcli utils - -**Usage**: - -```bash -btcli utils [OPTIONS] COMMAND [ARGS]... -``` - -**Options**: - -* `--help`: Show this message and exit. - -### btcli utils convert - -Allows for converting between tao and rao using the specified flags - -**Usage**: - -```bash -btcli utils convert [OPTIONS] -``` - -**Options**: - -* `--rao TEXT`: Convert amount from Rao -* `--tao FLOAT`: Convert amount from Tao -* `--help`: Show this message and exit. - -## btcli wallet - -**Usage**: - -```bash -btcli wallet [OPTIONS] COMMAND [ARGS]... -``` - -**Options**: - -* `--help`: Show this message and exit. - - -### btcli wallet balance - -Check the balance of the wallet. This command shows a detailed view of the wallet's coldkey balances, including free and staked balances. - -You can also pass multiple ss58 addresses of coldkeys to check their balance (using --ss58). - -EXAMPLES: - -- To display the balance of a single wallet, use the command with the `--wallet-name` argument and provide the wallet name: - -```bash - btcli w balance --wallet-name WALLET -``` - -- To use the default config values, use: - -```bash - btcli w balance -``` - -- To display the balances of all your wallets, use the `--all` argument: - -```bash - btcli w balance --all -``` - -- To display the balances of ss58 addresses, use the `--ss58` argument: - -```bash - btcli w balance --ss58 --ss58 -``` - -**Usage**: - -```bash -btcli wallet balance [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--ss58, --ss58-address TEXT`: The SS58 address of the coldkey. -* `-a, --all`: Whether to display the balances for all the wallets. -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### btcli wallet create - -Create a complete wallet by setting up both coldkey and hotkeys. - -USAGE - -The command creates a new coldkey and hotkey. It provides an option for mnemonic word count. It supports password protection for the coldkey and allows overwriting of existing keys. - -#### EXAMPLE - -```bash -btcli wallet create --n_words 21 -``` - -:::tip -This command is for new users setting up their wallet for the first time, or for those who wish to completely renew their wallet keys. It ensures a fresh start with new keys for secure and effective participation in the Bittensor network. -::: - - -**Usage**: - -```bash -btcli wallet create [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--n-words INTEGER` -* `--use-password / --no-use-password`: Set this to `True` to protect the generated Bittensor key with a password. [default: use-password] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### btcli wallet faucet - -Obtain test TAO tokens by performing Proof of Work (PoW). - -This command is useful for users who need test tokens for operations on a local blockchain. - -**IMPORTANT**: THIS COMMAND IS DISABLED ON FINNEY AND TESTNET. - -USAGE - -The command uses the proof-of-work (POW) mechanism to validate the user's effort and rewards them with test TAO tokens. It is -typically used in local blockchain environments where transactions do not use real TAO tokens. - -#### EXAMPLE - -```bash -btcli wallet faucet --faucet.num_processes 4 --faucet.cuda.use_cuda -``` - -:::tip -This command is meant for used in local environments where users can experiment with the blockchain without using real TAO tokens. Users must have the necessary hardware setup, especially when opting for CUDA-based GPU calculations. It is currently disabled on testnet and mainnet (finney). You can only use this command on a local blockchain. -::: - - -**Usage**: - -```bash -btcli wallet faucet [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--processors INTEGER`: Number of processors to use for proof of work (POW) registration. -* `-u, --update-interval INTEGER`: The number of nonces to process before checking for next block during registration [default: 50000] -* `--output-in-place / --no-output-in-place`: Whether to output the registration statistics in-place. [default: output-in-place] -* `-v, --verbose`: Whether to output the registration statistics verbosely. -* `--use-cuda, --cuda / --no-use-cuda, --no-cuda`: Set flag to use CUDA for proof of work (POW) registration. [default: no-use-cuda] -* `-d, --dev-id INTEGER`: Set the CUDA device id(s) in the order of speed, where 0 is the fastest. [default: 0] -* `-tbp, --threads-per-block INTEGER`: Set the number of threads per block for CUDA. [default: 256] -* `--max-successes INTEGER`: Set the maximum number of times to successfully run the faucet for this command. [default: 3] -* `--help`: Show this message and exit. - -### btcli wallet get-identity - -Shows the identity details of a user's coldkey or hotkey. - -The command displays the information in a table format showing: - -- **Address**: The ``ss58`` address of the queried key. - -- **Item**: Various attributes of the identity such as stake, rank, and trust. - -- **Value**: The corresponding values of the attributes. - -#### EXAMPLE - -```bash -btcli wallet get_identity --key -``` - -:::tip -This command is primarily used for informational purposes and has no side effects on the blockchain network state. -::: - - -**Usage**: - -```bash -btcli wallet get-identity [OPTIONS] -``` - -**Options**: - -* `-k, --key, --ss58 TEXT`: The coldkey or hotkey ss58 address to query. -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### btcli wallet history - -Show the history of the transfers carried out with the provided wallet on the Bittensor network. - -USAGE - -The output shows the latest transfers of the provided wallet, showing the columns 'From', 'To', 'Amount', 'Extrinsic ID' and 'Block Number'. - -#### EXAMPLE - -```bash -btcli wallet history -``` - -**Usage**: - -```bash -btcli wallet history [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### btcli wallet inspect - -Disabled for dynamic TAO. - - - -### btcli wallet list - -Displays all the wallets and their corresponding hotkeys that are located in the wallet path specified in the config. - -The output display shows each wallet and its associated `ss58` addresses for the coldkey public key and any hotkeys. The output is presented in a hierarchical tree format, with each wallet as a root node and any associated hotkeys as child nodes. The `ss58` address is displayed for each coldkey and hotkey that is not encrypted and exists on the device. - -Upon invocation, the command scans the wallet directory and prints a list of all the wallets, indicating whether the -public keys are available (`?` denotes unavailable or encrypted keys). - -#### EXAMPLE - -```bash -btcli wallet list --path ~/.bittensor -``` - -**NOTE**: This command is read-only and does not modify the filesystem or the blockchain state. It is intended for use with the Bittensor CLI to provide a quick overview of the user's wallets. - -**Usage**: - -```bash -btcli wallet list [OPTIONS] -``` - -**Options**: - -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### btcli wallet new-coldkey - -Create a new coldkey. A coldkey is required for holding TAO balances and performing high-value transactions. - -USAGE - -The command creates a new coldkey. It provides options for the mnemonic word count, and supports password protection. It also allows overwriting an existing coldkey. - -#### EXAMPLE - -```bash -btcli wallet new_coldkey --n_words 15 -``` - -:::tip -This command is crucial for users who need to create a new coldkey for enhanced security or as part of setting up a new wallet. It is a foundational step in establishing a secure presence on the Bittensor network. -::: - - -**Usage**: - -```bash -btcli wallet new-coldkey [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--n-words, --n_words INTEGER`: The number of words used in the mnemonic. Options: [12, 15, 18, 21, 24] -* `--use-password / --no-use-password`: Set this to `True` to protect the generated Bittensor key with a password. [default: use-password] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### btcli wallet new-hotkey - -Create a new hotkey for a wallet. - -USAGE - -This command is used to generate a new hotkey for managing a neuron or participating in a subnet. It provides options for the mnemonic word count, and supports password protection. It also allows overwriting the -existing hotkey. - -#### EXAMPLE - -```bash -btcli wallet new-hotkey --n_words 24 -``` - -:::tip -This command is useful to create additional hotkeys for different purposes, such as running multiple subnet miners or subnet validators or separating operational roles within the Bittensor network. -::: - - -**Usage**: - -```bash -btcli wallet new-hotkey [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--n-words, --n_words INTEGER`: The number of words used in the mnemonic. Options: [12, 15, 18, 21, 24] -* `--use-password / --no-use-password`: Set to 'True' to protect the generated Bittensor key with a password. [default: no-use-password] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### btcli wallet overview - -Disabled for dynamic TAO. - - - -### btcli wallet regen-coldkey - -Regenerate a coldkey for a wallet on the Bittensor blockchain network. - -This command is used to create a new coldkey from an existing mnemonic, seed, or JSON file. - -USAGE - -Users can specify a mnemonic, a seed string, or a JSON file path to regenerate a coldkey. The command supports optional password protection for the generated key. - -#### EXAMPLE - -```bash -btcli wallet regen-coldkey --mnemonic "word1 word2 ... word12" -``` - - -:::tip -This command is critical for users who need to regenerate their coldkey either for recovery or for security reasons. -::: - - -**Usage**: - -```bash -btcli wallet regen-coldkey [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--mnemonic TEXT`: Mnemonic used to regenerate your key. For example: horse cart dog ... -* `--seed TEXT`: Seed hex string used to regenerate your key. For example: 0x1234... -* `-j, --json TEXT`: Path to a JSON file containing the encrypted key backup. For example, a JSON file from PolkadotJS. -* `--json-password TEXT`: Password to decrypt the JSON file. -* `--use-password / --no-use-password`: Set this to `True` to protect the generated Bittensor key with a password. [default: use-password] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### btcli wallet regen-coldkeypub - -Regenerates the public part of a coldkey (coldkeypub.txt) for a wallet. - -Use this command when you need to move machine for subnet mining. Use the public key or SS58 address from your coldkeypub.txt that you have on another machine to regenerate the coldkeypub.txt on this new machine. - -USAGE - -The command requires either a public key in hexadecimal format or an ``SS58`` address from the existing coldkeypub.txt from old machine to regenerate the coldkeypub on the new machine. - -#### EXAMPLE - -```bash -btcli wallet regen_coldkeypub --ss58_address 5DkQ4... -``` - -:::tip -This command is particularly useful for users who need to regenerate their coldkeypub, perhaps due to file corruption or loss. You will need either ss58 address or public hex key from your old coldkeypub.txt for the wallet. It is a recovery-focused utility that ensures continued access to your wallet functionalities. -::: - - -**Usage**: - -```bash -btcli wallet regen-coldkeypub [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--public-key-hex TEXT`: The public key in hex format. -* `--ss58, --ss58-address TEXT`: The SS58 address of the coldkey. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### btcli wallet regen-hotkey - -Regenerates a hotkey for a wallet. - -Similar to regenerating a coldkey, this command creates a new hotkey from a mnemonic, seed, or JSON file. - -USAGE - -Users can provide a mnemonic, seed string, or a JSON file to regenerate the hotkey. The command supports optional password protection and can overwrite an existing hotkey. - -#### Example usage - -```bash -btcli wallet regen_hotkey --seed 0x1234... -``` - -:::tip -This command is essential for users who need to regenerate their hotkey, possibly for security upgrades or key recovery. It should be used with caution to avoid accidental overwriting of existing keys. -::: - - -**Usage**: - -```bash -btcli wallet regen-hotkey [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--mnemonic TEXT`: Mnemonic used to regenerate your key. For example: horse cart dog ... -* `--seed TEXT`: Seed hex string used to regenerate your key. For example: 0x1234... -* `-j, --json TEXT`: Path to a JSON file containing the encrypted key backup. For example, a JSON file from PolkadotJS. -* `--json-password TEXT`: Password to decrypt the JSON file. -* `--use-password / --no-use-password`: Set to 'True' to protect the generated Bittensor key with a password. [default: no-use-password] -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### btcli wallet set-identity - -Create or update the on-chain identity of a coldkey or a hotkey on the Bittensor network. **Incurs a 1 TAO transaction fee.** - -The on-chain identity includes attributes such as display name, legal name, web URL, PGP fingerprint, and contact information, among others. - -The command prompts the user for the identity attributes and validates the input size for each attribute. It provides an option to update an existing validator hotkey identity. If the user consents to the transaction cost, the identity is updated on the blockchain. - -Each field has a maximum size of 64 bytes. The PGP fingerprint field is an exception and has a maximum size of 20 bytes. The user is prompted to enter the PGP fingerprint as a hex string, which is then converted to bytes. The user is also prompted to enter the coldkey or hotkey ``ss58`` address for the identity to be updated. - -If the user does not have a hotkey, the coldkey address is used by default. If setting a validator identity, the hotkey will be used by default. If the user is setting an identity for a subnet, the coldkey will be used by default. - -#### EXAMPLE - -```bash -btcli wallet set_identity -``` - -:::tip -This command should only be used if the user is willing to incur the a recycle fee associated with setting an identity on the blockchain. It is a high-level command that makes changes to the blockchain state and should not be used programmatically as part of other scripts or applications. -::: - - -**Usage**: - -```bash -btcli wallet set-identity [OPTIONS] -``` - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--display-name, --display TEXT`: The display name for the identity. -* `--legal-name, --legal TEXT`: The legal name for the identity. -* `--web-url, --web TEXT`: The web URL for the identity. -* `--riot-handle, --riot TEXT`: The Riot handle for the identity. -* `--email TEXT`: The email address for the identity. -* `--pgp-fingerprint, --pgp TEXT`: The PGP fingerprint for the identity. -* `--image-url, --image TEXT`: The image URL for the identity. -* `-i, --info TEXT`: The info for the identity. -* `-x, -𝕏, --twitter-url, --twitter TEXT`: The 𝕏 (Twitter) URL for the identity. -* `--validator / --not-validator`: Are you updating a validator hotkey identity? -* `--netuid INTEGER`: Netuid if you are updating identity of a subnet owner -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--help`: Show this message and exit. - -### btcli wallet sign - -Allows users to sign a message with the provided wallet or wallet hotkey. Use this command to easily prove your ownership of a coldkey or a hotkey. - -USAGE - -Using the provided wallet (coldkey), the command generates a signature for a given message. - -EXAMPLES - -```bash -btcli wallet sign --wallet-name default --message '{"something": "here", "timestamp": 1719908486}' -``` - -```bash -btcli wallet sign --wallet-name default --wallet-hotkey hotkey --message '{"something": "here", "timestamp": 1719908486}' -``` - -**Usage**: - -```bash -btcli wallet sign [OPTIONS] -``` - -**Options**: - -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--use-hotkey / --no-use-hotkey`: If specified, the message will be signed by the hotkey. If not specified, the user will be prompted. -* `--message TEXT`: The message to encode and sign -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### btcli wallet swap-hotkey - -Swap hotkeys of a given wallet on the blockchain. For a registered key pair, for example, a (coldkeyA, hotkeyA) pair, this command swaps the hotkeyA with a new, unregistered, hotkeyB to move the original registration to the (coldkeyA, hotkeyB) pair. - -USAGE - -The command is used to swap the hotkey of a wallet for another hotkey on that same wallet. - -IMPORTANT - -- Make sure that your original key pair (coldkeyA, hotkeyA) is already registered. -- Make sure that you use a newly created hotkeyB in this command. A hotkeyB that is already registered cannot be used in this command. -- Finally, note that this command requires a fee of 1 TAO for recycling and this fee is taken from your wallet (coldkeyA). - -#### EXAMPLE - -```bash -btcli wallet swap_hotkey destination_hotkey_name --wallet-name your_wallet_name --wallet-hotkey original_hotkey -``` - -**Usage**: - -```bash -btcli wallet swap-hotkey [OPTIONS] [DESTINATION_HOTKEY_NAME] -``` - -**Arguments**: - -* `[DESTINATION_HOTKEY_NAME]`: Destination hotkey name. - -**Options**: - -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--prompt, --prompt / -y, --no-prompt, --yes, --no_prompt`: Enable or disable interactive prompts. [default: prompt] -* `--help`: Show this message and exit. - -### btcli wallet transfer - -Disabled for dynamic TAO. - - - -## btcli weights - -**Usage**: - -```bash -btcli weights [OPTIONS] COMMAND [ARGS]... -``` - -**Options**: - -* `--help`: Show this message and exit. - - -### btcli weights commit - -Commit weights for specific subnet. - -Use this command to commit weights for a specific subnet. You must specify the netuid, the UIDs you are interested in, and the weights you wish to commit. - -#### EXAMPLE - -```bash -btcli wt commit --netuid 1 --uids 1,2,3,4 --w 0.1,0.2,0.3 -``` - -:::tip -This command is used to commit weights for a specific subnet and requires the user to have the necessary permissions. -::: - - -**Usage**: - -```bash -btcli weights commit [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--netuid INTEGER`: The netuid of the subnet in the root network, (e.g. 1). -* `-u, --uids TEXT`: UIDs of interest for the specified netuid, e.g. -u 1,2,3 ... -* `-w, --weights TEXT`: Weights for the specified UIDs, e.g. `-w 0.2,0.4,0.1 ...` Must correspond to the order of the UIDs. -* `-s, --salt TEXT`: Corresponding salt for the hash function, e.g. -s 163 -s 241 -s 217 ... -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. - -### btcli weights reveal - -Reveal weights for a specific subnet. - -You must specify the netuid, the UIDs you are interested in, and weights you wish to reveal. - -#### EXAMPLE - -```bash -btcli wt reveal --netuid 1 --uids 1,2,3,4 --weights 0.1,0.2,0.3,0.4 --salt 163,241,217,11,161,142,147,189 -``` - -**Usage**: - -```bash -btcli weights reveal [OPTIONS] -``` - -**Options**: - -* `--network, --subtensor.network, --chain, --subtensor.chain_endpoint TEXT`: The subtensor network to connect to. Default: finney. -* `--wallet-name, --name, --wallet_name, --wallet.name TEXT`: Name of the wallet. -* `-p, --wallet-path, --wallet_path, --wallet.path TEXT`: Path where the wallets are located. For example: `/Users/btuser/.bittensor/wallets`. -* `-H, --hotkey, --wallet_hotkey, --wallet-hotkey, --wallet.hotkey TEXT`: Hotkey of the wallet -* `--netuid INTEGER`: The netuid of the subnet in the root network, (e.g. 1). -* `-u, --uids TEXT`: Corresponding UIDs for the specified netuid, e.g. -u 1,2,3 ... -* `-w, --weights TEXT`: Weights for the specified UIDs, e.g. `-w 0.2,0.4,0.1 ...` Must correspond to the order of the UIDs. -* `-s, --salt TEXT`: Corresponding salt for the hash function, e.g. -s 163,241,217 ... -* `--quiet`: Display only critical information on the console. -* `--verbose`: Enable verbose output. -* `--help`: Show this message and exit. diff --git a/docs/dynamic-tao/_dtao_cruft.md b/docs/dynamic-tao/_dtao_cruft.md deleted file mode 100644 index 6d66778a03..0000000000 --- a/docs/dynamic-tao/_dtao_cruft.md +++ /dev/null @@ -1,330 +0,0 @@ - -### Example - -Consider the following subnets: - -#### Case 1: Sum of alpha prices greater than 1 - -1. Gaming Subnet: - - TAO reserve (τ_in): 10,000 TAO - - Alpha reserve (α_in): 8,000 Alpha - - Alpha outstanding (α_out): 50,000 Alpha - - Hence alpha price = $$ R = \frac{\tau_{in}}{\alpha_{in}} = \frac{10000}{8000} = 1.25 $$ - -2. AI Subnet: - - TAO reserve (τ_in): 15,000 TAO - - Alpha reserve (α_in): 15,000 Alpha - - Alpha outstanding (α_out): 80,000 Alpha - - Hence alpha price = $$ R = \frac{\tau_{in}}{\alpha_{in}} = \frac{15000}{15000} = 1.0 $$ - -3. Storage Subnet: - - TAO reserve (τ_in): 5,000 TAO - - Alpha reserve (α_in): 10,000 Alpha - - Alpha outstanding (α_out): 30,000 Alpha - - Hence alpha price = $$ R = \frac{\tau_{in}}{\alpha_{in}} = \frac{5000}{10000} = 0.5 $$ - -Hence, sum of all alpha prices $$ = 1.25 + 1.0 + 0.5 = 2.75 \gt 1.0 $$ - -As a result, the emissions to the subnets are as follows: - -1. Emissions to the Gaming Subnet: - - Emission into TAO reserve (τ_in): 0 TAO - - Emission into alpha reserve (α_in): 1.0 Alpha - - Emission into alpha outstanding (α_out): 1.0 Alpha - -2. Emissions to the AI Subnet: - - Emission into TAO reserve (τ_in): 0 TAO - - Emission into alpha reserve (α_in): 1.0 Alpha - - Emission into alpha outstanding (α_out): 1.0 Alpha - -3. Emissions to the Storage Subnet: - - Emission into TAO reserve (τ_in): 0 TAO - - Emission into alpha reserve (α_in): 1.0 Alpha - - Emission into alpha outstanding (α_out): 1.0 Alpha - -#### Case 2: Sum of alpha prices less than 1 - -Let's change the state of the subnets to the below: - -1. Gaming Subnet: - - TAO reserve (τ_in): 10,000 TAO - - Alpha reserve (α_in): **40,000** Alpha - - Alpha outstanding (α_out): 50,000 Alpha - - Hence alpha price = $$ R = \frac{\tau_{in}}{\alpha_{in}} = \frac{10000}{40000} = 0.25 $$ - -2. AI Subnet: - - TAO reserve (τ_in): 15,000 TAO - - Alpha reserve (α_in): **50,000** Alpha - - Alpha outstanding (α_out): 80,000 Alpha - - Hence alpha price = $$ R = \frac{\tau_{in}}{\alpha_{in}} = \frac{15000}{50000} = 0.3 $$ - -3. Storage Subnet: - - TAO reserve (τ_in): 5,000 TAO - - Alpha reserve (α_in): **25,000** Alpha - - Alpha outstanding (α_out): 30,000 Alpha - - Hence alpha price = $$ R = \frac{\tau_{in}}{\alpha_{in}} = \frac{5000}{25000} = 0.2 $$ - -Hence, sum of all alpha prices $$ = 0.25 + 0.3 + 0.2 = 0.75 \lt 1.0 $$ - -As a result, the emissions to the subnets are as follows: - -1. Total TAO reserves across all 3 subnets: 10,000 + 15,000 + 5,000 = 30,000 TAO -2. Emissions to the Gaming Subnet: - - Emission into TAO reserve (τ_in): $$\; \frac{10,000}{30,000} = 0.3333 \text{ TAO}$$ - - Emission into alpha reserve (α_in): 0 Alpha - - Emission into alpha outstanding (α_out): 1.0 Alpha - - New $k$ = (10,000 + 0.3333) × 40,000 = 400,013,320 - -3. Emissions to the AI Subnet: - - Emission into TAO reserve (τ_in): $$\; \frac{15,000}{30,000} = 0.5 \text{ TAO}$$ - - Emission into alpha reserve (α_in): 0 Alpha - - Emission into alpha outstanding (α_out): 1.0 Alpha - - New $k$ = (15,000 + 0.5) × 50,000 = 750,025,000 - -4. Emissions to the Storage Subnet: - - Emission into TAO reserve (τ_in): $$\; \frac{5,000}{30,000} = 0.1667 \text{ TAO}$$ - - Emission into alpha reserve (α_in): 0 Alpha - - Emission into alpha outstanding (α_out): 1.0 Alpha - - New $k$ = (5,000 + 0.1667) × 25,000 = 125,004,175 - -- Note that all the TAO emissions in the block sum to 1.0 (0.3333 + 0.5 + 0.1667). -- Also note that the emissions change the constant product $k$ for each subnet. - - -### Emission (alpha) - -Represents the portion of the one $\alpha$ per block emission into a subnet that is received by this hotkey in this subnet, according to YC2 in the subnet. This can change every block. - -:::caution Subnet zero does not receive any emissions -Subnet zero does not receive any emissions, either of TAO or $\alpha$. This is consistent with the fact that subnet zero does not have a pool associated with it. -::: - -### Emission (TAO) - -Shows how a fraction of the one τ per block emission is distributed among all the subnet pools. For each subnet, this fraction is first calculated by dividing the subnet's TAO Pool (τ_in) by the sum of all TAO Pool (τ_in) across all the subnets. This fraction is then added to the TAO Pool (τ_in) of the subnet. This can change every block. - -:::caution Subnet zero does not receive any emissions -Subnet zero does not receive any emissions, either of TAO or $\alpha$. This is consistent with the fact that subnet zero does not have a pool associated with it. -::: - ---- - - -## Tempo - -The tempo status of the subnet. Represented as $$\frac{k}{n}$$ where "k" is the number of blocks elapsed since the last tempo and "n" is the total number of blocks in the tempo. The number "n" is a subnet hyperparameter and does not change every block. - ---- - - -## Slippage -## Exchange Value - -This is the potential instantaneous TAO you will receive, without considering slippage, if you [unstake](#unstaking) at this instant from this hotkey on this subnet. See [Swap](#swap) description. This can change every block. - -:::tip Compare with TAO Equiv -Whereas the [TAO Equiv](#local-weight-or-tao-equiv) indicates a validator's local stake weight, this Exchange Value shows TAO you will receive if you unstake now. -::: - -## Swap - -This is the actual τ you will receive, after subtracting in the slippage charge, if you unstake from this hotkey now on this subnet. The slippage is calculated as: - -$$ -\text{Slippage} = 1 - \frac{\text{Swap(α → τ)}}{\text{Exchange Value}(α \times τ/α)} -$$ - -This can change every block. - ---- - -:::danger The Emissions section is preliminary -The below Emissions section is still not settled yet. Proceed with caution. -::: - - - -### Constant product k - -The subnet pool algorithm is set up to always maintain a **constant product** $k$ of the two reserves. That is, - -$$ -k = \text{(TAO reserves)}\times\text{(α reserves)} -$$ - -Anytime either of the reserves **increases**, for example as a result of a random external action such as some stake TAO entering the pool, the subnet pool algorithm automatically recalculates, using the new reserves, how much the other reserve should **decrease** in order to maintain the same constant product $$k$$. - -:::tip Staking and unstaking do not change the constant product -Staking and unstaking operations do not change the constant product $k$, but result in **slippage** due to the fact that these are exchange (i.e., swap) operations. On the contrary, emissions into a subnet pool do change the constant product $k$ but do not result in slippage, due to the fact that these are not swap operations. See [Slippage](#slippage). Also see [Emissions](#emissions). -::: - -### Slippage - -When we stake we exchange TAO for the alpha token in the pool. The following occurs while we stake: -1. Prior to the staking operation, we know the expected price of the alpha token. This expected price is the reserve ratio, as described in [Rate](#rate-τ_inα_in), prior to the staking operation. -2. However, the very action of our staking changes the token reserve ratio, because we are adding TAO to the TAO reserves. -3. Mathematically the pool is required to maintain the constant product $k$. As a result, the pool algorithm automatically adjusts the alpha token reserves to keep the constant product $k$ unchanged. This results in a change in the reserve ratio. -4. This means that the actual price at which our staking operation is executed is different from our original expected price of the alpha token. This difference between the original expected alpha token price and the actual actual token price at which staking operation is performed is called **slippage**. - -### Example - -As described in the [Staking](#staking) section, a staking event results in the staked TAO being added to the τ_in reserves of the subnet pool. The subnet pool algorithm calculates the number of units by which the $\alpha_{in}$ reserves should decrease. These units are then taken out of the $\alpha_{in}$ reserves and sent to the validator’s hotkey in the subnet. See an example below. - -The below example shows how staking 5 TAO works. - -Let us assume the following initial state of TAO and $\alpha$ reserves in a subnet: -- TAO reserves: 10 TAO tokens -- $\alpha$ reserves: 100 $\alpha$ tokens - -Hence, the constant product 𝑘 = 10 × 100 =1000. - -**Without slippage** - -- Expected price of $$\alpha$$ token: - -$$ -= \frac{\text{TAO reserves}}{\text{α reserves}} = \frac{10}{100} = \text{0.1 TAO per α} -$$ - -- Hence, the expected number of α tokens: - -$$ -\text{} = \frac{\text{TAO staked}}{\text{Expected α price}} = \frac{5}{0.1} = \text{50 α tokens} -$$ - -**With slippage** - -- **Initial relative price** of $\alpha$ is = reserve ratio of subnet pool $\alpha$ = (TAO token reserves of pool $\alpha$)/($\alpha$ token reserves) = 10/100 = 0.1 TAO. -- Stake 5 TAO: This adds 5 TAO into the TAO reserves of the pool. Hence, the new TAO reserve = 10 + 5 = 15 TAO tokens. -- Using the new TAO reserve of 15, the subnet pool algorithm calculates what should be the new $\alpha$ reserves, in order to maintain k at 1000. -- Calculating: -$$ -\begin{split} -& 15 \times\text{new α reserves} = 1000\\ -\implies & \text{new α reserves} = 1000/15 = 66.667 \text{ α}. -\end{split} -$$ - -- Hence, the $\alpha$ that is **taken out of** the $α_{in}$ reserve and sent to the validator’s hotkey is: -$$ -\text{Stake in α tokens} = 100 − 66.67 = 33.33 \text{ α} -$$ - -Hence, when you stake 5 TAO, your stake is $$33.33 \text{ α}$$, taking into account the slippage. As a result: - -- Slippage in terms of $$\alpha$$ tokens: - -$$ -\begin{split} -\text{Slippage} & = \text{Expected α tokens} - \text{Actual α tokens obtained}\\ -& = 50-33.33 = 16.6667 α -\end{split} -$$ - -- The percentage of slippage: - -$$ -\begin{split} -\text{Percentage slippage} & = \frac{\text{Slippage α tokens}}{\text{Expected α tokens}}\times 100\% \\ -& = \frac{16.6667}{50}\times 100\% \\ -& = 33.333\% -\end{split} -$$ - -### Effect of slippage - -- TAO reserves: 15 tokens -- $\alpha$ reserves: 66.67 $\alpha$ tokens -- Constant product 𝑘 = 15 × 66.67 = 1000 (unchanged) -- **New relative price** of $\alpha$ after the staking event = reserve ratio of subnet pool $\alpha$ = (TAO token reserves of pool $\alpha$)/($\alpha$ token reserves) = 15/66.67 = 0.225 TAO. -- **Price impact due to slippage**: As a result of the slippage, staking 5 TAO into subnet $\alpha$ changed the relative price of $\alpha$ token: it **increased** from 0.1 TAO to 0.225 TAO. All else being equal, slippage leads to an increase in $\alpha$ token's relative price when we stake. - - - - -The below example shows how unstaking 20 $\alpha$ works. Let’s continue with the state of the TAO and $\alpha$ reserves after the [above staking operation](#example-1): - -- TAO reserves: 15 tokens -- $\alpha$ reserves: 66.67 $\alpha$ tokens -- Constant product 𝑘 = 15 × 66.67 = 1000 - -**Without slippage** - -:::tip Don't know what slippage is? -See [Slippage](#slippage) if you are not familiar with it. -::: - -- Expected price of $$\alpha$$ token before unstaking: - -$$ -= \frac{\text{TAO reserves}}{\text{α reserves}} = \frac{15}{66.667} = \text{0.225 TAO per α} -$$ - -- Hence, the expected number of TAO tokens: - -$$ -\begin{split} -\text{} & = \text{α unstaked}\times{\text{Expected α price}}\\ -& = 20\times0.225 \\ -&= \text{4.5 TAO tokens} -\end{split} -$$ - - -**With slippage** - -- Relative price $\alpha$ is = reserve ratio of subnet pool $\alpha$ = (TAO token reserves of pool $\alpha$)/($\alpha$ token reserves) = 15/66.67 = 0.225 TAO (same as the relative price after the above staking operation) -- Unstake 20 $\alpha$: This adds 20 $\alpha$ to the $\alpha$ side of the pool. New $\alpha$ reserves = 66.67 + 20 = 86.67 $\alpha$ tokens. -- Using the new $\alpha$ reserve of 86.67, the subnet pool algorithm calculates what should be the new TAO reserve in order to maintain $k$ at 1000. -- Calculating: - -$$ -\begin{split} -& 86.67 \times\text{new TAO reserves} = 1000\\ -\implies & \text{new TAO reserves} = 1000/86.67 = 11.54 \text{ TAO} -\end{split} -$$ - -- Hence, the TAO that is taken out of the TAO reserves of the pool and sent to the TAO holder’s coldkey is: 15 − 11.54 = 3.46 TAO. -$$ -\text{Unstaked TAO tokens} = 15 − 11.54 = 3.46 \text{ TAO} -$$ - -Hence, when you unstake 20 $$\text{α}$$, your unstaked TAO is $$3.46 \text{ TAO}$$, taking into account the slippage. As a result: - -- Slippage in terms of TAO tokens: - -$$ -\begin{split} -\text{Slippage} & = \text{Expected TAO tokens} - \text{Actual TAO tokens obtained}\\ -& = 4.5-3.46 = 1.04\text{ TAO} -\end{split} -$$ - -- The percentage of slippage: - -$$ -\begin{split} -\text{Percentage slippage} & = \frac{\text{Slippage TAO tokens}}{\text{Expected TAO tokens}}\times 100\% \\ -& = \frac{1.04}{4.5}\times 100\% \\ -& = 23.1\% -\end{split} -$$ - -### Effect of slippage - -- TAO reserves: 11.54 TAO tokens -- $\alpha$ reserves: 86.67 $\alpha$ tokens -- Constant product 𝑘 = 11.54 × 66.67 = 1000 (unchanged) -- **New relative price** of $\alpha$ after the unstaking event = reserve ratio of subnet pool $\alpha$ = (TAO token reserves of pool $\alpha$)/($\alpha$ token reserves) = 11.54/86.67 = 0.133 TAO per $\alpha$. -- **Price impact due to slippage**: As a result of slippage, unstaking 20 $\alpha$ changed the $\alpha$ price: it **decreased** from 0.225 TAO to 0.113 TAO. All else being equal, unstaking from a subnet leads to a decrease in its $\alpha$ token's relative price. - ---- - - -### Constant product vs. relative price - -The constant product $k$ is a critical concept to understand how the relative price of an alpha token works. See the following: - - A subnet pool algorithm operates purely on the basis of maintaining the constant product $k$. The pool algorithm does not have any built-in mechanism to either target or maintain specific prices for the alpha tokens of a subnet. - - The relative price of an alpha token is only **indirectly** determined by the ratio of the token reserves. Furthermore, controlling these relative prices is **not the goal of the pool algorithm**. - - Hence, the relative price of a token **is a result, not a target,** of the token exchange activity. \ No newline at end of file diff --git a/docs/dynamic-tao/_weights-dtao.md b/docs/dynamic-tao/_weights-dtao.md deleted file mode 100644 index f9a2df7504..0000000000 --- a/docs/dynamic-tao/_weights-dtao.md +++ /dev/null @@ -1,250 +0,0 @@ ---- -title: "Governance in Dynamic TAO" ---- - - -## Governance and voting - -Dynamic TAO also incorporates the consensus/voting function of subnet validators into the mechanism of their alpha token stake holdings ??? - - -## Local weight or TAO Equiv - -A hotkey's stake, i.e., [stake(α)](#staking), represents subnet-specific stake. As a result, a [hotkey's stake share](#hotkeys-stake-share) can only represent the validator's staking power **within the subnet**. Moreover, an $\alpha$ token of a subnet is not fungible with an $\alpha$ token of another subnet. For this very reason, when a hotkey is validating in multiple subnets, the hotkey's stake share in one subnet cannot be simply added to the same hotkey's stake share in a different subnet. - -This is where the TAO-equivalent value of the hotkeys stake share (α / α_out) comes into play. As we saw in the [Staking](#staking) section, any TAO staked into a subnet is added to the TAO reserves of the subnet pool, i.e., added to τ_in. Similarly any TAO unstaked from a subnet is removed from the TAO reserves of the subnet pool. As a consequence, τ_in reserve represents the total voting power of the subnet as a whole. Hence, - -$$ -\text{a subnet's total voting power}\times\text{hotkey's stake share in the subnet} -$$ - -represents the **hotkey's local voting power proportional to its stake share in the subnet**. It is calculated as: - -$$ -\tau_{in}\times\text{hotkey's stake share} = \tau_{in}\times\frac{\alpha}{\alpha_{out}} -$$ - -and is expressed in TAO units. This can change every block. - -:::caution Local voting power is also referred as local weight -This local voting power or local weight represents the hotkey's influence in the subnet. -::: - -### Example - -For example, for a validator's hotkey in a given subnet: - -- Total outstanding alpha (α_out) = 30,000 alpha tokens. -- The hotkey's alpha stake ($\alpha$) = 6,000 alpha tokens. -- TAO reserve in the subnet's pool (τ_in) = 5,000 TAO. - -- Then, this validator's hotkey stake share = (6,000/30,000) = 0.2 or 20%. -- Hence, this validator hotkey's local voting power, i.e., **local weight** = τ_in x hotkey's stake share = 5000 x 0.2 = 1000 TAO. - -:::tip Stake share → TAO-denominated voting power -Hence, while the hotkey's stake share in this subnet is 20%, its actual local weight (local voting power) in the subnet is 1,000 TAO units. This is the power of Dynamic TAO mechanism. It converts a hotkey's alpha stake share into an equivalent TAO-denominated voting power in the subnet. This makes alpha stakes comparable across different subnets, even though these subnets might have very different amounts of alpha tokens outstanding. -::: - - -## Global weight - -Global weight of a validator hotkey is the sum of the [local weights](#local-weight-or-tao-equiv) for all the subnets, including subnet zero, where this hotkey is validating. - -### Example - -Let's say that a validator's hotkey has the following positions in four different subnets, including in subnet zero. - -- Subnet zero: - - validator's stake: 1000 TAO - - validator's stake share: 10% (i.e., out of all TAO stake in subnet zero, this validator holds 10% of it) -- Gaming subnet: - - validator's [stake share](#hotkeys-stake-share) = (α / α_out) = 30% - - τ_in in this subnet pool = 10,000 TAO - -- AI subnet: - - validator's [stake share](#hotkeys-stake-share) = (α / α_out) = 40% - - τ_in in this subnet pool = 15,000 TAO - -- Storage subnet: - - validator's [stake share](#hotkeys-stake-share) = (α / α_out) = 20% - - τ_in in this subnet pool = 5,000 TAO - -Hence, the [local weights, or local voting power](#local-weight-or-tao-equiv) of this hotkey in each subnet are as below: - -- For subnet zero: 1000 TAO (TAO number used as is, without any multiplier, see [subnet zero](#subnet-zero)) -- Gaming subnet: $$\tau_{in}\times\text{hotkey's stake share}$$ = 0.30 × 10,000 = 3,000 TAO -- Similarly, for AI subnet: 0.40 × 15,000 = 6,000 TAO -- For Storage subnet: 0.20 × 5,000 = 1,000 TAO - -Hence the global weight of this hotkey is: 1000 + 3000 + 6000 + 1000 = 11,000 TAO. - -### Root weight - -Notice that in the above calculation, we used the hotkey's subnet zero stake of 1000 TAO as it is while calculating the global weight of the hotkey. However, in Dynamic TAO it is normal to multiply the subnet zero stake TAO number by a factor called `root_weight` that varies from 0 to 1. - -Hence, for `root_weight` of 0.5, the subnet zero stake of the hotkey will now be `root_weight` x 1000 = 0.5 x 1000 = 500 TAO. Hence, under this condition, the updated global weight of this hotkey is: 500 + 3000 + 6000 + 1000 = 10,500 TAO. - -### Global weight vs. local weight - -The two quantities defined above for a validator hotkey, i.e., the hotkey's global weight (across all subnets where it is validating) and its local weight (per subnet), are critically important. - -:::caution global weight appears in every subnet -In addition to the local weight of a hotkey in a subnet, this hotkey's global weight also appears in this subnet. This is why global weight of a validator's hotkey is critical. -::: - -Note that in the above, **both local weight and global weight of a hotkey are expressed in TAO units.** However, to represent a validator hotkey's overall stake weight in a subnet, instead of using the two individual TAO units (one for global weight and second for local weight), a new quantity called [**validator's stake weight in a subnet**](#validator-stake-weight), is defined as follows: -- The local weight of a hotkey is normalized with respect to the sum of all the local weights of all other hotkeys in this subnet, so that they all sum to 1.0. This normalized local weight represents the hotkey's relative proportion of its **influence in the subnet**. -- Similarly the global weight of the hotkey is normalized with respect to the sum of all the global weights of all other hotkeys for the subnets in question, to sum to 1.0. This normalized global weight represents the hotkey's relative proportion of its **influence in the subnets in question**. - - -## Validator stake weight - -A validator hotkey's stake weight is defined for a subnet. It varies from 0 to 1. It is defined as the sum of the hotkey's normalized global and local weights, as follows: - -For any subnet $i$, the validator hotkey's stake weight is: - -$$ -\begin{split} -& = \text{(global\_split}\times\text{normalized global weight)} + \text{(1-global\_split}\times\text{normalized local weight)}\\\\ -& = \text{global\_split}\times\frac{\text{hotkey's global weight}}{\text{sum of all global weights of all hotkeys in the subnets in question}}\\ \\ -& + \text{ (1-global\_split)}\times\frac{\text{hotkey's local weight}}{\text{sum of all local weights in the subnet}} -\end{split} -$$ - -### Global split - -A parameter called `global_split`, which varies between 0 and 1, controls the balance between the normalized global and local weights. In effect, the `global_split` parameter controls the balance between the validator hotkeys local and global influence. - -:::tip Why global stake matters -Also see [Why global stake matters](#why-global-stake-matters). -::: - -### Example - -We will use the example from [Global weight](#global-weight) section and extend it to show the validator stake weight. - -#### Assumptions - -- Assume `root_weight` is 0.5. - -- Subnet zero: - - Total TAO outstanding = 10,000 TAO (this is the total TAO stake held by all the hotkeys in subnet zero) - - Hence, sum of all global weights in subnet zero = 10,000 TAO - - Validator's stake share = 10% × 10,000 = 1,000 TAO (also calculated in the above example) - -- Gaming Subnet: - - Assume total α_out = 50,000 $\alpha$ - - Validator's stake share = 30% × 50,000 = 15,000 $\alpha$ - - TAO reserve = 10,000 τ - - TAO reserve is also the sum of all global weights in this gaming subnet = 10,000 TAO - - Local weight = (15,000/50,000) × 10,000 = 3,000 τ (also calculated in the above example) - -- AI Subnet: - - Assume total α_out = 80,000 $\alpha$ - - Validator's stake share = 40% × 80,000 = 32,000 $\alpha$ - - TAO reserve = 15,000 τ - - TAO reserve is also the sum of all global weights in this AI subnet = 15,000 TAO - - Local weight = (32,000/80,000) × 15,000 = 6,000 τ (also calculated in the above example) - -- Storage Subnet: - - Assume total α_out = 30,000 $\alpha$ - - Validator's stake share = 20% × 30,000 = 6,000 $\alpha$ - - TAO reserve = 5,000 τ - - TAO reserve is also the sum of all global weights in this storage subnet = 5,000 TAO - - Local weight = (6,000/30,000) × 5,000 = 1,000 τ (also calculated in the above example) - -Hence, sum of all global weights in the all the above subnets is = (`root_weight` x subnet zero's total global weight) + sum of all global weights in gaming subnet + sum of all global weights in AI subnet + sum of all global weights in storage subnet - -= (0.5 x 10,000) + 10,000 + 15,000 + 5,000 -= 35,000 TAO. This is the global weights in all the subnets where this validator's hotkey is validating. - -#### Validator stake weight for each subnet - -- Hotkey's global weight = 10,500 TAO (from the above [Root weight](#root-weight) section). -- Total global subnet weights = 35,000 TAO (from above). -- Assume `global_split` is 0.3. - - -1. Gaming Subnet: - - - Local weight of the hotkey: 3000 TAO (from the above example) - - Sum of all local weights in this subnet = TAO reserve = 10,000 TAO - - Hence, the validator's stake weight in this gaming subnet = 0.3 × (10,500/35,000) + 0.7 × (3,000/10,000) - = 0.3 × 0.30 + 0.7 × 0.30 - = 0.09 + 0.21 - = 0.30 (30% influence in the gaming subnet) - -2. AI Subnet: - - Local weight of the hotkey: 6000 TAO (from the above example) - - Sum of all local weights in this subnet = TAO reserve = 15,000 TAO - - Hence, the validator's stake weight in this AI subnet = 0.3 × (10,500/35,000) + 0.7 × (6,000/15,000) - = 0.3 × 0.30 + 0.7 × 0.40 - = 0.09 + 0.28 - = 0.37 (37% influence in the AI subnet) - -3. Storage Subnet: - - Local weight of the hotkey: 1000 TAO (from the above example) - - Sum of all local weights in this subnet = TAO reserve = 5,000 TAO - - Hence, the validator's stake weight in this storage subnet = 0.3 × (10,500/35,000) + 0.7 × (1,000/5,000) - = 0.3 × 0.30 + 0.7 × 0.20 - = 0.09 + 0.14 - = 0.23 (23% influence in the storage subnet) - -4. Subnet zero: (special case - only local weight matters) - - Validator's stake weight = 1,000/10,000 = 0.10 (10% influence in the subnet zero) - - -## Intuitions of Dynamic TAO - -This section presents a summary of intuitions about Dynamic TAO. It is intended to help in conceptually grasping the Dynamic TAO mechanism. - - -### TAO and alpha - -- The entire TAO token emitted from the coinbase in the lifetime of Bittensor network exists: - - In coldkeys: In a TAO holder’s own coldkeys, for example, as subnet zero emissions into a subnet owner’s coldkey, and in exchange-owned coldkeys. - - In subnet zero hotkeys: In the validator hotkeys of subnet zero as staked TAO and dividends. - - In TAO reserves of subnet pools. - - TAO exists nowhere else. - - Furthermore, for the Bittensor network operations, only staked TAO matters, i.e., only the staked TAO in the validator hotkeys and in TAO reserves act as fuel in the Bittensor network operations. This means that for any discussions on consensus power, only the sum total of the entire staked TAO is considered—the TAO that is in the coldkeys or in exchanges does not contribute directly to Bittensor network operations. -- Similarly, the entire $\alpha$ token emitted from the coinbase in the lifetime of Bittensor network exists as follows: - - **An $\alpha$ token does not exist in a coldkey**. It only exists in the hotkeys of subnet validators, subnet miners and subnet owners. - - In the subnet pool reserves. - - A $\alpha$ token of one subnet is not fungible with a $\alpha$ token of another subnet. - - -### Pool reserves - -- No one directly owns the subnet pool reserves. These reserves exist to provide liquidity to the subnet pools. -- However, as we saw in [Local weights vs TAO reserve](#local-weights-vs-tao-reserve) , a validator who holds X% of the $\alpha$ stake in a subnet is said to own the same X% of the TAO reserve pool of that subnet. -- In Dynamic TAO the sum of α_in (also called alpha reserve) and α_out (all the alpha stake in the subnet) is treated as the the sum total of all alpha. **This is not not strictly true.** This sum total only represents the alpha associated with staking and unstaking. There is the another source of alpha, which is the emissions alpha. This emissions alpha is awarded to validators, subnet owners and miners. -- More important, these emissions alpha bypasses the subnet pool and gets into the subnet directly from the coinbase. Furthermore, the only way for this emissions alpha to come out of the subnet is via unstaking, even though they did not participate in staking. - - -### Why global stake matters - -When a validator’s stake is global it protects the Bittensor network much better. It does so by making it hard for a rogue validator (or for a cabal of rogue validators) to acquire 51% of the consensus voting power. Here is a simple example showing how it works: - -Let's say we have 52 subnets and hypothetically a total 52,000 staked TAO tokens distributed amongst all the validators across these 52 subnets. - - -
- -
- -
- -- When the stake is global, every validator’s stake is 100% global, hence every validator’s stake will appear in every subnet. A rogue validator would have to hold at least 51% of the total staked TAO, i.e., at least 26,500 TAO (51% of 52,000 TAO), to take control of the consensus power. This consensus power would appear in every subnet, giving the rogue validator a control over all the subnets. - -- Let’s now make stake 100% local. This means that only the stake the validator has in a subnet is applicable for that subnet. This validator's stake in other subnets is not taken into account in this subnet. For simplicity, assume that all the validators’ stake is evenly spread among these 52 subnets. Then each subnet will have 1000 TAO tokens (52,000/52) as a combined stake of its validators. - -- **But notice this**: In this case, when the stake is 100% local, a validator in a subnet only needs 500 TAO tokens + 1 to take over that subnet. Hence shifting stake from 100% global to 100% local has resulted in severely degrading the security of subnets. - -As we saw in [Validator stake weight](#validator-stake-weight), the Dynamic TAO scheme makes use of both global and local characteristics of the stake to strengthen the overall consensus security of the Bittensor network. diff --git a/docs/dynamic-tao/dtao-faq.md b/docs/dynamic-tao/dtao-faq.md index 0d5bb9f96e..a33a03942a 100644 --- a/docs/dynamic-tao/dtao-faq.md +++ b/docs/dynamic-tao/dtao-faq.md @@ -1,45 +1,15 @@ --- title: "Dynamic TAO FAQ" ---- +--- + import ThemedImage from '@theme/ThemedImage'; import useBaseUrl from '@docusaurus/useBaseUrl'; -## Timing / Rollout - -### What is the rollout timeline for Dyanmic TAO? What determines the timing? - -Dynamic TAO was introduced by proposal, approved by senate vote, and deployed as an upgrade to Bittensor main network on February 13, 2025 after a year of research, development, and testing. - -Any subsequent modifications require a new proposal to be introduced to a new upgrade following the same process. - -### How will Dynamic TAO take effect? - -The state of the network as far as ledger balances and consensus power will not change immediately upon upgrade; it will occur gradually as subnet specific alpha tokens are emitted and staked into circulation. - -In Dynamic TAO, validator *weight*—a critical score that determines consensus power as well as the allocation of emissions—is determined by a combination of TAO and alpha token holdings. When Dynamic TAO is initiated, there will be no alpha in circulation, so validator's stake weights will be entirely determined by their share of TAO stake. - -But far more alpha than TAO is emitted into circulation every block. As a result, over time there will be more alpha relative to TAO in overall circulation, and the relative weight of a validator in a given subnet will depend more on their alpha stake share relative to their share of the TAO stake on Subnet Zero. - -In order to hasten the process of alpha gaining the majority of stake power in the network, the contribution of TAO stake to validator stake weight is reduced by a global parameter called *TAO weight*. Currently, this is planned to be **18%**, in order to achieve a weight parity between TAO and total alpha in approximately 100 days. - -See [Emissions](../emissions.md) - -
- -
- -
+## General ### Will there be a cap on alpha currency? -Yes. There is a hard cap of 21 million for any subnet's alpha token, the same as for TAO itself. Alpha tokens follow a halving schedule as well. +Yes. There is a hard cap of 21 million for any subnet's alpha token, the same as for TAO itself. Alpha tokens follow a halving schedule as well. At the time of writing, 2 alpha tokens per subnet will be emitted each block, while only 1 TAO is emitted and shared across the whole network. @@ -49,23 +19,23 @@ At the time of writing, 2 alpha tokens per subnet will be emitted each block, wh Instead of staking TAO to a validator, in Dynamic TAO, you stake to a validator on a specific subnet. This can be either a mining subnet (most subnets) or the unique root subnet, a.k.a. Subnet Zero. -- When you stake on a mining subnet, you exchange TAO for a dynamic token, the *alpha* of the subnet on which the validator is working, and stake that into the validator's hotkey. +- When you stake on a mining subnet, you exchange TAO for a dynamic token, the _alpha_ of the subnet on which the validator is working, and stake that into the validator's hotkey. - When you stake on the root subnet, you stake TAO for TAO. Your emissions are TAO. ### What is the risk/reward profile of staking into a subnet? -Each new subnet has its own token, referred to as its alpha. When you stake into a validator within a given subnet, you exchange TAO for that subnet's alpha. When you unstake from the validator in that subnet, you exchange the alpha for TAO. Staking and unstaking is therefore sensitive to the price of the alpha. This price of a subnet's alpha is the ratio of TAO in its reserve to alpha in reserve. +Each new subnet has its own token, referred to as its alpha. When you stake into a validator within a given subnet, you exchange TAO for that subnet's alpha. When you unstake from the validator in that subnet, you exchange the alpha for TAO. Staking and unstaking is therefore sensitive to the price of the alpha. This price of a subnet's alpha is the ratio of TAO in its reserve to alpha in reserve. Staking TAO into a subnet essentially exchanges TAO for that subnet’s alpha token. To exit value, alpha must be exchanged back for TAO at the going rate. Held stake (alpha tokens) may increase or decrease in TAO value as the price of the alpha changes. ### How do emissions to root subnet/Subnet 0 stakers work? - -**Network-wide Impact**: Your stake contributes weight across all subnets where your validator operates. This means your stake extracts emissions from multiple subnets simultaneously. See [Validator stake weight](dtao-guide#validator-stake-weight) for more details. -**Proportional emission and TAO weight**: TAO and alpha are emitted to a validator's stakers in proportion to the validators' holdings in each token. See [Emission in Dynamic TAO: Extraction](../emissions.md#extraction) +**Network-wide Impact**: Your stake contributes weight across all subnets where your validator operates. This means your stake extracts emissions from multiple subnets simultaneously. See [Validator stake weight](../subnets/understanding-subnets.md#validator-stake-weight) for more details. + +**Proportional emission and TAO weight**: TAO and alpha are emitted to a validator's stakers in proportion to the validators' holdings in each token. See [Emission: Extraction](../learn/emissions.md#extraction) ### Can users transfer alpha tokens (subnet tokens)? @@ -81,7 +51,7 @@ Dynamic TAO does not directly change Bittensor's on-chain governance mechanism ( ### Root Subnet/Subnet Zero -In Dynamic TAO, Subnet Zero is a special subnet. It is the only subnet that does not have its own $\alpha$ currency. No miners can register on subnet zero, and no validation work is performed. However validators can register, and $\tau$-holders can stake to those validators, as with any other subnet. This offers a mechanism for $\tau$-holders to stake $\tau$ into validators in a subnet-agnostic way. This works because the weight of a validator in a subnet includes both their share of that subnet's $\alpha$ and their share of staked TAO in Subnet Zero. +Subnet Zero a.k.a. the root subnet is a special subnet. No miners can register on subnet zero, and no validation work is performed. However validators can register, and $\tau$-holders can stake to those validators, as with any other subnet. This offers a mechanism for $\tau$-holders to stake $\tau$ into validators in a subnet-agnostic way. This works because the weight of a validator in a subnet includes both their share of that subnet's $\alpha$ and their share of staked TAO in Subnet Zero. Subnet Zero is sometimes called the root subnet, since it sort of replaces the root network in the pre-Dyanmic-TAO architecture. However, Subnet Zero does not perform consensus over subnets, which was the defining function of the root network. @@ -89,7 +59,6 @@ Subnet Zero is sometimes called the root subnet, since it sort of replaces the r The process of registering a subnet in Dynamic TAO will be very similar to the process of registering a submit previously, except that the cost to register the subnet is now burned, rather than being a lock cost returned to the subnet creator on de-registration. This is because subnets are not deregistered in Dynamic TAO. - ### What is the cost of creating a subnet? Subnet registration cost is dynamic. It doubles when a subnet is registered, and decreases at a slow rate such that the price halves after 38,880 blocks—roughly five and a half days. This implies that, if the demand for new subnets is steady, one should be created roughly every five and a half days. @@ -98,7 +67,7 @@ Subnet registration cost is dynamic. It doubles when a subnet is registered, and Each validator’s weight in the subnet is a function of the alpha staked to them on the subnet, plus the TAO staked to them in Subnet Zero, with the value of the TAO being multiplied by the TAO weight, which is between 0 and 1. -See [validator stake weight](./dtao-guide.md#walidator-stake-weight). +See [validator stake weight](../subnets/understanding-subnets.md#validator-stake-weight). ### What happens when a subnet is abandoned? @@ -112,7 +81,7 @@ Currently, the protocol does not automatically deregister subnets. Abandoned sub **No**. Emissions are calculated by protocol logic (e.g., in `run_coinbase.rs`) and are based on network-wide parameters. Subnet founders cannot arbitrarily print tokens—emission follows the same consistent rules across all subnets. -See [Emissions in Dynamic TAO](../emissions.md) +See [Emissions](../learn/emissions.md) ### What happens to previously locked registration costs from pre-Dynamic-TAO subnets? @@ -130,6 +99,5 @@ Miners/validators may need to watch markets (token prices, volumes) to optimize ## Where can I find more technical details right now? -- Codebase: Refer to the Bittensor codebase, especially `run_coinbase.rs`, which calculates emissions logic for subnets and the root network. +- Codebase: Refer to the Bittensor codebase, especially `run_coinbase.rs`, which calculates emissions logic for subnets and the root network. - The [Dynamic TAO White Paper](https://drive.google.com/file/d/1vkuxOFPJyUyoY6dQzfIWwZm2_XL3AEOx/view) - diff --git a/docs/dynamic-tao/dtao-guide.md b/docs/dynamic-tao/dtao-guide.md deleted file mode 100644 index 6d5a1921e5..0000000000 --- a/docs/dynamic-tao/dtao-guide.md +++ /dev/null @@ -1,114 +0,0 @@ ---- -title: "Core Dynamic TAO Concepts" ---- - -import ThemedImage from '@theme/ThemedImage'; -import useBaseUrl from '@docusaurus/useBaseUrl'; - -# Core Dynamic TAO Concepts - -Dynamic TAO is a recent evolution of the integrated tokenomic and governance model that underlies the Bittensor network. It represents a significant step in Bittensor's trajectory toward more thorough decentralization, by eliminating the centralized role of the root network in judging the value of subnetworks. Instead, in the Dynamic TAO model, the relative value of subnets is determined in a wholly distributed fashion: by the amount of TAO that users have staked into their currency reserves. - -## Subnet liquidity reserves - -The key mechanism introduced with Dynamic TAO is that each subnet functions as its own automated market marker (AMM), with two liquidity reserves, one containing TAO($$\tau$$)—the currency of the Bittensor network, and one containing a subnet specific "dynamic" currency, referred to as that subnet's alpha ($$\alpha$$) token. The alpha token is purchased by staking TAO into the subnet's reserve, which is initialized with a negligible amount of liquidity (1e-9). - -A subnet's economy therefore consists of three pools of currency: -- **Tao reserves**: the amount of tao ($$\tau$$) that has been staked into the subnet -- **Alpha reserves**: the amount of alpha ($$\alpha$$) available for purchase -- **Alpha outstanding**: the amount of alpha ($$\alpha$$) held in the hotkeys of a subnet's participants, also referred to as the total *stake* in the subnet - -:::tip Terminology: alpha tokens -Each subnet has its own currency with its own name, but in the abstract a given subnet's token is referred to as its $\alpha$ token. With a set of subnets in mind, we refer to $\alpha$ as the token for subnet $\alpha$, $$\beta$$ as the token for subnet $$\beta$$, $$\gamma$$ as the token for subnet $$\gamma$$, and so on. - -These subnet tokens contrast with TAO ($$\tau$$), the token of the Bittensor network as a whole. A subnet pool's reserve ratio (tao/alpha) determines the price of its alpha token. -::: -The *price* of a subnet's alpha token is determined by the ratio of TAO in that subnet's reserve to its alpha in reserve. Alpha currency that is not held in reserve but is which is held in the hotkeys of subnet participants is referred to as *alpha outstanding*. - -Run `btcli subnet list` with the Dynamic TAO-enabled `btcli` to view information about the subnets and their currency reserves on Bittensor testnet. - -```txt - ┃ ┃ Price ┃ Market Cap ┃ ┃ ┃ ┃ ┃ - Netuid ┃ Name ┃ (τ_in/α_in) ┃ (α * Price) ┃ Emission (τ) ┃ P (τ_in, α_in) ┃ Stake (α_out) ┃ Supply (α) ┃ Tempo (k/n) -━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━ - 0 │ τ root │ 1.00 τ/Τ │ τ 5.93m │ τ 0.0000 │ -, - │ Τ 5.93m │ 5.93m Τ /21M │ -/- - 3 │ γ templar │ 0.02 τ/γ │ τ 57.32 │ τ 0.0197 │ τ 31.44, 1.43k γ │ 1.18k γ │ 2.61k γ /21M │ 67/99 - 9 │ ι pretrain │ 0.02 τ/ι │ τ 55.38 │ τ 0.0194 │ τ 30.91, 1.46k ι │ 1.16k ι │ 2.61k ι /21M │ 73/99 - 1 │ α apex │ 0.02 τ/α │ τ 54.45 │ τ 0.0192 │ τ 30.65, 1.47k α │ 1.14k α │ 2.61k α /21M │ 65/99 - 2 │ β omron │ 0.02 τ/β │ τ 54.45 │ τ 0.0192 │ τ 30.65, 1.47k β │ 1.14k β │ 2.61k β /21M │ 66/99 - 4 │ δ targon │ 0.02 τ/δ │ τ 54.45 │ τ 0.0192 │ τ 30.65, 1.47k δ │ 1.14k δ │ 2.61k δ /21M │ 68/99 - ... -``` -See: [Using Dynamic TAO](./index.md#using-dynamic-tao) - -## Price/rate of alpha tokens - -### Ideal price -For each subnet, you'll see that *Price* (listed in the third column) is a function of TAO in reserve `τ_in` over alpha in reserve `α_in` - -$$ -Price = \frac{\tau_{in}}{\alpha_{in}} -$$ - -For example, if for subnet $\varepsilon$, its subnet pool contains TAO reserves of 1000 TAO units and its alpha reserves of 16000 $\varepsilon$ units, then the relative price of the $\varepsilon$ token is: - -$$ -R = \frac{\tau_{in}}{\alpha_{in}} = \frac{1000}{16000} = 0.0625 -$$ - -Hence, -$$ -\text{1 } \varepsilon = 0.0625 \text{ TAO} -$$ - -This exchange rate can change every block when staking or unstaking or emissions occur on this subnet. - -## Emission in Dynamic TAO - -Liquidity is steadily emitted into the Bittensor token economy according to an algorithm intended to foster growth while stabilizing prices and protecting them from manipulation. - -Each block: -- the chain emits TAO and injects it into the TAO reserves of the subnets. - -- the chain emits alpha tokens at twice the base alpha emission rate (which starts at 1 α/block and follows the same halving schedule as TAO). These emitted alpha tokens are allocoated between: - - the subnet's alpha reserve (increasing available liquidity) - - alpha outstanding (incentives for miners, validators, and subnet creators) - -See the main article: [Emissions](../emissions) - -## Decentralized evaluation of subnets - -The relative value or *weight* of subnets within Bittensor is critically important as it determines emissions to different subnets and their participant miners and validators. Prior to Dynamic TAO, relative weight among subnets within the Bittensor network is determined by Yuma Consensus over the evaluations of the Root Network validators. This gives a fundamentally centralizing role to the holders of Root Network validator keys. - -In Dynamic TAO, the relative weight is determined organically according to the emergent market value of the subnet, as represented by its stabilized token price. TAO-holders can stake TAO into subnets in exchange for the subnet-specific dynamic currency, referred to as the subnet's alpha ($$\alpha$$) token. In this way, stakers 'vote with their TAO' for the value of the subnet, determining the emissions to the validators and miners working in it. In return, stakers extract a share of the subnet's emissions. - -## Subnet Zero - -In Dynamic TAO, Subnet Zero—or *Root Subnet*—is a special subnet. It is the only subnet that does not have its own $\alpha$ currency. No miners can register on subnet zero, and no validation work is performed. However validators can register, and $\tau$-holders can stake to those validators, as with any other subnet. This offers a mechanism for $\tau$-holders to stake $\tau$ into validators in a subnet-agnostic way. This works because the weight of a validator in a subnet includes both their share of that subnet's $\alpha$ and their share of TAO staked into the root subnet. in Subnet Zero. - -Over time, the emissions generated by TAO staked into Subnet Zero will decrease, relative to stake held in the alpha currency of active subnets. See [Note on evolution of Bittensor token economy](../emissions#note-on-evolution-of-bittensor-token-economy). - -## Validator stake weight - -A validator's stake weight in a subnet equals their alpha stake plus their TAO stake times the `tao_weight` parameter: - -$$ - -\text{Validator stake weight} = \text{Alpha stake} (\alpha) + \text{TAO stake} (\tau) \times \text{TAO weight} - -$$ -:::tip -A validator's stake weight in Subnet Zero is simply their staked TAO. -::: - -A validator's relative stake weight (their stake weight over the total stake weight) in a subnet determines their voting power when evaluating miners, and determines their share of emissions. - -$$ - -\text{Validator x's relative stake weight} -= \frac{\alpha_x + \tau_x \times w_{\tau}} - {\displaystyle \sum_{v \in \text{validators}} - \bigl(\alpha_v + \tau_v \times w_{\tau}\bigr)} - -$$ - diff --git a/docs/dynamic-tao/dtao-transition.md b/docs/dynamic-tao/dtao-transition.md deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/docs/dynamic-tao/index.md b/docs/dynamic-tao/index.md index ecc2c39d9d..3122163c48 100644 --- a/docs/dynamic-tao/index.md +++ b/docs/dynamic-tao/index.md @@ -13,8 +13,6 @@ It was introduced by proposal, approved by senate vote, and introduced as an upg See the [Dynamic TAO White Paper](https://drive.google.com/file/d/1vkuxOFPJyUyoY6dQzfIWwZm2_XL3AEOx/view) for a full explanation. -See: [Conceptual guide to Dynamic TAO](./dtao-guide.md) - ## What to expect with Dynamic TAO Most operations will remain unchanged, including the main workflows for miners (e.g., registering on subnets) and validators (e.g., setting weights on miners). @@ -31,10 +29,10 @@ The changes to `btcli` and the Bittensor SDK are not backwards compatible. To use Dynamic TAO, make sure you upgrade to the most recent stable versions of the Bittensor SDK and `btcli`. See: + - [Bittensor SDK release page](https://pypi.org/project/bittensor/) - [Bittensor CLI release page](https://pypi.org/project/bittensor-cli/) -- [Upgrade the Bittensor SDK](../getting-started/installation.md#upgrade) - +- [Upgrade the Bittensor SDK](../getting-started/installation.md#upgrade-the-bittensor-sdk) ### Subnet tokens/liquidity pools @@ -42,7 +40,8 @@ The most visible difference introduced with Dynamic TAO is the addition of one n Run `btcli subnet list` to view information about the subnets and their currency reserves: -For example: +For example: + ```txt Subnets Network: rao @@ -60,6 +59,6 @@ For example: ... ``` -### Gradual impact on consensus dynamics +### Gradual impact on consensus dynamics -The rollout of Dynamic TAO is calculated to have a gradual impact. When Dynamic TAO is first released, the weight of all validators (in terms of stake) will remain unchanged, because a biasing variable known as *TAO weight*, which controls the relative weight of TAO and alpha currencies, will heavily favor TAO—which currently has 100% weight since alpha currencies don't exist. Over time (an estimated 100 days), this *TAO Weight* will shift to favor alpha currencies over TAO. +The rollout of Dynamic TAO is calculated to have a gradual impact. When Dynamic TAO is first released, the weight of all validators (in terms of stake) will remain unchanged, because a biasing variable known as _TAO weight_, which controls the relative weight of TAO and alpha currencies, will heavily favor TAO—which currently has 100% weight since alpha currencies don't exist. Over time (an estimated 100 days), this _TAO Weight_ will shift to favor alpha currencies over TAO. diff --git a/docs/dynamic-tao/sdk-cheat-sheet.md b/docs/dynamic-tao/sdk-cheat-sheet.md index 152301fa4b..cdec475fbc 100644 --- a/docs/dynamic-tao/sdk-cheat-sheet.md +++ b/docs/dynamic-tao/sdk-cheat-sheet.md @@ -2,8 +2,9 @@ title: "Dynamic TAO SDK Cheat Sheet" --- -This page provides a quick reference for the core functionalities for the Bittensor Python SDK that have changed for [Dynamic TAO](./index.md), and some example scripts to demonstrate functionality such as [viewing exchange rates](#example-viewing-exchange-rates) and [staking and unstaking](#example-staking-and-unstaking) into subnets. +import { SdkVersion } from "../sdk/_sdk-version.mdx"; +This page provides a quick reference for the core functionalities for the Bittensor Python SDK that have changed for [Dynamic TAO](./index.md), and some example scripts to demonstrate functionality such as [viewing exchange rates](#display-current-exchange-rates) and [manage staking and unstaking](#managing-stake) into subnets. Updates to the `subtensor` and `async_subtensor` modules and the `DynamicInfo` class provide new ways to view information related to new Dynamic TAO features, such as alpha token prices, token reserve amounts, and wallet balances. Functionality around staking and unstaking has been updated to reflect the new nature of staking/unstaking in Dynamic TAO. @@ -27,6 +28,8 @@ pip install bittensor ## Using the SDK for sync or async requests + + The Bittensor `subtensor` and `async_subtensor` modules offer the synchronous and asynchronous options for the same functionality. Import Bittensor and alias the correct module, for example, the following configuration for async calls to the Bittensor test network: @@ -43,7 +46,6 @@ Or the following configuration for synchronous calls to Bittensor test network: sub = bt.Subtensor(network="test") ``` - ## The `DynamicInfo` object The state of a subnet, with all of the new attributes, is encapsulated in a `DynamicInfo` object. This is what is returned by the `subnet` and `all_subnets` methods. @@ -75,10 +77,13 @@ class DynamicInfo: subnet_identity: Optional[SubnetIdentity] ``` + ## Viewing subnets + Subnets evolve substantially in Dynamic TAO! Each subnet has its own currency, known as its alpha token, and an internal economy comprising a currency reserve of TAO, a reserve of its own alpha token, and a ledger of staked balances, to keep track of all of its stakers—those who have put TAO into its reserve in exchange for alpha. #### `all_subnets` + ```python all_subnets( block_number: Optional[int] = None @@ -91,88 +96,99 @@ Description: Fetches information about all subnets at a certain block height (or Returns: A list of DynamicInfo objects (detailed below). #### `subnet` + ```python subnet( - netuid: int, + netuid: int, block_number: Optional[int] = None ) -> DynamicInfo ``` + Fetches information about a single subnet identified by netuid. Returns a DynamicInfo object describing the subnet’s current state. - #### `metagraph` + ```python metagraph( - netuid: int, + netuid: int, block: Optional[int] = None ) -> bittensor.Metagraph ``` - Returns the metagraph for a specified subnet netuid. The metagraph includes detailed data on the neurons in the subnet. ## Exchange rates + You can query the DynamicInfo object for the exchange rates between TAO and alpha tokens. You can use `all_subnets` or `subnet` to get the DynamicInfo object. ```python subnet = sub.subnet(netuid=1) ``` + ### Calculate exhange rates + #### `tao_to_alpha` ```python tao_to_alpha(self, tao: Union[Balance, float, int]) -> Balance: ``` -Description: Returns an 'ideal' estimate of how much Alpha a staker would receive at the current price, *ignoring slippage*. + +Description: Returns an 'ideal' estimate of how much Alpha a staker would receive at the current price, _ignoring slippage_. Parameters: - `tao`: Amount of TAO to stake. +`tao`: Amount of TAO to stake. #### `alpha_to_tao` + ```python alpha_to_tao(self, alpha: Union[Balance, float, int]) -> Balance: ``` -Description: Returns an 'ideal' estimate of how much TAO would be yielded by unstaking at the current price, *ignoring slippage*. + +Description: Returns an 'ideal' estimate of how much TAO would be yielded by unstaking at the current price, _ignoring slippage_. Parameters: - `alpha`: Amount of Alpha to unstake. +`alpha`: Amount of Alpha to unstake. #### `tao_to_alpha_with_slippage` + ```python tao_to_alpha_with_slippage(tao: Union[Balance, float, int], percentage: bool = False) -> Union[tuple[Balance, Balance], float]: ``` + Returns an estimate of how much Alpha would a staker receive if they stake their TAO using the current pool state. Parameters: - `tao`: Amount of TAO to stake. - `percentage`: If True, returns the percentage difference between the estimated amount and ideal amount as if there was no slippage. +`tao`: Amount of TAO to stake. +`percentage`: If True, returns the percentage difference between the estimated amount and ideal amount as if there was no slippage. Returns: - Tuple of balances where the first part is the amount of Alpha received, and the - second part (slippage) is the difference between the estimated amount and ideal - amount as if there was no slippage - OR - Percentage of the slippage as a float +Tuple of balances where the first part is the amount of Alpha received, and the +second part (slippage) is the difference between the estimated amount and ideal +amount as if there was no slippage +OR +Percentage of the slippage as a float #### `alpha_to_tao_with_slippage` + ```python alpha_to_tao_with_slippage(alpha: Union[Balance, float, int], percentage: bool = False) -> Union[tuple[Balance, Balance], float]: ``` + Returns an estimate of how much TAO would a staker receive if they unstake their alpha using the current pool state. Parameters: - `alpha`: Amount of Alpha to unstake. - `percentage`: If True, returns the percentage difference between the estimated amount and ideal amount as if there was no slippage. +`alpha`: Amount of Alpha to unstake. +`percentage`: If True, returns the percentage difference between the estimated amount and ideal amount as if there was no slippage. Returns: - Tuple of balances where the first part is the amount of TAO received, and the - second part (slippage) is the difference between the estimated amount and ideal - amount as if there was no slippage - OR - Percentage of the slippage as a float +Tuple of balances where the first part is the amount of TAO received, and the +second part (slippage) is the difference between the estimated amount and ideal +amount as if there was no slippage +OR +Percentage of the slippage as a float ### Display current exchange rates @@ -183,24 +199,27 @@ import bittensor as bt sub = bt.Subtensor(network="test") subnet = sub.subnet(netuid=1) +netuid = 1 -print("alpha_to_tao_with_slippage", subnet.alpha_to_tao_with_slippage(100)) -print("alpha_to_tao_with_slippage percentage", subnet.alpha_to_tao_with_slippage(100, percentage=True)) - -print("tao_to_alpha_with_slippage", subnet.tao_to_alpha_with_slippage(100)) -print("tao_to_alpha_with_slippage percentage", subnet.tao_to_alpha_with_slippage(100, percentage=True)) +alpha_100 = bt.Balance.from_tao(100).set_unit(netuid) +print("alpha_to_tao_with_slippage", subnet.alpha_to_tao_with_slippage(alpha_100)) +print("alpha_to_tao_with_slippage %", subnet.alpha_to_tao_with_slippage(alpha_100, percentage=True)) +print("alpha_to_tao", subnet.alpha_to_tao(alpha_100)) -print("tao_to_alpha", subnet.tao_to_alpha(100)) -print("alpha_to_tao", subnet.alpha_to_tao(100)) +tao_100 = bt.Balance.from_tao(100) +print("tao_to_alpha_with_slippage", subnet.tao_to_alpha_with_slippage(tao_100)) +print("tao_to_alpha_with_slippage %", subnet.tao_to_alpha_with_slippage(tao_100, percentage=True)) +print("tao_to_alpha", subnet.tao_to_alpha(tao_100)) ``` ## Managing stake #### `get_stake` + ```python get_stake( - hotkey_ss58: str, - coldkey_ss58: str, + hotkey_ss58: str, + coldkey_ss58: str, netuid: int ) -> bittensor.Balance @@ -208,54 +227,80 @@ get_stake( Description: Retrieves the staked balance for a given (hotkey, coldkey) pair on a specific subnet. Returns a `bittensor.Balance` object with the staked amount. Parameters: + - hotkey_ss58: Hotkey SS58 address. - coldkey_ss58: Coldkey SS58 address (owner). - netuid: Unique ID of the subnet. - - #### `add_stake` ```python -async add_stake( - wallet, - hotkey: str, - netuid: int, - tao_amount: Union[float, bittensor.Balance, int] -) +add_stake( + wallet, + netuid: int, + hotkey_ss58: str, + amount: bittensor.Balance, + safe_staking: bool = False, + allow_partial_stake: bool = False, + rate_tolerance: float = 0.005, + wait_for_inclusion: bool = True, + wait_for_finalization: bool = True +) -> ExtrinsicResponse ``` -Description: Adds (stakes) an amount of TAO (tao_amount) to a specific subnet (netuid) under the provided hotkey. + +Description: Adds (stakes) an amount of TAO to a specific subnet (netuid) under the provided hotkey. Parameters: + - wallet: Your Bittensor wallet object. -- hotkey: The SS58 address (hotkey) to be staked. - netuid: Unique ID of the subnet on which you want to stake. -- tao_amount: Amount to stake, can be a float, integer, or bittensor.Balance object. +- hotkey_ss58: The SS58 address (hotkey) to be staked. +- amount: Amount to stake as a `bittensor.Balance` object (required). +- safe_staking: Enable price protection (default: False). +- allow_partial_stake: Allow partial execution if price moves (default: False). +- rate_tolerance: Maximum price deviation tolerance (default: 0.005 = 0.5%). +- wait_for_inclusion: Wait for transaction inclusion in block (default: True). +- wait_for_finalization: Wait for transaction finalization (default: True). + +Returns: `ExtrinsicResponse` object with `success`, `message`, `extrinsic_fee`, and other transaction details. #### `unstake` + ```python unstake( - wallet, - hotkey: str, - netuid: int, - amount: Union[float, bittensor.Balance, int] -) - + wallet, + netuid: int, + hotkey_ss58: str, + amount: bittensor.Balance, + safe_unstaking: bool = False, + allow_partial_stake: bool = False, + rate_tolerance: float = 0.005, + wait_for_inclusion: bool = True, + wait_for_finalization: bool = True +) -> ExtrinsicResponse ``` -Description: Unstakes amount of TAO from the specified hotkey on a given netuid. +Description: Unstakes amount of alpha tokens from the specified hotkey on a given netuid, converting them back to TAO. Parameters: + - wallet: Your Bittensor wallet object. -- hotkey: The SS58 address (hotkey) from which you want to remove stake. - netuid: Unique ID of the subnet. -- amount: Amount to unstake. +- hotkey_ss58: The SS58 address (hotkey) from which you want to remove stake. +- amount: Amount to unstake as a `bittensor.Balance` object with the appropriate unit set (required). +- safe_unstaking: Enable price protection (default: False). +- allow_partial_stake: Allow partial execution if price moves (default: False). +- rate_tolerance: Maximum price deviation tolerance (default: 0.005 = 0.5%). +- wait_for_inclusion: Wait for transaction inclusion in block (default: True). +- wait_for_finalization: Wait for transaction finalization (default: True). +Returns: `ExtrinsicResponse` object with `success`, `message`, `extrinsic_fee`, and other transaction details. #### `get_balance` + ```python get_balance( - address: str, + address: str, block: Optional[int] = None ) -> bittensor.Balance @@ -264,39 +309,55 @@ get_balance( Description: Returns the current (or specified block’s) coldkey TAO balance for an address. Parameters: + - address: SS58 address to check. - block: Optional block number at which to fetch the balance. Uses the latest block if None. - #### `get_current_block` + ```python get_current_block() -> int ``` + Description: Returns the current chain block number. + #### `wait_for_block` + ```python wait_for_block( block: Optional[int] = None ) ``` + Description: Waits for the next block to arrive or waits until a specified block number is reached if provided. Update: we have added proper nonce protection allowing you to run gather operations on stake/unstake/transfers, such as: + ```python -scatter_stake = await asyncio.gather(*[ sub.add_stake( hotkey, coldkey, netuid, amount ) for netuid in range(64) ] ) +# For async operations +scatter_stake = await asyncio.gather(*[ + sub.add_stake( + wallet=wallet, + netuid=netuid, + hotkey_ss58=hotkey_ss58, + amount=bt.Balance.from_tao(amount) + ) + for netuid in range(64) +]) ``` - ### Staking + The following script incrementally stakes 3 TAO into several subnets over many blocks: ```python import bittensor as bt + sub = bt.Subtensor(network="test") -wallet = bt.wallet(name="ExampleWalletName") +wallet = bt.Wallet(name="ExampleWalletName") wallet.unlock_coldkey() to_buy = [119, 277, 18, 5] # list of netuids to stake into @@ -304,27 +365,42 @@ increment = 0.01 # amount of TAO to stake total_spend = 0 # total amount of TAO spent stake = {} # dictionary to store the stake for each netuid +# Convert increment to Balance object +amount_balance = bt.Balance.from_tao(increment) + while total_spend < 3: for netuid in to_buy: subnet = sub.subnet(netuid) - print(f"slippage for subnet {netuid}", subnet.slippage(increment)) - sub.add_stake( - wallet = wallet, - netuid = netuid, - hotkey = subnet.owner_hotkey, - tao_amount = increment, + print(f"slippage for subnet {netuid}", subnet.slippage(amount_balance)) + + result = sub.add_stake( + wallet=wallet, + netuid=netuid, + hotkey_ss58=subnet.owner_hotkey, + amount=amount_balance, ) + print(result) + if not result.success: + continue + current_stake = sub.get_stake( - coldkey_ss58 = wallet.coldkeypub.ss58_address, - hotkey_ss58 = subnet.owner_hotkey, - netuid = netuid, + coldkey_ss58=wallet.coldkeypub.ss58_address, + hotkey_ss58=subnet.owner_hotkey, + netuid=netuid, ) stake[netuid] = current_stake total_spend += increment - print (f'netuid {netuid} price {subnet.price} stake {current_stake}') - sub.wait_for_block() + print(f'netuid {netuid} price {subnet.price} stake {current_stake}') + + try: + sub.wait_for_block() + except AttributeError: + + import time + time.sleep(6) # Wait ~6 seconds for next block ``` + ```console Enter your password: Decrypting... @@ -345,6 +421,7 @@ netuid 5 price τ0.001784484 stake ε11.208213619 ... ``` + ### Unstaking The below script will reverse the effects of the above, by incrementally unstaking alpha tokens from the list of subnets to yield TAO. @@ -352,8 +429,9 @@ The below script will reverse the effects of the above, by incrementally unstaki ```python import bittensor as bt + sub = bt.Subtensor(network="test") -wallet = bt.wallet(name="ExampleWalletName") +wallet = bt.Wallet(name="ExampleWalletName") wallet.unlock_coldkey() to_sell = [119, 277, 18, 5] # list of netuids to unstake from @@ -364,24 +442,39 @@ stake = {} # dictionary to store the stake for each netuid while total_sell < 3: for netuid in to_sell: subnet = sub.subnet(netuid) - print(f"slippage for subnet {netuid}", subnet.alpha_slippage(increment)) - sub.remove_stake( - wallet = wallet, - netuid = netuid, - hotkey = subnet.owner_hotkey, - amount = increment, + alpha_amount = bt.Balance.from_tao(increment).set_unit(netuid) + + print(f"slippage for subnet {netuid}", subnet.alpha_slippage(alpha_amount)) + + result = sub.unstake( + wallet=wallet, + netuid=netuid, + hotkey_ss58=subnet.owner_hotkey, + amount=alpha_amount, ) + + print(result) + if not result.success: + print(f"Failed to unstake from netuid {netuid}: {result.message}") + continue + current_stake = sub.get_stake( - coldkey_ss58 = wallet.coldkeypub.ss58_address, - hotkey_ss58 = subnet.owner_hotkey, - netuid = netuid, + coldkey_ss58=wallet.coldkeypub.ss58_address, + hotkey_ss58=subnet.owner_hotkey, + netuid=netuid, ) stake[netuid] = current_stake total_sell += increment - print (f'netuid {netuid} price {subnet.price} stake {current_stake}') - sub.wait_for_block() + print(f'netuid {netuid} price {subnet.price} stake {current_stake}') + + try: + sub.wait_for_block() + except AttributeError: + import time + time.sleep(6) ``` + ```console Enter your password: Decrypting... @@ -410,29 +503,35 @@ netuid 5 price τ0.001785179 stake ε33.619312896 You can register your hotkey on a subnet using the `burned_register` method. This is necessary for staking, mining or validating. #### `burned_register` + ```python burned_register( - wallet, - netuid: int, -) -> bool + wallet, + netuid: int, + wait_for_inclusion: bool = True, + wait_for_finalization: bool = True +) -> ExtrinsicResponse ``` -Description: Registers a hotkey on a subnet. +Description: Registers a hotkey on a subnet by burning TAO. Parameters: + - wallet: Your Bittensor wallet object. - netuid: Unique ID of the subnet. +- wait_for_inclusion: Wait for transaction inclusion in block (default: True). +- wait_for_finalization: Wait for transaction finalization (default: True). -Returns: -- bool: True if the registration was successful, False otherwise. +Returns: `ExtrinsicResponse` object with `success`, `message`, `extrinsic_fee`, and `data` containing `{"uid": int}` for the assigned neuron UID. Sample script: + ```python import bittensor as bt logging = bt.logging logging.set_info() sub = bt.Subtensor(network="test") -wallet = bt.wallet( +wallet = bt.Wallet( name="ExampleWalletName", hotkey="ExampleHotkey", ) @@ -440,13 +539,13 @@ wallet.unlock_coldkey() reg = sub.burned_register(wallet=wallet, netuid=3) ``` - ### View registered subnets #### `get_netuids_for_hotkey` + ```python get_netuids_for_hotkey( - hotkey: str, + hotkey: str, ) -> list[int] ``` @@ -454,13 +553,15 @@ get_netuids_for_hotkey( Description: Returns the netuids in which a hotkey is registered. Parameters: + - hotkey: SS58 address to check. Example usage: + ```python import bittensor as bt sub = bt.Subtensor(network="test") -wallet = bt.wallet( +wallet = bt.Wallet( name="ExampleWalletName", hotkey="ExampleHotkey", ) @@ -470,10 +571,10 @@ print(netuids) ``` #### `btcli wallet overview` + You can also use the `btcli` to check subnet registrations using `btcli wallet overview`. This displays the registrations to subnets by hotkeys controlled by the wallet: - ```shell Wallet @@ -505,14 +606,13 @@ Subnet: 119: vidac Ⲃ ``` - ## View a hotkey's emissions This script displays the last day's emissions for a specified hotkey on all subnets on which the hotkey is registered. This could be useful for a miner to see how much they've been extracting from the different subnets, if they've been mining on several. -Be aware that daily emissions can fluctuate widely. See [Emissions](../emissions.md). +Be aware that daily emissions can fluctuate widely. See [Emissions](../learn/emissions.md). ```python from bittensor.core.async_subtensor import AsyncSubtensor @@ -534,7 +634,7 @@ async def main(): all_sn_dynamic_info = {info.netuid: info for info in all_sn_dynamic_info_list} daily_blocks = (60 * 60 * 24) / BLOCKTIME # Number of blocks per day - + print(f"Hotkey: {HOTKEY}") @@ -542,10 +642,10 @@ async def main(): metagraphs = await asyncio.gather(*[ subtensor.metagraph(netuid=id) for id in NETUIDS]) for id in NETUIDS: print(f"UID: {id}") - + metagraph = metagraphs[id] tempo_multiplier = daily_blocks / metagraph.tempo - + subnet_info = all_sn_dynamic_info.get(id) uid = metagraph.hotkeys.index(HOTKEY) if HOTKEY in metagraph.hotkeys else None @@ -565,4 +665,4 @@ async def main(): asyncio.run(main()) -``` \ No newline at end of file +``` diff --git a/docs/dynamic-tao/staking-unstaking-dtao.md b/docs/dynamic-tao/staking-unstaking-dtao.md deleted file mode 100644 index dc9b632b54..0000000000 --- a/docs/dynamic-tao/staking-unstaking-dtao.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: "Understanding Pricing and Anticipating Slippage" ---- - -# Understanding Pricing and Anticipating Slippage - -Each Bittensor subnet operates as a *constant product AMM*, meaning that it will accept trades that conserve the product of the quantities of the two tokens in reserve, TAO and alpha. To calulate the price in one token of batch of the other token that a buyer wishes to acquire—alpha if they are staking, or TAO if they are unstaking—the algorithm assumes that the transaction does not change this product, so the product of TAO and alpha is the same before and after. - -When staking, the product K of TAO in reserve and alpha in reserve is the same before and after the transaction, so the initial product must be equal to the product after the cost in TAO is added to the reserve, and the stake is removed from the reserve and placed in the staked hotkey: - -$$ -\tau_{\mathrm{in}} \,\alpha_{\mathrm{in}} = k -$$ -$$ -(\tau_{\mathrm{in}} + \text{cost}) \bigl(\alpha_{\mathrm{in}} - \text{stake}\bigr) = k -$$ -$$ -(\tau_{\mathrm{in}} + \text{cost}) \bigl(\alpha_{\mathrm{in}} - \text{stake}\bigr) - = \tau_{\mathrm{in}} \,\alpha_{\mathrm{in}} -$$ - - -This means that if we choose to stake in a certain amount of TAO (if we specify the cost), then the yielded stake (the quantity of alpha to be removed from reserve and granted to the staked hotkey) is: - -$$ -\text{Stake} = \alpha_{\text{in}} - \frac{\tau_{\text{in}} \alpha_{\text{in}}} {\tau_{\text{in}} + \text{cost}} - -$$ - -For example, suppose that a subnet has 100 alpha in reserve and 10 TAO, and we want to stake in 5 TAO. - -The price at this moment is 10 TAO / 100 alpha, or 10 alpha per TAO, so if we stake 5 TAO, we would expect 50 alpha, without taking slippage into account. - -With slippage, the yielded alpha stake will be: - -$$ -\text{Stake} = 100 - \frac{ 10 * 100} {10 + 5} - -$$ - -or 33.333 alpha sent to the hotkey. So in this case, the slippage is the difference between the ideal expectation of 50 and the actual swap value of 33.33333: -$$ -16.667 = 50 - 33.333 -$$ - -This slippage is 50% of the actual swap value, which is extremely high, because we chose small values for the available liquidity. In general, slippage is high when available liquidity is limited compared to the magnitude of the transaction, since the transaction itself is changing the price significantly. - -:::tip -`btcli` shows the slippage of staking and unstaking operations, so you don't need to calculate it yourself. See [Stake into a node](#stake-into-a-node). -::: - diff --git a/docs/emissions.md b/docs/emissions.md deleted file mode 100644 index 508e00c93d..0000000000 --- a/docs/emissions.md +++ /dev/null @@ -1,143 +0,0 @@ ---- -title: "Emission" ---- - -import ThemedImage from '@theme/ThemedImage'; -import useBaseUrl from '@docusaurus/useBaseUrl'; - -# Emission - -Emission is the process by which the Bittensor network allocates TAO and alpha to participants, including miners, validators, stakers, and subnet creators. - -It unfolds in two stages: - -- Injection into subnets -- Extraction by participants - -See the [Dynamic TAO White Paper](https://drive.google.com/file/d/1vkuxOFPJyUyoY6dQzfIWwZm2_XL3AEOx/view) for a full explanation. - -### Injection - -The first stage of emissions is *injection of liquidity* into the subnet pools. Liquidity is injected to each subnet in proportion to the price of its token compared to the price of other subnet tokens. This is designed to incentivize development on the most valuable subnets. - -Each block: - -- TAO is injected into the subnet's **TAO reserve**. -- Alpha is injected into the subnet's **alpha reserve**. -- Alpha is allocated to *alpha outstanding*, to be extracted by participants. - -#### TAO reserve injection - -A subnet's TAO reserve injection is computed in proportion to the price of its alpha token over the sum of prices for all the subnets in Bittensor. - -Given set $\mathbb{S}$ of all subnets, and a total per block TAO emission $\Delta\bar{\tau}$, which begins at 1 TAO and follows a halving schedule, TAO emission $\Delta\tau_i$ to subnet $i$ with price $p_i$ is: - -$$ -\Delta\tau_i = \Delta\bar{\tau} \times -\frac - {p_i} - {\sum_{j \in \mathbb{S}} -\bigl(p_j)} -$$ - -#### Alpha reserve injection - -Alpha is then injected in proportion to the price of the token, so that growth of a subnet's liquidity pools does not not change the price of the alpha token. - -Recall that token price for a subnet is its TAO in reserve divided by its alpha reserve: - -$$ -p_i = \frac - {\tau_i} - {\alpha_i} -$$ - -So in order to inject alpha without changing the price, it should follow: - -$$ -\Delta\alpha_i = \frac - {\Delta\tau_i} - {p_i} -$$ - -When we fill in this equation with the previous formula for $\Delta\tau_i$, the price $p_i$ is cancelled out of the equation, yielding: - -$$ -\Delta\alpha_i = - \frac - {\Delta\bar{\tau}} - {\sum_{j \in \mathbb{S}} - \bigl(p_j)} -$$ - - -However, alpha injection is also capped at 1 by the algorithm, to prevent runaway inflation. Therefore, with cap or *alpha emission rate* $\Delta\bar{\alpha_i}$, emission $\Delta\alpha_i$ to subnet $i$ is: - -$$ -\Delta\alpha_i = \min\left\{ - \frac - {\Delta\bar{\tau}} - {\sum_{j \in \mathbb{S}} - \bigl(p_j)}, - \Delta\bar{\alpha_i} \right\} - -$$ - -The cap or *alpha emission rate* $\Delta\bar{\alpha_i}$ for subnet $i$, starts at 1 and follows a halving schedule identical to that of TAO, beginning when subnet $i$ is created. - -#### Alpha outstanding injection - -Each block, liquidity is also set aside to be emitted to participants (validators, miners, stakers, and subnet creator). The quantity per block is equal to the *alpha emission rate* $\Delta\bar{\alpha_i}$ for subnet $i$. - -### Extraction - -At the end of each tempo (360 blocks), the quantity of alpha accumulated over each block of the tempo is extracted by network participants in the following proportions: - -1. 18% by subnet owner -1. 41% of emissions go to miners. The allocation to particular miners is determined by [Yuma Consensus: Miner emissions#miner-emissions](./yuma-consensus). -1. 41% by validators and their stakers. - 1. First, the allocation to validators miners is determined by [Yuma Consensus: Validator Emissions](./yuma-consensus#validator-emissions). - 1. Then, validators extract their take from that allocation. - 1. Then, TAO and alpha are emitted to stakers in proportion to the validators' holdings in each token. TAO emissions are sourced by swapping a portion of alpha emissions to TAO through the subnet's liquidity pool. - - For validator x's TAO stake $\tau_x$, and alpha stake $\alpha_x$, and the global TAO weight $w_{\tau}$: - - - TAO is emitted to stakers on the root subnet (i.e. stakers in TAO) in proportion to the validator's stake weight's proportion of TAO. - - $$ - \text{proportional emissions (\%) to root stakers} - = \frac{\tau_{x}{} \, w_{\tau}} - {\alpha_{x} + \tau_{x} \, w_{\tau}} - $$ - - - Alpha is emitted to stakers on the mining subnet (i.e. stakers in alpha) in proportion to the validator's stake weight's proportion of alpha: - $$ - \text{proportional emissions (\%) to alpha stakers} - = \frac{\alpha_{x}} - {\alpha_{x} + \tau_{x} \, w_{\tau}} - $$ - - Validators who hold both root TAO and subnet alphas will extract both types of token. - - See [Core Dynamic TAO Concepts: Validator stake weight](../subnets/understanding-subnets#validator-stake-weight) - -### Note on evolution of Bittensor token economy - -When Dynamic TAO is initiated, there will be no alpha in circulation, so validator's stake weights will be entirely determined by their share of TAO stake. - -But far more alpha than TAO is emitted into circulation every block. As a result, over time there will be more alpha relative to TAO in overall circulation, and the relative weight of a validator in a given subnet will depend more on their alpha stake share relative to their share of the TAO stake on Subnet Zero. - -In order to hasten the process of alpha gaining the majority of stake power in the network, the contribution of TAO stake to validator stake weight is reduced by a global parameter called *TAO weight*. Currently, this is planned to be **18%**, in order to achieve a weight parity between TAO and total alpha in approximately 100 days. - -
- -
- -
\ No newline at end of file diff --git a/docs/errors/custom.md b/docs/errors/custom.md index 0c655c24bd..fab2aced6a 100644 --- a/docs/errors/custom.md +++ b/docs/errors/custom.md @@ -10,75 +10,117 @@ These errors are returned in the format: ```json { - "code": 1010, - "message": "Invalid Transaction", - "data": "Custom error: [Error Code]" + "code": 1010, + "message": "Invalid Transaction", + "data": "Custom error: [Error Code]" } ``` -Related: -- [Source code in GitHub](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/lib.rs#L1686) + +Related: + +- [Source code in GitHub](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/lib.rs#L1840-L1855) - [Subtensor Standard Errors](./subtensor.md) - Bittensor's custom error codes -- [Substrate Errors](https://polkadot.js.org/docs/substrate/errors/) - Errors from the underlying Substrate framework +- [Substrate Errors](https://polkadot.js.org/docs/substrate/errors/) - Errors from the underlying Substrate framework ## Error Codes ### Error Code 0 + **Error**: `ColdKeyInSwapSchedule` **Description**: Your coldkey is set to be swapped. No transfer operations are possible. ### Error Code 1 + **Error**: `StakeAmountTooLow` **Description**: The amount you are staking/unstaking/moving is below the minimum TAO equivalent. **Minimum**: 500,000 RAO (0.0005 TAO) ### Error Code 2 + **Error**: `BalanceTooLow` **Description**: The amount of stake you have is less than you have requested. ### Error Code 3 + **Error**: `SubnetDoesntExist` **Description**: This subnet does not exist. ### Error Code 4 + **Error**: `HotkeyAccountDoesntExist` **Description**: Hotkey is not registered on Bittensor network. ### Error Code 5 + **Error**: `NotEnoughStakeToWithdraw` **Description**: You do not have enough TAO equivalent stake to remove/move/transfer, including the unstake fee. ### Error Code 6 + **Error**: `RateLimitExceeded` **Description**: Too many transactions submitted (other than Axon serve/publish extrinsic). ### Error Code 7 + **Error**: `InsufficientLiquidity` **Description**: The subnet's pool does not have sufficient liquidity for this transaction. ### Error Code 8 + **Error**: `SlippageTooHigh` **Description**: The slippage exceeds your limit. Try reducing the transaction amount. ### Error Code 9 + **Error**: `TransferDisallowed` **Description**: This subnet does not allow stake transfer. ### Error Code 10 + **Error**: `HotKeyNotRegisteredInNetwork` **Description**: The hotkey is not registered in the selected subnet. ### Error Code 11 + **Error**: `InvalidIpAddress` **Description**: Axon connection info cannot be parsed into a valid IP address. ### Error Code 12 + **Error**: `ServingRateLimitExceeded` **Description**: Rate limit exceeded for axon serve/publish extrinsic. ### Error Code 13 + **Error**: `InvalidPort` **Description**: Axon connection info cannot be parsed into a valid port. +### Error Code 14 + +**Error**: `ZeroMaxAmount` +**Description**: The executable amount must be greater than zero. + +### Error Code 15 + +**Error**: `InvalidRevealRound` +**Description**: The provided reveal round is outdated or invalid. + +### Error Code 16 + +**Error**: `CommitNotFound` +**Description**: The referenced validator commit does not exist. + +### Error Code 17 + +**Error**: `CommitBlockNotInRevealRange` +**Description**: The referenced commit cannot be revealed in the current block range. + +### Error Code 18 + +**Error**: `InputLengthsUnequal` +**Description**: Attempted to batch reveal weights with mismatched vector input lenghts. + ### Error Code 255 + **Error**: `BadRequest` **Description**: Unclassified error. diff --git a/docs/errors/index.md b/docs/errors/index.md index aaa6b7e49a..e2fef265a2 100644 --- a/docs/errors/index.md +++ b/docs/errors/index.md @@ -7,6 +7,7 @@ title: "Subtensor Error Codes" This section documents the various types of errors that can arise from Subtensor, the blockchain underlying the Bittensor network. These errors can surface through different interfaces including the Bittensor CLI (`btcli`), the Bittensor Python SDK, or extrinsic transaction interfaces such as PolkadotJS. + Subtensor errors can be categorized into three main types: @@ -21,14 +22,14 @@ Most errors from the Bittensor network are returned in the following format: ```json { - "code": 1010, - "message": "Invalid Transaction", - "data": "Custom error: [Error Code]" + "code": 1010, + "message": "Invalid Transaction", + "data": "Custom error: [Error Code]" } ``` ## Related -- [Bittensor CLI](../btcli.md) - Command line interface documentation -- [Bittensor Python SDK](../bt-api-ref.md) - Python SDK documentation -- [Subtensor Nodes](../subtensor-nodes/index.md) - Information about running Subtensor nodes \ No newline at end of file +- [Bittensor CLI](../btcli/btcli.md) - Command line interface documentation +- [Bittensor Python SDK](../sdk/bt-api-ref.md) - Python SDK documentation +- [Subtensor Nodes](../subtensor-nodes/index.md) - Information about running Subtensor nodes diff --git a/docs/errors/subtensor.md b/docs/errors/subtensor.md index c3d5a5e6e0..29086627e9 100644 --- a/docs/errors/subtensor.md +++ b/docs/errors/subtensor.md @@ -6,12 +6,12 @@ title: "Subtensor Standard Errors" This page documents the standard errors that can arise from Subtensor, the blockchain underlying the Bittensor network. -Related: +Related: + - [Source code in GitHub](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/macros/errors.rs) - [Subtensor Custom Errors](./custom.md) -- [Substrate Errors](https://polkadot.js.org/docs/substrate/errors/) - Errors from the underlying Substrate framework +- [Substrate Errors](https://polkadot.js.org/docs/substrate/errors/) - Errors from the underlying Substrate framework - ## Network and Subnet Errors ### `SubNetworkDoesNotExist` @@ -21,6 +21,7 @@ The specified subnet does not exist. ### `RootNetworkDoesNotExist` The root network does not exist. + ### `SubnetNotExists` @@ -42,11 +43,13 @@ Operation is not permitted on the root subnet. ### `AllNetworksInImmunity` All subnets are in the immunity period. + ### `MechanismDoesNotExist` Trying to register a subnet into a mechanism that does not exist. + ### `SubNetRegistrationDisabled` @@ -111,6 +114,10 @@ Public key cannot be recovered. Recovered public key is invalid. +### `HotKeySwapOnSubnetIntervalNotPassed` + +Attempting a hotkey swap on subnet too frequently. + ## Stake and Balance Errors ### `NotEnoughStake` @@ -185,6 +192,10 @@ Transaction slippage is above your limit. Transfers are disallowed on this subnet. +### `InsufficientBalance` + +The caller does not have enough balance for the operation. + ## Weight Setting Errors ### `NeuronNoValidatorPermit` @@ -271,6 +282,18 @@ Alpha high value is too low (> 0.8 required). Alpha low value is out of allowed range (0 < alpha_low < 0.8). +### `IncorrectCommitRevealVersion` + +Incorrect commit-reveal version. + +### `RevealPeriodTooLarge` + +Reveal period is too large. + +### `RevealPeriodTooSmall` + +Reveal period is too small. + ## Rate Limiting Errors ### `ServingRateLimitExceeded` @@ -301,6 +324,10 @@ Default transaction rate limit exceeded. Childkey take rate limit exceeded. +### `StakingOperationRateLimitExceeded` + +Attempting staking operations too frequently. + ## Registration and Network Management ### `TooManyRegistrationsThisBlock` @@ -355,12 +382,88 @@ Proportion overflow when setting children. ### `TooManyChildren` -Too many children. +Too many children. ### `InvalidChildkeyTake` Childkey take is invalid. +## Subnet Leasing Errors + +### `InvalidLeaseBeneficiary` + +Invalid lease beneficiary to register the leased network. + +### `LeaseCannotEndInThePast` + +Lease cannot end in the past. + +### `LeaseNetuidNotFound` + +Couldn't find the lease netuid. + +### `LeaseDoesNotExist` + +Lease does not exist. + +### `LeaseHasNoEndBlock` + +Lease has no end block. + +### `LeaseHasNotEnded` + +Lease has not ended. + +### `Overflow` + +An overflow occurred. + +### `BeneficiaryDoesNotOwnHotkey` + +Beneficiary does not own hotkey. + +### `ExpectedBeneficiaryOrigin` + +Expected beneficiary origin. + +## Proxy Errors + +### `TooMany` + +There are too many proxies registered or too many announcements pending. + +### `NotFound` + +Proxy registration not found. + +### `NotProxy` + +Sender is not a proxy of the account to be proxied. + +### `Duplicate` + +Proxy or relationship already exists. + +### `Unproxyable` + +A call which is incompatible with the proxy type's filter was attempted. + +### `NoPermission` + +Call may not be made by proxy because it may escalate its privileges. + +### `Unannounced` + +Announcement was made too recently or does not exist. + +### `NoSelfProxy` + +Account cannot add self as proxy. + +### `AnnouncementDepositInvariantViolated` + +Invariant violated: deposit recomputation returned None after updating announcements. + ## Other Errors ### `InvalidIpType` @@ -407,6 +510,10 @@ Invalid identity. Activity cutoff is too low. +### `AdminActionProhibitedDuringWeightsWindow` + +Admin operation is prohibited during the protected weights window. + ### `CallDisabled` Call is disabled. @@ -419,3 +526,18 @@ SubToken disabled. Invalid netuid duplication. +### `SymbolDoesNotExist` + +Symbol does not exist. + +### `SymbolAlreadyInUse` + +Symbol already in use. + +### `BadOrigin` + +Wallet not authorized. Ensure that the account has the correct root or subnet owner permissions. + +### `InvalidValue` + +Generic error for out-of-range parameter value diff --git a/docs/errors-and-troubleshooting.md b/docs/errors/troubleshooting.md similarity index 86% rename from docs/errors-and-troubleshooting.md rename to docs/errors/troubleshooting.md index 34922ec656..64a420f117 100644 --- a/docs/errors-and-troubleshooting.md +++ b/docs/errors/troubleshooting.md @@ -4,7 +4,7 @@ title: "Troubleshooting" # Troubleshooting -This document presents helpful hints to troubleshoot the errors you may get while working in the Bittensor ecosystem. +This document presents helpful hints to troubleshoot the errors you may get while working in the Bittensor ecosystem. ## Priority is too low @@ -16,7 +16,6 @@ Running a `btcli` command sometimes gives me the below error: **Likely cause and remedy**: This means that you are submitting the same, duplicate transaction that you have already submitted. For example, if you are running a script, it is trying to submit transactions too quickly, most likely. You just have to wait for a few minutes before you run the command again. - ## SSLCertVerificationError Running any `btcli` command gives the following error, on macOS: @@ -36,14 +35,14 @@ Go to the folder where Python is installed, e.g., in my case (Mac OS) it is inst **Remedy 2**: Run the below commands: -- On macOS when not using any Python virtual environment: - ```bash - brew reinstall openssl - ``` +- On macOS when not using any Python virtual environment: + ```bash + brew reinstall openssl + ``` - On macOS when using a virtual environment: - ```bash - pip install urllib3 --force-reinstall - ``` + ```bash + pip install urllib3 --force-reinstall + ``` ## KeyFileError @@ -55,8 +54,8 @@ KeyFileError: Keyfile at: /path/to/.bittensor/wallets/some-coldkey/hotkeys/someh See: -- [Miner registration](./miners/index.md#miner-registration) -- [Validator registration](./validators/index.md#validator-registration) +- [Miner registration](../miners/index.md#miner-registration) +- [Validator registration](../validators/index.md#validator-registration) ## Balances.transfer not found @@ -64,8 +63,7 @@ See: ValueError: Call function 'Balances.transfer' not found ``` -**Likely cause and remedy**: You are working with an older version of Bittensor. Update your Bittensor to the latest version. See [Install Bittensor](./getting-started/installation.md). - +**Likely cause and remedy**: You are working with an older version of Bittensor. Update your Bittensor to the latest version. See [Install Bittensor](../getting-started/installation.md). ## Genesis mismatch @@ -75,4 +73,4 @@ Reason: Genesis mismatch. Banned, disconnecting. These messages are mostly harmless and you can ignore them. Your lite node will sync properly. See the "best" block numbers in the terminal log. If these block numbers are closer or approaching the current block as seen on either [https://bittensor.com/scan](https://bittensor.com/scan) or [Polkadot JS](https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Fentrypoint-finney.opentensor.ai%3A443#/explorer), then your local node is syncing properly. -You get these error messages very often because one or the other Bittensor blockchain validator nodes is running an older version of Polkadot SDK. When it says, "Banned, disconnecting", it is saying the mismatched blockchain validator node is being disconnected. This usually is fine because you don't need to be connected to all the blockchain validator nodes. +You get these error messages very often because one or the other Bittensor blockchain validator nodes is running an older version of Polkadot SDK. When it says, "Banned, disconnecting", it is saying the mismatched blockchain validator node is being disconnected. This usually is fine because you don't need to be connected to all the blockchain validator nodes. diff --git a/docs/evm-tutorials/_create-btcli-wallet.mdx b/docs/evm-tutorials/_create-btcli-wallet.mdx new file mode 100644 index 0000000000..d9b30b62fa --- /dev/null +++ b/docs/evm-tutorials/_create-btcli-wallet.mdx @@ -0,0 +1,36 @@ +import React from "react"; + +/_ +Create Wallet with BTCLI +_/ + +export const CreateBtcliPartial = () => ( + <> + +
    +
  1. Install BTCLI if you haven't already: +

    + + pip install bittensor + +

    +
  2. +
  3. Create a new wallet: +

    + + btcli wallet new_coldkey --wallet.name my_wallet + +

    +
  4. +
  5. Note down your wallet's SS58 address, which you can get with: +

    + + btcli wallet overview --wallet.name my_wallet + +

    +
  6. +
  7. Your coldkey address will start with "5" and is in SS58 format (for example: 5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty).
  8. +
+ + +); diff --git a/docs/evm-tutorials/_create-mm-wallet.mdx b/docs/evm-tutorials/_create-mm-wallet.mdx new file mode 100644 index 0000000000..33dc429034 --- /dev/null +++ b/docs/evm-tutorials/_create-mm-wallet.mdx @@ -0,0 +1,27 @@ +import React from "react"; + +/_ +Create Wallet with MetaMask +_/ + +export const CreatePartial = () => ( + <> + +
    +
  1. Install Metamask wallet browser extension, if you haven't already.
  2. +
  3. Create a new account or import an existing one.
  4. +
  5. Add the Bittensor EVM network to MetaMask: +
      +
    • Network Name: Bittensor EVM
    • +
    • RPC URL: https://test.chain.opentensor.ai
    • +
    • Chain ID: 945
    • +
    • Currency Symbol: TAO
    • +
    • Block Explorer URL: test.chain.opentensor.ai
    • +
    +
  6. +
  7. Click Save.
  8. +
  9. Click Switch network.
  10. +
+ + +); diff --git a/docs/evm-tutorials/_install.mdx b/docs/evm-tutorials/_install.mdx new file mode 100644 index 0000000000..70a08abe44 --- /dev/null +++ b/docs/evm-tutorials/_install.mdx @@ -0,0 +1,37 @@ +/_ +Install the EVM Examples repo +_/ + +export const InstallPartial = () => ( + <> +
    +
  1. + Clone the Opentensor EVM-Bittensor GitHub repo: +

    + + git clone https://github.com/opentensor/evm-bittensor.git + +

    +
  2. + +
  3. + Navigate to evm-bittensor directory: +

    + + cd evm-bittensor + +

    +
  4. + +
  5. + Install the dependencies: + + + yarn install + + +
  6. +
+ + +); diff --git a/docs/evm-tutorials/bridge-vtao.md b/docs/evm-tutorials/bridge-vtao.md new file mode 100644 index 0000000000..7b43ca4f08 --- /dev/null +++ b/docs/evm-tutorials/bridge-vtao.md @@ -0,0 +1,43 @@ +--- +title: "Token Bridging" +--- + +# Token Bridging + +This guide provides an overview of two related topics: +- how to moves TAO between Substrate-style wallets (SS58) and the Etherum style wallets on Bittensor EVM +- how to use vTAO as a token bridge between Bittensor EVM and other EVM chains. + +:::info +Bittensor EVM smart contracts are executed solely on the **Bittensor blockchain, _not_ on the Ethereum blockchain.** +::: + +## Transferring liquidity between Substrate and EVM Wallets on Bittensor Chain + +**TAO** is the native token of the Bittensor network it exists on Subtensor, Bittensor's blockchain, which is built on top of Substrate. Hence, TAO is normally held in Substrate-style, ss58-format wallets, which can be used to execute Subtensor blockchain extrinsics, including through the Bittensor Python SDK and BTCLI. + +See [Wallets, Coldkeys and Hotkeys in Bittensor](../keys/wallets) + +If TAO is transferred to an Ethereum-style h160 wallet, it can be used in Bittensor's EVM layer. This is the same token, just represented in a different account format. + +You can move TAO back and forth between Substrate and EVM wallets several ways: +Use example scripts: + - [Transfer TAO from H160 to SS58](./convert-h160-to-ss58) + - [Transfer TAO from SS58 to H160](./transfer-from-metamask-to-ss58) +- Using [`tao.app/bridge`](https://tao.app/bridge). + +- Using OTF's EVM Bridge: [`bridge.bittensor.com/`](https://bridge.bittensor.com/) + +## Bridge to other EVM Chains with vTAO + +vTAO is a liquid-staked TAO token on the Subtensor EVM, available through ['tao.app/bridge'](https://tao.app/bridge). + +- vTAO is minted by depositing TAO into a staking contract, the vTAO can later be redeemed for an amount of TAO depending on the exchange rate. +- Your wallet balance in vTAO stays the same, but the underlying TAO locked in the contract increases with staking rewards. +- vTAO can be bridged between supported EVM chains. + +:::tip +vTAO conceptually similar to [Lido's wstETH](https://docs.lido.fi/contracts/wsteth/). +::: + + diff --git a/docs/evm-tutorials/convert-h160-to-ss58.md b/docs/evm-tutorials/convert-h160-to-ss58.md new file mode 100644 index 0000000000..bb46fecefa --- /dev/null +++ b/docs/evm-tutorials/convert-h160-to-ss58.md @@ -0,0 +1,101 @@ +--- +title: "Convert Ethereum (H160) Address to Substrate (SS58)" +--- + +import { InstallPartial } from "./\_install.mdx"; +import { CreatePartial } from "./\_create-mm-wallet.mdx"; + +# Convert Ethereum (H160) Address to Substrate (SS58) + +This tutorial demonstrates how to convert between Ethereum (H160) and Substrate (SS58) addresses. This is useful for moving across the boundary between [EVM wallets and Subtensor Wallets on the Bittensor blockchain](./index.md#evm-and-subtensor-wallets-on-the-bittensor-blockchian). + +In what follows, we'll create a wallet in Metamask and convert it's public key to ss58 format in order to target it with a balance transfer using BTCLI. + +## Procedure + +### Create Wallet with MetaMask + + + +### Install the EVM Examples repo + + + +## Set your config + +### Convert Address for Bittensor + +Run the `convert-address.js` script by navigating to the `examples` folder and running the following command: + +```bash +node convert-address.js +``` + +:::warning Replace the placeholder address +Within the `examples/convert-address` file, replace the placeholder `ethereumAddress` argument with your own Ethereum wallet address. +::: + +Note down the SS58 address output by the script—this is your wallet's Subtensor address on the Bittensor network. + +### Transfer TAO to EVM Wallet + +Use `btcli` to transfer TAO to your SS58 address. Here we will use test network. + +```bash +btcli wallet transfer --destination --network test +``` + +### Verify Balance in MetaMask + +1. Open MetaMask +2. Ensure you're connected to the Bittensor EVM network +3. Your TAO balance should now be visible in MetaMask +4. You can now use this wallet for EVM transactions on Bittensor + +## Conversion Script + +Below is the code used above for the conversion. + +**Source code**: + +- [EVM examples repo](https://github.com/opentensor/evm-bittensor) +- [Address mapping](https://github.com/opentensor/evm-bittensor/blob/main/examples/address-mapping.js) +- [Convert address](https://github.com/opentensor/evm-bittensor/blob/main/examples/convert-address.js) + +```javascript +//convert-address.js + +const { convertH160ToSS58 } = require("./address-mapping.js"); + +async function main() { + const ethereumAddress = "0xbdA293c21DfCaDDAeB9aa8b98455d42325599d23"; + + const ss58Address = convertH160ToSS58(ethereumAddress); + console.log(`ss58 mirror: ${ss58Address}`); +} + +main().catch(console.error); +``` + +```javascript +// address-mapping.js +function convertH160ToSS58(ethAddress) { + const prefix = "evm:"; + const prefixBytes = new TextEncoder().encode(prefix); + const addressBytes = hexToU8a( + ethAddress.startsWith("0x") ? ethAddress : `0x${ethAddress}` + ); + const combined = new Uint8Array(prefixBytes.length + addressBytes.length); + + // Concatenate prefix and Ethereum address + combined.set(prefixBytes); + combined.set(addressBytes, prefixBytes.length); + + // Hash the combined data (the public key) + const hash = blake2AsU8a(combined); + + // Convert the hash to SS58 format + const ss58Address = encodeAddress(hash, 42); // Network ID 42 for Bittensor + return ss58Address; +} +``` diff --git a/docs/evm-tutorials/ed25519-verify-precompile.md b/docs/evm-tutorials/ed25519-verify-precompile.md index 1aae5a4488..b7799f80c1 100644 --- a/docs/evm-tutorials/ed25519-verify-precompile.md +++ b/docs/evm-tutorials/ed25519-verify-precompile.md @@ -1,47 +1,187 @@ --- -title: "Ed25519 Verify Precompile" +title: "Verify Address Precompile" --- import ThemedImage from '@theme/ThemedImage'; import useBaseUrl from '@docusaurus/useBaseUrl'; -# Ed25519 Verify Precompile +# Verify Address Precompile -This precompile is deployed on the subtensor EVM at the address `0x0000000000000000000000000000000000000402`. This precompile allows you to verify an `ed25519` signature. +The Ed25519 Verify Precompile allows EVM smart contracts to verify Ed25519 signatures, which are commonly used in Substrate-based chains like Bittensor. This is essential for bridging identity and ownership between Substrate and EVM ecosystems. For example, you may want to verify coldkey ownership before transferring to someone. EVM functionality doesn't allow transferring directly to a `ss58` address—like the public key of a Bittensor coldkey—because EVM uses the H160 address schema. To bridge the gap, you can use this precompile to prove a claim of ownership. The owner of a coldkey can send an EVM transaction with a signed message, serving as proof of ownership of the coldkey's `ss58` address. -You can use this precompile to verify proof of `ss58` account ownership on the EVM side. For example, you may need to do such verification for an airdrop to TAO owners. While EVM functionality doesn't allow airdropping directly to `ss58` addresses (because EVM is using H160 address schema), one can implement an airdrop via claiming. An owner of `ss58` address eligible for an airdrop can send an EVM transaction which includes the proof of `ss58` address ownership, for example, a signed message, uniquely specific for a given airdrop. +## Prerequisites -For a complete code example see [`ed25519-verify.js`](https://github.com/opentensor/evm-bittensor/blob/main/examples/ed25519-verify.js). +- **Node.js** (v16 or later recommended) +- **npm** or **yarn** +- [Clone the Bittensor EVM examples repo](./install.md) +- [Get set up for using EVM wallet on testnet](./evm-testnet-with-metamask-wallet) +- [Install](./install) the EVM-Bittensor repo, containing scripts and examples. -:::danger Stop. Did you install the dependencies? -Before you proceed, make sure you finished the [Install](./install.md) step. -::: - -## Run +## Example Navigate to the `examples` directory of the EVM-Bittensor repo: - ```bash - cd examples - ``` +```bash +cd examples +``` + To run this precompile, execute: - ```bash - node ed25519-verify.js - ``` +```bash +node ed25519-verify.js +``` This example demonstrates how to: -1. Sign an arbitrary message with `ed25519` key. +1. Sign an arbitrary message with `ed25519` key. +2. Verify the signature using the precompile contract. +3. Fail the verification of the signature using a corrupted message hash with the precompile contract. +4. Fail the verification of a corrupted signature with the precompile contract. - Any substrate keyring can be initialized as `ed25519` with the same seed phrase or private key as used for signing subtensor transactions, even if they are usually used to create `sr25519` signatures. - - The precompile only allows verification of 32-byte messages. However, the arbitrary message can be converted into 32-byte message by calculating the message hash (like it is done in this below example): +[On GitHub](https://github.com/opentensor/evm-bittensor/blob/main/examples/ed25519-verify.js). - ```javascript - const messageHash = ethers.keccak256(messageHex); // Hash the message to fit into bytes32 - ``` +
+ Full code +```js +const { ethers } = require('ethers'); +const { Keyring } = require('@polkadot/keyring'); -2. Verify the signature using the precompile contract. -3. Fail the verification of the signature using the corrupted message hash with the precompile contract. -4. Fail the verification of the corrupted signature with the precompile contract. \ No newline at end of file +// PROTECT YOUR PRIVATE KEYS WELL, NEVER COMMIT THEM TO GITHUB OR SHARE WITH ANYONE +const { rpcUrl } = require('./config.js'); + +const provider = new ethers.JsonRpcProvider(rpcUrl); + +const IED25519VERIFY_ADDRESS = '0x0000000000000000000000000000000000000402'; +const IEd25519VerifyABI = [ +{ +"inputs": [ +{ "internalType": "bytes32", "name": "message", "type": "bytes32" }, +{ "internalType": "bytes32", "name": "publicKey", "type": "bytes32" }, +{ "internalType": "bytes32", "name": "r", "type": "bytes32" }, +{ "internalType": "bytes32", "name": "s", "type": "bytes32" } +], +"name": "verify", +"outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], +"stateMutability": "pure", +"type": "function" +} +]; + +async function main() { +const keyring = new Keyring({ type: 'ed25519' }); +const myAccount = keyring.addFromUri('//Alice'); + +////////////////////////////////////////////////////////////////////// +// Generate a signature + +// Your message to sign +const message = 'Sign this message'; +const messageU8a = new TextEncoder().encode(message); +const messageHex = ethers.hexlify(messageU8a); // Convert message to hex string +const messageHash = ethers.keccak256(messageHex); // Hash the message to fit into bytes32 +console.log(`messageHash = ${messageHash}`); +const hashedMessageBytes = hexToBytes(messageHash); + +// Sign the message +const signature = myAccount.sign(hashedMessageBytes); +console.log(`Signature: ${bytesToHex(signature)}`); + +// Verify the signature locally +const isValid = myAccount.verify(hashedMessageBytes, signature, myAccount.publicKey); +console.log(`Is the signature valid? ${isValid}`); + +////////////////////////////////////////////////////////////////////// +// Verify the signature using the precompile contract + +const publicKeyBytes = bytesToHex(myAccount.publicKey); +console.log(`publicKeyBytes = ${publicKeyBytes}`); + +// Split signture into Commitment (R) and response (s) +let r = signature.slice(0, 32); // Commitment, a.k.a. "r" - first 32 bytes +let s = signature.slice(32, 64); // Response, a.k.a. "s" - second 32 bytes +let rBytes = bytesToHex(r); +let sBytes = bytesToHex(s); +const ed25519Contract = new ethers.Contract(IED25519VERIFY_ADDRESS, IEd25519VerifyABI, provider); +const isPrecompileValid = await ed25519Contract.verify(messageHash, publicKeyBytes, rBytes, sBytes); +console.log(`Is the signature valid according to the smart contract? ${isPrecompileValid}`); + +////////////////////////////////////////////////////////////////////// +// Verify the signature for bad data using the precompile contract + +let brokenHashedMessageBytes = hashedMessageBytes; +brokenHashedMessageBytes[0] = (brokenHashedMessageBytes[0] + 1) % 0xff; +const brokenMessageHash = bytesToHex(brokenHashedMessageBytes); +console.log(`brokenMessageHash = ${brokenMessageHash}`); +const isPrecompileValidBadData = await ed25519Contract.verify(brokenMessageHash, publicKeyBytes, rBytes, sBytes); +console.log(`Is the signature valid according to the smart contract for broken data? ${isPrecompileValidBadData}`); + +////////////////////////////////////////////////////////////////////// +// Verify the bad signature for good data using the precompile contract + +let brokenR = r; +brokenR[0] = (brokenR[0] + 1) % 0xff; +rBytes = bytesToHex(r); +const isPrecompileValidBadSignature = await ed25519Contract.verify(messageHash, publicKeyBytes, rBytes, sBytes); +console.log(`Is the signature valid according to the smart contract for broken signature? ${isPrecompileValidBadSignature}`); +} + +main().catch(console.error); + +function hexToBytes(hex) { +// Remove the '0x' prefix if it exists +if (hex.startsWith('0x')) { +hex = hex.slice(2); +} + +// Initialize the array +var bytes = new Uint8Array(hex.length / 2); + +// Loop through each pair of characters +for (var i = 0; i < bytes.length; i++) { +// Convert the pair of characters to a byte +bytes[i] = parseInt(hex.substr(i \* 2, 2), 16); +} + +return bytes; +} + +function bytesToHex(bytes) { +// Initialize the hex string +var hex = []; + +// Loop through each byte +for (var i = 0; i < bytes.length; i++) { +// Convert each byte to a hex string and add it to the array +// Ensure it is two digits by padding with a zero if necessary +hex.push((bytes[i] >>> 4).toString(16)); +hex.push((bytes[i] & 0xF).toString(16)); +} + +// Join all hex string parts into one string +return '0x' + hex.join(''); +} + +``` +
+## Example Output + +``` + +node ed25519-verify.js +@polkadot/util has multiple versions, ensure that there is only one installed. +Either remove and explicitly install matching versions or dedupe using your package manager. +The following conflicting packages were found: +cjs 12.2.1 node_modules/@polkadot/keyring/node_modules/@polkadot/util/cjs +cjs 13.5.1 node_modules/@polkadot/util/cjs +messageHash = 0xd6ce89c7d4f347455c7dddf19b42e0357edd7587b73b81b384810253c3c3c8ff +Signature: 0x35c3c28c3470ea348343cea4881bd353843236df73a04300261cb86411fe88a05a196842849eb1ef4335b1f171a70e74d2d4c8d3b71ad6a41b6fa48afec85b01 +Is the signature valid? true +publicKeyBytes = 0x88dc3417d5058ec4b4503e0c12ea1a0a89be200fe98922423d4334014fa6b0ee +Is the signature valid according to the smart contract? true +brokenMessageHash = 0xd7ce89c7d4f347455c7dddf19b42e0357edd7587b73b81b384810253c3c3c8ff +Is the signature valid according to the smart contract for broken data? false +Is the signature valid according to the smart contract for broken signature? false + +``` + +``` diff --git a/docs/evm-tutorials/evm-localnet-with-metamask-wallet.md b/docs/evm-tutorials/evm-localnet-with-metamask-wallet.md index 856493d9e8..a4d9dab7e1 100644 --- a/docs/evm-tutorials/evm-localnet-with-metamask-wallet.md +++ b/docs/evm-tutorials/evm-localnet-with-metamask-wallet.md @@ -1,20 +1,19 @@ --- -title: "EVM Localnet with Metamask Wallet" +title: "EVM on Local Chain" --- import ThemedImage from '@theme/ThemedImage'; import useBaseUrl from '@docusaurus/useBaseUrl'; -# EVM Localnet with Metamask Wallet +# EVM on Local Chain -This tutorial is for how to set up your Metamask wallet to use with EVM localnet on Bittensor. You must run either this step or [EVM Testnet with Metamask Wallet](./evm-testnet-with-metamask-wallet.md) tutorial before you can run other tutorials in this section. +This page covers getting set up to use EVM on a locally deployed Bittensor blockchain. -:::tip blog post: EVM on Bittensor -If you are new to EVM, try this [blog post](https://blog.bittensor.com/evm-on-bittensor-draft-6f323e69aff7) for a simplified explanation. -::: +Consider first trying [EVM with Bittensor testnet](./evm-testnet-with-metamask-wallet.md). This allows you to try EVM without having to deploy a blockchain locally, but you will have to obtain testnet TAO by inquiring in discord, or by completing the [BTCLI playground](../btcli/btcli-playground)challenge to obtain testnet TAO. Key values: -- **EVM Subtensor Mainnet Chain ID:**: `964` (UTF-8 encoded TAO symbol) + +- **EVM Subtensor Mainnet Chain ID:**: `964` (UTF-8 encoded TAO symbol) - **EVM Subtensor Testnet Chain ID:**: `945` (UTF-8 encoded alpha character) - **Opentensor EVM-Bittensor GitHub repo with code examples:** https://github.com/opentensor/evm-bittensor/tree/main @@ -33,7 +32,7 @@ The bare local network doesn't have the Chain ID setup and it needs to be config adminUtils >> sudoSetEvmChainId ``` -## Step 3. Create a Metamask wallet +## Step 3. Create a Metamask wallet 1. If you don't already have it, [install Metamask wallet](https://metamask.io/download/) browser extension. 2. Create a new account. @@ -42,17 +41,17 @@ adminUtils >> sudoSetEvmChainId Follow the below steps: -1. Open Metamask Wallet extension on your browser. Click on the drop-down **Select a network** menu at the top left. -2. Click on **+ Add a Custom Network** button. +1. Open Metamask Wallet extension on your browser. Click on the drop-down **Select a network** menu at the top left. +2. Click on **+ Add a Custom Network** button. 3. Enter the following details: - - **Network name:** "Subtensor Local" - - **Default RPC URL:** http://localhost:9944/ - - **Chain ID:** `964` or `945`, depending on your setting in Step 2 - - **Currency symbol:** TAO -6. Click **Save**. -7. Click on **Select a network** again and switch to the Subtensor Local network. + - **Network name:** "Subtensor Local" + - **Default RPC URL:** http://localhost:9944/ + - **Chain ID:** `964` or `945`, depending on your setting in Step 2 + - **Currency symbol:** TAO +4. Click **Save**. +5. Click on **Select a network** again and switch to the Subtensor Local network. -With the above steps, you have successfully configured your Metamask wallet with the EVM localnet. +With the above steps, you have successfully configured your Metamask wallet with the EVM localnet. ## Step 5. Configure private key and RPC endpoint @@ -60,42 +59,42 @@ With the above steps, you have successfully configured your Metamask wallet with Before you proceed, make sure you finished the [Install](./install.md) step. ::: -In this step you will copy the private key from your Metamask wallet account and paste it into the configuration file in the repo. This step will ensure that you are not prompted with password each and every step as you run these tutorials. - +In this step you will copy the private key from your Metamask wallet account and paste it into the configuration file in the repo. This step will ensure that you are not prompted with password each and every step as you run these tutorials. 1. Navigate to the `examples` directory of the EVM-Bittensor repo: - ```bash - cd examples - ``` + ```bash + cd examples + ``` 2. Create `config.js` file by copying the `config-example.js` file: - ```bash - cp config-example.js config.js - ``` + ```bash + cp config-example.js config.js + ``` -3. On Metamask wallet extension, your wallet account will have a H160 account address, starting with the `0x` prefix (for example: `0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf`), and also your wallet account name. -4. Click on your wallet account name, which will open the drop-down menu. -5. Click on the ⋮ (three vertical dots, i.e., vertical ellipsis) next to the wallet account and select **Account details**. It will open a view with a QR code, your wallet account H160 address and a **Show private key** button. +3. On Metamask wallet extension, your wallet account will have a H160 account address, starting with the `0x` prefix (for example: `0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf`), and also your wallet account name. +4. Click on your wallet account name, which will open the drop-down menu. +5. Click on the **⋮** (three vertical dots, i.e., vertical ellipsis) next to the wallet account and select **Account details**. It will open a view with a QR code, your wallet account H160 address and a **Show private key** button. 6. Click on the **Show private key** button, enter the password. You will then see the private key for your wallet account. Copy this private key. -7. Paste this private key into `ethPrivateKey` string in your `config.js` file as shown below (mangled for security): - - ```javascript - const ethPrivateKey = "02c1c4112233snipsnipsnipgh933aca491e090e0b7xxyy1b124b86d9382b01a8"; - ``` - -8. Finally, edit the `module.exports` section of the `config.js` file to use the localnet URLs, as shown below: - ```javascript - module.exports = { - ethPrivateKey, - subSeed, - rpcUrl: rpcUrlLocal, - wsUrl: wsUrlLocal, - } - ``` - -Save the `config.js` file. Now your setup is ready to run the tutorials with EVM localnet. +7. Paste this private key into `ethPrivateKey` string in your `config.js` file as shown below (mangled for security): + + ```javascript + const ethPrivateKey = + "02c1c4112233snipsnipsnipgh933aca491e090e0b7xxyy1b124b86d9382b01a8"; + ``` + +8. Finally, edit the `module.exports` section of the `config.js` file to use the localnet URLs, as shown below: + ```javascript + module.exports = { + ethPrivateKey, + subSeed, + rpcUrl: rpcUrlLocal, + wsUrl: wsUrlLocal, + }; + ``` + +Save the `config.js` file. Now your setup is ready to run the tutorials with EVM localnet. ## Step 6 (Optional). Disable white list for contract deployment diff --git a/docs/evm-tutorials/evm-mainnet-with-metamask-wallet.md b/docs/evm-tutorials/evm-mainnet-with-metamask-wallet.md index 7a7d2465e2..6aa1c37da7 100644 --- a/docs/evm-tutorials/evm-mainnet-with-metamask-wallet.md +++ b/docs/evm-tutorials/evm-mainnet-with-metamask-wallet.md @@ -1,24 +1,21 @@ --- -title: "EVM Mainnet with Metamask Wallet" +title: "EVM on Mainnet" --- + import ThemedImage from '@theme/ThemedImage'; import useBaseUrl from '@docusaurus/useBaseUrl'; -# EVM Mainnet with Metamask Wallet - -This tutorial is for how to set up your Metamask wallet to use with the Mainnet (finney) on Bittensor. You must run this step before you can run other tutorials in this section. +# EVM on Mainnet -:::tip blog post: EVM on Bittensor -If you are new to EVM, try this [blog post](https://blog.bittensor.com/evm-on-bittensor-draft-6f323e69aff7) for a simplified explanation. -::: +This page covers how to set up your Metamask wallet to use with the Mainnet (finney) on Bittensor. You must run this step before you can run other tutorials in this section. Key values: + - The **Bittensor Mainnet URL:** `https://lite.chain.opentensor.ai` - **EVM Subtensor Chain ID:** `964` (UTF-8 encoded TAO symbol) - **Opentensor EVM-Bittensor GitHub repo:** `https://github.com/opentensor/evm-bittensor/tree/main` - -## Step 1. Create a Metamask wallet +## Step 1. Create a Metamask wallet 1. If you don't already have it, [install Metamask wallet](https://metamask.io/download/) browser extension. 2. Create a new account. @@ -33,23 +30,23 @@ Open [Subtensor page on ChainList.org](https://chainlist.org/chain/964) and clic Add the Mainnet to Metamask from within the Metamask wallet. Follow the below steps: -1. Open Metamask Wallet extension on your browser. Click on the ⋮ (three vertical dots, i.e., vertical ellipsis) at the top right. -2. Select **Settings** from the drop-down menu. +1. Open Metamask Wallet extension on your browser. Click on the ⋮ (three vertical dots, i.e., vertical ellipsis) at the top right. +2. Select **Settings** from the drop-down menu. 3. Select **Networks** > **Add network**. 4. Click on **Add a network manually** at the bottom of the networks list. 5. Enter the following details: - - **Network name:** "Subtensor" - - **EVM RPC URL:** `https://lite.chain.opentensor.ai` - - **Chain ID:** `964` - - **Currency symbol:** TAO + - **Network name:** "Subtensor" + - **EVM RPC URL:** `https://lite.chain.opentensor.ai` + - **Chain ID:** `964` + - **Currency symbol:** TAO 6. Click **Save**. 7. Then click on **Switch network**. -With the above steps, you have successfully configured your Metamask wallet with the Mainnet. +With the above steps, you have successfully configured your Metamask wallet with the Mainnet. ## Step 3 Obtain TAO -We cannot provide you with specific advice for where/how to obtain TAO; however, if you need to transfer tokens to the account you created in MetaMask, use a site like https://snow-address-converter.netlify.app/ to convert your H160-format address (the one that starts with "0x") to substrate's SS58 version (starting with "5"). When sending TAO to your account from an account managed via substrate wallet applications and/or exchange accounts, use the SS58 version of the address as the destination. +We cannot provide you with specific advice for where/how to obtain TAO; however, if you need to transfer tokens to the account you created in MetaMask, use a site like https://snow-address-converter.netlify.app/ to convert your H160-format address (the one that starts with "0x") to substrate's SS58 version (starting with "5"). When sending TAO to your account from an account managed via substrate wallet applications and/or exchange accounts, use the SS58 version of the address as the destination. ## Step 4. Copy Metamask wallet private key into config @@ -57,28 +54,29 @@ We cannot provide you with specific advice for where/how to obtain TAO; however, Before you proceed, make sure you finished the [Install](./install.md) step. ::: -In this step you will copy the private key from your Metamask wallet account and paste it into the configuration file in the repo. This step will ensure that you are not prompted with password each and every step as you run these tutorials. - +In this step you will copy the private key from your Metamask wallet account and paste it into the configuration file in the repo. This step will ensure that you are not prompted with password each and every step as you run these tutorials. 1. Navigate to the `examples` directory of the EVM-Bittensor repo: - ```bash - cd examples - ``` + ```bash + cd examples + ``` 2. Create `config.js` file by copying the `config-example.js` file: - ```bash - cp config-example.js config.js - ``` + ```bash + cp config-example.js config.js + ``` -3. On Metamask wallet extension, your wallet account will have a H160 account address, starting with the `0x` prefix (for example: `0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf`), and also your wallet account name. -4. Click on your wallet account name, which will open the drop-down menu. -5. Click on the ⋮ (three vertical dots, i.e., vertical ellipsis) next to the wallet account and select **Account details**. It will open a view with a QR code, your wallet account H160 address and a **Show private key** button. +3. On Metamask wallet extension, your wallet account will have a H160 account address, starting with the `0x` prefix (for example: `0x7E5F4552091A69125d5DfCb7b8C2659029395Bdf`), and also your wallet account name. +4. Click on your wallet account name, which will open the drop-down menu. +5. Click on the **⋮** (three vertical dots, i.e., vertical ellipsis) next to the wallet account and select **Account details**. It will open a view with a QR code, your wallet account H160 address and a **Show private key** button. 6. Click on the **Show private key** button, enter the password. You will then see the private key for your wallet account. Copy this private key. 7. Paste this private key into `ethPrivateKey` string in your `config.js` file as shown below (mangled for security): ```javascript -const ethPrivateKey = "02c1c4112233snipsnipsnipgh933aca491e090e0b7xxyy1b124b86d9382b01a8"; +const ethPrivateKey = + "02c1c4112233snipsnipsnipgh933aca491e090e0b7xxyy1b124b86d9382b01a8"; ``` -Save the `config.js` file. Now your setup is ready to run the tutorials with EVM Mainnet. + +Save the `config.js` file. Now your setup is ready to run the tutorials with EVM Mainnet. diff --git a/docs/evm-tutorials/evm-on-subtensor.md b/docs/evm-tutorials/evm-on-subtensor.md deleted file mode 100644 index cfa49fff9a..0000000000 --- a/docs/evm-tutorials/evm-on-subtensor.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: "EVM on Subtensor" ---- - -import ThemedImage from '@theme/ThemedImage'; -import useBaseUrl from '@docusaurus/useBaseUrl'; - -# EVM on Subtensor - -Ethereum compatibility layer is now available on the subtensor. Using this EVM feature you can: -- Deploy and interact with any Ethereum smart contract, without any need to change it, on the subtensor blockchain. -- Access all the standard Ethereum JSON-RPC methods from this EVM compatibility layer on Bittensor. - -When this EVM feature is turned ON, it allows the subtensor blockchain to execute Ethereum-compatible smart contracts. - -:::danger EVM smart contract executes on subtensor -Note that all operations performed by the subtensor EVM feature are executed solely on the subtensor blockchain, not on the Ethereum blockchain. -::: - -This document explains in simple terms what this EVM on subtensor is and how it works. Head on over to the [EVM Tutorials](./index.md) to start learning how to use this feature. - -## Ethereum vs Bittensor smart contracts - -On the Ethereum network, nodes such as full nodes, validator nodes and archive nodes run the Ethereum Virtual Environment (EVM) run-time environment. Smart contracts operate under this EVM. See the below high-level diagram. - -When we say “smart contracts on Bittensor” we refer to the new EVM compability feature in the Bittensor subtensor blockchain. When this EVM feature is turned ON, it allows the subtensor blockchain to execute Ethereum-compatible smart contracts. **Note that all operations performed by this new subtensor EVM feature are executed solely on the subtensor blockchain, not on the Ethereum blockchain.** See the below diagram showing how smart contracts on subtensor work: - - - - - - - - - - -Next, see [EVM Tutorials](./index.md) to start learning how to use this feature. diff --git a/docs/evm-tutorials/evm-testnet-with-metamask-wallet.md b/docs/evm-tutorials/evm-testnet-with-metamask-wallet.md index 17079ed1be..4144ed906e 100644 --- a/docs/evm-tutorials/evm-testnet-with-metamask-wallet.md +++ b/docs/evm-tutorials/evm-testnet-with-metamask-wallet.md @@ -1,17 +1,14 @@ --- -title: "EVM Testnet with Metamask Wallet" +title: "EVM on Testnet" --- import ThemedImage from '@theme/ThemedImage'; import useBaseUrl from '@docusaurus/useBaseUrl'; +import { CreatePartial } from "./\_create-mm-wallet.mdx"; -# EVM Testnet with Metamask Wallet +# EVM on Testnet -This tutorial is for how to set up your Metamask wallet to use with the testnet on Bittensor. You must run this step before you can run other tutorials in this section. - -:::tip blog post: EVM on Bittensor -If you are new to EVM, try this [blog post](https://blog.bittensor.com/evm-on-bittensor-draft-6f323e69aff7) for a simplified explanation. -::: +This page covers how to set up your Metamask wallet to use with the testnet on Bittensor. You must run this step before you can run other tutorials in this section. Key values: @@ -19,12 +16,26 @@ Key values: - **EVM Subtensor Chain ID:** `945` (UTF-8 encoded alpha character) - **Opentensor EVM-Bittensor GitHub repo:** `https://github.com/opentensor/evm-bittensor/tree/main` -## Step 1. Create a Metamask wallet +## Create Wallet with MetaMask + + + +## Connect to EVM Testnet + +Confirm the EVM node is online and accessible. You can check the node status independently using `curl` or similar tools: -1. If you don't already have it, [install Metamask wallet](https://metamask.io/download/) browser extension. -2. Create a new account. +```bash +curl -X POST \ + -H "Content-Type: application/json" \ + --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' \ + https://test.chain.opentensor.ai +``` + +```console +{"jsonrpc":"2.0","id":1,"result":"0x460943"} +``` -### Step 2. Add testnet to Metamask +### Add testnet to Metamask Add the testnet to Metamask from within the Metamask wallet. Follow the below steps: @@ -42,15 +53,11 @@ Add the testnet to Metamask from within the Metamask wallet. Follow the below st With the above steps, you have successfully configured your Metamask wallet with the testnet. -## Step 3 Obtain TAO - -Next, request testnet TAO in the Bittensor community [Discord](https://discord.com/channels/799672011265015819/1107738550373454028/threads/1331693251589312553). Alternatively, you can transfer some testnet TAO to your wallet address using the [BTCLI Live Coding Playground](../btcli/btcli-playground.md#transfer). +## Obtain TAO -## Step 4. Copy Metamask wallet private key into config +Next, request testnet TAO in the Bittensor community [Discord](https://discord.com/channels/799672011265015819/1107738550373454028/threads/1331693251589312553). Alternatively, you can obtain testnet TAO through the [BTCLI Live Coding Playground](../btcli/btcli-playground.md#transfer). -:::danger Stop. Did you install the dependencies? -Before you proceed, make sure you finished the [Install](./install.md) step. -::: +## Copy Metamask wallet private key into config In this step you will copy the private key from your Metamask wallet account and paste it into the configuration file in the repo. This step will ensure that you are not prompted with password each and every step as you run these tutorials. diff --git a/docs/evm-tutorials/examples.md b/docs/evm-tutorials/examples.md new file mode 100644 index 0000000000..1a1eaa7082 --- /dev/null +++ b/docs/evm-tutorials/examples.md @@ -0,0 +1,49 @@ +--- +title: "Bittensor EVM: Examples and Precompiles" +--- + +import { InstallPartial } from "./\_install.mdx"; + +# Bittensor EVM: Examples and Precompiles + +## Available Precompiles + +The following precompiled smart contracts are available on the Bittensor EVM. +The source code can be found [on GitHub](https://github.com/opentensor/subtensor/blob/main/precompiles). + +Code examples used throughout this section are provided by the _Opentensor Foundation_ (_OTF_), and come from [this repository](https://github.com/opentensor/evm-bittensor/tree/main/examples). + +## Examples + +- [Convert Ethereum (H160) Address to Substrate (SS58)](./convert-h160-to-ss58): Learn how to convert between H160 and SS58 address formats + +## Standard Ethereum Precompiles + +- `ECRecover` (0x1): Recover the address associated with the public key from elliptic curve signature +- `Sha256` (0x2): SHA-256 hash function +- `Ripemd160` (0x3): RIPEMD-160 hash function +- `Identity` (0x4): Identity function (returns input data) +- `Modexp` (0x5): Modular exponentiation +- `Sha3FIPS256` (0x400): SHA3-256 hash function (FIPS variant) +- `ECRecoverPublicKey` (0x401): Recover the public key from an elliptic curve signature + +## Bittensor-Specific Precompiles + +The following list consists of Bittensor-specific precompiles with links to their respective documentation: + +- [`Ed25519Verify`](./ed25519-verify-precompile.md): Verify Ed25519 signatures +- [`BalanceTransfer`](./transfer-between-two-h160-accounts.md): Transfer TAO between accounts +- [`StakingPrecompile`](./staking-precompile.md): Manage staking operations +- [`StakingPrecompileV2`](./staking-precompile.md) (0x805): Main staking operations including: + - `addStake`: Add stake to a hotkey + - `removeStake`: Remove stake from a hotkey + - `moveStake`: Move stake between hotkeys + - `transferStake`: Transfer stake between coldkeys + - `getTotalColdkeyStake`: Get total stake for a coldkey + - `getTotalHotkeyStake`: Get total stake for a hotkey + - `getStake`: Get stake between specific hotkey and coldkey + - `addProxy`: Add a proxy delegate + - `removeProxy`: Remove a proxy delegate +- [`SubnetPrecompile`](./subnet-precompile.md): Manage subnet operations +- [`MetagraphPrecompile`](./metagraph-precompile.md): Interact with the metagraph +- [`NeuronPrecompile`](./neuron-precompile.md): Manage neuron operations diff --git a/docs/evm-tutorials/hardhat-config-for-subtensor-evm.md b/docs/evm-tutorials/hardhat-config-for-subtensor-evm.md index 0cca194579..6443faff71 100644 --- a/docs/evm-tutorials/hardhat-config-for-subtensor-evm.md +++ b/docs/evm-tutorials/hardhat-config-for-subtensor-evm.md @@ -1,11 +1,11 @@ --- -title: "Hardhat Configuration for Subtensor EVM" +title: "Configuring Hardhat" --- import ThemedImage from '@theme/ThemedImage'; import useBaseUrl from '@docusaurus/useBaseUrl'; -# Hardhat Configuration for Subtensor EVM +# Configuring Hardhat You can use [Hardhat](https://hardhat.org/) development environment for the EVM feature on subtensor. The Hardhat networks can be configured using the `hardhat.config.ts` file, as shown below. diff --git a/docs/evm-tutorials/index.md b/docs/evm-tutorials/index.md index d11c912725..e1f882a2b1 100644 --- a/docs/evm-tutorials/index.md +++ b/docs/evm-tutorials/index.md @@ -1,5 +1,5 @@ --- -title: "EVM smart contracts on Bittensor" +title: "Bittensor EVM Smart Contracts" --- import ThemedImage from '@theme/ThemedImage'; @@ -23,49 +23,78 @@ import { BiSolidNetworkChart } from "react-icons/bi"; import { FaMoneyBillTransfer } from "react-icons/fa6"; import { GrStakeholder } from "react-icons/gr"; -# EVM smart contracts on Bittensor +# Bittensor EVM Smart Contracts -Full Ethereum virtual machine (EVM) compatibility is now available on subtensor (the blockchain in Bittensor). This allows users to: +A full ethereum virtual machine (EVM) runtime operates as an application layer on top of the Bittensor blockchain (Subtensor). This allows users to: -- Deploy most EVM smart contracts on subtensor without changing the code -- Interact with deployed smart contracts on the subtensor blockchain -- Access standard Ethereum JSON-RPC methods from this EVM compatibility layer on [Subtensor](https://github.com/opentensor/subtensor), Bittensor's substrate blockchain. +- deploy most EVM smart contracts on subtensor without changing the code, +- interact with deployed smart contracts on the subtensor blockchain, and +- access standard Ethereum JSON-RPC methods. -## Before you proceed +:::info +Bittensor EVM smart contracts are executed solely on the **Bittensor blockchain, _not_ on the Ethereum blockchain.** +::: -Before you proceed to use EVM on subtensor, make a note of the following: +See: -1. **EVM smart contract executes on subtensor**: The EVM feature allows the subtensor blockchain to execute Ethereum-compatible smart contracts. Note that all operations performed by this new subtensor EVM feature are executed solely on the subtensor blockchain, not on the Ethereum blockchain. -2. **1 TAO = 1e18 on subtensor EVM**: While working with the subtensor EVM, 1 TAO should be written as 1 followed by 18 zeroes, i.e., 1e18. See this code example: [https://github.com/opentensor/evm-bittensor/blob/main/examples/withdraw.js#L58](https://github.com/opentensor/evm-bittensor/blob/main/examples/withdraw.js#L58). +- [Examples and Precompiles](./examples.md) +- [EVM on Testnet](./evm-testnet-with-metamask-wallet.md) +- [EVM on Local Chain](./evm-localnet-with-metamask-wallet.md) +- [EVM on Mainnet](./evm-mainnet-with-metamask-wallet.md) +- [Opentensor Foundation Blogpost: EVM on Bittensor](https://blog.bittensor.com/evm-on-bittensor-draft-6f323e69aff7) -Run the below tutorials to learn how to use the EVM feature on the Bittensor blockchain. +## EVM and Subtensor wallets on the Bittensor blockchian - - - - - +Bittensor wallets are based on Polkadot-style ss58 addresses, whereas Ethereum uses h160 addresses. + +The holder of a private key for an ss58 address based on the corresponding public key can sign transactions on any Bittensor chain for that address. Anyone who creates key-pairs using `btcli wallet`, for example, holds the private key and the corresponding seed phrase, and hence can sign Bittensor transactions for that wallet. + +Similarly, creating an Ethereum wallet gives you control of the h160 private key for the corresponding public key. + +:::info +You can easily [convert an h160 address to an ss58 address](./convert-h160-to-ss58.md), or vice versa, but this does _not_ yield the corresponding private key. This means that if you create a wallet in Bittensor, you will not be able to sign Ethereum contracts with it, nor versa. +::: + +Hence, in the context of Bittensor EVM we can distinguish between: + +- 'Bittensor wallets': created using the Bittensor tool chain and therefore able to sign transactions using Bittensor transaction clients (BTCLI and the Bittensor SDK), but not EVM smart contracts, on the Bittensor blockchain. +- 'EVM wallets': created using an EVM client such as MetaMask and therefore able to sign EVM smart contracts, but not Subtensor extrinsics, on the Bittensor blockchain. + +## Ethereum vs Bittensor EVM smart contract runtime + +On the Ethereum network, nodes such as full nodes, validator nodes and archive nodes run the Ethereum Virtual Environment (EVM) run-time environment. Smart contracts operate under this EVM. See the below high-level diagram. + +:::info +Note that all operations performed by Bittensor EVM are executed solely on the Bittensor blockchain, not on the Ethereum blockchain. +::: + + + + + + + + + + body='Get started by installing dependencies first.' /> + + + - As the function parameter indicates, `amount` in `addStake` and `removeStake` are specified in TAO $\tau$. + - That when transferring liquidity to the contract, `msg.value` is in denominations of 1/1e18 TAO $\tau$ . The staking precompile, however, expects RAO, 1/1e9 TAO $\tau$. You must convert before calling it: **uint256 amount = msg.value / 1e9**. diff --git a/docs/evm-tutorials/subnet-precompile.md b/docs/evm-tutorials/subnet-precompile.md new file mode 100644 index 0000000000..a3344fdc92 --- /dev/null +++ b/docs/evm-tutorials/subnet-precompile.md @@ -0,0 +1,1107 @@ +--- +title: "Subnet Precompile" +--- + +import ThemedImage from '@theme/ThemedImage'; +import useBaseUrl from '@docusaurus/useBaseUrl'; + +# Subnet Precompile + +This precompile allows you to interact with Bittensor subnets through EVM smart contracts, affording functionality for registering networks, viewing and setting network parameters, and querying network state. + +This page: + +- described the precompile's [available functions](#available-functions) on the precompile +- demonstrates the precompile's usage with [example scripts](#example-scripts). + +The subnet precompile is available at address `0x803` (2051 in decimal). + +View the [source on GitHub](https://github.com/opentensor/subtensor/blob/main/precompiles/src/subnet.rs) + +:::info permissions +Subnet operations have distinct requirements! + +- Creating a subnet, i.e. [`registerNetwork`,](#registernetwork) requires a coldkey with sufficient TAO to cover the current burn cost. + + See [burn cost for subnet creation](../local-build/create-subnet#subnet-creation-cost). + +- Setting subnet hyperparameters requires the private key for the coldkey that owns the subnet (the one that created it, unless this has been transferred). + +::: + +## Available Functions + +The subnet precompile provides comprehensive functionality for subnet management and configuration. All functions are categorized below: + +### Network Registration + +#### `registerNetwork` + +Create/register a new subnet, without setting identity information. + +**Parameters:** + +- `hotkey` (bytes32): The hotkey (32 bytes) that will own the network + +**Returns:** + +- None (payable function) + +**Description:** +Registers a new subnet on the Bittensor network. The caller becomes the subnet owner and can manage subnet parameters. + +#### `registerNetworkWithIdentity` + +Registers a new subnet with detailed identity information. + +**Parameters:** + +- `hotkey` (bytes32): The hotkey that will own the network +- `subnetName` (string): Name of the subnet (max 256 chars) +- `githubRepo` (string): GitHub repository URL (max 1024 chars) +- `subnetContact` (string): Contact information (max 1024 chars) +- `subnetUrl` (string): Subnet website URL (max 1024 chars) +- `discord` (string): Discord server invite (max 256 chars) +- `description` (string): Subnet description (max 1024 chars) +- `additional` (string): Additional information (max 1024 chars) + +**Returns:** + +- None (payable function) + +**Description:** +Registers a new subnet with comprehensive identity metadata that helps users understand the subnet's purpose and how to interact with it. + +### Rate Limiting + +See [Rate Limits in Bittensor](../learn/chain-rate-limits.md). + +#### `getServingRateLimit` + +Gets the serving rate limit for a subnet. + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID + +**Returns:** + +- `uint64`: The serving rate limit value + +#### `setServingRateLimit` + +Sets the serving rate limit for a subnet. + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID +- `servingRateLimit` (uint64): The new serving rate limit value + +**Returns:** + +- None (payable function) + +### Difficulty Management + +#### `getMinDifficulty` + +Gets the minimum difficulty for a subnet. + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID + +**Returns:** + +- `uint64`: The minimum difficulty value + +#### `setMinDifficulty` + +Sets the minimum difficulty for a subnet. + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID +- `minDifficulty` (uint64): The new minimum difficulty value + +**Returns:** + +- None (payable function) + +#### `getMaxDifficulty` + +Gets the maximum difficulty for a subnet. + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID + +**Returns:** + +- `uint64`: The maximum difficulty value + +#### `setMaxDifficulty` + +Sets the maximum difficulty for a subnet. + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID +- `maxDifficulty` (uint64): The new maximum difficulty value + +**Returns:** + +- None (payable function) + +#### `getDifficulty` + +Gets the current difficulty for a subnet. + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID + +**Returns:** + +- `uint64`: The current difficulty value + +#### `setDifficulty` + +Sets the current difficulty for a subnet. + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID +- `difficulty` (uint64): The new difficulty value + +**Returns:** + +- None (payable function) + +### Weight Management + +#### `getWeightsVersionKey` + +Gets the weights version key for a subnet. + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID + +**Returns:** + +- `uint64`: The weights version key value + +#### `setWeightsVersionKey` + +Sets the weights version key for a subnet. + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID +- `weightsVersionKey` (uint64): The new weights version key value + +**Returns:** + +- None (payable function) + +#### `getWeightsSetRateLimit` + +Gets the weights set rate limit for a subnet. + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID + +**Returns:** + +- `uint64`: The weights set rate limit value + +#### `setWeightsSetRateLimit` ⚠️ **DEPRECATED** + +Sets the weights set rate limit for a subnet. **This function is deprecated. Subnet owners cannot set weight setting rate limits.** + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID +- `weightsSetRateLimit` (uint64): The weights set rate limit value (ignored) + +**Returns:** + +- None (payable function) + +**Description:** +This function still exists for backward compatibility but performs no operation and returns successfully. + +#### `getMaxWeightLimit` + +Gets the maximum weight limit for a subnet. + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID + +**Returns:** + +- `uint16`: The maximum weight limit value + +#### `setMaxWeightLimit` + +Sets the maximum weight limit for a subnet. + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID +- `maxWeightLimit` (uint16): The new maximum weight limit value + +**Returns:** + +- None (payable function) + +#### `getMinAllowedWeights` + +Gets the minimum allowed weights for a subnet. + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID + +**Returns:** + +- `uint16`: The minimum allowed weights value + +#### `setMinAllowedWeights` + +Sets the minimum allowed weights for a subnet. + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID +- `minAllowedWeights` (uint16): The new minimum allowed weights value + +**Returns:** + +- None (payable function) + +### Consensus Parameters + +#### `getAdjustmentAlpha` + +Gets the adjustment alpha parameter for a subnet. + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID + +**Returns:** + +- `uint64`: The adjustment alpha value + +#### `setAdjustmentAlpha` + +Sets the adjustment alpha parameter for a subnet. + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID +- `adjustmentAlpha` (uint64): The new adjustment alpha value + +**Returns:** + +- None (payable function) + +#### `getKappa` + +Gets the kappa parameter for a subnet. + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID + +**Returns:** + +- `uint16`: The kappa value + +#### `setKappa` + +Sets the kappa parameter for a subnet. + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID +- `kappa` (uint16): The new kappa value + +**Returns:** + +- None (payable function) + +#### `getRho` + +Gets the rho parameter for a subnet. + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID + +**Returns:** + +- `uint16`: The rho value + +#### `setRho` + +Sets the rho parameter for a subnet. + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID +- `rho` (uint16): The new rho value + +**Returns:** + +- None (payable function) + +#### `getAlphaSigmoidSteepness` + +Gets the alpha sigmoid steepness parameter for a subnet. + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID + +**Returns:** + +- `uint16`: The alpha sigmoid steepness value + +#### `setAlphaSigmoidSteepness` + +Sets the alpha sigmoid steepness parameter for a subnet. + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID +- `steepness` (uint16): The new alpha sigmoid steepness value + +**Returns:** + +- None (payable function) + +#### `getAlphaValues` + +Gets the alpha low and high values for a subnet. + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID + +**Returns:** + +- `uint16`: The alpha low value +- `uint16`: The alpha high value + +#### `setAlphaValues` + +Sets the alpha low and high values for a subnet. + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID +- `alphaLow` (uint16): The new alpha low value +- `alphaHigh` (uint16): The new alpha high value + +**Returns:** + +- None (payable function) + +### Network Activity + +#### `getImmunityPeriod` + +Gets the immunity period for a subnet. + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID + +**Returns:** + +- `uint16`: The immunity period value + +#### `setImmunityPeriod` + +Sets the immunity period for a subnet. + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID +- `immunityPeriod` (uint16): The new immunity period value + +**Returns:** + +- None (payable function) + +#### `getActivityCutoff` + +Gets the activity cutoff for a subnet. + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID + +**Returns:** + +- `uint16`: The activity cutoff value + +#### `setActivityCutoff` + +Sets the activity cutoff for a subnet. + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID +- `activityCutoff` (uint16): The new activity cutoff value + +**Returns:** + +- None (payable function) + +### Registration Control + +#### `getNetworkRegistrationAllowed` + +Gets whether network registration is allowed for a subnet. + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID + +**Returns:** + +- `bool`: Whether network registration is allowed + +#### `setNetworkRegistrationAllowed` + +Sets whether network registration is allowed for a subnet. + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID +- `registrationAllowed` (bool): Whether to allow network registration + +**Returns:** + +- None (payable function) + +#### `getNetworkPowRegistrationAllowed` + +Gets whether PoW registration is allowed for a subnet. + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID + +**Returns:** + +- `bool`: Whether PoW registration is allowed + +#### `setNetworkPowRegistrationAllowed` + +Sets whether PoW registration is allowed for a subnet. + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID +- `registrationAllowed` (bool): Whether to allow PoW registration + +**Returns:** + +- None (payable function) + +### Burn Management + +#### `getMinBurn` + +Gets the minimum burn amount for a subnet. + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID + +**Returns:** + +- `uint64`: The minimum burn amount + +#### `setMinBurn` ⚠️ **DEPRECATED** + +Sets the minimum burn amount for a subnet. **This function is deprecated. Subnet owners cannot set the minimum burn anymore.** + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID +- `minBurn` (uint64): The minimum burn amount (ignored) + +**Returns:** + +- None (payable function) + +**Description:** +This function still exists for backward compatibility but performs no operation and returns successfully. + +#### `getMaxBurn` + +Gets the maximum burn amount for a subnet. + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID + +**Returns:** + +- `uint64`: The maximum burn amount + +#### `setMaxBurn` ⚠️ **DEPRECATED** + +Sets the maximum burn amount for a subnet. **This function is deprecated. Subnet owners cannot set the maximum burn anymore.** + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID +- `maxBurn` (uint64): The maximum burn amount (ignored) + +**Returns:** + +- None (payable function) + +**Description:** +This function still exists for backward compatibility but performs no operation and returns successfully. + +### Bonds and Moving Averages + +#### `getBondsMovingAverage` + +Gets the bonds moving average for a subnet. + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID + +**Returns:** + +- `uint64`: The bonds moving average value + +#### `setBondsMovingAverage` + +Sets the bonds moving average for a subnet. + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID +- `bondsMovingAverage` (uint64): The new bonds moving average value + +**Returns:** + +- None (payable function) + +### Feature Toggles + +#### `getCommitRevealWeightsEnabled` + +Gets whether commit-reveal weights are enabled for a subnet. + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID + +**Returns:** + +- `bool`: Whether commit-reveal weights are enabled + +#### `setCommitRevealWeightsEnabled` + +Sets whether commit-reveal weights are enabled for a subnet. + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID +- `enabled` (bool): Whether to enable commit-reveal weights + +**Returns:** + +- None (payable function) + +#### `getCommitRevealWeightsInterval` + +Gets the commit-reveal weights interval for a subnet. + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID + +**Returns:** + +- `uint64`: The commit-reveal weights interval value + +#### `setCommitRevealWeightsInterval` + +Sets the commit-reveal weights interval for a subnet. + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID +- `interval` (uint64): The new commit-reveal weights interval value + +**Returns:** + +- None (payable function) + +#### `getLiquidAlphaEnabled` + +Gets whether liquid alpha is enabled for a subnet. + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID + +**Returns:** + +- `bool`: Whether liquid alpha is enabled + +#### `setLiquidAlphaEnabled` + +Sets whether liquid alpha is enabled for a subnet. + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID +- `enabled` (bool): Whether to enable liquid alpha + +**Returns:** + +- None (payable function) + +#### `getYuma3Enabled` + +Gets whether Yuma3 consensus is enabled for a subnet. + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID + +**Returns:** + +- `bool`: Whether Yuma3 consensus is enabled + +#### `setYuma3Enabled` + +Sets whether Yuma3 consensus is enabled for a subnet. + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID +- `enabled` (bool): Whether to enable Yuma3 consensus + +**Returns:** + +- None (payable function) + +### Transfer Control + +#### `toggleTransfers` + +Toggles transfers on/off for a subnet. + +**Parameters:** + +- `netuid` (uint16): The subnetwork ID +- `toggle` (bool): Whether to enable or disable transfers + +**Returns:** + +- None (payable function) + +## Example Scripts + +[Example source on GitHub](https://github.com/opentensor/evm-bittensor/blob/main/examples/subnet.js) + +### Javascript + +```js +const { ethers, assert } = require("ethers"); +const { ApiPromise, WsProvider, Keyring } = require("@polkadot/api"); +const { convertH160ToSS58 } = require("./address-mapping.js"); +const { decodeAddress } = require("@polkadot/util-crypto"); + +// PROTECT YOUR PRIVATE KEYS WELL, NEVER COMMIT THEM TO GITHUB OR SHARE WITH ANYONE +const { ethPrivateKey, subSeed, rpcUrl, wsUrl } = require("./config.js"); +const amount1TAO = BigInt("1000000000"); +// Connect to the Subtensor node +const provider = new ethers.JsonRpcProvider(rpcUrl); + +function sendTransaction(api, call, signer) { + return new Promise((resolve, reject) => { + let unsubscribed = false; + + const unsubscribe = call + .signAndSend(signer, ({ status, events, dispatchError }) => { + const safelyUnsubscribe = () => { + if (!unsubscribed) { + unsubscribed = true; + unsubscribe + .then(() => {}) + .catch((error) => console.error("Failed to unsubscribe:", error)); + } + }; + + // Check for transaction errors + if (dispatchError) { + let errout = dispatchError.toString(); + if (dispatchError.isModule) { + // for module errors, we have the section indexed, lookup + const decoded = api.registry.findMetaError(dispatchError.asModule); + const { docs, name, section } = decoded; + errout = `${name}: ${docs}`; + } + safelyUnsubscribe(); + reject(Error(errout)); + } + // Log and resolve when the transaction is included in a block + if (status.isInBlock) { + safelyUnsubscribe(); + resolve(status.asInBlock); + } + }) + .catch((error) => { + reject(error); + }); + }); +} + +// for set +const subnet_contract_abi = [ + { + inputs: [ + { + internalType: "address", + name: "initialOwner", + type: "address", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: "address", + name: "previousOwner", + type: "address", + }, + { + indexed: true, + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "OwnershipTransferred", + type: "event", + }, + { + inputs: [ + { + internalType: "uint16", + name: "netuid", + type: "uint16", + }, + ], + name: "getHyperParameter", + outputs: [ + { + internalType: "uint64", + name: "", + type: "uint64", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "owner", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [ + { + internalType: "bytes", + name: "subnetName", + type: "bytes", + }, + { + internalType: "bytes", + name: "githubRepo", + type: "bytes", + }, + { + internalType: "bytes", + name: "subnetContact", + type: "bytes", + }, + ], + name: "registerNetwork", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [], + name: "renounceOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "uint16", + name: "netuid", + type: "uint16", + }, + { + internalType: "uint64", + name: "value", + type: "uint64", + }, + ], + name: "setHyperParameter", + outputs: [], + stateMutability: "payable", + type: "function", + }, + { + inputs: [ + { + internalType: "address", + name: "newOwner", + type: "address", + }, + ], + name: "transferOwnership", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, +]; + +// compile with evm version 0.8.3 +const subnet_contract_bytecode = + "0x608060405234801561001057600080fd5b50604051610e6d380380610e6d8339818101604052810190610032919061015c565b80600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561006d57600080fd5b61007c8161008360201b60201c565b50506101ce565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050610156816101b7565b92915050565b60006020828403121561016e57600080fd5b600061017c84828501610147565b91505092915050565b600061019082610197565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6101c081610185565b81146101cb57600080fd5b50565b610c90806101dd6000396000f3fe6080604052600436106100555760003560e01c8063290212c11461005a578063715018a614610076578063786fede51461008d57806378b63cb6146100ca5780638da5cb5b146100e6578063f2fde38b14610111575b600080fd5b610074600480360381019061006f919061077b565b61013a565b005b34801561008257600080fd5b5061008b610279565b005b34801561009957600080fd5b506100b460048036038101906100af9190610812565b61028d565b6040516100c19190610a3c565b60405180910390f35b6100e460048036038101906100df919061083b565b6103df565b005b3480156100f257600080fd5b506100fb61051a565b6040516101089190610971565b60405180910390f35b34801561011d57600080fd5b5061013860048036038101906101339190610752565b610543565b005b610142610591565b60006108039050600061080373ffffffffffffffffffffffffffffffffffffffff163463290212c160e01b8787876040516024016101829392919061098c565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516101ec919061095a565b60006040518083038185875af1925050503d8060008114610229576040519150601f19603f3d011682016040523d82523d6000602084013e61022e565b606091505b5050905080610272576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610269906109d8565b60405180910390fd5b5050505050565b610281610591565b61028b60006105d2565b565b600080610803905060008061080373ffffffffffffffffffffffffffffffffffffffff16637444dadc60e01b866040516024016102ca91906109f8565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610334919061095a565b6000604051808303816000865af19150503d8060008114610371576040519150601f19603f3d011682016040523d82523d6000602084013e610376565b606091505b5091509150816103bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103b2906109d8565b60405180910390fd5b6000818060200190518101906103d19190610877565b9050809450505050919050565b6103e7610591565b60006108039050600061080373ffffffffffffffffffffffffffffffffffffffff1663b38e0bbe60e01b8585604051602401610424929190610a13565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405161048e919061095a565b6000604051808303816000865af19150503d80600081146104cb576040519150601f19603f3d011682016040523d82523d6000602084013e6104d0565b606091505b5050905080610514576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161050b906109d8565b60405180910390fd5b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61054b610591565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561058557600080fd5b61058e816105d2565b50565b3373ffffffffffffffffffffffffffffffffffffffff166105b061051a56b73ffffffffffffffffffffffffffffffffffffffff16146105d057600080fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006106a96106a484610a7c565b610a57565b9050828152602081018484840111156106c157600080fd5b6106cc848285610b39565b509392505050565b6000813590506106e381610c15565b92915050565b600082601f8301126106fa57600080fd5b813561070a848260208601610696565b91505092915050565b60008135905061072281610c2c565b92915050565b60008135905061073781610c43565b92915050565b60008151905061074c81610c43565b92915050565b60006020828403121561076457600080fd5b6000610772848285016106d4565b91505092915050565b60008060006060848603121561079057600080fd5b600084013567ffffffffffffffff8111156107aa57600080fd5b6107b6868287016106e9565b935050602084013567ffffffffffffffff8111156107d357600080fd5b6107df868287016106e9565b925050604084013567ffffffffffffffff8111156107fc57600080fd5b610808868287016106e9565b9150509250925092565b60006020828403121561082457600080fd5b600061083284828501610713565b91505092915050565b6000806040838503121561084e57600080fd5b600061085c85828601610713565b925050602061086d85828601610728565b9150509250929050565b60006020828403121561088957600080fd5b60006108978482850161073d565b91505092915050565b6108a981610ae5565b82525050565b60006108ba82610aad565b6108c48185610ab8565b93506108d4818560208601610b48565b6108dd81610bdb565b840191505092915050565b60006108f382610aad565b6108fd8185610ac9565b935061090d818560208601610b48565b80840191505092915050565b6000610926601283610ad4565b915061093182610bec565b602082019050919050565b61094581610af7565b82525050565b61095481610b25565b82525050565b600061096682846108e8565b915081905092915050565b600060208201905061098660008301846108a0565b92915050565b600060608201905081810360008301526109a681866108af565b905081810360208301526109ba81856108af565b905081810360408301526109ce81846108af565b9050949350505050565b60006020820190506109f181610919565b9050919050565b6000602082019050610a0d600083018461093c565b92915050565b6000604082019050610a28600083018561093c565b610a35602083018461094b565b9392505050565b6000602082019050610a51600083018461094b565b92915050565b6000610a61610a72565b9050610a6d8282610b7b565b919050565b6000604051905090565b600067ffffffffffffffff821115610a9757610a96610bac565b5b610aa082610bdb565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000610af082610b05565b9050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015610b66578082015181840152602081019050610b4b565b83811115610b75576000848401525b50505050565b610b8482610bdb565b810181811067ffffffffffffffff82111715610ba357610ba2610bac565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f5375626e65742063616c6c206661696c65640000000000000000000000000000600082015250565b610c1e81610ae5565b8114610c2957600080fd5b50565b610c3581610af7565b8114610c4057600080fd5b50565b610c4c81610b25565b8114610c5757600080fd5b5056fea26469706673582212200e657685be0d4a155c28ec7471273753d1c625c562f268b2efdf0a8b2c7e4dbe64736f6c63430008030033"; + +// Create a signer +const privateKey = ethPrivateKey; // DO NOT HARDCODE YOUR PRIVATE KEY IN PRODUCTION +const signer = new ethers.Wallet(privateKey, provider); + +async function createSubnetGetSetParameter() { + try { + // Substrate ss58 address that will receive the transfer + const wsProvider = new WsProvider(wsUrl); + const api = await ApiPromise.create({ provider: wsProvider }); + const keyring = new Keyring({ type: "sr25519" }); + const account = keyring.addFromUri(subSeed); // Your Substrate address private key/seed + + // Destination address can be replaced with any ss58 address here: + const destinationAddress = account.address; + + // Get the substrate address public key + const pubk = decodeAddress(destinationAddress); + const hex = Array.from(pubk, (byte) => + byte.toString(16).padStart(2, "0") + ).join(""); + + const signer = new ethers.Wallet(ethPrivateKey, provider); + + const ss58mirror = convertH160ToSS58(signer.address); + let txSudoSetBalance = api.tx.sudo.sudo( + api.tx.balances.forceSetBalance(ss58mirror, BigInt(1e18).toString()) + ); + await sendTransaction(api, txSudoSetBalance, account); + + const txSudoSetWhitelist = api.tx.sudo.sudo( + api.tx.evm.setWhitelist([signer.address]) + ); + + await sendTransaction(api, txSudoSetWhitelist, account); + + const contractFactory = new ethers.ContractFactory( + subnet_contract_abi, + subnet_contract_bytecode, + signer + ); + + const subnet_contract = await contractFactory.deploy(signer.address); + await subnet_contract.waitForDeployment(); + + console.log("deployed contract address: ", subnet_contract.target); + + txSudoSetBalance = api.tx.sudo.sudo( + api.tx.balances.forceSetBalance( + convertH160ToSS58(subnet_contract.target), + BigInt(1e16).toString() + ) + ); + await sendTransaction(api, txSudoSetBalance, account); + + let totalNetwork = Number(await api.query.subtensorModule.totalNetworks()); + console.log("total networks is ", totalNetwork); + + // there are predefined network 0 and 3. + let netuid; + if (totalNetwork > 3) { + netuid = totalNetwork; + } else { + netuid = totalNetwork - 1; + } + + const encoder = new TextEncoder(); + + let tx = await subnet_contract.registerNetwork( + encoder.encode("name"), + encoder.encode("repo"), + encoder.encode("contact") + ); + await tx.wait(); + + // the network owner is the deployed contract, not the signer + const networkOwner = ( + await api.query.subtensorModule.subnetOwner(netuid) + ).toHuman(); + console.log("networkOwner is ", networkOwner); + + // Note: This example uses setHyperParameter which calls setServingRateLimit + // Some other functions like setMinBurn, setMaxBurn, setWeightsSetRateLimit are deprecated + tx = await subnet_contract.setHyperParameter(netuid, 255); + await tx.wait(); + + // get parameter from chain + let parameter = Number( + await api.query.subtensorModule.servingRateLimit(netuid) + ); + + assert(parameter == 255); + + // get paramter from contract + parameter = await subnet_contract.getHyperParameter(netuid); + + // check total networks after registration + console.log( + "total networks is ", + (await api.query.subtensorModule.totalNetworks()).toHuman() + ); + + process.exit(0); + } catch (error) { + console.error("Error:", error); + process.exit(0); + } +} + +async function main() { + await createSubnetGetSetParameter(); +} + +main().catch(console.error); +``` + +### Solidity + +[Example source on GitHub](https://github.com/opentensor/evm-bittensor/blob/main/solidity/subnet.sol) + +```sol +// SPDX-License-Identifier: GPL-3.0 +// +// This example demonstrates calling of ISubnet precompile +// from another smart contract + +pragma solidity ^0.8.3; +import "@openzeppelin/contracts/access/Ownable.sol"; + +address constant ISUBTENSOR_SUBNET_ADDRESS = 0x0000000000000000000000000000000000000803; + +interface ISubnet { + /// Registers a new network without specifying details. + // function registerNetwork() external payable; + /// Registers a new network with specified subnet name, GitHub repository, and contact information. + function registerNetwork( + bytes memory subnetName, + bytes memory githubRepo, + bytes memory subnetContact + ) external payable; + + function getServingRateLimit(uint16 netuid) external view returns (uint64); + + function setServingRateLimit( + uint16 netuid, + uint64 servingRateLimit + ) external payable; +} + +contract Subnet is Ownable { + constructor(address initialOwner) Ownable(initialOwner) {} + + function registerNetwork( + bytes memory subnetName, + bytes memory githubRepo, + bytes memory subnetContact + ) external payable onlyOwner { + ISubnet subnetPrecompile = ISubnet(ISUBTENSOR_SUBNET_ADDRESS); + (bool success, ) = ISUBTENSOR_SUBNET_ADDRESS.call{value: msg.value}( + abi.encodeWithSelector( + subnetPrecompile.registerNetwork.selector, + subnetName, + githubRepo, + subnetContact + ) + ); + require(success, "Subnet call failed"); + } + + function setHyperParameter( + uint16 netuid, + uint64 value + ) external payable onlyOwner { + ISubnet subnetPrecompile = ISubnet(ISUBTENSOR_SUBNET_ADDRESS); + (bool success, ) = ISUBTENSOR_SUBNET_ADDRESS.call( + abi.encodeWithSelector( + subnetPrecompile.setServingRateLimit.selector, + netuid, + value + ) + ); + require(success, "Subnet call failed"); + } + + function getHyperParameter(uint16 netuid) public returns (uint64) { + ISubnet subnetPrecompile = ISubnet(ISUBTENSOR_SUBNET_ADDRESS); + (bool success, bytes memory data) = ISUBTENSOR_SUBNET_ADDRESS.call( + abi.encodeWithSelector( + subnetPrecompile.getServingRateLimit.selector, + netuid + ) + ); + require(success, "Subnet call failed"); + + uint64 value = abi.decode(data, (uint64)); + return value; + } +} + +``` diff --git a/docs/evm-tutorials/subtensor-networks.md b/docs/evm-tutorials/subtensor-networks.md index b9947cb97c..6178ef3d8a 100644 --- a/docs/evm-tutorials/subtensor-networks.md +++ b/docs/evm-tutorials/subtensor-networks.md @@ -1,11 +1,11 @@ --- -title: "Subtensor Networks" +title: "EVM Network Details" --- import ThemedImage from '@theme/ThemedImage'; import useBaseUrl from '@docusaurus/useBaseUrl'; -# Subtensor Networks +# EVM Network Details | DESCRIPTION | MAINNET | TESTNET | LOCALNET | |:---------------------|:------------------------------------|:-------------------------------------|:-------------------------| diff --git a/docs/evm-tutorials/transfer-between-two-h160-accounts.md b/docs/evm-tutorials/transfer-between-two-h160-accounts.md index 9a1c3151ca..87eec58d3a 100644 --- a/docs/evm-tutorials/transfer-between-two-h160-accounts.md +++ b/docs/evm-tutorials/transfer-between-two-h160-accounts.md @@ -31,7 +31,11 @@ You must run either [EVM Localnet with Metamask Wallet](./evm-localnet-with-meta 3. Configure the amount to be sent. In this example we are using large numbers so that the result is visible in Metamask: Because Metamask doesn't respect decimals of 9 and always defaults to 18 decimals. In production environment 0.1 TAO will match to "100000000000" (10^8), while for this demonstration we have to use "100000000000000000" (10^17), which will appear as "0.1 TAO" in Metamask, but will actually be equal to 100000000 TAO (10^8 TAO). :::tip 1 TAO = 1e18 on subtensor EVM - While working with the subtensor EVM, 1 TAO should be written as 1 followed by 18 zeroes, i.e., 1e18. Also see this code example: [https://github.com/opentensor/evm-bittensor/blob/main/examples/withdraw.js#L58](https://github.com/opentensor/evm-bittensor/blob/main/examples/withdraw.js#L58). + + In Bittensor EVM, 1 TAO should be written as $1e18$ + + For [example](https://github.com/opentensor/evm-bittensor/blob/main/examples/withdraw.js#L58): `const value = BigInt(0.5 * 1e18).toString();` + ::: ```js diff --git a/docs/evm-tutorials/transfer-from-metamask-to-ss58.md b/docs/evm-tutorials/transfer-from-metamask-to-ss58.md index 6ff2464db2..47fd6942a5 100644 --- a/docs/evm-tutorials/transfer-from-metamask-to-ss58.md +++ b/docs/evm-tutorials/transfer-from-metamask-to-ss58.md @@ -1,135 +1,152 @@ --- -title: "Transfer from Metamask to SS58 address" +title: "Transfer TAO from Metamask to SS58 Address" --- + import ThemedImage from '@theme/ThemedImage'; import useBaseUrl from '@docusaurus/useBaseUrl'; -# Transfer from Metamask to SS58 address +# Transfer TAO from Metamask to SS58 Address + +In this tutorial you will learn how to transfer TAO from your Metamask wallet to your Bittensor SS58 address for a coldkey (wallet) or a hotkey. There are two different options: -In this tutorial you will learn how to transfer TAO from your Metamask wallet to your Bittensor SS58 address for a coldkey (wallet) or a hotkey. You will learn how to do this via two different methods: +- [**Option 1:** Transfer using a precompiled contract](#option-1-transfer-using-a-precompiled-contract). +- [**Option 2:** Transfer using the `withdraw` extrinsic in the `evm` pallet in subtensor blockchain](#option-2-transfer-using-the-withdraw-extrinsic-in-the-subtensor-evm-pallet). -- **Method 1:** Transfer using a precompiled contract. -- **Method 2:** Transfer using the `withdraw` extrinsic in the `evm` pallet in subtensor blockchain. +## Prerequisites -## Prerequisite +- **Node.js** (v16 or later recommended) +- **npm** or **yarn** +- [Clone and install the Bittensor EVM examples repo](./install.md) +- [Get set up for using EVM wallet on testnet](./evm-testnet-with-metamask-wallet) -:::danger stop, did you set up your Metamask wallet for EVM? -You must run [EVM Testnet with Metamask Wallet](./evm-testnet-with-metamask-wallet.md) tutorial before you can run this tutorial. +## Option 1: Transfer using a Precompiled Contract + +:::tip +This is the best option for most users. You do NOT need the private key or seed for your SS58 address. ::: -## Method 1: Transfer using a precompiled contract +This option uses a precompiled contract to transfer TAO from your Metamask wallet to any SS58 address (coldkey or hotkey). -The private key or the seed for your SS58 is **not required** for this method. +### Configure the destination address -This step will transfer 0.5 TAO to your `ss58` destination address specified in the [`withdraw.js`](https://github.com/opentensor/evm-bittensor/blob/main/examples/withdraw.js) file. Look for the following lines in this file: +Open [`withdraw.js`](https://github.com/opentensor/evm-bittensor/blob/main/examples/withdraw.js) in the EVM-Bittensor repo. Find the following line: -```javascript +```js // Destination address can be replaced with any ss58 address here: const destinationAddress = account.address; ``` -and provide your `ss58` destination address as shown below: +Replace it with your own SS58 address: -```javascript +```js const destinationAddress = "5HgU7B3xfSfisR1A7wDMt7FHX5Uizj6xtWWHwhwJMZSrdN7y"; ``` -:::danger Stop. Did you install the dependencies? -Before you proceed, make sure you finished the [Install](./install.md) step. -::: - -Next, navigate to the `examples` directory of the EVM-Bittensor repo: +### Run the transfer script - ```bash - cd examples - ``` -Run: +Run the `transfer.js` script by navigating to the `examples` folder and running the following command: ```bash node transfer.js ``` -:::tip 1 TAO = 1e18 on subtensor EVM -While working with the subtensor EVM, 1 TAO should be written as 1 followed by 18 zeroes, i.e., 1e18. See this code example: [https://github.com/opentensor/evm-bittensor/blob/main/examples/withdraw.js#L58](https://github.com/opentensor/evm-bittensor/blob/main/examples/withdraw.js#L58). +:::tip 1 TAO = 1e18 +In Bittensor EVM, 1 TAO is written as `1e18` (just like on Ethereum). For example, to send 0.5 TAO: + +```js +const value = BigInt(0.5 * 1e18).toString(); +``` + ::: -Then, run: +### Run the withdraw script + +Run the `withdraw.js` script by navigating to the `examples` folder and running the following command: ```bash node withdraw.js ``` -You will see the output similar to below, indicating a successful transfer of TAO from your Metamask account to your `ss58` destination address: +You should see output similar to: ```bash showLineNumbers node withdraw.js 2024-10-07 15:34:58 REGISTRY: Unknown signed extensions SubtensorSignedExtension, CommitmentsSignedExtension found, treating them as no-effect -2024-10-07 15:34:58 API/INIT: RPC methods not decorated: chainHead_v1_body, chainHead_v1_call, chainHead_v1_continue, chainHead_v1_follow, chainHead_v1_header, chainHead_v1_stopOperation, chainHead_v1_storage, chainHead_v1_unfollow, chainHead_v1_unpin, chainSpec_v1_chainName, chainSpec_v1_genesisHash, chainSpec_v1_properties, debug_getBadBlocks, debug_getRawBlock, debug_getRawHeader, debug_getRawReceipts, debug_getRawTransaction, delegateInfo_getDelegate, delegateInfo_getDelegated, delegateInfo_getDelegates, eth_getBlockReceipts, neuronInfo_getNeuron, neuronInfo_getNeuronLite, neuronInfo_getNeurons, neuronInfo_getNeuronsLite, subnetInfo_getLockCost, subnetInfo_getSubnetHyperparams, subnetInfo_getSubnetInfo, subnetInfo_getSubnetInfo_v2, subnetInfo_getSubnetsInf_v2, subnetInfo_getSubnetsInfo, transactionWatch_v1_submitAndWatch, transactionWatch_v1_unwatch, transaction_v1_broadcast, transaction_v1_stop -2024-10-07 15:34:58 API/INIT: node-subtensor/302: Not decorating unknown runtime apis: 0x42e62be4a39e5b60/1, 0x806df4ccaa9ed485/1, 0x8375104b299b74c5/1, 0x5d1fbfbe852f2807/1, 0xc6886e2f8e598b0a/1 +... Sending balance to ss58 address: 5HgU7B3xfSfisR1A7wDMt7FHX5Uizj6xtWWHwhwJMZSrdN7y pubk = f873b72b75b9029397edceaa04cf08cc97909c8b6304f2ccc3593641bf92e97c -Transaction response: ContractTransactionResponse { - provider: JsonRpcProvider {}, - blockNumber: null, - blockHash: null, - index: undefined, - hash: '0x4f3bde9e678d7307f2c07dd3212d6920db8e2af8ade052a823b3ad1f28ddc221', - type: 2, - to: '0x0000000000000000000000000000000000000800', - from: '0x709615c655B24919F48B365D292521EFcC74467B', - nonce: 0, - gasLimit: 21576n, - gasPrice: undefined, - maxPriorityFeePerGas: 0n, - maxFeePerGas: 20000000000n, - maxFeePerBlobGas: null, - data: '0xcd6f4eb1f873b72b75b9029397edceaa04cf08cc97909c8b6304f2ccc3593641bf92e97c', - value: 500000000000000000n, - chainId: 945n, - signature: Signature { r: "0xc8cf1d54513eb26ee13ca8e001201e918d50593ce6efd4ceee6645ec1879f183", s: "0x6594fe686ecac6131b536b9ff5277f40da1d12ab6c2a269693029c58cef8417d", yParity: 0, networkV: null }, - accessList: [], - blobVersionedHashes: null -} +Transaction response: ContractTransactionResponse { ... } Transaction confirmed. ``` -In the above example, a coldkey `ss58` address `5HgU7B3xfSfisR1A7wDMt7FHX5Uizj6xtWWHwhwJMZSrdN7y` (line 5 in the above log) is used as a destination address. The Metamask wallet address used is: `0x709615c655B24919F48B365D292521EFcC74467B` (line 15 in the above log). +:::info +The `ss58` address is your destination (coldkey or hotkey). The `from` address is your Metamask wallet. +::: + +### Check your SS58 balance -Finally, use the below `btcli` command to check the balance of your `ss58` address (the below `--ss58` option is supported in BTCLI 8.2.0 or later versions): +Use the Bittensor CLI to check your new balance: ```bash btcli wallet balance --ss58 5HgU7B3xfSfisR1A7wDMt7FHX5Uizj6xtWWHwhwJMZSrdN7y ``` -## Method 2: Transfer using `withdraw` extrinsic in subtensor `evm` pallet +## Option 2: Transfer using the `withdraw` Extrinsic in the Subtensor EVM Pallet + +:::tip +This option is best for advanced users. You WILL need the private key for your SS58 address. +::: + +This option uses the `withdraw` extrinsic in the EVM pallet, allowing you to transfer from an EVM address to an SS58 address using Polkadot.js Apps. + +### Copy your SS58 address + +For example: `5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty`. You will need the private key for this address set up in the Polkadot.js extension. + +### Edit the destination in the script + +Open [`withdraw-address.js`](https://github.com/opentensor/evm-bittensor/blob/main/examples/withdraw-address.js) and set your SS58 address: + +```js +const ss58Address = ""; +``` + +### Run the withdraw-address script + +Run the `withdraw-address.js` script by navigating to the `examples` folder and running the following command: + +```bash +node withdraw-address.js +``` + +### Copy the "Ethereum mirror" output address + +The script will output an "Ethereum mirror" address. Copy this address. + +### Transfer TAO to the mirror address using Metamask -You will need the private key for your SS58 for this method. +- Open Metamask and send the desired amount of TAO to the mirror address. +- If you restarted the network, clear Metamask's activity tab data: **Settings > Advanced > Clear activity tab data**. -1. Copy your `ss58` address (for example: `5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty`). You need the private key for this address setup in Polkadot JS extension. -2. Paste it into `ss58Address` in main function in [`withdraw-address.js`](https://github.com/opentensor/evm-bittensor/blob/main/examples/withdraw-address.js) script. +### Ensure your destination address is funded -3. Next, navigate to the `examples` directory of the EVM-Bittensor repo: +Make sure the destination address has enough TAO to pay for transaction fees. - ```bash - cd examples - ``` +### Open the Extrinsics page in Polkadot.js Apps -4. Run: +[Polkadot.js Apps Extrinsics](https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Ftest.chain.opentensor.ai%3A443#/extrinsics) - ```bash - node withdraw-address.js - ``` +### Submit the withdraw extrinsic -5. Copy the "Ethereum mirror:" output address. -6. Transfer the amount to this address that you wish to transfer using Metamask. Make sure to clear activity tab data if you restarted the network previously: **Settings** > **Advanced** > **Clear activity tab data**. -7. Make sure your destination address is funded to run a transaction. -8. Open the **Extrisics** section in Polkadot JS app: [https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Ftest.chain.opentensor.ai%3A443#/extrinsics](https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Ftest.chain.opentensor.ai%3A443#/extrinsics). -9. Select `evm` pallet and `withdraw` extrinsic. -10. Paste the "Ethereum mirror" output address into address field. -11. Put the amount you are transferring into amount field. Note that Metamask balances are by 10^9 lower than Polkadot Apps UI balances because Metamask will not respect 10^9 decimals for native currency before we have a corresponding PR to https://github.com/ethereum-lists merged. -12. Submit the transaction. -13. Finally, use the below `btcli` command to check the balance of your `ss58` address (the below `--ss58` option is supported in BTCLI 8.2.0 or later versions): +- Select the `evm` pallet and `withdraw` extrinsic. +- Paste the "Ethereum mirror" address into the address field. +- Enter the amount you are transferring. +- Note: Metamask balances are by 10^9 lower than Polkadot Apps UI balances (Metamask does not respect 10^9 decimals for native currency). - ```bash - btcli wallet balance --ss58 - ``` +### Submit the transaction + +### Check your SS58 balance + +```bash +btcli wallet balance --ss58 +``` diff --git a/docs/evm-tutorials/withdraw-from-alice.md b/docs/evm-tutorials/withdraw-from-alice.md new file mode 100644 index 0000000000..7fd9ecf975 --- /dev/null +++ b/docs/evm-tutorials/withdraw-from-alice.md @@ -0,0 +1,149 @@ +--- +title: "Withdraw TAO from Alice Account (Local Development)" +--- + +import { InstallPartial } from "./\_install.mdx"; +import { CreatePartial } from "./\_create-mm-wallet.mdx"; + +# Withdraw TAO from Alice Account (Local Development) + +Every locally deployed dev-mode blockchain comes provisioned with an 'Alice' account holding a large bag of TAO. + +This page shows how to withdraw TAO to your wallet, using a transaction that requires root permissions, and therefore is only available in local development. + +## Prerequesites + +[Deploy a Subtensor Blockchain locally](../local-build/deploy) + +## Procedure + +### Create Wallet with MetaMask + + + +### Install the EVM Examples repo + + + +### Configure your request + +The `withdraw.js` script in the `examples` folder expects your configuration to be available in config.js. +Select the local configuration options for `rpcURL` and `wsUrl`. + +:::danger +Handle your private keys with care. Do not commit them to Github. +::: + +``` +// PROTECT YOUR PRIVATE KEYS WELL, NEVER COMMIT THEM TO GITHUB OR SHARE WITH ANYONE +const ethPrivateKey = ; +const subSeed = "//Alice"; +const rpcUrlLocal = 'http://127.0.0.1:9946'; +const rpcUrlTestnet = 'https://test.chain.opentensor.ai'; +const wsUrlLocal = 'ws://127.0.0.1:9946'; +const wsUrlTestnet = 'wss://test.chain.opentensor.ai'; + +module.exports = { + ethPrivateKey, + subSeed, + rpcUrl: rpcUrlLocal, + wsUrl: wsUrlLocal, +} +``` + +### Run the script + +Run the `withdraw.js` script by navigating to the `examples` folder and running the following command: + +```bash +node withdraw.js +``` + +**Source code**: + +- [EVM examples repo](https://github.com/opentensor/evm-bittensor) + +```javascript +const { ethers } = require("ethers"); +const { ApiPromise, WsProvider, Keyring } = require("@polkadot/api"); +const { convertH160ToSS58 } = require("./address-mapping.js"); + +// PROTECT YOUR PRIVATE KEYS WELL, NEVER COMMIT THEM TO GITHUB OR SHARE WITH ANYONE +const { ethPrivateKey, subSeed, rpcUrl, wsUrl } = require("./config.js"); + +function sendTransaction(api, call, signer) { + return new Promise((resolve, reject) => { + let unsubscribed = false; + + const unsubscribe = call + .signAndSend(signer, ({ status, events, dispatchError }) => { + const safelyUnsubscribe = () => { + if (!unsubscribed) { + unsubscribed = true; + unsubscribe + .then(() => {}) + .catch((error) => console.error("Failed to unsubscribe:", error)); + } + }; + + // Check for transaction errors + if (dispatchError) { + let errout = dispatchError.toString(); + if (dispatchError.isModule) { + // for module errors, we have the section indexed, lookup + const decoded = api.registry.findMetaError(dispatchError.asModule); + const { docs, name, section } = decoded; + errout = `${name}: ${docs}`; + } + safelyUnsubscribe(); + reject(Error(errout)); + } + // Log and resolve when the transaction is included in a block + if (status.isInBlock) { + safelyUnsubscribe(); + resolve(status.asInBlock); + } + }) + .catch((error) => { + reject(error); + }); + }); +} + +async function main() { + const wsProvider = new WsProvider(wsUrl); + const api = await ApiPromise.create({ provider: wsProvider }); + const keyring = new Keyring({ type: "sr25519" }); + + const sender = keyring.addFromUri(subSeed); // Your sender's private key/seed + + // Get ethereum address that matches the private key from the secrets file + const provider = new ethers.JsonRpcProvider(rpcUrl); + const signer = new ethers.Wallet(ethPrivateKey, provider); + const recipientEthereumAddress = signer.address; + + const ss58Address = convertH160ToSS58(recipientEthereumAddress); + console.log(`Mirror: ${ss58Address}`); + // Amount to send: 1 TAO on Substrate side = 1*10^9 + const amount = "1000000000"; + + // Alice funds herself with 1M TAO + const txSudoSetBalance = api.tx.sudo.sudo( + api.tx.balances.forceSetBalance(sender.address, "1000000000000000") + ); + await sendTransaction(api, txSudoSetBalance, sender); + console.log("Balace force-set"); + + // Create a transfer transaction + const transfer = api.tx.balances.transferKeepAlive(ss58Address, amount); + + // Sign and send the transaction + await sendTransaction(api, transfer, sender); + console.log( + `Transfer sent to ${recipientEthereumAddress} (its ss58 mirror address is: ${ss58Address})` + ); + await api.disconnect(); +} + +main().catch(console.error); +``` diff --git a/docs/getting-started/install-btcli.md b/docs/getting-started/install-btcli.md index 4bd09abfcb..1b4efe7711 100644 --- a/docs/getting-started/install-btcli.md +++ b/docs/getting-started/install-btcli.md @@ -2,23 +2,33 @@ title: "Install BTCLI" --- +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + # Install BTCLI This page contains installation details for `btcli`, the Bittensor CLI. -## Prerequisite +--- -To install `btcli`, you must have Python version 3.9-3.12 +:::warning Install from Verified Sources +Always double-check the package name and origin before installation. Use links and commands directly from our docs or official release announcements to avoid malicious lookalikes. +::: -See: https://github.com/opentensor/btcli/blob/main/setup.py#L91-L94 +## Prerequisite + +To install `btcli`, you must have Python version 3.9-3.12. See config file on [GitHub](https://github.com/opentensor/btcli/blob/main/pyproject.toml#L57-L60). ## Developer reference -For a full developer reference, see the [Bittensor CLI reference document](../btcli.md). +For a full developer reference, see the [Bittensor CLI reference document](../btcli/btcli.md). ## Install on macOS and Linux -### Install from Python Package Indexer +You can install the Bittensor CLI on macOS and Linux using any of the following methods: + + + Check for the latest release at the Python Package Index: [https://pypi.org/project/bittensor-cli/](https://pypi.org/project/bittensor-cli/). @@ -29,58 +39,81 @@ pip install bittensor-cli # Use latest or desired version ``` Verify your installation and its version by running: + ```shell btcli --version ``` + Example output: + ```console BTCLI version: 9.2.0 ``` + :::warning Update frequently! Check frequently to make sure you are using the latest version of `btcli`. ::: + + +To install the Bittensor CLI using Homebrew, run the following command in your terminal: + +```shell +brew install btcli +``` + +Next, verify your installation and its version by running: + +```shell +btcli --version +``` -### Install from source +:::warning Update frequently! +Check frequently to make sure you are using the latest version of `btcli`. +::: + + 1. Create and activate a virtual environment. - :::tip Create and activate a virtual environment + :::tip Create and activate a virtual environment - - Create Python virtual environment. Follow [this guide on python.org](https://docs.python.org/3/library/venv.html#creating-virtual-environments). + - Create Python virtual environment. Follow [this guide on python.org](https://docs.python.org/3/library/venv.html#creating-virtual-environments). - - Activate the new environment. Follow [this guide on python.org](https://docs.python.org/3/library/venv.html#how-venvs-work) - ::: - :::warning For Ubuntu-Linux users - If you are using Ubuntu-Linux, the script will prompt for `sudo` access to install all required apt-get packages. - ::: + - Activate the new environment. Follow [this guide on python.org](https://docs.python.org/3/library/venv.html#how-venvs-work) + ::: + :::warning For Ubuntu-Linux users + If you are using Ubuntu-Linux, the script will prompt for `sudo` access to install all required apt-get packages. + ::: - ```bash - python3 -m venv btcli_venv - source btcli_venv/bin/activate - ``` + ```bash + python3 -m venv btcli_venv + source btcli_venv/bin/activate + ``` 2. Clone the Bittensor CLI repo. - ```bash - git clone https://github.com/opentensor/btcli.git - ``` + ```bash + git clone https://github.com/opentensor/btcli.git + ``` 3. `cd` into `btcli` directory. - ```bash - cd btcli - ``` + ```bash + cd btcli + ``` -4. Install +4. Install + ```bash + pip3 install . + ``` - ```bash - pip3 install . - ``` + + ## Install on Windows -To install and run Bittensor SDK on Windows you must install [**WSL 2** (Windows Subsystem for Linux)](https://learn.microsoft.com/en-us/windows/wsl/about) on Windows and select [Ubuntu Linux distribution](https://github.com/ubuntu/WSL/blob/main/docs/guides/install-ubuntu-wsl2.md). +To install and run Bittensor SDK on Windows you must install [**WSL 2** (Windows Subsystem for Linux)](https://learn.microsoft.com/en-us/windows/wsl/about) on Windows and select [Ubuntu Linux distribution](https://github.com/ubuntu/WSL/blob/main/docs/guides/install-ubuntu-wsl2.md). After you installed the above, follow the same installation steps described above in [Install on macOS and Linux](#install-on-macos-and-linux). @@ -88,18 +121,19 @@ After you installed the above, follow the same installation steps described abov While wallet transactions like delegating, transfer, registering, staking can be performed on a Windows machine using WSL 2, the mining and validating operations are not recommended and are not supported on Windows machines. ::: - ## Verify the installation ```bash btcli --version ``` + which will give you the below output: ```bash BTCLI version: ``` -You will see the version number you installed in place of ``. + +You will see the version number you installed in place of ``. ## Configuration @@ -123,10 +157,12 @@ metagraph_cols: CONSENSUS: true DIVIDENDS: true EMISSION: true + GLOBAL_STAKE: true HOTKEY: true INCENTIVE: true + LOCAL_STAKE: true RANK: true - STAKE: true + STAKE_WEIGHT: true TRUST: true UID: true UPDATED: true @@ -143,3 +179,25 @@ If both `chain` and `network` config values are present in the `config.yml`, the ```bash btcli config --help ``` + +### Environment variables + +The Bittensor CLI also accepts environment variables that can change how it works: + +- `USE_TORCH` (default 0): If set to 1, will use torch instead of numpy +- `DISK_CACHE` (default 0, also settable in config): If set to 1 (or set in config), will use disk caching for various safe-cachable substrate + calls (such as block number to block hash mapping), which can speed up subsequent calls. +- `BTCLI_CONFIG_PATH` (default `~/.bittensor/config.yml`): This will set the config file location, creating if it does not exist. +- `BTCLI_DEBUG_FILE` (default `~/.bittensor/debug.txt`): The file stores the most recent's command's debug log. + +## Debugging + +BTCLI stores a debug log for every command you run. Debug logging is enabled by default if `use_cache` is on. All logs are written to `~/.bittensor/debug.txt` and overwritten after each BTCLI command. + +You can change the location with the [`BTCLI_DEBUG_FILE` environment variable](#environment-variables). + +:::info +The debug log does not contain sensitive data (such as private keys). It is intended to be shared with developers for troubleshooting. The file includes details about the executed command, configuration, and request/response interactions with the chain. +::: + +If you encounter an issue and want to preserve the log before it is overwritten, run `btcli --debug` and specify a new location to save the file. We recommend doing this first before starting your debugging with us on [Discord](https://discord.gg/bittensor) or opening an issue on [GitHub](https://github.com/opentensor/btcli/issues/new), where you can also upload your debug file. diff --git a/docs/getting-started/install-wallet-sdk.md b/docs/getting-started/install-wallet-sdk.md index 41e4811415..177eca26f3 100644 --- a/docs/getting-started/install-wallet-sdk.md +++ b/docs/getting-started/install-wallet-sdk.md @@ -2,6 +2,14 @@ title: "Install Wallet SDK" --- +import { SdkVersion } from "../sdk/_sdk-version.mdx"; + +--- + +:::warning Install from Verified Sources +Always double-check the package name and origin before installation. Use links and commands directly from our docs or official release announcements to avoid malicious lookalikes. +::: + # Install Wallet SDK The Bittensor Wallet SDK is a Python interface for a powerful Rust-based Bittensor wallet functionality. You do not need to know Rust to use this Wallet SDK. However, if you want to contribute to the Rust components of this Wallet SDK, the Rust source is located in the `src` directory of [btwallet](https://github.com/opentensor/btwallet) repo. @@ -81,6 +89,8 @@ The above will print the Wallet SDK version you just installed, i.e., `2.0.0`, c ## Usage examples + + **1. Create a wallet** In the `python3` interpreter, run the below code: @@ -150,7 +160,7 @@ IMPORTANT: Store this mnemonic in a secure (preferable offline place), as anyone ``` -The above will create a wallet with "my_wallet_name". +The above will create a wallet with "my_wallet_name". **3. Use your own config** diff --git a/docs/getting-started/installation.md b/docs/getting-started/installation.md index 0731497987..91f7a3549a 100644 --- a/docs/getting-started/installation.md +++ b/docs/getting-started/installation.md @@ -2,17 +2,27 @@ title: "Install Bittensor SDK" --- +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +import { SdkVersion } from "../sdk/_sdk-version.mdx"; + # Install Bittensor SDK Before you can start developing, you must install Bittensor SDK and then create Bittensor wallet. +--- + +:::warning Install from Verified Sources +Always double-check the package name and origin before installation. Use links and commands directly from our docs or official release announcements to avoid malicious lookalikes. +::: + ## Supported Python versions -- bittensor (SDK): Python 3.9-3.11 (reference: https://github.com/opentensor/bittensor/blob/master/setup.py#L86-L88) -- bittensor-cli: Python 3.9-3.12 (reference: https://github.com/opentensor/btcli/blob/main/setup.py#L91-L94 ) -- bittensor-wallet: Python 3.9-3.12 (reference: https://github.com/opentensor/btwallet/blob/main/pyproject.toml#L34-L37) +- bittensor (SDK): Python 3.10-3.15 (reference: https://github.com/opentensor/bittensor/blob/master/pyproject.toml#L14) +- bittensor-cli: Python 3.9-3.13 (reference: https://github.com/opentensor/btcli/blob/main/pyproject.toml#L15 ) +- bittensor-wallet: Python 3.9-3.13 (reference: https://github.com/opentensor/btwallet/blob/main/pyproject.toml#L11) -## Upgrade +## Upgrade the Bittensor SDK If you already installed Bittensor SDK, make sure you upgrade to the latest version. Run the below command: @@ -20,154 +30,183 @@ If you already installed Bittensor SDK, make sure you upgrade to the latest vers python3 -m pip install --upgrade bittensor ``` -## Developer reference +## Install on macOS and Linux -For a full developer reference, see the [Bittensor SDK section](../bt-api-ref.md). +You can install Bittensor on your macOS or Linux machine using any one of the available options. **Make sure you verify your installation after you install**. -## Install on macOS and Linux +:::warning Rust Required on Linux +To install the Bittensor SDK on Linux, you must have Rust installed. For information on Rust installation and setup, see the [official Rust documentation](https://www.rust-lang.org/tools/install). +::: -You can install Bittensor on your local machine in either of the following ways. **Make sure you verify your installation after you install**. -- [Install using a Bash command](#install-using-a-bash-command). -- [Install from source](#install-from-source) +:::tip Create and activate a virtual environment +To avoid dependency issues while installing the Bittensor SDK, we recommend [creating](https://docs.python.org/3/library/venv.html#creating-virtual-environments) and [activating](https://docs.python.org/3/library/venv.html#how-venvs-work) a Python Virtual environment on your machine before installing the SDK. To do this, ensure you have Python3 installed on your local machine using the following command: -### Install using a Bash command +```bash +python3 --version +``` -This is the most straightforward method. It is recommended for a beginner as it will pre-install requirements like Python, if they are not already present on your machine. Copy and paste the following `bash` command into your terminal: +Then run the following command in your terminal: ```bash -/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/opentensor/bittensor/master/scripts/install.sh)" +python3 -m venv btsdk_venv +source btsdk_venv/bin/activate ``` -:::warning For Ubuntu-Linux users -If you are using Ubuntu-Linux, the script will prompt for `sudo` access to install all required apt-get packages. ::: -:::tip Create and activate a virtual environment - - Create Python virtual environment. Follow [this guide on python.org](https://docs.python.org/3/library/venv.html#creating-virtual-environments). + + + You can install Bittensor via the Python Package Index using any of the below options: - - Activate the new environment. Follow [this guide on python.org](https://docs.python.org/3/library/venv.html#how-venvs-work) -::: + - **Install SDK**: Run the below command to install Bittensor SDK in the above virtual environment. This will install `btcli` also. -### Install Python virtual environment + ```python + pip install bittensor + ``` -```bash -python3 -m venv btsdk_venv -source btsdk_venv/bin/activate -``` + - **Install SDK with `torch`**: Install Bittensor SDK with [`torch`](https://pytorch.org/docs/stable/torch.html). -### Install from source + ```python + pip install bittensor[torch] + ``` -1. Clone the Bittensor repo + If the command fails in your environment, try enclosing the argument in quotes as shown: -```bash -git clone https://github.com/opentensor/bittensor.git -``` -2. Change to the Bittensor directory: + ```python + pip install "bittensor[torch]" + ``` -```bash -cd bittensor -``` -3. Install + -- **Install SDK**: Run the below command to install Bittensor SDK in the above virtual environment. This will also install `btcli`. -```python -pip install . -``` + - **Install SDK with `cubit`**: Install Bittensor SDK with [`cubit`](https://github.com/opentensor/cubit). -- **Install SDK with `torch`**: Install Bittensor SDK with [`torch`](https://pytorch.org/docs/stable/torch.html). + 1. Install `cubit` first. See the [Install](https://github.com/opentensor/cubit?tab=readme-ov-file#install) section. **Only Python 3.9 and 3.10 versions are supported**. + 2. Then install SDK with `pip install bittensor`. - ```python - pip install bittensor[torch] - ``` - In some environments the above command may fail, in which case run the command with added quotes as shown below: + + + + This is the most straightforward method. It is recommended for a beginner as it will pre-install requirements for the Bittensor SDK like Python, if they are not already present on your machine. Copy and paste the following `bash` command into your terminal: - ```python - pip install "bittensor[torch]" + ```bash + /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/opentensor/bittensor/master/scripts/install.sh)" ``` -### Install from PyPi + :::warning For Ubuntu-Linux users + If you are using Ubuntu-Linux, the script will prompt for `sudo` access to install all required apt-get packages. + ::: -You can install Bittensor using any of the below options: + -- **Install SDK**: Run the below command to install Bittensor SDK in the above virtual environment. This will install `btcli` also. -```python -pip install bittensor -``` + -- **Install SDK with `torch`**: Install Bittensor SDK with [`torch`](https://pytorch.org/docs/stable/torch.html). + 1. Clone the Bittensor repo - ```python - pip install bittensor[torch] - ``` - In some environments the above command may fail, in which case run the command with added quotes as shown below: + ```bash + git clone https://github.com/opentensor/bittensor.git + ``` - ```python - pip install "bittensor[torch]" - ``` + 2. Change to the Bittensor directory: + + ```bash + cd bittensor + ``` + + 3. Install the SDK using any one of the following options: + + - **Install SDK**: Run the below command to install Bittensor SDK in the above virtual environment. This will also install `btcli`. -- **Install SDK with `cubit`**: Install Bittensor SDK with [`cubit`](https://github.com/opentensor/cubit). + ```python + pip install . + ``` - 1. Install `cubit` first. See the [Install](https://github.com/opentensor/cubit?tab=readme-ov-file#install) section. **Only Python 3.9 and 3.10 versions are supported**. - 2. Then install SDK with `pip install bittensor`. + - **Install SDK with `torch`**: Install Bittensor SDK with [`torch`](https://pytorch.org/docs/stable/torch.html). + ```python + pip install bittensor[torch] + ``` + + If the command fails in your environment, try enclosing the argument in quotes as shown: + + ```python + pip install "bittensor[torch]" + ``` + + + + ## Install on Windows -To install and run Bittensor SDK on Windows you must install [**WSL 2** (Windows Subsystem for Linux)](https://learn.microsoft.com/en-us/windows/wsl/about) on Windows and select [Ubuntu Linux distribution](https://github.com/ubuntu/WSL/blob/main/docs/guides/install-ubuntu-wsl2.md). +To install and run Bittensor SDK on Windows you must install [**WSL 2** (Windows Subsystem for Linux)](https://learn.microsoft.com/en-us/windows/wsl/about) on Windows and select [Ubuntu Linux distribution](https://github.com/ubuntu/WSL/blob/main/docs/guides/install-ubuntu-wsl2.md). After you installed the above, follow the same installation steps described above in [Install on macOS and Linux](#install-on-macos-and-linux). :::danger Limited support on Windows While wallet transactions like delegating, transfer, registering, staking can be performed on a Windows machine using WSL 2, the mining and validating operations are not recommended and are not supported on Windows machines. - ::: - +::: ## Verify the installation -You can verify your installation in either of the two ways as shown below: + -### Verify using `btsdk` version +You can verify your installation in either of the following ways shown: + + +Run the following command in your terminal: ```python python3 -m bittensor ``` +The response will show you the `` of the `btsdk` you just installed as shown: ```bash Bittensor SDK version: ``` -The above command will show you the `` of the `btsdk` you just installed. - + + -### Verify using Python interpreter - -1. Launch the Python interpreter on your terminal. +1. Launch the Python interpreter on your terminal. ```bash python3 ``` -2. Enter the following two lines in the Python interpreter. - + +2. Enter the following two lines in the Python interpreter: + ```python import bittensor as bt print( bt.__version__ ) ``` + The Python interpreter output will look like below: ```python >>> print( bt.__version__ ) ``` -You will see the version number you installed in place of ``. -### Verify by listing axon information -You can also verify the Bittensor installation by listing the axon information for the neurons. Enter the following lines in the Python interpreter. +You will see the version number you installed in place of ``. + + + +You can also verify the Bittensor installation by listing the axon information for the neurons. + +First, launch the Python interpreter in your terminal: + +```bash +python3 +``` + +Next, enter the following lines in the Python interpreter: ```python import bittensor as bt -metagraph = bt.metagraph(1) +metagraph = bt.Metagraph(1) metagraph.axons[:10] ``` + The Python interpreter output will look like below. ```bash @@ -175,3 +214,9 @@ The Python interpreter output will look like below. >>> ``` + + + +## Developer reference + +For a full developer reference of the Bittensor SDK, see the [Bittensor SDK section](../sdk/bt-api-ref.md). diff --git a/docs/glossary.md b/docs/glossary.md deleted file mode 100644 index 8ba3655f8f..0000000000 --- a/docs/glossary.md +++ /dev/null @@ -1,396 +0,0 @@ ---- -title: "Glossary" ---- - -# Glossary - -## A - -### Active UID - -A UID slot that is considered active within a specific subnet, allowing the associated hotkey to participate as a subnet validator or subnet miner. - -### Archive Node - -A type of public subtensor node that stores the entire blockchain history, allowing for full data access and querying capabilities. - -### Axon - -A module in the Bittensor API that uses the FastAPI library to create and run API servers. Axons receive incoming Synapse objects. Typically, an Axon is the entry point advertised by a subnet miner on the Bittensor blockchain, allowing subnet validators to communicate with the miner. - -## B - -### Bicameral Legislature - -A two-tier legislative system comprising the Triumvirate and the Senate for proposal approval. - -### Bittensor Wallet - -A digital wallet that holds the core ownership in the Bittensor network and serves as the user's identity technology underlying all operations. - -### Block - -A unit of data in the Bittensor blockchain, containing a collection of transactions and a unique identifier (block hash). A single block is processed every 12 seconds in the Bittensor blockchain. - -## C - -### Coldkey - -A component of a Bittensor wallet responsible for securely storing funds and performing high-risk operations such as transfers and staking. It is encrypted on the user's device. This is analogous to a private key. - -### Coldkey-hotkey pair - -A combination of two keys, a coldkey for secure storage and high-risk operations, and a hotkey for less secure operations and network interactions. - -### Commit Reveal - -The commit reveal feature is designed to solve the weight-copying problem by giving would-be weight-copiers access only to stale weights. Copying stale weights should result in validators departing from consensus. - -See [Commit Reveal](./subnets/commit-reveal.md) for details. - -### Consensus - -A measure of a subnet validator's agreement with other validators on the network, calculated based on their trust scores. This is a κ-centered sigmoid of trust, influencing the emission calculation. - -## D - -### Delegate - -A subnet validator that receives staked TAO tokens from delegators and performs validation tasks in one or more subnets. - -### Delegate Stake - -The amount of TAO staked by the delegate themselves. - -### Validator Take % - -The percentage of emissions a validator takes, of the portion that depends on delegated stake (not including their emissions in proportion to their own self-stake), before the remainder is extracted back to the stakers. - -See [Emissions](./emissions). - -### Delegation - -Also known as staking, delegating TAO to a validator (who is thereby the delegate), increases the validator's stake and secure a validator permit. - -### Dendrite - -A client instance used by subnet validators and subnet miners to transmit information to axons on subnet miners and subnet validators. Dendrites communicate with axons using the server-client (Axon-dendrite) protocol. - -### Deregistration - -The process of removing a subnet miner or a subnet validator from the subnet due to poor performance. - -## E - -### EdDSA Cryptographic Keypairs - -A cryptographic algorithm used to generate public and private key pairs for coldkeys and hotkeys in the Bittensor wallet. - -### Effective stake - -The total staked TAO amount of a delegate, including their own TAO tokens and those delegated by nominators. - -### Emission - -Every block, currency is injected into each subnet in Bittensor, and every tempo (or 360 blocks), it is extracted by participants (miners, validators, stakers, and subnet creators). - -Emission is this process of generating and allocating currency to participants. The amount allocated to a given participant over some duration of time is also often referred to as 'their emissions' for the period. - -See [emissions](./emissions). - -### Encrypting the Hotkey - -An optional security measure for the hotkey. - -### External Wallet - -A Bittensor wallet created through the Bittensor website or using a tool like [subkey](https://docs.substrate.io/reference/command-line-tools/subkey/), allowing users to use TAO without installing Bittensor. - -## H - -### Hotkey - -A component of a Bittensor wallet responsible for less secure operations such as signing messages into the network, secure a UID slot in a subnet, running subnet miners and subnet validators in a subnet. It can be encrypted or unencrypted, but is unencrypted by default. The terms "account" and "hotkey" are used synonymously. - -### Hotkey-Coldkey Pair - -Authentication mechanism for delegates and nominators and for delegates participating in the Senate. - -## I - -### Immunity Period - -A grace period granted to a newly registered subnet miner or subnet validator, during which they will not be deregistered due to performance. Allows a miner or validator new to the subnet to adapt and improve their performance, in order to avoid deregistration once the immunity period expires. - -### Incentives - -A portion of the TAO emission received by the subnet miners when they provide valuable services and compete for UID slots in a subnet. - -### Incentive Mechanism - -A system that drives the behavior of subnet miners and governs consensus among subnet validators in a Bittensor subnet. Each subnet has its own incentive mechanism, which should be designed carefully to promote desired behaviors and penalize undesired ones. - -## L - -### Lite Node - -A type of public subtensor node that stores limited blockchain data and relies on archive nodes for full historical data. - -### Local Blockchain - -A private blockchain used for developing and testing subnet incentive mechanisms. A local blockchain is not public and is isolated from any Bittensor network. - -### Local Wallet - -A Bittensor wallet created on the user's machine, requiring the installation of Bittensor. - -### Loss Function - -In the context of machine learning, a mathematical function that measures the difference between the predicted output and the ground truth. In Bittensor, incentive mechanisms act as loss functions that steer subnet miners towards desirable outcomes. - -## M - -### Mainchain - -The primary Bittensor blockchain network, used for production purposes and connected to lite or archive nodes. - -### Metagraph - -A data structure that contains comprehensive information about the current state of a subnet, including detailed information on all the nodes (neurons) such as subnet validator stakes and subnet weights in the subnet. Metagraph aids in calculating emissions. - -### Miner Deregistration - -The process of removing a poor-performing subnet miner from a UID slot, making room for a newly registered miner. - -See [Mining in Bittensor: Miner Deregistration](./miners/#miner-deregistration) - -### Mnemonic - -A sequence of words used to regenerate keys, in case of loss, and restore coldkeys and hotkeys in the Bittensor wallet. - -## N - -### NaCl Format - -A secure encryption format, using the [NaCl](https://nacl.cr.yp.to/) library, used for updating legacy Bittensor wallets to improve security. - -### Netuid - -A unique identifier assigned to a subnet within the Bittensor network. - -### Neuron - -The basic computing node in a Bittensor subnet, representing a node in a neural network. Neurons can be either subnet validators or subnet miners. - -### Nominate - -The process of a delegate registering themselves as a candidate for others to stake their $TAO to. - -### Nominator - -Another term for a delegator. A subnet validator who nominates their own hotkey as a delegate, allowing others to delegate their TAO to the nominator's hotkey. - -### Nominator (Delegator) - -A TAO holder who delegates their stake. - -## O - -### Objective Function - -In the context of machine learning and subnet operations, this refers to the goal that the subnet is continuously optimizing for, through its incentive mechanism. - -## P - -### Private Key - -A private component of the cryptographic key pair, crucial for securing and authorizing transactions and operations within the Bittensor network. - -### Proposal - -A suggestion or plan put forward by the Triumvirate for the Senate to vote on. - -### Proposal hash - -A unique identifier for a proposal used in the voting process. - -### Public Key - -A cryptographic key that is publicly available and used for verifying signatures, encrypting messages, and identifying accounts in the Bittensor network. This is the publicly shareable part of the cryptographic key pair associated with both the coldkey and hotkey, allowing others to securely interact with the wallet. - -### Public Subtensor - -A publicly accessible node in the Bittensor network that can be run as a lite node or an archive node and synchronized with either the mainchain or testchain. - -## R - -### RAO - -A denomination of TAO, representing one billionth (10-9) of a TAO. - -### Rank - -A measure of a subnet miner's performance relative to other subnet miners in the same subnet, calculated based on the subnet miner's trust and incentive scores. This is the sum of weighted stake, contributing to the emission process. - -### Recycling, burning, and locking - -"Recycling TAO" means that this TAO is put back into the Bittensor emissions system. Instead of minting new TAO this recycled TAO that is in the recycle bin will be used again in the new emissions. - -This happens in two cases: - -- When you register either as a subnet validator or a subnet miner and get a `UID` in return, the registration cost TAO you pay is recycled. -- Emissions are recycled for those subnets that have registration turned off or paused. - -When TAO is burned it is permanently removed from circulation, reducing total supply. - -Locked TAO is neither recycled nor burned, but held unspent, without the ability to move it until it is unlocked. The cost for subnet registration is locked and returned if the subnet is deregistered. - -### Regenerating a Key - -The process of recreating a lost or deleted coldkey or hotkey using the associated mnemonic. - -### Register - -The process of registering keys with a subnet and purchasing a UID slot. - - -## S - -### SS58 Encoded - -A compact representation of public keys corresponding to the wallet's coldkey and hotkey, used as wallet addresses for secure TAO transfers. - -### Senate - -A group of elected delegates formed from the top K delegate hotkeys, responsible for approving or disapproving proposals made by the Triumvirate. - -### Stake - -The amount of currency tokens delegated to a validator UID in a subnet. Includes both self-stake (from the validator's own cold-key) and stake delegated from others. - -Stake determines a validator's weight in consensus as well as their emissions. - -### Staking - -The process of attaching TAO to a hotkey, i.e., locking TAO to a hotkey, to participate as a subnet validator, and to secure a validator permit. - -### Subnet - -A Bittensor subnet is an incentive-based competition market that produces a specific kind of digital commodity. It consists of a community of miners that produce the commodity, and a community of validators that measures the miners' work to ensure its quality. - -### Subnet Incentive Mechanism - -The framework that governs the behavior of subnet miners and ensures consensus among subnet validators by promoting desirable actions and penalizing undesired ones. - -### Subnet Miner - -The task-performing entity within a Bittensor subnet. A subnet miner is a type of node in a Bittensor subnet that is connected only to subnet validators. Subnet miners are isolated from the external world and communicate bidirectionally with subnet validators. A subnet miner is responsible for performing tasks given to them by the subnet validators in that subnet. - -### Subnet Creator - -The individual or entity responsible for defining the specific digital task to be performed by subnet miners, implementing an incentive mechanism, and providing sufficient documentation for participation in the subnet. - -### Subnet Protocol - -A unique set of rules defining interactions between subnet validators and miners, including how tasks are queried and responses are provided. - -### Subnet scoring model - -A component of the incentive mechanism that defines how subnet miners' responses are evaluated, aiming to align subnet miner behavior with the subnet's goals and user preferences. It is a mathematical object that converts miner responses into numerical scores, enabling continuous improvement and competition among miners. - -### Subnet Task - -A key component of any incentive mechanism that defines the work the subnet miners will perform. The task should be chosen to maximize subnet miner effectiveness at the intended use case for the subnet. - -### Subnet Validator - -A type of node in a subnet that creates tasks, evaluates the performance of subnet miners and sets weights based on their output. A subnet validator is connected only to subnet miners and to the external world. Subnet validators receive inputs from the external world and communicate bidirectionally with subnet miners. - -### Subnet Weights - -The importance assigned to each subnet determined by relative price among subnets and used to determine the percentage emissions to subnets. - -### Subtensor - -[Subtensor](https://github.com/opentensor/subtensor) is Bittensor's layer 1 blockchain based on substrate (now PolkadotSDK). This serves Bittensor as a system of record for transactions and rankings, operates Yuma Consensus, and emits liquidity to participants to incentivize their participation in network activities. - -The Bittensor SDK offers the [`bittensor.core.subtensor`](pathname:///python-api/html/autoapi/bittensor/core/subtensor/index.html) and [`bittensor.core.async_subtensor`](pathname:///python-api/html/autoapi/bittensor/core/async_subtensor/index.html) modules to handle Subtensor blockchain interactions. - -### Sudo - -A privileged key for administrative actions, replaced by governance protocol for enhanced security. - -### Synapse - -A data object used by subnet validators and subnet miners as the main vehicle to exchange information. Synapse objects are based on the BaseModel of the Pydantic data validation library. - -## T - -### TAO (τ) - -The cryptocurrency of the Bittensor network, used to incentivize participation in network activities (mining, validation, subnet creation and management). A single TAO is newly created (i.e., minted) every 12 seconds on the Bittensor blockchain. - -### Tempo - -A 360-block period during which the Yuma Consensus calculates emissions to subnet participants based on the latest available ranking weight matrix. A single block is processed every 12 seconds, hence a 360-block tempo occurs every 4320 seconds or 72 minutes. - -### Transfer - -The process of sending TAO tokens from one wallet address to another in the Bittensor network. - -### Triumvirate - -A group of three Opentensor Foundation employees responsible for creating proposals. - -### Trust - -A measure of a subnet miner's reputation and reliability, calculated based on the consensus of subnet validators. - -### Trust (T) - -A measure of the confidence in a subnet based on the stakes that set non-zero weights. - -## U - -### UID Slot - -A position occupied by a subnet miner or subnet validator within a subnet, identified by a unique UID. The UID is assigned to a hotkey when it is registered in a subnet, allowing the hotkey to participate as a subnet validator or subnet miner. - -## V - -### VPermit - -Validator permits held by the delegate for specific subnets. - -### Validator Module - -The software component that subnet validators run to perform their subnet validation operations within a subnet. - - -## W - -### Wallet Address - -A unique identifier derived from the public key, used as a destination for sending and receiving TAO tokens in the Bittensor network. - -### Wallet Location - -The directory path where the generated Bittensor wallets are stored locally on the user's machine. - -### Weight Matrix - -A matrix formed from the ranking weight vectors of all subnet validators in a subnet, used as input for the Yuma Consensus module to calculate emissions to that subnet. - -### Weight Vector - -A vector maintained by each subnet validator, with each element representing the weight assigned to a subnet miner based on its performance. - -The ranking weight vectors for each subnet are transmitted to the blockchain, where they combine to form the [weight matrix](#weight-matrix) that is input for Yuma Consensus. - -## Y - -### Yuma Consensus - -The consensus mechanism in the Bittensor blockchain that computes emissions to participants. - -See [Yuma Consensus](./yuma-consensus.md) diff --git a/docs/governance.md b/docs/governance/governance.md similarity index 94% rename from docs/governance.md rename to docs/governance/governance.md index 31104c694f..13a82b084a 100644 --- a/docs/governance.md +++ b/docs/governance/governance.md @@ -2,11 +2,13 @@ title: "Governance Overview" --- +import { SdkVersion } from "../sdk/_sdk-version.mdx"; + # Governance Overview Bittensor's governance protocol transitions the management of the network from centralization within the foundation to community ownership over time. -The first stage of this transition to decentralized management is the creation of a bicameral legislature. In this stage, the [Triumvirate](./glossary.md#triumvirate) creates proposals for the [Senate](./senate.md) to approve. +The first stage of this transition to decentralized management is the creation of a bicameral legislature. In this stage, the [Triumvirate](../resources/glossary.md#triumvirate) creates proposals for the [Senate](./senate.md) to approve. Triumvirate members are Opentensor Foundation employees, while the Senate is formed from the top K delegate hotkeys. @@ -39,9 +41,13 @@ Consider the following: **Triumvirate** `Bob` has a novel concept for a subnet and wishes to deploy it on the Bittensor network. `Bob` creates a proposal with the calldata: + + + ```python SubtensorModule.SudoAddNetwork(netuid, tempo, modality) ``` + and sends the transaction to the network in order to broadcast the proposal. **Senate** diff --git a/docs/senate.md b/docs/governance/senate.md similarity index 94% rename from docs/senate.md rename to docs/governance/senate.md index 232be41196..e103388b4e 100644 --- a/docs/senate.md +++ b/docs/governance/senate.md @@ -4,7 +4,7 @@ title: "Senate" # Senate -The Senate is a group of delegates who have elected to participate in proposals, and who control a significant portion of total network stake. +The Senate is a group of delegates who have elected to participate in proposals, and who control a significant portion of total network stake. All members of the network who have delegated stake to any of these Senate members are represented by the party that controls the delegate they've chosen to stake with. This allows any holder within the network to be represented, and to make their opinion known by delegating with organizations who represent their interests. @@ -14,10 +14,10 @@ In order to participate in the Senate, a coldkey must: - Have registered with any subnetwork as a hotkey-coldkey pair. - Have a hotkey stake value is greater than 2% of the network's total stake amount, through delegation or self-stake. -- Have elected to participate in the Senate. +- Have elected to participate in the Senate. -Once all four of the requirements have been fulfilled by a coldkey-hotkey pair, they can vote on any proposal created by the [Triumvirate](glossary#triumvirate). +Once all four of the requirements have been fulfilled by a coldkey-hotkey pair, they can vote on any proposal created by the [Triumvirate](../resources/glossary#triumvirate). In the case that the Senate has all twelve seats filled, and a delegate wishes to join, they will replace the lowest stake member as long as they have more stake in the network. diff --git a/docs/governance/senators-btcli-guide.md b/docs/governance/senators-btcli-guide.md index 00b2a24235..0d897ed9d5 100644 --- a/docs/governance/senators-btcli-guide.md +++ b/docs/governance/senators-btcli-guide.md @@ -6,25 +6,25 @@ title: "Senator's Guide to `BTCLI`" Governance participants (senate members, sudo-level accounts) can propose changes, cast votes, or execute privileged commands that affect the entire network. They must have a **coldkey** with the relevant governance role (senate membership or sudo privileges). -See [Requirements for Senate participation](../senate) +See [Requirements for Senate participation](./senate) -This page discusses btcli considerations specifically for Senators. For general coverage of BTCLI and permissions stuff, see: [Bittensor CLI: Permissions Guide](../btcli-permissions) +This page discusses btcli considerations specifically for Senators. For general coverage of BTCLI and permissions stuff, see: [Bittensor CLI: Permissions Guide](../btcli/btcli-permissions) -See also: [Coldkey and Hotkey Workstation Security](../getting-started/coldkey-hotkey-security). +See also: [Coldkey and Hotkey Workstation Security](../keys/coldkey-hotkey-security). - -See: [Senate](../senate). +See: [Senate](./senate). ## **Commands most relevant to governance:** + **Senate / Proposals** (coldkey with senator role): - - `btcli sudo senate` - - `btcli sudo proposals` - - `btcli sudo senate-vote` - - `btcli sudo senate_vote` + +- `btcli sudo senate` +- `btcli sudo proposals` +- `btcli sudo senate-vote` +- `btcli sudo senate_vote` ## Key rotation If you suspect your coldkey may have been leaked, you can request to swap it out of your wallet, using an extrinsic blockchain transaction. This operation has a 5 day waiting period, during which your coldkey will be locked. The cost of this coldkey swap transaction is 0.1 TAO. -See [Rotate/Swap your Coldkey](../subnets/schedule-coldkey-swap) - +See [Rotate/Swap your Coldkey](../keys/schedule-coldkey-swap) diff --git a/docs/index.md b/docs/index.md index acd733296d..ad52ac9dbe 100644 --- a/docs/index.md +++ b/docs/index.md @@ -30,7 +30,6 @@ import { SiFuturelearn } from "react-icons/si"; import { GoNumber } from "react-icons/go"; import { VscFileMedia } from "react-icons/vsc"; - # Bittensor Documentation Bittensor is an open source platform where participants produce best-in-class digital commodities, including compute power, storage space, artificial intelligence (AI) inference and training, protein folding, financial markets prediction, and many more. @@ -52,7 +51,7 @@ Browse the subnets and explore links to their code repositories on [TAO.app](htt ## Participate - You can participate in an existing subnet as either a subnet validator or a subnet miner, or by staking your TAO to running validators. @@ -168,7 +166,7 @@ See [Legacy Bittensor 7.4.0 Documentation](pathname:///legacy-python-api/html/in ( + +

+ Neither the Opentensor Foundation nor Latent Holdings has the technical or legal ability to intervene if your tokens are lost due to theft, scam, or accidental loss of your keys. If you believe you have been the victim of a crime, contact your local law enforcement. +

+
+); diff --git a/docs/keys/address-poisoning-scams.md b/docs/keys/address-poisoning-scams.md new file mode 100644 index 0000000000..acd77e2850 --- /dev/null +++ b/docs/keys/address-poisoning-scams.md @@ -0,0 +1,134 @@ +--- +title: "Address Poisoning Scams: Protect Your Wallet" +--- + +import { SecurityWarning } from "../keys/_security-warning.mdx"; + +# Address Poisoning Scams: Protect Your Wallet + +Address poisoning is one of the most successful cryptocurrency scams, with over $83 million stolen from more than 6,600 victims on Ethereum and Binance Smart Chain alone. Because Bittensor wallets have a similar vulnerability, users of Bittensor wallets should understand how to protect themselves. + + + +## What is Address Poisoning? + +Address poisoning exploits a simple human weakness: long wallet addresses are hard to read. + +Here's how the scam works: + +1. You make a transaction to a legitimate address (like `0x3b75...2712a`) +2. An attacker generates a fake address that looks very similar (like `0x3b75...2712b` or `0x3b74...2712a`) + - They do this by brute-force generating millions of private keys and checking for matches with target addresses + - When they find one that matches the first and last characters of a target's address, they keep it + - This is computationally expensive but profitable - it's called "vanity address generation" +3. Within minutes—often less than 20 minutes—the scammer "poisons" your transaction history by sending you a tiny amount (or even zero) of tokens from their fake address +4. Later, when you're in a hurry, you copy an address from your recent transactions or wallet history +5. You accidentally send funds to the scammer's lookalike address instead of your intended recipient + +The transactions are irreversible. Your funds are gone. + + +## What Makes Bittensor Vulnerable? + +Bittensor uses the Substrate blockchain framework, which, like Ethereum, represents addresses as long hexadecimal strings. This makes Bittensor wallets vulnerable to the same address poisoning tactics as most other blockchains. + +Both Substrate and Ethereum derive addresses from private keys using similar cryptographic processes: +- **Private key** (random) → **Public key** (via elliptic curve) → **Address** (via hashing) + +You can't choose an address directly, but attackers can **brute-force generate millions of key pairs** until they find an address that matches the target pattern. This is computationally expensive but absolutely possible: +- Matching 7 characters: achievable with a laptop CPU +- Matching 14 characters: requires dedicated computing +- Matching 20 characters: requires GPU clusters (some attackers use these!) + +[Research](#research-source) found that one attack group spent an estimated \$1.7 million on computing to generate their lookalike addresses, but made \$4 million in profit. + +Whether you're: +- Transferring TAO +- Managing stake +- Delegating to validators +- Sending funds to a coldkey + +## The Economics: Why This Scam Is So Prevalent + +[Research](#research-source) shows address poisoning is a highly profitable criminal enterprise: + +- Low success rate, high volume: Only 0.01% of poisoning attempts succeed, but scammers compensate by attacking millions of victims +- Organized crime: The largest attack groups have made $26+ million in profit over two years +- Cheap to execute: Each poisoning attempt costs only about \$1 on Ethereum and $0.01 on BSC +- Sophisticated operations: Some groups use GPU computing to generate extremely convincing lookalike addresses with 20 matching characters + +One successful attack of $20,000 pays for 20,000 failed attempts. The math works in favor of the scammers. + +## Who's Most at Risk? + +[Research](#research-source) shows that scammers don't attack randomly. They specifically target users who: + +- Have high balances: Victims targeted had significantly more funds than average users +- Are very active: Users making frequent transactions are attacked more often +- Make large transfers: The bigger your typical transaction, the more likely you are to be targeted +- Use centralized exchanges: Many attackers generate fake addresses mimicking exchange deposit addresses + + +## How to Protect Yourself + +Address poisoning succeeds because of one thing: inattention during routine tasks. + +The best defense is simple but requires discipline: +- Slow down when sending transactions +- Verify addresses completely before clicking send +- Use an address book instead of transaction history +- Trust your caution, not your convenience + +Five extra seconds of verification can save you thousands of dollars. These aren't random attacks. If you're an active user with significant holdings, you're likely being targeted right now. Your transaction history may already be poisoned. + +### 1. Always Double-Check the Full Address + +Before sending any transaction: +- Expand and read the complete address, not just the abbreviated version +- Check the beginning AND the end—scammers match both +- If possible, verify the address through a second channel (message the recipient, check a saved note, etc.) + +### 2. Use an Address Book + +- Maintain a saved list of trusted addresses with clear labels +- Never select addresses from your transaction history—always use your saved address book +- Most wallet applications support address books or contact lists + +### 3. Be Suspicious of Unexpected Transfers + +Scammers exist, so do not give unknown parties "the benefit of the doubt." If you receive unexpected transfers for very small amounts ("dust"), they are likely attempts to seed your transaction history for address poisoning. + +### 4. Send a Test Transaction First + +For large transfers: +- Send a very small amount first +- Verify the recipient received it +- Then send the full amount + +This two-step process can save you from a costly mistake. + +### 5. Use Wallet Apps with Protection Features + +Some wallet applications and blockchain scanners now flag suspicious addresses or hide poisoning attempts. Keep your wallet software updated. + +The [TAO.app](https://www.tao.app) UI includes a warning for addresses flagged as suspicious. + +### 6. Never Rush Important Transactions + +Scammers count on you being in a hurry. If you're tired, distracted, or rushing your procedures, consider taking a break before conducting irreversible blockchain transactions. The blockchain will still be there in an hour. Your funds won't be if you make a mistake. + + +## Learn More + +Your private key is your identity in cryptocurrency. One careless transaction can mean permanent, irreversible loss. Always verify. Always double-check. + +Further reading: + +- [Wallets, Coldkeys and Hotkeys in Bittensor](../keys/wallets.md) +- [Working with Keys](../keys/working-with-keys.md) +- [Coldkey and Hotkey Workstation Security](../keys/coldkey-hotkey-security.md) + +### Research Source + +This guide is based on the largest study of this scam to date: Tsuchiya, T., Dong, J.-D., Soska, K., & Christin, N. (2025). "Blockchain Address Poisoning," in *Proceedings of the 34th USENIX Security Symposium*. Seattle, WA, USA. [https://www.usenix.org/conference/usenixsecurity25/presentation/tsuchiya](https://www.usenix.org/conference/usenixsecurity25/presentation/tsuchiya) + diff --git a/docs/getting-started/coldkey-hotkey-security.md b/docs/keys/coldkey-hotkey-security.md similarity index 75% rename from docs/getting-started/coldkey-hotkey-security.md rename to docs/keys/coldkey-hotkey-security.md index 9144697eae..24caf74ea1 100644 --- a/docs/getting-started/coldkey-hotkey-security.md +++ b/docs/keys/coldkey-hotkey-security.md @@ -2,6 +2,8 @@ title: "Coldkey and Hotkey Workstation Security" --- +import { SecurityWarning } from "./_security-warning.mdx"; + # Coldkey and Hotkey Workstation Security This page goes into detail of security concerns for working with coldkeys and hotkeys in Bittensor. @@ -9,8 +11,8 @@ This page goes into detail of security concerns for working with coldkeys and ho See also: - [Intro to Wallets, Coldkeys and Hotkeys in Bittensor](./wallets) -- [Bittensor CLI: Permissions Guide](../btcli-permissions) -- [Handle your Seed Phrase/Mnemonic Securely](../keys/handle-seed-phrase) +- [Bittensor CLI: Permissions Guide](../btcli/btcli-permissions) +- [Handle your Seed Phrase/Mnemonic Securely](./handle-seed-phrase) Interacting with Bittensor generally falls into one of three levels of security, depending on whether you need to use your coldkey private key, hotkey private key, or neither. @@ -20,27 +22,30 @@ The workstations you use to do this work can be referred to as a permissionless - [Coldkey workstation](#permissionless-workstation) - [Hotkey workstation](#permissionless-workstation) + + ## Permissionless workstation -You can check public information about Bittensor wallets (including your TAO and alpha stake balances), subnets, validators, and more *without* using a (coldkey or hotkey) private key. This is because transaction information is public on the Bittensor blockchain, with parties being identified by their wallet's coldkey public key. +You can check public information about Bittensor wallets (including your TAO and alpha stake balances), subnets, validators, and more _without_ using a (coldkey or hotkey) private key. This is because transaction information is public on the Bittensor blockchain, with parties being identified by their wallet's coldkey public key. -When you use a website and apps with *only your public key*, this is considered "permissionless" work. Whenever possible, you should do permissionless work on a **permissionless workstation**, meaning a device (laptop or desktop computer, mobile phone, tablet, etc.) that does *not* have your coldkey private key loaded into it. +When you use a website and apps with _only your public key_, this is considered "permissionless" work. Whenever possible, you should do permissionless work on a **permissionless workstation**, meaning a device (laptop or desktop computer, mobile phone, tablet, etc.) that does _not_ have your coldkey private key loaded into it. -In other words, don't use your coldkey private key when you don't have to, and avoiding loading it into devices unnecessarily. Every device that *does* have your coldkey private key loaded into it is a **coldkey workstation**, and should be used with security precautions. +In other words, don't use your coldkey private key when you don't have to, and avoiding loading it into devices unnecessarily. Every device that _does_ have your coldkey private key loaded into it is a **coldkey workstation**, and should be used with security precautions. -When you just want to read/check the state of the blockchain (balances, emissions, token prices, etc.) and you don't need to use your coldkey to *change* anything (for exmaple, to transfer TAO or move stake), it is preferable to use a permissionless workstation. +When you just want to read/check the state of the blockchain (balances, emissions, token prices, etc.) and you don't need to use your coldkey to _change_ anything (for exmaple, to transfer TAO or move stake), it is preferable to use a permissionless workstation. To use the Bittensor CLI `btcli` as a permissionless workstation: -1. Importing your coldkey ***public key*** (not private key) with: - ```shell - btcli w regen-coldkeypub --ss58 - ``` +1. Importing your coldkey **_public key_** (not private key) with: + + ```shell + btcli w regen-coldkeypub --ss58 + ``` -1. View your balances and stakes, as well as information about the Bittensor blockchain, subnets, miners, validators, etc., simply by running: - ```shell - btcli view dashboard - ``` +1. View your balances and stakes, as well as information about the Bittensor blockchain, subnets, miners, validators, etc., simply by running: + ```shell + btcli view dashboard + ``` Websites that offer permissionless browsing of Bittensor data include: @@ -49,22 +54,21 @@ Websites that offer permissionless browsing of Bittensor data include: ## Coldkey workstation -Your coldkey private key, accessible with your recovery [seed phrase](./wallets#the-seed-phrase-aka-mnemonic), is the complete representation of your identity to Bittensor. In otherwords, holding the coldkey or seed phrase is the ultimate authority over your Bittensor wallet. If your coldkey key is leaked or stolen allows an attacker holder to transfer (steal) your TAO, redelegate your stakes, or take other actions that can’t be reversed. Conversely, without your coldkey private key or the seed phrase, there is no possible way to recover access to your wallet. +Your coldkey private key, accessible with your recovery [seed phrase](./wallets#the-seed-phrase-aka-mnemonic), is the complete representation of your identity to Bittensor. In otherwords, holding the coldkey or seed phrase is the ultimate authority over your Bittensor wallet. If your coldkey key is leaked or stolen, it allows an attacker holder to transfer (steal) your TAO, redelegate your stakes, or take other actions that can’t be reversed. Conversely, without your coldkey private key or the seed phrase, there is no possible way to recover access to your wallet. Because of these high stakes, best practices should be diligently followed. Always prioritize confidentiality and integrity over convenience when handling coldkeys. - ### Isolation of coldkey operations The first principle is to isolate coldkey operations from day-to-day or internet-exposed systems. This means using a dedicated machine that is minimally connected to the internet, protected with full disk encryption, and has only highly trusted software installed to minimize the risk of malware or keyloggers intercepting your coldkey. In short, you should approach all operations involving your coldkey management as high-value, mission-critical, and laden with inherent risk. -Ensure a clear boundary between coldkey operations and the working environment you use to carry them out, and everything else. +Ensure a clear boundary between coldkey operations and the working environment you use to carry them out, and everything else. -:::tip Coldkeys do not mine +:::warning Do not mine with coldkeys -Miners will need coldkeys to manage their TAO and alpha currency, as well as hotkeys to serve requests. Ensure there is a clear boundary: The coldkey should **never** be on an environment with untrusted ML code from containers, frameworks, or libraries that might exfiltrate secrets. +Miners will need coldkeys to manage their TAO and alpha currency, as well as hotkeys to serve requests. Miners must ensure that there is a clear boundary—the coldkey should **never** be on an environment with untrusted ML code from containers, frameworks, or libraries that might exfiltrate secrets. ::: ### Coldkey mobile device @@ -82,20 +86,19 @@ This is required for using `btcli` or the Bittensor Python SDK for advanced use ### Operational Hygiene Even on a minimal or air-gapped machine, follow standard security hygiene: -- Always [Handle your Seed Phrase/Mnemonic Securely](../keys/handle-seed-phrase). -- Use strong passwords for your encryption passphrases. -- Do not reuse credentials across different environments. + +- Always [Handle your Seed Phrase/Mnemonic Securely](./handle-seed-phrase). +- Use strong passwords for your encryption passphrases. +- Do not reuse credentials across different environments. - Keep your workstation’s operating system and critical software updated with the latest security patches. - Disable all network services (SSH, RDP, or anything else) that are not strictly needed. - Maintain logs of important oprations. - - ### Rotating your coldkey If you suspect your coldkey may have been leaked, you can request to swap it out of your wallet, using an extrinsic blockchain transaction. This operation has a 5 day waiting period, during which your coldkey will be locked. The cost of this coldkey swap transaction is 0.1 TAO. -See [Rotate/Swap your Coldkey](../subnets/schedule-coldkey-swap) +See [Rotate/Swap your Coldkey](./schedule-coldkey-swap) Effectively, this transfers all of your TAO and alpha stake balances, as well as your `sudo` control over any subnets you have created: @@ -107,6 +110,24 @@ Effectively, this transfers all of your TAO and alpha stake balances, as well as - For each hotkey owned by the old coldkey, ownership transfers to the new coldkey. The list of owned hotkeys for both old and new coldkeys updates. - Any remaining balances transfer from the old coldkey to the new coldkey. +### Proxy wallets for coldkey protection + +**Proxies are one of the most effective tools for protecting your coldkey** while maintaining operational flexibility. By setting up proxy relationships, you can perform routine operations like staking without exposing your coldkey to any online environment. + +Key benefits: +- **Least-privilege permissions**: Configure proxies with only the specific permissions needed (e.g., `Staking` type for stake management only) +- **Time-delayed operations**: Set a non-zero delay so you have time to reject unauthorized transactions if a proxy is compromised +- **Coldkey stays in cold storage**: Your high-value coldkey never needs to leave secure offline storage for day-to-day operations + + +:::warning Zero-delay proxies +A proxy with `delay: 0` and `ProxyType: Any` offers **no additional security** over direct coldkey access. Always use the narrowest `ProxyType` possible and consider adding delays for high-value operations. +::: + +See: +- [Proxies: Overview](./proxies/index.md) +- [Working with Proxies](./proxies/working-with-proxies.md) +- [Staking with a Proxy](./proxies/staking-with-proxy.md) ### Hardware Wallets and Hardware Security Modules (HSMs) @@ -120,7 +141,7 @@ What about Hashicorp Vault? Can you use that with HSM? AWS CloudHSM or Azure Key See: -- [AWS CloudHSM documentation](https://aws.amazon.com/cloudhsm/) +- [AWS CloudHSM documentation](https://aws.amazon.com/cloudhsm/) - Oblique reference to [HashiCorp Vault with HSM integration](https://developer.hashicorp.com/vault/docs/configuration/seal) --> @@ -133,16 +154,10 @@ If you work within a team or DAO environment that collectively manages a coldkey ### Periodic Security Assessments Maintain a secure software environment: -- Keep an eye on newly discovered OS or hardware vulnerabilities. -- Run vulnerability scans on any machine that touches your coldkey. -- Conduct red team exercises and penetration testing to identify weaknesses in your setup. - - - - - - +- Keep an eye on newly discovered OS or hardware vulnerabilities. +- Run vulnerability scans on any machine that touches your coldkey. +- Conduct red team exercises and penetration testing to identify weaknesses in your setup. ## Hotkey workstation @@ -155,8 +170,8 @@ Overall, a hotkey workstation can be considered an “operational” environment Bittensor miners must handle hotkeys in MLOps workflows. Hotkeys must be created in coldkey workstation environments and then provisioned to the mining/hotkey workstation environment, i.e. a server that will handle requests from validators, for example by querying an AI model to generate a response (a generated image or text response) to a text prompt from a user. - Secure secrets management solution (like [HashiCorp Vault](https://www.vaultproject.io/), [AWS Secrets Manager](https://aws.amazon.com/secrets-manager/), or [GCP Secret Manager](https://cloud.google.com/secret-manager)) to provision the hotkey private key or seedphrase to the mining server. -- Use ephemeral secret injection (CI/CD pipelines like GitLab or GitHub Actions allow storing secrets and injecting them at runtime). -- Never put keys in code repositories +- Use ephemeral secret injection (CI/CD pipelines like GitLab or GitHub Actions allow storing secrets and injecting them at runtime). +- Never put keys in code repositories ### Hotkey rotation @@ -164,10 +179,10 @@ If you suspect that a hotkey (but not a coldkey) has been leaked, rotate it as s Note that this operation incurs a $1 \tau$ recycling fee. - ### Minimize dependency risk Bittensor nodes often run complex software stacks with many dependencies. Take steps to reduce risk: -- Keep your Python environment or Docker images updated with the latest patches. -- Avoid installing unnecessary packages that might contain vulnerabilities. -- Consider sandboxing the ML library if possible, using solutions like [PyPy sandboxing](https://doc.pypy.org/en/latest/sandbox.html) or custom Docker seccomp profiles. + +- Keep your Python environment or Docker images updated with the latest patches. +- Avoid installing unnecessary packages that might contain vulnerabilities. +- Consider sandboxing the ML library if possible, using solutions like [PyPy sandboxing](https://doc.pypy.org/en/latest/sandbox.html) or custom Docker seccomp profiles. diff --git a/docs/keys/handle-seed-phrase.md b/docs/keys/handle-seed-phrase.md index c1b2bb19b5..3d22cf1327 100644 --- a/docs/keys/handle-seed-phrase.md +++ b/docs/keys/handle-seed-phrase.md @@ -2,6 +2,8 @@ title: "Handle your Seed Phrase/Mnemonic Securely" --- +import { SecurityWarning } from "./_security-warning.mdx"; + # Handle your Seed Phrase/Mnemonic Securely The seed phrase (a.k.a. 'menemonic' or 'recovery phrase') is a series of (at least 12) words that is generated together with your wallet's cryptographic key pair, and which can be used to recover the coldkey private key. This seed phrase is therefore a human-usable way to save access to the cryptographic wallet offline, and to import the cryptographic wallet into a wallet application. @@ -10,25 +12,27 @@ Whoever holds the seed phrase has full control over the wallet, so you should tr There are two categories of security failure with a secret like a seed phrase/mnemonic: -- To *lose* the secret means no longer having access to it. This implies permanent, unrecoverable loss of the resources (TAO and alpha stake, subnet creator permissions on a subnet, etc.) controlled by a Bittensor coldkey private key. -- To *leak* the secret means accidentally giving someone else access to it. This may result in them stealing your resources, or further leaking it to others who may in turn act maliciously. If your secret is leaked, you can (and should) rotate it, i.e. perform a coldkey swap. +- To _lose_ the secret means no longer having access to it. This implies permanent, unrecoverable loss of the resources (TAO and alpha stake, subnet creator permissions on a subnet, etc.) controlled by a Bittensor coldkey private key. +- To _leak_ the secret means accidentally giving someone else access to it. This may result in them stealing your resources, or further leaking it to others who may in turn act maliciously. If your secret is leaked, you can (and should) rotate it, i.e. perform a coldkey swap. + + See: [Rotating your coldkey](./coldkey-hotkey-security#rotating-your-coldkey) - See: [Rotating your coldkey](../getting-started/coldkey-hotkey-security#rotating-your-coldkey) + ## Do not leak your keys/seed phrase 1. Do not keep paper/analog copies somewhere they can be accessed without your knowledge. -1. Do not expose your seed phrase to untrustworthy software by entering into applications: - - messaging - - email - - online word processors -1. Beware key-logging software if you enter your seed phrase. Never enter your seed phrase on a device that may be compromised with malware! -1. Beware screen capture software if you generate and export your seed phrase. Never enter your seed phrase on a device that may be compromised with malware! +1. Do not expose your seed phrase to untrustworthy software by entering into the following applications: + - messaging + - email + - online word processors +1. Beware of key-logging software when entering your seed phrase. Never enter your seed phrase on a device that may be compromised with malware! +1. Beware of screen capture software if you generate and export your seed phrase. Never enter your seed phrase on a device that may be compromised with malware! 1. Beware cameras and eye-balls (the "over the shoulder" attack) if you generate and export your seed phrase. Don’t write it down or display it on screen in public or semi-public places. ## Do not lose your keys/seed phrase -You must keep redundant backups of your coldkey. If you lose all access to your seed phrase/initialized wallets, you permanently and unrecoverably lose access to your account (TAO, stake, etc.). +You must keep redundant backups of your coldkey. If you lose all access to your seed phrase/initialized wallets, you permanently and unrecoverably lose access to your account (TAO, stake, etc.). ## Backup tactics @@ -54,6 +58,7 @@ Pros: - Can be hard to lose if properly secured in a safe. Cons: + - Easy to leak if physical security is compromised (anyone can read or take a picture of it when the paper is exposed). - Easy to lose to physical disaster (e.g. fire). @@ -68,6 +73,7 @@ Cons: Easy to leak if physical security is compromised (anyone can read or take ### Encrypted drive Tactics: + - Save the seed phrase in an encrypted text file on a USB drive. - Use strong, unique passphrases and encrypt using industry-standard tools (e.g., GPG, VeraCrypt). - Store the USB in a secure physical location—never leave it connected to a device. @@ -84,7 +90,7 @@ Pros: Cons: -- Signing device, *not* full backup; cannot export seed phrase +- Signing device, _not_ full backup; cannot export seed phrase - If lost and not backed up elsewhere, access is lost - High risk of loss due to mistaken factory reset (e.g. wrong PIN too many times) @@ -106,7 +112,7 @@ Pros: Cons: -- Signing device, *not* full backup; cannot export seed phrase +- Signing device, _not_ full backup; cannot export seed phrase - Physical access can compromise keys. - Requires careful configuration for offline mode. - App updates require full device reset and recovery from seed. @@ -124,16 +130,17 @@ For example, you might split a seed phrase into 5 shares, requiring any 3 to res Pros: - Extremely resistant to both single-point loss and leakage: - - The leak of any share does not compromise your wallet. - - The loss of any share does not result in loss of the wallet. + - The leak of any share does not compromise your wallet. + - The loss of any share does not result in loss of the wallet. - Shares can be safely distributed across multiple locations or people. Cons: + - Imposes additional operational complexity. - Stored secret is no longer human readable. Can be remedied with [slip39](https://github.com/satoshilabs/slips/blob/master/slip-0039.md). Tools: + - [`sssa-golang`](https://github.com/SSSaaS/sssa-golang): An implementation of Shamir's Secret Sharing Algorithm in Go. - [Banana Split](https://github.com/paritytech/banana_split): Open source tool that uses a variation of SSS to split a seed phrase into QR codes. - [PyCryptodome SSS](https://pycryptodome.readthedocs.io/en/latest/src/protocol/ss.html): A Python-based implementation of the Shamir scheme. - diff --git a/docs/keys/multisig.md b/docs/keys/multisig.md index da1bc86bcd..c07117c6e6 100644 --- a/docs/keys/multisig.md +++ b/docs/keys/multisig.md @@ -1,8 +1,8 @@ --- -title: "Secure your Coldkey with a Multisig" +title: "Secure your Coldkey with a Multisig Wallet" --- -# Secure a Coldkey with a Multisig +# Secure a Coldkey with a Multisig Wallet A multisig (multiple signatories) wallet is a way of distributing responsibility for a coldkey across a set of wallets, referred to as signatories. Any signatory can propose a transaction, but the action must be agreed by some threshold of others before it will execute. Conventionally, a multisig is described as "$M$ out of $N$", where $M$ is the threshold number of signatories required to sign a transaction and $N$ is the total number of signatories. The signatories on a multisig may be seperate people, or a set of keys controlled by a single individual. This gives multisigs great versatility in providing security against single points of failure, including the loss of a single key or the decision of a team-mate to act irresponsibly. @@ -14,7 +14,7 @@ This page will guide the user through an example practice workflow of creating a - [Install the latest version of BTCLI](../getting-started/install-btcli) - Acquire some Testnet TAO. -- Polkadot-JS: This tutorial will employ the Polkadot-JS browser app, which allows users to submit transactions to Polkadot-based chains, including Bittensor. To use your coldkey private keys with the Polkadot-JS app, you must install the wallet browser extension, which is available for Firefox or Chrome. +- Polkadot-JS: This tutorial will employ the Polkadot-JS browser app, which allows users to submit transactions to Polkadot-based chains, including Bittensor. To use your coldkey private keys with the Polkadot-JS app, you must install the wallet browser extension, which is available for [Firefox](https://addons.mozilla.org/en-US/firefox/addon/polkadot-js-extension/) or [Chrome](https://chrome.google.com/webstore/detail/polkadot%7Bjs%7D-extension/mopnmbcafieddcagagdcbnhejhlodfdd). ## Provision and configure your workstation @@ -28,17 +28,20 @@ Coldkeys private keys and seed phrases for wallets with real (mainnet) TAO are * In a realistic scenario, using wallets with real (mainnet) TAO, it would be crucial to follow proper workstation security. This implies that each coldkey would be provisioned to its own secure coldkey workstation, as maintaining separate workstations for each coldkey is important for minimizing the risk that multiple of the keys are lost or leaked; storing or handling the keys together undermines the purpose of having multiple keys. -See [Coldkey and Hotkey Workstation Security](../getting-started/coldkey-hotkey-security). +See [Coldkey and Hotkey Workstation Security](./coldkey-hotkey-security). -In the current *practice* scenario, using testnet TAO, we will forego full workstation security for ease, and handle all three keys on a single workstation, which can be an ordinary laptop rather than a secure workstation. +In the current _practice_ scenario, using testnet TAO, we will forego full workstation security for ease, and handle all three keys on a single workstation, which can be an ordinary laptop rather than a secure workstation. ### Configure the target network in the Polkadot-JS web app. 1. Visit the [Polkadot-JS explorer web app](https://polkadot.js.org/apps). -1. Click the blockchain selector tab in the upper lefthand corner of the web page, next to **Accounts**. This is set to **Polkadot** main chain by default. -1. Scroll down and open **Development** at the bottom of the Chains menu, and paste the address for the Bittensor test chain into **custom endpoint**: `wss://test.finney.opentensor.ai:443`. +1. Click the blockchain selector dropdown in the upper lefthand corner of the web page, next to **Accounts**. This is set to **Polkadot** main chain by default. +1. Scroll down and open **Development** at the bottom of the Chains menu, and paste the address for the Bittensor test chain into **custom endpoint** field: `wss://test.finney.opentensor.ai:443`. +1. After pasting the link to the Bittensor test chain, click on the **Switch** button at the top of the menu. - You should see the page update and display live information about Bittensor testnet. + :::tip success + You should see the page update and display live information about Bittensor testnet. + ::: ### Create and import 3 coldkey pairs ("accounts") in the Polkadot-JS browser extension @@ -46,52 +49,81 @@ Each of our 3 signatories needs a wallet. Either create them or re-use available 1. Use `btcli` to create three coldkeys/wallets, or use practice wallets you already have access to. Alternatively, you can create wallets in the Polkadot-JS browser extension. - See [Creating/Importing a Bittensor Wallet](../working-with-keys). + See [Creating/Importing a Bittensor Wallet](./working-with-keys). -1. Load each key into the Polkadot-JS wallet browser extension: - 1. Click to open the browser extension. - 1. Click **+**, then select **Import account from pre-existing seed**. - 1. Provide your seed phrase to regenerate your wallet's coldkey private key. +1. Load each wallet key into the Polkadot-JS wallet browser extension: -1. Configure your keys to use the custom network (Bittensor's test net). For each key/**account**: - 1. Click the menu (three dots) to configure the account. - 1. Open the network dropdown selector, and choose **Allow use on any chain**. + 1. Click the `polkadot{.js}` extension icon in your browser to open the extension. + 1. Click the **+** icon, then select **Import account from pre-existing seed**. + 1. Provide your Bittensor wallet's seed phrase to regenerate your wallet's coldkey private key. + 1. Open the **NETWORK** dropdown selector, and choose **Allow use on any chain**. + 1. Click **Next**. After clicking **Next**, you will be prompted to provide a name and password for the account created. -1. You may need to allow the PolkadotJS webapp to use specific wallets by clicking **connect** in the extension. +1. You will need to allow the PolkadotJS webapp to use specific wallets connecting the imported accounts. To do this: -1. You may need to refresh the PolkadotJS webapp to show updated accounts information. + 1. Click the `polkadot{.js}` extension icon in your browser toolbar to open the extension. -1. Confirm success by visiting the [accounts page](https://polkadot.js.org/apps/#/accounts). You should see all three wallets/accounts listed as **accounts available via browser extensions**. + :::info + Make sure you perform this action while on the same browser tab where the Polkadot-JS Explorer is open. + ::: + + 2. Click the **Connect Accounts** button at the top of the extension. + 3. Select the accounts that you want to connect to the Polkadot-JS browser app—for this walkthrough, select the three signatory accounts created. + 4. Confirm success by visiting the [Accounts page](https://polkadot.js.org/apps/#/accounts). You should see all three wallets/accounts listed as **accounts available via browser extensions**. + + :::info + You may need to refresh the PolkadotJS webapp to show updated accounts information. + ::: ## Create the multisig In this step, we'll create the multisig wallet, specifying the signatory wallets. -1. Navigate to the [accounts page](https://polkadot.js.org/apps/#/accounts). +1. Navigate to the [accounts page](https://polkadot.js.org/apps/#/accounts). + +1. Click **+ Multisig** to create a new multisig. In the **add multisig** modal: + + 1. Select from the available signatories, which must be in your address book (if they are not, add them from the Accounts/Address book tab). + 1. Set the **threshold**. + 1. Set a name for the multisig address on the Polkadot-JS web app. + 1. Click **+ Create**. + + :::info + You should see the newly created multisig account listed under the **multisig** section on the Accounts page. Select the new account to view its name, balance, and SS58 address. + ::: -1. Click **+ Multisig**. In the **add multisig** modal: - 1. Select from the available signatories, which must be in your address book (if they are not, add them from the Accounts/Address book tab). - 1. Set the **threshold**. - 1. Set a name. - 1. Click **create**. +1. Use the `btcli w regen_coldkeypub` command to add the wallet's public key to BTCLI. To do this, run the following command in your terminal: -1. Use `btcli w regen_coldkeypub --wallet.name multisig` to add the wallet's public key to BTCLI. -1. View its balance information with `btcli view dashboard --wallet.name multisig`. + ```sh + btcli w regen_coldkeypub --wallet-name WALLET_NAME --ss58 MULTISIG_ADDRESS + ``` + + Replace `WALLET_NAME` and `MULTISIG_ADDRESS` with the name and ss58 address of the multisig address created in the Polkadot-JS browser app. + +:::info +This command regenerates the public part of a coldkey for the multisig wallet named. You can view its balance information as shown: + +```sh +btcli view dashboard --wallet.name WALLET_NAME +``` + +::: ## Transfer TAO to the multisig wallet. -1. Find the multisig wallet's coldkey public key on the [accounts page](https://polkadot.js.org/apps/#/accounts), listed under **multisig**. Click on the wallet/account to open it's show modal, then click **Copy** by the account name and address/public key to copy it out. -1. Use BTCLI to transfer testnet TAO to the mutlisig wallet. - 1. Run `btcli wallet transfer`. - 1. Provide the multisig wallet's coldkey public key. - 1. Specify the amount. It's recommended to do a small transfer first to confirm the address, even with testnet TAO. +1. Find the multisig wallet's coldkey public key on the [accounts page](https://polkadot.js.org/apps/#/accounts), listed under **multisig**. Click on the wallet/account to open it's show modal, then click **Copy** by the account name and address/public key to copy it out. + +1. Use BTCLI to transfer testnet TAO to the multisig wallet. + 1. Run `btcli wallet transfer`. + 1. Provide the multisig wallet's coldkey public key. + 1. Specify the amount. It's recommended to do a small transfer first to confirm the address, even with testnet TAO. 1. To confirm the transfer, view the multisig wallet in the accounts page or the BTCLI dashboard. It should show the TAO from the transfer almost immediately. -## Transfer TAO from the multisig +## Transfer TAO from the multisig Let's try executing a sensitive operation with the multisig wallet: transferring TAO. Choose any destination wallet that you control. It can be one of the signatories. Note this wallet's balance, so you can confirm the transaction's ultimate success by seeing the increase in that balance. -To transfer TAO out of the multisig wallet requires a multisig transaction, meaning it must be approved by threshold $M$ of the $N$ total signatories. First, one wallet must propose the transaction. This proposal will exist on the blockchain where it can be signed by other signatories, which will execute the proposed transaction. +Transferring TAO out of the multisig wallet requires a multisig transaction, meaning it must be approved by threshold $M$ of the $N$ total signatories. First, one wallet must propose the transaction. This proposal will exist on the blockchain where it can be signed by other signatories, which will execute the proposed transaction. Note that the signatory that proposes a multisig action must make a deposit that will be returned upon approval or rejection of the transaction, the amount of which will be displayed in the multisig transaction modal. The wallet that will propose the multisig transaction must have a balance above this amount. @@ -100,33 +132,36 @@ Note that the signatory that proposes a multisig action must make a deposit that 1. In the Polkadot-JS web app, click the **Developer** tab and select Extrinsics, or navigate to the extrinsics page at [polkadot.js.org/apps/#/extrinsics](https://polkadot.js.org/apps/#/extrinsics). 1. Under **using the selected account**, select the multisig wallet. Note that the multisig wallet's TAO balance is displayed. 1. Under **submit the following extrinsic**: - 1. Select the `balances` module (from the lefthand dropdown menu). - 1. Select `transferKeepAlive`. + 1. Select the `balances` module (from the lefthand dropdown menu). + 1. Then, select `transferKeepAlive` from the righthand menu. 1. Under **Id: AccountId**, paste in the coldkey public key for the destination wallet. -1. Under **value**, put the amount of TAO to transfer. This amount must be available in the multisig wallet. -A wallet with a test TAO balance sufficient to pay the fee +1. Under **value**, put the amount of TAO to transfer. This amount must be available in the multisig wallet. A wallet with a test TAO balance sufficient to pay the fee. + :::info + The `value` field accepts amounts in RAO, the smallest unit of TAO (`1 rao = 10⁻⁹ TAO`). + For example, to transfer `2 TAO`, you must set `value` to `2,000,000,000`. + ::: 1. Copy out the **encoded call data**, which other signatories will need to sign the transaction. 1. Copy out the **encoded call hash**, which other signatories will need to confirm the details of the transaction. 1. Copy out the **link** under **encoding details**, which will allow other signatories to view the details of the transaction and confirm it against the encoded call hash. 1. Click **Submit Transaction**. 1. In the **authorize transaction** modal, select the signatory. - Note that this should be selected as a **multisig signatory**, not as a **proxy account**. You may need to toggle the **Use a proxy for this call** switch to **Don't use a proxy for this call**. + Note that this should be selected as a **multisig signatory**, not as a **proxy account**. You may need to toggle the **Use a proxy for this call** switch to **Don't use a proxy for this call**. -1. Select **Multisig approval with hash (non-final approval)**, not **Multisig message with call (for final approval)**. +1. Click the toggle to select **Multisig approval with hash (non-final approval)** instead of **Multisig message with call (for final approval)**. 1. Click **Sign and Submit**. ### Approve the transaction 1. Return to the [accounts page](https://polkadot.js.org/apps/#/accounts). -1. Find the multisig wallet, noting that it should now display a clickable element for **view pending approvals**. You can also click on the wallets three dot menu and select **Multisig approvals**. +1. Find the multisig wallet; the wallet should now display a clickable element to **View pending approvals**. You can also click on the wallet's menu icon and select **Multisig approvals**. 1. The approval modal will display the **encoded call hash**, allowing signatories to confirm the identity of the proposed transaction, but it does not display details about the call. - To view details of the call, visit the link provided under **encoding details** when creating the transaction proposal. + To view details of the call, visit the link provided under **encoding details** when creating the transaction proposal. - :::caution - Confirm that the **call hash** in the details link matches the **call hash** in the transaction you are approving. This is the only way to be certain you are approving the correct transaction. - ::: + :::caution + Confirm that the **call hash** in the details link matches the **call hash** in the transaction you are approving. This is the only way to be certain you are approving the correct transaction. + ::: 1. Select the approving signatory, which cannot be the signatory who proposed the transaction. 1. If you are the final approver, enter the **encoded call data**, which was provided when the transaction was created, and is displayed at the top of the page at the **encoding details** link. @@ -136,4 +171,4 @@ A wallet with a test TAO balance sufficient to pay the fee ### Confirm success -Check the multisig wallet's balance, which should have decreased by the transfer amount, and the destination wallet, which should have increased. \ No newline at end of file +Check the multisig wallet's balance, which should have decreased by the transfer amount, and the destination wallet, which should have increased. diff --git a/docs/keys/proxies/index.md b/docs/keys/proxies/index.md new file mode 100644 index 0000000000..6f916958ca --- /dev/null +++ b/docs/keys/proxies/index.md @@ -0,0 +1,113 @@ +--- +title: "Proxies: Overview" +--- + +# Proxies: Overview + +This page introduces the theory and use of proxy wallets for enhanced security in Bittensor. + +See [Working with Proxies](./proxies/working-with-proxies) + +## Introduction: What is a proxy? + +Proxies allow one wallet to perform Bittensor operations on behalf of another. Used correctly, this allows you to add a strong layer of additional protection for your most important wallets and the valuable assets they control, such as large TAO or alpha holdings, or subnet ownership. Proxy relationships are useful both for one person managing their own coldkey security, and also for allowing one person to on behalf of another person or an organization. + +The private key and seed phrase for a highly valuable wallet's coldkey should be kept offline as much as possible, and only used via a dedicated, highly secure [coldkey workstation](../coldkey-hotkey-security.md). By allowing one coldkey to serve as a *proxy* or stand-in for another, the "real account" or "safe wallet", we add an additional layer of security for the safe wallet by leaving it in cold storage and using the proxy instead. + +### Common use cases + +Proxies are useful in many situations where the permissions of one coldkey should be gated behind another level of security: + +- **Staking operations**: Keep your coldkey secure in cold storage while using a proxy to manage staking operations. + + See [Staking with a Proxy](../../keys/proxies/staking-with-proxy.md). +- **Operational delegation**: run subnet operations tasks like setting hyperparameters from a designated operations wallet, allowing the owner wallet to remain in maximum-security deep storage. +- **Least-privilege permissions**: allow an employee or other designated operoator to perform a constrained set of calls on a project-owned wallet. + +### Scope and Delays + +The power of proxies as a security tool comes from the two ways proxies can be limited: in the scope of their permissions, and by requiring a delay with announcement before they can perform operations. It's critical to note that without using these constraints properly, proxies don't necessarily give any security benefit. + +- The proxy can be constrained to specific operations. The permission scope is determined by the `ProxyType` call filter. +- The proxy can be constrained by a **delay** with a public **announcement**, giving the safe wallet holder time to reject a call made by they proxy (for example, if a key has been compromised). + + + + + +### Terminology and parameters + +- Safe wallet/real account: The wallet/account being protected by the proxy relationship. +- Proxy wallet/account: The account with access to tokens in the real account and allowed to perform certain actions for the real account. +- Pure Proxy: A keyless stand-in wallet controlled by the real accountused primarily +- ProxyType: Optional call filter that restricts which calls can be made by the delegate account. +- Delay/announcement: Optional time-lock period (in blocks) before a proxy action can be executed. A delay of `0` means the proxy can be used immediately without announcements. A non-zero delay requires the delegate to announce calls first, wait for the delay period to pass, then execute them, giving the real account time to review and reject unwanted operations. + +A proxy relationship begins when the _real account/safe wallet_ creates a proxy entry, which specifies or creates the _delegate account_, the allowed `ProxyType`, and an optional delay. Once this entry exists, the delegate can execute permitted calls on behalf of the real account using the `proxy(real, forceProxyType, call)` extrinsic. + +If the proxy entry includes a non-zero delay, the delegate cannot execute the call immediately. Instead, they must first announce the intended action and wait for the delay period to pass. During this waiting window, the delegator has the ability to reject the announcement, effectively blocking the call. The delegate can also remove a call they previously announced and return the deposit. + +The real account always retains full control over the relationship. It can revoke a proxy’s access to their proxy operations at any time by removing the proxy entry, immediately disabling the delegate’s ability to act on its behalf. + +:::note proxies vs pure proxies +*Proxies*, which 'stand in' for a real account by initiating transactions on its behalf, must not be confused with *pure proxies*, which 'stand-in' for the real account in a reverse relationship, where the real account can initiate transactions on behalf of the pure proxy. Pure proxies are primarily designed to be used with multi-sig wallets. + +See also: + +- [Pure proxies](../keys/proxies/pure-proxies) +- [Multi-sig wallets](../keys/multisig) +- [Polkadot.js Substrate Proxy Docs](https://wiki.polkadot.com/learn/learn-proxies/) +::: + + +## `ProxyType` + +This defines what the proxy is allowed to do on behalf of the real account. It describes the capabilities of that proxy (e.g., staking-only, transfer-only, registration-only, etc.). + +The following table shows the available `ProxyType` options and their descriptions: + +| `ProxyType` | Description | +| ------------------------ | ----------------------------------------------------------------------------------- | +| `Any` | Grants full permissions to execute any call on behalf of the real account. This is the most permissive `ProxyType`; use with caution. | +| `Owner` | Allows subnet identity and settings management. Permitted operations: AdminUtils calls (except `sudo_set_sn_owner_hotkey`), `set_subnet_identity`, `update_symbol`. | +| `NonCritical` | Allows all operations except critical ones that could harm the account. Prohibited operations: `dissolve_network`, `root_register`, `burned_register`, Sudo calls. | +| `NonTransfer` | Allows all operations except token transfers. Prohibited operations: all Balances module calls, `transfer_stake`, `schedule_swap_coldkey`, `swap_coldkey`. | +| `NonFungible` | Allows all operations except token-related operations and registrations. Prohibited operations: all Balances module calls, all staking operations (`add_stake`, `remove_stake`, `unstake_all`, `swap_stake`, `move_stake`, `transfer_stake`), registration operations (`burned_register`, `root_register`), key swap operations (`schedule_swap_coldkey`, `swap_coldkey`, `swap_hotkey`). | +| `Staking` | Allows only staking-related operations: `add_stake`, `add_stake_limit`, `remove_stake`, `remove_stake_limit`, `remove_stake_full_limit`, `unstake_all`, `unstake_all_alpha`, `swap_stake`, `swap_stake_limit`, `move_stake`. | +| `Registration` | Allows only neuron registration operations: `burned_register`, `register`. | +| `Transfer` | Allows only token transfer operations: `transfer_keep_alive`, `transfer_allow_death`, `transfer_all`, `transfer_stake`. | +| `SmallTransfer` | Allows only small token transfers below 0.5 TAO. Permitted operations: `transfer_keep_alive`, `transfer_allow_death` (if value < 0.5 TAO), `transfer_stake` (if alpha_amount < 0.5 TAO). | +| `ChildKeys` | Allows only child key management operations: `set_children`, `set_childkey_take`. | +| `SudoUncheckedSetCode` | Allows only runtime code updates: `sudo_unchecked_weight` with inner call `System::set_code`. | +| `SwapHotkey` | Allows only hotkey swap operations: `swap_hotkey`. | +| `SubnetLeaseBeneficiary` | Allows subnet management and configuration operations: `start_call`, multiple `AdminUtils.sudo_set_*` calls for subnet parameters, network settings, weights, alpha values, etc. | +| `RootClaim` | Allows only root claim operations: `claim_root`. | + + + +## Best practices for using proxies + +When setting up and using proxies, it's important to follow practices that reduce security risks and operational overhead. The following guidelines highlight how to map permissions correctly, manage delays, and keep accounts secure while making proxy usage efficient: + +- Map your operational needs to a minimal `ProxyType`. If a type seems overly broad, consider whether a more restrictive variant exists. +- Use non-zero delays for high-risk actions; monitor announcements. +- Track deposits and limits; batch or clear announcements to avoid dangling deposits. +- Favor maximum security over convenience when protecting your real account coldkey, using a more convenient but less protected mode of access to your proxy wallet for day for operations. + +### Choosing the Right `ProxyType` + +When setting up proxies, always follow the principle of least privilege. Choose the narrowest `ProxyType` that covers the intended actions instead of defaulting to broad permissions. For example: + +- Operational tasks: `Staking`, `Registration`, `ChildKeys`, `SwapHotkey`. +- Funds movement: `Transfer` or `SmallTransfer` (with per-transfer limit). +- Subnet management: `Owner` (for identity and settings), `SubnetLeaseBeneficiary` (for leased subnets). +- Root claims: `RootClaim`. + +Only use the unrestricted `Any` type when no other option fits. If a proxy call fails with `proxy.Unproxyable` or `system.CallFiltered`, it usually means the selected `ProxyType` doesn't permit that call. In such cases, switch to a more suitable type or create a separate proxy with proper scope. + +### Proxy Usage Limits + +To ensure scalability and prevent abuse, proxy usage is subject to certain limits as shown: + +- **`MaxProxies`**: This refers to the maximum number of delegate accounts that can be linked to a single real account. Each account can register up to 20 proxies in total. See [source code: MaxProxies configuration](https://github.com/opentensor/subtensor/blob/main/runtime/src/lib.rs#L670). +- **`MaxPending`**: This refers to the maximum number of pending announcements that a delegate account can have. This limit helps prevent excessive queuing. Each account can have up to 75 pending announcements at a time. See [source code: MaxPending configuration](https://github.com/opentensor/subtensor/blob/main/runtime/src/lib.rs#L671). diff --git a/docs/keys/proxies/pure-proxies.md b/docs/keys/proxies/pure-proxies.md new file mode 100644 index 0000000000..66bf33c6ed --- /dev/null +++ b/docs/keys/proxies/pure-proxies.md @@ -0,0 +1,481 @@ +--- +title: "Understanding Pure Proxies" +toc_max_heading_level: 2 +--- + +# Understanding Pure Proxies + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +import { SdkVersion } from "../../sdk/_sdk-version.mdx"; + +This page covers creating a pure proxy and executing a call using a pure proxy. The primary use case for pure proxies is constructing multisignature wallets (multisigs) with swappable members. For most other applications requiring wallet indirection, regular proxy wallets are the correct solution. + +See: +- [Proxies Overview](./) +- [Working with Proxies](./working-with-proxies) +- [Secure a Coldkey with a Multisig Wallet](../multisig) + +## Overview of pure proxies + +Pure proxies are **keyless, non-deterministic accounts** that are created fresh using the `createPure` extrinsic. They represent a unique approach to account delegation where: + +- The proxy account has **no private key** and cannot sign transactions independently +- The proxy can **only act through its delegator**—all operations must be initiated by the delegator +- The account is **completely isolated** and cannot escalate its own permissions + +Pure proxies are unlike standard proxies, where the proxy can access the real account's funds to execute calls on their behalf. A pure proxy account must hold its own funds, while the spawner account acts as an _Any proxy_ for it, signing and authorizing transactions on the proxy's behalf. + +It is critical to understand that pure proxies do not offer the security advantage of regular proxy wallets, which is to allow a single, less sensitive wallet to perform operations on behalf of a more valuable wallet, allowing the more sensitive wallet to remain protected behind more stringent access security. Instead, the main application of pure proxies is to solve an operational problem posed by multisig wallets, as described below. + +### Transaction flow in pure proxies + +All transactions involving a pure proxy must be signed by the spawner account. Once signed, the transaction is executed on-chain as if it originated directly from the pure proxy. Unlike standard proxies, a pure proxy must hold its own funds to cover fees or transfers. The spawner then acts as an _Any proxy_, handling the signing and authorization of calls, but the balance used comes from the pure proxy's account. + +### Multisigs and Pure Proxies + +Multisignature wallets offer a unique security advantage (see [Secure a Coldkey with a Multisig Wallet](../multisig)). However, the unique mechanism that underlies them cryptographically presents an operational difficulty. A multisig address is deterministically derived from its members. If you create a 2-of-3 multisig with Alice, Bob, and Charlie, you get a specific address. Therefore, if Charlie leaves and Dave joins, you must create an entirely new multisig with a new address—then transfer all funds and update all references. + + +Pure proxies offer a workaround; instead of basing the multisig on people's coldkeys directly, you can base it off or pure proxies controlled by the members of a multisig, you can make **pure proxies** the members: + +``` +Multisig (Any 2 of 3 signatures required to sign transaction) +├── Pure Proxy A ← controlled by Alice +├── Pure Proxy B ← controlled by Bob +└── Pure Proxy C ← controlled by Charlie +``` + +When Charlie leaves and Dave joins: +1. Charlie transfers control of Pure Proxy C to Dave +2. Dave now controls Pure Proxy C, allowing him to co-sign transactions with either Alice or Bob. Charlie's key is now unable to co-sign. +3. **The multisig itself never changes**—same address, same members (the pure proxies) + +This approach means you never need to recreate the multisig or transfer funds when team members change. The pure proxy addresses remain constant; only who controls each pure proxy changes. + + +### Transferring control of a pure proxy + +You can transfer control of a pure proxy to a new account by: + +1. Adding the new account as an _Any_ type proxy for the pure proxy +2. Removing the old controller as proxy + +This is how you swap members in a multisig-of-pure-proxies setup: the outgoing member adds the incoming member as a proxy for their pure proxy, then removes themselves. See [source code: pure proxy account generation](https://github.com/opentensor/subtensor/blob/main/pallets/proxy/src/lib.rs#L827-L850). + + +## Prerequisites + +Before creating a pure proxy, ensure you have a spawner account that will initialize and control the pure proxy. + +## Create a pure proxy + +The `proxy::createPure` extrinsic creates a pure proxy. See [source code: `createPure` implementation](https://github.com/opentensor/subtensor/blob/main/pallets/proxy/src/lib.rs#L328-L360). + +Use this operation to generate a pure proxy account: + + + + + +```bash +btcli proxy create \ + --wallet.name WALLET_NAME \ + --proxy-type Any \ + --delay 0 \ + --index 0 +``` + +**Parameters:** +- `--wallet.name`: Your wallet name (the spawner account that will control the proxy) +- `--proxy-type`: The type of proxy (e.g., `Any`, `Staking`, `Transfer`, etc.) +- `--delay`: Optional delay in blocks (0 for immediate execution) +- `--index`: Disambiguation index for creating unique addresses (usually 0) + +**Example output:** +```console +Created pure '5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty' +from spawner '5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY' +with proxy type 'Any' with delay 0. + +Extrinsic hash: 0xcd5ded2dfc505152870610233532646f6ebdd930793fa82f999d9bda2b79c2b5 +Block: 1234567 +Extrinsic index: 2 +``` + +:::tip Save creation details +**Record the following values** from the output—you'll need them to kill the proxy later: +- Pure proxy address +- Block number (height) +- Extrinsic index +- The index value you used +- The proxy type you chose + +BTCLI will prompt you to save this to your address book for convenience. +::: + +**Save to address book:** +```bash +# Optionally add to your local address book +btcli config add-proxy \ + --name my-pure-proxy \ + --address 5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty \ + --proxy-type Any \ + --spawner 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY \ + --delay 0 +``` + + + + + + + +```python +import bittensor as bt +from bittensor.core.chain_data.proxy import ProxyType + +subtensor = bt.Subtensor() + +spawner = bt.Wallet(name="WALLET_NAME") + +response = subtensor.create_pure_proxy( + wallet=spawner, + proxy_type=ProxyType.Any, + delay=0, # delay in blocks + index=0, # the disambiguation index, leave as zero +) + +if response.success: + pure_account = response.data.get("pure_account") + spawner_address = response.data.get("spawner") + height = response.data.get("height") + ext_index = response.data.get("ext_index") + + print(f"✓ Pure proxy created!") + print(f" Pure proxy address: {pure_account}") + print(f" Spawner: {spawner_address}") + print(f" Block: {height}") + print(f" Extrinsic index: {ext_index}") +else: + print(f"✗ Failed: {response.message}") +``` + +:::tip + +- Record the block number and extrinsic index where the pure proxy was created. These values are required to kill the proxy. You can also retrieve the block height and extrinsic details by searching your transaction on the [Tao.app block explorer](https://www.tao.app/blocks). +- The `index` parameter is a disambiguation index/salt value (u16, range 0-65535) used to generate unique pure proxy addresses, used to disambiguate proxies that have identical parameters otherwise. This should generally be left as `0` unless you are creating batches of proxies. When creating multiple pure proxies with identical `proxy_type` and `delay`, different index values will produce different addresses. This is not a sequential counter—you can use any unique values (e.g., 0, 100, 7, 42) in any order. The index must be preserved as it's required for killing the pure proxy later. If creating multiple pure proxies in a single batch transaction, each must have a unique index value. +- The proxy type can be provided either by importing and using the `ProxyType` enum or by passing the proxy type as a string. For available proxy types and their permissions, see [Proxy Types](https://docs.learnbittensor.org/keys/proxies#types-of-proxies). + ::: + + + + +1. In the navbar menu, navigate to **Developers** → **Extrinsics**. +2. Under “using the selected account”, pick the delegator account. +3. Under “submit the following extrinsic”, choose the `proxy` pallet and call `createPure(proxyType, delay, index)`. +4. Fill the parameters: + - `proxyType`: select `Any`; this grants full permissions to the proxy, including the ability to make transfers and kill the proxy. + - `delay`: optionally, include a delay in blocks. The time-lock period in blocks. A delay of `0` means immediate execution. A non-zero value requires announcements before execution. + - `index`: a disambiguation index/salt value (0-65535) used to generate unique pure proxy addresses. This should generally be left as `0` unless you are creating batches of proxies. When creating multiple pure proxies with the same `proxyType` and `delay`, use different index values to generate different addresses. This is not a sequential counter—you can use any unique values (e.g., 0, 100, 7, 42). The index must be preserved as it's required for killing the pure proxy later. +5. Click **Submit Transaction** and sign with the _delegator_ account. + +### Retrieve and import the proxy account + +1. After creating the pure proxy, go to **Network** → **Explorer** in the Polkadot-JS web app. +2. On the **recent events** panel, find the `proxy.PureCreated` event from the transaction. This event shows details of the proxy created including the address of the newly spawned account. +3. Copy the address of the proxy account. +4. Go to **Accounts** → **Accounts**. +5. Click **+ Proxied**. +6. Paste the proxy account address in the **proxied account** field and then provide a name for the pure proxy account. + +Importing the proxy account makes it selectable in the Polkadot-JS web app UI. + +:::tip + +- Record the block number and extrinsic index where the pure proxy was created. These values are required to kill the proxy. +- When creating a proxy on mainnet, you can check block details on the [Tao.app block explorer page](https://www.tao.app/blocks). + +::: + + + +Creating a pure proxy adds the spawner account as the first delegate for that proxy. Additional delegates can also be added by [registering new proxy entries](working-with-proxies.md#add-a-proxy) from the pure proxy account, each specifying the delegate account, proxy type, etc. + +## Executing calls via a pure proxy + +When executing a pure proxy, the proxy account initiates the transaction, but it is signed and authorized by the spawner account. In practice, the proxy account is treated as the _real account_ during execution. + +The following example shows how to execute a transfer call using a pure proxy. To do this: + + + + + +With pure proxies in BTCLI, use the `--proxy` flag with the **pure proxy address** as the value, and sign with the **spawner wallet**: + +```bash +# Example: Transfer funds from the pure proxy +btcli wallet transfer \ + --wallet.name spawner_wallet \ + --proxy PURE_PROXY_ADDRESS \ + --dest RECIPIENT_ADDRESS \ + --amount 1.0 +``` + +**How it works:** +- `--wallet.name spawner_wallet`: The spawner wallet signs the transaction +- `--proxy PURE_PROXY_ADDRESS`: The pure proxy account acts as the origin +- The transfer will appear to come from the pure proxy address +- Funds are deducted from the pure proxy's balance + +**Using saved proxies:** +If you saved the pure proxy to your address book: + +```bash +btcli wallet transfer \ + --wallet.name spawner_wallet \ + --proxy my-pure-proxy \ + --dest RECIPIENT_ADDRESS \ + --amount 1.0 +``` + +:::warning Pure proxy must be funded +Ensure the pure proxy account has enough funds to cover both the transfer amount and transaction fees. Transfer funds to the pure proxy first using a regular transfer. +::: + +**Other operations through pure proxies:** +```bash +# Add stake through pure proxy +btcli stake add \ + --wallet.name spawner_wallet \ + --proxy PURE_PROXY_ADDRESS \ + --netuid 0 \ + --amount 10.0 + +# Remove stake through pure proxy +btcli stake remove \ + --wallet.name spawner_wallet \ + --proxy PURE_PROXY_ADDRESS \ + --netuid 0 \ + --amount 5.0 +``` + + + + + +```python +import bittensor as bt +from bittensor.core.chain_data.proxy import ProxyType +from bittensor.core.extrinsics.pallets import Balances + +subtensor = bt.Subtensor() + +proxy_account = "PROXY_ACCOUNT_ADDRESS" # address of the proxy account +spawner_address = bt.Wallet(name="WALLET_NAME") # name of the signer/spawner wallet +recipient_wallet = "RECIPIENT_WALLET" + +# Create a transfer call +transfer_amount = bt.Balance.from_tao(1.0) +transfer_call = Balances(subtensor).transfer_keep_alive( + dest=recipient_wallet, + value=transfer_amount.rao, +) + +# Execute the call through the proxy +response = subtensor.proxy( + wallet=spawner_address, # spawner signs the transaction + real_account_ss58=proxy_account, # proxy acts as real account + force_proxy_type=ProxyType.Any, + call=transfer_call, +) + +if response.success: + print(f"✓ Transfer executed through proxy!") + print(f" Transferred {transfer_amount} from {proxy_account[:10]}...") +else: + print(f"✗ Failed: {response.message}") +``` + +:::info Building a call + +Before executing a proxy through the SDK, you must first build the inner call that represents the action you want the chain—or proxy—to perform. This can be done by creating a generic call manually (for example using `subtensor.compose_call()`) or by using the SDK’s built-in call builders from the relevant pallet. + +To build a call using the SDK call builder, import the relevant pallet class (e.g., `Proxy`, `Balances`, `SubtensorModule`, etc.) from `bittensor.core.extrinsics.pallets`, instantiate it with your subtensor instance, then call the method for the extrinsic you need. For example: + +```py +from bittensor.core.extrinsics.pallets import Proxy +from bittensor.core.extrinsics.pallets import Balances + +# using the Proxy pallet class +Proxy(subtensor).add_proxy(...) + +# using the Balances pallet class +Balances(subtensor).transfer_keep_alive(...) +``` + +::: + +:::warning +Ensure the pure proxy account holds enough funds to cover both the transfer and transaction fees. + +::: + + + + +1. Go to **Developer** → **Extrinsics**. +2. Under “using the selected account”, choose the spawner account—account that created the proxy. +3. Select the `proxy` pallet and choose `proxy(real, forceProxyType, call)`. +4. Fill the parameters: + - `real`: select the pure proxy account from the UI. + - `forceProxyType`: leave option unchecked. + - `call`: the call to be made by the delegate account. Fill the following parameters: + - Select the `balances` pallet and choose the `transferKeepAlive(dest, value)` extrinsic. + - `dest`: select the recipient account. + - `value`: input the amount to be transferred in RAO—1 TAO = 19RAO. +5. Click **Submit Transaction** and sign the transaction from the delegate account. + +:::info + +- After submitting the transaction, check the Polkadot.JS web app's **Explorer** page for a `balances.Transfer` event. Notice the sender is the pure proxy account. +- Ensure the pure proxy account holds enough funds to cover both the transfer and transaction fees. +::: + + + + + +## Kill a pure proxy + +Killing a pure proxy requires the proxy account address, the spawner account, and the proxy's complete creation details—the block height, extrinsic index, and the disambiguation index used during creation. Once executed, the pure proxy is permanently removed, and any funds remaining in the proxy account are lost. + +Pure proxies are killed using the `killPure` extrinsic as shown. See [source code: `killPure` implementation](https://github.com/opentensor/subtensor/blob/main/pallets/proxy/src/lib.rs#L380-L406): + +:::danger Permanent deletion +Killing a pure proxy permanently deletes the pure proxy account. **Any funds remaining in the account will be permanently lost.** Make sure to transfer all funds out before killing the proxy. + +BTCLI will prompt you for confirmation with the text "KILL" to proceed. +::: + + + + + +```bash +btcli proxy kill \ + --wallet.name SPAWNER_WALLET \ + --height BLOCK_NUMBER \ + --ext-index EXTRINSIC_INDEX \ + --proxy-type Any \ + --index 0 \ + --spawner SPAWNER_ADDRESS +``` + +**Required Parameters:** +- `--wallet.name`: The spawner wallet that created the proxy +- `--height`: The block number where the pure proxy was created +- `--ext-index`: The extrinsic index of the creation transaction +- `--proxy-type`: Must match the type used when creating (e.g., `Any`) +- `--index`: Must match the index used when creating (usually `0`) +- `--spawner`: The SS58 address of the spawner account + +**Example:** + +Suppose we created a pure proxy and received output as follows: +```console + btcli proxy create \ + --wallet.name PracticeSafeWallet \ + --proxy-type Transfer \ + --delay 0 \ + --index 0 + +This will create a Pure Proxy of type Transfer. Do you want to proceed? [y/n]: y +Enter your password: +Decrypting... +l✅ Your extrinsic has been included as 5960138-7 +Created pure '5DvEUipraHsk26renzART8NKuskd3yacsJq64wKHRGTpncCn' from spawner '5CS9x5NsPHpb2THeS92zBYCSSk4MFoQjjx76DB8bEzeJTTSt' with proxy type 'Transfer' with delay 0. +``` +We use the block number/extrinsic index as follows when identifying the pure proxy to kill: +```bash +btcli proxy kill \ + --wallet.name PracticeSafeWallet \ + --proxy-type Transfer \ + --spawner 5CS9x5NsPHpb2THeS92zBYCSSk4MFoQjjx76DB8bEzeJTTSt + +Enter the block number at which the proxy was created: 5960138 +Enter the extrinsic index of the `btcli proxy create` event.: 5960138 + +This will kill a Pure Proxy account of type Transfer. +All access to this account will be lost. Any funds held in it will be inaccessible.To proceed, enter KILL: KILL +Enter your password: +Decrypting... +✅Success! +``` + + + + +```python +import bittensor as bt +from bittensor.core.chain_data.proxy import ProxyType + +subtensor = bt.Subtensor() + +spawner_address = bt.Wallet(name="WALLET_NAME") # signer/spawner + +proxy_address = "PROXY_ADDRESS" +proxy_type = ProxyType.Any +index = 0 +height = "BLOCK_HEIGHT" +ext_index = "EXTRINSIC_INDEX" + +# Kill the pure proxy +response = subtensor.kill_pure_proxy( + wallet=spawner_address, + pure_proxy_ss58=proxy_address, + spawner=spawner_address.coldkeypub.ss58_address, # Valid only when the spawner account signs the extrinsic + proxy_type=proxy_type, + index=index, # the disambiguation index/salt value used during creation (must match exactly) + height=height, # the block height where the proxy was created + ext_index=ext_index, # the extrinsic index of the `Proxy.PureCreated` transaction +) + +if response.success: + print("✓ Pure proxy killed successfully!") +else: + print(f"✗ Failed: {response.message}") +``` + +:::info Parameter requirements +- The `index`, `proxy_type`, and `delay` (from creation) must exactly match those used when creating the pure proxy. +- `height` and `ext_index` uniquely identify the creation transaction. Together, they specify exactly when and where in the blockchain the pure proxy was created. These values are returned in the `PureCreated` event from `create_pure_proxy()`. +::: + + + + +1. Go to **Developer** → **Extrinsics**. +2. Under “using the selected account”, choose the pure proxy account. +3. Select the `proxy` pallet and choose `killPure(spawner, proxyType, index, height, extIndex)`. +4. Fill the parameters: + - `spawner`: select the account that created the proxy from the UI. + - `proxyType`: select the proxy type (must match the value used during creation). + - `index`: enter the disambiguation index/salt value used during creation (typically `0` unless you created multiple pure proxies with identical parameters). Must match exactly the index used in `createPure`. + - `height`: input the block number that the proxy was created at. + - `extIndex`: input the extrinsic index of the `proxy.PureCreated` event. +5. Click **Submit Transaction** and sign the transaction from the delegate account. + +Ensure that all parameters are correct before making this call. The call will fail with a `Proxy.NoPermission` error if any parameter is invalid or if the origin account lacks permission to perform the action. + + + + + +## Troubleshooting + +- `Token.FundsUnavailable`: Ensure that the pure proxy account has been funded and has enough funds to cover the transfer. +- `proxy.NotProxy`: Ensure you're executing the pure proxy correctly—from the creator account and referencing the pure proxy account as `real`. See [source code: `NotProxy` error](https://github.com/opentensor/subtensor/blob/main/pallets/proxy/src/lib.rs#L735). +- `Proxy.NoPermission`: The `killPure` call is not permitted under the current. See [source code: `NoPermission` error](https://github.com/opentensor/subtensor/blob/main/pallets/proxy/src/lib.rs#L741). +- `system.CallFiltered`: The call is not permitted under the current `ProxyType`. diff --git a/docs/keys/proxies/staking-with-proxy.md b/docs/keys/proxies/staking-with-proxy.md new file mode 100644 index 0000000000..c32a395fb6 --- /dev/null +++ b/docs/keys/proxies/staking-with-proxy.md @@ -0,0 +1,676 @@ +--- +title: "Staking with a Proxy" +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +import { SdkVersion } from "../../sdk/_sdk-version.mdx"; + +# Staking with a Proxy + +This guide demonstrates how to use proxy accounts to perform staking operations on the Bittensor network. Using a proxy for staking allows you to keep your high-value coldkey secure in cold storage while using a hot wallet to manage day-to-day staking operations. + +See also: + +- [Proxies: Overview](../../keys/proxies/): Learn about proxy types and how proxies work +- [Working with Proxies](working-with-proxies): Create and manage standard proxies +- [Managing Stake with SDK](../../staking-and-delegation/managing-stake-sdk): General staking operations with the Python SDK +- [Managing Stake with BTCLI](../../staking-and-delegation/managing-stake-btcli): General staking operations with the CLI +- [Working with Blockchain Calls](../../sdk/call): Advanced guide to GenericCall and CallBuilder for composing blockchain transactions + + +## Overview + +A staking proxy is a specialized proxy type that grants limited permissions specifically for staking-related operations. The `Staking` proxy type allows the delegate to: + +- Add stake to validator hotkeys +- Remove stake from validator hotkeys +- Unstake tokens +- Move stake between validators and subnets +- Swap stake between validators + +The `Staking` proxy type **does not** allow transfers, registrations, or other non-staking operations, providing a secure way to delegate only staking responsibilities. + +:::tip Why use a staking proxy? +Using a staking proxy lets you keep your coldkey offline for maximum security while still being able to actively manage your staking positions. This is particularly useful for: +- Validators who need to adjust stake frequently +- Delegators who want to rebalance their stake distribution +- Users who want operational flexibility without exposing their coldkey +::: + +## Prerequisites + +Before setting up a staking proxy, ensure you have: + +- **Coldkey wallet**: Your main account that holds TAO and will authorize the proxy relationship +- **Proxy wallet**: A separate wallet that will act as the delegate and perform staking operations +- **Sufficient TAO balance**: In the coldkey to cover: + - Staking operations + - Proxy deposit (refundable when the proxy is removed) + - Transaction fees + +## Create a Staking Proxy + +First, establish the proxy relationship by authorizing the proxy wallet to perform staking operations on behalf of your coldkey. You'll need to enter the password for each wallet. + + + + +```bash +btcli proxy add \ + --wallet.name PracticeKey \ + --delegate PROXY_WALLET_SS58_ADDRESS \ + --proxy-type Staking \ + --delay 0 +``` + +**Example with actual address:** +```bash +btcli proxy add \ + --wallet.name my_coldkey \ + --delegate 5CZmB94iEG4Ld7JkejAWToAw7NKEfV3YZHX7FYaqPGh7isXe \ + --proxy-type Staking \ + --delay 0 +``` + +After creating the proxy, you'll be prompted to save it to your address book for easy reference: + +```bash +# Save to address book when prompted, or manually: +btcli config add-proxy \ + --name staking-proxy \ + --address 5CZmB94iEG4Ld7JkejAWToAw7NKEfV3YZHX7FYaqPGh7isXe \ + --proxy-type Staking \ + --spawner YOUR_COLDKEY_ADDRESS \ + --delay 0 +``` + + + + + + + +```python +import bittensor +from bittensor.core.chain_data.proxy import ProxyType + +# Initialize connection to the network +subtensor = bittensor.Subtensor('test') + +# Load your coldkey (main account that holds the TAO) +coldkey_wallet = bittensor.Wallet(name="PracticeKey!") + +# Load your proxy wallet (delegate that will perform operations) +proxy_wallet = bittensor.Wallet(name="PracticeProxy") + +# Create the staking proxy relationship +response = subtensor.add_proxy( + wallet=coldkey_wallet, # Signs this transaction (authorizes the proxy) + delegate_ss58=proxy_wallet.coldkey.ss58_address, # The proxy wallet address + proxy_type=ProxyType.Staking, # Grant only staking permissions + delay=0, # No delay (immediate execution) +) + +print(response) +``` + + + + +Example output: +```console +Enter your password: +Decrypting... +Enter your password: +Decrypting... +ExtrinsicResponse: + success: True + message: Success + extrinsic_function: add_proxy_extrinsic + extrinsic: {'account_id': '0xb0fec20486c9cf366c90bf1c93ad1bbc6b50596653f8832ee6c40483aa73d851', 'signature': {'Sr25519': '0xb06d00647f20259df5e6e67ac78dd4cc96710176b798b605794890521868a122b8cc434f6d8841204de9cbedecaaedd84d0444ae1b644cb217629b0be3f7958c'}, 'call_function': 'add_proxy', 'call_module': 'Proxy', 'call_args': {'delegate': '5CZmB94iEG4Ld7JkejAWToAw7NKEfV3YZHX7FYaqPGh7isXe', 'proxy_type': 'Staking', 'delay': 0}, 'nonce': 653, 'era': {'period': 128, 'current': 5910360}, 'tip': 0, 'asset_id': {'tip': 0, 'asset_id': None}, 'mode': 'Disabled', 'signature_version': 1, 'address': '0xb0fec20486c9cf366c90bf1c93ad1bbc6b50596653f8832ee6c40483aa73d851', 'call': {'call_function': 'add_proxy', 'call_module': 'Proxy', 'call_args': {'delegate': '5CZmB94iEG4Ld7JkejAWToAw7NKEfV3YZHX7FYaqPGh7isXe', 'proxy_type': 'Staking', 'delay': 0}}} + extrinsic_fee: τ0.000013270 + extrinsic_receipt: ExtrinsicReceipt + transaction_tao_fee: None + transaction_alpha_fee: None + data: None + error: None +``` + +:::info Proxy deposit +Creating a proxy requires a deposit that is held as long as the proxy relationship exists. This deposit is returned when you remove the proxy. You can check current deposit requirements using `subtensor.get_proxy_constants()`. +::: + +## Transfer TAO to Proxy Wallet + +After creating the proxy relationship, transfer a small amount of TAO to the proxy wallet to cover transaction fees. The proxy wallet needs funds to sign and submit transactions on behalf of the coldkey: + + + + +```bash +btcli wallet transfer \ + --wallet.name my_coldkey \ + --dest PROXY_WALLET_SS58_ADDRESS \ + --amount 1.0 +``` + +**Example:** +```bash +btcli wallet transfer \ + --wallet.name PracticeKey \ + --dest 5CZmB94iEG4Ld7JkejAWToAw7NKEfV3YZHX7FYaqPGh7isXe \ + --amount 1.0 +``` + +This transfers 1 TAO to the proxy wallet to cover transaction fees for future staking operations. + + + + + +```python +import bittensor + +# Initialize connection to the network +subtensor = bittensor.Subtensor('test') + +# Load your main coldkey wallet +coldkey_wallet = bittensor.Wallet(name="PracticeKey!") + +# Load the proxy wallet (to get its address) +proxy = bittensor.Wallet(name='PracticeProxy') + +# Transfer TAO to the proxy wallet +# This covers transaction fees for proxy operations +response = subtensor.transfer( + wallet=coldkey_wallet, # Sending from coldkey + destination_ss58=proxy.coldkey.ss58_address, # Sending to proxy wallet + amount=bittensor.Balance.from_tao(1), # Transfer 1 TAO for fees + wait_for_inclusion=True, + wait_for_finalization=False, +) + +print(response) +``` + + + + +## Verify the Proxy + +Before performing staking operations, verify that the proxy relationship was created successfully: + + + + +View your locally saved proxies: + +```bash +btcli config proxies +``` + +This displays all proxies you've saved to your local address book. + +:::info On-chain verification +BTCLI does not currently provide a command to query on-chain proxy state directly. To verify the on-chain proxy relationship, use the SDK's `get_proxies_for_real_account()` method or query via Polkadot.js Apps (**Developer** → **Chain state** → **proxy.proxies**). +::: + + + + + +```python +import bittensor + +# Your coldkey SS58 address +real_account_ss58 = '5XyZ123...' # Your coldkey SS58 address + +subtensor = bittensor.Subtensor('test') + +# Get all proxies for your coldkey +proxies, deposit = subtensor.get_proxies_for_real_account( + real_account_ss58=real_account_ss58 +) + +if proxies: + print(f"✓ Found {len(proxies)} proxy relationship(s):") + for proxy in proxies: + print(f"\n Delegate: {proxy.delegate}") + print(f" Type: {proxy.proxy_type}") + print(f" Delay: {proxy.delay} blocks") + print(f"\nTotal deposit held: {deposit} RAO") +else: + print("✗ No proxies found for this account") +``` + + + + +Example output: +```console +✓ Found 1 proxy relationship(s): + + Delegate: 5CZmB94iEG4Ld7JkejAWToAw7NKEfV3YZHX7FYaqPGh7isXe + Type: Staking + Delay: 0 blocks + +Total deposit held: τ0.093000000 RAO +``` + +## Find Validators to Stake To + +Before staking, query the metagraph to find validators with the most stake. We'll find validators on subnet 0 (root network) and subnet 14: + + + + +View the metagraph for a subnet to find validators: + +```bash +# View subnet 0 (root network) metagraph +btcli subnets metagraph --netuid 0 + +# View subnet 14 metagraph +btcli subnets metagraph --netuid 14 +``` + +This displays a table showing all validators on the subnet, including their hotkeys, stake amounts, and other metrics. Look for validators with high stake amounts to delegate to. + +You can also use the wallet overview to see validators you're already staking to: + +```bash +btcli wallet overview --wallet.name my_coldkey +``` + + + + + +```python +import bittensor + +# Initialize connection to the network +subtensor = bittensor.Subtensor('test') + +# Get metagraph for subnet 0 (root network) +metagraph_subnet0 = subtensor.metagraph(netuid=0) + +# Find validator with most stake on subnet 0 +max_stake_idx = metagraph_subnet0.S.argmax() +subnet0_validator = metagraph_subnet0.hotkeys[max_stake_idx] +subnet0_stake = metagraph_subnet0.S[max_stake_idx] + +print(f"Subnet 0 - Top validator: {subnet0_validator}") +print(f"Subnet 0 - Current stake: {subnet0_stake} TAO") + +# Get metagraph for subnet 14 +metagraph_subnet14 = subtensor.metagraph(netuid=14) + +# Find validator with most stake on subnet 14 +max_stake_idx_14 = metagraph_subnet14.S.argmax() +subnet14_validator = metagraph_subnet14.hotkeys[max_stake_idx_14] +subnet14_stake = metagraph_subnet14.S[max_stake_idx_14] + +print(f"\nSubnet 14 - Top validator: {subnet14_validator}") +print(f"Subnet 14 - Current stake: {subnet14_stake} TAO") +``` + + + + +Example output: + +```console +Subnet 0 - Top validator: 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY +Subnet 0 - Current stake: 125000.5 TAO + +Subnet 14 - Top validator: 5HEo565WAy4Dbq3Sv271SAi7syBSofyfhhwRNjFNSM2gP9M2 +Subnet 14 - Current stake: 89432.3 TAO +``` + +:::tip Metagraph Properties +- **`S`**: Stake tensor - contains the stake amounts for all neurons in the subnet +- **`hotkeys`**: List of hotkey addresses for all neurons in the subnet +- **`argmax()`**: Returns the index of the neuron with the maximum stake +::: + +## Add Stake with Proxy + +Add stake to a validator on behalf of your coldkey using the proxy wallet. We'll stake to the top validator on subnet 0 that we found in the previous step: + + + + +```bash +btcli stake add \ + --wallet.name proxy_wallet \ + --proxy COLDKEY_SS58_ADDRESS \ + --netuid 0 \ + --hotkey VALIDATOR_HOTKEY \ + --amount 100.0 +``` + +**Example using saved proxy:** +```bash +# Using proxy address directly +btcli stake add \ + --wallet.name PracticeProxy \ + --proxy 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY \ + --netuid 0 \ + --hotkey 5HEo565WAy4Dbq3Sv271SAi7syBSofyfhhwRNjFNSM2gP9M2 \ + --amount 100.0 + +# Or using saved proxy name from address book +btcli stake add \ + --wallet.name PracticeProxy \ + --proxy my-coldkey \ + --netuid 0 \ + --hotkey 5HEo565WAy4Dbq3Sv271SAi7syBSofyfhhwRNjFNSM2gP9M2 \ + --amount 100.0 +``` + +**Parameters:** +- `--wallet.name`: The proxy wallet that signs the transaction +- `--proxy`: Your coldkey's SS58 address (or saved proxy name) +- `--netuid`: The subnet ID (0 for root network) +- `--hotkey`: The validator's hotkey address +- `--amount`: Amount of TAO to stake + +The stake will be added from your coldkey's balance to the specified validator. + + + + + +```python +import bittensor +from bittensor.core.chain_data.proxy import ProxyType +from bittensor.core.extrinsics.pallets import SubtensorModule + +# Your coldkey SS58 address (no private key needed) +real_account_ss58 = '5XyZ123...' # Your coldkey SS58 address + +# Initialize connection to the network +subtensor = bittensor.Subtensor('test') + +# Load proxy wallet +proxy = bittensor.Wallet(name='PracticeProxy') + +# Use the top validator from subnet 0 (from previous step) +subnet0_validator = '5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY' + +# Create the add_stake call using SubtensorModule +add_stake_call = SubtensorModule(subtensor).add_stake( + netuid=0, # Subnet to stake on (0 = root network) + hotkey=subnet0_validator, # Validator hotkey (top validator on subnet 0) + amount_staked=bittensor.Balance.from_tao(100).rao, # Amount to stake (in RAO) +) + +# Execute the call through the proxy +response = subtensor.proxy( + wallet=proxy, # Proxy wallet signs the transaction + real_account_ss58=real_account_ss58, # Real account (coldkey) being proxied + force_proxy_type=ProxyType.Staking, # Must match the proxy relationship + call=add_stake_call, +) + +print(response) +``` + + + + +**Parameters**: +- **`netuid`**: The subnet ID where you want to stake (0 = root network in this example) +- **`hotkey`**: The validator hotkey to stake to (subnet 0 top validator from metagraph) +- **`amount_staked`**: The amount to stake in RAO, use `Balance.from_tao(amount).rao` to convert +- **`force_proxy_type`**: Must match the proxy type that was set when creating the proxy relationship + + +Verify the stake was added: + + + + +```bash +# View overview of all your stakes +btcli wallet overview --wallet.name my_coldkey + +# Or list stakes specifically +btcli stake list --wallet.name my_coldkey +``` + + + + + +```python +import bittensor + +# Your coldkey SS58 address +real_account_ss58 = '5XyZ123...' # Your coldkey SS58 address + +subtensor = bittensor.Subtensor('test') + +# Get all stake for your coldkey +stake_info = subtensor.get_stake_info_for_coldkey( + coldkey_ss58=real_account_ss58 +) + +for stake in stake_info: + print(f"Subnet {stake.netuid}: {stake.stake} TAO staked to {stake.hotkey_ss58}") +``` + + + + +## Move Stake with Proxy + +Move stake between subnets using the proxy. We'll move stake from subnet 0 to subnet 14, using the top validators we found earlier: + + + + +```bash +btcli stake move \ + --wallet.name proxy_wallet \ + --proxy COLDKEY_SS58_ADDRESS \ + --origin-netuid 0 \ + --origin-hotkey SUBNET0_VALIDATOR \ + --dest-netuid 14 \ + --dest-hotkey SUBNET14_VALIDATOR \ + --amount 50.0 +``` + +**Example:** +```bash +btcli stake move \ + --wallet.name PracticeProxy \ + --proxy my-coldkey \ + --origin-netuid 0 \ + --origin-hotkey 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY \ + --dest-netuid 14 \ + --dest-hotkey 5HEo565WAy4Dbq3Sv271SAi7syBSofyfhhwRNjFNSM2gP9M2 \ + --amount 50.0 +``` + +**Parameters:** +- `--wallet.name`: The proxy wallet that signs the transaction +- `--proxy`: Your coldkey's SS58 address (or saved proxy name) +- `--origin-netuid`: Source subnet ID +- `--origin-hotkey`: Source validator hotkey +- `--dest-netuid`: Destination subnet ID +- `--dest-hotkey`: Destination validator hotkey +- `--amount`: Amount of TAO to move + + + + + +```python +import bittensor +from bittensor.core.chain_data.proxy import ProxyType +from bittensor.core.extrinsics.pallets import SubtensorModule + +# Your coldkey SS58 address (no private key needed) +real_account_ss58 = '5XyZ123...' # Your coldkey SS58 address + +# Initialize connection to the network +subtensor = bittensor.Subtensor('test') + +# Load proxy wallet +proxy = bittensor.Wallet(name='PracticeProxy') + +# Get the top validators from each subnet (from previous step) +subnet0_validator = '5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY' +subnet14_validator = '5HEo565WAy4Dbq3Sv271SAi7syBSofyfhhwRNjFNSM2gP9M2' + +# Create the move_stake call using SubtensorModule +move_stake_call = SubtensorModule(subtensor).move_stake( + origin_netuid=0, # Source subnet (0 = root network) + origin_hotkey_ss58=subnet0_validator, # Source validator hotkey + destination_netuid=14, # Destination subnet (subnet 14) + destination_hotkey_ss58=subnet14_validator, # Destination validator hotkey + alpha_amount=bittensor.Balance.from_tao(50), # Amount to move (in TAO) +) + +# Execute the call through the proxy +response = subtensor.proxy( + wallet=proxy, # Proxy wallet signs the transaction + real_account_ss58=real_account_ss58, # Real account (coldkey) being proxied + force_proxy_type=ProxyType.Staking, # Must match the proxy relationship + call=move_stake_call, +) + +print(response) +``` + + + + +**Parameters**: +- **`origin_netuid`**: The subnet ID where the stake is currently located (0 = root network in this example) +- **`origin_hotkey_ss58`**: The validator hotkey where the stake is currently staked (subnet 0 top validator) +- **`destination_netuid`**: The subnet ID where you want to move the stake (14 in this example) +- **`destination_hotkey_ss58`**: The validator hotkey where you want to stake (subnet 14 top validator) +- **`alpha_amount`**: The amount of stake to move, use `Balance.from_tao(amount)` (Balance object is automatically converted) +- **`force_proxy_type`**: Must match the proxy type that was set when creating the proxy relationship + + +Verify the stake was moved: + + + + +```bash +btcli wallet overview --wallet.name my_coldkey +``` + + + + + +```python +import bittensor + +# Your coldkey SS58 address +real_account_ss58 = '5XyZ123...' # Your coldkey SS58 address + +subtensor = bittensor.Subtensor('test') + +# Get all stake for your coldkey +stake_info = subtensor.get_stake_info_for_coldkey( + coldkey_ss58=real_account_ss58 +) + +for stake in stake_info: + print(f"Subnet {stake.netuid}: {stake.stake} TAO staked to {stake.hotkey_ss58}") +``` + + + + +## Remove Stake with Proxy + +Remove stake from a validator on behalf of your coldkey using the proxy wallet. We'll unstake from the subnet 14 validator: + + + + +```bash +btcli stake remove \ + --wallet.name proxy_wallet \ + --proxy COLDKEY_SS58_ADDRESS \ + --netuid 14 \ + --hotkey VALIDATOR_HOTKEY \ + --amount 25.0 +``` + +**Example:** +```bash +btcli stake remove \ + --wallet.name PracticeProxy \ + --proxy my-coldkey \ + --netuid 14 \ + --hotkey 5HEo565WAy4Dbq3Sv271SAi7syBSofyfhhwRNjFNSM2gP9M2 \ + --amount 25.0 +``` + +**Parameters:** +- `--wallet.name`: The proxy wallet that signs the transaction +- `--proxy`: Your coldkey's SS58 address (or saved proxy name) +- `--netuid`: The subnet ID to unstake from +- `--hotkey`: The validator's hotkey address +- `--amount`: Amount of TAO to unstake + +The unstaked TAO will be returned to your coldkey's free balance. + + + + + +```python +import bittensor +from bittensor.core.chain_data.proxy import ProxyType +from bittensor.core.extrinsics.pallets import SubtensorModule + +# Your coldkey SS58 address (no private key needed) +real_account_ss58 = '5XyZ123...' # Your coldkey SS58 address + +# Initialize connection to the network +subtensor = bittensor.Subtensor('test') + +# Load proxy wallet +proxy = bittensor.Wallet(name='PracticeProxy') + +# Use the top validator from subnet 14 (from earlier step) +subnet14_validator = '5HEo565WAy4Dbq3Sv271SAi7syBSofyfhhwRNjFNSM2gP9M2' + +# Create the remove_stake call using SubtensorModule +remove_stake_call = SubtensorModule(subtensor).remove_stake( + netuid=14, # Subnet to unstake from (subnet 14) + hotkey=subnet14_validator, # Validator hotkey (top validator on subnet 14) + amount_unstaked=bittensor.Balance.from_tao(25).rao, # Amount to unstake (in RAO) +) + +# Execute the call through the proxy +response = subtensor.proxy( + wallet=proxy, # Proxy wallet signs the transaction + real_account_ss58=real_account_ss58, # Real account (coldkey) being proxied + force_proxy_type=ProxyType.Staking, # Must match the proxy relationship + call=remove_stake_call, +) + +print(response) +``` + + + + +:::tip Important Parameters +- **`netuid`**: The subnet ID where you want to unstake from (14 in this example) +- **`hotkey`**: The validator hotkey to unstake from (subnet 14 top validator from metagraph) +- **`amount_unstaked`**: The amount to unstake in RAO, use `Balance.from_tao(amount).rao` to convert +- **`force_proxy_type`**: Must match the proxy type that was set when creating the proxy relationship +::: diff --git a/docs/keys/proxies/working-with-proxies.md b/docs/keys/proxies/working-with-proxies.md new file mode 100644 index 0000000000..ce03b39e02 --- /dev/null +++ b/docs/keys/proxies/working-with-proxies.md @@ -0,0 +1,867 @@ +--- +title: "Working with Proxies" +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +import { SdkVersion } from "../../sdk/_sdk-version.mdx"; + +# Working with Proxies + +This page covers each step in the use of proxy wallets as a security feature for Bittensor operations: + +- Creating proxy relationships between existing wallets +- Executing transactions with 0-day proxy wallets. +- Announcing and then executing transactions with a non-zero delay period. +- Removing proxy relationships + +See: +- [Proxies: Overview](./index.md) +- [Staking with a Proxy](./staking-with-proxy.md) + +## Introduction + +### Security Considerations + +Proxy wallets are a powerful security feature, but to get the full benefits, it is critical to observe good key security. When one wallet serves as proxy for another (the 'safe wallet'), both the safe wallet and the proxy wallet have their own full coldkey keypair (the public key which goes into the wallet's address, and the private key, which is recoverable using the seed phrase), and must be handled with proper care. + +Generally, the safe wallet should be given the maximum security possible, whereas the proxy wallet (if it is carefully limited in its permissions), can be handled in a more convenient, less secure way. For example, a proxy might be loaded into a less trusted compute runtime, whereas the safe wallet's coldkey private key/seed phrase should *never* be loaded into any but the most absolutely secure device). However, depending on the proxy's configuration, compromise of a proxy wallet's coldkey can still be disastrous. For example, a proxy with `ProxyType`:`any` and `delay`:`0` can immediately perform any operation on behalf of the safe wallet, so leaking such a proxy key is just as bad as leaking the safe wallet key. + +Before executing any operations with any coldkeys holding TAO on Bittensor main network, carefully think through the desired end result and the steps required to achieve it. + +See: [Coldkey and Hotkey Workstation Security](../coldkey-hotkey-security). + +### Prerequisites + +#### Practice/Dev + +To follow along with the below examples for practice, you have two options: + +- [Run a Local Bittensor Blockchain Instance](../../local-build/deploy). +- Follow along on test network, if you have some test TAO. + +#### Main Network + +Once you have practiced on a local or test chain, and you are ready to execute these operations on Bittensor main network (`finney`), you will need two wallets and enough TAO to cover some small fees: + +- The safe wallet or 'real account' that will be protected by the proxy. +- The proxy wallet, which will act on behalf of the safe wallet. + +:::warning fee +The delegate account must hold enough funds to cover transaction fees, which are approximately 25 Rao (0.000025 TAO). + +See: [Fees](../../learn/fees) +::: + +## Add a Proxy Relationship + +Add a proxy record on the blockchain to designate a proxy wallet for your safe wallet. + +:::note consider security! +Note that this operation requires the safe wallet's coldkey private key, which is a maximally sensitive and valuable cryptographic secret. + +For any wallet with real-value TAO (i.e. TAO on Bittensor's main network, `finney`), coldkey private keys and seed phrases should be handled with utmost care, only on dedicated coldkey workstations. + +See: [Coldkey and Hotkey Workstation Security](../coldkey-hotkey-security). +::: + + +:::info +Multiple proxy relationships can exist between a pair of wallets, as long as each proxy entry uses a different `ProxyType`. Attempting to register a duplicate entry with the same delegate and `ProxyType` will result in a `proxy.Duplicate` error. +::: + + + + +### Add the on-chain proxy relationship + +Run `btcli proxy add` to create a proxy relationship between existing wallets on-chain. + +Note that `--wallet.name` specifies the *safe wallet*, since the private key must be loaded in for the safe wallet, not the proxy. This makes sense because it is the safe wallet that is *delegating* the authority to order transactions to the proxy wallet, so it must be authenticated with the private key using its encryption password. + +```bash +btcli proxy add \ + --wallet.name SAFE_WALLET_NAME \ + --delegate PROXY_WALLET_COLDKEY_ss58 \ # Proxy wallet's coldkey + --proxy-type PROXY_TYPE \ +``` + +**Parameters:** +- `--wallet.name`: Your wallet name (the real account that will authorize the proxy) +- `--delegate`: The SS58 address of the proxy (i.e. the delegate of transaction power) +- `--proxy-type`: The type of proxy relationship (e.g., `Staking`, `Transfer`, `Any`, etc.) +- `--delay`: Optional delay in blocks (0 for immediate execution) + + +For our example, we'll use two wallets called `PracticeSafeWallet` and `PracticeProxy`. To follow along, create two new wallets with these names and substitute their coldkey ss58 addresses: + +- PracticeSafeWallet: `5CS9x5NsPHpb2THeS92zBYCSSk4MFoQjjx76DB8bEzeJTTSt` +- PracticeProxy: `5CZmB94iEG4Ld7JkejAWToAw7NKEfV3YZHX7FYaqPGh7isXe` + + +To give PracticeProxy the ability to order small transfers from PracticeSafeWallet's balance immediately (with 0 delay), we'll use the following comand: + +```bash +btcli proxy add \ + --wallet.name PracticeSafeWallet \ + --delegate 5CZmB94iEG4Ld7JkejAWToAw7NKEfV3YZHX7FYaqPGh7isXe \ + --proxy-type SmallTransfer \ + --network test +``` + +```console +✅ Your extrinsic has been included as 5951841-6 +Added proxy delegatee '5CZmB94iEG4Ld7JkejAWToAw7NKEfV3YZHX7FYaqPGh7isXe' from delegator +'5CS9x5NsPHpb2THeS92zBYCSSk4MFoQjjx76DB8bEzeJTTSt' with proxy type 'SmallTransfer' with delay 0. +Would you like to add this to your address book? [y/n]: y +``` + +### BTCLI's proxy address book + + +Use ` btcli config add-proxy` to configure your local BTCLI with a proxy relationship. Make sure to follow the instructions carefully depending on whether: +1. You are using a proxy relationship between pre-existing wallets, as described on this page. This covers most use cases for proxies. +1. You are using a pure proxy. See [pure proxies](./pure-proxies). + +View all saved proxies with: + +```bash +btcli config proxies +``` + + +```console + Name Address Spawner/Delegator Proxy Type Delay Note + ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── + practice-proxying 5CngkPSSnhK7ot6zFv3Q… 5GrwvaEF5zXb26Fz9rcQ… Any 0 always be awesome + practice-small-transfers 5GrwvaEF5zXb26Fz9rcQ… 5FLSigC9HGRKVhB9FiEo… SmallTransfer 0 small transfers only +``` + + + + + + + +```python +import bittensor as bt +from bittensor.core.chain_data.proxy import ProxyType + +subtensor = bt.Subtensor() + +real_account = bt.Wallet(name="WALLET_NAME") # Your real account +delegate_address = "DELEGATE_ADDRESS" # Your delegate wallet address + +response = subtensor.add_proxy( + wallet=real_account, + delegate_ss58=delegate_address, + proxy_type=ProxyType.Any, + delay=0, # optional delay in blocks +) + +print(response) + +``` + +:::info +The proxy type can be provided either by importing and using the `ProxyType` enum or by passing the proxy type as a string. +::: + + + + +1. In the navbar menu, navigate to **Developers** → **Extrinsics**. +2. Under “using the selected account”, pick the funded delegator account. +3. Under “submit the following extrinsic”, choose the `proxy` pallet and call `addProxy(delegate, proxyType, delay)`. +4. Fill the parameters: + - `delegate`: select the imported delegate account from the _Accounts_ dropdown. + - `proxyType`: select `SmallTransfer`; this should allow us to transfer amounts that do not exceed 0.5τ. + - `delay`: the time-lock period in blocks. A delay of `0` means immediate execution without announcements. A non-zero value requires the delegate to announce calls first and wait for the delay period before execution. +5. Click **Submit Transaction** and sign with the _delegator_ account. + + + + + +### Check an Account’s Proxies + +You can check which proxies are associated with an account to see their delegate addresses, proxy types, and any configured delays. To do this: + + + + + +To check proxies in BTCLI, you can view your local address book: + +```bash +btcli config proxies +``` + +This displays all proxies you've saved to your local address book. + +:::info On-chain proxy query +BTCLI does not currently provide a command to query on-chain proxy state directly. To view all proxies registered on-chain for an account, use the SDK's `get_proxies_for_real_account()` method or query via Polkadot.js Apps. +::: + + + + + +```python +real_account = bt.Wallet(name="WALLET_NAME") + +proxies, deposit = subtensor.get_proxies_for_real_account( + real_account_ss58=real_account.coldkey.ss58_address + ) + +print(f"Proxies: {proxies}") +``` + + + + +1. From the **Developer** dropdown, navigate to **Chain state** → **Storage**. +2. Click the **selected state query** menu and select `proxy.proxies`. +3. Select the account used to create the proxy. +4. Click the **+** icon to run the query. + +This returns all the proxies associated to the account and their information—`delegate`, `proxyType`, and `delay`. + + + + +## Execute a 0-Delay Proxy Call + +A proxy wallet that is set up with a delay of 0 can execute transactions allowed by its proxy type simply by declaring which real account they are acting as proxy for. + +:::note consider security! +This operation will be run in a coldkey workstation that is set up for the *proxy wallet*, not the *safe wallet/real account*. For main network (`finney`) wallets, the safe wallet's coldkey private key should *never* be loaded onto the proxy workstation, otherwise we undermine the security advantage of the proxy relationship. The safe wallet's coldkey private key/seed phrase should be kept in cold storage as muchas possible, and should only be loaded into dedicated, highly secure, code environments provisioned specifically for that purpose. +::: + + + + + +Many `btcli` commands support the `--proxy` flag to proxy an operation on behalf of another wallet. + +:::note terminology and parameter names +The language here may be counter-intuitive, in that the `--proxy` flag specifies the wallet *being* proxied. + +The wallet specified by `--wallet.name` is actually the wallet we normally call "the proxy", and `--proxy` specifies the safe wallet or 'real account'. It makes more sense if you think of the `--proxy` flag as specifying that the operation is being called *by* proxy for the wallet that follows, i.e., the safe wallet. + +More to the point, we can logically infer that it *must* be the case that `--wallet.name` refers to the proxy, and the ss58 supplied (in the `--proxy` field) must refer to the safe wallet, since this command is meant to be run by the proxy, protecting the safe wallet. Therefore, the proxy's private key must be present and unlocked, not the safe wallet's, which should remain in cold storage. +::: + +This command will transfer 18 TAO from PracticeSafeWallet to a third wallet, Miner. + +```bash + +btcli wallet transfer \ + --wallet.name PracticeProxy \ + --proxy 5CS9x5NsPHpb2THeS92zBYCSSk4MFoQjjx76DB8bEzeJTTSt \ + --destination 5DA7UsaYbk1UnhhtTxqpwdqjuxhQ2rW7D6GTN1S1S5tC2NRV \ + --amount 0.333 \ + --network test + +``` +**Proxy params:** +- `--wallet.name`: The proxy wallet that signs the transaction on behalf of the real account. +- `--proxy`: The real account's SS58 address (or proxy name from address book) + +```console +Initiating transfer on network: test +Do you want to transfer: + amount: 0.3330 τ + from: PracticeProxy : 5CZmB94iEG4Ld7JkejAWToAw7NKEfV3YZHX7FYaqPGh7isXe + to: 5DA7UsaYbk1UnhhtTxqpwdqjuxhQ2rW7D6GTN1S1S5tC2NRV + for fee: 0.0000 τ +Transferring is not the same as staking. To instead stake, use btcli stake add instead. +Proceed with transfer? [y/n]: y +Enter your password: +Decrypting... +✅ Finalized +Block Hash: 0xc8f8cba3395cd34d6dd2e2bc3b8e1b5e6b6eeb60754dac398b08bca735a6a32d +Balance: + 98.7739 τ ➡ 98.4409 τ +``` + + +:::tip Using saved proxies +If you saved a proxy to your address book with `btcli config add-proxy`, you can reference it by name: + +```bash +btcli wallet transfer \ + --wallet.name PracticeProxy \ + --proxy PracticeSafeWallet \ + --destination 5DA7UsaYbk1UnhhtTxqpwdqjuxhQ2rW7D6GTN1S1S5tC2NRV \ + --amount 0.333 \ + --network test +``` +::: + + + + + +```python +import bittensor as bt +from bittensor.core.chain_data.proxy import ProxyType +from bittensor.core.extrinsics.pallets import Balances + +subtensor = bt.Subtensor() + +real_account = "REAL_ACCOUNT_ADDRESS" # address of the real account +delegate_address = bt.Wallet(name="PROXY_WALLET") # name of the proxy wallet +recipient_wallet = "RECIPIENT_WALLET" + +# Create a transfer call +transfer_amount = bt.Balance.from_tao(1.0) +transfer_call = Balances(subtensor).transfer_keep_alive( + dest=recipient_wallet, + value=transfer_amount.rao, +) + +# Execute the call through the proxy +response = subtensor.proxy( + wallet=delegate_address, # Proxy signs the transaction + real_account_ss58=real_account, # Real account (origin) + force_proxy_type=ProxyType.Any, + call=transfer_call, +) + +if response.success: + print(f"✓ Transfer executed through proxy!") + print(f" Transferred {transfer_amount} from {real_account[:10]}...") +else: + print(f"✗ Failed: {response.message}") +``` + +:::info Building a call + +Before executing a proxy through the SDK, you must first build the inner call that represents the action you want the chain—or proxy—to perform. This can be done by creating a generic call manually (for example using `subtensor.compose_call()`) or by using the SDK’s built-in call builders from the relevant pallet. + +To build a call using the SDK call builder, import the relevant pallet class (e.g., `Proxy`, `Balances`, `SubtensorModule`, etc.) from `bittensor.core.extrinsics.pallets`, instantiate it with your subtensor instance, then call the method for the extrinsic you need. For example: + +```py +from bittensor.core.extrinsics.pallets import Proxy +from bittensor.core.extrinsics.pallets import Balances + +# using the Proxy pallet class +Proxy(subtensor).add_proxy(...) + +# using the Balances pallet class +Balances(subtensor).transfer_keep_alive(...) +``` + +::: + +:::warning +The delegate account must hold enough funds to cover transaction fees, which are approximately 25 µTAO (0.000025 TAO). +::: + + + + +1. Go to **Developer** → **Extrinsics**. +2. Under “using the selected account”, choose the delegate account. +3. Select the `proxy` pallet and choose `proxy(real, forceProxyType, call)`. +4. Fill the parameters: + - `real`: select the real account used to create the proxy. + - `forceProxyType`: leave option unchecked. + - `call`: the call to be made by the delegate account. Fill the following parameters: + - Select the `balances` pallet and choose the `transferKeepAlive(dest, value)` extrinsic. + - `dest`: select the recipient account. + - `value`: input the amount to be transferred in RAO—1 TAO = 19RAO. +5. Click **Submit Transaction** and sign the transaction from the delegate account. + +The runtime verifies that the call is permitted by the proxy filter and that any delay requirements have been met, then dispatches the call as if signed by the Real account. + +:::info +After submitting the transaction, check the Polkadot.JS web app's **Explorer** page for a `balances.Transfer` event. Notice the sender is the delegator account. +::: + + + + +## Remove a Proxy + +Removing a proxy revokes the delegate’s permission to act on behalf of the primary account, effectively ending the proxy relationship on-chain. To remove a proxy: + + + + + +```bash +btcli proxy remove \ + --wallet.name WALLET_NAME \ + --delegate DELEGATE_ADDRESS \ + --proxy-type Staking \ + --delay 0 +``` + +**Parameters:** +- `--wallet.name`: Your wallet name (the real account that authorized the proxy) +- `--delegate`: The SS58 address of the delegate account to remove +- `--proxy-type`: Must match the proxy type used when adding +- `--delay`: Must match the delay value used when adding + +For example, let's remove the 0-delay SmallTransfer proxy relationship we established above between our PracticeSafeWallet and PracticeProxy wallets. + +```bash +btcli proxy remove \ + --wallet.name PracticeSafeWallet \ + --delegate 5CZmB94iEG4Ld7JkejAWToAw7NKEfV3YZHX7FYaqPGh7isXe \ + --proxy-type SmallTransfer \ + --delay 0 +``` + +```console +This will remove a proxy of type SmallTransfer for delegate 5CZmB94iEG4Ld7JkejAWToAw7NKEfV3YZHX7FYaqPGh7isXe.Do you want +to proceed? [y/n]: y +✅Success! +``` +:::info Removal is immediate +Unlike delayed execution, removing a proxy takes effect immediately, regardless of any delay configured on the proxy. +::: + + + + + +```python +import bittensor as bt +from bittensor.core.chain_data.proxy import ProxyType + +subtensor = bt.Subtensor() + +real_account = bt.Wallet(name="WALLET_NAME") +delegate_address = "DELEGATE_ADDRESS" + +response = subtensor.remove_proxy( + wallet=real_account, + delegate_ss58=delegate_address, + proxy_type=ProxyType.Any, + delay=0, # must match the delay value set when the proxy was added +) + +if response.success: + print("✓ Proxy removed successfully!") +else: + print(f"✗ Failed: {response.message}") +``` + + + + +1. In the navbar menu, navigate to **Developers** → **Extrinsics**. +2. Under “using the selected account”, pick the delegator account. +3. Under "submit the following extrinsic", choose the `proxy` pallet and call `removeProxy(delegate, proxyType, delay)`. +4. Fill the parameters: + - `delegate`: select the imported delegate account from the _Accounts_ dropdown. + - `proxyType`: select `SmallTransfer`; this should allow us to transfer amounts that do not exceed 0.5τ. + - `delay`: Optionally, include a delay in blocks. +5. Click **Submit Transaction** and sign with the _delegator_ account. + + + + +:::info +The `delegate_ss58`, `proxy_type`, and `delay` parameters must exactly match those used when the proxy was added. The `delay` parameter is an identifier for the specific proxy relationship, not a delay before removal takes effect (removal is immediate). Use `get_proxies_for_real_account()` to retrieve the exact parameters for existing proxies. +::: + +### Remove all proxies + +Use this to remove all proxies associated with an account. + + + + + +BTCLI does not currently provide a single command to remove all proxies at once. You must remove each proxy individually using `btcli proxy remove`. + +:::tip SDK alternative +To remove all proxies in one operation, use the SDK's `remove_proxies()` method. +::: + + + + + +```python +import bittensor as bt + +subtensor = bt.Subtensor(network="local") + +real_account = bt.Wallet(name="sn-creator") + +response = subtensor.remove_proxies(wallet=real_account) + +if response.success: + print(f"✓ All proxies removed!") +else: + print(f"✗ Failed: {response.message}") +``` + + + + +1. In the navbar menu, navigate to **Developers** → **Extrinsics**. +2. Under “using the selected account”, pick the delegator account. +3. Under "submit the following extrinsic", choose the `proxy` pallet and call `removeProxies()`. +4. Click **Submit Transaction** and sign with the _delegator_ account. + + + + +## Announce and Execute a Delayed Proxy Call + +If a proxy wallet has been given proxy powers to make a transaction with a delay, they must announce the call beforehand, and then wait the delay interval (specified by the `delay` parameter when the proxy relationship is created). + +For example, the following command gives PracticeProxy the ability to make large transfers, but only after an announcement-delay period of 100 blocks: + + + +```bash +btcli proxy add \ + --wallet.name PracticeSafeWallet \ + --delegate 5CZmB94iEG4Ld7JkejAWToAw7NKEfV3YZHX7FYaqPGh7isXe \ + --proxy-type Transfer \ + --delay 100 \ + --network test +``` + +```console +Added proxy delegatee '5CZmB94iEG4Ld7JkejAWToAw7NKEfV3YZHX7FYaqPGh7isXe' from delegator +'5CS9x5NsPHpb2THeS92zBYCSSk4MFoQjjx76DB8bEzeJTTSt' with proxy type 'Transfer' with delay 100. +``` + + + + +```python +import bittensor as bt +from bittensor.core.chain_data.proxy import ProxyType + +subtensor = bt.Subtensor() + +real_account = bt.Wallet(name="WALLET_NAME") # Your real account +delegate_address = "DELEGATE_ADDRESS" # Your delegate wallet address + +response = subtensor.add_proxy( + wallet=real_account, + delegate_ss58=delegate_address, + proxy_type=ProxyType.Any, + delay=100, # optional delay in blocks +) + +print(response) + +``` + + + + + + +### Generate call hash + +Announcing a delayed proxy call requires the hash of the call that you intend to execute. Therefore, you must first generate the call hash of the transaction you want to carry out. To generate the call hash: + + + + + +When using `--announce-only`, BTCLI automatically generates and stores the call hash for you. You don't need to manually generate it. + + + + + + +```python +import bittensor as bt +from bittensor.core.extrinsics.pallets import Balances + +subtensor = bt.Subtensor() + +recipient_address = "RECIPIENT_WALLET" + +# Create the call you want to execute later +transfer_amount = bt.Balance.from_tao(1.0) +transfer_call = Balances(subtensor).transfer_keep_alive( + dest=recipient_address, + value=transfer_amount.rao, +) + +# Get the call hash +call_hash = "0x" + transfer_call.call_hash.hex() + +print(response) +``` + + + + +1. Go to **Developer** → **Extrinsics**. +2. Under “**using the selected account**”, pick the delegate account. +3. Under “**submit the following extrinsic**”, choose the `balances` pallet and call the `transferKeepAlive(dest, value)` extrinsic. +4. Fill the parameters: + - `dest`: select the recipient account. + - `value`: input the amount to be transferred in RAO—1 TAO = 19RAO. +5. Copy the hex code shown in the **encoded call data** field. You will use this to announce the call in the next step. + +:::info +Do not submit the transaction after entering the parameters. Only copy the encoded call data once all parameters are provided. +::: + + + + + +### Announce a proxy call + +Announcing a proxy call publishes the hash of a proxy-call that will be made in the future. To announce a delayed call: + + + + + +For delayed proxies, first announce the call using the `--announce-only` flag: + +```bash +# The call hash is automatically generated and saved +btcli wallet transfer \ + --wallet.name PracticeProxy \ + --proxy 5CS9x5NsPHpb2THeS92zBYCSSk4MFoQjjx76DB8bEzeJTTSt \ + --destination 5DA7UsaYbk1UnhhtTxqpwdqjuxhQ2rW7D6GTN1S1S5tC2NRV \ + --amount 0.333 \ + --network test \ + --announce-only + + +``` +```console +Do you want to transfer: + amount: 0.3330 τ + from: PracticeProxy : 5CZmB94iEG4Ld7JkejAWToAw7NKEfV3YZHX7FYaqPGh7isXe + to: 5DA7UsaYbk1UnhhtTxqpwdqjuxhQ2rW7D6GTN1S1S5tC2NRV + for fee: 0.0000 τ +Transferring is not the same as staking. To instead stake, use btcli stake add instead. +Proceed with transfer? [y/n]: y +Enter your password: +Decrypting... +Added entry b'D\x99-\x9d\xa2:BqnQ\xb7\xb6\x99M\xc8\xe1\xd6;\xb2\x810\x15\x82y\xb3XLD\x90#\xd92' at block 5953000 to your +ProxyAnnouncements address book. +✅ Finalized +Block Hash: 0x1c6378ee38b8c27f161b646125ec301f1aa52bffd63b090ec0c0876c9cc56ba5 +Balance: + 98.4409 τ ➡ 98.4409 τ +``` + + +**What this does:** +- Creates and announces the call on-chain +- Saves the announcement details to your local database +- Does NOT execute the operation immediately +- The real account can reject it during the delay period + +**After announcing:** +1. Wait for the configured delay period (in blocks) to pass +2. The real account has the option to reject the announcement +3. Execute the call after the delay expires (see next step) + + + + + +```python +import bittensor as bt +from bittensor.core.extrinsics.pallets import Balances + +subtensor = bt.Subtensor(network="test") + +# The proxy wallet (delegate) - this wallet signs the announcement +delegate_wallet = bt.Wallet(name="PracticeProxy") + +# The real account (safe wallet) being proxied +real_account_ss58 = "5CS9x5NsPHpb2THeS92zBYCSSk4MFoQjjx76DB8bEzeJTTSt" + +# Recipient of the transfer +recipient_address = "5DA7UsaYbk1UnhhtTxqpwdqjuxhQ2rW7D6GTN1S1S5tC2NRV" + +# Create the call you want to execute later +# IMPORTANT: Remember these exact parameters - you must use them when executing +transfer_amount = bt.Balance.from_tao(7.0) +transfer_call = Balances(subtensor).transfer_keep_alive( + dest=recipient_address, + value=transfer_amount.rao, +) + +# Get the call hash +call_hash = "0x" + transfer_call.call_hash.hex() +print(f"Call hash to announce: {call_hash}") + +# Announce the call +response = subtensor.announce_proxy( + wallet=delegate_wallet, + real_account_ss58=real_account_ss58, + call_hash=call_hash, +) + +print(response) +# Save the call_hash - you'll need it to execute after the delay +``` + +:::info +Next, wait for the duration of the configured delay before executing the call. During the waiting period, the delegate can cancel the announcement—`subtensor.remove_proxy_announcement()`, while the real account retains final authority to reject it—`subtensor.reject_proxy_announcement()`. +::: + + + +1. Go to **Developer** → **Extrinsics** tab. +2. Choose the `proxy` pallet and select the `announce(real, call_hash)` extrinsic. +3. Fill the parameters: + - `real`: select the real account used to create the proxy. + - `callHash`: paste the call hash of the transaction to be executed. +4. Click **Submit Transaction** and sign the transaction from the delegate account. + +:::info +Next, wait for the duration of the configured delay before executing the call. During the waiting period, the delegate can cancel the announcement—`removeAnnouncement(real, callHash)`, while the real account retains final authority to reject it—`rejectAnnouncement(delegate, callHash)`. +::: + + + +### Execute a delayed proxy call + +After the announcement waiting period has passed, the delegate account can now execute the proxy if the real account did not reject it. Attempting to execute the proxy before the waiting period passes returns a `proxy.Unannounced` error. To execute a delayed proxy call: + + + + + +After the delay period has passed, execute the announced call: + +```bash +btcli proxy execute \ + --wallet.name PracticeProxy \ + --proxy 5CS9x5NsPHpb2THeS92zBYCSSk4MFoQjjx76DB8bEzeJTTSt \ + --real 5CS9x5NsPHpb2THeS92zBYCSSk4MFoQjjx76DB8bEzeJTTSt + --network test + + btcli wallet transfer \ + --wallet.name PracticeProxy \ + --proxy 5CS9x5NsPHpb2THeS92zBYCSSk4MFoQjjx76DB8bEzeJTTSt \ + --destination 5DA7UsaYbk1UnhhtTxqpwdqjuxhQ2rW7D6GTN1S1S5tC2NRV \ + --amount 0.333 \ + --network test \ + --announce-only +``` + +**How it works:** +- Retrieves the previously announced call from your local database +- Verifies the delay period has passed +- Executes the call on-chain +- Clears the announcement + +**Manual execution:** +If you need to specify call details manually: + +```bash +btcli proxy execute \ + --wallet.name PracticeProxy \ + --proxy 5CS9x5NsPHpb2THeS92zBYCSSk4MFoQjjx76DB8bEzeJTTSt \ + --real 5CS9x5NsPHpb2THeS92zBYCSSk4MFoQjjx76DB8bEzeJTTSt \ + --delegate 5CZmB94iEG4Ld7JkejAWToAw7NKEfV3YZHX7FYaqPGh7isXe \ + --call-hash 0x1c6378ee38b8c27f161b646125ec301f1aa52bffd63b090ec0c0876c9cc56ba5 \ + --network test +``` + +:::tip Automatic tracking +BTCLI automatically tracks announcements you make with `--announce-only` in a local database, making execution easier. +::: + + + + + +```python +import bittensor as bt +from bittensor.core.chain_data.proxy import ProxyType +from bittensor.core.extrinsics.pallets import Balances + +subtensor = bt.Subtensor(network="test") + +# The proxy wallet (delegate) - this wallet signs the transaction +delegate_wallet = bt.Wallet(name="PracticeProxy") + +# The real account (safe wallet) being proxied +real_account_ss58 = "5CS9x5NsPHpb2THeS92zBYCSSk4MFoQjjx76DB8bEzeJTTSt" + +# Recipient of the transfer +recipient_address = "5DA7UsaYbk1UnhhtTxqpwdqjuxhQ2rW7D6GTN1S1S5tC2NRV" + +# IMPORTANT: The call must EXACTLY match the announced call (same amount, same recipient) +transfer_amount = bt.Balance.from_tao(7.0) +transfer_call = Balances(subtensor).transfer_keep_alive( + dest=recipient_address, + value=transfer_amount.rao, +) + +# Verify the call hash matches what was announced +print(f"Call hash: 0x{transfer_call.call_hash.hex()}") + +# Execute the announced call +response = subtensor.proxy_announced( + wallet=delegate_wallet, + delegate_ss58=delegate_wallet.coldkeypub.ss58_address, + real_account_ss58=real_account_ss58, + force_proxy_type=ProxyType.Any, + call=transfer_call, +) + +print(response) +# ExtrinsicResponse: +# success: True +# message: Success +``` + +:::warning Call hash must match +The call you execute **must have the exact same parameters** as the call you announced. Different amount = different call hash = `Unannounced` error. +::: + + + +1. Go to **Developer** → **Extrinsics**. +2. Under "using the selected account", choose the delegate account. +3. Select the `proxy` pallet and choose `proxyAnnounced(delegate, real, forceProxyType, call)`. +4. Fill the parameters: + - `delegate`: select the delegate account. + - `real`: select the real account used to create the proxy. + - `forceProxyType`: leave option unchecked. + - `call`: the call to be made by the delegate account. Fill the following parameters: + - Select the `balances` pallet and choose the `transferKeepAlive(dest, value)` extrinsic. + - `dest`: select the recipient account. + - `value`: input the amount to be transferred in RAO—1 TAO = 19RAO. +5. Click **Submit Transaction** and sign the transaction from the delegate account. + + + + + +:::info + +- The call details on the executed proxy must exactly match the original announcement. Any change to the call or call hash will result in a `proxy.Unannounced` error. +- Once a delayed proxy call is executed, its announcement is cleared. To execute another proxy with the same details, you must create a new announcement and wait for the waiting period to pass. + ::: + + + + +## Troubleshooting + +- `proxy.Duplicate`: A proxy with the same configuration already exists on the real account. See [source code: `Duplicate` error](https://github.com/opentensor/subtensor/blob/main/pallets/proxy/src/lib.rs#L739). +- `proxy.Unannounced`: A non-zero delay proxy requires an announcement; announce and wait the delay. See [source code: `Unannounced` error](https://github.com/opentensor/subtensor/blob/main/pallets/proxy/src/lib.rs#L743). +- `proxy.Unproxyable`/`system.CallFiltered`: The call is not permitted under the current `ProxyType`. See [source code: `Unproxyable` error](https://github.com/opentensor/subtensor/blob/main/pallets/proxy/src/lib.rs#L737). +- `proxy.TooMany`: You exceeded `MaxProxies` or `MaxPending`. Remove unused proxies/announcements. See [source code: `TooMany` error](https://github.com/opentensor/subtensor/blob/main/pallets/proxy/src/lib.rs#L731). +- `proxy.NotProxy`: Ensure you're submitting from the delegate account and referencing the correct real account. See [source code: `NotProxy` error](https://github.com/opentensor/subtensor/blob/main/pallets/proxy/src/lib.rs#L735). +- `Token.FundsUnavailable`: Ensure that your real account has enough available funds to cover the transaction. diff --git a/docs/subnets/schedule-coldkey-swap.md b/docs/keys/schedule-coldkey-swap.md similarity index 50% rename from docs/subnets/schedule-coldkey-swap.md rename to docs/keys/schedule-coldkey-swap.md index 7e4455001f..49e1e5ad21 100644 --- a/docs/subnets/schedule-coldkey-swap.md +++ b/docs/keys/schedule-coldkey-swap.md @@ -7,49 +7,65 @@ import useBaseUrl from '@docusaurus/useBaseUrl'; # Rotate/Swap your Coldkey -This page describes how to *rotate* or *swap* the coldkey in your wallet. This is required if you suspect your coldkey has been leaked. Your coldkey secures your identity on Bittensor. +This page describes how to _rotate_ or _swap_ the coldkey in your wallet. This is required if you suspect your coldkey has been leaked. Your coldkey secures your identity on Bittensor. See: -- [Wallets, Coldkeys and Hotkeys in Bittensor](../getting-started/wallets) -- [Coldkey and Hotkey Workstation Security](../getting-started/coldkey-hotkey-security) +- [Wallets, Coldkeys and Hotkeys in Bittensor](./wallets) +- [Coldkey and Hotkey Workstation Security](./coldkey-hotkey-security) +See [code for coldkey swap](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/swap/swap_coldkey.rs). -## Description +:::tip Prevent emergencies with proxies +Coldkey swaps are often needed when a coldkey is compromised. **Using proxy wallets can help prevent this situation entirely.** With a properly configured proxy (limited `ProxyType` and non-zero delay), even if an attacker gains access to your proxy wallet, they cannot immediately drain your funds—the delay gives you time to detect and reject unauthorized transactions. -The `btcli` command does not yet support this schedule coldkey swap feature. You must use the [Polkadot JS extension](https://polkadot.js.org/extension/). +For high-value wallets, consider setting up a `Staking` proxy for regular staking operations instead of using your coldkey directly. -See [code for coldkey swap](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/swap/swap_coldkey.rs). +See [Proxies: Overview](./proxies/index.md) to learn how to protect your coldkey proactively. +::: The schedule coldkey swap feature works as follows: - The schedule coldkey swap feature enables you to schedule the swapping of source coldkey to a destination coldkey. If you feel your existing coldkey is potentially compromised, then use this feature to schedule a swap to a destination coldkey. -- When you use this feature, it will not immediately swap your coldkeys and swap your TAO funds from the source coldkey to the destination coldkey. It will only schedule the swap event. -- All scheduled coldkey swaps will be executed on-chain. **Your scheduled coldkey swap will execute on the mainnet exactly 5 days after you successfully scheduled the coldkey swap using the method described in this document.** -- The source coldkey you used in this method will be locked when you schedule the swap. After the 5-day period is elapsed your original coldkey will be unlocked entirely. +- When you use this feature, it will not immediately swap your coldkeys and swap your TAO funds from the source coldkey to the destination coldkey. It will only schedule the swap event. +- All scheduled coldkey swaps will be executed on-chain. **Your scheduled coldkey swap will execute on the mainnet 36000 blocks (approximately 5 days) after you successfully scheduled the coldkey swap using the method described in this document.** +- The source coldkey you used in this method will be locked when you schedule the swap. After the 36000-block period is elapsed your original coldkey will be unlocked entirely. - **Cost**: The cost of this coldkey swap transaction is 0.1 TAO. This must be available in your source coldkey. - Any subnet ownership from your source coldkey will move to the destination coldkey. - The delegated stake will be transferred from your source coldkey to the destination coldkey. -- For those who were staking to a validator from their source coldkey, their staking TAO will transfer to the destination coldkey. +- For those who were staking to a validator from their source coldkey, their staking TAO will transfer to the destination coldkey. :::danger Do not schedule coldkey swap more than once using the same coldkey ::: +:::warning Scheduled swaps cannot be cancelled +Once a coldkey swap has been scheduled, **it cannot be cancelled**. This is an intentional design feature; coldkey swaps must not be cancellable, because if they were, an attacker who gained access to a coldkey could use cancellation to thwart the owner's attempt to swap it. + +The delay period is intentionally long to allow those affected by the swap to access their coldkeys in order to respond. This is an issue because high-value keys (for example, coldkeys with subnet ownership or which control high value validator hotkeys) should be kept under stringent conditions of physical security, implying they cannot always be quickly accessed, for example during travel. + +::: + ## Requirements 1. To execute this operation, you must own the source coldkey. -1. The destination (new) coldkey public key must not already be assigned to a hotkey *or a coldkey that is associated with any hotkeys*. -1. Confirm the identity of the destination coldkey. A mistake here can result in loss of all of the source coldkey's assets and identity. - - If you are rotating the coldkey to maintain ownership, you must control the destination coldkey privatekey. Otherwise you will lose control over all of the source coldkey's assets and identity. - - If you are transferring ownership to someone else, confirm that they have secure control of the destination coldkey private key. -2. You must use the [Polkadot JS extension](https://polkadot.js.org/extension/). The `btcli` command does not yet support scheduling coldkey swap. -3. You must import your source and destination coldkeys into the Polkadot JS extension. -4. You must connect the source coldkey account to the [polkadot.js.org/apps](https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Fentrypoint-finney.opentensor.ai%3A443#/explorer) website. +2. The destination (new) coldkey public key must not already be assigned to a hotkey _or a coldkey that is associated with any hotkeys_. +3. Confirm the identity of the destination coldkey. A mistake here can result in loss of all of the source coldkey's assets and identity. + - If you are rotating the coldkey to maintain ownership, you must control the destination coldkey privatekey. Otherwise you will lose control over all of the source coldkey's assets and identity. + - If you are transferring ownership to someone else, confirm that they have secure control of the destination coldkey private key. + +## Using Bittensor-CLI + +`btcli w swap-coldkey` - :::danger If you do not do this step, then you will not see **Developer** > **Extrinsics** option on the [polkadot.js.org/apps](https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Fentrypoint-finney.opentensor.ai%3A443#/extrinsics) website. - ::: +## Using the [Polkadot JS extension](https://polkadot.js.org/extension/) + +1. You must import your source and destination coldkeys into the Polkadot JS extension. +2. You must connect the source coldkey account to the [polkadot.js.org/apps](https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Fentrypoint-finney.opentensor.ai%3A443#/explorer) website. + +:::danger If you do not do this step, then you will not see **Developer** > **Extrinsics** option on the [polkadot.js.org/apps](https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Fentrypoint-finney.opentensor.ai%3A443#/extrinsics) website. +::: -## Steps +## Steps for Polkadot JS Follow the steps shown below the screenshot: @@ -72,7 +88,7 @@ Open your web browser and navigate to the Polkadot.js Apps website (https://polk ### Step 2: Navigate to the Extrinsics page -From the top navigation menu, proceed to **Developer** > **Extrinsics** to open the Extrinsics page. If you do not see this option, then make sure you successfully imported your source coldkey into the Polkadot JS extension, and connected this source coldkey account to the Polkadot.js Apps website. +From the top navigation menu, proceed to **Developer** > **Extrinsics** to open the Extrinsics page. If you do not see this option, then make sure you successfully imported your source coldkey into the Polkadot JS extension, and connected this source coldkey account to the Polkadot.js Apps website. ### Step 3: Select your source coldkey account @@ -82,20 +98,20 @@ Locate the drop-down section labeled **using the selected account** and select y Locate the drop-down section labeled **submit the following extrinsic** and select `subtensorModule`. -### Step 5: Choose the `scheduleSwapColdkey` function +### Step 5: Choose the `scheduleSwapColdkey` function -After selecting the `subtensorModule`, a second drop-down menu will appear on the right side of it. From this drop-down select the `scheduleSwapColdkey` option. +After selecting the `subtensorModule`, a second drop-down menu will appear on the right side of it. From this drop-down select the `scheduleSwapColdkey` option. -### Step 6: Provide the destination coldkey +### Step 6: Provide the destination coldkey Provide your destination coldkey in the `newColdkey: AccountId32` field. ### Step 7: Submit the transaction -Check again that you have provided the correct source and destination coldkeys. +Check again that you have provided the correct source and destination coldkeys. Scroll down to the bottom of the page and click on the **Submit Transaction** button. Polkadot.js will prompt you to sign the transaction using the selected account. After you sign the transaction, the signed transaction will be broadcast to the Subtensor. ## Verify -Your scheduled coldkey swap will execute on the mainnet 5 days after you successfully scheduled the coldkey swap using the above method. Check your destination coldkey after 5 days to verify. +Your scheduled coldkey swap will execute on the mainnet 36000 blocks after you successfully scheduled the coldkey swap using the above method. Check your destination coldkey after approximately 5 days to verify. diff --git a/docs/getting-started/wallets.md b/docs/keys/wallets.md similarity index 69% rename from docs/getting-started/wallets.md rename to docs/keys/wallets.md index 87264299b8..d9ec4deb57 100644 --- a/docs/getting-started/wallets.md +++ b/docs/keys/wallets.md @@ -1,31 +1,48 @@ --- title: "Wallets, Coldkeys and Hotkeys in Bittensor" --- + import ThemedImage from '@theme/ThemedImage'; import useBaseUrl from '@docusaurus/useBaseUrl'; # Wallets, Coldkeys and Hotkeys in Bittensor -In Bittensor (like other cryptocurrency applications), a *wallet* is a tool for proving your identity, signing transactions, accessing your TAO, and managing your stake in subnets. +In Bittensor (like other cryptocurrency applications), a _wallet_ is a tool for proving your identity, signing transactions, accessing your TAO, and managing your stake in subnets. This page introduces the core concepts involved. -For detailed procedures for handling wallets and keys, see: [Working with keys](../working-with-keys.md) +For detailed procedures for handling wallets and keys, see: [Working with keys](./working-with-keys.md) For detailed security considerations, see: [Coldkey and Hotkey Workstation Security](./coldkey-hotkey-security.md) +:::tip Protect your coldkey with proxies +For operations you perform regularly (like staking), consider using **proxy wallets** to keep your coldkey in secure cold storage. Proxies allow limited, delayed operations on behalf of your main wallet—if a proxy is compromised, delays give you time to reject unauthorized transactions, and restricted permissions limit the damage. + +See [Proxies: Overview](./proxies/index.md) to learn how to protect your coldkey with least-privilege proxy relationships. +::: + ## What are wallets and keys? -There are many different *wallet applications*, but the core of your wallet is one or more cryptographic key-pairs, referred to as **coldkey** and **hotkey**. -Each is actually a cryptographic [key-pair](https://en.wikipedia.org/wiki/Public-key_cryptography), a private and a public key. +The core of your wallet is one or more cryptographic key-pairs, referred to as **coldkey** and **hotkey**. Your wallet essentially consists of the records associated with your key-pairs on the blockchain, including your balances of TAO and alpha currencies, and your history of transactions and interactions with subnets and other wallets (such as mining or validating). + +Each coldkey or hotkey is actually a cryptographic [key-pair](https://en.wikipedia.org/wiki/Public-key_cryptography)with a private and a public key. The public key is mathematically derived from the private key. The private key is a closely held secret: it allows the owner to sign transactions and decrypt secrets, essentially serving as a cryptographic authentication or identity. -This is a general feature of decentralized, trustless systems like distributed ledgers/blockchains: your private key *is* your identity, in that theft or loss of your key results in *unrecoverable* loss of access. +This is a general feature of decentralized, trustless systems like distributed ledgers/blockchains: your private key _is_ your identity, in that theft or loss of your key results in _unrecoverable_ loss of access. In Bittensor, the coldkey and hotkey are used for different operations. In short, the hotkey is for mining and validation, and the coldkey for everything else; if you neither mine nor validate, you have no need for a hotkey, but you will identify validators and miners by their hotkey public keys. The coldkey private key is needed to authorize highly sensitive operations involved in transferring TAO balances and managing stake, operations related to subnet management and governance, and management of hotkeys. The hotkey private key is needed to authorize miners to serve requests in subnets, and by validators to send requests to miners and to submit weights to the blockchain. -The coldkey public key identifies a wallet to the internet, serving as an address. To transfer ownership of TAO or alpha stake from one wallet to another, the sender needs only the public key of the recipient, and their own private key. +The coldkey public key uniquely identifies a wallet on the network and serves as its address for transactions. To transfer ownership of TAO or alpha stake from one wallet to another, the sender needs only the public key of the recipient, and their own private key. + +:::info Existential deposit + +An existential deposit is the minumum required TAO in a wallet (i.e., in a coldkey). +If a wallet balance goes below the existential deposit, then this wallet account is deactivated and the remaining TAO in it is destroyed. +**This is set to 500 RAO for any Bittensor wallet**. + +See also [What is the Existential Deposit?](https://support.polkadot.network/support/solutions/articles/65000168651-what-is-the-existential-deposit-). +::: ## Wallets and wallet applications @@ -36,38 +53,39 @@ We must be careful to distinguish two senses of the term 'wallet' that can other - The **wallet application** is software that runs on your device and allows you to interact with the blockchain by entering your keys. There are several officially supported Bittensor wallet applications: - The Bittensor wallet app for mobile: [bittensor.com/wallet](https://bittensor.com/wallet) - - [The Polkadot browser extension](https://polkadot.js.org/extension/) which can be used with Polkadot Vault... - + - [The Crucible wallet](https://cruciblelabs.com) a Tao wallet featuring an auto-allocator for dynamic TAO staking across subnets, with full Ledger integration. + - [The Polkadot browser extension](https://polkadot.js.org/extension/) which can be used with Polkadot Vault. + - [The Bitensor wallet browser extension](https://chromewebstore.google.com/detail/bittensor-wallet/bdgmdoedahdcjmpmifafdhnffjinddgc), which is also compatible with use of a Ledger hardware wallet. See [Using Ledger Hardware Wallet](../staking-and-delegation/using-ledger-hw-wallet.md) Using the Bittensor wallet browser extension, you can [use TAO.app to manage stake](https://tao.app). - The Bittensor Python SDK, which includes the secure [Bittensor Wallet module](https://docs.bittensor.com/btwallet-api/html/autoapi/btwallet/wallet/index.html). - - The Bittensor CLI, `btcli`, which uses the Bittensor Wallet module under the hood. + - The Bittensor CLI, `btcli`, which uses the Bittensor Wallet module under the hood. -Every Bittensor user has one or more cryptographic wallets, i.e. one or more coldkey. Any cryptographic wallet can be loaded into any number of wallet applications. If every wallet application that has been initialized with your cryptographic wallet (i.e. signed into with your coldkey private key) is closed, logged out, etc., and the device incinerated, your cryptographic wallet exists on the blockchain, and can be recovered with your *seed phrase*. +Every Bittensor user has one or more cryptographic wallets, i.e. one or more coldkey. Any cryptographic wallet can be loaded into any number of wallet applications. If every wallet application that has been initialized with your cryptographic wallet (i.e. signed into with your coldkey private key) is closed, logged out, etc., and the device incinerated, your cryptographic wallet exists on the blockchain, and can be recovered with your _seed phrase_. Different wallet applications have different levels of functionality: - The mobile app and Chrome extension allow for staking and transfer of TAO balalnces, but do not include any hotkey management or advanced functionality. - - Note that the Chome extension is compatible with a hardware wallet, which can be a strong security option. This implies using a laptop as your [coldkey workstation](../getting-started/coldkey-hotkey-security). + - Note that the Chome extension is compatible with a hardware wallet, which can be a strong security option. This implies using a laptop as your [coldkey workstation](./coldkey-hotkey-security). - - The mobile app depends on using a secure phone as a [coldkey workstation](../getting-started/coldkey-hotkey-security). + - The mobile app depends on using a secure phone as a [coldkey workstation](./coldkey-hotkey-security). -- `btcli` and the SDK allow for hotkey management and other advanced functionality. These require a laptop as a [coldkey workstation](../getting-started/coldkey-hotkey-security). +- `btcli` and the SDK allow for hotkey management and other advanced functionality. These require a laptop as a [coldkey workstation](./coldkey-hotkey-security). :::tip Note that you can also check balances on an unsecure device without entering your coldkey private key. For example, using [https://bittensor.com/scan](https://bittensor.com/scan). These website can be considered permissionless wallet applications. -See [Coldkey and Hotkey Workstation Security: Permissionless workstation](../getting-started/coldkey-hotkey-security#permissionless-workstation) +See [Coldkey and Hotkey Workstation Security: Permissionless workstation](./coldkey-hotkey-security#permissionless-workstation) ::: ## The seed phrase a.k.a. mnemonic -The ***seed phrase*** (a.k.a. 'menemonic' or 'recovery phrase') is a series of (at least 12) words that is generated together with your wallet's cryptographic key pair, and which can be used to recover the coldkey private key. This seed phrase is therefore a human-usable way to save access to the cryptographic wallet offline, and to import the cryptographic wallet into a wallet application. +The **_seed phrase_** (a.k.a. 'menemonic' or 'recovery phrase') is a series of (at least 12) words that is generated together with your wallet's cryptographic key pair, and which can be used to recover the coldkey private key. This seed phrase is therefore a human-usable way to save access to the cryptographic wallet offline, and to import the cryptographic wallet into a wallet application. -Arguably the most important operational goal when handling Bittensor wallets is to avoid losing or leaking your seed phrase. Make sure you [Handle your Seed Phrase/Mnemonic Securely](../keys/handle-seed-phrase). +Arguably the most important operational goal when handling Bittensor wallets is to avoid losing or leaking your seed phrase. Make sure you [Handle your Seed Phrase/Mnemonic Securely](./handle-seed-phrase). ## Wallet applications @@ -86,9 +104,11 @@ In theory this means that without your encryption password, it is impossible to However, still consider that using your coldkey on a device offers other ways for attackers to steal your key, even without decrypting it. See [Coldkey workstation security](./coldkey-hotkey-security#coldkey-workstation). -Secure wallet apps supported by Opentensor Foundation include: -- The Bittensor wallet app for mobile: [bittensor.com/wallet](https://bittensor.com/wallet) -- [The Chrome extension](https://chromewebstore.google.com/detail/bittensor-wallet/bdgmdoedahdcjmpmifafdhnffjinddgc), which is also compatible with use of a Ledger hardware wallet. See [Using Ledger Hardware Wallet](../staking-and-delegation/using-ledger-hw-wallet.md) +Secure wallet apps include: + +- The Bittensor wallet app for mobile, by Opentensor Foundation: [bittensor.com/wallet](https://bittensor.com/wallet) +- [The Chrome extension](https://chromewebstore.google.com/detail/bittensor-wallet/bdgmdoedahdcjmpmifafdhnffjinddgc), which is also compatible with use of a Ledger hardware wallet, by Opentensor Foundation. See [Using Ledger Hardware Wallet](../staking-and-delegation/using-ledger-hw-wallet.md) +- [The Crucible wallet](https://cruciblelabs.com) by Crucible Labs a Tao wallet featuring an auto-allocator for dynamic TAO staking across subnets, with full Ledger integration. ### `btcli` and the Bittensor Python SDK @@ -101,18 +121,17 @@ The Bittensor Command Line Interface (BTCLI) and Bittensor Python SDK offer more ## Coldkey details -In `btcli`, the coldkey is equivalent to the wallet name. For example, the `--wallet.name` option in a `btcli` command always accepts only `` as its value and the `--wallet.hotkey` option only accepts `` as its value. +In `btcli`, the coldkey is equivalent to the wallet name. For example, the `--wallet.name` option in a `btcli` command always accepts only `` as its value and the `--wallet.hotkey` option only accepts `` as its value. This is because the coldkey holds the permissions and ownership over multiple hotkeys on-chain; hence, the wallet name is assigned to the coldkey. -**Relationship to hotkey**: A coldkey can exist without a hotkey or have multiple hotkeys. For example, to create a subnet, delegate stake, or simply hold balance you only need a coldkey. However, if you want to validate or mine in a subnet, you need a hotkey paired with this coldkey. +**Relationship to hotkey**: A coldkey can exist without a hotkey; it can also have multiple hotkeys. For example, to create a subnet, delegate stake, or simply hold balance you only need a coldkey. However, if you want to validate or mine in a subnet, you need a hotkey paired with this coldkey. **Purpose**: A coldkey is required for all operations that affect balances, such as transfer of TAO, staking and unstaking. It is also required for creating and registering hotkeys, and for subnet management and governance functions. -**Encryption**: A coldkey is only stored on your disk in encrypted form, and requires an encryption password. - -See [Coldkey and Hotkey Workstation Security](../getting-started/coldkey-hotkey-security) for concrete security details about working with coldkeys. +**Encryption**: A coldkey is only stored on your disk in an encrypted form, and requires an encryption password. +See [Coldkey and Hotkey Workstation Security](./coldkey-hotkey-security) for concrete security details about working with coldkeys. -### Existential deposit - -An existential deposit is the minumum required TAO in a wallet (i.e., in a coldkey). -If a wallet balance goes below the existential deposit, then this wallet account is deactivated and the remaining TAO in it is destroyed. -**This is set to 500 RAO for any Bittensor wallet**. - -See also [What is the Existential Deposit?](https://support.polkadot.network/support/solutions/articles/65000168651-what-is-the-existential-deposit-). ## Hotkey details Hotkeys are used to register on a subnet as a miner or validator. -[Hotkey workstation security](../getting-started/coldkey-hotkey-security#hotkey-workstation) +[Hotkey workstation security](./coldkey-hotkey-security#hotkey-workstation) + +**Relationship to coldkey**: You can create multiple hotkeys paired to your single coldkey. +However, when you are validating or mining in a subnet, you are identified by a hotkey in that subnet, so that your coldkey is not exposed. +You can’t use the same hotkey for multiple UIDs within a single subnet — each UID in a subnet requires its own hotkey. However, you can reuse the same hotkey for UIDs that belong to different subnets. -**Relationship to coldkey**: You can create multiple hotkeys paired to your single coldkey. -However, when you are validating or mining in a subnet, you are identified by a hotkey in that subnet, so that your coldkey is not exposed. -Hence, you cannot use the same hotkey for two UIDs in a given subnet. -You can, however, use the same hotkey for multiple UIDs but with each UID in a separate subnet. +**Purpose**: Hotkeys are used for regular operational tasks in the Bittensor network, such as those described below: -**Purpose**: Hotkeys are used for regular operational tasks in the Bittensor network, such as those described below (**Also see in the diagram in [Operational uses of keys](#operational-uses-of-keys)**): - - Signing transactions - - Registering and running subnet miners and subnet validators - - Nominating your own hotkey (given you are a subnet validator) so that the TAO holders can send their TAO to the hotkey - - Delegating your TAO to the hotkey of the validator-delegate (given you are a TAO holder with a coldkey where your TAO is stored) (See item 10 in the diagram in [Operational uses of keys](#operational-uses-of-keys).) +- Signing transactions +- Registering and running subnet miners and subnet validators +- Nominating your own hotkey (given you are a subnet validator) so that the TAO holders can send their TAO to the hotkey +- Delegating your TAO to the hotkey of the validator-delegate (given you are a TAO holder with a coldkey where your TAO is stored). ## Key usage FAQ @@ -162,13 +174,13 @@ A miner or validator may use a single coldkey to manage a number of hotkeys for ### Can I use the same hotkey for multiple UIDs in the same subnet? No. -In a given subnet, each hotkey can only be used for one UID. +In a given subnet, each hotkey can only be used for one UID. However, you can reuse the same hotkey for UIDs in different subnets. ### Can I transfer TAO to a hotkey? -Technically yes, but you shouldn't. -This is contrary to the intended design, and if you try, you may irreversably lose your funds—transfer of TAO should always be *to a coldkey*; the coldkey public key serves as the public address of the wallet. +Technically yes, but you shouldn't. +This is contrary to the intended design, and if you try, you may irreversably lose your funds—transfer of TAO should always be _to a coldkey_; the coldkey public key serves as the public address of the wallet. ### Is a coldkey associated with a subnet? @@ -186,4 +198,3 @@ This is in the form of stake to their hotkey owned by their coldkey, which can t As a TAO holder, you can stake or delegate to a validator on a subnet by exchanging your TAO for a stake balance in the subnet's alpha $\alpha$ token, which is always tied to a hotkey in the subnet, i.e. that of a validator. See [Staking/Delegation Overview](../staking-and-delegation/delegation) for more on staking. - diff --git a/docs/working-with-keys.md b/docs/keys/working-with-keys.md similarity index 54% rename from docs/working-with-keys.md rename to docs/keys/working-with-keys.md index 7df20d6b34..7311e6017e 100644 --- a/docs/working-with-keys.md +++ b/docs/keys/working-with-keys.md @@ -4,97 +4,179 @@ title: "Creating/Importing a Bittensor Wallet" import ThemedImage from '@theme/ThemedImage'; import useBaseUrl from '@docusaurus/useBaseUrl'; +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +import { SdkVersion } from "../sdk/_sdk-version.mdx"; # Creating/Importing a Bittensor Wallet -In Bittensor (like other cryptocurrency applications), a *wallet* is a tool for proving your identity, signing transactions, accessing your TAO, and managing your stake in subnets. +In Bittensor (like other cryptocurrency applications), a _wallet_ is a tool for proving your identity, signing transactions, accessing your TAO, and managing your stake in subnets. This page describes several different ways to instantiate your wallet keypairs into a wallet application, in order to interact with the Bittensor blockchain. Recommended background reading: -- For an introduction to the core concepts, see [wallets and keys in Bittensor](getting-started/wallets.md). -- For discussion of security considerations about working with Bittensor wallets, see [Coldkey and Hotkey Workstation Security](./getting-started/coldkey-hotkey-security). +- For an introduction to the core concepts, see [wallets and keys in Bittensor](./wallets.md). -:::tip -The most critical operational goal when handling Bittensor wallets is to avoid losing or leaking your seed phrase. Make sure you [Handle your Seed Phrase/Mnemonic Securely](../keys/handle-seed-phrase). +- For discussion of security considerations about working with Bittensor wallets, see [Coldkey and Hotkey Workstation Security](./coldkey-hotkey-security). + +:::tip Protect your seed phrase +The most critical operational goal when handling Bittensor wallets is to avoid losing or leaking your seed phrase. Make sure you [Handle your Seed Phrase/Mnemonic Securely](./handle-seed-phrase). +::: + +:::tip Use proxies for regular operations +Once you've created your wallet, consider setting up **proxy wallets** for any operations you'll perform regularly. Proxies let you keep your coldkey in secure cold storage while still managing stake, making transfers, or performing other operations through a less-privileged proxy account. + +See [Proxies: Overview](./proxies/index.md) to learn more. ::: ## Creating a wallet with `btcli` -### Creating a coldkey-only wallet + + +If you intend to mine or validate within a subnet, or create and manage a subnet, you’ll need both a coldkey and a hotkey. If you already have a coldkey, you can [create a new hotkey](?create-wallet=hotkey) for it. + +To create a new coldkey and hotkey, run the following command in the terminal: + +```bash +btcli wallet create --wallet.name --wallet.hotkey +``` -Users that will not mine, validate, manage subnets or participate in governance do not need a hotkey, and for simplicity's sake should use coldkey-only wallets. +:::info +Use the below command to generate the hotkey. Replace `` with the name of the coldkey generated above, and `` with a name for your hotkey. -Run the following command to create a coldkey-only wallet. +For example, + +```bash +btcli wallet create --wallet.name test-coldkey --wallet.hotkey test-hotkey +``` + +::: + +Next, you will be prompted to configure the wallet by setting a password for the coldkey, and choosing the desired mnemonic length. Completing the prompts creates a complete Bittensor wallet by setting up both coldkey and hotkeys. A unique mnemonic is generated for each key and output to the terminal upon creation. + +:::tip Regenerating the wallet keys +Take note of the mnemonics in the response as they are required to regenerate your coldkey and hotkey. To regenerate your coldkey, run the following command in the terminal: + +```sh +btcli wallet regen_coldkey --mnemonic "word1 word2 ... word12" +``` + +Similarly, run the following command in the terminal to regenerate your hotkey: + +```sh +btcli wallet regen_hotkey --mnemonic "word1 word2 ... word12" +``` + +::: + + + +If a user does not intend to mine, validate, manage subnets, or participate in governance, a hotkey is not required. In such cases, a coldkey-only wallet is recommended for simplicity. + +Run the following command to create a coldkey-only wallet: ```bash btcli wallet new_coldkey --wallet.name ``` -For example, +For example, + ```bash btcli wallet new_coldkey --wallet.name test-coldkey ``` -You will see the terminal output like the following, which includes your all-important seed phrase, a.k.a. the *mnemonic* to the coldkey. + +You will see the terminal output like the following, which includes your all-important seed phrase, a.k.a. the _mnemonic_ to the coldkey. ```text IMPORTANT: Store this mnemonic in a secure (preferable offline place), as anyone who has possession of this mnemonic can use it to regenerate the key and access your tokens. -The mnemonic to the new coldkey is: paddle disagree swamp hill innocent enemy name shrug produce steak pupil joke -You can use the mnemonic to recreate the key with `btcli` in case it gets lost. +The mnemonic to the new hotkey is: **** *** **** **** ***** **** *** **** **** **** ***** ***** +You can use the mnemonic to recreate the key in case it gets lost. ``` -### Creating a hotkey +:::tip Regenerating the coldkey +Take note of the mnemonic in the response as it is required to regenerate your coldkey. To regenerate your coldkey, run the following command in the terminal: -If you plan to validate or mine in a subnet, you must create both a coldkey and a hotkey. +```sh +btcli wallet regen_coldkey --mnemonic "word1 word2 ... word12" +``` -First, create a coldkey as described above in the [Creating a coldkey using `btcli`](#creating-a-coldkey-using-btcli). Then, provide this coldkey as a parameter to generate a hotkey. This will pair the hotkey with the coldkey. See below. +::: -Use the below command to generate the hotkey. Replace `` with the coldkey generated above, and `` with a name for your hotkey. + + +If you plan to validate or mine in a subnet, you must create both a coldkey and a hotkey. A hotkey is also required when creating and managing subnets. + +Before creating a hotkey, you must have created a coldkey as described in the [creating a coldkey tab](?create-wallet=coldkey). Next, provide this coldkey as a parameter to generate a hotkey. This will pair the hotkey with the coldkey as shown: ```bash btcli wallet new_hotkey --wallet.name --wallet.hotkey ``` -For example, +:::info +Use the below command to generate the hotkey. Replace `` with the name of the coldkey generated above, and `` with a name for your hotkey. + +For example, + ```bash btcli wallet new_hotkey --wallet.name test-coldkey --wallet.hotkey test-hotkey ``` +::: + You will see the terminal log like below. The mnemonic is hidden for security reasons. + ```text IMPORTANT: Store this mnemonic in a secure (preferably offline place), as anyone who has possession of this mnemonic can use it to regenerate the key and access your tokens. The mnemonic to the new hotkey is: **** *** **** **** ***** **** *** **** **** **** ***** ***** -You can use the mnemonic to recreate the key in case it gets lost. The command to use to regenerate the key using this mnemonic is: -btcli w regen_hotkey --mnemonic **** *** **** **** ***** **** *** **** **** **** ***** ***** +You can use the mnemonic to recreate the key in case it gets lost. ``` + :::tip Regenerating the hotkey -Make a note of the above command option `regen_hotkey` showing how to regenerate your hotkey in case you lose it. +Take note of the mnemonic in the response as it is required to regenerate your hotkey. To regenerate your hotkey, run the following command in the terminal: + +```sh +btcli wallet regen_hotkey --mnemonic "word1 word2 ... word12" +``` + ::: + + + +--- + ### Encrypting the hotkey -By default, the hotkey is not encrypted on the device, whereas the coldkey is encrypted. To encrypt your hotkey, run this command: +By default, a hotkey is not encrypted on the device, whereas the coldkey is encrypted. To encrypt your hotkey, include the `--use-password` in the hotkey creation command as shown: + ```bash -btcli wallet new_hotkey --use-password +btcli wallet new_hotkey --use-password --wallet.name test-coldkey --wallet.hotkey test-hotkey ``` ## Creating a wallet using Python -Copy and paste the following three lines into your Python interpreter. Replace the string values for `name` (`my_coldkey`) and `hotkey` (`my_hotkey`) with your own. + + + + +If you intend to mine or validate within a subnet, or create and manage a subnet, you’ll need both a coldkey and a hotkey. If you already have a coldkey, you can [create a new hotkey](?create-wallet=hotkey) for it. + +To create a wallet with Python, copy and paste the following three lines into your Python interpreter. Replace the string values for `name` (`my_coldkey`) and `hotkey` (`my_hotkey`) with your own. ```python showLineNumbers import bittensor as bt -wallet = bt.wallet(name = 'my_coldkey', hotkey = 'my_hotkey' ) +wallet = bt.Wallet(name = 'my_coldkey', hotkey = 'my_hotkey' ) wallet.create_if_non_existent() ``` You will see a terminal output like this for an example wallet with `name` as `test-coldkey` and `hotkey` as `test-hotkey`. The mnemonic is hidden for security reasons. -```text + +```text >>> import bittensor as bt ->>> wallet = bt.wallet(name = 'test-coldkey', hotkey = 'test-hotkey') +>>> wallet = bt.Wallet(name = 'test-coldkey', hotkey = 'test-hotkey') >>> wallet.create_if_non_existent() IMPORTANT: Store this mnemonic in a secure (preferable offline place), as anyone who has possession of this mnemonic can use it to regenerate the key and access your tokens. @@ -103,31 +185,82 @@ The mnemonic to the new coldkey is: **** **** **** **** **** **** **** **** **** **** **** **** -You can use the mnemonic to recreate the key in case it gets lost. The command to use to regenerate the key using this mnemonic is: -btcli w regen_coldkey --mnemonic **** **** **** **** **** **** **** **** **** **** **** **** - -Specify password for key encryption: +You can use the mnemonic to recreate the key with `btcli` in case it gets lost. +Enter your password: Retype your password: +Encrypting... +wallet(test-coldkey, test-hotkey, ~/.bittensor/wallets/) +``` + +:::info Encrypting the hotkey +Since the coldkey is encrypted by default, the command above only encrypts the newly created coldkey. To encrypt your hotkey when creating a wallet, include the `hotkey_use_password=True` parameter in the `wallet.create_if_non_existent()` method as shown: + +```python showLineNumbers +import bittensor as bt +wallet = bt.Wallet(name = 'my_coldkey', hotkey = 'my_hotkey') +wallet.create_if_non_existent(hotkey_use_password=True) +``` +Then, you will be prompted to configure the wallet by setting a password for both the coldkey and the hotkey. +::: + + + +If a user does not intend to mine, validate, manage subnets, or participate in governance, a hotkey is not required. In such cases, a coldkey-only wallet is recommended for simplicity. + +Copy and paste the following lines into your Python interpreter. Replace the string values for `name` (`my_coldkey`) with your own. + +```python showLineNumbers +import bittensor as bt +wallet = bt.Wallet(name = 'my_coldkey') +wallet.create_new_coldkey() +``` + +You will be prompted to input a password for the coldkey and then see the terminal output, which includes your all-important seed phrase, a.k.a. the _mnemonic_ to the coldkey. + +```text IMPORTANT: Store this mnemonic in a secure (preferable offline place), as anyone who has possession of this mnemonic can use it to regenerate the key and access your tokens. -The mnemonic to the new hotkey is: +The mnemonic to the new hotkey is: **** *** **** **** ***** **** *** **** **** **** ***** ***** +You can use the mnemonic to recreate the key in case it gets lost. +``` -**** **** **** **** **** **** **** **** **** **** **** **** + + +If you plan to validate or mine in a subnet, you must have both a coldkey and a hotkey. A hotkey is also required when creating and managing subnets. -You can use the mnemonic to recreate the key in case it gets lost. The command to use to regenerate the key using this mnemonic is: -btcli w regen_hotkey --mnemonic **** **** **** **** **** **** **** **** **** **** **** **** +Before creating a hotkey, you must have created a coldkey as described in the [creating a coldkey tab](?create-wallet=coldkey). Next, provide this coldkey as a parameter to generate a hotkey. This will pair the hotkey with the coldkey as shown: -wallet(test-coldkey, test-hotkey, ~/.bittensor/wallets/) +```python showLineNumbers +import bittensor as bt +wallet = bt.Wallet(name = 'my_coldkey') +wallet.create_new_hotkey() ``` +:::info Encrypting the hotkey +To encrypt your hotkey when creating a wallet, include the `use_password=True` parameter in the `wallet.create_new_hotkey()` method as shown: + +```python showLineNumbers +import bittensor as bt +wallet = bt.Wallet(name = 'my_coldkey') +wallet.create_new_hotkey(use_password=True) +``` + +Then, you will be prompted to configure the wallet by setting a password for both the hotkey. +::: + + + + +--- + ## Location and addresses of the local wallets Both `btcli` and the Bittensor Python SDK use a local wallet/key store. By default, this is located on your machine at `~/.bittensor/wallets`. Use the below command to list them: ```bash tree ~/.bittensor/ -``` +``` You will see an output like this: @@ -159,7 +292,7 @@ cat coldkeypub.txt | jq The contents of the `coldkeypub.txt` are to be interpreted as below: -- The fields `accountId` and `publicKey` contain the same value. +- The fields `accountId` and `publicKey` contain the same value. - The `secretPhrase` and `secretSeed` are not included in the file due to the high-security nature of the coldkey. When you create your wallet, either using the Chrome extension or `btcli`, the mnemonic (`secretPhrase`) is shown only once, while `secretSeed` is not shown. - The `ss58Address` is the SS58-version of the `accountId` or `publicKey`. **This is your coldkey's public address, and can be used to transfer TAO from another wallet.** @@ -183,21 +316,24 @@ cat hotkeys/test-hotkey | jq The contents of the `hotkeys/test-hotkey` file are to be interpreted as below: -- The fields `accountId` and `publicKey` contain the same value, just as seen in `coldkeypub.txt`. +- The fields `accountId` and `publicKey` contain the same value, just as seen in `coldkeypub.txt`. - The `secretPhrase` and `secretSeed` are shown because the hotkey is, by default, not encrypted. - The `ss58Address` is the SS58-version of the `accountId` or `publicKey`. **This is your hotkey's public address and can be used to stake/delegate to your hotkey from other wallets.** :::danger -Hotkeys are for staking. Do not *transfer* TAO to a hotkey! +Hotkeys are for staking. Do not _transfer_ TAO to a hotkey! ::: ## Listing all the local wallets You can list all the local wallets stored in Bittensor's root directly with: + ```bash btcli wallet list ``` + You will see a terminal output like this: + ```text Wallets └─ @@ -213,7 +349,7 @@ Use the above shown `ss58Address` field values as your public wallet addresses, ## Store your mnemonics safely -:::danger If someone has your mnemonic, they own your TAO +:::danger If someone has your mnemonic, they own your TAO If you lose the password to your wallet, or if you have lost access to the machine where the wallet is stored, you can regenerate the coldkey using the mnemonic you saved during the wallet creation steps above. You can **not** retrieve the wallet with the password alone. Remember that if someone has your mnemonic, they own your TAO. ::: @@ -228,11 +364,11 @@ btcli wallet regen_coldkey --mnemonic **** *** **** **** ***** **** *** **** *** [The Chrome extension...](https://chromewebstore.google.com/detail/bittensor-wallet/bdgmdoedahdcjmpmifafdhnffjinddgc) :::tip Suitable for non-technical users -Use this option if your activities are limited to sending and receiving TAO and you are not creating a subnet or participating as a subnet validator or a subnet miner. +Use this option if your activities are limited to sending and receiving TAO and you are not creating a subnet or participating as a subnet validator or a subnet miner. ::: -1. The Wallet will first create a wallet account address in the form of a 48-hexadecimal character string that usually starts with `5`. -2. Critically, the Wallet will display your [*seed phrase*](./getting-started/wallets#the-seed-phrase-aka-mnemonic), which you must carefully save. +1. The Wallet will first create a wallet account address in the form of a 48-hexadecimal character string that usually starts with `5`. +2. Critically, the Wallet will display your [_seed phrase_](./wallets#the-seed-phrase-aka-mnemonic), which you must carefully save. 3. The Wallet will then prompt you for specific mnemonic words as a way of authentication. 4. Next, you will assign a name and a password to your wallet account. 5. Finally, to receive TAO from another party, you will give them your wallet account address from Step 1 (the 48-hexadecimal character string) as the destination address. Similarly, to send (transfer) TAO to another party, you will first ask them for their wallet address and send TAO to their wallet address. This way, you can create multiple wallet accounts, each with a different name and even a different password for each wallet account. @@ -242,13 +378,16 @@ Use this option if your activities are limited to sending and receiving TAO and It is important that you update any legacy Bittensor wallets to the new NaCL format for security. You may accomplish this with the `btcli` using the `wallet update` subcommands. See the below example command and the terminal output: + ```bash btcli wallet update ``` + You will see an output like this: + ```bash >> Do you want to update all legacy wallets? [y/n]: y >> ===== wallet(test-coldkey, default, ~/.bittensor/wallets/) ===== ->> ✅ Keyfile is updated. +>> ✅ Keyfile is updated. >> 🔑 Keyfile (NaCl encrypted, /Users/docwriter/.bittensor/wallets/test-coldkey/coldkey)> ``` diff --git a/docs/learn/anatomy-of-incentive-mechanism.md b/docs/learn/anatomy-of-incentive-mechanism.md index d2b92f63c3..dc39164035 100644 --- a/docs/learn/anatomy-of-incentive-mechanism.md +++ b/docs/learn/anatomy-of-incentive-mechanism.md @@ -6,23 +6,37 @@ title: "Understanding Incentive Mechanisms" This page explores the concept and usage of incentive mechanisms in Bittensor. -See [Components of the Bittensor platform](../learn/bittensor-building-blocks) for an explanation of the basics, such as subnets, miners, validators, and the role of the blockchain. +See [Components of the Bittensor platform](../learn/neurons) for an explanation of the basics, such as subnets, miners, validators, and the role of the blockchain. -Each subnet has its own *incentive mechanism*, a scoring model that drives the behavior of its participants, and the production of the subnet's digital commodity, by defining **how validators are to evaluate miners’ work**. Miners are incentivized to optimize for this model so validators will score (or 'weight') their work highly, resulting in higher emissions. Validators are incentivized to accurately score miners' work according to the model because the algorithm penalizes departure from consensus in miner scores with lower emissions. +Each subnet has one or more _incentive mechanisms_, scoring models that drive the behavior of participants and the production of the subnet's digital commodity by defining **how validators are to evaluate miners' work**. Miners are incentivized to optimize for these models so validators will score (or 'weight') their work highly, resulting in higher emissions. Validators are incentivized to accurately score miners' work according to the models because the algorithm penalizes departure from consensus in miner scores with lower emissions. -Each validator on a subnet is responsible for periodically computing a vector of weights assigned to each miner, representing an aggregate ranking based on the miners' performance. Validators transmit these **weight vectors** to the blockchain. Typically, each subnet validator transmits an updated ranking weight vector to the blockchain every 100-200 blocks. +When a subnet uses multiple incentive mechanisms, each mechanism operates independently with its own bond pool for [Yuma Consensus](./yuma-consensus) calculations, allowing subnet creators to distribute emissions across different types of work or evaluation criteria. -The Bittensor blockchain waits for the latest ranking weight vectors from all the subnet validators of a given subnet, then forms a **weight matrix** from these ranking/weight vectors, which is then provided as input to the Yuma Consensus module on-chain. Yuma Consensus (YC) uses this weight matrix, along with the amount of stake associated with each UID on the subnet, to calculate emissions to each participant within each subnet. These emissions are finalized and debited to participants' hotkeys at the end of each *tempo* or 360 blocks. +Each validator on a subnet is responsible for periodically computing vectors of weights assigned to each miner for each incentive mechanism, representing aggregate rankings based on the miners' performance in each mechanism. Validators transmit these **weight vectors** to the blockchain. + +The Bittensor blockchain waits for the latest rankings/weight vectors from all the validators of a given subnet, then forms **weight matrices** from these rankings (one matrix per incentive mechanism), which are then provided as input to the Yuma Consensus module on-chain. Yuma Consensus (YC) uses these weight matrices, along with the amount of stake associated with each UID on the subnet, to calculate emissions to each participant within each mechanism. These emissions are finalized and debited to participants' hotkeys at the end of each _tempo_ or 360 blocks. :::tip note The tempo duration (360 blocks) is the same for all the user-created subnets. However, the timing of tempos can differ among subnets, depending on when they were created. ::: +## Multiple Incentive Mechanisms + +Subnets can implement multiple incentive mechanisms to evaluate different aspects of miner performance or to support diverse tasks within a single subnet. This allows subnet creators to: + +- **Distribute emissions across different tasks**: Allocate specific percentages of subnet emissions to different types of work +- **Maintain independent evaluation**: Each mechanism operates with separate bond pools, so miner performance in one mechanism doesn't affect their rating in another +- **Enable specialized competition**: Miners can excel in specific mechanisms that match their capabilities +- **Provide transparent control**: All emission distributions and mechanism configurations are visible on-chain + + +For detailed information about implementing and managing multiple incentive mechanisms, see [Multiple Incentive Mechanisms Within Subnets](../subnets/understanding-multiple-mech-subnets). + ## Subnet creator responsibilities In order for a subnet to succeed, the creator must: -- Design an incentive mechanism that guides miners' relentless tendency to opimize their scores (and hence emissions) toward the desired outcomes +- Design an incentive mechanism that guides miners' relentless tendency to optimize their scores (and hence emissions) toward the desired outcomes - Facilitate miner and validator participation - Prevent miner and validator exploits @@ -43,7 +57,7 @@ After a subnet validator registers into your subnet, they will run the validator A well-designed incentive mechanism fosters a virtuous cycle, where competition drives continuous miner improvement. Conversely, a flawed mechanism encourages shortcuts and exploits that degrade the subnet’s integrity and undermine participation. -Ensure that your IM is proofed against gaming or unintended shortcuts through thorough modeling, testing, and community vetting. As a subnet creator, expect to continuously monitor miner performance and update your IM to fine-tune it as needed. +Ensure that your incentive mechanism is proofed against gaming or unintended shortcuts through thorough modeling, testing, and community vetting. As a subnet creator, expect to continuously monitor miner performance and update your mechanism to fine-tune it as needed. ### Design incentive mechanism @@ -63,11 +77,11 @@ A subnet incentive mechanism must provide the following: A subnet creator must define a protocol for how validators are to query miners, and how miners should respond. Protocols are built using the Axon-Dendrite client-server model and Synapse data objects. -See [Neuron to neuron communication](./bittensor-building-blocks.md#neuron-to-neuron-communication). +See [Neuron to neuron communication](./neurons.md#neuron-to-neuron-communication). ### Subnet task -The task is one of the key components of any incentive mechanism as it defines what miners will perform as work. Examples of tasks are responding to natural language prompts and storing encrypted files. The task should be designed to capture intended use case for commodity to be produced by the subnet. Generally, the task should realistically mimic an intended user interaction with a subnet. +The task is one of the key components of any incentive mechanism as it defines what miners will perform as work. Examples of tasks are responding to natural language prompts and storing encrypted files. The task should be designed to capture intended use case for commodity to be produced by the subnet. Generally, the task should realistically mimic an intended user interaction with a subnet. ### Subnet scoring model @@ -77,7 +91,7 @@ As with any machine learning model, a subnet has an objective function that it i Operationally, it is the mathematical object that converts miner responses into numerical scores. A scoring model can in fact contain as many different scoring mechanisms as are necessary to align miners with the intended task. -Miners will continuously compete to achieve the highest score possible, since it determines their emissions. If the score is capped at an upper limit, miners may not be motivated to improve further. Hence care should be taken to enable continuous improvement of the miner, rather than stagnation. +Miners will continuously compete to achieve the highest score possible, since it determines their emissions. If the score is capped at an upper limit, miners may not be motivated to improve further. Hence, care should be taken to enable continuous improvement of the miner, rather than stagnation. :::tip The zen of incentive mechanisms Subnets should be endlessly improving. @@ -86,11 +100,11 @@ Subnets should be endlessly improving. ## Additional considerations for incentive mechanism design - Take miner hardware into account, where it may cause differences in output, or in judging performance. -- Set tight similarity thresholds if exact reproducibility is challenging. For example, compare embeddings (like CLIP) or apply perceptual hashing. +- Set tight similarity thresholds if exact reproducibility is challenging. For example, compare embeddings (like [CLIP](https://github.com/OpenAI/CLIP)) or apply perceptual hashing. - Take steps to prevent miners from precomputing or caching results: - - Use validator-provided random seeds; avoid letting miners control all the randomness in the output. - - Introduce small input variations. - - Ensure your scoring logic prevents partial outputs from being judged as similar to complete results. + - Use validator-provided random seeds; avoid letting miners control all the randomness in the output. + - Introduce small input variations. + - Ensure your scoring logic prevents partial outputs from being judged as similar to complete results. - Consider carefully how to balance speed, reliability, and quality. - Consider incorporating organic queries into the validation process. - Expect to frequently release updates that refine your incentive mechanism and address emergent exploits or other points of suboptimality. The best subnets update frequently, accomodating new hardware, new models, and new miner behaviors. diff --git a/docs/learn/announcements.md b/docs/learn/announcements.md new file mode 100644 index 0000000000..1754f7660b --- /dev/null +++ b/docs/learn/announcements.md @@ -0,0 +1,146 @@ +--- +title: "Announcements and Developments" +--- + +# Announcements and Developments + +This page tracks recent and upcoming changes to the Bittensor protocol and other major events in the Bittensor ecosystem. + +**December, 2025** + +## Upcoming TAO halving + +The first TAO halving event is approaching, which will reduce block rewards by 50%—0.5 TAO per block. This change means less liquidity will be injected each block into the subnet pools. For more information, see the [TAO halving documentation](../concepts/halving.md). + +You can track the halving schedule and countdown on the [tao.app explorer](https://tao.app/halving), which provides real-time block data and the estimated time remaining until the reward reduction occurs. + +## Proxies + +**Status**: Implemented + +- **What**: Proxies allow one wallet to perform Bittensor operations on behalf of another, adding a security layer for valuable wallets. +- **Key Features**: + - Keep high-value coldkeys in cold storage while using proxies for daily operations. + - Constrain proxy permissions using `ProxyType` (e.g., staking-only, transfer-only). + - Add time-lock delays with public announcements for high-risk actions. + +For detailed information, see: [Proxies Overview](../keys/proxies/index.md). + +## MEV Shield + +**Status**: Implemented + +MEV Shield encrypts transactions to protect them from maximal extractable value (MEV) attacks. + +For detailed information, see: [MEV Shield](../sdk/mev-protection.md). + +## Bittensor SDK v10 + +**Status**: Released + +A new major version of the Bittensor SDK has arrived! + +See: [Bittensor SDK v10 Migration guide](../sdk/migration-guide). + +--- + +**October, 2025** + +## Root claim + +**Status**: Implemented + +- **What**: Root claim replaces the automatic selling of root-alpha dividends and allows users to either accumulate their alpha dividends or enable autosell to sell them off immediately. +- **Key Features**: + - Taking no action means your root alpha is kept as Alpha tokens (the new default is `Keep`). + - Auto-claims happen automatically and randomly—roughly once every two days per account. Your `Keep`/`Swap` setting will apply. + - To swap your alpha to TAO, call the `set_root_claim_type(Swap)` extrinsic. + - Manually claim accumulated alpha on specific subnets by calling the `claim_root()` extrinsic and providing the list of subnets. + +## Subnet UID trimming + +**Status**: Implemented (Merged) + +- **What**: UID trimming allows subnet owners to reduce the number of neuron UIDs registered on their subnet, compressing the remaining UIDs to maintain consecutive indexing. +- **Key Features**: + - Now allows subnet owners to increase maximum UID count after previous trimming. + - Removes the lowest-performing neurons based on emission scores. + - Both temporally immune UIDs and owner-owned UIDs are protected from trimming. + - After trimming, remaining UIDs are compressed to the left to maintain consecutive indexing + +For detailed information, see: [UID trimming](../subnets/uid-trimming.md). + +## Multiple Incentive Mechanisms Within Subnets + +**Status**: Implemented (Merged) + +- **What**: Multiple incentive mechanisms allow subnet owners to apportion emissions across different evaluation criteria, each running Yuma Consensus independently with separate bond pools +- **Key Features**: + - Enables up to 2 incentive mechanisms (IDs 0,1) within each subnet for multi-task validation. + - Fully backward-compatible with existing miners and validators via mechanism ID 0 + - Each mechanism has its own weight matrix and independent bond pools for consensus calculations + - All validators participate in all mechanisms with identical stake weights +- Miners can automatically participate in any of the subnet's mechanisms when registering for a subnet + - **Emission distribution control**: Subnet owners can set custom emission distributions using the `sudo_set_subsubnet_emission_split` extrinsic + - **Immediate mechanism number setting**: No onset period - changes take effect immediately + - **Rate limiting**: Subnet owners can set mechanism numbers once per 7200 blocks + +For detailed information, see: [Multiple Incentive Mechanisms Within Subnets](../subnets/understanding-multiple-mech-subnets) + +## Hyperparameter Rate Limiting + +**Status**: WIP + +- **What**: Prevents subnet owners from changing hyperparameters too frequently +- **Rules**: Cannot change hyperparameters in last 10 blocks of a tempo +- **Purpose**: Prevent exploitation where subnet owners kick off root validators to take full incentives +- **Implementation**: Applies 7,200-block rate limit to prevent subnet owner exploitation + +See [Rate Limits in Bittensor](../learn/chain-rate-limits.md). + +## Child Key Fee + +A percentage fee will be deducted from emissions bound to validator hotkeys through a _child hotkey_ relationship. This is designed to more highly incentivize validators who perform validation work, over child-key-only validators. It is being gradually rolled out to reduce surprise for the community and allow validators to adjust. + +**Status**: Implemented (Merged) + +- **Plan**: + - Start at 1% (September 10) + - 30-day delay + - Increase by 1% per day for 17 days + - Final rate: 18% + +## Changes to the Subnet Registration/Deregistration Process + +**Status**: Ready for deployment on September 16, 2025 + +- **Key Changes**: + + - Subnet limit remains at 128 initially with no new registrations available immediately + - Immunity period reduced from 6 months to 4 months from registration block + - Network rate limit increased to 4 days between registrations + - Initial lock cost set at 1,000 TAO with standard linear decay mechanism + - First deregistrations available approximately September 23 (one week after deployment) + + See: [Subnet Deregistration](../subnets/subnet-deregistration) + +## Auto-Staking for Miners + +**Status**: Implemented (Merged) + +- **What**: Miners can automatically stake their mining income to a validator of their choice +- **Implementation**: + - New extrinsics `set_coldkey_auto_stake_hotkey` and `get_coldkey_auto_stake_hotkey` + - Set per coldkey, affects all miner hotkeys + - No transaction fees required + - Reduces sell pressure by allowing automatic delegation of mining rewards + - Event emission system being added to distinguish mining vs staking rewards for proper accounting + - Requires CLI support for configuration and management + +## Registration Fee Controls + +**Status**: Deployed + +- **What**: Subnet owners can configure neuron registration fees +- **Implementation**: + - Subnet owners can configure neuron registration fees between 0.1 and 1 TAO diff --git a/docs/learn/bittensor-building-blocks.md b/docs/learn/bittensor-building-blocks.md deleted file mode 100644 index 5e2c1b6ce3..0000000000 --- a/docs/learn/bittensor-building-blocks.md +++ /dev/null @@ -1,79 +0,0 @@ ---- -title: "Understanding Neurons" ---- - -import ThemedImage from '@theme/ThemedImage'; -import useBaseUrl from '@docusaurus/useBaseUrl'; - -# Understanding Neurons - -The design of Bittensor subnets is inspired by the structure of a simple neural network, with each **neuron** being either a miner or validator. - -:::tip Neuron requirements -See [minimum compute requirements](https://github.com/opentensor/bittensor-subnet-template/blob/main/min_compute.yml) for compute, memory, bandwidth and storage requirements for neurons. -::: - - -## Neuron Architecture Overview - -Neurons in a subnet operate within a server-client architecture: - -- Axon (Server): Miners deploy Axon servers to receive and process data from validators. -- Dendrite (Client): Validators use Dendrite clients to transmit data to miners. -- Synapse (Data Object): Encapsulates and structures data exchanged between neurons. - -Additionally, the [Metagraph serves as a global directory for managing subnet nodes, while the Subtensor connects neurons to the blockchain. - - -## Neuron-to-neuron communication - -Neurons exchange information by: -- Encapsulating the information in a Synapse object. -- Instantiating server (Axon) and client (dendrite) network elements and exchanging Synapse objects using this server-client (Axon-dendrite) protocol. See the below diagram. - -
- -
- -### Axon - -The `axon` module in Bittensor API uses FastAPI library to create and run API servers. For example, when a subnet miner calls, -```python -axon = bt.axon(wallet=self.wallet, config=self.config) -``` -then an API server with the name `axon` is spawned on the subnet miner node. This `axon` API server receives incoming Synapse objects from subnet validators, i.e., the `axon` starts to serve on behalf of the subnet miner. - -Similarly, in your subnet miner code you must use the `axon` API to spawn an API server to receive incoming Synapse objects from the subnet validators. - -### Dendrite - -Axon is a **server** instance. Hence, a subnet validator will instantiate a `dendrite` **client** on itself to transmit information to axons that are on the subnet miners. For example, when a subnet validator runs the below code fragment: - -```python - responses: List[bt.Synapse] = await self.dendrite( - axons=axons, - synapse=synapse, - timeout=timeout, - ) -``` - -then the subnet validator: -- Has instantiated a `dendrite` client on itself. -- Transmitted `synapse` objects to a set of `axons` (that are attached to subnet miners). -- Waits until `timeout` expires. - -### Synapse - -Synapse is a data object. Subnet validators and subnet miners use Synapse data objects as the main vehicle to exchange information. The Synapse class inherits from the `BaseModel` of the Pydantic data validation library. - -For example, in the [Text Prompting Subnet](https://github.com/macrocosm-os/prompting/blob/414abbb72835c46ccc5c652e1b1420c0c2be5c03/prompting/protocol.py#L27), the subnet validator creates a Synapse object, called PromptingSynapse, with three fields. The fields `roles` and `messages` are set by the subnet validator during the initialization of this Prompting data object, and they cannot be changed after that. A third field, `completion`, is mutable. When a subnet miner receives this Prompting object from the subnet validator, the subnet miner updates this `completion` field. The subnet validator then reads this updated `completion` field. - -## The Neuron Metagraph - -A metagraph is a data structure that contains comprehensive information about current state of the subnet. When you inspect the metagraph of a subnet, you will find detailed information on all the nodes (neurons) in the subnet. A subnet validator should first sync with a subnet's metagraph to know all the subnet miners that are in the subnet. The metagraph can be inspected without participating in a subnet. \ No newline at end of file diff --git a/docs/learn/chain-rate-limits.md b/docs/learn/chain-rate-limits.md new file mode 100644 index 0000000000..b3674a8397 --- /dev/null +++ b/docs/learn/chain-rate-limits.md @@ -0,0 +1,187 @@ +--- +title: "Rate Limits" +--- + +# Rate Limits + +This page reviews all rate limits implemented in the Bittensor blockchain (Subtensor). Rate limits prevent spam, ensure network stability, and maintain fair access to network resources. Rate limits in Bittensor are implemented as block-based cooldown periods. When a rate-limited operation succeeds, subsequent attempts to perform the same operation must wait for a specified number of [blocks](../resources/glossary.md#block) to pass before they can be executed again. Unsuccessful operations may be re-tried. + +:::info +To check/confirm current rate limits and other chain state variables on the blockchain, use the Polkadot.js chain explorer. + +To view the chain state for Bittensor main network ('finney'), visit [`https://polkadot.js.org/apps`](https://polkadot.js.org/apps), choose Bittensor network, and click **Chain State** under the **Developer** tab, or visit: + +[`https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Fbittensor-finney.api.onfinality.io%2Fpublic-ws#/chainstate`](https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Fbittensor-finney.api.onfinality.io%2Fpublic-ws#/chainstate). + +Most relevant attributes are under the `subtensorModule`. +::: + +## Global rate limits + +This section discusses rate limits that apply globally across the entire network. + +### General transaction rate limit + +This is the default transaction rate limit in Bittensor, but it currently only applies to hotkey swaps (other rate limited transactions are handled by custom rate limits). + +- Rate Limit: 1 block (12 sec) +- Chain State Variable: `TxRateLimit` +- Error message: [`TxRateLimitExceeded`](../errors/subtensor.md#txratelimitexceeded) + +### Delegate take rate limit + +This rate limit prevents frequent changes to delegate take percentages. + +- Rate Limit: 216,000 blocks (~30 days) +- Chain State Variable: `TxDelegateTakeRateLimit` +- Error message: [`DelegateTxRateLimitExceeded`](../errors/subtensor.md#delegatetxratelimitexceeded) + + +### Hotkey swap rate limit + +This rate limit prevents a user from swapping a hotkey too frequently. Hotkey swaps are subject to **two separate rate limits** that must both be satisfied: + +- Rate Limit: + - General transaction: 1 block (12 seconds) + - Per-subnet: 36,000 blocks (~5 days) +- Chain State Variables: + - `TxRateLimit` (general transaction rate limit) + - `HotkeySwapOnSubnetInterval` (global interval constant, not queryable from chain state) +- Source Code: [swap_hotkey.rs](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/swap/swap_hotkey.rs#L52-56) +- Error message: [`HotKeySetTxRateLimitExceeded`](../errors/subtensor.md#hotkeysettxratelimitexceeded) + +### UID trimming rate limit + +This rate limit controls how frequently subnet owners can trim UIDs on their subnets. This prevents disruptions in subnet stability and excessive network reorganization. + +- Rate Limit: 216,000 blocks (~30 days) on main net; 1 block in 'fastblocks' development mode. +- Chain State Variable: `MaxUidsTrimmingRateLimit` (Not queryable from chain state) +- Error message: [`TxRateLimitExceeded`](../errors/subtensor.md#txratelimitexceeded) + +### Network registration rate limit + +This rate limit prevents frequent creation of new subnets. + +- Rate Limit: 28,800 blocks (4 days) +- Chain State Variable: `NetworkRateLimit` +- Error message: [`NetworkTxRateLimitExceeded`](../errors/subtensor.md#networktxratelimitexceeded) + +### Owner hyperparameter rate limit + +This rate limit controls how frequently subnet owners can modify hyperparameters. The limit is enforced independently per hyperparameter, so updating one parameter does not block updating a different one during the same window. + +- Rate Limit: 2 tempos +- Chain State Variable: `OwnerHyperparamRateLimit` +- Error message: [`TxRateLimitExceeded`](../errors/subtensor.md#txratelimitexceeded) + + +### Weights version key rate limit + +This rate limit controls the frequency of weights version key updates. + +- Rate Limit: 5 blocks (~1 minute) +- Chain State Variable: `WeightsVersionKeyRateLimit` +- Error message: [`TxRateLimitExceeded`](../errors/subtensor.md#txratelimitexceeded) + +### Administrative freeze window + +This controls the duration of the administrative freeze window at the end of each epoch, during which subnet owner operations are disallowed. + +- Duration: 10 blocks (~2 minutes) +- Chain State Variable: `AdminFreezeWindow` +- Error message: [`TxRateLimitExceeded`](../errors/subtensor.md#txratelimitexceeded) + +### Subnet Mechanism count update rate limit + +Limits how often a subnet owner can change the number of incentive mechanisms. For background on mechanisms, see [Multiple Incentive Mechanisms Within Subnets](../subnets/understanding-multiple-mech-subnets.md). + +- Rate Limit: 7,200 blocks (~24 hours) +- Chain State Variable: `MechanismCountSetRateLimit` (Not queryable from chain state) +- Source Code: [lib.rs](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/lib.rs#L1894-1897) +- Error message: [`TxRateLimitExceeded`](../errors/subtensor.md#txratelimitexceeded) + +### Subnet Mechanism emission split update rate limit + +Limits how often a subnet owner can change the allocation of emissions among the subnet's mechanisms. For background on mechanisms, see [Multiple Incentive Mechanisms Within Subnets](../subnets/understanding-multiple-mech-subnets.md). + +- Rate Limit: 7,200 blocks (~24 hours) on main net; 1 block in 'fastblocks' development mode. +- Chain State Variable: `MechanismEmissionRateLimit` (Not queryable from chain state) +- Source Code: [lib.rs](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/lib.rs#L1898-1902) +- Error message: [`TxRateLimitExceeded`](../errors/subtensor.md#txratelimitexceeded) + +### Staking operations rate limits + +This rate limit controls how frequently a user can perform staking operations (add/remove stake, move stake) to a particular subnet (netuid). + +- Rate Limit: 1 per block +- Chain State Variable: `StakingOperationRateLimiter` (Bool, since limit is 1 operation) +- Error message: [`StakingOperationRateLimitExceeded`](../errors/subtensor.md#stakingoperationratelimitexceeded) + + +### Child hotkey operations rate limit + +This rate limit controls how frequently a parent hotkey can set or revoke child hotkeys on a specific subnet. Note that revoking children is implemented by calling `set_children` with an empty list, so both operations share the same rate limit. + +- Rate Limit: 150 blocks (~30 minutes) +- Source Code: [rate_limiting.rs](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/utils/rate_limiting.rs#L25-L28) +- Error message: [`TxRateLimitExceeded`](../errors/subtensor.md#txratelimitexceeded) + +### Child key take rate limit + +This rate limit prevents the owner of a child hotkey from making frequent changes to the child key take percentages. + +- Rate Limit: 216,000 blocks (~30 days) +- Chain State Variable: `TxChildkeyTakeRateLimit` +- Error message: [`TxChildkeyTakeRateLimitExceeded`](../errors/subtensor.md#txchildkeytakeratelimitexceeded) + +## Subnet-specific rate limits + +This section discusses rate limits that apply within a specific subnet on the network. These limits are typically configurable at the subnet level. + +### Serving rate limits + +This rate limit controls how frequently neurons can update their serving information (axon and prometheus data) on the Bittensor network. This rate limit can be modified by changing the `serving_rate_limit` parameter in the subnet hyperparameters. For more information, see [subnet hyperparameters](../subnets/subnet-hyperparameters.md#servingratelimit). + +- Rate Limit: Configurable per subnet (default: 10 blocks) +- Chain State Variable: `ServingRateLimit` +- Error message: [`ServingRateLimitExceeded`](../errors/subtensor.md#servingratelimitexceeded) + + +### Weights setting rate limit + +This rate limit controls how frequently a subnet validator can set weights to the network. Appears as `weights_rate_limit` in the subnet's hyperparameters. For more information, see [subnet hyperparameters](../subnets/subnet-hyperparameters.md#weightsratelimit--commitmentratelimit). + +- Rate Limit: Configurable per subnet (default: 100 blocks, varies significantly by subnet) +- Chain State Variable: `WeightsSetRateLimit` per subnet +- Error message: [`SettingWeightsTooFast`](../errors/subtensor.md#settingweightstoofast) +- Effective Period: Formula is `Tempo × WeightsSetRateLimit × 12 seconds` + +### Registration rate limits + +This section covers rate limits related to neuron registrations on a subnet. + +#### Per-block registration limit + +This rate limit controls how frequently registrations can occur on a particular subnet. This rate limit can be modified by changing the `max_regs_per_block` parameter in the subnet hyperparameters. For more information, see [subnet hyperparameters](../subnets/subnet-hyperparameters.md#maxregistrationsperblock). + +- Rate Limit: Configurable per subnet (default: 1 registration per block) +- Chain State Variable: `MaxRegistrationsPerBlock` +- Error message: [`TooManyRegistrationsThisBlock`](../errors/subtensor.md#toomanyregistrationsthisblock) + +#### Per-interval registration limit + +This rate limit controls the frequency of neuron registrations within an [interval](../subnets/subnet-hyperparameters#adjustmentinterval). This limit occurs when registration attempts in the current interval exceed three times the target registrations per interval. + +- Rate Limit: 3x the target registrations per interval +- Chain State Variable: `TargetRegistrationsPerInterval` +- Error message: [`TooManyRegistrationsThisInterval`](../errors/subtensor.md#toomanyregistrationsthisinterval) + +## Subtensor Node Rate Limits + +When querying OTF-provided lite nodes, the following rate limits apply. We strongly encourage you to run your own local lite node. + +- Any OTF-provided lite node will rate limit the requests to one request per second, per IP address. Note that this rate limit may change dynamically based on the network or application requirements. +- A request can be either WS/WSS or HTTP/HTTPS. +- If you exceed the rate limit, you will receive the error code 429. You will then have to wait until the rate limit window has expired. +- You can avoid OTF-lite node rate limits by running your own local lite node. You can run a lite node either [Using Docker](../subtensor-nodes/using-docker.md#using-lite-nodes) or [Using Source](../subtensor-nodes/using-source#lite-node-on-mainchain). + diff --git a/docs/learn/ema.md b/docs/learn/ema.md new file mode 100644 index 0000000000..02a8260d54 --- /dev/null +++ b/docs/learn/ema.md @@ -0,0 +1,89 @@ +--- +title: "Exponential Moving Averages (EMAs)in Bittensor" +--- + +# Exponential Moving Averages (EMAs) in Bittensor + +The exponential moving average (EMA) is a [mathematical technique](https://en.wikipedia.org/wiki/Exponential_smoothing) for tracking a dynamic quantity, such as a token price, over time. Specifically, EMA is a weighted moving average that exponentially decreases the weight of older data point. This extracts a signal reflecting where the value has spent _most_ of its time _most recently_, stabilizing or 'smoothing' the constant noise of rapid, largely random fluctuations. + +Bittensor uses EMAs to smooth two critical dynamical values during the emission process: + +- Emissions to each subnet are determined by an EMA-smoothed representation of net TAO flows (staking minus unstaking activity). This protects emissions from short-term fluctuations and manipulation attempts. + +- Emissions to participants of each subnet are determined by EMAs of instantaneous validator-miner bond-strengths. This plays an important role in ensuring that validators and miners are fairly rewarded for innovation, as measured by eventual consensus (rather than immediate consensus) about miner weights. + +## Mathematical definition + +The EMA of a changing value at a given time is determined by weighted average of the current value and the EMA at the last time step. The parameter factor, or 'smoothing factor' is called $\alpha$. + +$$ +\mathrm{EMA}^{(t)} = \alpha \times \mathrm{current} + (1 - \alpha) \times \mathrm{EMA}^{(t-1)} +$$ + +The alpha parameter controls how quickly the EMA responds to changes: + +- **Small $\alpha$ (e.g., 0.01)**: Very slow response, high stability, takes many periods for significant changes +- **Large $\alpha$ (e.g., 0.5)**: Fast response, lower stability, quickly incorporates new information +- **$\alpha$ = 1**: No smoothing (immediate response to current value) + +:::tip +Note that this alpha parameter is distinct from and unrelated to the usage of 'alpha' to refer to subnet-specific currencies. +::: + +## Subnet Flow Emission Smoothing + +This use of EMA smoothing protects the network's economic model from manipulation by making emissions extremely slow to respond to changes in staking activity. + +**How It Works**: +The flow-based model uses an EMA to track net TAO flows (staking minus unstaking) over time, with a 30-day half-life (~86.8 day effective window): + +$$ +S_i = (1 - \alpha) \cdot S_{i-1} + \alpha \cdot \text{net\_flow}_i +$$ + +**Key Parameters**: +- **Smoothing factor ($\alpha$)**: ~0.000003209 (creates 30-day half-life) +- **EMA window**: ~86.8 days (effective duration over which old values still affect the running EMA) +- **Response characteristic**: Very slow - 99.9997% from previous EMA, only 0.0003% from current block + +This extremely slow EMA prevents: +- Short-term gaming through temporary staking spikes +- Price manipulation through wash trading +- Flash attacks on emissions + +Subnets with negative net flows (more unstaking than staking) receive zero emissions after the EMA reflects sustained negative flow. + +:::tip Flow-Based Model Active +As of November 2025, emissions are based on EMA of TAO flows rather than token prices. See [Emissions](./emissions.md) for complete details. +::: + +See: +- [Flow-based emission implementation](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/coinbase/subnet_emissions.rs) +- [EMA smoothing factor](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/lib.rs#L1302-L1308) + +## Validator-Miner Bond Smoothing + +This smoothing function ensures that relationships between validators and miners evolve gradually, preventing sudden manipulation while rewarding validators who discover promising miners early. + +### Basic Bond EMA (Liquid Alpha Disabled) + +**Default Mode**: Single $\alpha$ for all validator-miner pairs + +- **Default $\alpha$**: ~0.1 (10%) +- **Response Time**: 7-22 blocks for significant changes (~1-4 minutes) +- **Formula** + The EMA of the bond (BondEMA)of a validator i for a miner j, at time t, is the $\alpha$-weighted average of the instantaneous bond and the previous timestep's BondEMA: + $$ + BondEMA_{ij}^{(t)} = \alpha \times \, InstantBond_{ij} + (1-\alpha)\,BondEMA_{ij}^{(t-1)} + $$ + +### Advanced Bond EMA (Liquid Alpha Enabled) + +**Consensus-Based Mode**: Dynamic $\alpha$ per validator-miner pair based on consensus alignment + +- **$\alpha$ Range**: Dynamic between $\alpha$\_low and $\alpha$\_high (default: 0.7 to 0.9) +- **Sigmoid Steepness**: Controls transition rate between $\alpha$\_low and $\alpha$\_high (default: 1000) +- **Individual Alpha**: Each validator-miner pair gets its own $\alpha$ value +- **Response Time**: 1-13 blocks depending on consensus alignment (~12 seconds to 2.6 minutes) + +See [Liquid Alpha/Consensus-Based Weights](../concepts/consensus-based-weights) diff --git a/docs/learn/emissions.md b/docs/learn/emissions.md new file mode 100644 index 0000000000..4ccc8f395a --- /dev/null +++ b/docs/learn/emissions.md @@ -0,0 +1,276 @@ +--- +title: "Emission" +--- + +import ThemedImage from '@theme/ThemedImage'; +import useBaseUrl from '@docusaurus/useBaseUrl'; + +# Emission + +Emission is the economic heartbeat of Bittensor—the process that continuously distributes newly created [TAO](../resources/glossary.md#tao-τ) and subnet-specific alpha tokens to network participants who contribute value through [mining](../resources/glossary.md#subnet-miner), [validation](../resources/glossary.md#validator), [staking](../resources/glossary.md#staking), and [subnet creation](../resources/glossary.md#subnet-creator). + + +:::tip Flow-Based Emissions ("Taoflow") Now Active +**As of November 2025**: Bittensor has transitioned to a **flow-based model** ("Taoflow") for determining how TAO emissions are distributed across subnets. Emissions are now based on net TAO inflows due to staking activity, rather than token prices as previously. + +See: +- [How flow-based injection works](#tao-reserve-injection) +- [Rationale for the flow-based model](#rationale-for-flow-based-emissions) +::: + +See also: + +- [TAO.app Tokenomics Dashboard](https://www.tao.app/tokenomics) +- [Implementation in the Subtensor codebase](../navigating-subtensor/emissions-coinbase.md) +- [Yuma Consensus](./yuma-consensus.md) +- [Dynamic TAO White Paper](https://drive.google.com/file/d/1vkuxOFPJyUyoY6dQzfIWwZm2_XL3AEOx/view) + +## Injection and Distribution: Two-Stages of the Emissions Process + +Bittensor's emission system operates through two stages, reflecting the system's hierarchical, competitive nature: + +- **Injection**: Every [block](../resources/glossary.md#block), new liquidity flows into each subnet's liquidity pools, based on subnet performance. + +- **Distribution**: At the end of each [tempo](../resources/glossary.md#tempo) (waiting period of ~360 blocks, ~72 minutes), accumulated rewards within each subnet are distributed to the subnet's participants through [Yuma Consensus](../resources/glossary.md#yuma-consensus), which evaluates individual performance and determines who deserves what share. + +### Injection + +The first stage of emissions is _injection of liquidity_ into the subnet pools. Liquidity is injected to each subnet based on either price (legacy model) or net TAO flows (new model), or a weighted combination during the transition period. + +Each block: + +- **TAO is injected** into the subnet's **TAO reserve** — the amount for each subnet is determined by the emission distribution formula (see below) +- **Alpha is injected** into the subnet's **alpha reserve** — proportional to TAO injection to maintain price stability +- **Alpha is allocated** to _alpha outstanding_ — set aside to be distributed by participants (miners, validators, stakers, subnet owner) + +#### Distribution across Subnets + +TAO emissions across subnets are now determined by a **flow-based model**: + +**Flow-Based Model (Active as of November 2025)** +- Emissions based on net TAO inflows, i.e. TAO that has flowed into the subnet minus TAO that has flowed out, from staking/unstaking activity +- Rewards subnets that attract genuine user engagement +- Subnets with negative net flows (more unstaking than staking) receive zero emissions +- More dynamic and responsive than the previous price-based approach + +**Previous Price-Based Model (No Longer Active)** +- Emissions were proportional to smoothed subnet token prices +- Created "price inertia" effects where established subnets maintained high emissions even during mass unstaking +- Was vulnerable to "TAO treasury" gaming strategies + +#### TAO reserve injection + +A subnet's TAO reserve injection is determined by its **emission share**, calculated based on net flow of TAO in and out of the subnet's TAO liquidity pool due to staking/unstaking. + +
+ How it's calculated + +The flow-based model uses an Exponential Moving Average (EMA) of net TAO flows (staking minus unstaking): + +1. **Track net flows**: Each block, record TAO inflows from staking and outflows from unstaking: + $$\text{net\_flow}_i = \sum \text{TAO staked} - \sum \text{TAO unstaked}$$ + +2. **Calculate EMA**: Update the 86.8-day EMA of net flows (smoothing factor $\alpha \approx 0.000003209$): + $$S_i = (1 - \alpha) \cdot S_{i-1} + \alpha \cdot \text{net\_flow}_i$$ + + The EMA smooths out short-term fluctuations. With a very small α (~0.000003209), the EMA changes slowly 99.9999968% comes from the previous EMA value and only 0.0000032% from the current block's flow. This creates a 30-day half-life, meaning it takes about 30 days for the EMA to move halfway toward a new sustained flow level. This results in an EMA window of approximately ~86.8 days. + +3. **Apply offset and clipping**: Calculate offset flows by subtracting the lower limit $L$: + $$z_i = \max(S_i - L, 0)$$ + where $L = \max(\text{FlowCutoff}, \min_{j} \min(S_j, 0))$ + + This step ensures subnets with negative net flows get zero emissions. The lower limit $L$ is set to the most negative EMA across all subnets (or FlowCutoff if higher). By subtracting this from each subnet's EMA, we "lift" all values so the worst-performing subnet gets 0. + +4. **Power normalization**: Apply power $p$ to adjust distribution characteristics: + $$\text{share}_{\text{flow}}(i) = \frac{z_i^p}{\sum_{j \in \mathbb{S}} z_j^p}$$ + + This converts the offset flows into proportions that sum to 1 (100%). With $p = 1$ (default), this is just dividing each subnet's offset flow by the total across all subnets, creating a linear relationship. Higher $p$ values favor subnets with stronger flows. + +5. **Final TAO injection**: Multiply the share by total block emission to get actual TAO amount: + $$\Delta\tau_i = \Delta\bar{\tau} \times \text{share}(i)$$ + + This converts the proportions into actual TAO amounts. The total block emission $\Delta\bar{\tau}$ is 1 TAO per block. + + +With the default $p = 1$ ([source](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/lib.rs#L1293-L1295)), this creates **linear/proportional distribution**: a subnet with 2× the flow receives exactly 2× the emissions. The parameter can be adjusted to create winner-takes-more dynamics if desired (e.g., with $p = 1.5$, a subnet with 2× flow would get 2.83× emissions). + +**Key Parameters**: +- **EMA smoothing factor**: 30-day half-life (results in ~86.8 day EMA window) ([source](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/lib.rs#L1302-L1308)) +- **Power exponent**: $p = 1$ (linear/proportional) ([source](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/lib.rs#L1293-L1295)) +- **Flow cutoff**: 0 (only negative flows clipped) ([source](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/lib.rs#L1285-L1288)) +- **EMA Initialization**: New subnets start with EMA = min(moving_price, current_price) ([code](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/coinbase/subnet_emissions.rs#L77-L84)) + +**Implementation**: +- Flow tracking: [`record_tao_inflow()`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/coinbase/subnet_emissions.rs#L36-L40) and [`record_tao_outflow()`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/coinbase/subnet_emissions.rs#L42-L46), called during stake/unstake +- Share calculation: [`get_shares()`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/coinbase/subnet_emissions.rs#L214-L216) → [`get_shares_flow()`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/coinbase/subnet_emissions.rs#L181-L211) + +:::info Exceptions to Inflows/Outflows +Flow tracking does not include root proportion. +While stake/unstake operations are recorded as inflows or outflows, swaps like the `burned_register` (UID registration) and the root claim are excluded. + +See [Calculating root proportion](../navigating-subtensor/emissions-coinbase#6-calculating-root-proportion). +::: + + +
+ +#### Alpha reserve injection + +Alpha is then injected in proportion to the price of the token, so that growth of a subnet's liquidity pools does not not change the price of the alpha token. + +
+ See how it's calculated! + +Recall that token price for a subnet is its TAO in reserve divided by its alpha reserve: + +$$ +p_i = \frac + {\tau_i} + {\alpha_i} +$$ + +So in order to inject alpha without changing the price, it should follow: + +$$ +\Delta\alpha_i = \frac + {\Delta\tau_i} + {p_i} +$$ + +When we fill in this equation with the previous formula for $\Delta\tau_i$, the price $p_i$ is cancelled out of the equation, yielding: + +$$ +\Delta\alpha_i = + \frac + {\Delta\bar{\tau}} + {\sum_{j \in \mathbb{S}} + \bigl(p_j)} +$$ + +However, alpha injection is also capped at 1 by the algorithm, to prevent runaway inflation. Therefore, with cap or _alpha emission rate_ $\Delta\bar{\alpha_i}$, emission $\Delta\alpha_i$ to subnet $i$ is: + +$$ +\Delta\alpha_i = \min\left\{ + \frac + {\Delta\bar{\tau}} + {\sum_{j \in \mathbb{S}} + \bigl(p_j)}, + \Delta\bar{\alpha_i} \right\} +$$ + +The cap or _alpha emission rate_ $\Delta\bar{\alpha_i}$ for subnet $i$, starts at 1 and follows a halving schedule identical to that of TAO, beginning when subnet $i$ is created. + +
+ +#### Alpha outstanding injection + +Each block, liquidity is also set aside to be emitted to participants (validators, miners, stakers, and subnet creator). The quantity per block is equal to the _alpha emission rate_ $\Delta\bar{\alpha_i}$ for subnet $i$. + +:::warning Important for Subnet Owners +Under the new flow-based model, subnets that have negative net TAO flows (more unstaking than staking) for sufficiently long will receive **zero TAO emissions** and consequently **zero alpha injection**. This means: + +- No liquidity growth for the subnet pool +- Higher slippage for users trying to stake +- Difficulty attracting new participants + +To maintain positive emissions, subnet owners should focus on: +- Building genuine utility that attracts long-term stakers +- Creating sustainable value that encourages TAO inflows +::: + +### Distribution + +At the end of each tempo (~360 blocks), the quantity of alpha accumulated over each block of the tempo is distributed network participants in the following proportions: + +1. 18% by subnet owner +1. 41% of emissions go to miners. The allocation to particular miners is determined by [Yuma Consensus: Miner emissions#miner-emissions](./yuma-consensus). +1. 41% by validators and their stakers. + + 1. First, the allocation to validators miners is determined by [Yuma Consensus: Validator Emissions](./yuma-consensus#validator-emissions). + 1. Then, validators receive their take from that allocation. + 1. Then, TAO and alpha are emitted to stakers in proportion to the validators' holdings in each token. TAO emissions are sourced by swapping a portion of alpha emissions to TAO through the subnet's liquidity pool. + +
+ See how it's calculated! + + For validator x's TAO stake $\tau_x$, and alpha stake $\alpha_x$, and the global TAO weight $w_{\tau}$: + + - TAO is emitted to stakers on the root subnet (i.e. stakers in TAO) in proportion to the validator's stake weight's proportion of TAO. + + $$ + \text{proportional emissions (\%) to root stakers} + = \frac{\tau_{x}{} \, w_{\tau}} + {\alpha_{x} + \tau_{x} \, w_{\tau}} + $$ + + - Alpha is emitted to stakers on the mining subnet (i.e. stakers in alpha) in proportion to the validator's stake weight's proportion of alpha: + $$ + \text{proportional emissions (\%) to alpha stakers} + = \frac{\alpha_{x}} + {\alpha_{x} + \tau_{x} \, w_{\tau}} + $$ + + Validators who hold both root TAO and subnet alphas will receive both types of token. +
+ + See [Core Dynamic TAO Concepts: Validator stake weight](../subnets/understanding-subnets#validator-stake-weight) + + +## Rationale for Flow-Based Emissions + +The shift from price-based to flow-based emissions addressed several fundamental issues with the original model, as explained by Bittensor co-founder Jacob Steeves (a.k.a., Const) in the [October 30, 2025 episode of Novelty Search](https://www.youtube.com/live/40ug9nbYW9U?si=H6mTnO2pwqwtE25U): + +### Leveling the Playing Field + +The new model measures emissions contribution "per unit liquidity" to eliminate structural advantages: + +- **Old model problem**: Small subnets with low liquidity are devastated by minor sell pressure, while large subnets with high liquidity can absorb massive selling with minimal emission impact +- **New model solution**: All subnets are evaluated by their net TAO flow. Because this is the difference between in-flow and out-flow of TAO, it is scale-invariant and does *not* favor subnets with larger total liquidity pools, leveling the playing field. + +### Preventing "TAO Treasury" Gaming + +The price-based model enabled a specific exploit pattern: + +1. Projects artificially pump their token price by building "TAO treasuries" +2. They pay for initial liquidity buildup using emissions from the inflated price +3. They let the price "slow burn" downward while collecting emissions the entire time + +Under the new model, injection favors subnets that are actively being staked into, rather than just holding accumulated liquidity. + +### Anti-Manipulation by Design + +The flow-based system is designed to be manipulation-resistant: + +- Net flows reflect actual user behavior (staking/unstaking decisions) +- ~86.8 day EMA prevents short-term gaming +- Neuron registrations are excluded from inflows +- Power normalization amplifies sustained positive flows over temporary spikes + +### Note: De-registration Remains Price-Based + +Emissions and de-registration are **intentionally decoupled**: + +- De-registration continues to be based on lowest token price +- Subnets with zero emissions (due to negative net flows) are **not** automatically de-registered + +## Note on evolution of Bittensor token economy + +At the initialization of Dynamic TAO, there was no alpha in circulation, so validator's stake weights were initially determined by their share of TAO stake. + +But far more alpha than TAO is emitted into circulation every block. As a result, over time there will be more alpha relative to TAO in overall circulation, and the relative weight of a validator in a given subnet will depend more on their alpha stake share relative to their share of the TAO stake on Subnet Zero. + +In order to hasten the process of alpha gaining the majority of stake power in the network, the contribution of TAO stake to a validator's stake weight is reduced by a global parameter called _TAO weight_. Currently, this is planned to be **18%**, in order to achieve a weight parity between TAO and total alpha in approximately 100 days. + +
+ +
+ +
+ diff --git a/docs/learn/fees.md b/docs/learn/fees.md new file mode 100644 index 0000000000..14ff7144e8 --- /dev/null +++ b/docs/learn/fees.md @@ -0,0 +1,175 @@ +--- +title: "Transaction Fees in Bittensor" +--- + +# Transaction Fees in Bittensor + +This page describes the blockchain transaction fees charged by Bittensor. + +Many extrinsic transactions that change the state of the blockchain are subject to a small, weight-based fee. Staking and unstaking operations incur weight-based fees as well as amount-based fees of 0.05% of the transacted liquidity. + +Reading the state of the chain is always free. + +## Weight-Based Transaction Fees + +Many extrinsics in Bittensor are subject to **weight-based fee**. In Polkadot-based chains like Subtensor (Bittensor's layer 1 blockchain), [weight](https://docs.polkadot.com/polkadot-protocol/glossary/#weight) is a measure of compute time. + +**Fee Details**: +- **Payment source**: Sender's TAO free balance by default. For specific extrinsics, if TAO is insufficient to cover fees, the chain will charge fees in Alpha instead (see [Alpha Fallback](#alpha-fallback)) +- **Denomination**: TAO by default. When fees are paid in Alpha, the TAO fee amount is converted to Alpha using the current Alpha price (no slippage). +- **Impact on liquidity**: Fees are *recycled* (deducted from `TotalIssuance`) + See: [Recycling and Burning](../resources/glossary#recycling-and-burning) + +### Staking Operations + +- [`add_stake`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/macros/dispatches.rs#L591) +- [`remove_stake`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/macros/dispatches.rs#L635) +- [`add_stake_limit`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/macros/dispatches.rs#L1793) +- [`remove_stake_limit`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/macros/dispatches.rs#L1857) +- [`remove_stake_full_limit`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/macros/dispatches.rs#L2081) +- [`move_stake`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/macros/dispatches.rs#L1643) +- [`transfer_stake`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/macros/dispatches.rs#L1686) +- [`swap_stake`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/macros/dispatches.rs#L1731) +- [`swap_stake_limit`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/macros/dispatches.rs#L1904) +- [`unstake_all`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/macros/dispatches.rs#L1581) +- [`unstake_all_alpha`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/macros/dispatches.rs#L1614) + +### Wallet and Identity Management + +- [`set_identity`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/macros/dispatches.rs#L1471) +- [`set_subnet_identity`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/macros/dispatches.rs#L1513) +- [`associate_evm_key`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/macros/dispatches.rs#L2001) +- [`try_associate_hotkey`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/macros/dispatches.rs#L1938) +- [`schedule_swap_coldkey`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/macros/dispatches.rs#L1333) + +### Registration + +- [`register`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/macros/dispatches.rs#L895) +- [`burned_register`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/macros/dispatches.rs#L930) + +### Subnet Management + +- [`start_call`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/macros/dispatches.rs#L1963) +- [`update_symbol`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/macros/dispatches.rs#L2163) + +### Burn/recycle alpha + +- [`recycle_alpha`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/macros/dispatches.rs#L2027) +- [`burn_alpha`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/macros/dispatches.rs#L2052) + +### Child Hotkey Management + +- [`set_children`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/macros/dispatches.rs#L1287) +- [`set_childkey_take`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/macros/dispatches.rs#L1021) + +### Governance + +- [`adjust_senate`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/macros/dispatches.rs#L921) + +
+ See how it's calculated! + ```rust + pub struct LinearWeightToFee; + + impl WeightToFeePolynomial for LinearWeightToFee { + type Balance = Balance; + + fn polynomial() -> WeightToFeeCoefficients { + let coefficient = WeightToFeeCoefficient { + coeff_integer: 0, + coeff_frac: Perbill::from_parts(50_000), // 0.005% + negative: false, + degree: 1, + }; + smallvec!(coefficient) + } + } + ``` + **Source code reference:** [`pallets/transaction-fee/src/lib.rs:44-56`](https://github.com/opentensor/subtensor/blob/main/pallets/transaction-fee/src/lib.rs#L44-L56) + +
+ +## Alpha Fallback + +For extrinsics that charge fees by swapping Alpha for TAO, if the sender's TAO balance cannot cover the weight-based transaction fee, the chain will fall back to charging the fee in Alpha. If both TAO and Alpha balances are insufficient to cover the anticipated fee, the transaction fails validation and will not be included in the mempool. When fees are paid in Alpha, the TAO fee is converted to Alpha using the current Alpha price with no slippage. + +### Affected extrinsics + +- `remove_stake` +- `remove_stake_limit` +- `remove_stake_full_limit` +- `unstake_all` +- `unstake_all_alpha` +- `move_stake` +- `transfer_stake` +- `swap_stake` +- `swap_stake_limit` +- `recycle_alpha` +- `burn_alpha` + +### Complete unstaking handling + +For `remove_stake`, `remove_stake_limit`, `recycle_alpha`, and `burn_alpha`: after withdrawing Alpha fees, if the remaining Alpha balance is too small to keep as a dust balance, the transaction will consume and process the entire remaining Alpha balance in the same call. + +### Updated handling of `NotEnoughStakeToWithdraw` + +For `remove_stake`, `remove_stake_limit`, `recycle_alpha`, and `burn_alpha`: if the requested amount exceeds the available Alpha, the amount is capped at the available Alpha and the extrinsic succeeds (assuming no other errors). + +## Swap Fees for Stake and Unstake Operations + +In addition to the weight-based fee above, staking and unstaking operations are subject to fees based on a percentage of the quantity of transacted liquidity. When moving stake between subnets—whether through a transfer, swap, or move—a 0.05% fee is applied. If the move happens within the same subnet, no additional fee is incurred, only the weight-based fee. + +**Fee Details:** + +- **Rate**: 0.05% +- **For staking**: Fee paid in **TAO** from the staking amount +- **For unstaking**: Fee paid in **Alpha** from the unstaking amount + +### Example + +```shell +btcli stake add +``` + +```console +... + +Amount to stake (TAO τ): 100 + + Staking to: + Wallet: 2MuchTau!, Coldkey ss58: 5Xj... + Network: test + + ┃ ┃ ┃ ┃ ┃ ┃ ┃ Rate with ┃ Partial + ┃ ┃ ┃ ┃ Est. ┃ ┃ Extrinsic ┃ tolerance: ┃ stake + Netuid ┃ Hotkey ┃ Amount (τ) ┃ Rate (per τ) ┃ Received ┃ Fee (τ) ┃ Fee (τ) ┃ (0.5%) ┃ enabled +━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━ + 2 │ 5GrwvaEF5zX… │ 100.0000 τ │ 2416.813286… │ 241,556.4147 │ Τ 0.0504 │ 0.0013 τ │ 2404.7893 │ False + │ │ │ β/Τ │ β │ │ │ β/Τ │ +────────┼──────────────┼────────────┼──────────────┼──────────────┼──────────┼──────────────┼──────────────┼────────────── + │ │ │ │ │ │ │ │ + +``` + +**Source code references:** + +- [Fee value](https://github.com/opentensor/subtensor/blob/main/pallets/swap/src/pallet/mod.rs#L68-L76) +- [Fee calculation and distribution](https://github.com/opentensor/subtensor/blob/main/pallets/swap/src/pallet/impls.rs#L596-L639) + +## Fee-Free Extrinsics + +The following extrinsics are free. + +### Weight Setting & Commit-Reveal + +- [`set_weights`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/macros/dispatches.rs#L83) - Setting validator weights +- [`commit_weights`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/macros/dispatches.rs#L158) - Commit weight hash +- [`batch_commit_weights`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/macros/dispatches.rs#L192) - Batch commit weight hashes +- [`reveal_weights`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/macros/dispatches.rs#L241) - Reveal committed weights +- [`commit_crv3_weights`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/macros/dispatches.rs#L285) - Commit CRv3 encrypted weights +- [`batch_reveal_weights`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/macros/dispatches.rs#L337) - Batch reveal committed weights + +### Administrative & Operational + +- Sudo and admin extrinsics +- Governance-related functions diff --git a/docs/learn/neurons.md b/docs/learn/neurons.md new file mode 100644 index 0000000000..5e13af68d0 --- /dev/null +++ b/docs/learn/neurons.md @@ -0,0 +1,149 @@ +--- +title: "Understanding Neurons" +--- + +import ThemedImage from '@theme/ThemedImage'; +import useBaseUrl from '@docusaurus/useBaseUrl'; +import { SdkVersion } from "../sdk/_sdk-version.mdx"; + +# Understanding Neurons + +The design of Bittensor subnets is inspired by the structure of a simple neural network, with each **neuron** being either a miner or validator. Each neuron is identified by a unique UID within its subnet and associated with a hotkey-coldkey pair for authentication and operations. + +:::tip Neuron requirements +See [minimum compute requirements](https://github.com/opentensor/bittensor-subnet-template/blob/main/min_compute.yml) for compute, memory, bandwidth and storage requirements for neurons. +::: + +## Neuron Architecture Overview + +Neurons in a subnet operate within a server-client architecture: + +- **Axon (Server)**: Miners deploy Axon servers to receive and process data from validators +- **Dendrite (Client)**: Validators use Dendrite clients to transmit data to miners +- **Synapse (Data Object)**: Encapsulates and structures data exchanged between neurons + +Additionally, the Metagraph serves as a global directory for managing subnet nodes, while the Subtensor connects neurons to the blockchain. + +## Complete Neuron Lifecycle + +1. **Registration** → Neuron registers via PoW or burned registration +2. **UID Assignment** → Neuron receives unique UID within subnet +3. **Immunity Period** → Neuron is protected from pruning for configurable blocks +4. **Performance Building** → Neuron accumulates rank, trust, consensus, and incentive +5. **Validator Permit** → Top K neurons by stake receive validator permits +6. **Weight Setting** → Permitted neurons can set weights and participate in consensus +7. **Bond Formation** → Validators form bonds to miners based on performance +8. **Emission Distribution** → Neurons receive TAO emissions based on performance +9. **Performance Monitoring** → Neuron performance is continuously evaluated +10. **Pruning Risk** → Low-performing neurons risk replacement by new registrations + +## Managing Neurons + +### Registration and UID Assignment + +Neurons register with subnets through proof-of-work or burned registration methods, receiving a unique UID (User ID) within their subnet. The registration process follows an append-or-replace algorithm where new neurons either expand the subnet or replace existing low-performing neurons. + +See: + +- [Miner Registration](../miners/#miner-registration) +- [Validator Registration](../validators/#validator-registration) + +### Performance Metrics + +Neuron performance is measured through multiple metrics: + +- **Rank**: Final performance score after consensus weight clipping + See: [Rank](../resources/glossary/#rank) +- **Consensus**: Stake-weighted median of weights serving as clipping threshold + See: [Consensus score](../resources/glossary/#consensus-score) +- **Trust**: Consensus alignment measure for miners + See: [Trust](../resources/glossary/#trust) +- **Validator Trust**: Consensus alignment measure for validators + See: [Validator Trust](../resources/glossary/#validator-trust) +- **Incentive**: Normalized reward allocation for miners + See: [Incentive](../resources/glossary/#incentives) + +### Validator Permits and Access Control + +Top K neurons by stake weight receive validator permits, allowing them to: + +- Set weights and participate in consensus +- Form bonds to miners based on performance assessment +- Contribute to active stake calculations + +Only permitted neurons can set non-self weights, though all neurons can set self-weights regardless of permit status. + + + +## Neuron-to-neuron communication + +Neurons exchange information by: + +- Encapsulating the information in a Synapse object. +- Instantiating the server (Axon) and client (dendrite) network elements and exchanging Synapse objects using this server-client (Axon-dendrite) protocol. See the below diagram. + +
+ +
+ +### Axon + + + +The `Axon` module in the Bittensor API uses the FastAPI library to create and run API servers. For example, when a subnet miner calls, + +```python +import bittensor as bt +axon = bt.Axon(wallet=self.wallet, config=self.config) +``` + +then an API server with the name `Axon` is created on the subnet miner node. This `Axon` API server receives incoming Synapse objects from subnet validators, i.e., the `Axon` starts to serve on behalf of the subnet miner. + +Similarly, in your subnet miner code you must use the `Axon` API to create an API server to receive incoming Synapse objects from the subnet validators. + +### Dendrite + +Axon is a **server** instance. Hence, a subnet validator will instantiate a `dendrite` **client** on itself to transmit information to axons that are on the subnet miners. For example, when a subnet validator runs the following code fragment: + +```python + responses: List[bt.Synapse] = await self.dendrite( + axons=axons, + synapse=synapse, + timeout=timeout, + ) +``` + +then the subnet validator: + +- Instantiates a `dendrite` client on itself. +- Transmits `synapse` objects to a set of `axons` (that are attached to subnet miners). +- Waits until `timeout` expires. + +### Synapse + +A synapse is a data object. Subnet validators and subnet miners use Synapse data objects as the main vehicle to exchange information. The `Synapse` class inherits from the `BaseModel` of the Pydantic data validation library. + +For example, in the [Text Prompting Subnet](https://github.com/macrocosm-os/prompting/blob/414abbb72835c46ccc5c652e1b1420c0c2be5c03/prompting/protocol.py#L27), the subnet validator creates a `Synapse` object, called `PromptingSynapse`, with three fields—`roles`, `messages`, and `completion`. The fields `roles` and `messages` are set by the subnet validator during the initialization of this Prompting data object, and they cannot be changed after that. A third field, `completion`, is mutable. When a subnet miner receives this Prompting object from the subnet validator, the subnet miner updates this `completion` field. The subnet validator then reads this updated `completion` field. + +## The Metagraph + +The metagraph is a data structure that contains comprehensive information about current state of the subnet. When you inspect the metagraph of a subnet, you will find detailed information on all the nodes (neurons) in the subnet. A subnet validator should first sync with a subnet's metagraph to know all the subnet miners that are in the subnet. The metagraph can be inspected without participating in a subnet. + +See [The Subnet Metagraph](../subnets/metagraph) diff --git a/docs/learn/price-protection.md b/docs/learn/price-protection.md new file mode 100644 index 0000000000..354a209379 --- /dev/null +++ b/docs/learn/price-protection.md @@ -0,0 +1,501 @@ +--- +title: "Understand Price Protection" +--- + +import { SdkVersion } from "../sdk/_sdk-version.mdx"; + +# Understand Price Protection + +## Price Protection Modes + +Bittensor clients (BTCLI and the SDK) provides three modes to give users control over how their transactions handle adverse price movements: Strict, Partial, and Unsafe. + +Other users' transactions can affect the token price, even while your transaction is pending. Subnet token prices may change rapidly, with significant consequences affecting your execution price and increasing slippage. These effects can be exploited by "sandwich attacks" and other [MEV (Maximal Extractable Value)](../resources/glossary.md#mev-maximal-extractable-value) attacks, or can result in loss of liquidity due to organic price volatility. + +It is therefore important to carefully manage price protection when staking and unstaking real value liquidity, i.e. on mainnet ("finney"). For additional protection against MEV attacks, consider using [MEV Shield](../sdk/mev-protection.md) to encrypt your transactions. + +### Strict Safe Mode (Default) + +In this mode, the transaction is **rejected entirely** if executing it would push the final market price beyond the tolerance threshold from the price when you submitted the transaction. Tolerance threshold can be specified but is 5% by default. + +This mode provides maximum protection against price volatility, market movements, and sandwich attacks by preventing transactions that would push the execution price beyond the specified tolerance. This is preferable when you want to guarantee a transaction price, and are willing to accept transaction failure if you cannot get that price. + +**Example**: You set a 2% tolerance for unstaking. If executing your transaction would push the final price more than 2% below the price when you submitted the transaction, the entire transaction is rejected. + +### Partial Safe Mode + +In this mode, the transaction executes **the maximum amount that can be executed while keeping the execution price within the defined tolerance** of the original submission price. If the full amount would cause the market price to exceed the tolerance range, only a portion would be executed. + +This mode ensures a partial transaction execution even if market conditions would make the full transaction exceed price tolerance limits. + +This is preferable if you want a guarantee of some transaction, and are willing to accept variation in price, which can result in loss of liquidity of up to the tolerance threshold. + +**Example**: You try to unstake 1000 alpha with 2% tolerance. If executing the full amount would push the final market price beyond 2% of the original price, the system calculates and executes only the maximum amount (e.g., 400 alpha) that stays within the 2% limit. + +### Unsafe Mode + +This mode **ignores price protection entirely**. The transaction executes regardless of price movements, offering the fastest execution but no protection against adverse price changes or sandwich attacks. + +This mode is generally convenient for development and testing, but inadvisable with real-value liquidity on mainnet ("finney"). + +### Example Comparison by Mode + +Consider attempting to unstake 1000 alpha when executing the full transaction would push the market price 5% below the original price, with tolerance set to 2%: + +| Mode | Outcome | +| ------------ | ------------------------------------------------------------------------------- | +| Strict Safe | Transaction rejected entirely (5% price movement > 2% tolerance) | +| Partial Safe | Unstakes ~400 alpha (maximum amount that keeps final price within 2% tolerance) | +| Unsafe | Unstakes full 1000 alpha regardless of 5% price impact | + +## Managing Price Protection with BTCLI + +The `btcli stake` interface provides parameters to control price protection modes. + +**Enable/disable price protection (strict or partial):** + +True by default. Enables price protection, which is strict by default. + +```bash +--safe-staking/--no-safe-staking, --safe/--unsafe +``` + +**Enable/disable partial execution (ignored in unsafe mode):** + +If price protection (`--safe-staking`) is enabled, determines whether protection is strict or partial. + +```bash +--allow-partial-stake/--no-allow-partial-stake, --partial/--no-partial +``` + +**Set price tolerance:** + +If in **partial safe** staking mode, determines the threshold of price variation tolerated in the transaction. + +```bash +--tolerance, --rate-tolerance FLOAT +``` + +- **Default**: 0.005 (0.5%) +- **Range**: 0.0 to 1.0 (0% to 100%) +- **Purpose**: Maximum allowed final price deviation from submission price + +### BTCLI Examples + +**Strict Safe Mode (reject if price moves beyond tolerance):** + +```bash +# note that --safe is unnecessary as it is enabled by default +btcli stake add --amount 100 --netuid 1 --safe --tolerance 0.02 --no-partial +``` + +**Partial Safe Mode (execute what fits within tolerance):** + +```bash +# note that --safe is unnecessary as it is enabled by default +btcli stake add --amount 1000 --netuid 1 --safe --tolerance 0.02 --partial +``` + +**Unsafe Mode (ignore price protection):** + +```bash +btcli stake add --amount 300 --netuid 1 --unsafe +``` + +## Managing Price Protection with SDK + +The Bittensor SDK provides price protection through method parameters: + +### Parameters + +:::warning +Unlike the `btcli`, the SDK's default behavior is _Unsafe_ mode. +You must explicitly configure price protection when using the SDK's staking/unstaking functionality. +::: + +**`safe_staking`** (bool): + +- **Default**: False +- **Purpose**: Enables price protection + +**`allow_partial_stake`** (bool): + +- **Default**: False +- **Purpose**: Enables partial execution mode + +**`rate_tolerance`** (float): + +- **Default**: 0.005 (0.5%) +- **Range**: 0.0 to 1.0 +- **Purpose**: Maximum allowed final price deviation from submission price + +### SDK Examples + + + +See [Price Protection Simulation](#price-protection-simulation) for an extended example. + +#### Safe Mode (reject if price moves beyond tolerance) + +```python +import bittensor as bt + +subtensor = bt.Subtensor() +wallet = bt.Wallet("my_wallet") + +response = subtensor.add_stake( + wallet=wallet, + hotkey_ss58="5F...", + netuid=1, + amount=bt.Balance.from_tao(100), + safe_staking=True, # Enable protection + rate_tolerance=0.02, # 2% price tolerance + allow_partial_stake=False # Reject if exceeds tolerance +) +``` + +#### Partial Mode (execute what fits within tolerance) + +```python +response = subtensor.add_stake( + wallet=wallet, + hotkey_ss58="5F...", + netuid=1, + amount=bt.Balance.from_tao(1000), + safe_staking=True, # Enable protection + rate_tolerance=0.02, # 2% price tolerance + allow_partial_stake=True # Execute partial amount within tolerance +) +``` + +#### Unsafe Mode (ignore price protection) + +```python +response = subtensor.add_stake( + wallet=wallet, + hotkey_ss58="5F...", + netuid=1, + amount=bt.Balance.from_tao(100), + safe_staking=False # Disable protection; Unnecessary as this is the default setting +) +``` + +## Price Protection Simulation + +The following script runs through several different stake and unstake operations with different price protection modes, to demonstrate the different behaviors contingent on price. + +Prerequisites: + +- [Run a Local Bittensor Blockchain Instance](../local-build/deploy) +- [Create a subnet on a local blockchain](../local-build/create-subnet) + +:::tip troubleshooting tip +If you see a `Custom error: 14` or a `SubtokenDisabled(Module)` error, you may need to start emissions on your subnet with the following command: + +```shell +btcli s start +``` + +::: + +```python +import bittensor as bt + +def display_balances_and_stakes(subtensor, wallet, target_hotkey, netuid, label): + """Display current balances and stakes for the simulation.""" + print(f"\n--- {label} ---") + balance = subtensor.get_balance(wallet.coldkey.ss58_address) + stakes = subtensor.get_stake_info_for_coldkey(wallet.coldkey.ss58_address) + + print(f"Coldkey balance: {balance}") + + # Find stake for our target hotkey and netuid + target_stake = None + for stake_info in stakes: + if stake_info.hotkey_ss58 == target_hotkey and stake_info.netuid == netuid: + target_stake = stake_info.stake + break + + if target_stake: + print(f"Stake on {target_hotkey[:8]}... (netuid {netuid}): {target_stake}") + else: + print(f"No stake found on {target_hotkey[:8]}... (netuid {netuid})") + +def show_current_price_and_protection(subtensor, netuid, tolerance, label): + """Show current subnet price and calculate protection thresholds.""" + print(f"\n{label} Price Analysis:") + subnet_info = subtensor.subnet(netuid=netuid) + current_price = subnet_info.price + print(f"Current price: {current_price}") + + # Calculate protection thresholds + price_floor = current_price.tao * (1 - tolerance) + price_ceiling = current_price.tao * (1 + tolerance) + + print(f"Price protection with {tolerance:.2%} tolerance:") + print(f" • Price floor (unstaking): {price_floor:.6f} TAO/α") + print(f" • Price ceiling (staking): {price_ceiling:.6f} TAO/α") + print(f" • Protection range: {price_floor:.6f} - {price_ceiling:.6f} TAO/α") + + return subnet_info + +def demonstrate_protection_modes(): + """Comprehensive demonstration of all three price protection modes.""" + + print("=== Bittensor Price Protection Mode Simulation ===\n") + + # Connect to local network + subtensor = bt.Subtensor("ws://127.0.0.1:9945") + + # Get subnet information + netuid = 2 + subnet_info = subtensor.subnet(netuid=netuid) + if subnet_info is None: + print(f"Error: Could not connect to subnet {netuid}. Is the local node running?") + return False + + print(f"Connected to subnet {netuid}") + print(f"Alpha in reserve: {subnet_info.alpha_in}") + print(f"TAO in reserve: {subnet_info.tao_in}") + + # Initialize wallet + wallet = bt.Wallet(name="Alice") + + try: + wallet.unlock_coldkey() + except Exception as e: + print(f"Error: Could not unlock wallet. Make sure 'Alice' wallet exists and is unlocked. {e}") + return False + + # Get registered hotkeys for the subnet + metagraph = subtensor.metagraph(netuid=netuid) + registered_hotkeys = metagraph.hotkeys + + if not registered_hotkeys: + print(f"Error: No registered hotkeys found on subnet {netuid}.") + return False + + target_hotkey = registered_hotkeys[0] + print(f"Using registered hotkey: {target_hotkey[:8]}...") + + # Display initial state + display_balances_and_stakes(subtensor, wallet, target_hotkey, netuid, "Initial State") + + print("\n" + "="*60) + print("SIMULATION: Testing price protection modes") + print("="*60) + + # Test amounts + stake_amount = 5.0 # TAO + + # Mode 1: UNSAFE MODE (No Protection) + print(f"\n{'='*20} MODE 1: UNSAFE (No Protection) {'='*20}") + print("Executes transaction regardless of price movements") + + subnet_info = show_current_price_and_protection(subtensor, netuid, 0.0, "Pre-Unsafe") + + try: + print(f"\nStaking {stake_amount} TAO with NO protection...") + response = subtensor.add_stake( + wallet=wallet, + hotkey_ss58=target_hotkey, + netuid=netuid, + amount=bt.Balance.from_tao(stake_amount), + safe_staking=False # No protection + ) + + print(response) + + except Exception as e: + print(f"❌ Unsafe staking failed: {e}") + + # Show price after unsafe transaction + show_current_price_and_protection(subtensor, netuid, 0.0, "Post-Unsafe") + + display_balances_and_stakes(subtensor, wallet, target_hotkey, netuid, "After Unsafe Staking") + + # Mode 2: SAFE MODE with VERY strict tolerance (should fail) + print(f"\n{'='*20} MODE 2: SAFE with STRICT Tolerance {'='*20}") + print("Rejects transaction if price moves beyond tolerance") + + strict_tolerance = 0.001 # 0.1% tolerance - very strict + large_stake_amount = 20.0 # Larger amount to trigger protection + + subnet_info = show_current_price_and_protection(subtensor, netuid, strict_tolerance, "Pre-Safe-Strict") + pre_safe_price = subnet_info.price.tao + price_ceiling = pre_safe_price * (1 + strict_tolerance) + + try: + print(f"\nStaking {large_stake_amount} TAO with SAFE protection (tolerance: {strict_tolerance:.2%})...") + print(f"Transaction should FAIL if final price > {price_ceiling:.6f} TAO/α") + + response = subtensor.add_stake( + wallet=wallet, + hotkey_ss58=target_hotkey, + netuid=netuid, + amount=bt.Balance.from_tao(large_stake_amount), + safe_staking=True, + rate_tolerance=strict_tolerance, + allow_partial_stake=False + ) + + print(response) + + if response.success: + # Check if it should have failed + post_subnet_info = subtensor.subnet(netuid=netuid) + post_safe_price = post_subnet_info.price.tao + print(f"Final price: {post_safe_price:.6f} TAO/α") + print(f"Price ceiling was: {price_ceiling:.6f} TAO/α") + + if post_safe_price > price_ceiling: + print(f"🚨 BUG: Transaction succeeded but price ({post_safe_price:.6f}) > ceiling ({price_ceiling:.6f})") + else: + print(f"Price stayed within tolerance: {post_safe_price:.6f} ≤ {price_ceiling:.6f}") + print(f"Actual price increase: {((post_safe_price - pre_safe_price) / pre_safe_price) * 100:.3f}%") + + except Exception as e: + if "Price exceeded tolerance limit" in str(e) or "exceeded tolerance" in str(e) or "tolerance" in str(e).lower(): + print("🛡️ EXPECTED: Transaction rejected - price protection activated!") + else: + print(f"❌ Safe staking failed with unexpected error: {e}") + + # Show price after safe transaction + show_current_price_and_protection(subtensor, netuid, strict_tolerance, "Post-Safe-Strict") + + display_balances_and_stakes(subtensor, wallet, target_hotkey, netuid, "After Strict Safe Staking") + + # Mode 3: SAFE MODE with reasonable tolerance (should succeed) + print(f"\n{'='*20} MODE 3: SAFE with Reasonable Tolerance {'='*20}") + print("Demonstrating normal safe staking that succeeds") + + reasonable_tolerance = 0.05 # 5% tolerance + normal_amount = 5.0 # Normal amount + + subnet_info = show_current_price_and_protection(subtensor, netuid, reasonable_tolerance, "Pre-Safe-Normal") + + try: + print(f"\nStaking {normal_amount} TAO with SAFE protection (tolerance: {reasonable_tolerance:.2%})...") + + response = subtensor.add_stake( + wallet=wallet, + hotkey_ss58=target_hotkey, + netuid=netuid, + amount=bt.Balance.from_tao(normal_amount), + safe_staking=True, + rate_tolerance=reasonable_tolerance, + allow_partial_stake=False + ) + + print(response) + + except Exception as e: + print(f"❌ Safe staking failed: {e}") + + display_balances_and_stakes(subtensor, wallet, target_hotkey, netuid, "After Normal Safe Staking") + + # Mode 4: PARTIAL MODE with strict tolerance (should execute partially) + print(f"\n{'='*20} MODE 4: PARTIAL with STRICT Tolerance {'='*20}") + print("Should execute maximum amount within tolerance") + + partial_strict_tolerance = 0.002 # 0.2% tolerance - very strict for partial + very_large_amount = 50.0 # Very large amount to force partial execution + + subnet_info = show_current_price_and_protection(subtensor, netuid, partial_strict_tolerance, "Pre-Partial-Strict") + + print(f"\nUsing very strict tolerance ({partial_strict_tolerance:.2%}) with large amount ({very_large_amount} TAO)") + print(f"Should execute PARTIAL amount to stay within tolerance") + + # Record balance before to see actual amount executed + balance_before = subtensor.get_balance(wallet.coldkey.ss58_address) + + try: + print(f"\nStaking {very_large_amount} TAO with PARTIAL protection (tolerance: {partial_strict_tolerance:.2%})...") + response = subtensor.add_stake( + wallet=wallet, + hotkey_ss58=target_hotkey, + netuid=netuid, + amount=bt.Balance.from_tao(very_large_amount), + safe_staking=True, + rate_tolerance=partial_strict_tolerance, + allow_partial_stake=True # Allow partial execution + ) + + # Check actual amount executed + balance_after = subtensor.get_balance(wallet.coldkey.ss58_address) + actual_amount_executed = balance_before.tao - balance_after.tao + + print(response) + + if response.success: + print(f"Amount requested: {very_large_amount} TAO") + print(f"Amount actually executed: {actual_amount_executed:.3f} TAO") + execution_percentage = (actual_amount_executed / very_large_amount) * 100 + print(f"Execution percentage: {execution_percentage:.1f}%") + + if actual_amount_executed < very_large_amount * 0.95: # Less than 95% executed + print(f"🎯 SUCCESS: PARTIAL execution detected! Only {execution_percentage:.1f}% executed due to price protection") + else: + print(f"🤔 Unexpected: Near-full execution despite strict tolerance") + + except Exception as e: + print(f"❌ Partial staking failed: {e}") + + # Show price after partial to see impact + show_current_price_and_protection(subtensor, netuid, partial_strict_tolerance, "Post-Partial-Strict") + + display_balances_and_stakes(subtensor, wallet, target_hotkey, netuid, "After Partial Staking") + + # Demonstrate unstaking with protection + print(f"\n{'='*20} UNSTAKING WITH PROTECTION {'='*20}") + print("Demonstrating unstaking with price protection") + + # Find current stake to unstake from + stakes = subtensor.get_stake_info_for_coldkey(wallet.coldkey.ss58_address) + current_stake = None + for stake_info in stakes: + if stake_info.hotkey_ss58 == target_hotkey and stake_info.netuid == netuid: + current_stake = stake_info.stake + break + + if current_stake and current_stake.rao > 0: + unstake_tolerance = 0.05 # 5% tolerance for unstaking + subnet_info = show_current_price_and_protection(subtensor, netuid, unstake_tolerance, "Pre-Unstake") + + # Unstake a portion with protection + unstake_amount_rao = min(current_stake.rao // 4, int(50 * 1e9)) + unstake_balance = bt.Balance.from_rao(unstake_amount_rao).set_unit(netuid=netuid) + + print(f"Current stake: {current_stake}") + print(f"Attempting to unstake: {unstake_balance}") + + try: + print(f"\nUnstaking with SAFE protection (tolerance: {unstake_tolerance:.2%})...") + response = subtensor.unstake( + wallet=wallet, + hotkey_ss58=target_hotkey, + netuid=netuid, + amount=unstake_balance, + safe_unstaking=True, + rate_tolerance=unstake_tolerance, + allow_partial_stake=False + ) + + print(response) + + except Exception as e: + if "Price exceeded tolerance limit" in str(e) or "exceeded tolerance" in str(e): + print("🛡️ Unstaking rejected - price moved beyond tolerance") + else: + print(f"❌ Protected unstaking failed: {e}") + else: + print("No stake available to unstake") + + display_balances_and_stakes(subtensor, wallet, target_hotkey, netuid, "Final State") + show_current_price_and_protection(subtensor, netuid, 0.0, "Final") + + return True + +if __name__ == "__main__": + demonstrate_protection_modes() +``` diff --git a/docs/learn/slippage.md b/docs/learn/slippage.md new file mode 100644 index 0000000000..7f19eac6b1 --- /dev/null +++ b/docs/learn/slippage.md @@ -0,0 +1,110 @@ +--- +title: "Understanding Slippage" +--- + +import { SdkVersion } from "../sdk/_sdk-version.mdx"; + +# Understanding Slippage + +## Introduction + +When staking and unstaking in Bittensor, _slippage_ refers to a difference between the quantity of tokens actually received, and the amount that would be expected based on a static price. This difference is due to the change in price due to the transaction itself. + +Each Bittensor subnet operates as a _constant product AMM_, meaning that it will accept trades that conserve the product of the quantities of the two tokens in reserve, TAO and alpha. To calculate the price in one token of batch of the other token that a buyer wishes to acquire—alpha if they are staking, or TAO if they are unstaking—the algorithm assumes that the transaction does not change this product, so the product of TAO and alpha is the same before and after. + +
+ See how it's calculated! + + When staking, the product K of TAO in reserve and alpha in reserve is the same before and after the transaction, so the initial product must be equal to the product after the cost in TAO is added to the reserve, and the stake is removed from the reserve and placed in the staked hotkey. + + Before: + $$ + \tau_{\mathrm{in}} \,\alpha_{\mathrm{in}} = k + $$ + + After: + $$ + (\tau_{\mathrm{in}} + \text{cost}) \bigl(\alpha_{\mathrm{in}} - \text{stake}\bigr) = k + $$ + + Equal: + + $$ + (\tau_{\mathrm{in}} + \text{cost}) \bigl(\alpha_{\mathrm{in}} - \text{stake}\bigr) + = \tau_{\mathrm{in}} \,\alpha_{\mathrm{in}} + $$ + + + This means that if we choose to stake in a certain amount of TAO (if we specify the cost), then the yielded stake (the quantity of alpha to be removed from reserve and granted to the staked hotkey) is: + + $$ + \text{Stake} = \alpha_{\text{in}} - \frac{\tau_{\text{in}} \alpha_{\text{in}}} {\tau_{\text{in}} + \text{cost}} + $$ + + For example, suppose that a subnet has 100 alpha in reserve and 10 TAO, and we want to stake in 5 TAO. + + The price at this moment is 10 TAO / 100 alpha, or 10 alpha per TAO, so if we stake 5 TAO, we would expect 50 alpha, without taking slippage into account. + + With slippage, the actual alpha received will be less than 50 due to the price impact of the transaction. + + $$ + \text{Stake} = 100 - \frac{ 10 * 100} {10 + 5} + $$ + + or 33.333 alpha sent to the hotkey. So in this case, the slippage is the difference between the ideal expectation of 50 and the actual swap value of 33.33333: + + $$ + 16.667 = 50 - 33.333 + $$ + + This slippage is 50% of the actual swap value, which is extremely high, + because we chose small values for the available liquidity. In general, + slippage is high when available liquidity is limited compared to the + magnitude of the transaction, since the transaction itself is changing the + price significantly. + +
+ +## Calculating Slippage with the SDK + + + +You can use Bittensor's SDK to calculate expected slippage before executing transactions: + +### For Staking Operations + +```python +import bittensor as bt + +# Connect to network +subtensor = bt.Subtensor() +subnet_info = subtensor.subnet(netuid=1) + +# Calculate slippage for staking 10 TAO +amount_tao = 10.0 +slippage_percentage = subnet_info.tao_to_alpha_with_slippage(amount_tao, percentage=True) +print(f"Expected slippage for staking {amount_tao} TAO: {slippage_percentage:.2%}") + +# Get detailed breakdown +alpha_received, slippage_amount = subnet_info.tao_to_alpha_with_slippage(amount_tao) +ideal_alpha = subnet_info.tao_to_alpha(amount_tao) +print(f"Alpha received: {alpha_received}") +print(f"Slippage amount: {slippage_amount}") +print(f"Ideal (no slippage): {ideal_alpha}") +``` + +### For Unstaking Operations + +```python +# Calculate slippage for unstaking 100 alpha +amount_alpha = bt.Balance.from_tao(100).set_unit(1) +slippage_percentage = subnet_info.alpha_to_tao_with_slippage(amount_alpha, percentage=True) +print(f"Expected slippage for unstaking {amount_alpha} alpha: {slippage_percentage:.2%}") + +# Get detailed breakdown +tao_received, slippage_amount = subnet_info.alpha_to_tao_with_slippage(amount_alpha) +ideal_tao = subnet_info.alpha_to_tao(amount_alpha) +print(f"TAO received: {tao_received}") +print(f"Slippage amount: {slippage_amount}") +print(f"Ideal (no slippage): {ideal_tao}") +``` diff --git a/docs/learn/yc3-blog.md b/docs/learn/yc3-blog.md new file mode 100644 index 0000000000..ecf02e9e08 --- /dev/null +++ b/docs/learn/yc3-blog.md @@ -0,0 +1,150 @@ +--- +title: "How Yuma Consensus 3 Makes Bittensor More Fair" +--- + +# How Yuma Consensus 3 Makes Bittensor More Fair + +YC3 is the next evolution of Bittensor's consensus mechanism. It optimizes emissions to reward validators for recognizing innovation quickly. + +See also: +[Yuma Consensus](./yuma-consensus) +[Yuma Consensus 3 (YC3) Migration Guide](./yuma3-migration-guide) + +## Introduction: Understanding Yuma Consensus + +At the heart of every Bittensor subnet lies a fundamental challenge: how do you fairly distribute rewards for work, when that work can include a wide range of different digitial commodities or services? Bittensor approaches this as a distributed judgment problem: **Validators** serve as judges for the whole community, with trust in them being measured by the total stake they have been delegated. Their ratings of the performance of **miners** (who produce the commodities and services for each subnet) determine emissions to those miners. + +But how can we keep validators honest and hard-working to make sure that they do their best effort to accurately judge the miners? + +Yuma Consensus is Bittensor's solution. Validators continuously rank the quality of work done by miners in their subnet, with the rankings of validators being trusted in proportion to how much stake they have received from the community. Lazy or dishonest validators lose emissions for submitting inaccurate rankings, which is likely to cause the community to move their stake to more relabile validators. Hence the community's trust in a given validator, embodied as stake, is linked over time to the emissions earned by the miners that validator rates. Hence validators are kept honest and miners are kept working hard to produce the best commodities possible. + +But how does this work in detail? Each validator submits their rankings of miners they've evaluated. The algorithm then looks at all these rankings and tries to figure out which validators are giving the most reliable, honest evaluations. Validators who consistently make good predictions about which miners _other_ validators will _eventually_ recognize as the best, get _more_ influence in the system. Meanwhile, validators that give stale or otherwise inaccurate evaluations lose out. + +The system builds "bonds" between validators and miners over time. When a validator consistently recognizes a miner's good work, their bond with that miner strengthens, leading to better rewards for both parties. This creates a powerful incentive for validators to be diligent, honest, and forward-thinking in their evaluations. + +But the earlier versions of this system had some significant flaws—particularly when it came to rewarding validators who were ahead of the curve in recognizing promising miners, and ensuring fairness for validators with smaller stakes. Yuma Consensus 3 solves these problems. + +## The Evolution of Consensus + +The Yuma Consensus mechanism, which determines how emissions are distributed, has evolved through several iterations to address fairness concerns. + +### The Limitations of Earlier Versions + +#### Yuma Consensus V1 + +The first version of the algorithm distributed validator rewards based on stake and consensus weight, but had significant limitations: + +- Small validators faced unfair rounding issues +- Limited mechanisms for recognizing early adopters of promising miners + +#### Yuma Consensus V2 + +The second version introduced a more sophisticated bonding mechanism with exponential moving averages, but still struggled with: + +- Unfair penalties for small validators due to rounding errors +- Insufficient rewards for validators who recognized good miners early +- Uniform alpha parameters that didn't account for individual validator-miner relationships +- A serious bug in bond distribution, when validator participation changed dramatically. + +The last and most serious of these issues was that bonds were only redistributed when validators holding at least 50% of total stake cast votes for a given miner. This created a situation where: + +1. **Bonds would freeze** when validators stopped actively voting for a miner. +2. **Historical allocations persisted** for months, even when those validators were no longer evaluating the miner. +3. **New evaluators were locked out** until enough high-stake validators resumed voting. +4. **Unfair reward distribution** occurred when miners became relevant again - old bond holders received rewards despite not currently evaluating, while active evaluators received minimal bonds + +## Yuma Consensus V3 + +Yuma Consensus 3 addresses these fundamental issues with several breakthrough improvements: + +### Per-Bond EMA Scaling + +The most significant innovation in YC3 is that each validator-miner bond pair now gets its own adjustment rate (alpha value) rather than using a single rate for all bonds. This allows individual relationships to evolve at different speeds based on performance and consensus differences. + +When [Liquid Alpha is enabled](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/epoch/run_epoch.rs#L633-L640), the system calculates [individual alpha values](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/epoch/run_epoch.rs#L1166-L1206) for each validator-miner pair using a [sigmoid function](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/epoch/run_epoch.rs#L1274-L1302). When Liquid Alpha is disabled, it falls back to a [uniform alpha calculation](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/epoch/run_epoch.rs#L1304-L1312) based on the bonds moving average parameter. + +### Fair Scaling for All Validators + +Bond values are computed using fixed-point arithmetic and then [converted to u16 for storage efficiency](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/epoch/run_epoch.rs#L859-L861), allowing precise fractional relationships while maintaining a 0-65535 storage scale. This fixes the disadvantages that plagued small-stake validators in previous versions. + +### Early Recognition Rewards + +Validators who identify promising miners before they become widely recognized can now start accumulating bonds early. This creates proper incentives for proactive evaluation rather than just following the crowd. + +The [alpha sigmoid function](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/epoch/run_epoch.rs#L1274-L1302) calculates adjustment rates based on the difference between a validator's current weights and the network consensus. When a validator's weight for a miner differs significantly from consensus, the sigmoid determines whether to increase or decrease the bond adjustment rate, rewarding early recognition while preventing manipulation. + +## Understanding Bonds: The Key to Validator Rewards + +**Bonds** are the mechanism by which validators earn rewards for their evaluation work. Think of them as shares or stakes that validators accumulate with specific miners over time. + +Bonds held by a validator for a given miner, produce emissions in proportion to the strength of the bond and the emissions to the miner. See [source code.](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/epoch/run_epoch.rs#L712) + +**The Technical Implementation:** + +1. **Storage**: Bonds are stored as [sparse matrices](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/epoch/run_epoch.rs#L948-L964) on a 0-65535 scale for efficiency +2. **Computation**: Each epoch, bonds are updated via [Exponential Moving Average (EMA)](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/epoch/run_epoch.rs#L651-L658) based on validator weights and previous bond values +3. **Rewards**: Validator dividends are computed by multiplying bonds with miner incentives + +**Mathematical Foundation:** Under the hood, bonds follow the EMA equation. Here, $\Delta B_{ij}$ is the "instant bond" based on a validator's stake-weighted evaluation of a miner. + +$$ +B_{ij}^{(t)} = \alpha \,\Delta B_{ij} + (1-\alpha)\,B_{ij}^{(t-1)} +$$ + +However, YC3's innovation is that α can now be different for each validator-miner pair rather than uniform across all bonds. The system also applies a bonds penalty factor β when validator weights exceed consensus, helping maintain anti-fraud protection. For the complete mathematical treatment, see the main article on [Yuma Consensus](./yuma-consensus.md#bonding-mechanics). + +### How Validators Acquire Bonds + +**In Yuma v2** (the problematic version): A validator needed to vote on a miner while at least 50% of validators were also voting for that miner. This meant early discoverers got locked out until big validators joined. + +**In Yuma v3**: Validators can [build bonds independently](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/epoch/run_epoch.rs#L1108-L1127) through the EMA process. When Liquid Alpha is enabled, each validator-miner pair gets its own alpha value, allowing bonds to accumulate even when others haven't recognized the miner yet. + +### Liquid Alpha Integration + +YC3 works seamlessly with Liquid Alpha, providing additional rewards for validators who vote for +miners that aren't yet receiving votes from others. This further encourages independent evaluation +and early recognition. +YC3 integrates with Liquid Alpha when [specific conditions are met](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/epoch/run_epoch.rs#L633-L640): + +1. Liquid Alpha must be enabled for the subnet +2. Consensus values must exist and contain non-zero values +3. The network must have sufficient activity + +When these conditions are satisfied, validators receive additional rewards for voting for miners that aren't yet receiving votes from others. If conditions aren't met, the system [falls back to traditional EMA bonding](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/epoch/run_epoch.rs#L1108-L1115). + +### Enhanced EMA Smoothing + +The system maintains strong anti-fraud protection while providing smoother bond transitions. The adjustment rate is controlled by the [bonds moving average parameter](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/epoch/run_epoch.rs#L1055-L1062), which can be configured up to 97.5% (meaning bonds change by 2.5% per epoch toward their target values). + +**Technical note:** The [EMA calculation](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/epoch/run_epoch.rs#L1028) uses `alpha = 1 - (bonds_moving_average / 1_000_000)`, where bonds_moving_average is typically set to 975,000, resulting in approximately 2.5% adjustment per epoch. + +## The Real-World Impact + +YC3 creates a healthier ecosystem by encouraging validators to: + +- **Make independent evaluations** rather than copying popular validators +- **Recognize promising miners early** through differentiated bond adjustment rates +- **Maintain consistent evaluations** while being rewarded for good prediction accuracy +- **Participate meaningfully regardless of stake size** through fair scaling mechanisms + +This transformation means innovation and early recognition are properly rewarded, while maintaining the security and reliability that makes Bittensor networks trustworthy. + +## For Subnet Owners + +Yuma 3 works best in subnets where validators can independently evaluate miners and benefit from early recognition of promising innovations. The system distributes dividends more fairly than previous versions, and when combined with Liquid Alpha, provides powerful tools to encourage independent evaluation. + +YC3 can be [toggled per subnet](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/epoch/run_epoch.rs#L628) through governance mechanisms. The [alpha parameter controls](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/epoch/run_epoch.rs#L1316-L1356) allow fine-tuning of the sigmoid steepness and adjustment ranges for your specific subnet needs. + +**Important considerations:** + +- Liquid Alpha must be enabled to get full YC3 benefits +- The system requires active consensus formation to function optimally +- Bond reset functionality is available for subnets that need it + +## Looking Forward + +As Bittensor continues to grow, YC3 provides a solid foundation for fair and efficient consensus. The system's ability to reward early recognition while maintaining security makes it well-suited for the network's future development. + +For subnet owners ready to embrace more sophisticated consensus mechanisms, YC3 combined with Liquid Alpha provides a powerful toolkit for creating equitable and efficient subnet ecosystems. + +YC3 was introduced to the Subtensor Code base in [PR 1593](https://github.com/opentensor/subtensor/pull/1593). diff --git a/docs/yuma-consensus.md b/docs/learn/yuma-consensus.md similarity index 76% rename from docs/yuma-consensus.md rename to docs/learn/yuma-consensus.md index c5e57c42e8..20e002d74c 100644 --- a/docs/yuma-consensus.md +++ b/docs/learn/yuma-consensus.md @@ -6,28 +6,35 @@ title: "Yuma Consensus" ## Introduction -Yuma Consensus (YC) is a critical algorithmic process within Bittensor, which runs on-chain within Subtensor. Its responsibility is to compute validator and miner emissions from validators' rankings of miners. +Yuma Consensus (YC) is a critical algorithmic process within Bittensor, which runs on-chain within Subtensor. Its responsibility is to compute validator and miner emissions from validators' rankings of miners' performances. -Each of a subnet's validators periodically submit a vector of weights ranking the value of the work of each miner they've evaluated. The YC algorithm resolves this matrix of rankings into two **emissions vectors** that allocate emissions over participants based on their performance: one each for **miners** and **validators**. +Each of a subnet's validators periodically submits a vector of weights ranking the value of the work of each miner they've evaluated. The YC algorithm resolves this matrix of rankings into two **emissions vectors**—one each for **miners** and **validators**. These emissions vectors allocate emissions over participants based on their performances. The algorithm is designed to more heavily weight the inputs of more trusted validators, in order to ignore the portion of the validation signal that is less reliable. By disregarding unreliable weight-settings, YC incentivizes validators to be worthy of trust by working hard to give consistent, fast, honest evaluations of miners that predict the eventual convergence of other validators' evaluations. YC incentivizes miners to work hard for the highest combined evaluation by the community of validators. See: + +- [How Yuma Consensus 3 Makes Bittensor More Fair](./yc3-blog) +- [Yuma Consensus 3 Migration Guide](./yuma3-migration-guide.md) - [Emissions](./emissions) +- [Epoch Implementation](../navigating-subtensor/epoch.md) - Implementation details - [Subtensor Docs: Yuma Consensus](https://github.com/opentensor/subtensor/blob/main/docs/consensus.md) ## Clipping Clipping is designed to punish innacurate miner evaluation, especially in patterns that could constitute collusion to manipulate the accuracy of consensus to favor certain miners. -To achieve this, the judgment of the most trusted validators (as measured by stake) serves as a benchmark. Weights that exceed this benchmark are *clipped*, meaning neither the miner nor the validator receives emissions for them. +To achieve this, the judgment of the most trusted validators (as measured by stake) serves as a benchmark. Weights that exceed this benchmark are _clipped_, meaning neither the miner nor the validator receives emissions for them. This clipping protects against erroneous or collusive over-evaluation of miners by validators. +
+ See how it's calculated + To compute the benchmark $\overline{W_j}$ for miner $j$ and set $\mathbb{V}$ of the subnet's validators, we gather all validator weights $W_{ij}$ for any validator $i \in \mathbb{V}$, sort them by validator’s **stake** $S_i$, and then find the maximum weight level $w$ supported by at least a fraction $\kappa$ of total stake. $$ -\overline{W_j} = \arg \max_{w} +\overline{W_j} = \arg \max_{w} \Bigl(\, \sum_{i \in \mathbb{V}} S_i \,\cdot\, \bigl\{\,W_{ij}\,\ge w \bigr\} \ge \kappa \Bigr). @@ -42,14 +49,18 @@ $$ :::tip note Kappa is a configurable hyperparameter with default: $\kappa = 0.5$. -This means that if *least* generous half (0.5) of the validators (with each validator measured by stake, not 1 per validator) set weights for a given miner to no more than x, then the weights of the other, more generous, half of the validators for that miner are going to be clipped down to x. 'Generous' here refers to giving a high weight to the miner in question. +This means that if _least_ generous half (0.5) of the validators (with each validator measured by stake, not 1 per validator) set weights for a given miner to no more than x, then the weights of the other, more generous, half of the validators for that miner are going to be clipped down to x. 'Generous' here refers to giving a high weight to the miner in question. ::: +
+ ## Miner emissions Miner emissions are based on an aggregate ranking which is the summed rankings of validators, weighted by validators' stake, where $\overline{W_{ij}}$ is the post-clip weight. -$$ +
+ See how it's calculated + $$ R_j = \sum_{i \in \mathbb{V}} S_i \,\cdot\, \overline{W_{ij}} $$ @@ -59,25 +70,35 @@ $$ M_j = \frac{\,R_j\,}{\sum_{k \in \mathbb{M}} R_k} $$ +
+ ## Penalizing out-of-consensus bonds If a validator's evaluation of a miner is too high, it is penalized. If a submitted weight $W_{ij}$ by validator $i$ for miner $j$ exceeds the $j$'s consensus evaluation, $\overline{W_j}$, its bond value is penalized by factor $\beta$. +
+ See how it's calculated + Bond-weight $\widetilde{W_{ij}}$ is: $$ -\widetilde{W_{ij}} +\widetilde{W_{ij}} = (1-\beta)\,W_{ij} +\beta\,\overline{W_{ij}} $$ :::tip note -Penalty factor $\beta$ is a configurable hyperparameter. +Penalty factor $\beta$ is a configurable hyperparameter. ::: +
+ ## Bonding mechanics The **instant bond** $\Delta B_{ij}$ of validator $i$ to miner $j$ is equal to $i$’s stake, $\,S_i$ times $i$'s bond-weight for $j$ normalized by $j$'s total bond-weight for all $\mathbb{V}$ of the subnet's validators: +
+ See how it's calculated + $$ \Delta B_{ij} = \frac{\,S_i \,\cdot\, \widetilde{W_{ij}}\,}{ \sum_{k \in \mathbb{V}} S_k \,\cdot\, \widetilde{W_{kj}}} @@ -89,15 +110,22 @@ $$ B_{ij}^{(t)} = \alpha \,\Delta B_{ij} + (1-\alpha)\,B_{ij}^{(t-1)} $$ -Validators who stay near consensus build stronger EMA bonds and thus extract more emissions, while any attempt to overstate a particular miner’s performance is penalized. The EMA smooths out abrupt swings in validator behavior and incentivizes consistent alignment with the consensus. - :::tip note -The $\alpha$ variable here is unrelated to the concept of subnet specific currencies, referred to as alpha $\alpha$ tokens. Here $\alpha$ refers to a factor used in this EMA smoothing function—see [consensus-based weights, a.k.a. liquid alpha](./subnets/consensus-based-weights.md). +The $\alpha$ variable here is unrelated to the concept of subnet specific currencies, referred to as alpha $\alpha$ tokens. Here $\alpha$ refers to a factor used in this EMA smoothing function—see [consensus-based weights, a.k.a. liquid alpha](../concepts/consensus-based-weights.md). ::: +
+ +Validators who stay near consensus build stronger EMA bonds and thus extract more emissions, while any attempt to overstate a particular miner’s performance is penalized. The EMA smooths out abrupt swings in validator behavior and incentivizes consistent alignment with the consensus. + ## Validator emissions Each validator $i$’s share $V_i$ of validator emissions (41% of each subnet's total emissions) is the sum of all of its bonds to miners, weighted by the miner's total emissions: + +
+See how it's calculated $$ V_i = \sum_{j \in \mathbb{M}} \Bigl(\,B_{ij} \,\times\, M_j\Bigr) -$$ \ No newline at end of file +$$ + +
diff --git a/docs/learn/yuma3-migration-guide.md b/docs/learn/yuma3-migration-guide.md new file mode 100644 index 0000000000..d190d3100e --- /dev/null +++ b/docs/learn/yuma3-migration-guide.md @@ -0,0 +1,115 @@ +--- +title: "Yuma Consensus 3 (YC3) Migration Guide" +--- + +# Yuma Consensus 3 (YC3) Migration Guide + +Yuma Consensus 3 (YC3) is the latest version of the Yuma Consensus mechanism with significant improvements to validator fairness, bond mechanics, and precision handling. This guide will help subnet owners understand what's changed and how to migrate. + +See also: + +- [How Yuma Consensus 3 Makes Bittensor More Fair](./yc3-blog.md) - Technical deep dive and mathematical foundations +- [Subnet Hyperparameters](../subnets/subnet-hyperparameters.md) - Complete parameter reference +- [Yuma Consensus](./yuma-consensus.md) - Understanding the consensus mechanism +- [Subnet Creation](../subnets/create-a-subnet.md) - Creating new subnets with YC3 + +## What is YC3? + +YC3 is a drop-in replacement for the existing Yuma Consensus mechanism that addresses several critical issues while maintaining backward compatibility. Most subnet owners won't need to make any changes - the upgrade is designed to be seamless. + +The most significant innovation in YC3 is per-bond EMA scaling: each validator-miner bond pair now gets its own adjustment rate (alpha value) rather than using a single rate for all bonds. This allows individual relationships to evolve at different speeds based on performance and consensus differences. + +## Timeline + +- Current: YC3 is live and being adopted by subnets +- There is no forced migration deadline - subnets can adopt when ready + +## Key Improvements in YC3 + +### 1. Fair Validator Treatment + +- Problem Fixed: Small validators were previously penalized simply for being small due to rounding issues. +- YC3 Solution: Bond values are now computed using fixed-point arithmetic and converted to u16 for storage efficiency, allowing precise fractional relationships while maintaining a 0-65535 storage scale. + +### 2. Bond Precision Issues + +- Problem Fixed: 16-bit integer precision was insufficient for bond accumulation, causing some validators to receive no bonds despite giving weight to miners. +- YC3 Solution: Enhanced precision handling with fixed-point arithmetic ensures all validators receive appropriate bond allocations. + +### 3. Bond Upscaling and Decay + +- Problem Fixed: Bond upscaling when consensus equals zero was causing unfair distributions. +- YC3 Solution: Fixed bond mechanics with enhanced EMA smoothing ensure more predictable and fair reward distribution. + +### 4. Early Recognition Rewards + +- New Feature: Validators who identify promising miners before they become widely recognized can now start accumulating bonds early. +- Technical Implementation: The alpha sigmoid function calculates adjustment rates based on the difference between a validator's current weights and network consensus. + +### 5. Enhanced Tunability + +- New Feature: Additional parameters allow subnet owners to fine-tune their consensus mechanisms +- Backward Compatible: Existing subnets continue to work with default settings + +## Migration Process + +:::tip no-op +Validators and miners do not need to update their code. +::: + +### Subnet Creators + +Your subnet will continue to function as before until YC3 is enabled. + +To upgrade your subnet to YC3, use the coldkey with subnet creator permissions to run: + +``` +btcli sudo set --param yuma3_enabled +``` + +### Liquid Alpha Integration + +YC3 works with Liquid Alpha when specific conditions are met: + +1. Liquid Alpha must be enabled for the subnet +2. Consensus values must exist and contain non-zero values +3. The network must have sufficient activity + +When these conditions are satisfied, validators receive additional rewards for voting for miners that aren't yet receiving votes from others. + +```bash +# Enable Liquid Alpha +btcli sudo set --param liquid_alpha_enabled --value true --netuid YOUR_NETUID +``` + +## New Tunable Parameters + +YC3 introduces additional hyperparameters for advanced subnet customization: + +### Alpha Sigmoid Steepness + +Controls the steepness of the alpha sigmoid function, affecting reward distribution curves and how quickly bonds adjust to weight changes. + +```bash +# Set alpha sigmoid steepness +btcli sudo set --param alpha_sigmoid_steepness --value YOUR_VALUE --netuid YOUR_NETUID +``` + +### Bonds Moving Average + +The adjustment rate is controlled by the bonds moving average parameter, which can be configured up to 97.5% (meaning bonds change by 2.5% per epoch toward their target values). + +```bash +# Adjust bond smoothing (typical value: 975000 for 2.5% per epoch) +btcli sudo set --param bonds_moving_avg --value 975000 --netuid YOUR_NETUID +``` + +### Alpha High/Low Parameters + +Fine-tune the range of alpha values used in the sigmoid function: + +```bash +# Set alpha range parameters +btcli sudo set --param alpha_high --value YOUR_VALUE --netuid YOUR_NETUID +btcli sudo set --param alpha_low --value YOUR_VALUE --netuid YOUR_NETUID +``` diff --git a/docs/liquidity-positions/liquidity-positions.md b/docs/liquidity-positions/liquidity-positions.md new file mode 100644 index 0000000000..d79be56ec8 --- /dev/null +++ b/docs/liquidity-positions/liquidity-positions.md @@ -0,0 +1,142 @@ +--- +title: User Liquidity Positions (Uniswap) +--- + +import { SdkVersion } from "../sdk/_sdk-version.mdx"; + +# User Liquidity Positions (Uniswap) + +## Overview + +The Liquidity Position feature allows users to provide trading liquidity for specific subnets, within specified price ranges for the subnet $\alpha$ token. This system is based on Uniswap V3's concentrated liquidity model and enables providers to earn fees from trading activity. + +Any TAO holder can contribute to the health of a subnet by creating a Liquidity Position (LP), to provide liquidity for staking/unstaking and stabilizing the subnet's token price. Liquidity positions accumulate fees when users stake and unstake within the defined price range, which the creator of the LP can subsequently withdraw into their wallet. + +Subnet creators can enable/disable the liquidity positions feature on their subnets. + +:::tip +A LP does not accumulate fees for staking operations by the coldkey that owns it. +::: + +See also: + +- [Managing User Liquidity Positions Tutorial](./managing-liquidity-positions.md). + +### Liquidity Positions vs. Staking + +When you stake TAO to a validator, you're essentially voting for that validator's participation in the subnet's consensus mechanism. The validator's total stake (including your delegation) determines their share of emissions and influence in the network. + +Stakers earn emissions off of their stake, which are distributed each tempo. + +Liquidity Positions earn fees when others stake or unstake within the price range defined on the position. + +By providing liquidity to a subnet's trading pool, you're enabling other users to trade between TAO and the subnet's Alpha tokens, creating more liquid market conditions for the subnet and helping to stabilize the subnet's token price. + +### Dynamic token composition + +A liquidity position (LP) can hold TAO, alpha, or both. This depends on the subnet's current token price relative to the range specified for the LP when it was created. + +This compositions represents the token requirements for creating an LP depending, as well as token yield from removing liquidity form the position, depending on the token price relative to the LP's price window, at the block when the transaction executes. + +**Price below range** (`current_price < price_low`): + +- Position becomes **100% Alpha tokens** +- `amount_alpha = liquidity * (1/sqrt_price_low - 1/sqrt_price_high)` +- `amount_tao = 0` + +**Price within range** (`price_low <= current_price <= price_high`): + +- Position maintains **mixed token composition** +- `amount_alpha = liquidity * (1/sqrt_current_price - 1/sqrt_price_high)` +- `amount_tao = liquidity * (sqrt_current_price - sqrt_price_low)` + +**Price above range** (`current_price > price_high`): + +- Position becomes **100% TAO tokens** +- `amount_alpha = 0` +- `amount_tao = liquidity * (sqrt_price_high - sqrt_price_low)` + +[See source code](https://github.com/opentensor/bittensor/blob/master/bittensor/utils/liquidity.py#L28-L58) + +## Liquidity Position Lifecycle + +### Creating Positions + +To create an LP, the user specifies a _liquidity_ parameter, which is converted into some combination of TAO and alpha token balances. TAO are taken from the users coldkey, alpha tokens are taken from the hotkey on which the Liquidity Position was created, and they are locked up in the LP. + +### Modifying a Position + +Its creator can modify an existing LP by adding or removing liquidity. The same formula is applied to determine the required tokens when adding liquidity, and to determine the yield of tokens when exiting liquidity, as when creating the LP. + +### Fee Accumulation + +Fees are generated when users perform swaps (trading TAO for Alpha or vice versa) within their position's price range. + +:::tip +Fees are not added to your position's liquidity, they are tracked separately, in the position's `fees_tao` and `fees_alpha` fields. + +See: [Managing User Liquidity Positions Tutorial: View your LPs](./managing-liquidity-positions.md#view-your-lps) +::: + + + +The blockchain calculates fees for each position based on: + +- Quantity staked/unstaked, tao/alpha respectively +- The the position's liquidity relative to other LPs that have their price range include the transaction. + +[See source code](https://github.com/opentensor/subtensor/blob/master/pallets/swap/src/position.rs#L110-L128) + +#### Fee Distribution + +Fees are not distributed automatically per tempo like emissions. Instead, fees are only distributed to your wallet when you actively withdraw liquidity: + +- **When modifying a position** (adding or removing liquidity): All accumulated fees are automatically collected and sent to your wallet. + [See source code](https://github.com/opentensor/subtensor/blob/master/pallets/swap/src/pallet/mod.rs#L410-L415) + +- **When removing a position entirely**: All accumulated fees are collected along with your position's tokens. + [See source code](https://github.com/opentensor/subtensor/blob/master/pallets/swap/src/pallet/mod.rs#L520-L535) + +This means you must actively manage your positions to claim your earned fees - they remain locked in the position until you perform a position operation (modify or remove). + +### Removing a Position + +When a position is destroyed/removed, the position's liquidity is converted back to tokens based on the current subnet price relative to your position's price range. The position is then deleted from the system. + +[See source code](https://github.com/opentensor/bittensor/blob/master/bittensor/core/extrinsics/asyncex/liquidity.py#L127-L185) + +## The `liquidity` Parameter + + + +The `liquidity` parameter that defines a LP is **not** an amount of TAO or Alpha tokens (or even a sum of the two). Instead, it's a mathematical scaling factor from Uniswap V3's concentrated liquidity model, which calculates the token amounts deducted from your hotkey and coldkey (alpha and TAO respectively) when creating a LP. + +The actual TAO and Alpha amounts that get locked are calculated by the `to_token_amounts()` function, represented below in pseudocode. + +:::note +The composition of the tokens required to create an LP depends on the current token price. +::: + +```python +if current_price < price_low { + # Only Alpha tokens required + alpha_amount = liquidity * (1/√price_low - 1/√price_high) + tao_amount = 0 +} else if current_price > price_high { + # Only TAO tokens required + tao_amount = liquidity * (√price_high - √price_low) + alpha_amount = 0 +} else { + # Both TAO and Alpha required + tao_amount = liquidity * (√current_price - √price_low) + alpha_amount = liquidity * (1/√current_price - 1/√price_high) +} +``` + +See also: + +- [See source code](https://github.com/opentensor/subtensor/blob/master/pallets/swap/src/position.rs#L80-L122) diff --git a/docs/liquidity-positions/managing-liquidity-positions.md b/docs/liquidity-positions/managing-liquidity-positions.md new file mode 100644 index 0000000000..acbdbf912b --- /dev/null +++ b/docs/liquidity-positions/managing-liquidity-positions.md @@ -0,0 +1,615 @@ +--- +title: Managing User Liquidity Positions Tutorial +--- + +In this tutorial we will explore the behavior of Bittensor's Uniswap-style user liquidity positions (LPs). To facilitate this, we'll deploy a Subtensor blockchain locally and create a subnet on it. + +Liquidity positions can be complicated and potentially confusing, as their behavior is sensitive to the subnet price relative to the position's high' and 'low' price boundaries, at several stages of their life-cycle: + +- When a LP is created +- When liquidity is added to an existing LP by modifying it +- During fee accrual +- When liquidity is exited from an existing LP by modifying it +- When liquidity is exited from an existing LP by removing (deleting) the position. + +## Setup + +### Deploy a Bittensor (Subtensor) blockchain locally. + +See: [Deploy a Local Bittensor Blockchain Instance](../local-build/deploy) + +Or try the easy way, by running: + +```bash +docker run --rm --name test_local_chain_ -p 9944:9944 -p 9945:9945 ghcr.io/opentensor/subtensor-localnet:devnet-ready +``` + +### Create a subnet + +Create a subnet managed by the Alice wallet. + +See [Provision wallets: Access the Alice account](../local-build/provision-wallets#access-the-alice-account) + +``` +btcli subnet create \ +--subnet-name awesome-first-subnet \ +--wallet.name alice \ +--network ws://127.0.0.1:9945 +``` + + + +### Start emissions + +First, use the subnet creator key to start emissions on the subnet. Assuming your want to use subnet 2, run: + +```shell +btcli subnet start --netuid 2 \ +--wallet.name sn-creator \ +--network ws://127.0.0.1:9945 +``` + +```console +Are you sure you want to start subnet 2's emission schedule? [y/n]: y +Enter your password: +Decrypting... +✅ Successfully started subnet 2's emission schedule. +``` + +:::tip +After some time has passed, you'll be able to confirm that emissions are flowing by inspecting your subnet's token economy. You'll see a non-zero amount in the _Emissions_ column, indicating, even if no mining activity is occuring, the subnet creator key accumulates emissions. + +If you have only started one subnet, you'll see that it's emissions are always exactly 1 $\tau$. + +See [Emissions](../learn/emissions) + +```shell + btcli view dashboard \ +--wallet.name sn-creator \ +--network ws://127.0.0.1:9945 +``` + +::: + +### Configure the `user_liquidity_enabled` hyperparameter + +Set the `user_liquidity_enabled` hyperparameter to `True` from its default value of `False`. + +```shell +btcli sudo set --netuid 2 \ +--parameter user_liquidity_enabled \ +--value True \ +--wallet.name sn-creator \ +--network ws://127.0.0.1:9945 + +``` + +```console +✅ Hyperparameter user_liquidity_enabled changed to True + + Subnet Hyperparameters + NETUID: 2 (awesome-first-subnet) - Network: custom + + HYPERPARAMETER VALUE NORMALIZED + ──────────────────────────────────────────────────────────────────────── + + (all the hyperparameters...) + + user_liquidity_enabled True True + ──────────────────────────────────────────────────────────────────────── +``` + +:::tip +Confirm the subnet configuration with the following command, checking that `user_liquidity_enabled` is `True`. + +``` +btcli subnet hyperparameters --netuid 2 --network ws://127.0.0.1:9945 +``` + +::: + +### Create and fund a liquidity manager wallet + +Additionally, in order to manage liquidity on a subnet, a user use a hotkey that has some stake on the subnet. Therefore you must register and stake some liquidity into the hotkey. This alpha liquidity will be used for the alpha component when you add liquidity to a position, when creating or modifying it. + +1. Create the wallet + ```shell + btcli w create --wallet.name liquidity-manager --hotkey lp-hotkey + ``` +2. Transfer funds from the Alice account + ``` + btcli wallet transfer \ + --amount 1001 \ + --wallet.name alice \ + --destination "5F7LNFEmsngMV2yaA41WPeYuQmVGcesu5TPJizPDpSUHviVr" \ # Coldkey public key for your liquidity-manager wallet + --network ws://127.0.0.1:9945 + ``` +3. Check your balance in the dashboard + + ```shell + btcli view dashboard \ + --wallet.name liquidity-manager \ + --network ws://127.0.0.1:9945 + ``` + +4. Register your liquidity-manager's hotkey. + + This is the hotkey that will contain alpha stake related to the position. When you add alpha liquidity to the position, it will come from this hotkey, and when you exit it from the position, it will be credited to this hotkey. + + You can either use your wallet's name for the hotkey (as below), or specify the hotkey's ss58 address in interactive mode. If you need to find your hotkey's ss58, use `btcli wallet list`. + + :::tip + On a local blockchain running in fastblocks mode, you will likely need to use the `--period` flag to give you a long enough window before your registration request will expire. + ::: + + ```shell + btcli subnet register \ + --wallet.name liquidity-manager \ + --wallet.hotkey hotsauce \ + --period 20 \ + --network ws://127.0.0.1:9945 + ``` + + ```console + Register to netuid: 2 + Network: custom + + Netuid ┃ Symbol ┃ Cost (Τ) ┃ Hotkey ┃ Coldkey + ━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + 2 │ β │ τ 0.0913 │ 5DJepbhrkAVdf5L3kXLMvjHu8TBB62AAGN8U4LjTtQYoKG9R │ 5F7LNFEmsngMV2yaA41WPeYuQmVGcesu5TPJizPDpSUHviVr + ────────┼────────┼──────────┼──────────────────────────────────────────────────┼────────────────────────────────────────────────── + │ │ │ │ + Your balance is: 1,001.0000 τ + The cost to register by recycle is 0.0913 τ + Do you want to continue? [y/n] (n): y + Enter your password: + Decrypting... + Balance: + 1,001.0000 τ ➡ 1,000.9087 τ + ✅ Registered on netuid 2 with UID 1 + ``` + +## Creating liquidity positions + +The token input when creating a LP depends on whether the current token price is above, below, or within the window between the high and low price that define the position. Therefore you should always check the current token price when creating, removing, or modifying positions, so you correctly anticipate the behavior. + +To observe the token input behavior of liquidity positions, let's create attempt to create 3 LPs, such that the current price is below, within, and above, the positions' respective price windows. + +If we attempt to create an LP with high window, i.e. with its low price above the current token price, or if we attempt to create one with a window that spans the current price, it will fail. That is because the token composition for a LP with a high window is entirely alpha, and for a LP with a window that spans the current price, it is mixed TAO and alpha. Therefore, to create the LP requires some alpha to be staked into the hotkey, and currently the hotkey has no stake. + +However, if we attempt to create a LP with a low window relative to the current price, i.e. with its high price below the current price, it will succeed, because the LP is composed entirely of TAO. + +See [Liquidity Positions: Dynamic token composition](./#dynamic-token-composition). + +### Check the price + +Always check the token price prior to creating LPs so you can predict their behavior. + +To easily view token prices on your local chain, as well as your TAO balance and alpha stakes, use the BTCLI dashboard: + +``` +btcli view dashboard \ +--wallet.name liquidity-manager \ +--network ws://127.0.0.1:9945 +``` + +You can also check the price with the following: + +``` +btcli subnet list --network ws://127.0.0.1:9945 + + Subnets + Network: custom + + + ┃ ┃ Price ┃ Market Cap ┃ ┃ ┃ ┃ ┃ + Netuid ┃ Name ┃ (Τ_in/α_in) ┃ (α * Price) ┃ Emission (Τ) ┃ P (Τ_in, α_in) ┃ Stake (α_out) ┃ Supply (α) ┃ Tempo (k/n) +━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━ + 0 │ τ root │ 1.0000 τ/Τ │ τ 0.00 │ τ 0.0000 │ -, - │ Τ 0.00 │ 0.00 Τ /21M │ -/- + 2 │ β awesome-first-subnet │ 1.0001 τ/β │ τ 13.02k │ τ 1.0000 │ τ 7.00k, 7.00k β │ 6.02k β │ 13.02k β /21M │ 3/10 + 1 │ α apex │ 0.0000 τ/α │ τ 0.00 │ τ 0.0000 │ τ 10.00, 10.00 α │ 1.00 α │ 11.00 α /21M │ 21/100 +────────┼────────────────────────┼─────────────┼─────────────┼──────────────┼─────────────────────────┼───────────────┼───────────────┼───────────── +``` + +### High and spanning window + +These requests are bound to fail, because we have not yet staked any alpha to the hotkey: + +``` +btcli liquidity add --netuid 2 --network ws://127.0.0.1:9945 --wallet.name liquidity-manager --hotkey hotsauce + +Enter the amount of liquidity: 10 +Enter liquidity position low price: 1.1 +Enter liquidity position high price (must be greater than low price): 1.3 + +You are about to add a LiquidityPosition with: + liquidity: 10.0000 τ + price low: 1.1000 τ + price high: 1.3000 τ + to SN: 2 + using wallet with name: liquidity-manager +Would you like to continue? [y/n]: y +Error: Subtensor returned `InsufficientBalance(Module)` error. This means: `The caller does not have enough balance for the operation. + +btcli liquidity add --netuid 2 --network ws://127.0.0.1:9945 --wallet.name liquidity-manager --hotkey hotsauce --liquidity 10 --price-low .5 --price-high 1.5 + +You are about to add a LiquidityPosition with: + liquidity: 10.0000 τ + price low: 0.5000 τ + price high: 1.5000 τ + to SN: 2 + using wallet with name: liquidity-manager +Would you like to continue? [y/n]: y +Error: Subtensor returned `InsufficientBalance(Module)` error. This means: `The caller does not have enough balance for the operation. +``` + +### If the current price is below the window + +However, the following position can be created, because its high price is below the current token price. + +```shell +btcli liquidity add --netuid 2 --network ws://127.0.0.1:9945 --wallet.name liquidity-manager +``` + +```console +Enter the amount of liquidity: 10 +Enter liquidity position low price: .5 +Enter liquidity position high price (must be greater than low price): .7 +Enter your password: +Decrypting... +You are about to add a LiquidityPosition with: + liquidity: 100.0000 τ + price low: 0.5000 τ + price high: 0.7000 τ + to SN: 2 + using wallet with name: liquidity-manager +Would you like to continue? [y/n]: y +LiquidityPosition has been successfully added. +``` + +View the position by running: + +```shell +btcli liquidity list --netuid 2 --network ws://127.0.0.1:9945 --wallet.name liquidity-manager +``` + +```console + + Liquidity Positions of liquidity-manager wallet in SN #2 + Alpha and Tao columns are respective portions of liquidity. +┏━━━━┳━━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━━┓ +┃ ID ┃ Liquidity ┃ Alpha ┃ Tao ┃ Price low ┃ Price high ┃ Fee TAO ┃ Fee Alpha ┃ +┡━━━━╇━━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━┩ +│ 2 │ 10.0 │ 0.0000 β │ 1.2956 τ │ 0.5000 τ │ 0.7001 τ │ 0.0000 τ │ 0.0000 β │ +└────┴───────────┴──────────┴──────────┴───────────┴────────────┴──────────┴───────────┘ + +``` + +### Add alpha to the liquidity manager hotkey + +Next, stake into your hotkey so you'll be able to create those other LPs. + +:::note notes +Use `--partial` to make things easier; this option allows you to specify a large staking amount, and an amount will be staked up to your tolerance threshold. + +If you don't use partial (or unsafe-staking mode), you'll have to find a staking amount that will be tolerated by your slippage limit. +::: + +```shell +btcli stake add --netuid 2 \ +--hotkey hotsauce --amount 10 \ +--wallet.name liquidity-manager \ +--partial \ +--network ws://127.0.0.1:9945 +``` + +```console +Safe staking: enabled (from config). +Rate tolerance: 0.005 (0.5%) by default. Set this using `btcli config set` or `--tolerance` flag +Partial staking: enabled. + + + Wallet Coldkey Balance + Network: custom + + Wallet Name Coldkey Address Free Balance Staked Value Total Balance + ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + liquidity-manager 5F7LNFEmsngMV2yaA41WPeYuQmVGcesu5TPJizPDpSUHviVr 1,000.9100 τ 0.0000 τ 1,000.9100 τ + + + + Total Balance 1,000.9100 τ 0.0000 τ 1,000.9100 τ + ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + +Amount to stake (TAO τ): 10 + + Staking to: + Wallet: liquidity-manager, Coldkey ss58: 5F7LNFEmsngMV2yaA41WPeYuQmVGcesu5TPJizPDpSUHviVr + Network: custom + + Netuid ┃ Hotkey ┃ Amount (Τ) ┃ Rate (per Τ) ┃ Received ┃ Fee (τ) ┃ Rate with tolerance: (0.5%) ┃ Partial stake enabled +━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━ + 2 │ 5DJepbhrkAVdf5L3kXLMvjHu8TBB62AAGN8U4LjTtQYoKG9R │ 10.0000 τ │ 0.666633241675929 β/Τ │ 6.6663 β │ Τ 0.0299 │ 0.6633 β/Τ │ True +────────┼──────────────────────────────────────────────────┼────────────┼────────────────────────┼──────────┼──────────┼─────────────────────────────┼─────────────────────── + │ │ │ │ │ │ │ + +Description: +The table displays information about the stake operation you are about to perform. +The columns are as follows: + - Netuid: The netuid of the subnet you are staking to. + - Hotkey: The ss58 address of the hotkey you are staking to. + - Amount: The TAO you are staking into this subnet onto this hotkey. + - Rate: The rate of exchange between your TAO and the subnet's stake. + - Received: The amount of stake you will receive on this subnet after slippage. + - Rate Tolerance: Maximum acceptable alpha rate. If the rate exceeds this tolerance, the transaction will be limited or rejected. + - Partial staking: If True, allows staking up to the rate tolerance limit. If False, the entire transaction will fail if rate tolerance is exceeded. + +Would you like to continue? [y/n]: y +Enter your password: +Decrypting... +✅ Finalized. Stake added to netuid: 2 +Balance: + 1,000.9100 τ ➡ 990.9100 τ +Subnet: 2 Stake: + 0.0000 τ ➡ 6.6299 β +``` + +If you now view your dashboard, you'll see that your TAO balance has reduced by the staked amount, plus the amount of $\tau$ locked into the liquidity position. + +``` + btcli view dashboard \ +--wallet.name liquidity-manager \ +--network ws://127.0.0.1:9945 +``` + +Now let's try again to create the positions that previously we could not. + +#### High window position + +```shell + +btcli liquidity add --netuid 2 --network ws://127.0.0.1:9945 --wallet.name liquidity-manager --hotkey hotsauce --liquidity 10 --price-low 1.1 --price-high 1.3 +``` + +#### Spanning window position + +```shell +btcli liquidity add --netuid 2 --network ws://127.0.0.1:9945 --wallet.name liquidity-manager --hotkey hotsauce --liquidity 10 --price-low .5 --price-high 1.5 +``` + +### View your LPs + +Now we can see all LPs listed. + +:::note +The `liquidity` parameter you specify is **not** the amount of TAO/Alpha tokens that will be locked up. Instead, it's a mathematical scaling factor from Uniswap V3's concentrated liquidity model, which calculates the token amounts deducted from your hotkey and coldkey (alpha and TAO respectively) when creating a LP. + +Hence you are not charged 10 TAO to create a LP with a magnitude of 10, in this case note that the quantity is 1.295 +::: + +```shell +btcli liquidity list --netuid 2 --network ws://127.0.0.1:9945 --wallet.name liquidity-manager + + Liquidity Positions of liquidity-manager wallet in SN #2 + Alpha and Tao columns are respective portions of liquidity. +┏━━━━┳━━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━━┓ +┃ ID ┃ Liquidity ┃ Alpha ┃ Tao ┃ Price low ┃ Price high ┃ Fee TAO ┃ Fee Alpha ┃ +┡━━━━╇━━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━┩ +│ 5 │ 10.0 │ 1.8226 β │ 2.9407 τ │ 0.5000 τ │ 1.4999 τ │ 0.0000 τ │ 0.0000 β │ +│ 4 │ 10.0 │ 0.7638 β │ 0.0000 τ │ 1.1000 τ │ 1.2999 τ │ 0.0000 τ │ 0.0000 β │ +│ 2 │ 10.0 │ 0.0000 β │ 1.2956 τ │ 0.5000 τ │ 0.7001 τ │ 0.0000 τ │ 0.0000 β │ +└────┴───────────┴──────────┴──────────┴───────────┴────────────┴──────────┴───────────┘ +``` + +## + +Now let's see what happens when we stake and unstake within the trading window of liquidity positions. + +Create a validator coldkey if you don't have one, (See [Provision Wallets for Local Deploy](../local-build/provision-wallets) and [Mine and Validate (Locally): Register](../local-build/mine-validate)) then transfer a small amount of TAO to it from the Alice wallet. + +Then register a hotkey for it on subnet 2. + +Now, let's stake to it from the Alice wallet. + +``` +btcli stake add --netuid 2 \ +--network ws://127.0.0.1:9945 --wallet.name alice --partial --amount 1000 + +Safe staking: enabled (from config). +Rate tolerance: 0.005 (0.5%) by default. Set this using `btcli config set` or `--tolerance` flag +Partial staking: enabled. + + +Enter the wallet hotkey name or ss58 address to stake to (or Press Enter to view delegates): +Using the wallet path from config: /Users/michaeltrestman/.bittensor/wallets + + + + Subnet 2: awesome-first-subnet + Network: custom + + UID ┃ Stake (β) ┃ Alpha (β) ┃ Tao (τ) ┃ Dividends ┃ Incentive ┃ Emissions (β) ┃ Hotkey ┃ Coldkey ┃ Identity +━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━ + 0 │ 11.35k β │ 11.35k β │ τ 0.00 │ 0.000000 │ 0.000000 │ 0.000000 β │ 5Grwva │ 5Grwva │ (*Owner controlled) + 2 │ 751.95 β │ 751.95 β │ τ 0.00 │ 0.000000 │ 0.000000 │ 9.020050 β │ 5CffqS │ 5EEy34 │ ~ + 1 │ 10.84 β │ 10.84 β │ τ 0.00 │ 0.000000 │ 0.000000 │ 0.000000 β │ 5DJepb │ 5F7LNF │ ~ +─────┼───────────┼───────────┼─────────┼───────────┼───────────┼───────────────┼────────┼─────────┼───────────────────── + │ 12.12k β │ 12.12k β │ 0.00 β │ 0.000 │ │ 9.0201 β │ │ │ + + + +Enter the UID of the delegate you want to stake to (or press Enter to cancel): 2 + +Selected delegate: 5CffqSVhydFJHBSbbgfVLAVkoNBTsv3wLj2Tsh1cr2kfanU6 + + Staking to: + Wallet: alice, Coldkey ss58: 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY + Network: custom + + Netuid ┃ Hotkey ┃ Amount (Τ) ┃ Rate (per Τ) ┃ Received ┃ Fee (τ) ┃ Rate with tolerance: (0.5%) ┃ Partial stake enabled +━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━ + 2 │ 5CffqSVhydFJHBSbbgfVLAVkoNBTsv3wLj2Tsh1cr2kfanU6 │ 1,000.0000 τ │ 0.9926136629572226 β/Τ │ 992.6137 β │ Τ 2.9908 │ 0.9877 β/Τ │ True +────────┼──────────────────────────────────────────────────┼──────────────┼─────────────────────────┼────────────┼──────────┼─────────────────────────────┼─────────────────────── + │ │ │ │ │ │ │ + +Description: +The table displays information about the stake operation you are about to perform. +The columns are as follows: + - Netuid: The netuid of the subnet you are staking to. + - Hotkey: The ss58 address of the hotkey you are staking to. + - Amount: The TAO you are staking into this subnet onto this hotkey. + - Rate: The rate of exchange between your TAO and the subnet's stake. + - Received: The amount of stake you will receive on this subnet after slippage. + - Rate Tolerance: Maximum acceptable alpha rate. If the rate exceeds this tolerance, the transaction will be limited or rejected. + - Partial staking: If True, allows staking up to the rate tolerance limit. If False, the entire transaction will fail if rate tolerance is exceeded. + +Would you like to continue? [y/n]: y +✅ Finalized. Stake added to netuid: 2 +Balance: + 996,967.4407 τ ➡ 996,934.4742 τ +Partial stake transaction. Staked: + 32.9665 τ instead of 1,000.0000 τ +Subnet: 2 Stake: + 420.9182 β ➡ 457.4970 β +``` + +So now, examining the liquidity positions, we can see that some small amount of fees have accumulated to the LP whose window spans the current price, but not the others. + +Note that the fees have accumulated to `Fee TAO`, but not to `Fee Alpha`. + +```shell + btcli liquidity list --netuid 2 --network ws://127.0.0.1:9945 --wallet.name liquidity-manager + + Liquidity Positions of liquidity-manager wallet in SN #2 + Alpha and Tao columns are respective portions of liquidity. +┏━━━━┳━━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━━┓ +┃ ID ┃ Liquidity ┃ Alpha ┃ Tao ┃ Price low ┃ Price high ┃ Fee TAO ┃ Fee Alpha ┃ +┡━━━━╇━━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━┩ +│ 4 │ 10.0 │ 1.7729 β │ 2.9908 τ │ 0.5000 τ │ 1.4999 τ │ 0.0001 τ │ 0.0000 β │ +│ 3 │ 10.0 │ 0.7638 β │ 0.0000 τ │ 1.1000 τ │ 1.2999 τ │ 0.0000 τ │ 0.0000 β │ +│ 2 │ 10.0 │ 0.0000 β │ 1.2956 τ │ 0.5000 τ │ 0.7001 τ │ 0.0000 τ │ 0.0000 β │ +└────┴───────────┴──────────┴──────────┴───────────┴────────────┴──────────┴───────────┘ +``` + +Now let's unstake and see what happens + +```shell +btcli stake remove --netuid 2 \ +--partial \ +--wallet.name alice \ +--network ws://127.0.0.1:9945 +``` + +```console +Safe staking: enabled (from config). +Rate tolerance: 0.005 (0.5%) by default. Set this using `btcli config set` or `--tolerance` flag +Partial staking: enabled. + +Enter the hotkey name or ss58 address to unstake from (or Press Enter to view existing staked hotkeys): + + Hotkeys with Stakes for Subnet 2 + + Index ┃ Identity ┃ Netuids ┃ Hotkey Address +━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + 0 │ 5Grw...utQY │ 2 │ 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY + 1 │ 5Cff...anU6 │ 2 │ 5CffqSVhydFJHBSbbgfVLAVkoNBTsv3wLj2Tsh1cr2kfanU6 +───────┼─────────────┼─────────┼────────────────────────────────────────────────── + │ │ │ + +Enter the index of the hotkey you want to unstake from [0/1]: 1 + + + + Stakes for hotkey + 5Cff...anU6 +5CffqSVhydFJHBSbbgfVLAVkoNBTsv3wLj2Tsh1cr2kfanU + 6 + + Subnet ┃ Symbol ┃ Stake Amount ┃ Rate (Τ/α) +━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━ + 2 │ β │ 3,067.5744 β │ 1.012479 τ/β +────────┼────────┼──────────────┼────────────── + │ │ │ + + +Unstake all: 3,067.5744 β from 5Cff...anU6 on netuid: 2? [y/n/q] (n): y + + Unstaking to: + Wallet: alice, Coldkey ss58: 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY + Network: custom + + Netuid ┃ Hotkey ┃ Amount (α) ┃ Rate (Τ/α) ┃ Fee (α) ┃ Received (Τ) ┃ Rate with tolerance: (0.5%) ┃ Partial unstake enabled +━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━ + 2 │ 5Cff...anU6 │ 3,067.5744 β │ 1.012479(Τ/β) │ 9.1744 β │ 3,105.8531 τ │ 1.007416 Τ/β │ True +────────┼─────────────┼──────────────┼───────────────┼──────────┼──────────────┼─────────────────────────────┼───────────────────────── + │ │ │ │ │ 3,105.8531 τ │ │ + +Description: +The table displays information about the stake remove operation you are about to perform. +The columns are as follows: + - Netuid: The netuid of the subnet you are unstaking from. + - Hotkey: The ss58 address or identity of the hotkey you are unstaking from. + - Amount to Unstake: The stake amount you are removing from this key. + - Rate: The rate of exchange between TAO and the subnet's stake. + - Fee: The transaction fee for this unstake operation. + - Received: The amount of free balance TAO you will receive on this subnet after slippage and fees. + - Slippage: The slippage percentage of the unstake operation. (0% if the subnet is not dynamic i.e. root). + - Rate Tolerance: Maximum acceptable alpha rate. If the rate reduces below this tolerance, the transaction will be limited or rejected. + - Partial unstaking: If True, allows unstaking up to the rate tolerance limit. If False, the entire transaction will fail if rate tolerance is exceeded. + +Would you like to continue? [y/n]: y +✅ Finalized +Balance: + 996,934.4742 τ ➡ 997,054.1796 τ +Partial unstake transaction. Unstaked: + 118.8823 β instead of 3,067.5744 β +Subnet: 2 Stake: + 3,075.3541 β ➡ 2,956.4718 β +Unstaking operations completed. +``` + +Now, viewing our LP again, we can see that fees have accumulated to the position's `Fee Alpha` attribute. + +```shell +btcli liquidity list --netuid 2 --network ws://127.0.0.1:9945 --wallet.name liquidity-manager + + Liquidity Positions of liquidity-manager wallet in SN #2 + Alpha and Tao columns are respective portions of liquidity. +┏━━━━┳━━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━━┓ +┃ ID ┃ Liquidity ┃ Alpha ┃ Tao ┃ Price low ┃ Price high ┃ Fee TAO ┃ Fee Alpha ┃ +┡━━━━╇━━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━┩ +│ 4 │ 10.0 │ 1.7978 β │ 2.9657 τ │ 0.5000 τ │ 1.4999 τ │ 0.0001 τ │ 0.0001 β │ +│ 3 │ 10.0 │ 0.7638 β │ 0.0000 τ │ 1.1000 τ │ 1.2999 τ │ 0.0000 τ │ 0.0000 β │ +│ 2 │ 10.0 │ 0.0000 β │ 1.2956 τ │ 0.5000 τ │ 0.7001 τ │ 0.0000 τ │ 0.0000 β │ +└────┴───────────┴──────────┴──────────┴───────────┴────────────┴──────────┴───────────┘ +``` + +## Remove liquidity from the position + +Let's remove the LP and recover the liquidity inside. To see how this affects our balance, run the `dashboard` command once before the `liquidity remove` command, and once after. You will see a small increase in your token balances. + +:::tip +You can find the required LP ID with `btcli liquidity list`, as seen above. +::: + +```shell +btcli liquidity remove --netuid 2 --network ws://127.0.0.1:9945 --wallet.name liquidity-manager +``` + +```console +Enter the liquidity position ID: 5 +Enter the SS58 of the hotkey to use for this transaction.: 5DJepbhrkAVdf5L3kXLMvjHu8TBB62AAGN8U4LjTtQYoKG9R + +You are about to remove LiquidityPositions with: + Subnet: 2 + Wallet name: liquidity-manager + Position id: 5 +Would you like to continue? [y/n]: y +Enter your password: +Decrypting... +Position 5 has been removed. +``` diff --git a/docs/local-build/create-subnet.md b/docs/local-build/create-subnet.md index f6ed712a54..921f2b3306 100644 --- a/docs/local-build/create-subnet.md +++ b/docs/local-build/create-subnet.md @@ -8,151 +8,87 @@ This page covers creating a subnet on a locally deployed Subtensor blockchain, w For creating a subnet on Bittensor test and main network, see [Create a Subnet](../subnets/create-a-subnet). -Prerequisites: -- [Deploy a Subtensor chain locally](./deploy) -- [Provision wallets for the sn-creator, miner, and validator users for this tutorial.](./provision-wallets) +## Prerequisites + +Before continuing with the rest of this tutorial, make sure you've completed the following: +- [Deploy a Subtensor chain locally](./deploy) +- [Provision wallets for the subnet creator, miner, and validator users for this tutorial.](./provision-wallets) +- Sufficient amount of TAO in your subnet creator wallet to cover the [burn cost](../resources/glossary.md#burn-cost). -## Create subnet +## Create a subnet -To access the handy pre-provisioned development "Alice" account on your local chain, use: +Now, let us create a new subnet on the local chain. To create a new subnet, run the following command in your terminal: ```shell btcli subnet create \ --subnet-name awesome-first-subnet \ --wallet.name sn-creator \ ---subtensor.chain_endpoint ws://127.0.0.1:9945 +--network ws://127.0.0.1:9945 ``` -### Trouble shoot -#### Insufficient funds -If you are following this tutorial for the first time, the `subnet create` command will faill with an insufficient balance error. - -The coldkey signing the `subnet create` transaction must have a sufficient $\tau$ balance to cover the burn cost of subnet creation, so called because the funds cannot be recovered. +You will then be prompted to provide the wallet hotkey as well as configure the subnet as shown: ```console Subnet burn cost: τ 1,000.0000 -Your balance of: τ 0.0000 is not enough to burn τ 1,000.0000 to register a subnet. +Your balance is: τ 1,001.0000 +Do you want to burn τ 1,000.0000 to register a subnet? [y/n]:y +Enter your password: +Decrypting... +🌏 📡 Registering subnet.. ``` -Transfer funds from the Alice account to cover it and try again. Consult `btcli w list` and carefully check the ss58 address of the destination coldkey (in this case, the one with the name `sn-creator`). +To check on your newly created subnets, run the following command in your terminal: ```shell -btcli wallet transfer \ ---amount 1001 \ ---wallet.name alice \ ---destination "5C9xw4..." \ ---subtensor.chain_endpoint ws://127.0.0.1:9945 +btcli subnet list --network ws://127.0.0.1:9945 ``` +A list of all subnets in your local subtensor instance is returned: -#### Network Rate Limit Error - -If you see a network rate limit error, you may need to adjust the `SubtensorInitialNetworkRateLimit` chain state parameter. - -See [Clone and tweak the Subtensor source](./deploy#clone-and-tweak-the-subtensor-source) +```console + Subnets + Network: custom + ┃ ┃ Price ┃ Market Cap ┃ ┃ P (τ_in, ┃ Stake ┃ ┃ + Netuid ┃ Name ┃ (τ_in/α_in) ┃ (α * Price) ┃ Emission (τ) ┃ α_in) ┃ (α_out) ┃ Supply (α) ┃ Tempo (k/n) +━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━ + 0 │ τ root │ 1.0000 τ/Τ │ τ 0.00 │ τ 0.0000 │ -, - │ Τ 0.00 │ 0.00 Τ /21M │ -/- + 2 │ β │ 0.0000 τ/β │ τ 1.00k │ τ 0.0000 │ τ 1.00k, │ 0.00 β │ 1.00k β │ 29/360 + │ awesome-fi… │ │ │ │ 1.00k β │ │ /21M │ + 1 │ α apex │ 0.0000 τ/α │ τ 11.00 │ τ 0.0000 │ τ 10.00, │ 1.00 α │ 11.00 α │ 29/100 + │ │ │ │ │ 10.00 α │ │ /21M │ +────────┼─────────────┼─────────────┼─────────────┼──────────────┼─────────────┼──────────────┼─────────────┼───────────── + 4 │ │ τ 1.0 │ │ τ 0.0 │ τ │ │ │ + │ │ │ │ │ 2.01k/29.00 │ │ │ + │ │ │ │ │ (6931.03%) │ │ │ +``` -### Burn cost +### Subnet creation cost -The burn cost for subnet creation is dynamic; it lowers gradually and doubles every time a subnet is created. +The cost for subnet creation is dynamic; it lowers gradually and doubles every time a subnet is created. -:::tip try it live +:::info +Note that this is labeled "burn cost", even though technically the cost of subnet creation is _recycled_, rather than _burned_. -Check the burn cost to create a subnet on Bittensor main network and test network: +See: [Glossary: Recycling and Burning](../resources/glossary#recycling-and-burning) +::: - - - +## Start emissions on the subnet -```shell -btcli subnet burn-cost --network finney -``` - - +To activate your subnet, beginning emissions and allowing staking, run: -```shell -btcli subnet burn-cost --network test ``` - - -::: - -## Fund your subnet - -To remedy your liquidity shortfall, transfer $\tau$ from the Alice account and try again. - -1. First, get the ss58 address for the destination wallet for the transfer: - ```shell - btcli w list - ``` - ```shell - ... - ── Coldkey sn-creator ss58_address 5C9xw4gDyu11ocdpWrmhT1sbi4xEHCpzEMsyMA4jGfAZQofQ - └── Hotkey default ss58_address 5GVsCAY6RuSuoAA1E77xsHJ9PjdZJjJrRkNFDxVtRKPnw7TR - ``` -1. Execute the transfer from alice to the sn-creator wallet - - ```console - btcli wallet transfer \ - --amount 1001 \ - --wallet.name alice \ - --destination "5GVsCAY6RuSuoAA1E77xsHJ9PjdZJjJrRkNFDxVtRKPnw7TR" \ - --subtensor.chain_endpoint ws://127.0.0.1:9945 - ``` - - ```shell - Do you want to transfer: - amount: τ 1,001.0000 - from: alice : 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY - to: 5GVsCAY6RuSuoAA1E77xsHJ9PjdZJjJrRkNFDxVtRKPnw7TR - for fee: τ 0.0001 [y/n]: y - 🌏 📡 Transferring... - ``` -## Success -Create some subnets. - -For example: - -```shell -btcli subnet create \ ---subnet-name awesome-first-subnet \ +btcli subnet start --netuid NETUID \ --wallet.name sn-creator \ ---subtensor.chain_endpoint ws://127.0.0.1:9945 +--network ws://127.0.0.1:9945 ``` -```console -Subnet burn cost: τ 1,000.0000 -Your balance is: τ 1,001.0000 -Do you want to burn τ 1,000.0000 to register a subnet? [y/n]:y -Enter your password: -Decrypting... -🌏 📡 Registering subnet.. -``` - -```shell - btcli subnet create \ ---subnet-name awesome-second-subnet \ ---wallet.name sn-creator \ ---subtensor.chain_endpoint ws://127.0.0.1:9945 -``` +Replace `NETUID` with the netuid of the subnet you want to enable emissions on. -```console -Subnet burn cost: τ 1,999.9405 -▰▱▱▱▱▱▱ 📡Retrieving lock cost from custom... -Your balance is: τ 2,003.0000 -Do you want to burn τ 1,999.9405 to register a subnet? [y/n]: Please enter Y or N -Do you want to burn τ 1,999.9405 to register a subnet? [y/n]: y -Enter your password: -Decrypting... -✅ Registered subnetwork with netuid: 3 -``` +After a while, you can confirm that the subnet's emissions have started by inspecting your subnet's token economy. You'll see a non-zero amount in the *Emission* column, indicating the subnet creator key accumulates emissions. -1. List your subnets +You can confirm the emissions by running the `btcli subnets list` command: -```shell -btcli subnet list \ ---subtensor.chain_endpoint ws://127.0.0.1:9945 -``` ```console Subnets Network: custom @@ -160,14 +96,29 @@ btcli subnet list \ Netuid ┃ Name ┃ (τ_in/α_in) ┃ (α * Price) ┃ Emission (τ) ┃ α_in) ┃ (α_out) ┃ Supply (α) ┃ Tempo (k/n) ━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━ 0 │ τ root │ 1.0000 τ/Τ │ τ 0.00 │ τ 0.0000 │ -, - │ Τ 0.00 │ 0.00 Τ /21M │ -/- - 2 │ β │ 1.0000 τ/β │ τ 1.00k │ τ 0.0000 │ τ 1.00k, │ 0.00 β │ 1.00k β │ 29/360 + 2 │ β │ 1.0000 τ/β │ τ 1.81k │ τ 1.0000 │ τ 1.00k, │ 414.00 β │ 1.81k β │ 29/360 │ awesome-fi… │ │ │ │ 1.00k β │ │ /21M │ - 3 │ γ │ 1.0000 τ/γ │ τ 1.00k │ τ 0.0000 │ τ 1.00k, │ 0.00 γ │ 1.00k γ │ 29/360 - │ awesome-se… │ │ │ │ 1.00k γ │ │ /21M │ - 1 │ α apex │ 1.0000 τ/α │ τ 11.00 │ τ 0.0000 │ τ 10.00, │ 1.00 α │ 11.00 α │ 29/100 + 1 │ α apex │ 0.0000 τ/α │ τ 11.00 │ τ 0.0000 │ τ 10.00, │ 1.00 α │ 11.00 α │ 29/100 │ │ │ │ │ 10.00 α │ │ /21M │ ────────┼─────────────┼─────────────┼─────────────┼──────────────┼─────────────┼──────────────┼─────────────┼───────────── - 4 │ │ τ 3.0 │ │ τ 0.0 │ τ │ │ │ - │ │ │ │ │ 2.01k/29.00 │ │ │ + 4 │ │ τ 1.0 │ │ τ 1.0 │ τ │ │ │ + │ │ │ │ │ 1.41k/562.00│ │ │ │ │ │ │ │ (6931.03%) │ │ │ -``` \ No newline at end of file +``` + +## Troubleshooting + +### Insufficient funds + +The coldkey signing the `subnet create` transaction must have a sufficient $\tau$ balance to cover the burn cost of subnet creation, so called because the funds cannot be recovered. + +```console +Subnet burn cost: τ 1,000.0000 +Your balance of: τ 0.0000 is not enough to burn τ 1,000.0000 to register a subnet. +``` + +To fix this, transfer TAO from the Alice account to cover this transaction and try again. For more information, see [Transfer TAO to wallets](./provision-wallets.md#transfer-tao-to-wallets). + +## Next steps + +With emissions now active on your subnet, you can begin registering and running miners and validators to participate in the network. diff --git a/docs/local-build/deploy.md b/docs/local-build/deploy.md index 3594d8b882..9a964f5d0d 100644 --- a/docs/local-build/deploy.md +++ b/docs/local-build/deploy.md @@ -1,100 +1,188 @@ --- -title: "Build and Deploy the Blockchain" +title: "Run a Local Bittensor Blockchain Instance" +toc_max_heading_level: 2 --- -# Deploy a Local Bittensor Blockchain Instance +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +import Heading from '@theme/Heading'; -This tutorial will guide the user through deploying a local instance of Subtensor, Bittensor's L1 blockchain. This is useful in general Bittensor development, as it gives you more freedom over chain state than when working against mainnet or even testnet. For example, it is much easier to create subnets without having to wait for registration availability. +# Run a Local Bittensor Blockchain Instance -Each local chain is provisioned with an `alice` account with one million $\tau$. +This tutorial will guide the user through running a local instance of Subtensor, Bittensor's L1 blockchain. Running a local instance of the Subtensor blockchain is a great way to test changes and explore the network in a safe and isolated environment. -In the following tutorial, we will also provision several wallets to serve as subnet creator, miner, and validator. +## Running a local subtensor instance -## Prerequisites +This section outlines steps for running a local instance of the Subtensor blockchain. There are two supported methods: -- Update your mac or linux workstation using your package manager -- Install [Bittensor SDK](../getting-started/installation) and [BTCLI](../getting-started/install-btcli) +- Using a prebuilt Docker image +- Running a local build from source +Both approaches enable isolated testing, development, and debugging without requiring a connection to the mainnet. Choose the method that best fits your workflow. -## Build your local Subtensor -### Install Rust/Cargo + + +Docker is the easiest way to set up a local Bittensor blockchain instance. It only takes a few minutes to get up and running with Docker. -To run locally, Substrate requires an up-to-date install of Cargo and Rust +The steps in this guide assume that you are running the command from the machine you intend to host from. -Install from Rust's website: -```shell -curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -``` -Update your shell's source to include Cargo's path: +### Prerequisites -```shell -source "$HOME/.cargo/env" +Before you begin, make sure you have installed the following on your machine: + +- [Docker](https://docs.docker.com/desktop/use-desktop/) +- Install [Bittensor SDK](../getting-started/installation.md) and [Bittensor CLI](../getting-started/install-btcli.md) + +The Bittensor SDK and Bittensor CLI are required to interact with the local blockchain instance. + +### 1. Pull the Docker image + +You can pull the official subtensor Docker image used to create the local blockchain instance from the [GitHub Container Repository](https://github.com/opentensor/subtensor/pkgs/container/subtensor-localnet). To do this, run the following command in your terminal: + +```bash +docker pull ghcr.io/opentensor/subtensor-localnet:devnet-ready ``` -### Clone and tweak the Subtensor source +This command downloads the `subtensor-localnet` Docker image, making it available on your device. -We well clone the source and make a small modification to the state configuration with which the chain is deployed. +### 2. Run the container -Normally, the creation of new subnets is limited to one per day. This is inconvenient for local subnet development, so we will limit this restriction. +Subtensor can either be run in _fast blocks_ mode, which has advantages for development and testing purposes, or _non-fast blocks_. +Below are examples of how to run the container using each mode: +- Fast blocks: Fast block mode reduces block processing time to _250ms per block_, enabling rapid chain progression. It allows faster feedback cycles for operations such as staking, subnet creation, and registration, making them ideal for local testing scenarios. To run the container in fast block mode, run the following command in your terminal: + ```bash + docker run --rm --name local_chain -p 9944:9944 -p 9945:9945 ghcr.io/opentensor/subtensor-localnet:devnet-ready + ``` -1. Fetch the subtensor codebase to your local machine. +- Non-fast blocks: Non-fast block mode uses the default _12-second block time_, aligning with subtensor block intervals. While this mode utilizes the default block processing time, it also incorporates some enhancements—for example, subnets become eligible to start one minute after creation. To run the container in non-fast block mode, run the following command in your terminal: ```bash - git clone https://github.com/opentensor/subtensor.git + docker run --rm --name local_chain -p 9944:9944 -p 9945:9945 ghcr.io/opentensor/subtensor-localnet:devnet-ready False ``` -1. Open the source file `subtensor/runtime/src/lib.rs` in the your editor of choice, and find where the variable `SubtensorInitialNetworkRateLimit` is set. It is normally configured to 7200, which is the number of blocks per day written to the chain, i.e. the seconds in a day divided by 12, since a Subtensor block is written every twelve seconds. +:::info +By default, exiting the Docker container removes the image container with the local chain instance; thus, deleting the state of the local chain instance running on it. You can modify this behavior by when running the container wihtout the `--rm` flag. -In otherwords, this setting limits the number of new subnets that can be created to one per day. Let's change the value to 1 (block), so we can create a new subnet every 12 seconds if we want to. +For more information, see official [Docker documentation](https://docs.docker.com/reference/cli/docker/container/run/). +::: +### 3. Verify your setup -### Setup Rust +You can verify your local blockchain instance by checking the list of subnets available on your local blockchain. To do this, run the following command in the terminal: -This step ensures that you have the nightly toolchain and the WebAssembly (wasm) compilation target. Note that this step will run the Subtensor chain on your terminal directly, hence we advise that you run this as a background process using PM2 or other software. +```bash +btcli subnet list --network ws://127.0.0.1:9944 +``` -Update to the nightly version of Rust: +If the local blockchain is running correctly, you should see the following output: + +```console + Subnets + Network: custom + + + ┃ ┃ Price ┃ Market Cap ┃ ┃ ┃ ┃ ┃ + Netuid ┃ Name ┃ (τ_in/α_in) ┃ (α * Price) ┃ Emission (τ) ┃ P (τ_in, α_in) ┃ Stake (α_out) ┃ Supply (α) ┃ Tempo (k/n) +━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━ + 0 │ τ root │ 1.0000 τ/Τ │ τ 0.00 │ τ 0.0000 │ -, - │ Τ 0.00 │ 0.00 Τ /21M │ -/- + 1 │ α apex │ 1.0000 τ/α │ τ 11.00 │ τ 0.0000 │ τ 10.00, 10.00 α │ 1.00 α │ 11.00 α /21M │ 77/100 +────────┼────────┼─────────────┼─────────────┼──────────────┼────────────────────────┼───────────────┼──────────────┼───────────── + 2 │ │ τ 1.0 │ │ τ 0.0 │ τ 10.00/175.00 (5.71%) │ │ │ + +``` + + + + +### Prerequisites + +Before you begin, make sure you have installed the following on your machine: + +- Update your Mac or Linux workstation using your package manager +- Install [Bittensor SDK](../getting-started/installation) and [Bittensor CLI](../getting-started/install-btcli) + +The Bittensor SDK and Bittensor CLI are required to interact with the local blockchain instance. + +### Build your local Subtensor + +The following steps outline how to build a local subtensor instance: + +#### 1. Install Rust/Cargo + +To run locally, Substrate requires an up-to-date install of Cargo and Rust on your local machine. If Rust is already installed, update it using the following command: ```bash -./subtensor/scripts/init.sh +rustup update ``` -### Build +If Rust is not installed, install Rust and then update your shell's source to include Cargo's path by running the following commands: + +```shell +curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh +. "$HOME/.cargo/env" +``` -These steps initialize your local subtensor chain in development mode. These commands will set up and run a local subtensor. +#### 2. Clone the subtensor repo -Build the binary with the faucet feature enabled: +Next, you must fetch the subtensor codebase to your local machine. Run the following commands to clone the Github repo and navigate into the `subtensor` directory: ```bash +git clone https://github.com/opentensor/subtensor.git cd subtensor -cargo build -p node-subtensor --profile release ``` -### Run +Cloning the Subtensor repository provides all the necessary components to build and run the Bittensor blockchain locally. -Next, run the localnet script and turn off the attempt to build the binary (as we have already done this above): + + +#### 3. Setup Rust + +This step ensures that you have the nightly toolchain and the WebAssembly (wasm) compilation target. Note that this step will run the Subtensor chain directly on your terminal; therefore, we advise running it as a background process using PM2 or other software. + +Update to the nightly version of Rust: ```bash -BUILD_BINARY=0 ./scripts/localnet.sh +./subtensor/scripts/init.sh ``` -:::info troubleshooting -If you see errors to the effect that the release cannot be found in `targets/fast-blocks`, you may need to move the build artifacts from `targets/release` to `targets/fast-blocks/release`. -::: +#### 4. Run the blockchain locally +Use the `localnet.sh` script to build and launch a local instance of the subtensor blockchain. To run the blockchain: -## Validate +```bash +./scripts/localnet.sh +``` -Ensure your local chain is working by checking the list of subnets. +This script handles compilation and starts the node in a development-ready state. -Note the use of the `--chain_endpoint` flag to target the local chain, rather than, say, test network +:::info Additional configurations + +By default, running the `localnet.sh` script builds the Subtensor binary, purges any existing chain state, and launches the local blockchain in [fast block mode](../resources/glossary.md#fast-blocks). To run the local blockchain in [non-fast block mode](../resources/glossary.md#non-fast-blocks), run the following command in your terminal: + +```bash +./scripts/localnet.sh False +``` + +The script also supports additional flags to customize its behavior: + +- `--no-purge`: Skips deletion of the existing chain state, allowing you to resume from a previous session. +- `--build-only`: Compiles the binary and generates the chainspec without starting the node. + +These flags make it easy to adapt your localnet setup for different development workflows. +::: + +#### 5. Verify your setup + +Ensure your local chain is working by checking the list of subnets. ```shell - btcli subnet list --subtensor.chain_endpoint ws://127.0.0.1:9945 - btcli subnet list --network test +btcli subnet list --network ws://127.0.0.1:9945 ``` +If the local blockchain is running correctly, you should see the following output: + ```console Subnets Network: custom @@ -110,26 +198,16 @@ Note the use of the `--chain_endpoint` flag to target the local chain, rather th ``` +### Troubleshooting local chain issues -```shell -``` - -```console +If you encounter errors when running the local chain, consider the following: - Subnets - Network: test +- Fast and non-fast block modes are compiled into separate directories. Ensure you're using the correct build for your selected mode and that it has been compiled before starting the chain. +- Any time you pull updates or make changes to the _subtensor_ repository, you must rebuild the chain for those changes to take effect. + + - ┃ ┃ Price ┃ Market Cap ┃ ┃ ┃ ┃ ┃ - Netuid ┃ Name ┃ (τ_in/α_in) ┃ (α * Price) ┃ Emission (τ) ┃ P (τ_in, α_in) ┃ Stake (α_out) ┃ Supply (α) ┃ Tempo (k/n) -━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━ - 0 │ τ root │ 1.0000 τ/Τ │ τ 5.01m │ τ 0.0000 │ -, - │ Τ 3.10m │ 5.01m Τ /21M │ -/- - 277 │ इ muv │ 0.4008 τ/इ │ τ 536.06k │ τ 0.4154 │ τ 199.85k, 498.63k इ │ 838.83k इ │ 1.34m इ /21M │ 39/99 - 3 │ γ templar │ 0.1534 τ/γ │ τ 219.03k │ τ 0.1690 │ τ 110.74k, 722.13k γ │ 706.14k γ │ 1.43m γ /21M │ 65/99 - 119 │ Ⲃ vida │ 0.0748 τ/Ⲃ │ τ 94.83k │ τ 0.1321 │ τ 44.77k, 598.65k Ⲃ │ 669.45k Ⲃ │ 1.27m Ⲃ /21M │ 81/99 - 1 │ α apex │ 0.0587 τ/α │ τ 70.03k │ τ 0.0405 │ τ 30.27k, 515.71k α │ 677.20k α │ 1.19m α /21M │ 63/99 - 13 │ ν dataverse │ 0.0467 τ/ν │ τ 63.12k │ τ 0.0645 │ τ 26.93k, 576.17k ν │ 774.11k ν │ 1.35m ν /21M │ 75/99 - 255 │ ዉ ethiopic_wu │ 0.0181 τ/ዉ │ τ 21.94k │ τ 0.0133 │ τ 10.72k, 592.40k ዉ │ 619.73k ዉ │ 1.21m ዉ /21M │ 17/99 +## Next steps -... -``` +Once your local chain is running, the next step is to provision wallets for local deployment. This includes creating hotkeys and coldkeys, funding wallets, and preparing accounts for testing or development tasks. For more information, see [Provision Wallets for Local Development](./provision-wallets). diff --git a/docs/local-build/mine-validate.md b/docs/local-build/mine-validate.md index 9c0efd4435..a3ad102c42 100644 --- a/docs/local-build/mine-validate.md +++ b/docs/local-build/mine-validate.md @@ -1,125 +1,346 @@ --- -title: "Mine and Validate (Locally)" +title: "Mining and Validating on Localnet" --- -# Mine and Validate (Locally) +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +import { SdkVersion } from "../sdk/_sdk-version.mdx"; -This page continues the tutorial series on local Bittensor development. In this installment, we will deploy minimal, local servers for a miner and validators, serving requests, setting weights, and earning emissions. +# Mining and Validating on Localnet +This page walks through mining and validating on a local Bittensor network. It covers how to register a neuron on a subnet, then run the miner and validator scripts to begin earning emissions. + +For mining and validating on the Bittensor mainnet, see [Mining in Bittensor](../miners/index.md) and [Validating in Bittensor](../validators/index.md). ## Prerequisites +Before continuing with the rest of this tutorial, make sure you've completed the following: + - [Deploy a Subtensor chain locally](./deploy) -- [Provision wallets for the sn-creator, miner, and validator users for this tutorial.](./provision-wallets) -- [Create a Subnet on your local chain](./create-subnet) +- [Provision wallets for the subnet creator, miner, and validator users for this tutorial.](./provision-wallets) +- [Created and started a subnet](./create-subnet) to enable emissions. + +This guide uses Opentensor's [_subnet template_](https://github.com/opentensor/subnet-template/tree/main) repo. The repo provides a minimal implementation for building a custom subnet on the Bittensor network and includes the core logic for the miner and validator. + +## 1. Register the neuron hotkeys -## Register the Miner and Validator +To participate in a subnet, you must first register a hotkey on it. This registration assigns the wallet a unique identifier (UID), which is required to interact with and receive emissions from the subnet. -Register the subnet miner and validator with the following commands: +To register the hotkey, run the following command in your terminal, replacing `NETUID`, `WALLET_NAME`, and `WALLET_HOTKEY` with the target subnet ID, the name of the wallet, and the associated hotkey, respectively, as shown: ```bash -btcli subnet register \ ---wallet.name validator \ ---wallet.hotkey default \ ---subtensor.chain_endpoint ws://127.0.0.1:9945 +btcli subnets register --netuid NETUID \ +--wallet-name WALLET_NAME \ +--hotkey WALLET_HOTKEY \ +--network ws://127.0.0.1:9945 +``` + +You will be prompted to confirm the registration fee and enter your wallet password to authorize the transaction. + +
+Show Sample Output + +```console +Warning: Verify your local subtensor is running on port 9944. subtensor_interface.py:88 +Using the specified network local from config + + Register to netuid: 2 + Network: local + + Netuid ┃ Symbol ┃ Cost (Τ) ┃ Hotkey ┃ Coldkey +━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + 2 │ β │ τ 0.0985 │ 5FErfAJc3Wf32TVLQTtM....TRTrgMF4sjYWfq49oMCxXxqS │ 5Gxhv5iZGBvvR6YJeEdLmvZ7hS....dHc43fLqMVkhki7j4 +────────┼────────┼──────────┼──────────────────────────────────────────────────┼────────────────────────────────────────────────── + │ │ │ │ +Your balance is: 99,999.9000 τ +The cost to register by recycle is 0.0985 τ +Do you want to continue? [y/n] (n): y +Enter your password: +Decrypting... +Balance: + 99,999.9000 τ ➡ 99,999.8015 τ +✅ Registered on netuid 3 with UID 2 ``` + +
+ +Repeat the registration process for both the miner and validator hotkeys. + +To confirm the registration of your hotkeys in the subnet, run the following command in your terminal: + +```sh +btcli subnet show --netuid NETUID --network ws://127.0.0.1:9945 +``` + +The command returns detailed information about a subnet including its registered neurons and their state. + +
+Show Sample Output + +```console + +Warning: Verify your local subtensor is running on port 9944. subtensor_interface.py:89 + + + + Subnet 2: New subnet + Network: local + + UID ┃ Stake (β) ┃ Alpha (β) ┃ Tao (τ) ┃ Dividends ┃ Incentive ┃ Emissions (β) ┃ Hotkey ┃ Coldkey ┃ Identity +━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━ + 0 │ 5.04 β │ 5.04 β │ τ 0.00 │ 0.000000 │ 0.000000 │ 9.017303 β │ 5DFZTw │ 5Dc1Qu │ (*Owner controlled) + 1 │ 0.00 β │ 1.00 β │ τ 0.00 │ 0.000000 │ 0.000000 │ 0.000000 β │ 5FErfA │ 5GxHV5 │ ~ + 2 │ 0.00 β │ 1.00 β │ τ 0.00 │ 0.000000 │ 0.000000 │ 0.000000 β │ 5GRLEv │ 5EnNgi │ ~ +─────┼───────────┼───────────┼─────────┼───────────┼───────────┼───────────────┼────────┼─────────┼───────────────────── + │ 5.04 β │ 5.04 β │ 0.00 β │ 0.000 │ │ 9.017303 β │ │ │ + + +Subnet 2: New subnet + Owner: 5Dc1Qu2pDfWuDzt3c5wJV2LxRXAmVqZYsAib72e59H3vnRVn + Rate: 1.0056 τ/β + Emission: τ 0.0000 + TAO Pool: τ 1.10k + Alpha Pool: 1.10 β + Tempo: 8/360 + Registration cost (recycled): τ 0.0845 + +``` + +
+ +## 2. Acquire validator permit + +To qualify as a validator on a subnet, a registered node must have a validator permit. This permit allows nodes to submit miner evaluations and set weights on a subnet. For more information, see [validator permits](../validators/index.md#requirements-for-validation). + +To get validator permits on the demo subnet, you need to stake sufficient TAO to the validator hotkey. To do this, run the following command in the terminal: + ```bash -btcli subnet register \ ---netuid 2 \ ---wallet.name miner \ ---wallet.hotkey default \ ---subtensor.chain_endpoint ws://127.0.0.1:9945 +btcli stake add --netuid NETUID \ +--wallet-name WALLET_NAME \ +--hotkey WALLET_HOTKEY \ +--partial \ +--network ws://127.0.0.1:9945 ``` +Replace `NETUID`, `WALLET_NAME`, and `WALLET_HOTKEY` with the target subnet ID, the name of the wallet, and the associated hotkey, respectively. + +Once you've staked enough TAO to the validator hotkey, the validator becomes eligible to submit evaluations and set weights on the subnet. You can verify that the validator has been granted a permit using any of the following methods: + + +Run the following command in the terminal: +```bash +btcli wallet overview --wallet.name WALLET_NAME --network ws://127.0.0.1:9945 +``` +Replace the `WALLET_NAME` with the name of the validator wallet. -### Troubleshoot -#### Insufficient funds -If you have not added TAO to your validator wallet, you'll see an error like the following: +
+Show Sample Output ```console -Insufficient balance τ 0.0000 to register neuron. Current recycle is τ 1.0000 TAO +Warning: Verify your local subtensor is running on port 9944. subtensor_interface.py:88 +Using the specified network local from config + Wallet + + test-validator : 5Gxhv5iZGBvvR6YJeEd...bE6FdHc43fLqMVkhki7j4 + Network: local +Subnet: 2: New subnet β + + COLDKEY HOTKEY UID ACTIVE STAKE(β) RANK TRUST CONSENSUS INCENTIVE DIVIDENDS EMISSION(… VTRUST VPE… UPDAT… AXON HOTKEY_SS58 + ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── + test-validator test-validator 1 False 287.57 0.00 0.00 0.00 0.00 0.00 38841066.… 0.00 * 5908 none 5FErfAJc3W + ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── + 1 287.57 β 0.0000 0.0000 0.0000 0.0000 0.0000 ρ38841066 0.0000 + + Wallet free balance: 99,994.3638 τ ``` -Transfer funds from the Alice account to cover it and try again. Consult `btcli w list` and carefully check the ss58 address of the destination coldkey (in this case, the one with the name `validator`). -```shell -btcli wallet transfer \ ---amount 11 \ ---wallet.name alice \ ---destination "5EEy34..." \ ---subtensor.chain_endpoint ws://127.0.0.1:9945 +
+ +If the validator wallet has a validator permit, an asterisk (`*`) is shown under the `VPERMIT` column for the corresponding subnet in the response table. + +
+ + + + +Input the following lines in your Python environment, replacing `NETUID`, `WALLET_NAME`, and `WALLET_HOTKEY` with the target subnet ID, the name of the wallet, and the associated hotkey, respectively. + +```python +import bittensor as bt +network=bt.Subtensor(network="local") +subnet = network.metagraph(NETUID) +wallet = bt.Wallet( name = 'WALLET_NAME', hotkey = 'HOTKEY' ) +my_uid = subnet.hotkeys.index( wallet.hotkey.ss58_address ) +print(f'Validator permit: {subnet.validator_permit[my_uid]}') ``` +The command outputs `True` or `False` depending on whether the validator hotkey has a permit. + +
+ +:::info Validator Permits on Localnet Subnets +On localnet subnets, competition for permits is typically minimal. After staking TAO to the validator hotkey, the neuron should become eligible for a validator permit. If it does not yet have one, wait until the end of the subnet’s tempo. +::: + +## 3. Pull the `subnet-template` repo -### Successful registration +The `subnet-template` repo contains the core logic for the subnet miner and validator. It features a simple `dummy` protocol where miners multiply input values by 2, while validators evaluate responses and update network weights based on performance. + +To begin, clone the subnet-template GitHub repository and navigate into its directory: + +```sh +git clone https://github.com/opentensor/subnet-template.git +cd subnet-template +``` + +## 4. Run the miner and validator + +After getting the validator permits, you can now run the validator alongside the miner to begin participating in the subnet. + +Begin by starting the miner process to produce and submit work to the subnet. Then, run the validator process on a different terminal tab to evaluate miner outputs and set weights for the network. + +:::info +To ensure proper operation, run the miner and validator processes concurrently, each in a separate terminal tab or session. +::: + +### Start the miner process + +To start the miner, run the following Python script in the `subnet-template` directory: + +```sh +python miner.py \ + --wallet.name WALLET_NAME \ + --wallet.hotkey HOTKEY \ + --netuid NETUID \ + --axon.port 8901 \ + --subtensor.network local +``` + +The script launches an Axon server on port `8901`, which the miner uses to receive incoming requests from validators. + +### Start the validator process + +To start the validator process, run the following Python script in the `subnet-template` directory: + +```sh +python validator.py \ + --wallet.name WALLET_NAME \ + --wallet.hotkey HOTKEY \ + --netuid NETUID \ + --subtensor.network local +``` + +This script begins the process of sending inputs to the miners and setting weights based on miner responses. + +:::info miner and validator logs +Use the `--logging.info` flag to print miner and validator log messages directly to the console. This helps you monitor activity in real time. +::: + +## 5. Check your emissions + +After weights have been successfully set on the subnet, you can check the updated emissions distribution at the end of the subnet's [tempo](../resources/glossary.md#tempo). + +To check the subnet's emissions, run the following command in the terminal: + +```sh +btcli subnet show --netuid NETUID --network ws://127.0.0.1:9945 +``` + +The command returns detailed information about a subnet, including its registered neurons, their current state, and updated emission earnings. + +
+Show Sample Output -Repeat the above steps to successfully register your miner and validator once they are funded ```console -netuid: 2 +Using the specified network local from config +Warning: Verify your local subtensor is running on port 9944. subtensor_interface.py:89 - Register to netuid: 2 - Network: custom - Netu… ┃ Sym… ┃ Cost (… ┃ Hotkey ┃ Coldkey -━━━━━━━╇━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - 2 │ β │ τ 1.00… │ 5CffqSVhydFJHBSbbgfVLAVkoNBTsv3wLj2Tsh1cr2kfa… │ 5EEy34R4gfXe5SG62nz1nDuh3KAovRLpKLm4ccSv7qkNhn… -───────┼──────┼─────────┼────────────────────────────────────────────────┼───────────────────────────────────────────────── - │ │ │ │ -Your balance is: τ 11.0000 -The cost to register by recycle is τ 1.0000 -Do you want to continue? [y/n] (n): y -Enter your password: -Decrypting... -Balance: - τ 11.0000 ➡ τ 10.0000 -✅ Registered on netuid 2 with UID 1 -▰▱▱▱▱▱▱ 📡 Recycling TAO for Registration... + + Subnet 2: New subnet + Network: local + + UID ┃ Stake (β) ┃ Alpha (β) ┃ Tao (τ) ┃ Dividends ┃ Incentive ┃ Emissions (β) ┃ Hotkey ┃ Coldkey ┃ Identity +━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━ + 0 │ 109.80 β │ 109.80 β │ τ 0.00 │ 0.000000 │ 0.000000 │ 0.000000 β │ 5DFZTw │ 5Dc1Qu │ (*Owner controlled) + 1 │ 354.68 β │ 354.68 β │ τ 0.00 │ 1.000000 │ 0.000000 │ 148.010826 β │ 5FErfA │ 5Gxhv5 │ Test validator + 2 │ 148.01 β │ 148.01 β │ τ 0.00 │ 0.000000 │ 1.000000 │ 148.010826 β │ 5GRLEv │ 5EnNgi │ Test miner +─────┼───────────┼───────────┼─────────┼───────────┼───────────┼───────────────┼────────┼─────────┼───────────────────── + │ 612.49 β │ 612.49 β │ 0.00 β │ 1.000 │ │ 296.0217 β │ │ │ + + +Subnet 2: New subnet + Owner: 5Dc1Qu2pDfWuDzt3c5wJV2LxRXAmVqZYsAib72e59H3vnRVn + Rate: 1.0054 τ/β + Emission: τ 0.0000 + TAO Pool: τ 1.62k + Alpha Pool: 1.61k β + Tempo: 23/360 + Registration cost (recycled): τ 0.1000 + ``` -### Check your registration +Note the increase in the miner neuron's `Incentive` column and the validator neuron's `Dividend` column as well as the `Emissions` on both neurons. + +
+ +For more information on a subnet's emission distribution, see [Emissions](../learn/emissions.md). -Confirm your registration on the subnet with the following command: +## Troubleshooting errors -```shell -btcli wallet overview --wallet.name validator --subtensor.chain_endpoint ws://127.0.0.1:9945 +This section discusses errors that could arise while running the validator or miner, and provides steps to diagnose and resolve them. -btcli wallet overview --wallet.name miner --subtensor.chain_endpoint ws://127.0.0.1:9945 +**Insufficient funds** +The coldkey signing the `btcli subnet register` transaction must have a sufficient $\tau$ balance to cover the recycling cost of the registration. + +
+Show sample error + +```console +Insufficient balance 0.0000 τ to register neuron. Current recycle is 0.0970 τ TAO. ``` +
+ +**Unregistered miner or validator** + +This occurs when you attempt to run a miner or validator on a subnet where it is not registered. + +
+Show sample error + ```console - Wallet +Your miner: Wallet (Name: 'test-miner', Hotkey: 'test-miner', Path: '~/.bittensor/wallets/') is not registered to chain connection: Network: local, Chain: ws://127.0.0.1:9944  +Run 'btcli register' and try again. +``` + +
- validator : 5EEy34R4gfXe5SG62nz1nDuh3KAovRLpKLm4ccSv7qkNhnqw - Network: custom -Subnet: 2: awesome-first-subnet β +**`NeuronNoValidatorPermit`** - COLDKEY HOTKEY UID AC… STA… RANK TRU… CON… INC… DIV… EMI… VTR… … U… AXON HOTKE… - ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────── - valida… default 1 Tr… 0.00 0.00 0.00 0.00 0.00 0.00 0.0… 0.00 51 none 5Cffq… - ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────── - 1 0.0… 0.0… 0.0… 0.0… 0.0… 0.0… ρ0 0.0… +This means that the neuron is attempting to set weights without a validator permit. Try fix this, you must stake sufficient TAO to the validator hotkey and wait till the end of the subnet's tempo. +
+Show sample error - Wallet balance: τ10.0 +```console +Failed set weights. Error: Subtensor returned `NeuronNoValidatorPermit(Module)` error. This means: `The caller is attempting to set non-self weights without being a permitted validator. | Please consult https://docs.bittensor.com/errors/subtensor#neuronnovalidatorpermit`. +``` - Wallet +
- miner : 5DA7UsaYbk1UnhhtTxqpwdqjuxhQ2rW7D6GTN1S1S5tC2NRV - Network: custom -Subnet: 2: awesome-first-subnet β +**`WeightVecLengthIsLow`** - COLDKEY HOTKEY UID AC… STA… RANK TRU… CON… INC… DIV… EMI… VTR… … U… AXON HOTKE… - ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────── - miner default 2 Tr… 0.00 0.00 0.00 0.00 0.00 0.00 0.0… 0.00 22 none 5Capz… - ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────── - 1 0.0… 0.0… 0.0… 0.0… 0.0… 0.0… ρ0 0.0… +This error occurs when the validator attempts to set weights for fewer elements than allowed. It often happens when all neurons in the subnet are unresponsive, causing the validator to try setting zero weights for each of them. +
+Show sample error - Wallet balance: τ10.0 +```console +Error: Subtensor returned `WeightVecLengthIsLow(Module)` error. This means: `The dispatch is attempting to set weights on chain with fewer elements than are allowed. | Please consult https://docs.bittensor.com/errors/subtensor#weightveclengthislow`. ``` -```shell -python3 neurons/miner.py netuid=2 -chain_endpoint=ws://127.0.0.1:9945 wallet_name=miner wallet_hotkey=default -``` \ No newline at end of file +
diff --git a/docs/local-build/provision-wallets.md b/docs/local-build/provision-wallets.md index 89611deee8..8a9c81cebc 100644 --- a/docs/local-build/provision-wallets.md +++ b/docs/local-build/provision-wallets.md @@ -1,5 +1,5 @@ --- -title: "Provision Wallets for Local Deploy" +title: "Provision Wallets for Local Blockchain" --- This page continues the previous tutorial for local Bittensor development. @@ -8,69 +8,89 @@ Now that your local Subtensor chain is deployed, you can provision wallets to se Every local blockchain is pre-provisioned with an "Alice" account, which is loaded with one million $\tau$. +## Prerequisites + +To follow along with the rest of this tutorial, ensure that you have a local chain running. To set up a local chain, see [Create a local blockchain instance](./deploy.md). + ## Access the Alice account To access the handy pre-provisioned development "Alice" account on your local chain, use: + ```shell btcli wallet create --uri alice ``` -Confirm Alice's massive $\tau$ bag. +Next, you will be prompted to configure the wallet by setting a name for the wallet's coldkey and hotkey. -```shell - btcli w balance --wallet.name alice --subtensor.chain_endpoint ws://127.0.0.1:9945 +:::tip +To access the 'Alice' wallet, you must use the assigned coldkey name and include the local subtensor chail URL as shown + +```sh +btcli wallet balance --wallet.name alice --network ws://127.0.0.1:9945 ``` +The following should be returned in the console: + ```console Wallet Coldkey Balance Network: custom - Wallet Name Coldkey Address Free Balance Staked Value Staked (w/slippage) Total Balance Total (w/slippage) + Wallet Name Coldkey Address Free Balance Staked Value Total Balance ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - alice 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY τ 999,999.8999 τ 0.0000 τ 0.0000 τ 999,999.8999 τ 999,999.8999 - + alice 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY 1,000,000.0000 τ 0.0000 τ 1,000,000.0000 τ - Total Balance τ 999,999.8999 τ 0.0000 τ 0.0000 τ 999,999.8999 τ 999,999.8999 + Total Balance 1,000,000.0000 τ 0.0000 τ 1,000,000.0000 τ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ``` +::: + ## Provision wallets -You will need wallets for the different personas, i.e., subnet owner, subnet validator and subnet miner, in the subnet. +To proceed with this tutorial, you’ll need to create separate wallets for each role on the Bittensor blockchain. Specifically, create three wallets: one each for the subnet owner, validator, and miner. -- The owner wallet creates and controls the subnet. -- The validator and miner will be registered to the subnet created by the owner. This ensures that the validator and miner can run the respective validator and miner scripts. +- The subnet owner wallet creates and controls the subnet—`sn-creator`. +- The validator and miner wallets will be registered on the created subnet—`test-validator` and `test-miner`. -### Create a coldkey-only wallet for the subnet creator role (they do not need a hotkey): +Using separate wallets for each role ensures they can independently run their respective processes and scripts. + +To create a wallet, run the following command in your terminal: ```bash -btcli wallet new_coldkey \ ---wallet.name sn-creator +btcli wallet create \ +--wallet.name WALLET_NAME \ +--hotkey WALLET_HOTKEY \ +--network ws://127.0.0.1:9945 ``` -### Set up the miner's wallet with a coldkey and hotkey: +Replace `WALLET_NAME` and `WALLET_HOTKEY` with the appropriate identifiers for each role—subnet creator, miner, or validator. -```bash -btcli wallet new_coldkey \ ---wallet.name miner -``` +### Transfer TAO to wallets -```bash -btcli wallet new_hotkey \ ---wallet.name miner \ ---wallet.hotkey default +After creating your wallets, transfer some TAO from the `Alice` account to them to cover the transaction fees required for onchain operations. To transfer TAO, run the following command in your terminal: +```sh +btcli wallet transfer \ +--wallet.name alice \ +--destination DESTINATION_ADDRESS \ +--network ws://127.0.0.1:9945 ``` -### Set up the validator's wallet with a coldkey and hotkey: +Replace `DESTINATION_ADDRESS` with the wallet address you want to send the TAO to. -```bash -btcli wallet new_coldkey \ ---wallet.name validator -``` -```bash -btcli wallet new_hotkey \ ---wallet.name validator \ ---wallet.hotkey default +:::info +Run the `btcli wallets list` command and carefully check the ss58 address of the destination coldkey that you want to fund. +::: + +To confirm your wallet balances, run the following command in your terminal: + +```sh +btcli wallet balance --wallet.name WALLET_NAME --network ws://127.0.0.1:9945 ``` + +## Next steps + +Now that you have created the necessary wallets and funded them with TAO, you can proceed to create a subnet on the local chain. This will enable you to register validators and miners, configure subnet parameters, and begin participating in the network’s consensus and emissions processes. + +To begin, see [Create a subnet locally](create-subnet.md). diff --git a/docs/media-assets.md b/docs/media-assets.md deleted file mode 100644 index 31e39f131b..0000000000 --- a/docs/media-assets.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: "Media Assets" ---- - -# Media Assets - -Download the Bittensor media assets from the below location: - -**Location**: https://github.com/opentensor/developer-docs/tree/main/static/bittensor-media-assets - -**Description**: A zip file (29 MB) containing Bittensor TAO symbol, monogram, logotype, supporting elements and a Opentensor brand guidelines PDF. \ No newline at end of file diff --git a/docs/migration_guide.md b/docs/migration_guide.md deleted file mode 100644 index a67ca2c2b8..0000000000 --- a/docs/migration_guide.md +++ /dev/null @@ -1,140 +0,0 @@ ---- -title: "Bittensor 9.0 Migration Guide" ---- -# Bittensor 9.0 Migration Guide - -This page notes breaking changes for the Bittensor Python SDK `v9.0`. This version supports Dynamic TAO, a major evolution of the Bittensor network's tokenomic architecture. - -See: [Dynamic TAO: What to expect](../dynamic-tao). - -**Contents:** -- [`Subtensor`: removed functions](#subtensor-removed-functions) -- [`Subtensor`: type changes](#subtensor-type-changes) -- [`AsyncSubtensor` parity with `Subtensor`](#asyncsubtensor) -- [`py-substrate-interface` replaced with `async-substrate-interface`](#py-substrate-interface-replaced-with-async-substrate-interface) - -See: [Concurrency with AyncIO and AsyncSubtensor](./subnets/asyncio) - -## Subtensor: removed functions - -### `get_account_next_index` - -This was only used for getting nonce, which can be achieved with `subtensor.substrate.get_account_next_index(hotkey.ss58_address)`. - -### `get_prometheus_info` - -We no longer use prometheus info. - -### `get_total_stake_for_coldkey` - -Not compatible with Dynamic TAO. - -Replaced with [`get_stake`](./dynamic-tao/sdk-cheat-sheet#get_stake), which returns a staked balance for a coldkey, hotkey pair on a specific subnet. - -### `get_total_stake_for_coldkeys` - -Not compatible with Dynamic TAO. - -Replaced with [`get_stake`](./dynamic-tao/sdk-cheat-sheet#get_stake), which returns a staked balance for a coldkey, hotkey pair on a specific subnet. - -### `get_total_stake_for_hotkey` - -Not compatible with Dynamic TAO. - -Replaced with [`get_stake`](./dynamic-tao/sdk-cheat-sheet#get_stake), which returns a staked balance for a coldkey, hotkey pair on a specific subnet. - -### `get_total_stake_for_hotkeys` - -Not compatible with Dynamic TAO. - -Replaced with [`get_stake`](./dynamic-tao/sdk-cheat-sheet#get_stake), which returns a staked balance for a coldkey, hotkey pair on a specific subnet. - -## Subtensor: type changes - -### `__init__` -No longer takes `connection_timeout` or `websocket` args. This is due to `py-substrate-interface` being re-written as `async-substrate-interface`. - -### `amount` - -All Subtensor methods that accept an `amount` arg now accept it only as a `Balance` object, rather than the previous `Union[Balance, int, float]`. - -New helper functions, `tao` and `rao` in `bittensor.utils.balance`, return a `balance` object from the given Tao or Rao amount. - -These methods include the following, and their associated extrinsics: - - `transfer` - - `unstake` - - `add_stake` - - `move_stake` - - `swap_stake` - - `transfer_stake` - - `get_transfer_fee` - - -For example, where `transfer` previously accepted float for the amount, it now takes a `Balance` object, which can be created on the fly: - -**Previously:** -```python -from bittensor.core.subtensor import Subtensor - -subtensor = Subtensor() -subtensor.transfer(wallet, destination, 1.0) -``` - -**Now written as:** - -```python -from bittensor.core.subtensor import Subtensor -from bittensor.utils.balance import tao, rao - -subtensor = Subtensor() -subtensor.transfer(wallet, destination, tao(1.0)) -# or -subtensor.transfer(wallet, destination, rao(1000000000)) -``` - -### consolidation of arg label: `block` -There were some cases where the block arg was called `block_number` or `block_id`. This is standardised, and now all block args are called `block`. - -### `get_block_hash` - -No longer requires `block` arg, will fetch the latest block if not specified. - -### `get_stake_for_coldkey_and_hotkey` - -Arg order has changed. It now takes `(coldkey, hotkey)` to align with the method name. - -In addition, to accomodate changes to staking in dynamic TAO, the function now also accepts an optional list of `netuids` to check for stake, and returns a `dict[int, StakeInfo]`, where `int` is the netuid. If `netuids` is left as `None`, all netuids are fetched. - -### `get_subnet_reveal_period_epochs` - -Type hint is updated to reflect it always returns an `int`, rather than an `Optional[int]`. - -### `query_runtime_api` - -Now accepts params as `Any`, returns `Any`. This is due to an update in `bt-decode` and `async-substrate-interface` that allows for arbitrary decoding of runtime calls. - -### `get_subnet_burn_cost` - -Now returns an `Optional[Balance]` object rather than `Optional[int]` (previously it gave rao `int`) - -### `get_children` - -Now returns `tuple[bool, list[tuple[float, str]], str]` instead of `tuple[bool, list[tuple[int, str]], str]`, as the proportions are now normalised floats. - -## `AsyncSubtensor` - -`AsyncSubtensor` and `Subtensor` now have all and only the same methods. - -Check out the wiki entry on [Concurrency in Bittensor](https://github.com/opentensor/bittensor/wiki/Concurrency-in-Bittensor) to learn more. - -## `py-substrate-interface` replaced with `async-substrate-interface` - -`py-substrate-interface` has been completely removed as a requirement, and has been rewritten as `async-substrate-interface`. - -While the main goal of this project was initially just providing an AsyncIO-compatible version of `py-substrate-interface` for our use in `btcli` and `AsyncSubtensor`, we noticed a lot of room for improvement, so we wrote not only the async part, but also a synchronous part. We aimed to be as API-compatible as possible, but there are a few differences (mainly in runtime calls). - -`async-substrate-interface` is its own standalone package, as is a requirement for `bittensor` and `btcli`, replacing `py-substrate-interface`. - -While we do practically all the decoding now through `bt-decode`, we still use `py-scale-codec` for a few `SCALE` encodings. This package will also eventually be replaced by an updated version of `bt-decode`. - -Check out the wiki entry on [Concurrency in Bittensor](https://github.com/opentensor/bittensor/wiki/Concurrency-in-Bittensor) to learn more. diff --git a/docs/miners/autostaking.md b/docs/miners/autostaking.md new file mode 100644 index 0000000000..cabfd2a791 --- /dev/null +++ b/docs/miners/autostaking.md @@ -0,0 +1,183 @@ +--- +title: "Auto Staking for Miners" +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +import { SdkVersion } from "../sdk/_sdk-version.mdx"; + +# Auto Staking for Miners + +Auto staking allows miners to automatically stake their mining income to a validator of their choice, streamlining the process of compound staking without manual intervention. + +## Overview + +The auto staking feature enables miners to set a destination validator where their mining emissions will be automatically staked. This eliminates the need for manual staking operations and ensures that mining rewards are continuously reinvested into the network. + +When auto staking is set, as a miner earns emissions from your subnet participation, their emissions are automatically staked to a specified validator. This conveniently allows miners to grow their stake as they earn it, without the need for repetitive manual stake movement operations. + +### How It Works On Chain + +On the Bittensor blockchain (Subtensor), the `AutoStakeDestination` chain state variable holds autostaking destination hotkeys for each netuid, for each wallet that sets them. + +Setting your wallet's auto stake destinations is mostly easily done with BTCLI or the Bittensor Python SDK, as described below, but can also be set through the `set_coldkey_auto_stake_hotkey` extrinsic (call index 114). + +See [Source code](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/macros/dispatches.rs#L2206). + +### Prerequisites + +- A wallet +- A target hotkey to receive the auto-staked TAO (can be any hotkey, including the miner's own hotkey) + +:::info Coldkey Swap Integration + +When a coldkey is swapped, the auto-stake destination is automatically transferred to the new coldkey, ensuring continuity of auto-staking functionality. + +::: + +## Managing Auto Staking + +You can view and set auto-stake destinations directly from the Bittensor CLI or Bittensor SDK. + +### View current auto-stake destinations + +Shows the target hotkey per subnet for a given coldkey. If none is set, the output notes the default behavior. + + + + +```bash +# By wallet name (uses your configured wallet path) +btcli stake auto --wallet.name + +# By coldkey SS58 address +btcli stake auto --ss58 +``` + +```console +btcli stake auto --wallet.name alice --network local +``` + +```console + Auto Stake Destinations for alice + Network: local + Coldkey: 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY + + Netuid Subnet Status Destination Hotkey Identity +───────────────────────────────────────────────────────────────────────── + 0 root Default + 1 apex Default + 2 zawesome-first-su... Default + +Total subnets: 3 Custom destinations: 0 +``` + + + + + + + +```python +import asyncio +import bittensor as bt + +async def main(): + async with bt.AsyncSubtensor(network="local") as subtensor: + coldkey_ss58 = "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY" # This is the Alice key, replace with your coldkey SS58 + pairs = await subtensor.get_auto_stakes(coldkey_ss58=coldkey_ss58) + if not pairs: + print("No auto-stake destinations set.") + else: + for netuid, hotkey in pairs.items(): + print(f"netuid {netuid}: {hotkey}") + +asyncio.run(main()) +``` + +```shell +netuid 1: 5C4hrfjw9DjXZTzV3MwzrrAr9P1MJhSrvWGWqi1eSuyUpnhM +netuid 2: 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY +``` + + + + +### Set auto-stake destination + +Sets the destination hotkey for your coldkey on a specific subnet. + + + + +```bash +btcli stake set-auto --wallet.name --netuid +``` + +For example + +```shell +btcli stake set-auto --wallet.name alice --network local +``` + +```console +Using the wallet path from config: /Users/michaeltrestman/.bittensor/wallets +Enter the netuid to configure (1): 2 +Enter the hotkey ss58 address to auto-stake to (Press Enter to view delegates): + + Subnet 2: zawesome-first-su... + Network: local • Mechanism 0 + + UID ┃ Stake (β) ┃ Alpha (β) ┃ Tao (τ) ┃ Dividends ┃ Incentive ┃ Emissions (β) ┃ Hotkey ┃ Coldkey ┃ Identity +━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━ + 0 │ 8.38k β │ 8.38k β │ τ 0.00 │ 0.000000 │ 0.000000 │ 0.000000 β │ 5Grwva │ 5Grwva │ (*Owner controlled) + 2 │ 13.38k β │ 13.38k β │ τ 0.00 │ 0.000000 │ 0.000000 │ 9.020050 β │ 5CffqS │ 5EEy34 │ ~ + 1 │ 0.00 β │ 0.00 β │ τ 0.00 │ 0.000000 │ 0.000000 │ 0.000000 β │ 5Capz7 │ 5DA7Us │ ~ +─────┼───────────┼───────────┼─────────┼───────────┼───────────┼───────────────┼────────┼─────────┼───────────────────── + │ 21.77k β │ 21.77k β │ 0.00 β │ 0.000 │ │ 9.0201 β │ │ │ + +Enter the UID of the delegate you want to stake to (or press Enter to cancel): 2 + +Selected delegate: 5CffqSVhydFJHBSbbgfVLAVkoNBTsv3wLj2Tsh1cr2kfanU6 + + Confirm Auto-Stake Destination + Netuid Subnet Destination Hotkey Identity +───────────────────────────────────────────────────────────────────────────────────────────── + 2 zawesome-first-su... 5CffqSVhydFJHBSbbgfVLAVkoNBTsv3wLj2Tsh1cr2kfanU6 + +Set this auto-stake destination? [y/n] (y): y +✅Your extrinsic has been included as 20979-1 +✅ Auto-stake destination set for netuid 2 +``` + + + + +```python +import asyncio +import bittensor as bt + +async def main(): + async with bt.async_subtensor(network="local") as subtensor: + wallet = bt.Wallet( + name="Alice", + ) + wallet.unlock_coldkey() + + netuid = 2 # subnet to configure + hotkey_ss58 = "5C4hrfjw9DjXZTzV3MwzrrAr9P1MJhSrvWGWqi1eSuyUpnhM" # validator hotkey to auto-stake to + + response = await subtensor.set_auto_stake( + wallet=wallet, + netuid=netuid, + hotkey_ss58=hotkey_ss58, + wait_for_inclusion=True, + wait_for_finalization=False, + ) + print(response) + +asyncio.run(main()) +``` + + + diff --git a/docs/miners/index.md b/docs/miners/index.md index 4840719d38..8e51853521 100644 --- a/docs/miners/index.md +++ b/docs/miners/index.md @@ -4,19 +4,20 @@ title: "Mining in Bittensor" import ThemedImage from '@theme/ThemedImage'; import useBaseUrl from '@docusaurus/useBaseUrl'; +import { SdkVersion } from "../sdk/_sdk-version.mdx"; # Mining in Bittensor ## Choosing a subnet -All mining in Bittensor occurs within a subnet. Each subnet independently produces the digital commodities that are its purpose, each subnet creator defining a different _incentive mechanism_ for validators to use in judging miners' work. It is validators scores of miners' performance, according to this incentive mechanism, that determines the proportion of the subnet's emissions allocated to each miner. See [Emissions](../emissions.md). +All mining in Bittensor occurs within a subnet. Each subnet independently produces the digital commodities that are its purpose. Each subnet creator defines a different _incentive mechanism_ for validators to use in judging miners' work. Its validators score miners' performances according to the subnet's incentive mechanism. These scores determine the proportion of the subnet's emissions allocated to each miner. See [Emissions](../learn/emissions.md). -Mining in Bittensor is not like mining Bitcoin or many other blockchains, it is active, creative, and competitive. Preparing to be a subnet miner involves researching the right subnet(s) for _you_ to mine, given your own expertise and access to hardware. +Mining in Bittensor differs significantly from mining Bitcoin or other blockchains. It is active, creative, and competitive. Preparing to be a subnet miner involves researching the right subnet(s) for _you_ to mine, given your own expertise and access to hardware. Browse the subnets and explore links to their code repositories on [TAO.app' subnets listings](https://tao.app). :::tip Typical compute requirements -Each subnet may have distinct hardware requirements, but this [minimum requirements template for subnet creators](https://github.com/opentensor/bittensor-subnet-template/blob/main/min_compute.yml) may give an idea of minimum memory, bandwidth and storage requirements for a typical subnet node. +Each subnet may have distinct hardware requirements, but this [subnet minimum requirements template](https://github.com/opentensor/bittensor-subnet-template/blob/main/min_compute.yml#L14) may give an idea of the minimum memory, bandwidth and storage requirements for miners in a typical subnet node. Mining is not supported on Windows. ::: @@ -26,10 +27,10 @@ Mining is not supported on Windows. To participate as a miner, you must first register a hotkey with the subnet in order to receive a UID on that subnet. :::tip No need to create a subnet to mine -You **do not** have to create a subnet to mine on the Bittensor network. Most miners work on established subnets. +You **do not** have to create a subnet to mine on the Bittensor network. Most miners work on already established subnets. ::: -Registration has a cost in TAO, which fluctuates dynamically based on time since last registration. When you secure a UID slot in a subnet on the main chain, this TAO is sunk cost. +Registration has a cost in TAO, which fluctuates dynamically based on the time since the last registration. When you secure a UID slot in a subnet on the main chain, this TAO is sunk cost and cannot be recovered. A subnet can have a maximum of 64 subnet validator UIDs and 192 subnet miner UIDs (256 total) in subnets other than Subnet 1. @@ -41,14 +42,14 @@ When you delegate your TAO to a subnet validator, you attach your delegated TAO A hotkey can hold multiple UIDs across **separate** subnets. However, within one subnet, each UID must have a unique hotkey. ::: -Run the following command on your terminal, replacing ``, ``, ``. +To register your keys with a subnet, run the following command on your terminal, replacing ``, ``, ``. `` is the `netuid` of your preferred subnet. ```bash btcli subnet register --netuid --wallet.name --wallet.hotkey ``` -For example, for subnet 1 (netuid of 1): +For example, to register your keys with subnet 1—netuid of 1: ```bash btcli subnet register --netuid 1 --wallet.name test-coldkey --wallet.hotkey test-hotkey @@ -56,7 +57,15 @@ btcli subnet register --netuid 1 --wallet.name test-coldkey --wallet.hotkey test ## Miner deregistration -Miners as well as validators can be deregistered if their emissions are low. +A miner can be deregistered if it earns low emissions due to receiving low weights (ratings) from validators. Typical subnets have 256 UID slots per subnet, of which a maximum of 64 subnet can be occupied by validators. Each tempo, the lowest ranked slot is deregistered from the hotkey that holds it and assigned to a new registrant. + +- Every subnet has an `immunity_period` hyperparameter expressed in a number of blocks. + :::tip See + See [`immunity_period`](../subnets/subnet-hyperparameters.md#immunityperiod). + ::: +- A subnet miner or validator at a UID (in that subnet) has a defined number of blocks to improve its performance. This is known as `immunity_period`. When the `immunity_period` expires, that miner or validator can be deregistered if it has the lowest performance in the subnet and a new registration arrives. +- A neuron's `immunity_period` starts when the miner or validator is registered into the subnet. + Validators as well as miners can be deregistered if their emissions are low; either role requires a UID. Typically, subnets have 256 UID slots, with a maximum of 64 slots capable of serving as validators by default. This leaves 192 UIDs for miners, though if there are fewer than 64 eligible validators on a subnet, miners can occupy available slots. @@ -64,7 +73,7 @@ Typically, subnets have 256 UID slots, with a maximum of 64 slots capable of ser Deregistration only occurs on subnets where all 256 UID slots are occupied. If a new registration occurs in a subnet with available UID slots, the registered neuron occupies one of the available UID slots. ::: -Each tempo, the '[neuron](../learn/bittensor-building-blocks)' (miner _or_ validator node) with the lowest 'pruning score' (based solely on emissions), and that is no longer within its [immunity period](../subnets/subnet-hyperparameters.md#immunityperiod), risks being replaced by a newly registered neuron, who takes over that UID. +Each tempo, the '[neuron](../learn/neurons)' (miner _or_ validator node) with the lowest 'pruning score' (based solely on emissions), and that is no longer within its [immunity period](../subnets/subnet-hyperparameters.md#immunityperiod), risks being replaced by a newly registered neuron, who takes over that UID. :::info Deregistration is based on emissions The subnet does not distinguish between miners and validators for the purpose of deregistration. The chain only looks at emissions (represented as 'pruning score'). Whenever a new registration occurs in the subnet, the neuron with the lowest emissions will get deregistered. @@ -76,6 +85,19 @@ Every subnet has an `immunity_period` hyperparameter expressed in a number of bl A subnet neuron (miner or validator) at a UID (in that subnet) has `immunity_period` blocks to improve its performance. When `immunity_period` expires, that miner or validator can be deregistered if it has the lowest performance in the subnet and a new registration arrives. +**Implementation Details:** + +Immunity status is calculated dynamically using the formula `is_immune = (current_block - registered_at) < immunity_period`, where: + +- `current_block` is the current blockchain block number +- `registered_at` is the block number when the neuron was registered +- `immunity_period` is the configured protection period for the subnet (default: 4096 blocks ≈ 13.7 hours) + +**Code References:** + +- [`subtensor/pallets/subtensor/src/utils/misc.rs:442-448`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/utils/misc.rs#L442-448) - Immunity status calculation +- [`subtensor/pallets/subtensor/src/subnets/registration.rs:409-485`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/subnets/registration.rs#L409-485) - Pruning algorithm with immunity priority + :::tip Special cases - In the unlikely event that all neurons are still immune, the one with the lowest "pruning score" will be deregistered by the next incoming registration. @@ -110,6 +132,12 @@ style={{width: 990}} Emissions may not always appear as a smooth curve. Emission might only update at the end of tempo periods, or subnet validators might do more frequent internal updates. For example, a validator might detect new miners and refresh every 100 blocks. ::: +## Auto Staking + +Miners can enable auto staking to automatically stake their mining income to a validator of their choice. This feature streamlines compound staking by eliminating the need for manual staking operations. + +See [Auto Staking for Miners](./autostaking.md) for detailed information on setting up and managing auto staking. + ## Moving a subnet miner to a different machine Once your subnet miner has begun mining, you can move it to a different machine, but proceed with caution. @@ -132,27 +160,29 @@ btcli wallet overview --netuid After providing your wallet name when prompted, you will see output such as: -| Parameter | Value | Description | -| :---------- | :----------------- | :-------------------------------------------------------------------------- | -| COLDKEY | my_coldkey | The name of the coldkey associated with your slot. | -| HOTKEY | my_first_hotkey | The name of the hotkey associated with your slot. | -| UID | 5 | The index of the uid out of available uids. | -| ACTIVE | True | The validator has set weights within the subnet's activity_cutoff | -| STAKE(τ) | 71.296 | The amount of stake in this wallet. | -| RANK | 0.0629 | This miner's absolute ranking according to validators on the network. | -| TRUST | 0.2629 | This miner's trust as a proportion of validators on the network. | -| CONSENSUS | 0.89 | This validator's aggregate consensus score. | -| INCENTIVE | 0.029 | This miner's incentive, TAO emission, is attained via mining. | -| DIVIDENDS | 0.001 | This validator's dividends, TAO emission, are attained via validating. | -| EMISSION | 29_340_153 | This miner's total emission in RAO (10^(-9) TAO) per block. | -| VTRUST | 0.96936 | This validator's trust score as a validator. | -| VPERMIT | \* | For validators: The uid is considered active for validating on this subnet. | -| UPDATED | 43 | Blocks since this miner set weights on the chain. | -| AXON | 131.186.56.85:8091 | The entrypoint advertised by this miner on the bittensor blockchain. | -| HOTKEY_SS58 | 5F4tQyWr... | The ss58-encoded address of the miner's hotkey. | +| Parameter | Example value | Description | +| :---------- | :----------------- | :------------------------------------------------------------------------------------- | +| COLDKEY | my_coldkey | The name of the coldkey associated with your slot. | +| HOTKEY | my_first_hotkey | The name of the hotkey associated with your slot. | +| UID | 5 | Unique identifier of the neuron. | +| ACTIVE | True | Whether or not the uid is considered active. | +| STAKE(τ) | 71.296 | The amount of stake in this wallet. | +| RANK | 0.0629 | This miner's absolute ranking according to validators on the network. | +| TRUST | 0.2629 | This miner's trust score as a proportion of validators on the network. | +| CONSENSUS | 0.89 | The consensus score of the neuron. | +| INCENTIVE | 0.029 | Thencentive score representing the miner's incentive alignment. | +| DIVIDENDS | 0.001 | The dividends earned by the neuron for validating on the subnet. | +| EMISSION | 29_340_153 | The emission in RAO (p) received by the neuron. | +| VTRUST | 0.96936 | The validator trust score indicating the network's trust in the neuron as a validator. | +| VPERMIT | \* | Whether this neuron is considered eligible for validating on this subnetwork. | +| UPDATED | 43 | Blocks since the neuron set weights on the chain. | +| AXON | 131.186.56.85:8091 | The entrypoint advertised by this miner on the bittensor blockchain. | +| HOTKEY_SS58 | 5F4tQyWr... | The ss58-encoded address of the miner's hotkey. | ## Checking miner registration status + + Use any of the Python snippets below: - **Using Python interpreter**: Type "python" or "python3" in your terminal, then paste a snippet. @@ -165,7 +195,7 @@ import bittensor as bt # Replace below with your SS58 hotkey hotkey = "5HEo565WAy4Dbq3Sv271SAi7syBSofyfhhwRNjFNSM2gP9M2" network = "finney" -sub = bt.subtensor(network) +sub = bt.Subtensor(network) print(f"Registration status for hotkey {hotkey} is: {sub.is_hotkey_registered(hotkey)}") ``` @@ -177,7 +207,7 @@ import bittensor as bt hotkey = "5HEo565WAy4Dbq3Sv271SAi7syBSofyfhhwRNjFNSM2gP9M2" network = "finney" netuid = 1 # subnet uid -sub = bt.subtensor(network) +sub = bt.Subtensor(network) mg = sub.metagraph(netuid) if hotkey not in mg.hotkeys: print(f"Hotkey {hotkey} deregistered") @@ -193,7 +223,7 @@ import bittensor as bt hotkey = "5HEo565WAy4Dbq3Sv271SAi7syBSofyfhhwRNjFNSM2gP9M2" network = "finney" netuid = 1 # subnet uid -sub = bt.subtensor(network) +sub = bt.Subtensor(network) mg = sub.metagraph(netuid) uid = 2 # Your UID registered = mg.hotkeys[uid] == hotkey diff --git a/docs/miners/miners-btcli-guide.md b/docs/miners/miners-btcli-guide.md index f55f820400..322d98aa29 100644 --- a/docs/miners/miners-btcli-guide.md +++ b/docs/miners/miners-btcli-guide.md @@ -6,40 +6,40 @@ title: "Miner's Guide to `BTCLI`" This page discusses `btcli` security and usage considerations specifically for Bittensor miners. -For general coverage of `btcli` security and usage considerations across persona, see: [Bittensor CLI: Permissions Guide](../btcli-permissions) +For general coverage of `btcli` security and usage considerations across persona, see: [Bittensor CLI: Permissions Guide](../btcli/btcli-permissions) See also: -- [Wallets, Coldkeys and Hotkeys in Bittensor](../getting-started/wallets) for an introduction to the authentication technology used in Bittensor. -- [Coldkey and Hotkey Workstation Security](../getting-started/coldkey-hotkey-security) for contrete security details about managing keys material. - +- [Wallets, Coldkeys and Hotkeys in Bittensor](../keys/wallets) for an introduction to the authentication technology used in Bittensor. +- [Coldkey and Hotkey Workstation Security](../keys/coldkey-hotkey-security) for contrete security details about managing keys material. ## Intro -Miners in Bittensor work to produce digital commondities. To securely serve these commodities to validators, miners use their registered hotkey to sign requests. Therefore, miners primarily rely on **hotkeys** for daily operations. +Miners in Bittensor work to produce digital commodities. To securely serve these commodities to validators, miners use their registered hotkey to sign requests. Therefore, miners primarily rely on **hotkeys** for daily operations. The **coldkey** is only needed when you need to create or fund that hotkey, or if you want to stake additional TAO or pay the burn for registrations. - Miners must also manage their own TAO and alpha stake (to exit the emissions that accure to them), and hence should familiarize themselves with staking operations. See: + - [Staking/Delegation Overview](../staking-and-delegation/delegation) - [Staker's Guide to `BTCLI`](../staking-and-delegation/stakers-btcli-guide) +Creating hotkeys requires a coldkey private key, and should be done on a secure [coldkey workstation](../keys/coldkey-hotkey-security#coldkey-workstation). However, using hotkeys for signing requests when mining does not require a coldkey, which should never be present on a mining server, i.e. a hotkey workstation. The coldkey should not be placed on a machine used for mining because the software dependencies for mining should not be considered safe/trusted code to the standards of a coldkey workstation. -Creating hotkeys requires a coldkey private key, and should be done on a secure [coldkey workstation](../getting-started/coldkey-hotkey-security#coldkey-workstation). However, using hotkeys for signing requests when mining does not require a coldkey, which should never be present on a mining server, i.e. a hotkey workstation. The coldkey should not be placed on a machine used for mining because the software dependencies for mining should not be considered safe/trusted code to the standards of a coldkey workstation. - -See [Coldkey and Hotkey Workstation Security](../getting-started/coldkey-hotkey-security). +See [Coldkey and Hotkey Workstation Security](../keys/coldkey-hotkey-security). ## Requirements for mining functions ### Unpermissioned workstation (public keys only): + - Check balances - Monitor emissions and other metagraph info - Check subnet alpha prices across Bittensor ### Coldkey workstation: + - Create/import coldkey - Create hotkeys - Manage TAO and alpha stake @@ -48,6 +48,7 @@ See [Coldkey and Hotkey Workstation Security](../getting-started/coldkey-hotkey- - Register a hotkey to mine on a subnet ### Mining node (Hotkey workstation): + - Import/provision hotkey - Provide hotkey to subnet codebase for operations such as axon serving, commitment creation etc @@ -56,18 +57,16 @@ See [Coldkey and Hotkey Workstation Security](../getting-started/coldkey-hotkey- Miners will need coldkeys to manage their TAO and alpha currency, as well as hotkeys to serve requests. Ensure there is a clear boundary: The coldkey should **never** be on an environment with untrusted ML code from containers, frameworks, or libraries that might exfiltrate secrets. ::: -## `btcli` commandsfor miners: +## `btcli` commands for miners: -### Hotkey Managementd +### Hotkey Management -`btcli wallet new-hotkey` , `btcli wallet regen-hotkey`, : Create and register a hotkey on a secure coldkey workstation then transfer the hotkey file or mnemonic to the mining workstation. +`btcli wallet new-hotkey` , `btcli wallet regen-hotkey`, : Create and register a hotkey on a secure coldkey workstation then transfer the hotkey file or mnemonic to the mining workstation. `btcli subnets register`, `btcli subnets pow-register`: register a UID - ## Key rotation If you suspect your coldkey may have been leaked, you can request to swap it out of your wallet, using an extrinsic blockchain transaction. This operation has a 5 day waiting period, during which your coldkey will be locked. The cost of this coldkey swap transaction is 0.1 TAO. -See [Rotate/Swap your Coldkey](../subnets/schedule-coldkey-swap) - +See [Rotate/Swap your Coldkey](../keys/schedule-coldkey-swap) diff --git a/docs/misc/sdk-snippets.py b/docs/misc/sdk-snippets.py new file mode 100644 index 0000000000..8c43f043e0 --- /dev/null +++ b/docs/misc/sdk-snippets.py @@ -0,0 +1,461 @@ +#!/usr/bin/env python3 +""" +Bittensor SDK Documentation Examples - Runnable Test Suite +""" + +# Set environment variables FIRST (before importing bittensor) +import os +import sys + +os.environ.setdefault('BT_WALLET_NAME', 'alice') +os.environ.setdefault('BT_WALLET_HOTKEY', 'alice') +os.environ.setdefault('BT_SUBTENSOR_NETWORK', 'test') +os.environ.setdefault('TOTAL_TAO_TO_STAKE', '1') +os.environ.setdefault('NUM_SUBNETS_TO_STAKE_IN', '3') +os.environ.setdefault('NUM_VALIDATORS_PER_SUBNET', '3') +os.environ.setdefault('BT_LOGGING_DEBUG', '1') + +import asyncio +import time +import bittensor as bt +from bittensor.core.async_subtensor import AsyncSubtensor +from bittensor.core.metagraph import Metagraph +from bittensor.core.extrinsics.utils import sudo_call_extrinsic + +# Utility function to run examples +def run_example(name, func): + """Run an example and handle errors""" + print(f"\n{'='*70}") + print(f" {name}") + print(f"{'='*70}\n") + try: + result = func() + print(f"✓ {name} completed successfully\n") + return True + except Exception as e: + print(f"✗ {name} failed: {e}\n") + return False + +async def run_async_example(name, func): + """Run an async example and handle errors""" + print(f"\n{'='*70}") + print(f" {name}") + print(f"{'='*70}\n") + try: + result = await func() + print(f"✓ {name} completed successfully\n") + return True + except Exception as e: + print(f"✗ {name} failed: {e}\n") + return False + +############################################################################## + +# Example 1: Creates an Axon instance for serving requests on the Bittensor network +def example_1_create_axon(): + """Initialize Axon""" + # Note: This example requires wallet and config - using env wallet + import bittensor as bt + wallet = bt.Wallet() # Uses BT_WALLET_NAME from env + axon = bt.Axon(wallet=wallet, port=8091) + print(f"Axon created: {axon.uuid}") + +# Example 2: Creates a wallet instance using environment variables +def example_2_create_wallet(): + """Create wallet""" + import bittensor as bt + wallet = bt.Wallet() # Uses BT_WALLET_NAME from env + # wallet.create_if_non_existent() # Commented out to avoid prompts + print(f"Wallet: {wallet.name}, Hotkey: {wallet.hotkey_str}") + +############################################################################## + +# Example 3: Retrieves the TAO balance for a wallet's coldkey address +def example_3_check_balance(): + """Check TAO balance""" + import bittensor as bt + from bittensor_wallet import Keypair + sub = bt.Subtensor(network="test") + + # Use a test keypair instead of requiring real wallet files + coldkey = Keypair.create_from_uri('//Alice') + balance = sub.get_balance(coldkey.ss58_address) + print(f"Balance for test address {coldkey.ss58_address[:10]}...: {balance}") + +############################################################################################# + +# Example 4: Demonstrates calculating exchange rates between TAO and Alpha tokens with and without slippage +def example_4_exchange_rate(): + """Stake exchange rate (with and without slippage)""" + import bittensor as bt + + sub = bt.Subtensor(network="test") + subnet = sub.subnet(netuid=1) + + alpha_amount = bt.Balance.from_tao(100).set_unit(1) + + print("alpha_to_tao_with_slippage", subnet.alpha_to_tao_with_slippage(alpha_amount)) + print("alpha_to_tao_with_slippage percentage", subnet.alpha_to_tao_with_slippage(alpha_amount, percentage=True)) + + tao_amount = bt.Balance.from_tao(100) + print("tao_to_alpha_with_slippage", subnet.tao_to_alpha_with_slippage(tao_amount)) + print("tao_to_alpha_with_slippage percentage", subnet.tao_to_alpha_with_slippage(tao_amount, percentage=True)) + + print("tao_to_alpha", subnet.tao_to_alpha(tao_amount)) + print("alpha_to_tao", subnet.alpha_to_tao(alpha_amount)) + +################################################################################## + +# Example 5: Retrieves the list of subnets where a hotkey is registered +def example_5_registered_subnets(): + """View registered subnets""" + import bittensor as bt + from bittensor_wallet import Keypair + sub = bt.Subtensor(network="test") + + # Use a test keypair instead of requiring real wallet files + hotkey = Keypair.create_from_uri('//Alice') + netuids = sub.get_netuids_for_hotkey(hotkey.ss58_address) + print(f"Registered subnets for test address {hotkey.ss58_address[:10]}...: {netuids}") + +############################################################################################ + +# Example 6: Demonstrates how to register a wallet on a subnet using burned registration +def example_6_register_subnet(): + """Register on a subnet""" + import bittensor as bt + logging = bt.logging + logging.set_info() + sub = bt.Subtensor(network="test") + wallet = bt.Wallet() # Uses env variables + # reg = sub.burned_register(wallet=wallet, netuid=3) # Commented to avoid actual registration + print(f"Note: Registration example skipped (would register wallet on subnet 3)") + +########################################################################################### + +# Example 7: Demonstrates asynchronous staking across multiple subnets by finding top validators +async def example_7_async_stake(): + """Asynchronous stake""" + import bittensor as bt + import time + + # Load environmental variables + wallet_name = os.environ.get('BT_WALLET_NAME') + total_to_stake = float(os.environ.get('TOTAL_TAO_TO_STAKE', 1)) + num_subnets = int(os.environ.get('NUM_SUBNETS_TO_STAKE_IN', 3)) + validators_per_subnet = int(os.environ.get('NUM_VALIDATORS_PER_SUBNET', 3)) + + print(f"🔓 Using wallet: {wallet_name}") + print(f"📊 Dividing {total_to_stake} TAO across top {validators_per_subnet} validators in each of top {num_subnets} subnets.") + + wallet = bt.Wallet(name=wallet_name) + + # Initialize the subtensor connection within a block scope + async def stake_batch(subtensor, netuid, top_validators, amount_to_stake): + for hk in top_validators: + print(f"💰 Would stake {amount_to_stake} to {hk} on subnet {netuid}...") + # Commented out actual staking to avoid real transactions + # results = await asyncio.gather(*[add_stake_extrinsic(subtensor=subtensor, wallet=wallet, netuid=netuid, hotkey_ss58=hk, amount=amount_to_stake) for hk in top_validators]) + print(f"Note: Staking skipped (read-only mode)") + + async def find_top_three_valis(subtensor, subnet): + netuid = subnet.netuid + print(f"\n🔍 Subnet {netuid} had {subnet.tao_in_emission} emissions!") + + metagraph = await subtensor.metagraph(netuid) + hk_stake_pairs = [(metagraph.hotkeys[index], metagraph.stake[index]) for index in range(len(metagraph.stake))] + top_validators = sorted(hk_stake_pairs, key=lambda x: x[1], reverse=True)[0:validators_per_subnet] + + print(f"🏆 Top {validators_per_subnet} Validators for Subnet {netuid}:") + for rank, (hotkey, stake) in enumerate(top_validators, start=1): + print(f" {rank}. {hotkey[:10]}... - Stake: {stake}") + + return {"netuid": netuid, "metagraph": metagraph, "validators": top_validators} + + async with bt.AsyncSubtensor(network='test') as subtensor: + sorted_subnets = sorted(list(await subtensor.all_subnets()), key=lambda subnet: subnet.tao_in_emission, reverse=True) + top_subnets = sorted_subnets[0:num_subnets] + + # Find top validators + top_vali_dicts = await asyncio.gather(*[find_top_three_valis(subtensor, subnet) for subnet in top_subnets]) + print(f"✅ Found top validators in {len(top_vali_dicts)} subnets") + +########################################################################################################### + +# Example 8: Demonstrates asynchronous unstaking from multiple validators based on emission criteria +async def example_8_async_unstake(): + """Asynchronous unstake""" + import bittensor as bt + from bittensor_wallet import Keypair + import time + + wallet_name = os.environ.get('BT_WALLET_NAME') + total_to_unstake = 1.0 # Default + max_stakes_to_unstake = 10 + unstake_minimum = 0.0005 + + print(f"🔍 Using wallet: {wallet_name}") + + # Use a test keypair instead of requiring real wallet files + coldkey = Keypair.create_from_uri('//Alice') + wallet_ck = coldkey.ss58_address + + async def perform_unstake(subtensor, wallet, stake, amount): + print(f"⏳ Would unstake {amount} from {stake.hotkey_ss58} on subnet {stake.netuid}") + # Commented out to avoid real transactions + # result = await unstake_extrinsic(subtensor=subtensor, wallet=wallet, hotkey_ss58=stake.hotkey_ss58, netuid=stake.netuid, amount=amount) + return True # Simulated success + + async with bt.AsyncSubtensor(network='test') as subtensor: + stakes = await subtensor.get_stake_info_for_coldkey(wallet_ck) + + if not stakes: + print("No stakes found") + return + + stakes = list(filter(lambda s: float(s.stake.tao) > unstake_minimum, stakes)) + stakes = sorted(stakes, key=lambda s: s.emission.tao) + stakes = stakes[:max_stakes_to_unstake] + + print(f"📊 Found {len(stakes)} eligible stakes") + for s in stakes[:3]: # Show first 3 + print(f" {s.hotkey_ss58[:10]}... NetUID: {s.netuid} Stake: {s.stake}") + +########################################################################################################## + +# Example 9: Demonstrates moving stake from one validator/subnet to another asynchronously +async def example_9_move_stake(): + """Move stake""" + import bittensor as bt + from bittensor.core.async_subtensor import AsyncSubtensor + + async with AsyncSubtensor(network="test") as subtensor: + wallet = bt.Wallet() # Uses env + amount = bt.Balance.from_tao(1.0).set_unit(5) + + print(f"Would move {amount} from netuid 5 to netuid 18") + # Commented to avoid real transaction + # result = await move_stake_extrinsic( + # subtensor=subtensor, + # wallet=wallet, + # origin_hotkey="5DyHnV9Wz6cnefGfczeBkQCzHZ5fJcVgy7x1eKVh8otMEd31", + # origin_netuid=5, + # destination_hotkey="5HidY9Danh9NhNPHL2pfrf97Zboew3v7yz4abuibZszcKEMv", + # destination_netuid=18, + # amount=amount, + # wait_for_inclusion=True, + # wait_for_finalization=False, + # ) + print("Note: Move stake skipped (read-only mode)") + +############################################################################################################# + +# Example 10: Checks if a hotkey is registered on a specific subnet +def example_10_check_registration(): + """Check registration status""" + import bittensor as bt + from bittensor_wallet import Keypair + + # Use a test keypair instead of requiring real wallet files + hotkey = Keypair.create_from_uri('//Alice') + hotkey_ss58 = hotkey.ss58_address + network = "test" + netuid = 1 + sub = bt.Subtensor(network=network) + mg = sub.metagraph(netuid) + + # Find if hotkey is registered + if hotkey_ss58 in mg.hotkeys: + uid = mg.hotkeys.index(hotkey_ss58) + print(f"Miner at uid {uid} registered") + else: + print(f"Miner with address {hotkey_ss58[:10]}... not registered on subnet {netuid}") + +####################################################################################################### + +# Example 11: Retrieves and displays comprehensive metagraph information for a subnet +def example_11_metagraph_info(): + """Metagraph info""" + from bittensor.core.metagraph import Metagraph + + print("Initializing metagraph for subnet 1...") + metagraph = Metagraph(netuid=1, network="test", sync=True) + + # Get basic metagraph metadata + print("\n=== Basic Metagraph Metadata ===") + print(f"Network: {metagraph.network}") + print(f"Subnet UID: {metagraph.netuid}") + print(f"Total neurons: {metagraph.n.item()}") + print(f"Current block: {metagraph.block.item()}") + + # Get subnet information + print("\n=== Subnet Information ===") + print(f"Subnet name: {metagraph.name}") + print(f"Subnet symbol: {metagraph.symbol}") + print(f"Max UIDs: {metagraph.max_uids}") + print(f"Owner: {metagraph.owner_coldkey}") + +################################################################################################## + +# Example 12: Demonstrates setting subnet hyperparameters as a subnet owner using sudo calls +def example_12_set_hyperparams(): + """Setting hyperparams (as subnet owner)""" + import bittensor as bt + from bittensor.core.extrinsics.utils import sudo_call_extrinsic + + wallet = bt.Wallet() # Uses env + subtensor = bt.Subtensor(network="test") + + print(f"Would set liquid_alpha_enabled for subnet 2") + # Commented to avoid real transaction + # result = sudo_call_extrinsic( + # subtensor=subtensor, + # wallet=wallet, + # call_function="sudo_set_liquid_alpha_enabled", + # call_params={"netuid": 2, "enabled": True}, + # call_module="AdminUtils", + # root_call=True + # ) + print("Note: Hyperparameter setting skipped (requires subnet ownership)") + +#################################################################################################### + +# Example 13: Shows how to use the SubtensorAPI to query subnet mechanism information +def example_13_subtensor_api(): + """SubtensorAPI usage""" + import bittensor as bt + + sub = bt.SubtensorApi() + netuid = 2 + + count = sub.subnets.get_mechanism_count(netuid=netuid) + split = sub.subnets.get_mechanism_emission_split(netuid=netuid) + + print(f"Mechanism count: {count}") + print(f"Emission split: {split}") + + print("Note: set_weights example skipped (requires registration)") + +###################################################################################################### + +# Example 14: Demonstrates parallel fetching of neurons from multiple subnets using asyncio +async def example_14_async_neurons(): + """Asyncio - Fetch neurons from all subnets""" + import time + from bittensor.core.async_subtensor import AsyncSubtensor + + async with AsyncSubtensor(network="test") as subtensor: + start = time.time() + total_subnets = await subtensor.get_total_subnets() + + # Limit to first 3 subnets for testing + test_range = min(total_subnets + 1, 4) + neurons = await asyncio.gather(*[ + subtensor.neurons(netuid=x) + for x in range(1, test_range) + ]) + elapsed = time.time() - start + + print(f"Fetched neurons from {len(neurons)} subnets in {elapsed:.2f}s:") + for netuid, neuron_list in enumerate(neurons, start=1): + print(f" Subnet {netuid}: {len(neuron_list) if neuron_list else 0} neurons") + +############################################################################################### + +# Example 15: Demonstrates direct substrate interface queries to fetch subnet identities +def example_15_substrate_query(): + """Subtensor query examples""" + from async_substrate_interface import SubstrateInterface + + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") + + netuid = 1 + result = substrate.query('SubtensorModule', 'SubnetIdentitiesV2', [netuid]) + print(f"SubnetIdentitiesV2 query result: {result}") + + substrate.close() + +################################################################################################### + +# Example 16: Demonstrates substrate interface queries using keypairs to fetch Alpha token data +def example_16_substrate_query_keypair(): + """Subtensor query examples (Keypair)""" + from async_substrate_interface import SubstrateInterface + from bittensor_wallet import Keypair + + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") + + hotkey = Keypair.create_from_uri('//Alice').ss58_address + coldkey = Keypair.create_from_uri('//Bob').ss58_address + netuid = 1 + result = substrate.query('SubtensorModule', 'Alpha', [hotkey, coldkey, netuid]) + print(f"Alpha query result: {result}") + + substrate.close() + +################################################################################################### + +def main(): + """Main test runner""" + print("="*70) + print(" Bittensor SDK Documentation Examples Test Suite") + print("="*70) + print(f"\nConfiguration:") + print(f" Wallet: {os.environ.get('BT_WALLET_NAME')}") + print(f" Hotkey: {os.environ.get('BT_WALLET_HOTKEY')}") + print(f" Network: {os.environ.get('BT_SUBTENSOR_NETWORK')}") + + results = [] + + # Run synchronous examples + print("\n" + "="*70) + print(" SYNCHRONOUS EXAMPLES") + print("="*70) + + results.append(run_example("Example 1: Create Axon", example_1_create_axon)) + results.append(run_example("Example 2: Create Wallet", example_2_create_wallet)) + results.append(run_example("Example 3: Check Balance", example_3_check_balance)) + results.append(run_example("Example 4: Exchange Rate", example_4_exchange_rate)) + results.append(run_example("Example 5: Registered Subnets", example_5_registered_subnets)) + results.append(run_example("Example 6: Register Subnet", example_6_register_subnet)) + results.append(run_example("Example 10: Check Registration", example_10_check_registration)) + results.append(run_example("Example 11: Metagraph Info", example_11_metagraph_info)) + results.append(run_example("Example 12: Set Hyperparams", example_12_set_hyperparams)) + results.append(run_example("Example 13: SubtensorAPI", example_13_subtensor_api)) + results.append(run_example("Example 15: Substrate Query", example_15_substrate_query)) + results.append(run_example("Example 16: Substrate Query Keypair", example_16_substrate_query_keypair)) + + # Run asynchronous examples + print("\n" + "="*70) + print(" ASYNCHRONOUS EXAMPLES") + print("="*70) + + async def run_async_examples(): + async_results = [] + async_results.append(await run_async_example("Example 7: Async Stake", example_7_async_stake)) + async_results.append(await run_async_example("Example 8: Async Unstake", example_8_async_unstake)) + async_results.append(await run_async_example("Example 9: Move Stake", example_9_move_stake)) + async_results.append(await run_async_example("Example 14: Async Neurons", example_14_async_neurons)) + return async_results + + async_results = asyncio.run(run_async_examples()) + results.extend(async_results) + + # Print summary + print("\n" + "="*70) + print(" SUMMARY") + print("="*70) + passed = sum(results) + total = len(results) + print(f"Passed: {passed}/{total}") + print(f"Failed: {total - passed}/{total}") + + if passed == total: + print("\n✅ All examples completed successfully!") + return 0 + else: + print(f"\n⚠️ {total - passed} example(s) failed") + return 1 + +if __name__ == "__main__": + sys.exit(main()) diff --git a/docs/navigating-subtensor/emissions-coinbase.md b/docs/navigating-subtensor/emissions-coinbase.md new file mode 100644 index 0000000000..f5f3b61f83 --- /dev/null +++ b/docs/navigating-subtensor/emissions-coinbase.md @@ -0,0 +1,318 @@ +--- +title: "Coinbase Implementation" +--- + +# Coinbase Implementation + +This document provides a technical deep dive into the `run_coinbase()` function that orchestrates [TAO](../resources/glossary.md#tao-τ) and alpha [emission](../resources/glossary.md#emission) distribution across [subnets](../resources/glossary.md#subnet). The coinbase mechanism serves as Bittensor's economic heartbeat, connecting [subnet validators](../resources/glossary.md#validator), [subnet miners](../resources/glossary.md#subnet-miner), and [stakers](../resources/glossary.md#staking) through emission distribution. + +For conceptual understanding of emission mechanisms, see [Emissions](../learn/emissions.md). + +The coinbase mechanism orchestrates Bittensor's tokenomic engine, running every 12-second [block](../resources/glossary.md#block) to ensure continuous flow of liquidity into the network. + +Every block, the coinbase mechanism performs three critical functions: + +1. **Liquidity Injection**: Adds TAO and subnet-specific alpha tokens to each subnet's liquidity pools. +2. **Accumulation**: Builds up pending [emissions](../resources/glossary.md#emission) (also known as "alpha outstanding") bound for distribution to [subnet miners](../resources/glossary.md#subnet-miner) and [validators](../resources/glossary.md#validator) during the next [epoch](../resources/glossary.md#tempo). +3. **Consensus Triggering**: Initiates each subnet's [Yuma Consensus](../resources/glossary.md#yuma-consensus) epochs, the process that distributes emissions to participants within each subnet. Epochs are staggered to avoid overloading the blockchain with the computation involved. + +For broader conceptual understanding of emission mechanisms, see [Emissions](../learn/emissions.md). + +## Core Function: `run_coinbase()` + +**Location**: [`run_coinbase.rs`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/coinbase/run_coinbase.rs) + +```rust +pub fn run_coinbase(block_emission: U96F32) +``` + +**Parameters**: +- `block_emission`: Total TAO to distribute across all subnets this block. Currently 1 $\tau$, this amount will follow a halving schedule. + +The function implements a multistep process that handles liquidity injection, reward accumulation, epoch triggering, and EMA updates. + +## Implementation Flow + +### 1. Subnet Discovery and Filtering + +The process begins with identifying subnets eligible for emissions, applying filters to ensure only active, established subnets participate in the reward distribution. + +```rust +// Get all netuids (filter out root) +let subnets: Vec = Self::get_all_subnet_netuids() + .into_iter() + .filter(|netuid| *netuid != NetUid::ROOT) + .collect(); + +// Filter out subnets with no first emission block number +let subnets_to_emit_to: Vec = subnets + .clone() + .into_iter() + .filter(|netuid| FirstEmissionBlockNumber::::get(*netuid).is_some()) + .collect(); +``` + +**Subnet Eligibility Rules:** +- **[Root Subnet](../resources/glossary.md#root-subnetsubnet-zero) Exclusion**: [Subnet Zero](../resources/glossary.md#root-subnetsubnet-zero) operates differently—it has no [subnet miners](../resources/glossary.md#subnet-miner) and serves as a TAO staking pool for [delegates](../resources/glossary.md#delegate), so it's excluded from direct alpha emissions +- **Emission Readiness**: Only subnets that have been started (and hence been assigned a `FirstEmissionBlockNumber`) receive emissions. +### 2. Emission Allocation to Subnets + +:::tip Flow-Based Emissions Active +As of November 2025, subnet emissions are determined by net TAO flows (staking minus unstaking) rather than token prices. This section describes the current flow-based model. +::: + +Each subnet's share of the block's TAO emission depends on its net TAO flow, smoothed with an [exponential moving average (EMA)](../learn/ema) to prevent manipulation while maintaining responsiveness to genuine user engagement. + +**Flow-Based Distribution:** +The system tracks TAO inflows and outflows for each subnet, calculating an EMA of net flows with a 30-day half-life (~86.8 day effective window): + +$$ +S_i = (1 - \alpha) \cdot S_{i-1} + \alpha \cdot \text{net\_flow}_i +$$ + +where $\alpha \approx 0.000003209$ (smoothing factor). + +Each subnet receives TAO emissions proportional to its offset flow share: + +$$ +\text{tao\_allocation}_i = \text{block\_emission} \times \frac{z_i^p}{\sum_{j} z_j^p} +$$ + +where $z_i = \max(S_i - L, 0)$ and $L$ is the lower limit ensuring subnets with negative net flows receive zero emissions. + +**Implementation:** +- Flow tracking: `record_tao_inflow()` and `record_tao_outflow()` called during stake/unstake operations +- Share calculation: `get_shares()` → `get_shares_flow()` +- See [Emissions](../learn/emissions.md#tao-reserve-injection) for complete mathematical details + +**Key Characteristics:** +- Subnets with sustained negative flows (more unstaking than staking) receive zero emissions +- Rewards genuine user engagement rather than just accumulated liquidity +- Prevents "TAO treasury" gaming strategies that were possible under the previous price-based model + +### 3. Token Pool Injections and Emissions + +For each subnet, the coinbase calculates critical values that govern the subnet's token economics and determine how fresh liquidity flows into the system. + +#### TAO In (`tao_in`): Fresh Liquidity Injection +- Represents new TAO flowing into the subnet's liquidity pool +- Calculated from the subnet's proportional share of block emissions +- May be reduced through the subsidy mechanism to maintain price stability + +#### Alpha In (`alpha_in`): Liquidity Pool Balance +- Alpha tokens injected to maintain healthy AMM pool ratios +- Ensures the TAO injection doesn't create excessive [slippage](../resources/glossary.md#slippage) for [stakers](../resources/glossary.md#staking) +- Calculated as: `tao_in / current_price` during normal operations + +#### Alpha Out (`alpha_out`): Participant Emissions +- Alpha tokens emitted for distribution to [miners](../resources/glossary.md#subnet-miner) and [subnet validators](../resources/glossary.md#validator) +- Represents the subnet's emission budget for [incentives](../resources/glossary.md#incentives) and validator dividends +- Forms the reward pool that will be processed during [epochs](../resources/glossary.md#tempo) + +#### Subsidy Mechanism + +When a subnet's alpha price falls below its expected emission proportion, the mechanism automatically intervenes to maintain market stability: +1. **Price Neutral Injection**: Downscales both TAO and ALPHA injected to provide a price neutral injection +2. **Market Making**: Uses the excess TAO for buying pressure on alpha tokens + +This encourages alpha prices to move towards their emission ratio, or to encourage the sum of prices to be at/above 1. + +```rust +for netuid_i in subnets_to_emit_to.iter() { + let price_i = T::SwapInterface::current_alpha_price((*netuid_i).into()); + let moving_price_i: U96F32 = Self::get_moving_alpha_price(*netuid_i); + + let default_tao_in_i: U96F32 = block_emission + .saturating_mul(moving_price_i) + .checked_div(total_moving_prices) + .unwrap_or(asfloat!(0.0)); + + let alpha_emission_i: U96F32 = asfloat!( + Self::get_block_emission_for_issuance( + Self::get_alpha_issuance(*netuid_i).into() + ).unwrap_or(0) + ); + + + let tao_in_ratio: U96F32 = default_tao_in_i.safe_div_or( + U96F32::saturating_from_num(block_emission), + U96F32::saturating_from_num(0.0), + ); + + if price_i < tao_in_ratio { + tao_in_i = price_i.saturating_mul(block_emission); + alpha_in_i = block_emission; + let difference_tao: U96F32 = default_tao_in_i.saturating_sub(tao_in_i); + + let buy_swap_result = Self::swap_tao_for_alpha( + *netuid_i, + tou64!(difference_tao).into(), + T::SwapInterface::max_price().into(), + true, // skip fees + ); + } else { + // Normal operation + tao_in_i = default_tao_in_i; + alpha_in_i = tao_in_i.safe_div_or(price_i, alpha_emission_i); + } +} +``` + +### 4. Liquidity Pool Updates + +The coinbase updates each subnet's liquidity pools. + + +**Critical State Updates:** +- **`SubnetAlphaIn`**: Alpha reserves backing the AMM, enabling liquid [staking](../resources/glossary.md#staking) and unstaking operations. +- **`SubnetAlphaOut`**: Accumulated emissions and/or ALPHA outside the pool (ALPHA emissions + ALPHA taken out from pool). +- **`SubnetTAO`**: TAO reserves backing the AMM, providing price stability and liquidity for unstaking. +- **`TotalIssuance`**: Global TAO supply (see [Issuance](../resources/glossary.md#issuance)). + +```rust +for netuid_i in subnets_to_emit_to.iter() { + // Inject Alpha in (AMM liquidity) + let alpha_in_i = AlphaCurrency::from( + tou64!(*alpha_in.get(netuid_i).unwrap_or(&asfloat!(0))) + ); + SubnetAlphaIn::::mutate(*netuid_i, |total| { + *total = total.saturating_add(alpha_in_i); + }); + + // Inject Alpha outstanding + let alpha_out_i = AlphaCurrency::from( + tou64!(*alpha_out.get(netuid_i).unwrap_or(&asfloat!(0))) + ); + SubnetAlphaOut::::mutate(*netuid_i, |total| { + *total = total.saturating_add(alpha_out_i); + }); + + // Inject TAO in (AMM liquidity) + let tao_in_i: TaoCurrency = + tou64!(*tao_in.get(netuid_i).unwrap_or(&asfloat!(0))).into(); + SubnetTAO::::mutate(*netuid_i, |total| { + *total = total.saturating_add(tao_in_i.into()); + }); + + // Update global TAO supply tracking + TotalIssuance::::mutate(|total| { + *total = total.saturating_add(tao_in_i.into()); + }); + + // Notify AMM of new liquidity + T::SwapInterface::adjust_protocol_liquidity(*netuid_i, tao_in_i, alpha_in_i); +} +``` + +### 5. Subnet Owner Emissions + +Before distributing rewards to [miners](../resources/glossary.md#subnet-miner) and [subnet validators](../resources/glossary.md#validator), the system allocates a percentage to [subnet owners](../resources/glossary.md#subnet-creator). + +[Subnet owners](../resources/glossary.md#subnet-creator) receive 18% of alpha emissions. The subnet owner cut is calculated before other distributions so that the owner cut can be passed to `drain_pending_emission` (there was a bug before where the owner cut was incorrectly calculated after). Subnet owner emissions accumulate in `PendingOwnerCut` until the next [epoch](../resources/glossary.md#tempo). + + +```rust +let cut_percent: U96F32 = Self::get_float_subnet_owner_cut(); // Default: ~18% +let mut owner_cuts: BTreeMap = BTreeMap::new(); + +for netuid_i in subnets_to_emit_to.iter() { + let alpha_out_i: U96F32 = *alpha_out.get(netuid_i).unwrap_or(&asfloat!(0)); + let owner_cut_i: U96F32 = alpha_out_i.saturating_mul(cut_percent); + + owner_cuts.insert(*netuid_i, owner_cut_i); + alpha_out.insert(*netuid_i, alpha_out_i.saturating_sub(owner_cut_i)); + + PendingOwnerCut::::mutate(*netuid_i, |total| { + *total = total.saturating_add(tou64!(owner_cut_i).into()); + }); +} +``` + + +### 6. Calculating Root Proportion + +The root proportion on each subnet determines how much of the dividends (41% of ALPHA emissions) are being sold for each block and being distributed to stakers on root. + +$$ +\text{root\_proportion} = \frac{\text{root\_tao} \times \text{tao\_weight}}{\text{root\_tao} \times \text{tao\_weight} + \text{alpha\_issuance}} +$$ + +Where: +- `root_tao`: Total TAO [staked](../resources/glossary.md#staking) in [Root Subnet](../resources/glossary.md#root-subnetsubnet-zero) +- `tao_weight`: Global parameter ([TAO Weight](../resources/glossary.md#tao-weight)) determining TAO vs alpha influence +- `alpha_issuance`: Total alpha tokens for this specific subnet + + +```rust +for netuid_i in subnets_to_emit_to.iter() { + let alpha_out_i: U96F32 = *alpha_out.get(netuid_i).unwrap_or(&asfloat!(0.0)); + let root_tao: U96F32 = asfloat!(SubnetTAO::::get(NetUid::ROOT)); + let alpha_issuance: U96F32 = asfloat!(Self::get_alpha_issuance(*netuid_i)); + let tao_weight: U96F32 = root_tao.saturating_mul(Self::get_tao_weight()); + + // Calculate root subnet's proportional share + let root_proportion: U96F32 = tao_weight + .checked_div(tao_weight.saturating_add(alpha_issuance)) + .unwrap_or(asfloat!(0.0)); + + // 50% of proportional alpha goes to root validators + let root_alpha: U96F32 = root_proportion + .saturating_mul(alpha_out_i) + .saturating_mul(asfloat!(0.5)); + + let pending_alpha: U96F32 = alpha_out_i.saturating_sub(root_alpha); + + // Convert root alpha to TAO through AMM (if not subsidized) + // If the subnet is subsidized by the Subsidy Mechanism then no ALPHA will be sold - so the dividends for root are stopped. + if !subsidized { + let swap_result = Self::swap_alpha_for_tao( + *netuid_i, + tou64!(root_alpha).into(), + T::SwapInterface::min_price().into(), + true, // skip fees + ); + + if let Ok(ok_result) = swap_result { + PendingRootDivs::::mutate(*netuid_i, |total| { + *total = total.saturating_add(ok_result.amount_paid_out.into()); + }); + } + } + + PendingEmission::::mutate(*netuid_i, |total| { + *total = total.saturating_add(tou64!(pending_alpha).into()); + }); +} +``` + + +### 7. Epoch Execution + +When each subnet's [tempo](../resources/glossary.md#tempo) interval completes, the coinbase triggers execution of its Yuma Consensus *epoch*. Epochs execute when `(block_number + netuid + 1) % (tempo + 1) == 0`, creating a predictable, staggered schedule of epoch execution. + +The coinbase passes accumulated emissions to `drain_pending_emission()`, which executes the [full Yuma Consensus algorithm](./epoch.md) including validator weight processing, consensus calculation, bond updates, and final emission distribution to participants. + +For detailed implementation of the consensus mechanism, validator weight processing, and emission distribution, see [Epoch Implementation](./epoch.md). + +```rust +for &netuid in subnets.iter() { + // Process matured commit-reveal weight submissions + if let Err(e) = Self::reveal_crv3_commits(netuid) { + log::warn!("Failed to reveal commits for subnet {netuid} due to error: {e:?}"); + } + + if Self::should_run_epoch(netuid, current_block) { + // Reset epoch timing and collect accumulated emissions + BlocksSinceLastStep::::insert(netuid, 0); + LastMechansimStepBlock::::insert(netuid, current_block); + + // Execute Yuma Consensus with accumulated rewards + Self::drain_pending_emission(netuid, pending_alpha, pending_tao, pending_swapped, owner_cut); + } else { + BlocksSinceLastStep::::mutate(netuid, |total| *total = total.saturating_add(1)); + } +} +``` + + + diff --git a/docs/navigating-subtensor/epoch.md b/docs/navigating-subtensor/epoch.md new file mode 100644 index 0000000000..bddd87142f --- /dev/null +++ b/docs/navigating-subtensor/epoch.md @@ -0,0 +1,554 @@ +--- +title: "Implementation of the Yuma Consensus Epoch" +--- + +# Implementation of the Yuma Consensus Epoch + +If [Yuma Consensus (YC](../resources/glossary.md#yuma-consensus) is the heart of Bittensor, the epoch is the heartbeat, a regular pulse of calculations that processes [validator](../resources/glossary.md#validator) weights and determines [emissions](../resources/glossary.md#emission) for participants. This page takes a deep dive into how the code accomplishes its purpose. + +The epoch function takes as its input the matrix of values assigned to each miner by each validator, and returns emission tuples of hotkey, emission for mining, and emission for validating. + +It derives these by performing stake-weighted consensus (YC) over them in order to derive the aggregated miner ratings and miner-validator bonds. Miners gain emissions (incentives) based on their aggregate ratings, and validators gain emissions (dividends) based on their bonds to highly rated miners. + +The basic flow of the epoch is: + +1. Validator weights are submitted during the preceding [tempo](../resources/glossary.md#tempo). +2. [Stake weight](../resources/glossary.md#stake-weight) determines validator influence during consensus. +3. [Consensus](../resources/glossary.md#consensus-score) computation clips validator-miner ratings that outlie the stake-weighted median. +4. Bonds update via [exponential moving averages](../resources/glossary.md#exponential-moving-average-ema). +5. Emissions are allocated to miners and validators. + + +## Core Function: `epoch()` + +Source code: [`run_epoch.rs`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/epoch/run_epoch.rs). + +### Function Signature +```rust +pub fn epoch( + netuid: NetUid, + rao_emission: AlphaCurrency, +) -> Vec<(T::AccountId, AlphaCurrency, AlphaCurrency)> +``` + +## Implementation Flow + +### 1. Network State Collection + +```rust +// Get subnetwork size +let n = Self::get_subnetwork_n(netuid); + +// Get current block and timing +let current_block: u64 = Self::get_current_block_as_u64(); +let tempo: u64 = Self::get_tempo(netuid).into(); +let activity_cutoff: u64 = Self::get_activity_cutoff(netuid) as u64; + +// Get neuron activity data +let last_update: Vec = Self::get_last_update(netuid); +let block_at_registration: Vec = Self::get_block_at_registration(netuid); + +// Calculate inactive neurons +let inactive: Vec = last_update + .iter() + .map(|updated| updated.saturating_add(activity_cutoff) < current_block) + .collect(); + +let active: Vec = inactive.iter().map(|&b| !b).collect(); +``` + +**Activity Determination:** +A [neuron](../resources/glossary.md#neuron) is considered inactive if: +``` +last_update + activity_cutoff < current_block +``` + +This ensures only recently active participants influence consensus. + +### 2. Stake Processing and Validation + +First, get hotkeys mapped to stake-weights. + +```rust + +let hotkeys: Vec<(u16, T::AccountId)> = + as IterableStorageDoubleMap>::iter_prefix(netuid) + .collect(); + +let (total_stake, _alpha_stake, _tao_stake): (Vec, Vec, Vec) = + Self::get_stake_weights_for_network(netuid); + +let min_stake = Self::get_stake_threshold(); +``` + +Filter out hotkeys below minimum stake threshold. +```rust +let mut filtered_stake: Vec = total_stake + .iter() + .map(|&s| { + if fixed64_to_u64(s) < min_stake { + return I64F64::from(0); + } + s + }) + .collect(); + +// Normalize stake +inplace_normalize_64(&mut filtered_stake); +let stake: Vec = vec_fixed64_to_fixed32(filtered_stake); +``` + +:::info Stake-Weight Calculation +**Stake-Weight** = alpha_stake + (tao_stake × tao_weight) + +The `get_stake_weights_for_network()` function combines: +- **Alpha stake**: Subnet-specific token holdings +- **TAO stake**: [Root subnet](../resources/glossary.md#root-subnetsubnet-zero) holdings weighted by `[tao_weight](../resources/glossary.md#tao-weight)` (default: 18%) +::: + + +Filter validator permit candidates for minimum stake-weight. + +```rust +// Get the minimum stake required +let min_stake = Self::get_stake_threshold(); + +let mut filtered_stake: Vec = total_stake + .iter() + .map(|&s| { + if fixed64_to_u64(s) < min_stake { + return I64F64::from(0); + } + s + }) + .collect(); +``` + + +### 3. Validator Permit Management + +Validator permits are dynamically calculated every epoch based on stake distribution. This system ensures that only the most committed (highest-staked) participants can influence consensus. + +```rust +// Get current validator permits +let validator_permits: Vec = Self::get_validator_permit(netuid); +let validator_forbids: Vec = validator_permits.iter().map(|&b| !b).collect(); + +// Get max allowed validators +let max_allowed_validators: u16 = Self::get_max_allowed_validators(netuid); + +// Calculate new validator permits based on top-k stake +let new_validator_permits: Vec = + is_topk_nonzero(&stake, max_allowed_validators as usize); +``` + +**Validator Selection Algorithm:** + +The `is_topk_nonzero()` function implements a filtering process: + +1. **Stake Filtering**: Only neurons with stake ≥ `stake_threshold` (minimum 1000 stake weight) are considered +2. **Top-K Selection**: The top K neurons by stake weight receive validator permits (default: top 64) +3. **Non-Zero Requirement**: Neurons with zero stake are automatically excluded +4. **Stable Sorting**: Uses ascending stable sort to ensure deterministic selection when stakes are equal + +**Algorithm Details:** +```rust +pub fn is_topk_nonzero(vector: &[I32F32], k: usize) -> Vec { + let n: usize = vector.len(); + let mut result: Vec = vector.iter().map(|&elem| elem != I32F32::from(0)).collect(); + if n < k { + return result; // All non-zero elements get permits if total < k + } + let mut idxs: Vec = (0..n).collect(); + idxs.sort_by_key(|&idx| &vector[idx]); // ascending stable sort + for &idx in idxs.iter().take(n.saturating_sub(k)) { + result[idx] = false; // Mark bottom (n-k) elements as false + } + result +} +``` + +This ensures that exactly K neurons (or fewer if insufficient candidates) receive validator permits, with deterministic tie-breaking through stable sorting. + +**Permit Lifecycle:** + +```rust +// Bonds are cleared when permits are lost +new_validator_permits + .iter() + .zip(validator_permits) + .zip(ema_bonds) + .enumerate() + .for_each(|(i, ((new_permit, validator_permit), ema_bond))| { + if *new_permit { + // Retain bonds if permit is maintained + let new_bonds_row: Vec<(u16, u16)> = ema_bond + .iter() + .map(|(j, value)| (*j, fixed_proportion_to_u16(*value))) + .collect(); + Bonds::::insert(netuid, i as u16, new_bonds_row); + } else if validator_permit { + // Clear bonds if permit is lost + let new_empty_bonds_row: Vec<(u16, u16)> = vec![]; + Bonds::::insert(netuid, i as u16, new_empty_bonds_row); + } + }); +``` + +**Key Features:** +- **Dynamic Updates**: Permits are recalculated every epoch based on current stake distribution +- **Bond Preservation**: Neurons retain their bonds only while holding validator permits +- **Automatic Cleanup**: Bonds are cleared when permits are lost, preventing stale relationships +- **Stake Threshold**: Minimum stake requirement (typically 1000 stake weight) filters out low-commitment participants + +**Related Documentation:** +- For validator setup and requirements, see [Validating in Bittensor](../validators/index.md) +- For detailed permit lifecycle management, see [Validator Permits section](../validators/index.md#validator-permits) + +**Code References:** +- Validator permit calculation: [`subtensor/pallets/subtensor/src/epoch/run_epoch.rs:520-537`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/epoch/run_epoch.rs#L520-537) +- Top-K selection algorithm: [`subtensor/pallets/subtensor/src/epoch/math.rs:250-263`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/epoch/math.rs#L250-263) +- Bond cleanup logic: [`subtensor/pallets/subtensor/src/epoch/run_epoch.rs:903-921`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/epoch/run_epoch.rs#L903-921) + +### 4. Active Stake Calculation + +```rust +let mut active_stake: Vec = stake.clone(); + +// Remove inactive stake +inplace_mask_vector(&inactive, &mut active_stake); + +// Remove non-validator stake +inplace_mask_vector(&validator_forbids, &mut active_stake); + +// Normalize active stake +inplace_normalize(&mut active_stake); +``` + +**Active stake** represents the consensus power of validators who are: +1. Recently active (within `activity_cutoff`) +2. Hold validator permits +3. Meet minimum stake requirements + +### 5. Weight Processing + +```rust +// Access network weights (sparse format) +let mut weights: Vec> = Self::get_weights_sparse(netuid); + +// Mask weights from non-permitted validators +weights = mask_rows_sparse(&validator_forbids, &weights); + +// Remove self-weights (except subnet owner if exists) +let owner_uid: Option = Self::get_owner_uid(netuid); +if let Some(owner_uid) = owner_uid { + weights = mask_diag_sparse_except_index(&weights, owner_uid); +} else { + weights = mask_diag_sparse(&weights); +} + +// Remove weights to deregistered neurons +weights = vec_mask_sparse_matrix( + &weights, + &last_update, + &block_at_registration, + &|updated, registered| updated <= registered, +); +``` + +**Weight Filtering:** +Weights are filtered to remove: +- **Self-weights**: Prevent validators from voting for themselves (except [subnet creator](../resources/glossary.md#subnet-creator)) +- **Outdated weights**: Weights set before target neuron's latest registration +- **Non-validator weights**: Only permitted validators can influence consensus + +#### Commit-Reveal Weight Processing + +```rust +if Self::get_commit_reveal_weights_enabled(netuid) { + let mut commit_blocks: Vec = vec![u64::MAX; n as usize]; + + // Process v2 commits + for (who, q) in WeightCommits::::iter_prefix(netuid) { + for (_, cb, _, _) in q.iter() { + if !Self::is_commit_expired(netuid, *cb) { + if let Some(i) = uid_of(&who) { + commit_blocks[i] = commit_blocks[i].min(*cb); + } + break; + } + } + } + + // Process v3 commits + for (_epoch, q) in CRV3WeightCommitsV2::::iter_prefix(netuid) { + for (who, cb, ..) in q.iter() { + if !Self::is_commit_expired(netuid, *cb) { + if let Some(i) = uid_of(who) { + commit_blocks[i] = commit_blocks[i].min(*cb); + } + } + } + } + + // Mask weights from validators with active commits + weights = vec_mask_sparse_matrix( + &weights, + &commit_blocks, + &block_at_registration, + &|cb, reg| cb < reg, + ); +} +``` + +**[Commit Reveal](../resources/glossary.md#commit-reveal) Logic:** +When enabled, validators must commit to weights before revealing them. Weights are masked if: +- Validator has an active (non-expired) commit +- Commit was made before target neuron's registration + +### 6. Weight Normalization + +```rust +// Normalize remaining weights by row +inplace_row_normalize_sparse(&mut weights); +``` + +After filtering, each validator's weights are normalized so they sum to 1.0, ensuring equal influence regardless of absolute weight values. + +### 7. Consensus Calculation + +```rust +// Compute preranks (before consensus clipping) +let preranks: Vec = matmul_sparse(&weights, &active_stake, n); + +// Get consensus threshold (default: 51%) +let kappa: I32F32 = Self::get_float_kappa(netuid); + +// Calculate consensus as stake-weighted median +let consensus: Vec = weighted_median_col_sparse(&active_stake, &weights, n, kappa); + +// Clip weights at consensus level +let clipped_weights: Vec> = col_clip_sparse(&weights, &consensus); +``` + +**Consensus Computation:** +For each miner j, consensus $\overline{W_j}$ is the maximum weight level supported by at least fraction κ of total stake: + +$$ +\overline{W_j} = \arg \max_{w} \left( \sum_{i \in \mathbb{V}} S_i \cdot \mathbf{1}_{W_{ij} \geq w} \geq \kappa \right) +$$ + +**Weight Clipping:** +Any weight above consensus is clipped: $\overline{W_{ij}} = \min(W_{ij}, \overline{W_j})$ + +### 8. Trust and Rank Calculation + +```rust +// Calculate validator trust (sum of clipped weights) +let validator_trust: Vec = row_sum_sparse(&clipped_weights); + +// Compute final ranks using clipped weights +let mut ranks: Vec = matmul_sparse(&clipped_weights, &active_stake, n); + +// Compute server trust (rank after / rank before clipping) +let trust: Vec = vecdiv(&ranks, &preranks); + +// Normalize ranks to get incentives +inplace_normalize(&mut ranks); +let incentive: Vec = ranks.clone(); +``` + +**[Trust](../resources/glossary.md#trust) Calculation:** +- **[Validator trust](../resources/glossary.md#validator-trust)**: Sum of a validator's clipped weights (measures alignment with consensus) +- **Server trust**: Ratio of post-clip to pre-clip [rank](../resources/glossary.md#rank) (measures consensus adherence) + +**Rank → [Incentive](../resources/glossary.md#incentives):** +Final normalized ranks become miner incentives, ensuring total incentives sum to 1.0. + +### 9. Bond Processing + +The bond mechanism depends on whether Yuma3 is enabled: + +#### Yuma3 Bonds (Liquid Alpha) + +```rust +if Yuma3On::::get(netuid) { + // Get existing bonds + let mut bonds = Self::get_bonds_sparse_fixed_proportion(netuid); + + // Remove bonds to recently registered neurons + let last_tempo: u64 = current_block.saturating_sub(tempo); + bonds = scalar_vec_mask_sparse_matrix( + &bonds, + last_tempo, + &block_at_registration, + &|last_tempo, registered| last_tempo <= registered, + ); + + // Compute new bonds with liquid alpha + ema_bonds = Self::compute_bonds_sparse(netuid, &weights_for_bonds, &bonds, &consensus); + + // Normalize bonds and calculate validator emissions + let mut ema_bonds_norm = ema_bonds.clone(); + inplace_col_normalize_sparse(&mut ema_bonds_norm, n); + + let total_bonds_per_validator: Vec = + row_sum_sparse(&mat_vec_mul_sparse(&ema_bonds_norm, &incentive)); + + dividends = vec_mul(&total_bonds_per_validator, &active_stake); + inplace_normalize(&mut dividends); +} +``` + +#### Original Yuma Bonds + +```rust +else { + // Get existing bonds + let mut bonds: Vec> = Self::get_bonds_sparse(netuid); + + // Remove bonds to recently registered neurons + bonds = scalar_vec_mask_sparse_matrix(/* ... */); + inplace_col_normalize_sparse(&mut bonds, n); + + // Compute bond deltas from weights and stake + let mut bonds_delta: Vec> = + row_hadamard_sparse(&weights_for_bonds, &active_stake); + inplace_col_normalize_sparse(&mut bonds_delta, n); + + // Apply EMA to bonds + ema_bonds = Self::compute_ema_bonds_normal_sparse(&bonds_delta, &bonds, netuid); + inplace_col_normalize_sparse(&mut ema_bonds, n); + + // Calculate dividends: d_i = SUM(j) b_ij * incentive_j + dividends = matmul_transpose_sparse(&ema_bonds, &incentive); + inplace_normalize(&mut dividends); +} +``` + +**Bond Dynamics:** +- **[Bonds](../resources/glossary.md#validator-miner-bonds)**: Measure validator-miner relationships over time +- **EMA Updates**: $B_{ij}^{(t)} = \alpha \Delta B_{ij} + (1-\alpha) B_{ij}^{(t-1)}$ +- **Validator Emissions**: Validators earn based on bonds to high-incentive miners + +### 10. Emission Distribution + +```rust +// Calculate combined emissions for pruning scores +let combined_emission: Vec = incentive + .iter() + .zip(dividends.clone()) + .map(|(ii, di)| ii.saturating_add(di)) + .collect(); + +let emission_sum: I32F32 = combined_emission.iter().sum(); + +// Separate server and validator emissions +let mut normalized_server_emission: Vec = incentive.clone(); +let mut normalized_validator_emission: Vec = dividends.clone(); +let mut normalized_combined_emission: Vec = combined_emission.clone(); + +// Normalize based on total emission sum +inplace_normalize_using_sum(&mut normalized_server_emission, emission_sum); +inplace_normalize_using_sum(&mut normalized_validator_emission, emission_sum); +inplace_normalize(&mut normalized_combined_emission); + +// Handle zero emission case +if emission_sum == I32F32::from(0) { + if is_zero(&active_stake) { + normalized_validator_emission.clone_from(&stake); + normalized_combined_emission.clone_from(&stake); + } else { + normalized_validator_emission.clone_from(&active_stake); + normalized_combined_emission.clone_from(&active_stake); + } +} +``` + +**Emission Fallback:** +When no weights are set (emission_sum = 0), emissions default to stake proportions. + +### 11. RAO Conversion + +```rust +// Convert to actual currency amounts +let float_rao_emission: I96F32 = I96F32::saturating_from_num(rao_emission); + +let server_emission: Vec = normalized_server_emission + .iter() + .map(|se| { + let scaled = I96F32::saturating_from_num(*se) + .saturating_mul(float_rao_emission); + scaled.saturating_to_num::().into() + }) + .collect(); + +let validator_emission: Vec = normalized_validator_emission + .iter() + .map(|ve| { + let scaled = I96F32::saturating_from_num(*ve) + .saturating_mul(float_rao_emission); + scaled.saturating_to_num::().into() + }) + .collect(); +``` + +**[RAO](../resources/glossary.md#rao) Scaling:** +Normalized emission proportions are scaled by the total RAO emission amount to get actual currency values. + +### 12. State Updates + +```rust +// Store computed values +StakeWeight::::insert(netuid, cloned_stake_weight); +Active::::insert(netuid, active); +Emission::::insert(netuid, combined_emission); +Rank::::insert(netuid, cloned_ranks); +Trust::::insert(netuid, cloned_trust); +Consensus::::insert(netuid, cloned_consensus); +Incentive::::insert(netuid, cloned_incentive); +Dividends::::insert(netuid, cloned_dividends); +PruningScores::::insert(netuid, cloned_pruning_scores); +ValidatorTrust::::insert(netuid, cloned_validator_trust); +ValidatorPermit::::insert(netuid, new_validator_permits); + +// Update bonds for validators with permits +new_validator_permits + .iter() + .zip(validator_permits) + .zip(ema_bonds) + .enumerate() + .for_each(|(i, ((new_permit, validator_permit), ema_bond))| { + if *new_permit { + let new_bonds_row: Vec<(u16, u16)> = ema_bond + .iter() + .map(|(j, value)| (*j, fixed_proportion_to_u16(*value))) + .collect(); + Bonds::::insert(netuid, i as u16, new_bonds_row); + } else if validator_permit { + Bonds::::insert(netuid, i as u16, vec![]); + } + }); +``` + +**Storage Updates:** +All computed values are stored for: +- **External queries**: Allow inspection of consensus state +- **Next epoch**: Bonds and permits carry forward +- **Pruning**: Combined emission determines neuron removal + +### 13. Return Emission Tuples + +```rust +// Create final emission mapping +hotkeys + .into_iter() + .map(|(uid_i, hotkey)| { + ( + hotkey, + server_emission[uid_i as usize], // Miner emission + validator_emission[uid_i as usize], // Validator emission + ) + }) + .collect() +``` diff --git a/docs/navigating-subtensor/index.md b/docs/navigating-subtensor/index.md new file mode 100644 index 0000000000..42ec6a3805 --- /dev/null +++ b/docs/navigating-subtensor/index.md @@ -0,0 +1,52 @@ +--- +title: "Navigating the Subtensor Codebase" +--- + + +# Navigating the Subtensor Codebase + +The heart of Bittensor is Subtensor, the L1 substrate blockchain that computes and records all transactions, as well as the internal tokenomic processes (Yuma Consensus and liquidity emission) that drive the system. + +This section of the docs is designed make the codebase more accessible by guiding the reader through the implementation of these critical functions in code. Each implementation page traces the complete flow of operations from initial function calls through to final state changes. + +We recommend reading our conceptual explainer docs before diving into the implementation details: + +- [Emissions](../learn/emissions.md) +- [Yuma Consensus](../learn/yuma-consensus.md) +- [Staking/Delegation](../staking-and-delegation/delegation.md) + +## Implementation Topics + +This section covers the following implementation-focused topics: + +### [Emissions and Coinbase](./emissions-coinbase.md) +Deep dive into the coinbase mechanism that drives TAO and alpha emissions across subnets. Learn how `run_coinbase()` calculates and distributes emissions, manages liquidity pools, and orchestrates the emission cycles of the subnets within the overall network by triggering their epochs. + +**Key areas covered:** +- Block emission calculation and distribution +- TAO and alpha injection mechanics +- Subnet price-based emission allocation +- Pending emission accumulation and drainage +- Owner cuts and root dividends +- Triggering of the epoch + +### [Epoch Mechanism](./epoch.md) +Comprehensive exploration of the epoch function that implements Yuma Consensus. Understand how validator weights are processed, consensus is computed, and emissions are allocated to participants. + +**Key areas covered:** +- Weight processing and validation +- Consensus calculation and clipping +- Bond computation and EMA updates +- Rank, trust, and incentive calculations +- Emission distribution to miners and validators + +### [Swap and Staking](./swap-stake.md) +Detailed examination of the staking and unstaking mechanisms, including the automated market maker (AMM) functionality that enables TAO ↔ alpha conversions. + +**Key areas covered:** +- Stake addition and removal flows +- AMM price calculations +- TAO to alpha conversions +- Liquidity pool management +- Slippage and price protection + diff --git a/docs/navigating-subtensor/swap-stake.md b/docs/navigating-subtensor/swap-stake.md new file mode 100644 index 0000000000..0f1293c8e1 --- /dev/null +++ b/docs/navigating-subtensor/swap-stake.md @@ -0,0 +1,184 @@ +--- +title: "Staking Implementation" +--- + +# Staking Implementation + +This page provides a detailed examination of how staking is implemented in the Subtensor codebase. + +Each subnet maintains its own AMM pool with TAO and Alpha reserves. When you stake, your TAO enters the subnet's TAO reserve and you receive Alpha tokens that represent your stake in that specific subnet. Alpha stake determines consensus weight and emission share for validators within a given subnet. + +See [Staking/Delegation Overview](../staking-and-delegation/delegation) + +:::tip Key Concept +**Stake is held in Alpha (α) token denominations** on each subnet. The exception is the Root Subnet (subnet 0), in which stake is held in TAO. +::: + +## Core Staking Operations + +### Stake Addition: `do_add_stake()` + +Located in `subtensor/pallets/subtensor/src/staking/add_stake.rs`, this function converts TAO to Alpha through the subnet's AMM. + +#### Function Signature +```rust +pub fn do_add_stake( + origin: T::RuntimeOrigin, + hotkey: T::AccountId, + netuid: NetUid, + stake_to_be_added: TaoCurrency, +) -> DispatchResult +``` + +#### Implementation Flow + +##### 1. Validation and Fee Calculation +```rust +// Ensure the caller is signed +let coldkey = ensure_signed(origin)?; + +// Ensure subnet exists and is enabled for staking +ensure!(Self::if_subnet_exist(netuid), Error::::SubnetNotExists); +Self::ensure_subtoken_enabled(netuid)?; + +// Calculate minimum amount including swap fees +let min_stake = DefaultMinStake::::get(); +let fee = T::SwapInterface::sim_swap(netuid.into(), OrderType::Buy, min_stake.into()) + .map(|res| res.fee_paid) + .unwrap_or(T::SwapInterface::approx_fee_amount(netuid.into(), min_stake.into())); +let min_amount = min_stake.saturating_add(fee.into()); + +// Validate minimum stake amount (must cover both stake and fees) +ensure!(stake_to_be_added >= min_amount, Error::::AmountTooLow); +``` + +##### 2. Balance Verification +```rust +// Check coldkey has sufficient TAO balance +let current_balance = Self::get_coldkey_balance(&coldkey); +ensure!( + current_balance >= stake_to_be_added.into(), + Error::::NotEnoughBalanceToStake +); +``` + +##### 3. TAO Removal and Alpha Conversion +```rust +// Remove TAO from coldkey balance +let tao_staked = Self::remove_balance_from_coldkey_account(&coldkey, stake_to_be_added.into())?; + +// Convert TAO to Alpha through subnet AMM +Self::stake_into_subnet( + &hotkey, + &coldkey, + netuid, + tao_staked.to_u64().into(), + T::SwapInterface::max_price().into(), // Accept market price + true, // drop_fees = true for add_stake +)?; +``` + +The `stake_into_subnet` function handles the AMM conversion: +- Uses 1:1 conversion for Stable subnets (mechanism_id = 0) +- Calls `swap_tao_for_alpha()` for dynamic subnets (mechanism_id = 1) +- Updates subnet TAO and Alpha reserves +- Credits Alpha tokens to the hotkey's stake + +The `swap_tao_for_alpha()` function: +- Executes the actual AMM swap operation +- Calculates the amount of Alpha tokens received for the given TAO input +- Handles slippage and fee calculations +- Updates the subnet's liquidity pool reserves + +##### 4. Event Emission +```rust +// Emit staking event with actual amounts +Self::deposit_event(Event::StakeAdded { + account_id: hotkey.clone(), + balance_staked: stake_to_be_added, + balance_increased: Self::get_total_stake_for_hotkey(&hotkey), +}); +``` + +### Stake Removal: `do_remove_stake()` + +The unstaking process converts Alpha stake back to TAO through the subnet's AMM. + +#### Function Signature +```rust +pub fn do_remove_stake( + origin: T::RuntimeOrigin, + hotkey: T::AccountId, + netuid: NetUid, + alpha_unstaked: AlphaCurrency, +) -> DispatchResult +``` + +#### Implementation Flow + +##### 1. Validation +```rust +let coldkey = ensure_signed(origin)?; + +// Ensure subnet exists and is enabled +ensure!(Self::if_subnet_exist(netuid), Error::::SubnetNotExists); +Self::ensure_subtoken_enabled(netuid)?; + +// Verify sufficient Alpha stake exists on this subnet +let alpha_on_subnet = Self::get_stake_for_hotkey_and_coldkey_on_subnet(&hotkey, &coldkey, netuid); +ensure!( + alpha_on_subnet >= alpha_unstaked, + Error::::NotEnoughStakeToWithdraw +); +``` + +##### 2. Alpha to TAO Conversion +```rust +// Convert Alpha back to TAO through subnet AMM +let tao_received = Self::unstake_from_subnet( + &hotkey, + &coldkey, + netuid, + alpha_unstaked, + TaoCurrency::ZERO, // min_price = 0 (accept any price) + true, // drop_fees = true for remove_stake +)?; + +// Add the received TAO back to coldkey balance +Self::add_balance_to_coldkey_account(&coldkey, tao_received.into())?; +``` + +The `unstake_from_subnet` function: +- Removes Alpha from hotkey's stake +- Calls `swap_alpha_for_tao()` to convert Alpha → TAO +- Updates subnet reserves (Alpha increases, TAO decreases) +- Returns the TAO amount received after fees + +The `swap_alpha_for_tao()` function: +- Executes the actual AMM swap operation +- Calculates the amount of TAO tokens received for the given Alpha input +- Handles slippage and fee calculations +- Updates the subnet's liquidity pool reserves + +## Price Protection + +The staking system includes price protection mechanisms to prevent excessive slippage during AMM operations. Each staking operation has a corresponding `_limit` variant that accepts price protection parameters: + +- `do_add_stake_limit()` - Staking with price protection +- `do_remove_stake_limit()` - Unstaking with price protection + +These functions accept `limit_price` and `allow_partial` parameters to control protection behavior. See [Price Protection Guide](../learn/price-protection.md) for detailed usage and examples. + +## Error Handling + +### Common Error Types + +```rust +Error::::SubnetNotExists // Subnet doesn't exist +Error::::AmountTooLow // Below minimum stake + fees +Error::::NotEnoughBalanceToStake // Insufficient TAO balance +Error::::NotEnoughStakeToWithdraw // Insufficient Alpha stake +Error::::SlippageTooHigh // Price protection triggered (strict mode) +Error::::ZeroMaxStakeAmount // No amount executable within price limit +Error::::InsufficientLiquidity // AMM simulation failed +``` diff --git a/docs/reference/_bittensor-api-ref.md b/docs/reference/_bittensor-api-ref.md deleted file mode 100644 index b24194346c..0000000000 --- a/docs/reference/_bittensor-api-ref.md +++ /dev/null @@ -1,876 +0,0 @@ ---- -title: "Bittensor API Reference" ---- - -# Bittensor API Reference - -## bt.subtensor - -The `Subtensor` is utilized for managing interactions with the subtensor chain. It serves as an interface to communicate with "Finney", Bittensor's main blockchain network, or others, enabling operations like querying and transacting. - -### Examples - -```python dark -# Creating a default chain connection to remote finney instance. -sub = bt.subtensor() - -# Parsing --subtensor.network and --subtensor.chain_endpoint from the command line -sub = bt.subtensor( config = bt.subtensor.config() ) - -# Connecting subtensor's default local entrypoint "ws://127.0.0.1:9944" -sub = bt.subtensor( network = 'local' ) - -# Connecting to a specific endpoint -sub = bt.subtensor( chain_endpoint = "ws://127.0.0.1:9944" ) -``` - -### Methods - -#### nominate -```python -nominate(self, wallet: 'bittensor.Wallet', wait_for_finalization: bool = False, wait_for_inclusion: bool = True) -> bool -``` -Designates the wallet's hotkey as a delegate. - -#### delegate -```python -delegate(self, wallet: 'bittensor.wallet', delegate_ss58: Optional[str] = None, amount: Union[Balance, float] = None, wait_for_inclusion: bool = True, wait_for_finalization: bool = False, prompt: bool = False) -> bool -``` -Adds a specific amount of stake to a delegate using a wallet. - -#### undelegate -```python -undelegate(self, wallet: 'bittensor.wallet', delegate_ss58: Optional[str] = None, amount: Union[Balance, float] = None, wait_for_inclusion: bool = True, wait_for_finalization: bool = False, prompt: bool = False) -> bool -``` -Removes a specific amount of stake from a delegate using a wallet. - -#### set_weights -```python -set_weights(self, wallet: 'bittensor.wallet', netuid: int, uids: Union[torch.LongTensor, list], weights: Union[torch.FloatTensor, list], version_key: int = bittensor.__version_as_int__, wait_for_inclusion:bool = False, wait_for_finalization:bool = False, prompt:bool = False) -> bool -``` -Sets weights for a given netuid. - -#### register -```python -register(self, wallet: 'bittensor.Wallet', netuid: int, wait_for_inclusion: bool = False, wait_for_finalization: bool = True, prompt: bool = False, max_allowed_attempts: int = 3, output_in_place: bool = True, cuda: bool = False, dev_id: Union[List[int], int] = 0, TPB: int = 256, num_processes: Optional[int] = None, update_interval: Optional[int] = None, log_verbose: bool = False) -> bool -``` -Registers the wallet to the chain. - -#### burned_register -```python -burned_register(self, wallet: 'bittensor.Wallet', netuid: int, wait_for_inclusion: bool = False, wait_for_finalization: bool = True, prompt: bool = False) -> bool -``` -Registers the wallet to the chain by recycling TAO. - -#### transfer -```python -transfer(self, wallet: 'bittensor.wallet', dest: str, amount: Union[Balance, float], wait_for_inclusion: bool = True, wait_for_finalization: bool = False, prompt: bool = False) -> bool -``` -Transfers funds from the wallet to a destination public key address. - -#### get_existential_deposit -```python -get_existential_deposit(self, block: Optional[int] = None) -> Optional[Balance] -``` -Returns the existential deposit for the chain. - -#### serve -```python -serve(self, wallet: 'bittensor.wallet', ip: str, port: int, protocol: int, netuid: int, placeholder1: int = 0, placeholder2: int = 0, wait_for_inclusion: bool = False, wait_for_finalization = True, prompt: bool = False) -> bool -``` -Starts serving on a specific IP, port and protocol for a given netuid. - -#### serve_axon -```python -serve_axon(self, netuid: int, axon: 'bittensor.Axon', use_upnpc: bool = False, wait_for_inclusion: bool = False, wait_for_finalization: bool = True, prompt: bool - - = False) -> bool -``` -Starts serving an Axon for a given netuid. - -#### serve_prometheus -```python -serve_prometheus(self, wallet: 'bittensor.wallet', port: int, netuid: int, wait_for_inclusion: bool = False, wait_for_finalization: bool = True) -> bool -``` -Starts serving a Prometheus server on a specific port for a given netuid. - -#### add_stake -```python -add_stake(self, wallet: 'bittensor.wallet', hotkey_ss58: Optional[str] = None, amount: Union[Balance, float] = None, wait_for_inclusion: bool = True, wait_for_finalization: bool = False, prompt: bool = False) -> bool -``` -Adds a specific amount of stake to a hotkey uid. - -#### add_stake_multiple -```python -add_stake_multiple(self, wallet: 'bittensor.wallet', hotkey_ss58s: List[str], amounts: List[Union[Balance, float]] = None, wait_for_inclusion: bool = True, wait_for_finalization: bool = False, prompt: bool = False) -> bool -``` -Adds stake to each hotkey in the list from a common coldkey. - - -#### unstake -```python -unstake(self, wallet: 'bittensor.wallet', hotkey_ss58: Optional[str] = None, amount: Union[Balance, float] = None, wait_for_inclusion:bool = True, wait_for_finalization:bool = False, prompt: bool = False) -> bool -``` -Removes stake into the wallet coldkey from the specified hotkey uid. - - -#### unstake_multiple -```python -unstake_multiple(self, wallet: 'bittensor.wallet', hotkey_ss58s: List[str], amounts: List[Union[Balance, float]] = None, wait_for_inclusion: bool = True, wait_for_finalization: bool = False, prompt: bool = False) -> bool -``` -Removes stake from each hotkey in the list to a common coldkey. - -## Hyperparameters - -### rho -```python -rho (self, netuid: int, block: Optional[int] = None ) -> Optional[int] -``` -Returns the network Rho hyperparameter if the network exists. Accepts an integer `netuid` representing the unique network ID and an optional integer `block` representing the block number. - - -### kappa -```python -kappa (self, netuid: int, block: Optional[int] = None ) -> Optional[float] -``` -Returns the network Kappa hyperparameter if the network exists. Inputs are `netuid` and an optional `block` number. - - -### difficulty -```python -difficulty (self, netuid: int, block: Optional[int] = None ) -> Optional[int] -``` -Returns the network Difficulty hyperparameter if the network exists. Inputs are `netuid` and an optional `block` number. - - -### burn -```python -burn (self, netuid: int, block: Optional[int] = None ) -> Optional[bittensor.Balance] -``` -Returns the network Burn hyperparameter if the network exists. Inputs are `netuid` and an optional `block` number. - - -### immunity_period -```python -immunity_period (self, netuid: int, block: Optional[int] = None ) -> Optional[int] -``` -Returns the network ImmunityPeriod hyperparameter if the network exists. Inputs are `netuid` and an optional `block` number. - - -### validator_batch_size -```python -validator_batch_size (self, netuid: int, block: Optional[int] = None ) -> Optional[int] -``` -Returns the network ValidatorBatchSize hyperparameter if the network exists. Inputs are `netuid` and an optional `block` number. - - -### validator_prune_len -```python -validator_prune_len (self, netuid: int, block: Optional[int] = None ) -> int -``` -Returns the network ValidatorPruneLen hyperparameter if the network exists. Inputs are `netuid` and an optional `block` number. - -### validator_logits_divergence -```python -validator_logits_divergence (self, netuid: int, block: Optional[int] = None ) -> Optional[float] -``` -Returns the network ValidatorLogitsDivergence hyperparameter if the network exists. Inputs are `netuid` and an optional `block` number. - - -### validator_sequence_length -```python -validator_sequence_length (self, netuid: int, block: Optional[int] = None ) -> Optional[int] -``` -Returns the network ValidatorSequenceLength hyperparameter if the network exists. Inputs are `netuid` and an optional `block` number. - - -### validator_epochs_per_reset -```python -validator_epochs_per_reset (self, netuid: int, block: Optional[int] = None ) -> Optional[int] -``` -Returns the network ValidatorEpochsPerReset hyperparameter if the network exists. Inputs are `netuid` and an optional `block` number. - - -### validator_epoch_length -```python -validator_epoch_length (self, netuid: int, block: Optional[int] = None ) -> Optional[int] -``` -Returns the network ValidatorEpochLen hyperparameter if the network exists. Inputs are `netuid` and an optional `block` number. - - -### validator_exclude_quantile -```python -validator_exclude_quantile (self, netuid: int, block: Optional[int] = None ) -> Optional[float] -``` -Returns the network ValidatorExcludeQuantile hyperparameter if the network exists. Inputs are `netuid` and an optional `block` number. - - -### max_allowed_validators -```python -max_allowed_validators(self, netuid: int, block: Optional[int] = None) -> Optional[int] -``` -Returns the network MaxAllowedValidators hyperparameter if the network exists. Inputs are `netuid` and an optional `block` number. - - -### min_allowed_weights -```python -min_allowed_weights (self, netuid: int, block: Optional[int] = None ) -> Optional[int] -``` -Returns the network MinAllowedWeights hyperparameter if the network exists. Inputs are `netuid` and an optional `block` number. - - -### max_weight_limit -```python -max_weight_limit (self, netuid: int, block: Optional[int] = None ) -> Optional[float] -``` -Returns the network MaxWeightsLimit hyperparameter if the network exists. Inputs are `netuid` and an optional `block` number. - - -### scaling_law_power -```python -scaling_law_power (self, netuid: int, block: Optional[int] = None ) -> Optional[float] -``` -Returns the network ScalingLawPower hyperparameter if the network exists. Inputs are `netuid` and an optional `block` number. - - -### synergy_scaling_law_power -```python -synergy_scaling_law_power (self, netuid: int, block: Optional[int] = None ) -> Optional[float] -``` -Returns the network SynergyScalingLawPower hyperparameter if the network exists. Inputs are `netuid` and an optional `block` number. - - -### subnetwork_n -```python -subnetwork_n (self, netuid: int, block: Optional[int] = None ) -> int -``` -Returns the network SubnetworkN hyperparameter if the network exists. Inputs are `netuid` and an optional `block` number. - - -### max_n -```python -max_n (self, netuid: int, block: Optional[int] = None ) -> Optional[int] -``` -Returns the network MaxAllowedUids hyperparameter if the network exists. Inputs are `netuid` and an optional `block` number. - - -### blocks_since_epoch -```python -blocks_since_epoch (self, netuid: int, block: Optional[int] = None) -> int -``` -Returns the network BlocksSinceLastStep hyperparameter if the network exists. Inputs are `netuid` and an optional `block` number. - - -### tempo -```python -tempo (self, netuid: int, block: Optional[int] = None) -> int -``` -Returns the network Tempo hyperparameter if the network exists. Inputs are `netuid` and an optional `block` number. - -## Account functions - -### get_total_stake_for_hotkey -```python -get_total_stake_for_hotkey( self, ss58_address: str, block: Optional[int] = None ) -> Optional['bittensor.Balance'] -``` -Returns the total stake held on a hotkey including delegated. Inputs are `ss58_address` and an optional `block` number. - - -### get_total_stake_for_coldkey -```python -get_total_stake_for_coldkey( self, ss58_address: str, block: Optional[int] = None ) -> Optional['bittensor.Balance'] -``` -Returns the total stake held on a coldkey across all hotkeys including delegates. Inputs are `ss58_address` and an optional `block` number. - - -### get_stake_for_coldkey_and_hotkey -```python -get_stake_for_coldkey_and_hotkey( self, hotkey_ss58: str, coldkey_ss58: str, block: Optional[int] = None ) -> Optional['bittensor.Balance'] -``` -Returns the stake under a coldkey - hotkey pairing. Inputs are `hotkey_ss58`, `coldkey_ss58` and an optional `block` number. - -### get_stake -```python -get_stake( self, hotkey_ss58: str, block: Optional[int] = None ) -> List[Tuple[str,'bittensor.Balance']] -``` -Returns a list of stake tuples (coldkey, balance) for each delegating coldkey including the owner. Inputs are `hotkey_ss58` and an optional `block` number. - -### does_hotkey_exist -```python -does_hotkey_exist( self, hotkey_ss58: str, block: Optional[int] = None ) -> bool -``` -Returns true if the hotkey is known by the chain and there are accounts. Inputs are `hotkey_ss58` and an optional `block` number. - -### get_hotkey_owner -```python -get_hotkey_owner( self, hotkey_ss58: str, block: Optional[int] = None ) -> Optional[str] -``` -Returns the coldkey owner of the passed hotkey if it exists. Inputs are `hotkey_ss58` and an optional `block` number. - - -### get_axon_info -```python -get_axon_info( self, hotkey_ss58: str, block: Optional[int] = None ) -> Optional[axon_info] -``` -Returns the axon information for the specified hotkey account if it exists. Inputs are `hotkey_ss58` and an optional `block` number. - -### get_prometheus_info -```python -get_prometheus_info( self, hotkey_ss58: str, block: Optional[int] = None ) -> Optional[axon_info] -``` -Returns the prometheus information for the specified hotkey account if it exists. Inputs are `hotkey_ss58` and an optional `block` number. - -## Global state - -### block -```python -@property -def block (self) -> int: -``` -Property that returns the current chain block. - - -### total_issuance -```python -total_issuance (self, block: Optional[int] = None ) -> 'bittensor.Balance' -``` -Returns the total issuance of tokens as of a specified block. If no block is provided, the default is the current block. - - -### total_stake -```python -total_stake (self,block: Optional[int] = None ) -> 'bittensor.Balance' -``` -Returns the total amount of stake as of a specified block. If no block is provided, the default is the current block. - - -### serving_rate_limit -```python -serving_rate_limit (self, block: Optional[int] = None ) -> Optional[int] -``` -Returns the serving rate limit as of a specified block. If no block is provided, the default is the current block. - - -### tx_rate_limit -```python -tx_rate_limit (self, block: Optional[int] = None ) -> Optional[int] -``` -Returns the transaction rate limit as of a specified block. If no block is provided, the default is the current block. - -## Subnet stake - -### subnet_exists -```python -subnet_exists( self, netuid: int, block: Optional[int] = None ) -> bool -``` -Checks if a subnet with the given `netuid` exists as of a specified block. If no block is provided, the default is the current block. - - -### get_all_subnet_netuids -```python -get_all_subnet_netuids( self, block: Optional[int] = None ) -> List[int] -``` -Returns a list of `netuid`s of all subnets as of a specified block. If no block is provided, the default is the current block. - - -### get_total_subnets -```python -get_total_subnets( self, block: Optional[int] = None ) -> int -``` -Returns the total number of subnets as of a specified block. If no block is provided, the default is the current block. - - -### get_subnet_modality -```python -get_subnet_modality( self, netuid: int, block: Optional[int] = None ) -> Optional[int] -``` -Returns the modality of a subnet with a specified `netuid` as of a given block. If no block is provided, the default is the current block. - - -### get_subnet_connection_requirement -```python -get_subnet_connection_requirement( self, netuid_0: int, netuid_1: int, block: Optional[int] = None) -> Optional[int] -``` -Returns the connection requirement between two subnets with specified `netuid`s as of a given block. If no block is provided, the default is the current block. - - -### get_emission_value_by_subnet -```python -get_emission_value_by_subnet( self, netuid: int, block: Optional[int] = None ) -> Optional[float] -``` -Returns the emission value of a subnet with the given `netuid` as of a specified block. If no block is provided, the default is the current block. - - -### get_subnet_connection_requirements -```python -get_subnet_connection_requirements( self, netuid: int, block: Optional[int] = None) -> Dict[str, int] -``` -Returns a dictionary of the connection requirements of a subnet with the given `netuid` as of a specified block. If no block is provided, the default is the current block. - - -### get_subnets -```python -get_subnets( self, block: Optional[int] = None ) -> List[int] -``` -Returns a list of all subnets as of a specified block. If no block is provided, the default is the current block. - - -### get_all_subnets_info -```python -get_all_subnets_info( self, block: Optional[int] = None ) -> List[SubnetInfo] -``` -Returns a list of information about all subnets as of a specified block. If no block is provided, the default is the current block. - - -### get_subnet_info -```python -get_subnet_info( self, netuid: int, block: Optional[int] = None ) -> Optional[SubnetInfo] -``` -Returns information about a subnet with a given `netuid` as of a specified block. If no block is provided, the default is the current block. - -## Delegation - -### is_hotkey_delegate -```python -is_hotkey_delegate( self, hotkey_ss58: str ) -> bool -``` -Checks if a delegate with the specified hotkey exists. - - -### get_delegate_take -```python -get_delegate_take( self, hotkey_ss58: str, block: Optional[int] = None ) -> Optional[float] -``` -Returns the 'take' (portion of the reward a delegate receives from staking) of a delegate specified by a hotkey as of a given block. If no block is provided, the default is the current block. - - -### get_nominators_for_hotkey -```python -get_nominators_for_hotkey( self, hotkey_ss58: str, block: Optional[int] = None ) -> List[Tuple[str, Balance]] -``` -Returns a list of tuples, each containing a nominator's address and balance for the delegate specified by a hotkey as of a given block. If no block is provided, the default is the current block. - - -### get_delegate_by_hotkey -```python -get_delegate_by_hotkey( self, hotkey_ss58: str, block: Optional[int] = None ) -> Optional[DelegateInfo] -``` -Returns information about a delegate specified by a hotkey as of a given block. If no block is provided, the default is the current block. - - -### get_delegates -```python -get_delegates( self, block: Optional[int] = None ) -> List[DelegateInfo] -``` -Returns a list of all delegates as of a specified block. If no block is provided, the default is the current block. - - -### get_delegated -```python -get_delegated( self, coldkey_ss58: str, block: Optional[int] = None ) -> List[Tuple[DelegateInfo, Balance]] -``` -Returns a list of delegates that a given coldkey is staked to, as of a specified block. If no block is provided, the default is the current block. Each item in the list is a tuple containing the delegate's information and the staked balance. - -## Neuron information per subnet - -### is_hotkey_registered_any -```python -is_hotkey_registered_any( self, hotkey_ss58: str, block: Optional[int] = None) -> bool -``` -Returns True if the hotkey is registered on any subnet. If no block is specified, the current block is used. - - -### is_hotkey_registered_on_subnet -```python -is_hotkey_registered_on_subnet( self, hotkey_ss58: str, netuid: int, block: Optional[int] = None) -> bool -``` -Returns True if the hotkey is registered on a specified subnet. If no block is specified, the current block is used. - - -### is_hotkey_registered -```python -is_hotkey_registered( self, hotkey_ss58: str, netuid: int, block: Optional[int] = None) -> bool -``` -Returns True if the hotkey is registered on a specified subnet. If no block is specified, the current block is used. - - -### get_uid_for_hotkey_on_subnet -```python -get_uid_for_hotkey_on_subnet( self, hotkey_ss58: str, netuid: int, block: Optional[int] = None) -> int -``` -Returns the user id (uid) for the hotkey on a specified subnet. If no block is specified, the current block is used. - - -### get_all_uids_for_hotkey -```python -get_all_uids_for_hotkey( self, hotkey_ss58: str, block: Optional[int] = None) -> List[int] -``` -Returns a list of all user ids (uids) for the hotkey. If no block is specified, the current block is used. - - -### get_netuids_for_hotkey -```python -get_netuids_for_hotkey( self, hotkey_ss58: str, block: Optional[int] = None) -> List[int] -``` -Returns a list of all network user ids (netuids) for the hotkey. If no block is specified, the current block is used. - - -### get_neuron_for_pubkey_and_subnet -```python -get_neuron_for_pubkey_and_subnet( self, hotkey_ss58: str, netuid: int, block: Optional[int] = None ) -> Optional[NeuronInfo] -``` -Returns the neuron information for the hotkey on a specified subnet. If no block is specified, the current block is used. - - -### get_all_neurons_for_pubkey -```python -get_all_neurons_for_pubkey( self, hotkey_ss58: str, block: Optional[int] = None ) -> List[NeuronInfo] -``` -Returns a list of all neurons for the hotkey. If no block is specified, the current block is used. - - -### neuron_has_validator_permit -```python -neuron_has_validator_permit( self, uid: int, netuid: int, block: Optional[int] = None ) -> Optional[bool] -``` -Returns True if the neuron with the given uid has a validator permit for the specified subnet. If no block is specified, the current block is used. - - -### neuron_for_wallet -```python -neuron_for_wallet( self, wallet: 'bittensor.Wallet', netuid = int, block: Optional[int] = None ) -> Optional[NeuronInfo] -``` -Returns the neuron information for the given wallet on a specified subnet. If no block is specified, the current block is used. - -### neuron_for_uid -```python -neuron_for_uid( self, uid: int, netuid: int, block: Optional[int] = None ) -> Optional[NeuronInfo] -``` -Returns the neuron metadata associated with a given user id (uid) and network user id (netuid) at a specified block, or None if it does not exist. - - -### neurons -```python -neurons(self, netuid: int, block: Optional[int] = None ) -> List[NeuronInfo] -``` -Returns a list of neurons from the chain for a given network user id (netuid) at a specified block. - - -### neuron_for_uid_lite -```python -neuron_for_uid_lite( self, uid: int, netuid: int, block: Optional[int] = None ) -> Optional[NeuronInfoLite] -``` -Returns the lightweight neuron metadata (without weights and bonds) associated with a given user id (uid) and network user id (netuid) at a specified block, or None if it does not exist. - - -### neurons_lite -```python -neurons_lite(self, netuid: int, block: Optional[int] = None ) -> List[NeuronInfoLite] -``` -Returns a list of lightweight neurons (without weights and bonds) from the chain for a given network user id (netuid) at a specified block. - - -### metagraph -```python -metagraph( self, netuid: int, lite: bool = True ) -> 'bittensor.Metagraph' -``` -Returns the metagraph for the subnet associated with a given network user id (netuid). If 'lite' is True, it returns a metagraph using the lightweight sync (no weights, no bonds). - -## Legacy - -### get_balance -```python -get_balance(self, address: str, block: int = None) -> Balance -``` -Returns the token balance for the given Substrate address at a specified block. - - -### get_current_block -```python -get_current_block(self) -> int -``` -Returns the current block number on the chain. - - -### get_balances -```python -get_balances(self, block: int = None) -> Dict[str, Balance] -``` -Returns a dictionary of balances for all addresses at a specified block. The dictionary keys are addresses and values are their corresponding balances. - - -### `__str__()` -This method is used to provide a string representation of the instance. -```python dark -str(obj) -``` -If the `network` argument equals the `chain_endpoint` argument, it returns a string that denotes connecting to a chain endpoint without a known network. Otherwise, it represents connecting to a network with a known endpoint. - - -### `__repr__()` -This method is used to provide an official string representation of the instance. -```python dark -repr(obj) -``` -The string returned by this method is identical to the one provided by the `__str__()` method. - -## Initialization - -To initialize an instance of the `Subtensor` class, you'll need to provide three arguments: - -```python dark -import bittensor as bt -obj = bt.subtensor( config, network, chain_endpoint ) -``` - -### Arguments - -- `config (bt.Config, optional, defaults=bt.subtensor.config())`: - Subtensor config object containing arguments from bt.subtensor.config() which are automatically parsed from command line and ENV vars. -- `network (str, optional, default='finney')`: - The subtensor network flag. The likely choices are: - -- local (local running network) - -- finney (main network) - -- mock (mock network for testing.) - If this option is set it overloads subtensor.chain_endpoint with - an entry point node from that network. -- `chain_endpoint (str, default=None)`: - The subtensor endpoint flag. If set, overrides the network argument. - - -## Bt.metagraph - -### Chain state Torch interface - -The `Metagraph` class holds the chain state of a particular subnetwork at a specific block. - -#### Examples - -```python dark -import bittensor as bt - -# Creating metagraph and sync state from a netuid parameter, defaults to connecting to network `finney` -metagraph = bt.metagraph( netuid = 1 ) - -# Create metagraph and sync with lite = False to sync weights and bonds matrices. -metagraph = bt.metagraph( netuid = 1, lite = False) - -# Create metagraph and sync state from local entrypoint, assuming a subtensor chain is currently running. -metagraph = bt.metagraph( netuid = 1, network = 'local' ) - -# Create an empty metagraph object with no state syncing. -metagraph = bt.metagraph( netuid = 1, sync = False ) - -# Sync the metagraph at a particular block -metagraph.sync( block = 100000 ) - -# Save the metagraph to ~/.bittensor/metagraphs/network-$NETWORK_NAME/netuid-#NETUID/block-$BLOCK.pt -metagraph.save() - -# Load the latest metagraph by block. -metagraph.load() -``` - -### Methods - -#### S -```python -def S(self) -> torch.FloatTensor -``` -Returns the total stake. - - -#### R -```python -def R(self) -> torch.FloatTensor -``` -Returns the ranks. - - -#### I -```python -def I(self) -> torch.FloatTensor -``` -Returns the incentive. - - -#### E -```python -def E(self) -> torch.FloatTensor -``` -Returns the emission. - - -#### C -```python -def C(self) -> torch.FloatTensor -``` -Returns the consensus. - - -#### T -```python -def T(self) -> torch.FloatTensor -``` -Returns the trust. - - -#### Tv -```python -def Tv(self) -> torch.FloatTensor -``` -Returns the validator trust. - - -#### D -```python -def D(self) -> torch.FloatTensor -``` -Returns the dividends. - - -#### B -```python -def B(self) -> torch.FloatTensor -``` -Returns the bonds. - - -#### W -```python -def W(self) -> torch.FloatTensor -``` -Returns the weights. - - -#### hotkeys -```python -def hotkeys(self) -> List[str] -``` -Returns the list of hotkeys for the axons. - - -#### coldkeys -```python -def coldkeys(self) -> List[str] -``` -Returns the list of coldkeys for the axons. - - -#### addresses -```python -def addresses(self) -> List[str] -``` -Returns the list of IP addresses for the axons. - - -#### __str__ -```python -def __str__(self) -``` -Returns a string representation of the Metagraph. - - -#### __repr__ -```python -def __repr__(self) -``` -Returns the same string representation as `__str__`. - - -#### metadata -```python -def metadata(self) -> dict -``` -Returns a dictionary of Metagraph metadata. - - -#### __init__ -```python -def __init__(self, netuid: int, network: str = 'finney', lite: bool = True, sync: bool = True) -> 'metagraph' -``` -Initializes a new instance of the Metagraph. - - -#### sync -```python -def sync (self, block: Optional[int] = None, lite: bool = True) -> 'metagraph' -``` -Syncs the Metagraph state at the passed block. Optionally syncs the weights also. - - -#### save -```python -def save(self) -> 'metagraph' -``` -Saves the Metagraph object's state_dict under bittensor root directory. - - -#### load -```python -def load(self) -> 'metagraph' -``` -Loads the Metagraph object's state_dict from bittensor root directory. - - -#### load_from_path -```python -def load_from_path(self, dir_path:str) -> 'metagraph' -``` -Loads the Metagraph object's state_dict from the specified directory path. - -## Bt.logging - -The `Logging` interfaces with bittensor internal logging system. - -### Examples - -```python dark -import bittensor as bt - -# Turn on debug logs -bt.debug() - -# Turn on trace logs -bt.trace() - -# Turn off debug logs -bt.set_debug(False) - -# Turn off trace logs -bt.set_trace(False) - -# Turn on logging from class definition -bt.logging( set_debug = True ) - -# Instantiate logging from command line args -bt.logging( bt.logging.config() ) - -# Turn on logging to file -bt.logging( record_log = True, logging_dir = '/path/to/logs/' ) - -# Log -bt.logging.info(message) -bt.logging.debug(message) -bt.logging.trace(message) -bt.logging.success(message) -bt.logging.critical(message) -bt.logging.error(message) ->>> 2023-05-29 09:27:25.426 | INFO | message - -# Log using prefix suffix design -bt.logging.info(prefix, message) -bt.logging.debug(prefix, message) -bt.logging.trace(prefix, message) -bt.logging.success(prefix, message) -bt.logging.critical(prefix, message) -bt.logging.error(prefix, message) ->>> 2023-05-29 09:27:47.184 | INFO | cat dogs -``` - - - - - - - diff --git a/docs/reference/_difficulty.md b/docs/reference/_difficulty.md deleted file mode 100644 index 56ce3aabf6..0000000000 --- a/docs/reference/_difficulty.md +++ /dev/null @@ -1,35 +0,0 @@ - - - - - -# Difficulty Adjustment - -The POW and Recycle difficulties are adaptively adjusted every 100 blocks based on the following 4 cases. - - - 1. Registrations exceed the target and there were more recycle registrations than pow registrations? - `burn_cost = burn_cost * ( burn_regs_this_interval + target_regs ) / 2 * target_regs` - - 2. Registrations exceed the target and there were not more recycle registrations than pow registrations? - `pow_difficulty = pow_difficulty * ( pow_regs_this_interval + target_regs ) / 2 * target_regs` - - 3. Registrations do not exceed the target and there were more recycle registrations than pow registrations? - `burn_difficulty = pow_difficulty * ( regs_this_interval + target_regs ) / 2 * target_regs` - - 4. Registrations do not exceed the target and there were not more recycle registrations than pow registrations? - `pow_difficulty = pow_difficulty * ( regs_this_interval + target_regs ) / 2 * target_regs` - - -### Viewing current difficulty -Using the cli -```bash dark -btcli subnets list -NETUID NEURONS MAX_N DIFFICULTY TEMPO CON_REQ EMISSION BURN(τ) -1 691 1.02 K 198.08 T 99 None 28.44% τ4.75710 -3 4096 4.10 K 320.81 T 99 None 71.56% τ1.00000 - DIFFICULTY: Current proof of work difficulty - BURN: Current cost to register a key via recycle registration. -``` - - diff --git a/docs/bittensor-rel-notes.md b/docs/resources/bittensor-rel-notes.md similarity index 69% rename from docs/bittensor-rel-notes.md rename to docs/resources/bittensor-rel-notes.md index fef827f563..133bd643c9 100644 --- a/docs/bittensor-rel-notes.md +++ b/docs/resources/bittensor-rel-notes.md @@ -16,4 +16,5 @@ title: "Releases" ## Subtensor -- [Github](https://github.com/opentensor/subtensor/releases) \ No newline at end of file +- [Github](https://github.com/opentensor/subtensor/releases) +- [Runtime upgrade history on TAO.app](https://www.tao.app/runtime) \ No newline at end of file diff --git a/docs/resources/community-links.md b/docs/resources/community-links.md new file mode 100644 index 0000000000..7719a84bc7 --- /dev/null +++ b/docs/resources/community-links.md @@ -0,0 +1,35 @@ +--- +title: "Bittensor Community Links" +--- + +# Bittensor Community Links + +Welcome to the Bittensor ecosystem! This page provides links to essential community tools and resources to help you navigate the Bittensor network. + +You can also explore Bittensor's many Subnets and find links to their websites and repositories through [our Subnet listings](https://learnbittensor.org/subnets). + +## Opentensor Foundation (OTF) + +- **Twitter**: [@opentensor](https://x.com/opentensor) - Official announcements and updates +- **Podcast**: [Novelty Search](https://www.youtube.com/@Opentensor/podcasts) - Official Opentensor Foundation podcast +- **Discord**: [Join the Bittensor Discord Server](https://discord.com/invite/bittensor) - Connect with the community, ask questions, and stay updated + + +## Block Explorers + +- **[TAO.app](https://tao.app)** - Recommended (maintained by [Latent](https://latent.to/), the team behind these docs and core contributors to the Bittensor ecosystem). Includes [Savant](https://tao.app/savant), the chain explorer AI assistant. +- **[Taostats](https://taostats.io/)** +- **[Taomarketcap](https://taomarketcap.com/)** + +## Wallet Applications + +- **[Bittensor Wallet](https://bittensor.com/wallet)** - Recommended (maintained by OTF). +- **[Other Polkadot Wallets](https://polkadot.com/get-started/wallets/)** - Multi-chain wallets capable of interacting with Bittensor. + +## Development Resources + +- **[BTCLI](https://github.com/opentensor/btcli)**, the Bittensor CLI +- The **[Bittensor SDK](https://github.com/opentensor/bittensor)** +- **[Subtensor](https://github.com/opentensor/subtensor)**, Bittensor's substrate blockchain + + diff --git a/docs/resources/glossary.md b/docs/resources/glossary.md new file mode 100644 index 0000000000..b073586b96 --- /dev/null +++ b/docs/resources/glossary.md @@ -0,0 +1,1115 @@ +--- +title: "Glossary" +--- + +# Glossary + +## A + +### Active UID + +A UID slot that is considered active within a specific subnet, allowing the associated hotkey to participate as a subnet validator or subnet miner. + +**See also:** [Subnet Miners](../miners/), [Subnet Validators](../validators/) + +### ADR (Alpha Distribution Ratio) + +A metric that compares ALPHA tokens held by participants versus ALPHA tokens remaining in the AMM pool. ADR is calculated as the ratio of emissions to injections, measuring how much ALPHA goes to people (emissions) relative to how much is put into the pool (injections). A higher ADR means liquidation happens at a deeper discount to spot price. Under the current protocol, ADR tracks 2^(k - n), where k is the global TAO halving index and n is the subnet's ALPHA halving index. + +### Archive Node + +A type of public subtensor node that stores the entire blockchain history, allowing for full data access and querying capabilities. + +**See also:** [Subtensor Nodes](../subtensor-nodes/), [Managing Subtensor Connections](../sdk/managing-subtensor-connections.md) + +### Axon + +A module in the Bittensor API that uses the FastAPI library to create and run API servers. Axons receive incoming Synapse objects. Typically, an Axon is the entry point advertised by a subnet miner on the Bittensor blockchain, allowing subnet validators to communicate with the miner. + +**See also:** [Subnet Miners](../miners/), [Subnet Validators](../validators/) + +## B + +### Bicameral Legislature + +A two-tier legislative system comprising the Triumvirate and the Senate for proposal approval. + +**See also:** [Governance](../governance/governance.md), [Senate](../governance/senate.md) + +### Bittensor Wallet + +A digital wallet that holds the core ownership in the Bittensor network and serves as the user's identity technology underlying all operations. + +**See also:** [Wallets](../keys/wallets.md), [Working with Keys](../keys/working-with-keys.md) + +### Block + +A unit of data in the Bittensor blockchain, containing a collection of transactions and a unique identifier (block hash). A single block is processed every 12 seconds in the Bittensor blockchain. + +**See also:** [Subtensor API](../sdk/subtensor-api.md) + +### Burn cost + +This refers to the required amount of TAO to be recycled when creating a new subnet, i.e., cost of registering a new subnet. + +**See also:** [Burn cost](../subnets/create-a-subnet.md#burn-cost) + +## C + +### Coldkey + +A component of a Bittensor wallet responsible for securely storing funds and performing high-risk operations such as transfers and staking. It is encrypted on the user's device. This is analogous to a private key. + +**See also:** [Coldkey-Hotkey Security](../keys/coldkey-hotkey-security.md), [Working with Keys](../keys/working-with-keys.md) + +### Coldkey-hotkey pair + +A combination of two keys, a coldkey for secure storage and high-risk operations, and a hotkey for less secure operations and network interactions. + +**See also:** [Coldkey-Hotkey Security](../keys/coldkey-hotkey-security.md), [Working with Keys](../keys/working-with-keys.md) + +### Commit Reveal + +The Commit Reveal feature is designed to solve the weight-copying problem by giving would-be weight-copiers access only to stale weights. Copying stale weights should result in validators departing from consensus. + +**See also:** + +- [Commit Reveal](../concepts/commit-reveal.md) +- [The Weight Copying Problem](../concepts/weight-copying-in-bittensor) + +### Consensus Score + +The consensus score is calculated as the stake-weighted median of all weights assigned to a specific neuron by validators. This creates a consensus threshold that filters out outlier weights, ensuring that only weights near the median consensus are used in final rank calculations. + +**See also:** [Yuma Consensus](../learn/yuma-consensus.md), [Consensus-Based Weights](../concepts/consensus-based-weights.md) + +#### Mathematical Definition: + +For each neuron $j$, the consensus score $C_j$ is calculated as: + +$$ +C_j = \text{weighted\_median}(\{w_{ij} \mid i \in \text{validators}\}, \{s_i \mid i \in \text{validators}\}, \kappa) +$$ + +Where: + +- $w_{ij}$ is the weight assigned by validator $i$ to neuron $j$ +- $s_i$ is the stake of validator $i$ +- $\kappa$ is the consensus majority ratio (typically 51%) +- $\text{weighted\_median}$ is the stake-weighted median function + +Calculation Process: + +1. **Weight collection**: Gather all weights assigned to each neuron by validators +2. **Stake weighting**: Apply stake weights to validator opinions +3. **Median calculation**: Find stake-weighted median using κ parameter (typically 51%) +4. **Threshold establishment**: Consensus score becomes clipping threshold for weights + +Properties and Interpretation: + +- **Range**: [0, 1] normalized values +- **High Consensus**: Values close to 1 indicate strong validator agreement +- **Low Consensus**: Values close to 0 indicate weak validator agreement +- **Outlier Detection**: Weights below consensus score are clipped to 0 + +Network Security Properties: + +- **Anti-Manipulation**: Consensus filtering prevents weight manipulation by outliers +- **Stake-Weighted**: Higher stake validators have more influence in consensus +- **Dynamic Threshold**: Consensus adapts to changing network conditions +- **Majority Rule**: κ parameter controls consensus strictness (typically 51%) + +#### Relationship to Other Metrics + +**Consensus vs Trust:** + +- **Consensus**: Stake-weighted median of weights (consensus threshold) +- **Trust**: Ratio of final rank to pre-rank (consensus alignment impact) +- **Relationship**: Consensus determines weight clipping, Trust measures the impact + +**Consensus vs Ranks:** + +- **Consensus**: Threshold for weight filtering +- **Ranks**: Final performance scores after consensus filtering +- **Relationship**: Consensus influences rank calculation through weight clipping + +**Consensus vs Validator Trust:** + +- **Consensus**: Per-neuron consensus thresholds +- **Validator Trust**: Sum of clipped weights set by each validator +- **Relationship**: Validator trust measures validator influence in consensus + +**Source**: + +- [`bittensor/bittensor/core/metagraph.py:360-372`](https://github.com/opentensor/bittensor/blob/main/bittensor/core/metagraph.py#L360-372) +- [`subtensor/pallets/subtensor/src/epoch/run_epoch.rs:595`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/epoch/run_epoch.rs#L595) + +## D + +### Delegate + +A subnet validator that receives staked TAO tokens from delegators and performs validation tasks in one or more subnets. + +**See also:** [Delegation](../staking-and-delegation/delegation.md), [Managing Stake with btcli](../staking-and-delegation/managing-stake-btcli.md) + +### Delegate Stake + +The amount of TAO staked by the delegate themselves. + +**See also:** [Managing Stake with btcli](../staking-and-delegation/managing-stake-btcli.md), [Managing Stake with SDK](../staking-and-delegation/managing-stake-sdk.md) + +### Delegation + +Also known as staking, delegating TAO to a validator (who is thereby the delegate), increases the validator's stake and secure a validator permit. + +**See also:** [Delegation](../staking-and-delegation/delegation.md), [Managing Stake with btcli](../staking-and-delegation/managing-stake-btcli.md) + +### Dendrite + +A client instance used by subnet validators and subnet miners to transmit information to axons on subnet miners and subnet validators. Dendrites communicate with axons using the server-client (Axon-dendrite) protocol. + +**See also:** [Subnet Miners](../miners/), [Subnet Validators](../validators/) + +### Deregistration + +The process of removing a subnet miner or a subnet validator from the subnet due to poor performance. + +**See also:** [Miner Deregistration](../miners/#miner-deregistration), [Subnet Miners](../miners/) + +### Drand/time-lock encryption + +[Drand](https://drand.love)) is a distributed randomness beacon network that provides publicly verifiable, unpredictable, and unbiased random numbers. It is operated by the [League of Entropy](https://drand.love/league-of-entropy/), a consortium of independent organizations running Drand nodes. + +Drand provides **time-lock encryption**, a cryptographic technique that encrypts data so that it can only be decrypted _after a specific time has passed_. Drand provides this capability by regularly producing randomness "pulses" at fixed intervals. Data encrypted for a future Drand round cannot be decrypted—even by the person who encrypted it—until that round's randomness is published. + +Key properties that make Drand suitable for applications in Bittensor, such as [Commit Reveal](#commit-reveal): + +- **Decentralized**: No single entity controls the randomness generation +- **Verifiable**: Anyone can verify that randomness was generated correctly +- **Predictable timing**: Pulses are produced at regular intervals +- **Industry adoption**: Used by multiple blockchain and cryptographic protocols +- **Open source**: Fully transparent implementation + +Learn more: + +- [Drand Time-Lock Encryption documentation](https://drand.love/docs/timelock-encryption/) +- [Commit Reveal](../concepts/commit-reveal) + +## E + +### EdDSA Cryptographic Keypairs + +A cryptographic algorithm used to generate public and private key pairs for coldkeys and hotkeys in the Bittensor wallet. + +**See also:** [Working with Keys](../keys/working-with-keys.md), [Coldkey-Hotkey Security](../keys/coldkey-hotkey-security.md) + +### Effective stake + +The total staked TAO amount of a delegate, including their own TAO tokens and those delegated by nominators. + +**See also:** [Managing Stake with btcli](../staking-and-delegation/managing-stake-btcli.md), [Managing Stake with SDK](../staking-and-delegation/managing-stake-sdk.md) + +### Emission + +Every block, currency is injected into each subnet in Bittensor, and every tempo (or 360 blocks), it is extracted by participants (miners, validators, stakers, and subnet creators). + +Emission is this process of generating and allocating currency to participants. The amount allocated to a given participant over some duration of time is also often referred to as 'their emissions' for the period. + +Emissions are protected from manipulation through [Exponential Moving Average (EMA)](#exponential-moving-average-ema) mechanisms that smooth both validator-miner bond evolution and subnet price effects. + +**See also:** [Emissions](../learn/emissions.md), [Exponential Moving Average (EMA)](#exponential-moving-average-ema) + +### Encrypting the Hotkey + +An optional security measure for the hotkey. + +**See also:** [Coldkey-Hotkey Security](../keys/coldkey-hotkey-security.md), [Working with Keys](../keys/working-with-keys.md) + +### Epoch + +An epoch in Bittensor is the period during which a subnet executes its consensus mechanism. Its is determined number of blocks defined by the subnet's [tempo](#tempo) hyperparameter. + +**See also:** [Tempo](#tempo), [Yuma Consensus](../learn/yuma-consensus.md) + +### Existential Deposit + +The minimum amount of TAO required for an account to exist on the Bittensor blockchain. Accounts with balances below this threshold can be reaped (removed) to conserve network resources and prevent blockchain bloat from dust accounts. + +The existential deposit is a runtime constant set in the Balances pallet configuration. While the default value is defined in the runtime code as 500 RAO (0.0000005 TAO), the actual on-chain value can be queried from the blockchain using the `Balances::ExistentialDeposit` constant. + +Use the Bittensor SDK to query the current existential deposit: + +```python +import asyncio +import json +from bittensor.core.async_subtensor import AsyncSubtensor +from bittensor.utils.balance import Balance + +async def main(): + async with AsyncSubtensor(network="finney") as subtensor: + deposit = await subtensor.get_existential_deposit() + print(f"Existential deposit: {deposit.tao} TAO") +asyncio.run(main()) + +``` + +### Exponential Moving Average (EMA) + +A weighted moving average that prioritizes recent observations while exponentially decreasing the weight of older data points. In Bittensor, EMA is used in two critical stability mechanisms: + +1. **Validator-Miner Bond Smoothing**: Smooths the evolution of bonds between validators and miners over time, rewarding early discovery while preventing abrupt manipulation attempts. Has two modes: + + - **Basic Mode**: Single α ≈ 0.1 (~7-22 blocks for significant changes) + - **Liquid Alpha Mode**: Dynamic α range 0.7-0.9 based on consensus alignment (~1-13 blocks depending on consensus) + +2. **Subnet Flow Emission Smoothing**: Protects emissions from manipulation by extremely slowly incorporating TAO flow changes (net staking minus unstaking) into emission calculations (α ≈ 0.000003209, ~30 day half-life, ~86.8 day effective window) + +**Formula**: `EMA(t) = α × Current_Value + (1 - α) × EMA(t-1)` + +**Key Properties**: + +- Lower α = slower adaptation, higher stability +- Higher α = faster adaptation, lower stability +- Bittensor prioritizes stability with conservative α values + +**See also:** [Understanding Exponential Moving Averages](../learn/ema.md), [Consensus-based Weights](../concepts/consensus-based-weights.md), [Validator-Miner Bonds](#validator-miner-bonds), [Emission](#emission) + +### Existential deposit + +An existential deposit is the minumum required TAO in a wallet (i.e., in a coldkey). +If a wallet balance goes below the existential deposit, then this wallet account is deactivated and the remaining TAO in it is destroyed. +**This is set to 500 RAO for any Bittensor wallet**. + +See also [What is the Existential Deposit?](https://support.polkadot.network/support/solutions/articles/65000168651-what-is-the-existential-deposit-). + +### External Wallet + +A Bittensor wallet created through the Bittensor website or using a tool like [subkey](https://docs.substrate.io/reference/command-line-tools/subkey/), allowing users to use TAO without installing Bittensor. + +**See also:** [Wallets](../keys/wallets.md), [Installation](../getting-started/installation.md) + +## F + +### Fast blocks + +A development-only configuration that accelerates block production to 250ms intervals, enabling rapid local testing and immediate execution of on-chain operations. + +**See also:** [Create a local instance](../local-build/deploy.md?local-chain=docker#2-run-the-container) + +## H + +### Halving + +The process where Bittensor's daily token emission rate cuts in half, similar to Bitcoin's halving mechanism. Halvings reduce the rate of new TAO tokens entering circulation. + +Unlike Bitcoin which halves based on block numbers, Bittensor implements halvings based on total token supply. When specific supply thresholds are reached, the emission rate of TAO is cut in half. + +The actual date of each halving is not fixed—it changes based on the amount of TAO being recycled each day. + +**See also:** + +- Halving countdown on [TAO.app Tokenomics Dashboard](https://www.tao.app/tokenomics) +- [Emission](../learn/emissions.md) + +### Hotkey + +A component of a Bittensor wallet responsible for less secure operations such as signing messages into the network, secure a UID slot in a subnet, running subnet miners and subnet validators in a subnet. It can be encrypted or unencrypted, but is unencrypted by default. The terms "account" and "hotkey" are used synonymously. + +**See also:** [Coldkey-Hotkey Security](../keys/coldkey-hotkey-security.md), [Working with Keys](../keys/working-with-keys.md) + +### Hotkey-Coldkey Pair + +Authentication mechanism for delegates and nominators and for delegates participating in the Senate. + +**See also:** [Coldkey-Hotkey Security](../keys/coldkey-hotkey-security.md), [Working with Keys](../keys/working-with-keys.md) + +## I + +### Immunity Period + +A grace period granted to newly registered neurons during which they are protected from deregistration due to poor performance. The immunity period allows new miners and validators time to establish themselves and improve their performance before becoming eligible for pruning. The default period being is 4096 blocks (~13.7 hours), but can be configured by the subnet creator. + +**See also:** [Miner Deregistration](../miners/#miner-deregistration), [Validator Deregistration](../validators/index.md#validator-deregistration), [Subnet Hyperparameters](../subnets/subnet-hyperparameters.md#immunityperiod) + +### Incentives + +A portion of the TAO emission received by the subnet miners when they provide valuable services and compete for UID slots in a subnet. + +**See also:** [Emissions](../learn/emissions.md), [Anatomy of Incentive Mechanism](../learn/anatomy-of-incentive-mechanism.md) + +### Incentive Mechanism + +A system that drives the behavior of subnet miners and governs consensus among subnet validators in a Bittensor subnet. Each subnet has one or more incentive mechanisms, which should be designed carefully to promote desired behaviors and penalize undesired ones. When multiple incentive mechanisms are used, each operates independently with separate bond pools for Yuma Consensus calculations, allowing subnet creators to distribute emissions across different types of work or evaluation criteria. + +**See also:** [Anatomy of Incentive Mechanism](../learn/anatomy-of-incentive-mechanism.md), [Multiple Incentive Mechanisms Within Subnets](../subnets/understanding-multiple-mech-subnets), [Understanding Subnets](../subnets/understanding-subnets.md) + +### Issuance + +The total amount of TAO circulating in the Bittensor network. Includes TAO that is held in wallets and subnet liquidity pools, as well as TAO that is locked as subnet registration fees. + +This can be viewed on Bittensor explorers such as [TAO.app's Tokenomics Dashboard](https://www.tao.app/tokenomics), or [TAOstats](https://taostats.io). + +To query it directly from the chain, see: [Subtensor Storage Query Example: Total Issuance](../subtensor-nodes/subtensor-storage-query-examples.md#123-totalissuance) + +See also: [Recycling, burning, and locking](#recycling-and-burning) + +## L + +### Lite Node + +A type of public subtensor node that stores limited blockchain data and relies on archive nodes for full historical data. + +**See also:** [Subtensor Nodes](../subtensor-nodes/), [Managing Subtensor Connections](../sdk/managing-subtensor-connections.md) + +### Local Blockchain + +A private blockchain used for developing and testing subnet incentive mechanisms. A local blockchain is not public and is isolated from any Bittensor network. + +**See also:** [Local Build](../local-build/deploy), [Create a Subnet](../local-build/create-subnet.md) + +### Local Wallet + +A Bittensor wallet created on the user's machine, requiring the installation of Bittensor. + +**See also:** [Wallets](../keys/wallets.md), [Installation](../getting-started/installation.md) + +### Loss Function + +In the context of machine learning, a mathematical function that measures the difference between the predicted output and the ground truth. In Bittensor, incentive mechanisms act as loss functions that steer subnet miners towards desirable outcomes. + +**See also:** [Anatomy of Incentive Mechanism](../learn/anatomy-of-incentive-mechanism.md), [Understanding Subnets](../subnets/understanding-subnets.md) + +## M + +### Mainchain + +The primary Bittensor blockchain network, used for production purposes and connected to lite or archive nodes. + +**See also:** [Bittensor Networks](../concepts/bittensor-networks.md), [Subtensor Nodes](../subtensor-nodes/) + +### Mempool + +The _mempool_ is a temporary holding area in blockchain networks where pending and unconfirmed transactions sit before being included in a block. When you submit a transaction, it first enters the mempool, where it becomes visible to all network participants. + +### Metagraph + +A data structure that contains comprehensive information about the current state of a subnet, including detailed information on all the nodes (neurons) such as subnet validator stakes and subnet weights in the subnet. Metagraph aids in calculating emissions. + +**See:** [The Subnet Metagraph](../subnets/metagraph) + +### MEV (Maximal Extractable Value) + +In blockchain networks, MEV refers to the profit that can be extracted by reordering, inserting, or censoring transactions within a block. + +Common MEV attacks include: + +- **Front-running**: Observing a pending transaction and submitting a similar transaction with higher priority to execute first +- **Sandwich attacks**: Placing transactions before and after a target transaction to profit from the price movement caused by that transaction +- **Back-running**: Submitting a transaction immediately after a target transaction to capitalize on its effects + +In Bittensor, MEV attacks can affect staking and unstaking operations, where attackers might exploit knowledge of pending transactions to manipulate token prices. The MEV Shield feature protects against these attacks by encrypting transactions until they are included in a block. + +**See also:** [MEV Shield](../sdk/mev-protection.md), [Price Protection](../learn/price-protection.md) + +### Multiple Incentive Mechanisms + +A feature that allows subnets to implement multiple independent evaluation systems within a single subnet. Each mechanism operates with its own bond pool for Yuma Consensus calculations, enabling subnet creators to distribute emissions across different types of work or evaluation criteria. Validators must evaluate miners separately for each mechanism, and miner performance in one mechanism does not affect their rating in another. + +**See also:** [Multiple Incentive Mechanisms Within Subnets](../subnets/understanding-multiple-mech-subnets), [Anatomy of Incentive Mechanism](../learn/anatomy-of-incentive-mechanism.md) + +### Miner Deregistration + +The process of removing a poor-performing subnet miner from a UID slot, making room for a newly registered miner. + +**See also:** [Miner Deregistration](../miners/#miner-deregistration) + +### Mnemonic + +A sequence of words used to regenerate keys, in case of loss, and restore coldkeys and hotkeys in the Bittensor wallet. + +**See also:** [Handle Seed Phrase](../keys/handle-seed-phrase.md), [Working with Keys](../keys/working-with-keys.md) + +## N + +### NaCl Format + +A secure encryption format, using the [NaCl](https://nacl.cr.yp.to/) library, used for updating legacy Bittensor wallets to improve security. + +**See also:** [Working with Keys](../keys/working-with-keys.md), [Coldkey-Hotkey Security](../keys/coldkey-hotkey-security.md) + +### Netuid + +A unique identifier assigned to a subnet within the Bittensor network. + +**See also:** [Understanding Subnets](../subnets/understanding-subnets.md), [Working with Subnets](../subnets/working-with-subnets.md) + +### Neuron + +The basic computing node in a Bittensor subnet, representing a node in a neural network. Neurons can be either subnet validators or subnet miners, each identified by a unique UID within their subnet and associated with a hotkey-coldkey pair for authentication and operations. + +Neurons participate in the network through axon servers (miners) and dendrite clients (validators), exchanging synapse objects to perform subnet-specific tasks. Their performance is measured through metrics like rank, trust, consensus, and incentive scores, which determine emissions and validator permits. + +**See also:** [Understanding Neurons](../learn/neurons.md), [Subnet Validators](../validators/), [Subnet Miners](../miners/), [NeuronInfo class](pathname:///python-api/html/autoapi/bittensor/core/chain_data/neuron_info/index.html) + +### Nominate + +The process of a staking TAO on a validator's hotkey. Nomination allows token holders to participate in subnet emissions by staking their TAO to active validators, earning proportional rewards based on the validator's performance. + +**See also:** [Staking and delegation](../staking-and-delegation/delegation.md) + +### Nominator + +An account that stakes TAO on a validator's hotkey. Nominators are token holders who nominate their TAO to validators/delegates to participate in subnet's consensus and earn dividends while keeping control of their tokens. + +**See also:** [Staking and delegation](../staking-and-delegation/delegation.md) + +### Non-fast blocks + +A development-only configuration that adheres to Subtensor’s default 12-second block interval, simulating production timing for features like delayed subnet activation. + +**See also:** [Create a local instance](../local-build/deploy.md?local-chain=docker#2-run-the-container) + +## O + +### Objective Function + +In the context of machine learning and subnet operations, this refers to the goal that the subnet is continuously optimizing for, through its incentive mechanism. + +**See also:** [Anatomy of Incentive Mechanism](../learn/anatomy-of-incentive-mechanism.md), [Understanding Subnets](../subnets/understanding-subnets.md) + +## P + +### Private Key + +A private component of the cryptographic key pair, crucial for securing and authorizing transactions and operations within the Bittensor network. + +**See also:** [Working with Keys](../keys/working-with-keys.md), [Coldkey-Hotkey Security](../keys/coldkey-hotkey-security.md) + +### Proposal + +A suggestion or plan put forward by the Triumvirate for the Senate to vote on. + +**See also:** [Governance](../governance/governance.md), [Senate](../governance/senate.md) + +### Proposal hash + +A unique identifier for a proposal used in the voting process. + +**See also:** [Governance](../governance/governance.md), [Senate](../governance/senate.md) + +### Public Key + +A cryptographic key that is publicly available and used for verifying signatures, encrypting messages, and identifying accounts in the Bittensor network. This is the publicly shareable part of the cryptographic key pair associated with both the coldkey and hotkey, allowing others to securely interact with the wallet. + +**See also:** [Working with Keys](../keys/working-with-keys.md), [Coldkey-Hotkey Security](../keys/coldkey-hotkey-security.md) + +### Public Subtensor + +A publicly accessible node in the Bittensor network that can be run as a lite node or an archive node and synchronized with either the mainchain or testchain. + +**See also:** [Subtensor Nodes](../subtensor-nodes/), [Managing Subtensor Connections](../sdk/managing-subtensor-connections.md) + +## R + +### RAO + +A denomination of TAO, representing one billionth (10-9) of a TAO. + +**See also:** [Emissions](../learn/emissions.md) + +### Rank + +This metagraph property represents the final aggregate judgment of a each miner, computed by Yuma Consensus alogirithm operating over the miner-ratings submitted by a subnet's validators each tempo. The final `rank` score represent a miner's performance after any outlier weights set by validators have been removed through consensus clipping. This ensures that only weights near the median consensus are used in final calculations. + +Ranks are calculated as the stake-weighted sum of consensus-clipped weights and directly determine emissions to miners. + +**See also:** [Emissions](../learn/emissions.md), [Yuma Consensus](../learn/yuma-consensus.md), [Subnet Metagraph](../subnets/metagraph) + +**Relationship to Other Metrics:** + +- **Ranks vs Consensus**: Ranks are calculated using consensus-clipped weights +- **Ranks vs Trust**: Trust measures how much consensus clipping affected the rank +- **Ranks vs Incentive**: Ranks are normalized to become incentive values +- **Ranks vs Validator Trust**: Validator trust measures validator influence in consensus + +**Calculation Process:** + +1. **Pre-ranks**: Initial stake-weighted sum of all weights before consensus filtering +2. **Consensus calculation**: Stake-weighted median of weights per neuron (consensus threshold) +3. **Weight clipping**: Weights clipped at consensus threshold to remove outliers +4. **Final ranks**: Stake-weighted sum of clipped weights (the rank value) + +**Properties and Interpretation:** + +- **Range**: [0, 1] normalized values after final normalization +- **High Rank**: Values close to 1 indicate strong consensus-based performance +- **Low Rank**: Values close to 0 indicate weak consensus-based performance +- **Incentive Distribution**: Ranks directly determine incentive allocation to miner neurons + +**Network Security Properties:** + +- **Consensus-Based**: Ranks reflect network consensus rather than individual validator opinions +- **Outlier Protection**: Consensus clipping prevents manipulation by outlier weights +- **Stake-Weighted**: Higher stake validators have more influence in rank calculation +- **Dynamic Updates**: Ranks are recalculated every epoch based on current network state + +**Mathematical Definition:** +For each neuron $j$, the rank $R_j$ is calculated as: +$$R_j = \sum_{i \in \text{validators}} S_i \cdot \overline{W_{ij}}$$ + +Where: + +- $S_i$ is the stake of validator $i$ +- $\overline{W_{ij}}$ is the consensus-clipped weight from validator $i$ to neuron $j$ +- The sum is taken over all validators in the subnet + +**Source**: + +- [`bittensor/bittensor/core/metagraph.py:325-331`](https://github.com/opentensor/bittensor/blob/main/bittensor/core/metagraph.py#L325-331) +- [`subtensor/pallets/subtensor/src/epoch/run_epoch.rs:605`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/epoch/run_epoch.rs#L605) + +### Recycling and burning + +Tokens (TAO and subnet-specific alpha) can be 'removed from circulation', meaning these tokens exist in neither wallet nor liquidity pool, and cannot be transacted. This can happen in two ways: + +- When tokens are **recycled**, they are subtracted from the chain's record of token issuance (`TotalIssuance`), so effectively the same quantity of tokens can be emitted again. + +- In contrast, when tokens are **burned** they exist in no wallet and no pool and can no longer be transacted; however they are still included in the record of token issuance, so they will not be re-emitted, and in effect will forever remain as a quantity of _missing_ tokens, a difference between issuance and the effective quantity in circulation. + +#### Recycling + +Tokens are recycled in several cases in Bittensor operations: + +- **All transaction fees are recycled**: When transaction fees are collected, they are deducted from `TotalIssuance`, effectively recycling them back into the system for future emission. See [Transaction Fees in Bittensor](../learn/fees) +- **Subnet Creation fees**: When a new subnet is created, the cost is recycled, except for one TAO, which is used to initialize the subnet's TAO liquidity pool. +- **Neuron Registration fees**: When a user registers a hotkey on a subnet to participate as a miner or validator, they are charged a registration fee in TAO. Alpha tokens worth the current swap value of the fee are taken from the subnet's alpha liquidity pool and recycled. +- **Extrinsic transaction**: Users can manually recycle alpha tokens using the `recycle_alpha` extrinsic, which reduces both the user's stake and the subnet's `SubnetAlphaOut` tracker. + +#### Burning + +Subnet-specific alpha tokens are burned in several contexts: + +- **Creator emissions burning**: Alpha emissions for mining on a subnet are automatically burned if they are emitted to the hotkey with creator permissions on the subnet, or if they are emitted to a hotkey controlled by the subnet owner's coldkey. This allows validators to burn some or all of the subnet's emissions to prevent token inflation (by weighting the subnet creator hotkey). +- **Extrinsic transaction**: Alpha can be burned on demand using the `burn_alpha` Subtensor extrinsic. Unlike recycling, burning does not reduce `SubnetAlphaOut`. +- **Root Subnet automated burning**: Subnet Zero (Root Subnet) alpha tokens are burned under specific economic conditions to maintain system stability. + +### Regenerating a Key + +The process of recreating a lost or deleted coldkey or hotkey using the associated mnemonic. + +**See also:** [Handle Seed Phrase](../keys/handle-seed-phrase.md), [Working with Keys](../keys/working-with-keys.md) + +### Register + +The process of registering keys with a subnet and purchasing a UID slot. + +**See also:** [Subnet Miners](../miners/), [Subnet Validators](../validators/), [Working with Subnets](../subnets/working-with-subnets.md) + +### Root Proportion + +For a given subnet, the relative weight of TAO staked to validators on that subnet through staking to the Root Subnet (rather than directly to the subnet). Mathematically it is the ratio of stake on Root to the total issuance of the subnet's alpha token. + +**Properties:** + +- **Range**: [0, 1] representing the proportion of dividends going to root stakers +- **Higher root proportion**: More of the total stake in the subnet is held by stakers in root, rather than directly in the subnet. +- **Lower root proportion**: More dividends remain as alpha for subnet stakers + +**Mathematical Definition:** + +$$ +\text{Root proportion} = \frac{\text{Root TAO} \times \text{TAO weight}}{\text{Root TAO} \times \text{TAO weight} + \text{alpha issuance}} +$$ + +Where: + +- `Root TAO`: Total TAO staked in Root Subnet +- `TAO weight`: Global parameter ([TAO Weight](#tao-weight)) determining TAO vs alpha influence (currently 0.18) + +See also: + +- [Root Subnet/Subnet Zero](#root-subnetsubnet-zero) +- [TAO Weight](#tao-weight) +- [Coinbase Implementation](../navigating-subtensor/emissions-coinbase.md#6-calculating-root-proportion) +- [Emissions](../learn/emissions.md) + +### Root Subnet/Subnet Zero + +Subnet Zero a.k.a. the root subnet is a special subnet. No miners can register on subnet zero, and no validation work is performed. However validators can register, and $\tau$-holders can stake to those validators, as with any other subnet. This offers a mechanism for $\tau$-holders to stake $\tau$ into validators in a subnet-agnostic way. This works because the weight of a validator in a subnet includes both their share of that subnet's $\alpha$ and their share of staked TAO in Subnet Zero. + +## S + +### SS58 Encoded + +A compact representation of public keys corresponding to the wallet's coldkey and hotkey, used as wallet addresses for secure TAO transfers. + +**See also:** [Working with Keys](../keys/working-with-keys.md), [Wallets](../keys/wallets.md) + +### Slippage + +In the context of an automated market maker (AMM), slippage is the impact on the tokens acquired in a trade due to the change in price from the trade transaction itself. + +In Bittensor, each subnet's alpha token is traded on a constant product AMM. When you stake TAO to receive alpha (or unstake alpha to receive TAO), your transaction changes the token price, resulting in receiving less than the current market rate X the quantity of the token you are inputting. + +Larger transactions cause more slippage. Bittensor provides slippage protection through tolerance limits and partial execution options. + +**See:** [Understanding Pricing and Anticipating Slippage](../learn/slippage.md) + +### Senate + +A group of elected delegates formed from the top K delegate hotkeys, responsible for approving or disapproving proposals made by the Triumvirate. + +**See also:** [Senate](../governance/senate.md), [Governance](../governance/governance.md) + +### Stake + +The amount of currency tokens delegated to a validator UID in a subnet. Includes both self-stake (from the validator's own cold-key) and stake delegated from others. + +Stake determines a validator's weight in consensus as well as their emissions. + +**See also:** [Managing Stake with btcli](../staking-and-delegation/managing-stake-btcli.md), [Managing Stake with SDK](../staking-and-delegation/managing-stake-sdk.md), [Delegation](../staking-and-delegation/delegation.md) + +### Stake Weight + +The computed total stake value for a validator that determines their consensus power and emissions in a subnet. Stake weight combines a validator's alpha stake and TAO stake using the TAO weight parameter to calculate their total influence in the network. + +**See also:** [TAO Weight](#tao-weight), [Understanding Subnets](../subnets/understanding-subnets.md) + +**Mathematical Definition:** +For a validator with alpha stake $\alpha$ and TAO stake $\tau$, the stake weight $W$ is calculated as: + +$$ +W = {\alpha + \tau \ \times w_{\tau}} +$$ + +Where $w_{\tau}$ is the global TAO weight parameter (currently 0.18) + +A validator's relative influence in a subnet is calculated as: + +$$ +\text{Relative Stake Weight} = \frac{\text{Stake Weight}_i}{\sum_{v \in \text{validators}} \text{Stake Weight}_v} +$$ + +**Consensus Power:** + +- **Weight Setting**: Higher stake weight means more influence when setting weights +- **Validator Permits**: Stake weight determines eligibility for validator permits +- **Bond Formation**: Stake weight influences bond calculations and retention + +**Validator Emissions:** + +- **Relative Distribution**: Higher stake weight -> higher emission share + +**Code References:** + +- **Yuma Consensus**: [`subtensor/pallets/subtensor/src/epoch/run_epoch.rs:530`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/epoch/run_epoch.rs#L530) +- **Validator dividend distribution**: [`subtensor/pallets/subtensor/src/coinbase/run_coinbase.rs:165`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/coinbase/run_coinbase.rs#L165) + +### Staking + +The process of attaching TAO to a validator hotkey, i.e., locking TAO to a subnet validator's hotkey to increase their total stake and increase their consensus power and share of dividends. + +**See also:** +- [Managing Stake with btcli](../staking-and-delegation/managing-stake-btcli.md) +- [Managing Stake with SDK](../staking-and-delegation/managing-stake-sdk.md) +- [Delegation](../staking-and-delegation/delegation.md) +- [Browse validators on TAO.app](https://www.tao.app/validators) + +### Subnet + +A Bittensor subnet is an incentive-based competition market that produces a specific kind of digital commodity. It consists of a community of miners that produce the commodity, and a community of validators that measures the miners' work to ensure its quality. + +**See also:** [Understanding Subnets](../subnets/understanding-subnets.md), [Working with Subnets](../subnets/working-with-subnets.md), [Create a Subnet](../subnets/create-a-subnet.md) + +### Subnet Miner + +The task-performing entity within a Bittensor subnet. A subnet miner is a type of node in a Bittensor subnet that is connected only to subnet validators. Subnet miners are isolated from the external world and communicate bidirectionally with subnet validators. A subnet miner is responsible for performing tasks given to them by the subnet validators in that subnet. + +**See also:** [Subnet Miner Documentation](../miners/) + +### Subnet Creator + +The individual or entity responsible for defining the specific digital task to be performed by subnet miners, implementing one or more incentive mechanisms, and providing sufficient documentation for participation in the subnet. Subnet creators can configure multiple incentive mechanisms to distribute emissions across different types of work or evaluation criteria. + +**See also:** [Create a Subnet](../subnets/create-a-subnet.md), [Subnet Creators btcli Guide](../subnets/subnet-creators-btcli-guide.md), [Multiple Incentive Mechanisms Within Subnets](../subnets/understanding-multiple-mech-subnets) + +### Subnet Protocol + +A unique set of rules defining interactions between subnet validators and miners, including how tasks are queried and responses are provided. + +**See also:** [Understanding Subnets](../subnets/understanding-subnets.md), [Working with Subnets](../subnets/working-with-subnets.md) + +### Subnet scoring model + +A component of an incentive mechanism that defines how subnet miners' responses are evaluated, aiming to align subnet miner behavior with the subnet's goals and user preferences. It is a mathematical object that converts miner responses into numerical scores, enabling continuous improvement and competition among miners. When multiple incentive mechanisms are used, each has its own scoring model for independent evaluation. + +**See also:** [Anatomy of Incentive Mechanism](../learn/anatomy-of-incentive-mechanism.md), [Multiple Incentive Mechanisms Within Subnets](../subnets/understanding-multiple-mech-subnets), [Understanding Subnets](../subnets/understanding-subnets.md) + +### Subnet Task + +A key component of any incentive mechanism that defines the work the subnet miners will perform. The task should be chosen to maximize subnet miner effectiveness at the intended use case for the subnet. When multiple incentive mechanisms are used within a subnet, each mechanism can define different tasks for miners to perform. + +**See also:** [Understanding Subnets](../subnets/understanding-subnets.md), [Anatomy of Incentive Mechanism](../learn/anatomy-of-incentive-mechanism.md), [Multiple Incentive Mechanisms Within Subnets](../subnets/understanding-multiple-mech-subnets) + +### Subnet Weights + +The importance assigned to each subnet determined by net TAO flows (staking minus unstaking activity) and used to determine the percentage emissions to subnets. As of November 2025, this is based on EMA-smoothed TAO flows rather than token prices. + +**See also:** [Emissions](../learn/emissions.md), [Consensus-Based Weights](../concepts/consensus-based-weights.md) + +### Subtensor + +[Subtensor](https://github.com/opentensor/subtensor) is Bittensor's layer 1 blockchain based on substrate (now PolkadotSDK). This serves Bittensor as a system of record for transactions and rankings, operates Yuma Consensus, and emits liquidity to participants to incentivize their participation in network activities. + +The Bittensor SDK offers the [`bittensor.core.subtensor`](pathname:///python-api/html/autoapi/bittensor/core/subtensor/index.html) and [`bittensor.core.async_subtensor`](pathname:///python-api/html/autoapi/bittensor/core/async_subtensor/index.html) modules to handle Subtensor blockchain interactions. + +**See also:** [Subtensor API](../sdk/subtensor-api.md), [Subtensor Nodes](../subtensor-nodes/), [Managing Subtensor Connections](../sdk/managing-subtensor-connections.md) + +### Sudo + +A privileged key for administrative actions, replaced by governance protocol for enhanced security. + +**See also:** [Governance](../governance/governance.md), [btcli Permissions](../btcli/btcli-permissions.md) + +### Synapse + +A data object used by subnet validators and subnet miners as the main vehicle to exchange information. Synapse objects are based on the BaseModel of the Pydantic data validation library. + +**See also:** [Subnet Miners](../miners/), [Subnet Validators](../validators/) + +## T + +### TAO ($\tau$) + +The cryptocurrency of the Bittensor network, used to incentivize participation in network activities (mining, validation, subnet creation and management). A single TAO is newly created (i.e., minted) every 12 seconds on the Bittensor blockchain. + +**See also:** [Emissions](../learn/emissions.md), [Wallets](../keys/wallets.md) + +### TAO Weight + +A global parameter (currently set to 0.18) that determines the relative influence of TAO stake versus alpha stake when calculating a validator's total stake weight, a critical value that influence's a validator's consensus power and emissions. + +**See also:** [Stake Weight](#stake-weight) + +### Tempo + +Tempo is a subnet-specific hyperparameter that determines how frequently epochs run. It is a 360-block period over which the Yuma Consensus calculates emissions to subnet participants based on the latest available ranking weight matrix. A single block is processed every 12 seconds, hence a 360-block tempo passes every 4320 seconds or ~72 minutes. + +**See also:** [Yuma Consensus](../learn/yuma-consensus.md), [Emissions](../learn/emissions.md) + +### Transfer + +The process of sending TAO tokens from one wallet address to another in the Bittensor network. + +**See also:** [Wallets](../keys/wallets.md), [Working with Keys](../keys/working-with-keys.md) + +### Triumvirate + +A group of three Opentensor Foundation employees responsible for creating proposals. + +**See also:** [Governance](../governance/governance.md), [Senate](../governance/senate.md) + +### Trust + +In the Yuma Consensus algorithm, trust represents how much a miner's rank was affected by consensus clipping. Trust is calculated as the ratio of final rank to pre-rank. It represents how much of the original validator support survived the consensus clipping process, providing insight into whether a neuron received controversial or outlier weight assignments. + +**See also:** [Yuma Consensus](../learn/yuma-consensus.md), [Subnet Metagraph](../subnets/metagraph) + +**Mathematical Definition:** +For each neuron $j$, the trust $T_j$ is calculated as: + +$$ +T_j = \frac{R_j}{P_j} +$$ + +Where: + +- $R_j$ is the final rank after consensus clipping +- $P_j$ is the pre-rank before consensus clipping +- The ratio indicates the proportion of original support that survived consensus filtering + +Interpretation: + +- **Range**: [0, 1] where 1.0 indicates perfect consensus alignment +- **`Trust = 1.0`**: Neuron's rank unchanged by consensus (high consensus alignment) +- **`Trust < 1.0`**: Neuron's rank reduced by consensus clipping (lower value means more reduction) +- **`Trust = 0.0`**: Neuron's rank eliminated by consensus (no consensus support) + +Calculation Process: + +1. **Pre-ranks calculation**: $P_j = \sum_{i} S_i \cdot W_{ij}$ (stake-weighted sum of all weights) +2. **Consensus filtering**: Weights clipped at consensus threshold to remove outliers +3. **Final ranks calculation**: $R_j = \sum_{i} S_i \cdot \overline{W_{ij}}$ (stake-weighted sum of clipped weights) +4. **Trust calculation**: $T_j = R_j / P_j$ (ratio of final to pre-rank) + +**Relationship to Other Metrics:** + +- **Trust vs Consensus**: Trust measures the impact of consensus filtering +- **Trust vs Ranks**: Trust is the ratio of final rank to pre-rank +- **Trust vs Validator Trust**: Trust is per-neuron, Validator Trust is per-validator +- **Trust vs Incentive**: Trust influences incentive through consensus mechanisms + +**Metric Comparison Table** + +| Metric | Purpose | Calculation | Range | Interpretation | +| ------------------- | ------------------- | ------------------------------------------- | ------ | ------------------------------------------- | +| **Consensus** | Consensus threshold | Stake-weighted median of weights per neuron | [0, 1] | Higher = stronger validator agreement | +| **Ranks** | Performance scoring | Stake-weighted sum of clipped weights | [0, 1] | Higher = better performance after consensus | +| **Trust** | Consensus alignment | Final rank / Pre-rank | [0, 1] | 1.0 = no clipping, < 1.0 = some clipping | +| **Validator Trust** | Validator influence | Sum of clipped weights per validator | [0, 1] | Higher = more consensus-aligned validator | + +**Source**: + +- [`bittensor/bittensor/core/metagraph.py:380-393`](https://github.com/opentensor/bittensor/blob/main/bittensor/core/metagraph.py#L380-393) +- [`subtensor/pallets/subtensor/src/epoch/run_epoch.rs:608`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/epoch/run_epoch.rs#L608) + +The relationship between these metrics creates a feedback loop: consensus determines weight clipping, which affects ranks and trust, which influences validator trust, which feeds back into future consensus calculations. This system ensures that the network rewards neurons with strong validator agreement while penalizing those with controversial or outlier weight assignments, creating a robust mechanism for maintaining network quality and security. + +## U + +### UID Slot + +A position occupied by a subnet miner or subnet validator within a subnet, identified by a unique UID. The UID is assigned to a hotkey when it is registered in a subnet, allowing the hotkey to participate as a subnet validator or subnet miner. + +**See also:** [Subnet Miners](../miners/), [Subnet Validators](../validators/), [Working with Subnets](../subnets/working-with-subnets.md) + +### Unstaking + +The process of withdrawing staked TAO from a validator hotkey, converting subnet-specific alpha tokens back to TAO through the subnet's automated market maker (AMM). Unstaking operations are subject to slippage—the transaction impacts pool prices, with larger amounts experiencing more slippage. Bittensor provides price protection mechanisms including tolerance limits and partial execution options to guard against unfavorable exchange rates. + +When you unstake: + +1. Alpha tokens are removed from the validator's hotkey and added to the subnet's alpha reserves +2. The AMM calculates equivalent TAO using the current exchange rate +3. TAO is removed from the subnet's TAO reserves and transferred to your coldkey + +Unstaking incurs blockchain transaction fees, which are recycled back into the TAO emission pool. + +**See also:** + +- [Staking/Delegation overview](../staking-and-delegation/delegation.md#unstaking) +- [Managing Stake with btcli](../staking-and-delegation/managing-stake-btcli.md#unstaking-with-btcli) +- [Managing Stake with SDK](../staking-and-delegation/managing-stake-sdk.md#unstaking-with-the-sdk) +- [Understanding Pricing and Anticipating Slippage](../learn/slippage.md) +- [Price Protection When Staking](../learn/price-protection.md) +- [Transaction Fees](../learn/fees.md) + +## V + +### Validator Permit + +A boolean flag indicating whether a specific neuron has validation rights within a subnet. Validator permits are awarded to the top K neurons by stake weight and are required for setting weights and participating in consensus. + +**See also:** [VPermit](#vpermit), [Validator Requirements](../validators/index.md#requirements-for-validation), [Stake Weight](#stake-weight) + +### VPermit + +A list of subnet IDs (netuids) indicating which subnets a delegate is authorized to validate on. VPermits are delegate-level permissions that aggregate individual validator permits across multiple subnets, allowing delegates to participate in validation activities on specific subnets. + +**See also:** [Validator Permits](#validator-permit), [Delegation](../staking-and-delegation/delegation.md), [Validator Requirements](../validators/index.md#requirements-for-validation) + +### Validator + +A type of node in a subnet that evaluates the performance of miners and sets weights based on their output + +**See also:** +- [Validating in Bittensor](../validators/) +- [Browse validators on TAO.app](https://www.tao.app/validators) + +### Validator Trust + +A specialized trust metric for validator neurons that measures their influence in the consensus process. Validator trust is calculated as the sum of all clipped weights set by each validator across all neurons, indicating how much weight a validator successfully contributed to consensus. + +**See also:** [Yuma Consensus](../learn/yuma-consensus.md), [Subnet Metagraph](../subnets/metagraph.md), [Validator-Miner Bonds](#validator-miner-bonds) + +**Basic Concept:** +Validator trust specifically measures validator neurons' influence in the consensus process. It represents how much weight each validator successfully contributed to the consensus after weight clipping, providing insight into validator alignment with network consensus. + +**Mathematical Definition:** +For each validator $i$, the validator trust $T_{vi}$ is calculated as: +$$T_{vi} = \sum_{j \in \text{neurons}} \overline{W_{ij}}$$ + +Where: + +- $\overline{W_{ij}}$ is the consensus-clipped weight from validator $i$ to neuron $j$ +- The sum is taken over all neurons in the subnet +- Validator trust measures the total influence a validator has in consensus + +**Calculation Process:** + +1. **Weight setting**: Validators set weights to all neurons in the subnet +2. **Consensus calculation**: Stake-weighted median of weights per neuron (consensus threshold) +3. **Weight clipping**: Weights clipped at consensus threshold to remove outliers +4. **Validator trust calculation**: Sum of all clipped weights set by each validator + +**Properties and Interpretation:** + +- **Range**: [0, 1] normalized values +- **High Validator Trust**: Values close to 1 indicate strong consensus alignment +- **Low Validator Trust**: Values close to 0 indicate outlier weight assignments +- **Validator Influence**: Higher validator trust means more influence in consensus decisions + +**Network Security Properties:** + +- **Consensus Alignment**: Validator trust measures how well validators align with consensus +- **Outlier Detection**: Low validator trust indicates potential manipulation attempts +- **Validator Quality**: High validator trust indicates quality validation services +- **Economic Incentives**: Validator trust influences validator rewards and bond retention + +**Source**: + +- [`bittensor/bittensor/core/metagraph.py:397-409`](https://github.com/opentensor/bittensor/blob/main/bittensor/core/metagraph.py#L397-409) +- [`subtensor/pallets/subtensor/src/epoch/run_epoch.rs:600`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/epoch/run_epoch.rs#L600) + +**Relationship to Other Metrics:** + +- **Validator Trust vs Trust**: Validator trust is per-validator, Trust is per-neuron +- **Validator Trust vs Consensus**: Validator trust measures validator influence in consensus +- **Validator Trust vs Ranks**: Validator trust influences rank calculation through consensus +- **Validator Trust vs Bonds**: Validator trust affects bond retention and validator permits + +### Validator-Miner Bonds + +Bonds represent the "investment" a validator has made in evaluating a specific miner. This bonding mechanism uses [Exponential Moving Average (EMA)](#exponential-moving-average-ema) to smooth bond evolution over time, integral to the Yuma Consensus' design intent of incentivizing high-quality performance by miners, and honest evaluation by validators. + +**Bond Formation Process:** + +**1. Instant Bond Calculation:** +The instant bond $\Delta B_{ij}$ of validator $i$ to miner $j$ is calculated as: +$$\Delta B_{ij} = \frac{S_i \cdot \widetilde{W_{ij}}}{\sum_{k \in \mathbb{V}} S_k \cdot \widetilde{W_{kj}}}$$ + +Where: + +- $S_i$ is validator $i$'s stake +- $\widetilde{W_{ij}}$ is the bond-weight (penalty-adjusted weight) +- The denominator normalizes by the total bond-weight for miner $j$ across all validators + +**2. Bond-Weight Calculation:** +Bond-weights are penalized when validators overstate miner performance: +$$\widetilde{W_{ij}} = (1-\beta)W_{ij} + \beta\overline{W_{ij}}$$ + +Where: + +- $W_{ij}$ is the original weight set by validator $i$ for miner $j$ +- $\overline{W_{ij}}$ is the consensus-clipped weight +- $\beta$ is the bonds penalty factor (configurable hyperparameter) + +**3. Exponential Moving Average (EMA) Bonds:** +Instant bonds are smoothed over time using [EMA](#exponential-moving-average-ema) to prevent abrupt changes: +$$B_{ij}^{(t)} = \alpha \Delta B_{ij} + (1-\alpha)B_{ij}^{(t-1)}$$ + +Where $\alpha$ is the EMA smoothing factor (see [Exponential Moving Average](#exponential-moving-average-ema) for details). + +**Bond Mechanics and Design:** + +**Consensus Alignment:** + +- Validators who stay near consensus build stronger EMA bonds +- Bonds are penalized when validators overstate miner performance +- The EMA smooths out abrupt swings in validator behavior +- Bonds incentivize consistent alignment with consensus + +**Bond Retention:** + +- Neurons retain bonds only if they keep validator permits +- Bonds are cleared when neurons lose validator permits +- Bonds are stored as sparse matrices in blockchain state + +**Bond Decay:** + +- Bonds decay over time using [EMA](#exponential-moving-average-ema) with the `bonds_moving_avg` parameter +- Higher decay rates (larger α) make bonds more responsive to recent performance +- Lower decay rates (smaller α) allow bonds to persist longer + +**Economic Alignment:** + +- Bonds create long-term relationships between validators and miners +- Validators are incentivized to discover and support promising miners early +- Bond strength reflects validator confidence in miner performance + +**Dynamic Adjustment:** + +- Bonds adapt to changing network conditions and consensus +- EMA smoothing prevents exploitation of rapid bond changes +- Bonds provide stability while allowing for network evolution + +**Retrieval:** + +- Bonds can be queried via the `bonds()` method in the Subtensor API +- Metagraph includes bonds matrix accessible via `metagraph.B` property +- Bonds are included in neuron information structures + +**Related hyperparameters:** + +- `bonds_penalty`: Controls penalty for out-of-consensus weights (0-65535) +- `bonds_moving_avg`: Controls bond decay rate (typically 900,000) +- `liquid_alpha_enabled`: Enables dynamic alpha adjustment for bonds + +**Validator Permits:** + +- Bonds are retained only by neurons with validator permits +- Loss of validator permit clears all bonds for that neuron +- Bonds align with permit retention for economic security + +**Emission Distribution:** + +- Bonds directly determine validator emission shares +- Strong bonds lead to higher validator rewards +- Bonds create market-based incentive alignment + +**Code References:** + +- [Bond calculation in epoch execution]https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/epoch/run_epoch.rs:631) +- [EMA bond computation]https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/epoch/math.rs:1475) +- [Bonds API method]https://github.com/opentensor/subtensor/blob/main/bittensor/core/async_subtensor.py:931) +- [Bonds storage definition]https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/lib.rs:1560) + +**See also:** [Yuma Consensus](../learn/yuma-consensus), [Emissions](../learn/emissions) + +### Validator Take % + +The percentage of emissions a validator takes, of the portion that depends on delegated stake (not including their emissions in proportion to their own self-stake), before the remainder is extracted back to the stakers. + +Effectively, this represents the fee percentage that validators charge delegators for validation services. + +**See also:** [Emissions](../learn/emissions.md) + +## W + +### Wallet Address + +A unique identifier derived from the public key, used as a destination for sending and receiving TAO tokens in the Bittensor network. + +**See also:** [Wallets](../keys/wallets.md), [Working with Keys](../keys/working-with-keys.md) + +### Wallet Location + +The directory path where the generated Bittensor wallets are stored locally on the user's machine. + +**See also:** [Wallets](../keys/wallets.md), [Installation](../getting-started/installation.md) + +### Weight Copying + +A free-riding exploit possible for validators, which can be guarded against using Commit Reveal. + +### Weight Matrix + +A matrix formed from the ranking weight vectors of all subnet validators in a subnet, used as input for the Yuma Consensus module to calculate emissions to that subnet. When multiple incentive mechanisms are used, each mechanism has its own weight matrix for independent consensus calculations. + +**See also:** [Yuma Consensus](../learn/yuma-consensus.md), [Consensus-Based Weights](../concepts/consensus-based-weights.md), [Multiple Incentive Mechanisms Within Subnets](../subnets/understanding-multiple-mech-subnets) + +### Weight Vector + +A vector maintained by each subnet validator, with each element representing the weight assigned to a subnet miner based on its performance. When multiple incentive mechanisms are used, validators maintain separate weight vectors for each mechanism. + +The ranking weight vectors for each subnet are transmitted to the blockchain, where they combine to form the [weight matrix](#weight-matrix) (or matrices when multiple mechanisms are used) that is input for Yuma Consensus. + +**See also:** [Consensus-Based Weights](../concepts/consensus-based-weights.md), [Yuma Consensus](../learn/yuma-consensus.md), [Multiple Incentive Mechanisms Within Subnets](../subnets/understanding-multiple-mech-subnets) + +## Y + +### Yuma Consensus + +The consensus mechanism in the Bittensor blockchain that computes emissions to participants. + +**See also:** [Yuma Consensus](../learn/yuma-consensus.md) diff --git a/docs/resources/media-assets.md b/docs/resources/media-assets.md new file mode 100644 index 0000000000..8b5adb5f6e --- /dev/null +++ b/docs/resources/media-assets.md @@ -0,0 +1,11 @@ +--- +title: "Media Assets" +--- + +# Media Assets + +Download the Bittensor media assets from the below location: + +**Location**: https://github.com/latent-to/developer-docs/tree/main/static/bittensor-media-assets + +**Description**: A zip file (29 MB) containing Bittensor TAO symbol, monogram, logotype, supporting elements and a Bittensor brand guidelines PDF. diff --git a/docs/questions-and-answers.md b/docs/resources/questions-and-answers.md similarity index 86% rename from docs/questions-and-answers.md rename to docs/resources/questions-and-answers.md index ff1772f9bd..d315543b97 100644 --- a/docs/questions-and-answers.md +++ b/docs/resources/questions-and-answers.md @@ -1,7 +1,8 @@ --- title: "Frequently asked questions (FAQ)" -hide_table_of_contents: false +hide_table_of_contents: false --- + import ThemedImage from '@theme/ThemedImage'; import useBaseUrl from '@docusaurus/useBaseUrl'; @@ -32,7 +33,7 @@ import { VscFileMedia } from "react-icons/vsc"; ## Where can I get answers to my questions about Dynamic TAO? -This [Dynamic TAO FAQ](./dynamic-tao/dtao-faq). +This [Dynamic TAO FAQ](../dynamic-tao/dtao-faq). ### Is Bittensor a blockchain or an AI platform? @@ -50,7 +51,7 @@ Anyone with the funds and technical know-how can create a subnet, or participate ### How does competition work in a subnet? -The work to be performed by miners is set by the subnet creator in the form of the subnet's incentive mechanism. The miners compete to best perform the task, submitting their work to the validators. +The work to be performed by miners is set by the subnet creator in the form of the subnet's incentive mechanism. The miners compete to best perform the task, submitting their work to the validators. The validators then rank the quality of the work done by the miners within the subnet. The aggregated scores of the validators determine the quantity of TAO emitted to each miner. @@ -58,9 +59,9 @@ At the same time, validators are also incentivized to do their best work, becaus ### What exactly is the task of a subnet miner? -The task of miners is different in each subnet. For example, subnet 1 produces LLM inference, and the miner task is to respond to a text prompt with a completion. Subnet 2 serves machine translation, and subnet 21 serves storage. +The task of miners is different in each subnet. Some subnets provide AI services like specialized inference, training, or prediction. Other provide infrastructure as a service, including storage or compute. -Browse the subnets on [TAO.app](https://tao.app) +Browse tokenomic information about the subnets on [TAO.app](https://tao.app), and learn more about the projects and services they support on the [Learnbittensor.org subnet listings](https://learnbittensor.org/subnets). ### So where does the blockchain come in? @@ -68,7 +69,7 @@ The blockchain records all the key activity of the subnets in its ledger. It als ### Do subnets talk to each other? -A new abstract base class, called `SubnetsAPI` is released in Bittensor `6.8.0` and your application can use this to enable cross subnet communication. Normally, however, if you are not using the `SubnetsAPI`, then the subtensor blockchain does not mix data from one subnet with another subnet data and a subnet does not communicate with another subnet. +A new abstract base class, called `SubnetsAPI` is released in Bittensor `6.8.0` and your application can use this to enable cross subnet communication. Normally, however, if you are not using the `SubnetsAPI`, then the subtensor blockchain does not mix data from one subnet with another subnet data and a subnet does not communicate with another subnet. :::tip See also See [Bittensor Subnets API](https://github.com/opentensor/bittensor/blob/master/README.md#bittensor-subnets-api). @@ -86,7 +87,7 @@ In Bittensor, "mining", within subnets, has nothing to do with adding blocks to Yes indeed. In Bittensor, the work of validating the blockchain is performed by the Opentensor Foundation on a Proof-of-Authority model. -### What is the incentive to be a miner or a validator, or create a subnet? +### What is the incentive to be a miner or a validator, or create a subnet? Bittensor incentivizes participation through emission of TAO. Each day, 7200 TAO are emitted into the network (one TAO every 12 seconds). @@ -96,20 +97,20 @@ The emission of TAO within each subnet is as follows: - 41% to validators - 41% to the miners -See [Emissions](./emissions.md). +See [Emissions](../learn/emissions.md). ### I don't want to create a subnet, can I just be a miner or a validator? Yes! Most participants will not create their own subnets, there are lots to choose from. -See: +See: -- [Validating in Bittensor](./validators/index.md) -- [Mining in Bittensor](./miners/index.md). +- [Validating in Bittensor](../validators/index.md) +- [Mining in Bittensor](../miners/index.md). ### Is there a central place where I can see compute requirements for mining and validating for all subnets? -Unfortunately no. Subnets are not run or managed by Opentensor Foundation, and the landscape of subnets is constantly evolving. +Unfortunately no. Subnets are not run or managed by Opentensor Foundation, and the landscape of subnets is constantly evolving. Browse the subnets at [TAO.app](https://tao.app), or on [Discord](https://discord.com/channels/799672011265015819/830068283314929684). @@ -117,4 +118,4 @@ Browse the subnets at [TAO.app](https://tao.app), or on [Discord](https://discor You can keep trying forever, but your success depends on your performance. Mining and validating in a subnet is competitive. If a miner or validator is one of the three lowest in the subnet, it may be de-registered at the end of the tempo, and have to register again. -See [miner deregistration](./miners/index.md#miner-deregistration). +See [miner deregistration](../miners/index.md#miner-deregistration). diff --git a/docs/utilities.md b/docs/resources/utilities.md similarity index 61% rename from docs/utilities.md rename to docs/resources/utilities.md index 2a0ee7900d..aca4dd7f91 100644 --- a/docs/utilities.md +++ b/docs/resources/utilities.md @@ -4,10 +4,10 @@ title: "Utilities" # Utilities -This section describes the available utility scripts. +This section describes the available utility scripts. ## bt-next-adjust-block.js -**Location**: `https://github.com/opentensor/developer-docs/tree/main/src/scripts/` +**Location**: `https://github.com/latent-to/developer-docs/tree/main/src/scripts/` -**Description**: This `bt-next-adjustment-block.js` script queries a Bittensor subnet to find out how many blocks to go before the recycle register cost is recalculated. See the script for how to install and use it. \ No newline at end of file +**Description**: This `bt-next-adjustment-block.js` script queries a Bittensor subnet to find out how many blocks to go before the recycle register cost is recalculated. See the script for how to install and use it. diff --git a/docs/root-network.md b/docs/root-network.md deleted file mode 100644 index aed1e399a5..0000000000 --- a/docs/root-network.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: "Root Network" ---- - -# Root Network - -:::tip - -The Root Network no longer is in operation, so this doc is a kind of historical artifact. The Root Network was decommisioned with the [Dynamic TAO](./dynamic-tao/dtao-guide.md) upgrade in February 2025 -::: - - -The root network was a special kind of subnet. The root network has the `netuid` of 0. - -**Root network validators**: The largest 64 subnet validators, in terms of their stake, from amongst all the subnet validators in all the active subnets in the Bittensor network, were, by default, the validators in the root network. - -**Root network miners**: There were no network miners in the root network. Instead, the subnets take their place. The 64 root network validators set the weights for all these subnets. - -:::tip Root network weights determined emissions -Prior to Dynamic TAO, these root network weights for the subnets determined emissions for the subnets. -::: \ No newline at end of file diff --git a/docs/scripts/README.md b/docs/scripts/README.md new file mode 100644 index 0000000000..9767ebf5df --- /dev/null +++ b/docs/scripts/README.md @@ -0,0 +1,63 @@ +# Rate Limits Checker + +A simple script to query and display rate limit values from the Bittensor network. + +## What it does + +Connects to the Bittensor Finney network and queries: + +- **Global rate limits**: Transaction limits, delegate take limits, network limits, etc. +- **Subnet-specific limits**: Serving rates, adjustment intervals, immunity periods, etc. + +## Prerequisites + +- Node.js 18.0 or higher +- Dependencies installed (run `yarn install` if needed) + +## How to run + +```bash +yarn node docs/scripts/check-rate-limits.js +``` + +> **Note**: This project uses Yarn PnP, so you must run the script with `yarn node` instead of just `node`. + +## Expected output + +``` +Connecting to Bittensor network... +✓ Connected successfully! + +GLOBAL RATE LIMITS: +================== +TxRateLimit: 1 blocks (~0h) +TxDelegateTakeRateLimit: 216000 blocks (~720h) +TxChildkeyTakeRateLimit: 216000 blocks (~720h) +NetworkRateLimit: 28800 blocks (~96h) +OwnerHyperparamRateLimit: 2 tempos +WeightsVersionKeyRateLimit: 5 blocks (~0h) +AdminFreezeWindow: 10 blocks (~0h) + +SUBNET-SPECIFIC RATE LIMITS (Subnet 1): +======================================= +ServingRateLimit: 10 blocks (~0h) +AdjustmentInterval: 112 blocks (~0.4h) +ImmunityPeriod: 7200 blocks (~24h) +WeightsSetRateLimit: 100 blocks (~0.3h) +MaxRegistrationsPerBlock: 1 registrations +TargetRegistrationsPerInterval: 2 registrations + +✓ Complete +``` + +## Troubleshooting + +**Error: Cannot find module '@polkadot/api'** + +- Make sure you've run `yarn install` first +- Use `yarn node` instead of `node` to run the script + +**Connection timeout** + +- Check your internet connection +- The script connects to `wss://entrypoint-finney.opentensor.ai:443` diff --git a/docs/scripts/check-rate-limits.js b/docs/scripts/check-rate-limits.js new file mode 100644 index 0000000000..46f3db887e --- /dev/null +++ b/docs/scripts/check-rate-limits.js @@ -0,0 +1,218 @@ +/* +SIMPLE BITENSOR RATE LIMITS CHECKER +=================================== +Queries the specific rate limit state variables mentioned in the documentation. + +Usage: node simple-rate-limits.js +*/ + +const { ApiPromise, WsProvider } = require("@polkadot/api"); + +async function checkRateLimits() { + try { + console.log("Connecting to Bittensor network..."); + const wsProvider = new WsProvider( + "wss://entrypoint-finney.opentensor.ai:443" + ); + const api = await ApiPromise.create({ provider: wsProvider }); + + console.log("✓ Connected successfully!\n"); + + const blockTimeSeconds = 12; // Bittensor blocks are ~12 seconds + + // Global rate limits + console.log("GLOBAL RATE LIMITS:"); + console.log("=================="); + + try { + const txRateLimit = await api.query.subtensorModule.txRateLimit(); + console.log( + `TxRateLimit: ${txRateLimit.toNumber()} blocks (~${ + Math.round( + ((txRateLimit.toNumber() * blockTimeSeconds) / 3600) * 10 + ) / 10 + }h)` + ); + } catch (e) { + console.log("TxRateLimit: Unable to query"); + } + + try { + const txDelegateTakeRateLimit = + await api.query.subtensorModule.txDelegateTakeRateLimit(); + console.log( + `TxDelegateTakeRateLimit: ${txDelegateTakeRateLimit.toNumber()} blocks (~${ + Math.round( + ((txDelegateTakeRateLimit.toNumber() * blockTimeSeconds) / 3600) * + 10 + ) / 10 + }h)` + ); + } catch (e) { + console.log("TxDelegateTakeRateLimit: Unable to query"); + } + + try { + const txChildkeyTakeRateLimit = + await api.query.subtensorModule.txChildkeyTakeRateLimit(); + console.log( + `TxChildkeyTakeRateLimit: ${txChildkeyTakeRateLimit.toNumber()} blocks (~${ + Math.round( + ((txChildkeyTakeRateLimit.toNumber() * blockTimeSeconds) / 3600) * + 10 + ) / 10 + }h)` + ); + } catch (e) { + console.log("TxChildkeyTakeRateLimit: Unable to query"); + } + + try { + const networkRateLimit = + await api.query.subtensorModule.networkRateLimit(); + console.log( + `NetworkRateLimit: ${networkRateLimit.toNumber()} blocks (~${ + Math.round( + ((networkRateLimit.toNumber() * blockTimeSeconds) / 3600) * 10 + ) / 10 + }h)` + ); + } catch (e) { + console.log("NetworkRateLimit: Unable to query"); + } + + try { + const ownerHyperparamRateLimit = + await api.query.subtensorModule.ownerHyperparamRateLimit(); + console.log( + `OwnerHyperparamRateLimit: ${ownerHyperparamRateLimit.toNumber()} tempos` + ); + } catch (e) { + console.log("OwnerHyperparamRateLimit: Unable to query"); + } + + try { + const weightsVersionKeyRateLimit = + await api.query.subtensorModule.weightsVersionKeyRateLimit(); + console.log( + `WeightsVersionKeyRateLimit: ${weightsVersionKeyRateLimit.toNumber()} blocks (~${ + Math.round( + ((weightsVersionKeyRateLimit.toNumber() * blockTimeSeconds) / + 3600) * + 10 + ) / 10 + }h)` + ); + } catch (e) { + console.log("WeightsVersionKeyRateLimit: Unable to query"); + } + + try { + const adminFreezeWindow = + await api.query.subtensorModule.adminFreezeWindow(); + console.log( + `AdminFreezeWindow: ${adminFreezeWindow.toNumber()} blocks (~${ + Math.round( + ((adminFreezeWindow.toNumber() * blockTimeSeconds) / 3600) * 10 + ) / 10 + }h)` + ); + } catch (e) { + console.log("AdminFreezeWindow: Unable to query"); + } + + // Subnet-specific rate limits (check subnet 1 as example) + console.log("\nSUBNET-SPECIFIC RATE LIMITS (Subnet 1):"); + console.log("======================================="); + + try { + const servingRateLimit = await api.query.subtensorModule.servingRateLimit( + 1 + ); + console.log( + `ServingRateLimit: ${servingRateLimit.toNumber()} blocks (~${ + Math.round( + ((servingRateLimit.toNumber() * blockTimeSeconds) / 3600) * 10 + ) / 10 + }h)` + ); + } catch (e) { + console.log("ServingRateLimit: Unable to query"); + } + + try { + const adjustmentInterval = + await api.query.subtensorModule.adjustmentInterval(1); + console.log( + `AdjustmentInterval: ${adjustmentInterval.toNumber()} blocks (~${ + Math.round( + ((adjustmentInterval.toNumber() * blockTimeSeconds) / 3600) * 10 + ) / 10 + }h)` + ); + } catch (e) { + console.log("AdjustmentInterval: Unable to query"); + } + + try { + const immunityPeriod = await api.query.subtensorModule.immunityPeriod(1); + console.log( + `ImmunityPeriod: ${immunityPeriod.toNumber()} blocks (~${ + Math.round( + ((immunityPeriod.toNumber() * blockTimeSeconds) / 3600) * 10 + ) / 10 + }h)` + ); + } catch (e) { + console.log("ImmunityPeriod: Unable to query"); + } + + try { + const weightsSetRateLimit = + await api.query.subtensorModule.weightsSetRateLimit(1); + console.log( + `WeightsSetRateLimit: ${weightsSetRateLimit.toNumber()} blocks (~${ + Math.round( + ((weightsSetRateLimit.toNumber() * blockTimeSeconds) / 3600) * 10 + ) / 10 + }h)` + ); + } catch (e) { + console.log("WeightsSetRateLimit: Unable to query"); + } + + try { + const maxRegistrationsPerBlock = + await api.query.subtensorModule.maxRegistrationsPerBlock(1); + console.log( + `MaxRegistrationsPerBlock: ${maxRegistrationsPerBlock.toNumber()} registrations` + ); + } catch (e) { + console.log("MaxRegistrationsPerBlock: Unable to query"); + } + + try { + const targetRegistrationsPerInterval = + await api.query.subtensorModule.targetRegistrationsPerInterval(1); + console.log( + `TargetRegistrationsPerInterval: ${targetRegistrationsPerInterval.toNumber()} registrations` + ); + } catch (e) { + console.log("TargetRegistrationsPerInterval: Unable to query"); + } + + console.log("\n✓ Complete"); + + await api.disconnect(); + process.exit(0); + } catch (error) { + console.error("Error:", error.message); + process.exit(1); + } +} + +// Run the script +checkRateLimits().catch(console.error); + +// Suppress warning messages +console.warn = () => {}; diff --git a/docs/sdk/_sdk-version.mdx b/docs/sdk/_sdk-version.mdx new file mode 100644 index 0000000000..245e665172 --- /dev/null +++ b/docs/sdk/_sdk-version.mdx @@ -0,0 +1,14 @@ +/* +SDK Version Notice Partial +*/ + +import Admonition from '@theme/Admonition'; + +export const SdkVersion = () => ( + +

+ This documentation is built against Bittensor Python SDK v10. For documentation built against SDK 9.12, see SDK 9.12 Archive. +

+
+); + diff --git a/docs/bt-api-ref.md b/docs/sdk/bt-api-ref.md similarity index 80% rename from docs/bt-api-ref.md rename to docs/sdk/bt-api-ref.md index 44d5d6a755..67f0ec1d78 100644 --- a/docs/bt-api-ref.md +++ b/docs/sdk/bt-api-ref.md @@ -1,5 +1,5 @@ --- -title: "Bittensor SDK" +title: "Bittensor SDK Reference" --- import { HiAcademicCap } from "react-icons/hi2"; @@ -15,10 +15,13 @@ import { GiBrainStem } from "react-icons/gi"; import { CiWallet } from "react-icons/ci"; import { SiTrpc } from "react-icons/si"; +# Bittensor SDK Reference -# Bittensor SDK +This section presents the Bittensor SDK reference documentation for Bittensor version 10.0. Follow the below links to specific Python modules or [click here for SDK reference homepage](pathname:///python-api/html/autoapi/bittensor/index.html). + + +Here is an [archived version of the docs built against Bittensor SDK version 9.12](https://archive-sdk-9-12.developer-docs-6uq.pages.dev/sdk/bt-api-ref). -This section presents the Bittensor SDK reference documentation. Follow the below links to specific Python modules or [click here for SDK reference homepage](pathname:///python-api/html/autoapi/bittensor/index.html). + +```python +from scalecodec.types import GenericCall + +# GenericCall contains: +# - call_module: pallet name (e.g., "SubtensorModule", "Proxy") +# - call_function: pallet function name (e.g., "add_stake", "proxy") +# - call_params: dictionary of function parameters +# - data: SCALE-encoded call data +``` + +### Why is GenericCall Needed? + +`GenericCall` enables you to: +1. Create calls without immediately submitting them +2. Pass calls as arguments to other functions (e.g., Proxy, Crowdloan, MEV Shield) +3. Estimate fees before submission using the `get_extrinsic_fee()` method +4. Compose complex transactions (nested calls) + +### Basic Method: substrate.compose_call + +In Substrate, calls are created using `substrate.compose_call()`: + +```python +# Basic way to create a call (low-level) +call = substrate.compose_call( + call_module="SubtensorModule", + call_function="add_stake", + call_params={ + "netuid": 1, + "hotkey": "5DE...", + "amount_staked": 1000000000 + } +) +``` + +This method works, but requires manual parameter preparation. While validation exists, error messages are often unclear to users when something goes wrong. + +### Enhanced Method: subtensor.compose_call + +The SDK provides `subtensor.compose_call()` with enhanced functionality: + +1. Parameter validation: checks parameters against blockchain metadata before creating the call +2. Automatic filtering: removes extra parameters +3. Clear error messages: explicit messages about missing or invalid parameters +4. Block determination: automatically selects the appropriate block for metadata + +```python +import bittensor as bt + +subtensor = bt.Subtensor(network="finney") + +# Creating a call with automatic validation +call = subtensor.compose_call( + call_module="SubtensorModule", + call_function="add_stake", + call_params={ + "netuid": 1, + "hotkey": "5DE...", + "amount_staked": 1000000000 # in RAO + } +) + +# Parameters are automatically validated against blockchain metadata +# If a parameter is invalid or missing, an exception will be raised +``` + +## Examples of Using subtensor.compose_call + +```python +import bittensor as bt + +subtensor = bt.Subtensor(network="finney") + +# Example 1: Creating a call to add stake +stake_call = subtensor.compose_call( + call_module="SubtensorModule", + call_function="add_stake", + call_params={ + "netuid": 1, + "hotkey": "5DE...", + "amount_staked": 1000000000 + } +) + +# Example 2: Creating a call to set weights +weights_call = subtensor.compose_call( + call_module="SubtensorModule", + call_function="set_weights", + call_params={ + "netuid": 1, + "uids": [1, 2, 3], + "weights": [100, 200, 300], + "version_key": 0 + } +) + +# Example 3: Creating a call for Proxy pallet +proxy_call = subtensor.compose_call( + call_module="Proxy", + call_function="add_proxy", + call_params={ + "delegate": "5DE...", + "proxy_type": "Any", + "delay": 0 + } +) +``` + +Validation happens automatically: if parameters don't match the function signature, an exception will be raised with a clear description of the problem. + +## CallBuilder: Enhanced Usability + +To simplify working with calls, the SDK implements a `pallets` package with `CallBuilder` subclasses for Subtensor pallets. + +### Base Class CallBuilder + +`CallBuilder` is a base class for creating `GenericCall` objects for all Subtensor pallets. It provides: +- `create_composed_call()`: creates GenericCall with automatic module and function detection +- Dynamic calls: allows calling functions not explicitly defined in the class + +### Available Pallets + +The SDK provides `CallBuilder` subclasses for each pallet: + +```python +from bittensor.core.extrinsics.pallets import ( + SubtensorModule, # Core Subtensor functions + Proxy, # Proxy pallet + Crowdloan, # Crowdloan pallet + MevShield, # MEV Shield pallet + Sudo, # Sudo pallet + Balances, # Balances pallet + Swap, # Swap pallet + Commitments, # Commitments pallet +) +``` + +### Using CallBuilder + +#### Synchronous Usage + +```python +import bittensor as bt + +subtensor = bt.Subtensor(network="finney") + +# Create GenericCall for Proxy.add_proxy function +from bittensor.core.extrinsics.pallets import Proxy + +call = Proxy(subtensor).add_proxy( + delegate="5DE...", + proxy_type="Any", + delay=0 +) + +# Now call can be used in Subtensor methods +``` + +#### Asynchronous Usage + +```python +import bittensor as bt + +async_subtensor = bt.AsyncSubtensor(network="finney") + +# Create GenericCall (need await for async) +from bittensor.core.extrinsics.pallets import Proxy + +call = await Proxy(async_subtensor).add_proxy( + delegate="5DE...", + proxy_type="Any", + delay=0 +) +``` + +### Dynamic Call Creation + +`CallBuilder` supports dynamic calls to functions not explicitly defined in the class: + +```python +import bittensor as bt + +subtensor = bt.Subtensor(network="finney") + +# Even if the method is not explicitly defined in SubtensorModule class, +# CallBuilder will automatically create GenericCall for this function +from bittensor.core.extrinsics.pallets import SubtensorModule + +call = SubtensorModule(subtensor).some_function_name( + param1="value1", + param2=123 +) + +# This works thanks to the __getattr__ method in CallBuilder +# When correct parameters are provided, the call will be created successfully +``` + +This works thanks to the `__getattr__` method in `CallBuilder`: when accessing a non-existent method, a dynamic call is created that validates parameters and creates a `GenericCall`. + +## Practical Usage Examples + +### Proxy — Executing Calls Through Proxy + +Proxy functionality frequently requires passing `call` as an argument. Here are examples: + +#### Example 1: Adding Stake Through Proxy + +```python +import bittensor as bt + +subtensor = bt.Subtensor(network="finney") +wallet = bt.Wallet(name="alice") + +# Create a call to add stake +from bittensor.core.extrinsics.pallets import SubtensorModule + +stake_call = SubtensorModule(subtensor).add_stake( + netuid=1, + hotkey="5DE...", + amount_staked=1000000000 # in RAO +) + +# Execute the call through proxy +response = subtensor.proxy( + wallet=wallet, + real_account_ss58="5DE...", # Real account on whose behalf the call is executed + force_proxy_type="Any", + call=stake_call +) +``` + +#### Example 2: Removing Stake Through Proxy + +```python +import bittensor as bt + +subtensor = bt.Subtensor(network="finney") +wallet = bt.Wallet(name="alice") + +# Create a call to remove stake +from bittensor.core.extrinsics.pallets import SubtensorModule + +unstake_call = SubtensorModule(subtensor).remove_stake( + netuid=1, + hotkey="5DE...", + amount_unstaked=500000000 # in RAO +) + +# Execute the call through proxy +response = subtensor.proxy( + wallet=wallet, + real_account_ss58="5DE...", + force_proxy_type="Staking", # Use Staking proxy type + call=unstake_call +) +``` + +#### Example 3: Transferring Stake Through Proxy + +```python +import bittensor as bt + +subtensor = bt.Subtensor(network="finney") +wallet = bt.Wallet(name="alice") + +# Create a call to transfer stake between subnets +from bittensor.core.extrinsics.pallets import SubtensorModule + +transfer_call = SubtensorModule(subtensor).transfer_stake( + destination_coldkey="5DE...", + hotkey="5DE...", + origin_netuid=1, + destination_netuid=2, + alpha_amount=1000000000 # in RAO +) + +# Execute the call through proxy +response = subtensor.proxy( + wallet=wallet, + real_account_ss58="5DE...", + force_proxy_type="Any", + call=transfer_call +) +``` + +#### Example 4: Moving Stake Through Proxy + +```python +import bittensor as bt + +subtensor = bt.Subtensor(network="finney") +wallet = bt.Wallet(name="alice") + +# Create a call to move stake +from bittensor.core.extrinsics.pallets import SubtensorModule + +move_call = SubtensorModule(subtensor).move_stake( + origin_netuid=1, + origin_hotkey_ss58="5DE...", + destination_netuid=2, + destination_hotkey_ss58="5DE...", + alpha_amount=1000000000 # in RAO +) + +# Execute the call through proxy +response = subtensor.proxy( + wallet=wallet, + real_account_ss58="5DE...", + force_proxy_type="Any", + call=move_call +) +``` + +#### Example 5: Setting Mechanism Weights Through Proxy + +```python +import bittensor as bt + +subtensor = bt.Subtensor(network="finney") +wallet = bt.Wallet(name="alice") + +# Create a call to set mechanism weights +from bittensor.core.extrinsics.pallets import SubtensorModule + +weights_call = SubtensorModule(subtensor).set_mechanism_weights( + netuid=1, + mecid=0, + dests=[1, 2, 3], + weights=[100, 200, 300], + version_key=0 +) + +# Execute the call through proxy +response = subtensor.proxy( + wallet=wallet, + real_account_ss58="5DE...", + force_proxy_type="Any", + call=weights_call +) +``` + +#### Example 6: Registering Network Through Proxy + +```python +import bittensor as bt + +subtensor = bt.Subtensor(network="finney") +wallet = bt.Wallet(name="alice") + +# Create a call to register network +from bittensor.core.extrinsics.pallets import SubtensorModule + +register_call = SubtensorModule(subtensor).register_network( + hotkey="5DE..." +) + +# Execute the call through proxy +response = subtensor.proxy( + wallet=wallet, + real_account_ss58="5DE...", + force_proxy_type="Governance", # Use Governance proxy type + call=register_call +) +``` + +#### Example 7: Setting Subnet Identity Through Proxy + +```python +import bittensor as bt + +subtensor = bt.Subtensor(network="finney") +wallet = bt.Wallet(name="alice") + +# Create a call to set subnet identity +from bittensor.core.extrinsics.pallets import SubtensorModule + +identity_call = SubtensorModule(subtensor).set_subnet_identity( + netuid=1, + subnet_name="My Subnet", + github_repo="https://github.com/myorg/mysubnet", + subnet_contact="contact@example.com", + subnet_url="https://mysubnet.com", + discord="https://discord.gg/mysubnet", + description="Subnet description", + logo_url="https://mysubnet.com/logo.png", + additional="Additional information" +) + +# Execute the call through proxy +response = subtensor.proxy( + wallet=wallet, + real_account_ss58="5DE...", + force_proxy_type="Any", + call=identity_call +) +``` + +#### Example 8: Executing Announced Proxy Call + +```python +import bittensor as bt + +subtensor = bt.Subtensor(network="finney") +wallet = bt.Wallet(name="alice") + +# Create a call that was previously announced +from bittensor.core.extrinsics.pallets import SubtensorModule + +announced_call = SubtensorModule(subtensor).add_stake( + netuid=1, + hotkey="5DE...", + amount_staked=1000000000 +) + +# Execute the announced call through proxy +response = subtensor.proxy_announced( + wallet=wallet, + delegate_ss58="5DE...", # Proxy account that made the announcement + real_account_ss58="5DE...", # Real account + force_proxy_type="Any", + call=announced_call # Call must match the announced call_hash +) +``` + +### Crowdloan — Creating Crowdloan with Call + +```python +import bittensor as bt + +subtensor = bt.Subtensor(network="finney") +wallet = bt.Wallet(name="alice") + +# Create a call to execute upon successful crowdloan completion +from bittensor.core.extrinsics.pallets import SubtensorModule + +runtime_call = SubtensorModule(subtensor).register_network( + hotkey="5DE..." +) + +# Create crowdloan with this call +response = subtensor.create_crowdloan( + wallet=wallet, + deposit=bt.Balance.from_tao(100.0), + min_contribution=bt.Balance.from_tao(10.0), + cap=bt.Balance.from_tao(10000.0), + end=1000000, # block number when campaign ends + call=runtime_call, # Pass GenericCall +) +``` + +### MEV Shield — Submitting Encrypted Call + +```python +import bittensor as bt + +subtensor = bt.Subtensor(network="finney") +wallet = bt.Wallet(name="alice") + +# Create a call to encrypt +from bittensor.core.extrinsics.pallets import SubtensorModule + +call = SubtensorModule(subtensor).set_mechanism_weights( + netuid=1, + mecid=0, + dests=[1, 2, 3], + weights=[100, 200, 300], + version_key=0 +) + +# Submit encrypted call +response = subtensor.mev_submit_encrypted( + wallet=wallet, + call=call, # Pass GenericCall + signer_keypair=wallet.coldkey +) +``` + +### Estimating Fees Before Submission + +```python +import bittensor as bt + +subtensor = bt.Subtensor(network="finney") +wallet = bt.Wallet(name="alice") + +# Create a call +from bittensor.core.extrinsics.pallets import SubtensorModule + +call = SubtensorModule(subtensor).add_stake( + netuid=1, + hotkey="5DE...", + amount_staked=1000000000 +) + +# Estimate fee WITHOUT submitting transaction using get_extrinsic_fee() method +fee = subtensor.get_extrinsic_fee( + call=call, + keypair=wallet.coldkeypub +) + +print(f"Fee will be: {fee}") + +# If fee is acceptable, use Subtensor class method for submission +if fee.tao < 1.0: # Check that fee is less than 1 TAO + response = subtensor.add_stake( + wallet=wallet, + netuid=1, + hotkey_ss58="5DE...", + amount=bt.Balance.from_rao(1000000000) + ) +``` + +### Direct Extrinsic Usage + +You can call extrinsics directly from the `bittensor.core.extrinsics` package, but it's recommended to use `Subtensor` class methods: + +```python +import bittensor as bt +from bittensor.core.extrinsics.staking import add_stake_extrinsic +from bittensor.core.extrinsics.proxy import proxy_extrinsic + +subtensor = bt.Subtensor(network="finney") +wallet = bt.Wallet(name="alice") + +# Example 1: Direct extrinsic call to add stake +response = add_stake_extrinsic( + subtensor=subtensor, + wallet=wallet, + netuid=1, + hotkey_ss58="5DE...", + amount=bt.Balance.from_rao(1000000000) +) + +# Recommended way - use Subtensor class method +response = subtensor.add_stake( + wallet=wallet, + netuid=1, + hotkey_ss58="5DE...", + amount=bt.Balance.from_rao(1000000000) +) + +# Example 2: Direct extrinsic call for proxy +from bittensor.core.extrinsics.pallets import SubtensorModule + +call = SubtensorModule(subtensor).add_stake( + netuid=1, + hotkey="5DE...", + amount_staked=1000000000 +) + +response = proxy_extrinsic( + subtensor=subtensor, + wallet=wallet, + real_account_ss58="5DE...", + force_proxy_type="Any", + call=call +) + +# Recommended way +response = subtensor.proxy( + wallet=wallet, + real_account_ss58="5DE...", + force_proxy_type="Any", + call=call +) +``` + +`Subtensor` class methods provide a consistent interface and simplify working with the SDK. + +## Important Points + +### 1. SCALE Encoding + +`GenericCall` automatically encodes parameters in SCALE format. No manual encoding is needed. + +### 2. Parameter Validation + +When creating `GenericCall` through `CallBuilder` or `subtensor.compose_call()`, parameters are validated against blockchain metadata. + +### 3. Synchronous and Asynchronous Operations + +- With `Subtensor`: methods return `GenericCall` directly +- With `AsyncSubtensor`: methods return `Awaitable[GenericCall]`, requiring `await` + +### 4. Call Composition + +`GenericCall` objects can be nested for complex transactions: + +```python +# Inner call +inner_call = SubtensorModule(subtensor).add_stake(...) + +# Wrap in Proxy +proxy_call = Proxy(subtensor).proxy( + real="5DE...", + force_proxy_type="Any", + call=inner_call +) + +# Or submit with MEV protection to prevent front-running +response = subtensor.mev_submit_encrypted( + wallet=wallet, + call=inner_call +) +``` + +## Where is GenericCall Used? + +`GenericCall` is used in the following places in the SDK: + +1. Proxy extrinsics — executing calls through proxy +2. Crowdloan extrinsics — creating crowdloans with runtime calls +3. MEV Shield — submitting encrypted calls +4. `get_extrinsic_fee()` — fee estimation +5. `Subtensor` class methods — methods that accept `call` as an argument +6. Sudo extrinsics — executing privileged calls + +## Conclusion + +`GenericCall` and `CallBuilder` simplify working with transactions in Bittensor: + +- Create calls without immediately submitting them +- Pass calls as arguments to other functions +- Estimate fees before submission using `get_extrinsic_fee()` +- Compose complex transactions + +Use pallet classes (`Proxy`, `Crowdloan`, `SubtensorModule`, etc.) to create `GenericCall` objects, then pass them to `Subtensor` class methods or use them for fee estimation via `get_extrinsic_fee()`. \ No newline at end of file diff --git a/docs/sdk/env-vars.md b/docs/sdk/env-vars.md index cf187630b7..2baf6f672e 100644 --- a/docs/sdk/env-vars.md +++ b/docs/sdk/env-vars.md @@ -30,15 +30,15 @@ The SDK uses `False ` if the variable is not set. ## Subtensor -### `BT_CHAIN_ENDPOINT` +### `BT_SUBTENSOR_CHAIN_ENDPOINT` The Subtensor node (RPC endpoint) URL to connect to Bittensor (overrides the default chain address). The SDK uses `bittensor.core.settings.DEFAULT_ENDPOINT ` if the variable is not set. -See [Bittensor Networks](../bittensor-networks) +See [Bittensor Networks](../concepts/bittensor-networks) -### `BT_NETWORK` +### `BT_SUBTENSOR_NETWORK` The default Subtensor network name. Allows selecting the network (e.g., `finney` or `testnet`) during Subtensor initialization without specifying an explicit endpoint.
The SDK uses `bittensor.core.settings.DEFAULT_NETWORK ` if the variable is not set. @@ -94,6 +94,11 @@ The SDK uses `False` if the variable is not set. Specifies the directory path for storing log files. The SDK uses `bittensor.core.settings.MINERS_DIR` if the variable is not set. +### `BT_LOGGING_ENABLE_THIRD_PARTY_LOGGERS` + +When set to `true` or `1`, enables third-party loggers.
+The SDK logger always acts as the primary logger. Whether enabled or not, messages from third-party loggers are still filtered according to the SDK’s configured logging level. + ## PriorityThreadPoolExecutor ### `BT_PRIORITY_MAX_WORKERS` @@ -114,12 +119,26 @@ Wallet name to use unless specified. The SDK uses `default` if the variable is not set, ### `BT_WALLET_HOTKEY` + Hotkey name to use unless specified. The SDK uses `default` if the variable is not set, ### `BT_WALLET_PATH` + The SDK uses `bittensor.core.settings.WALLETS_DIR` if the variable is not set. +## MEV Protection + +### `BT_MEV_PROTECTION` + +When set to `1`, `true`, `yes`, or `on` (case-insensitive), enables MEV Shield protection by default for all supported extrinsics. When enabled, transactions are automatically encrypted and submitted through the MEV Shield pallet to protect against front-running and MEV attacks. + +This sets the `DEFAULT_MEV_PROTECTION` constant used throughout the SDK, so you don't need to pass `mev_protection=True` to every extrinsic call. + +The SDK uses `False` if the variable is not set. + +See [MEV Shield Protection](./mev-protection.md) for details on using MEV protection. + ## Testing ### `FAST_BLOCKS` @@ -133,6 +152,14 @@ The SDK uses `False` if the variable is not set. ### `LOCALNET_SH_PATH` -Full path to the `scripts/localnet.sh` file in the cloned `Subtensor` repository used to launch the local chain (including for e2e tests if the Docker image is not used).
+Full path to the `scripts/localnet.sh` file in the cloned `Subtensor` repository used to launch the local chain (including for e2e tests if the Docker image is not used). + SDK skips running e2e tests if the variable is not set (used only together with the `USE_DOCKER` variable). +### `SKIP_PULL` + +Controls whether the Docker image used for end-to-end tests should be pulled from a remote container registry (e.g. GitHub Container Registry) before the test run. +This is useful in CI pipelines where a custom image is built and should not be overwritten by a remote version. + +- When `SKIP_PULL=0` (default), the test framework runs docker pull to ensure the latest version of the image is used. +- When `SKIP_PULL=1`, the pull step is skipped. The tests will only run if the required Docker image is already available locally. diff --git a/docs/sdk/index.md b/docs/sdk/index.md new file mode 100644 index 0000000000..2fb858c331 --- /dev/null +++ b/docs/sdk/index.md @@ -0,0 +1,105 @@ +--- +title: "SDK Tutorials" +--- + +# SDK Tutorials + +The Bittensor Python SDK provides a programmable interface to the Bittensor blockchain. This page guides you through practical SDK tutorials organized as a learning path. + +## Prerequisites + +- [Installation](../getting-started/installation.md): Install the Bittensor SDK +- [Environment Variables](./env-vars.md): Configure your SDK environment + +## Working with Wallets + +Learn how to create wallets, manage keys, and handle credentials programmatically. + +- [Install Wallet SDK](../getting-started/install-wallet-sdk.md): Set up wallet functionality +- [Working with Keys](../keys/working-with-keys.md): Create and manage keys with the SDK +- [Handle Seed Phrase](../keys/handle-seed-phrase.md): Save and restore wallets securely + +## Checking Balances and Account Information + +Query your account balances, stake positions, and network state. + +- [Managing Stake (SDK)](../staking-and-delegation/managing-stake-sdk.md): Check balances and stake positions +- [Metagraph](../subnets/metagraph.md): Query subnet state and neuron information + +## Staking Operations + +Manage your TAO stake across validators and subnets. + +- [Managing Stake (SDK)](../staking-and-delegation/managing-stake-sdk.md): Complete staking guide covering: + - How to stake with the SDK + - How to unstake with the SDK + - How to move stake between validators + - How to transfer stake +- [Managing Root Claims](../staking-and-delegation/root-claims/managing-root-claims.md): Claim root network positions +- [Managing Liquidity Positions](../liquidity-positions/managing-liquidity-positions.md): Add and remove liquidity on Uniswap + +## Proxy Operations + +Use proxies to delegate account permissions securely while keeping your coldkey offline. + +- [Create and Manage Proxies](../keys/proxies/working-with-proxies.md): Set up standard proxy relationships +- [Pure Proxies](../keys/proxies/pure-proxies.md): Create and use keyless pure proxy accounts +- [Staking with a Proxy](../keys/proxies/staking-with-proxy.md): Perform staking operations through a proxy + +**By proxy type:** + +- **Proxy staking**: See [Staking with a Proxy](../keys/proxies/staking-with-proxy.md) +- **Other proxy operations**: Execute any permitted call through a proxy (see [Working with Proxies](../keys/proxies/working-with-proxies.md)) + +## Advanced: Working with Blockchain Calls + +Compose and execute complex blockchain transactions using `GenericCall` and pallet-specific builders. + +- [Working with Blockchain Calls](./call.md): Create, compose, and execute calls with `GenericCall` and `CallBuilder` - essential for proxies, crowdloans, MEV protection, and fee estimation + +## Subnet Operations + +Create, manage, and interact with subnets. + +- [Working with Subnets](../subnets/working-with-subnets.md): Query subnet data programmatically +- [Metagraph](../subnets/metagraph.md): Access subnet state and neuron information +- [Create a Subnet](../subnets/create-a-subnet.md): Launch your own subnet (includes registration cost info) +- [Managing Mechanisms (SDK)](../subnets/managing-mechanisms-with-sdk.md): Configure subnet parameters +- [Crowdloans Tutorial](../subnets/crowdloans/crowdloans-tutorial.md): Participate in subnet crowdloans +- [Consensus-Based Weights](../concepts/consensus-based-weights.md): Submit weighted consensus + +## Local Development and Testing + +Test your SDK code on a local network. + +- [Deploy Local Network](../local-build/deploy.md): Run Bittensor locally +- [Provision Wallets](../local-build/provision-wallets.md): Set up test wallets +- [Create Local Subnet](../local-build/create-subnet.md): Create subnets locally +- [Mine and Validate Locally](../local-build/mine-validate.md): Test mining/validation + +## Subnet Design + +End-to-end tutorials for building incentive mechanisms. + +- [Basic Subnet Tutorials](../tutorials/basic-subnet-tutorials.md): Step-by-step subnet examples +- [OCR Subnet Tutorial](../tutorials/ocr-subnet-tutorial.md): Build an OCR subnet +- [Walkthrough: Prompting](../subnets/walkthrough-prompting.md): Create a prompting subnet + +## Managing Threads and Connections + +Perform operations asynchronously for better performance. + +- [Working with Concurrency](../subnets/asyncio.md): Use async/await patterns with the SDK +- [Managing Subtensor Connections](./managing-subtensor-connections.md): Handle async connections + +## MEV Protection + +Protect your transactions from front-running and MEV attacks using the MEV Shield. + +- [MEV Shield Protection](./mev-protection.md): Encrypt transactions to prevent MEV attacks on staking, registration, and other operations + +## API Reference + +- [Bittensor API Reference](./bt-api-ref.md): Complete API documentation +- [Subtensor API](./subtensor-api.md): Subtensor client reference +- [Migration Guide](./migration-guide.md): Upgrade from older SDK versions diff --git a/docs/sdk/managing-subtensor-connections.md b/docs/sdk/managing-subtensor-connections.md index acdd842a80..6b2bb925a5 100644 --- a/docs/sdk/managing-subtensor-connections.md +++ b/docs/sdk/managing-subtensor-connections.md @@ -2,12 +2,13 @@ title: "Managing Subtensor Connections" --- -# Managing Subtensor Connections +import { SdkVersion } from "./_sdk-version.mdx"; -Every time the Bittensor Python SDK's `Subtensor` or `AsyncSubtensor` class is instantiated, it creates a new websocket connection to Subtensor, Bittensor's Blockchain. Your code should ensure that these websocket connections are handled efficiently and closed when no longer in use by your code. +# Managing Subtensor Connections +Every time the Bittensor Python SDK's `Subtensor` or `AsyncSubtensor` class is instantiated, it creates a new websocket connection to Subtensor, Bittensor's Blockchain. Your code should ensure that these websocket connections are handled efficiently and closed when no longer in use by your code. -If not explicitly closed, connections *should* be terminated by Python's garbage collector, but threading can make this unreliable. (see [this comment](https://github.com/python-websockets/websockets/pull/1601#issuecomment-2705871026).) +If not explicitly closed, connections _should_ be terminated by Python's garbage collector, but threading can make this unreliable. (see [this comment](https://github.com/python-websockets/websockets/pull/1601#issuecomment-2705871026).) Therefore, the best solution is to always use one of the following techniques to close your instance's connection: @@ -20,10 +21,11 @@ You don't need to both a `with`-statement context manager and `.close()`, just o ## What not to do + ```python import bittensor as bt -sub = bt.subtensor("finney") +sub = bt.Subtensor("finney") # calls to subtensor # no close @@ -31,19 +33,20 @@ sub = bt.subtensor("finney") # the connection is open until/unless garbage collected ``` - ## With `close()` ### Sync + ```python import bittensor as bt -sub = bt.subtensor("finney") +sub = bt.Subtensor("finney") # subtensor calls sub.close() # instance and connection are terminated. ``` ### Async + ```python import bittensor as bt sub = bt.AsyncSubtensor() @@ -53,19 +56,19 @@ await sub.close() # instance and connection are terminated. ``` - - ## With `with` ### Sync + ```python import bittensor as bt -with bt.subtensor("finney") as sub: +with bt.Subtensor("finney") as sub: # all calls to subtensor instance inside this block # instance and connection are terminated at the end of the context scope ``` + ### Async ```python @@ -75,7 +78,9 @@ async with bt.AsyncSubtensor() as sub: # instance and connection are terminated at the end of the context scope ``` + or + ```python import bittensor as bt sub = bt.AsyncSubtensor() @@ -83,5 +88,4 @@ async with sub: # calls to subtensor # instance and connection are terminated at the end of the context scope -``` - +``` diff --git a/docs/sdk/mev-protection.md b/docs/sdk/mev-protection.md new file mode 100644 index 0000000000..25e453752d --- /dev/null +++ b/docs/sdk/mev-protection.md @@ -0,0 +1,217 @@ +--- +title: "Using MEV Shield with the Bittensor SDK" +--- + +import { SdkVersion } from "./\_sdk-version.mdx"; + +# MEV Shield + +The MEV Shield feature allows users to encrypt transactions to protect them from front running and other maximal extractable value (MEV) attacks that depend on attackers knowing the details of transactions when they enter the transaction pool. + +This page gives in-depth coverage of using MEV shield with the Bittensor Python SDK. +For more overall context on MEV Shield, see: [MEV Shield: Encrypted Mempool Protection](/concepts/mev-shield/). + + +MEV Shield uses a simple encrypt-and-submit approach: + +1. Create and sign the extrinsic (the "inner call") you want to protect. +2. Encrypt the signed extrinsic using the current MEV Shield public key. +3. Submit the encrypted payload to the chain. +4. The the inner call is decrypted and executed after the transaction is included in a block, preventing front-running since the transaction contents are hidden while in the mempool. + +## SDK Support + +The SDK supports MEV Shield in two primary ways: + +1. MEV protection parameter - Add `mev_protection=True` to any supported extrinsic-calling function (recommended) +2. Direct MEV Shield submission - Use `mev_submit_encrypted` for full control over encrypted transaction submission + +:::warning MEV shield with hotkey-signed extrinsics +MEV shield should not be used for transactions that are signed by a hotkey. Attempting to use MEV shield with extrinsics signed by a hotkey will fail. + +Note that while it is technically possible to transfer TAO to a hotkey, which would, technically, allow you to use MEV protection for HK operations, this is neither intended nor advisable. + +**Because hotkeys are not intended to hold TAO, you are in *untested waters* if you do so, and there may be unintended consequences that could result in asset loss.** +::: + + +### Using Extrinsic-Calling Functions + +In `Subtensor` and `AsyncSubtensor`, all methods that call extrinsics now accept the following keyword arguments: + +- `mev_protection: bool = DEFAULT_MEV_PROTECTION` as a keyword-only argument +- `wait_for_revealed_execution: bool = True` as a keyword-only argument + + +All extrinsic functions now support MEV protection: + + - Staking: `add_stake_extrinsic`, `add_stake_multiple_extrinsic`, `set_auto_stake_extrinsic` + - Unstaking: `unstake_extrinsic`, `unstake_all_extrinsic`, `unstake_multiple_extrinsic` + - Move Stake: `move_stake_extrinsic`, `transfer_stake_extrinsic`, `swap_stake_extrinsic` + - Proxy: All 11 proxy-related extrinsics (add, remove, create_pure, kill_pure, proxy, announce, etc.) + - Crowdloan: All 9 crowdloan extrinsics (contribute, create, dissolve, finalize, refund, update_cap, update_end, update_min_contribution, withdraw) + - Registration: `burned_register_extrinsic`, `register_extrinsic`, `register_subnet_extrinsic`, `set_subnet_identity_extrinsic` + - Root: `root_register_extrinsic`, `set_root_claim_type_extrinsic`, `claim_root_extrinsic` + - Serving: `serve_extrinsic`, `serve_axon_extrinsic`, `publish_metadata_extrinsic` + - Weights: `set_weights_extrinsic`, `commit_weights_extrinsic`, `reveal_weights_extrinsic`, `commit_timelocked_weights_extrinsic` + - Take: `set_take_extrinsic` + - Children: `set_children_extrinsic`, `root_set_pending_childkey_cooldown_extrinsic` + - Liquidity: `add_liquidity_extrinsic`, `modify_liquidity_extrinsic`, `remove_liquidity_extrinsic`, `toggle_user_liquidity_extrinsic` + - Transfer: `transfer_extrinsic` + - Start Call: `start_call_extrinsic` + + +### Enabling MEV Protection by Default + +You can enable MEV protection globally by setting the `BT_MEV_PROTECTION` environment variable: + +```bash +export BT_MEV_PROTECTION=1 +``` + +When set, all supported extrinsics will use MEV protection automatically without needing to pass `mev_protection=True` to each call. Accepted values are `1`, `true`, `yes`, or `on` (case-insensitive). + +See [Environment Variables](./env-vars.md#bt_mev_protection) for more details. + +### Using Core MEV Shield Methods + +These SDK methods encapsulate the core MEV shield functionality: + +- `submit_encrypted_extrinsic` (sync & async): Core extrinsic function that encrypts and submits transactions through the MEV Shield pallet +- `mev_submit_encrypted` in `Subtensor` and `AsyncSubtensor` offer a wrapper method for submitting encrypted transactions +- Query methods for MEV Shield state: + - `get_mev_shield_current_key`: Retrieves the current encryption key + - `get_mev_shield_next_key`: Retrieves the next encryption key + - `get_mev_shield_submission`: Retrieves a specific encrypted submission + - `get_mev_shield_submissions`: Retrieves all encrypted submissions for an account + +:::info +The `ExtrinsicResponse` object includes a `mev_extrinsic_receipt` field to store the receipt of the revealed (decrypted and executed) MEV Shield extrinsic. +::: + +## Usage + +### Option 1: MEV Protection via Extrinsic Parameter (Recommended) + +All methods that call extrinsics support a `mev_protection` parameter. When set to `True`, the extrinsic is automatically encrypted and submitted through the MEV Shield pallet. This is the simplest way to use MEV protection—the SDK handles all the details including nonce management. + +The default value is `False` unless you've set the `BT_MEV_PROTECTION` environment variable (see above). + +When `mev_protection=True`: + +- The transaction is encrypted using ML-KEM-768 + XChaCha20Poly1305 +- The transaction remains encrypted in the mempool until validators decrypt and execute it +- The `ExtrinsicResponse` will contain `mev_extrinsic_receipt` with the revealed execution details (if `wait_for_revealed_execution=True`, which is the default for extrinsics using MEV protection) + +#### Example: Staking with MEV Protection + + + +```python +from bittensor import Subtensor, Wallet +from bittensor.utils.balance import Balance + +# Initialize subtensor and wallet +subtensor = Subtensor() +wallet = Wallet() + +# Add stake with MEV protection enabled +response = subtensor.add_stake( + wallet=wallet, + netuid=1, + hotkey_ss58='5C86aJ2uQawR6P6veaJQXNK9HaWh6NMbUhTiLs65kq4ZW3NH', + amount=Balance.from_tao(1), + mev_protection=True, # Enable MEV Shield protection + wait_for_inclusion=True, + wait_for_finalization=True +) + +print(response) +``` + +```console +ExtrinsicResponse: + success: True + message: Success + extrinsic_function: submit_encrypted_extrinsic + extrinsic: {'account_id': '0x105bfdbbaa8c1a08251f2672b753eda64debeb3d2ff2bc6cd685a7df8e405164', 'signature': {'Sr25519': '0x627ca300a0b93e963d86fac453eea81e503856deb119f010786ff1ab6383c21f3fe2bddcfd976e193d6ce88562250dba6535a132a44813baac114de2e9deb188'}, 'call_function': 'submit_encrypted', 'call_module': 'MevShield', 'call_args': {'commitment': '0xd706f59b3341689ffb110aee61d7ecdecb33bb5aa42ed481f99c4279297eb8ba', 'ciphertext': b'@\x04\xef\xe8\xfa\xf3\n\x1b\x13\xcd%*\x9co\xc5\x0c\x906L\x1f\xff\xa8\xcf4\xc4$\xa2kJ|x\x84\xe1\xab^W\x81)\x8d\x97/\xe57AQW\xad\x17l\x18]\x0e[\xe6H\'<7\xe1TzG\x1d\xef\xb2\xcc5\x07\xb9\xc4\xb2!\x87\xd4 \xee\xb1\xfc\x9d\xbfbb\xc22\xaeE;\xb2\x1a\x13\xc8\x80.nw\x05\xcb\x9c\x8a\x18\xa1\x86\xfbi\xa4\xd9\xff\xbc\x13y\x9f\xa6\xa32\x97\x8a`x\x1f\xab\x1f\x9b\xaf\xb6r\xc7v\xc1\n\\\x1ch\xd4u\x1aG&\xa1CR\x1a\xe4\xd9\xfe\x0c$\x81d` g\xa5qM\xee7\t\xb2\x9cK\xa0\xa7\x08\x9d\x9a\xe5z\xb4\xae\xd1\xa3U\x8e.\x94[\xe2 \xa4e0=`\xf2\xa3\xcb1\x01\x87\x8f\xc3\xecI\xa6h)\xcdowIp\x06\x88\x9a\x82\xe5\xf4 Z\xde\xfc\xd1oi\x95\xc7\xf7!lB{\x18\x84\xcf\xa0\xc9\x052J\xef\xbd\xc9\xb8\xe1\xa0\xfb\x1f\x17qX\xc4e\xe5\xef\xf1]\x05dp\xac[\xee\x99\xbc9\x19\x93#4\xb9J\xaeEP\xd0\x0e%\xfb\xa6\xe3\xd9\xa6\xd0\x00\x91\xd8\xda\x0cPC\x8cb0r\xfd:(I\xbd\xab\x85\x083_\xb2\x9b\x83\x0e\xbe\x90\xa1}*!\x8c\xa6\x15\xdb\x95\x97b&\x9c\x951<\x81|W\x97U\x9e\x84h\x9b\x0e\x9e\x8c\x13\r\xe5$\xa0\xd2]\xf7\xe9\x0cZ\xe5\x91\xb1\x06\xeez\x05r<\x1a\n\x90\xd4Ol\\\xaa\xff\x90P#-\xc8^\xf4\x1d\xa59Q/\x96\'\x0e.\x8e\xdb\x94\xa8\nM\xdf\x8d\xd6\xf7\xb8\xf44\x8aT\x8dqD_\x86\xb524\xa1h\xbf\x94\x80\x8c\x97\xc4\x81\x7fq\xf6\xfd\x7f\xc3\xe4X/S\xdb\x1ak\xd3\xf3\xfeJ\xc1:?\xa1UFp\x83\x8co\xa9"\xb2k\x14b\xe0\xc2m\xd3\x16\x02c*\xdd\x0c\xae\xbc\xcb\xa9)\xc5\xce6u\xa3\xe7\xcc\xc6\x13\x1d\x94\x9a\'\xaa\x04\xf8\x06w\x9c&\xcb\xc4\xad&\xfekt\xed\xf9v lm)\r\x19\x049\xfb\xc4\xfa\xc6\xbd\xd8\xf0\xe6\x9bylU\xd6\x00\x98\xe4\x89\x15\x18\xc4\xf1\n\x8e\x0e\xf1~/\x8d&\xdbT\xe7@\xdd\x8a>\xd4U\x9b\xafL\x9fh\x19;\xfe\x8f\x13\x9e\xa5\xb0\xd5\x1a\r\\TBa\xfcO\x8a2\t\x0072\xff\xbc\x1a\x9e\x0e\x08p\xb7\x99>\xcbv\xd7/d\xb4\x037\x95\x0e\xfb0=F5\x9a\'hw\xc6\xc5\xc63\x85\x19\xc7\xe0\xd7\x00+\xf5j\xf1t\xe4\xb0f\xebM\xab3\x88?\xd2\xa4\x15\xf4^\xdc\xba\xbez\x86%\x8b\x9eO5\x04\xc4\xa2)\xea\xfe!\xb4\x8e\x83\xf7\x82\xed\x8c\xc0\xbbq\x89\xa2\xa7s\xfb\xf9\xc9\x02-\xe7\xe3\xdfp1\x1f\xdf\xb7Go\xa9t\xda\xf8n\xce\x84\x04X(\xdb\x84\x9a8\xa6\xe6B\xa2\xe1\x00l7|_3i\xc8\x01u\x04+\x1b\xd8\x9e\xd5\x94J\x04\xc5B\xa1%\xaf\x7f\xd7\x07\xc6\x98\x03_ \xdf7\x8a\xfc9b;\xf58\xc8w\xefz%\xf5h\x07\xdbB\xab\xb5/\x8d\x03Z\x1btBm3\x90\xc7\x9c\x8d:\xc6*\x8e\xe1\x0f\xc29W\x16\xfe\x7fW\xaa?\x13\x08\xad^R\x9d\xf0\xb75\xb2z^~\x12\x1d\x0fs\x8d\xa20\xfdK\xa1\xdb\xe7\xcc\xecPhH\xf4\x03\xceo\xa7\xd9L*\x1f.\xcc`\xbc\x08\xdc@<+/s\x92JH\xe1\xeer\xc7\xe9\xaf+\x8dyQVn0\x92\x93\xccI\xa1\xd4r6d\xd6\xca\x1f\r\x16\xbd\xf1m\x1d\x82\xb2h\xc3\x14\xed\x03\xfb=-q\xed\xc0\x90\xf4\xa9D\t\x94\xac\xd3\xe6\xa4\x14\x8a\xbe\x1dyy\xda\x1cmV\x85\xd3\xd1tpB\xe8\xe1\xa4\x0b\xa6A\x02C$M\xc6=\xe1\xf7\xf2\xf8.\x13\xc3\x87\xb4\xbfo\xac\xb54[8\xc2\x8d#\xa9-L!8\xecq\xc7\xdb\x9bA6\xa3,\x97\xaa\xf0P\x99\xb7\x89a;\x07\xac\xc2\'\xae~\x06(\xad\xc0\x0f\'\xb2:\x0fG\xf2\xf2\x8dl,\xd5\xc4\xf2\x9a\xcc\x08k12u\x19\xfb\x18\xbf\x1f\x0e\x92B\xfc\xcd\t\xf8\xaa\x8b\xf4K\x9dN\x95\x9a\xe8\xf2\x8b@\xb4}!\xf3\xdf\xaf&o\xb5O\x08\x1b\x08\x08\xeb\xe7\xf6\xd3\x9e#\x15\xb8\xf6\n\xba\xcfz\x84\xd2\xf9~T\xfaT\xed\xbe\x10E*\x86\xdav\xd0k\xb9$\x01)}8\xd1\xf1bQ\xeb\x18\x86\x7f\xe5\xe2\xa1\xdc\x16\x8db\xc5\xa4\xc4\\1\x00Wi\xc5\xf5\xc6\xe0!\xa8\x88\xaf\xa8\x87os\x88=\xfd\xc9\xd7\xde\x16\xc76b\x01un\xaa[\xf7o\x8a\xf3=\xf9\xe6\xf9Uj\xfa\xd7\xa5C\xdaJ\xfc\t\xc8\xf28p\xe2\xe25\xe0\xde\xddf\x92l-\x05g\x0c\xd3\xa8oW\'O\xb4\xcc\xecc8\x02q\x0e\xe0\x07\xe0\x9b1\xa3L\xf5\xfa\x8dB\xff>\xa2\xbb\xa5\xa2l\xc1\xd3n\x12E\n\x1b\xabo#v\x9b\x92c\x0b\x1f\xf6\xf5\xba\xaf\xef\xfeh\\\xa7\x08\xb6h\xc4\x040\x91\xf4c\xbb|\x11Y\xc7\xd6\x15\xea\xa9\xa9I\xc0\x06\xa9\xf8\x8c}?A\xb1\xbb\xebx7\x02\x80TNB\xb5\xe9\x0e\xf0k\xdc2.\x0f\x88\x0f\xb9\n>Dg\xf2Y\xfd\xa4\x91\r\xa0\x92\xe1\x17z\xc3^\xf9Q\xc7\\\xef\x18;\xb2^R+TF7\xfe\xa0L\xd5E\xa2S\xfd'}, 'nonce': 15, 'era': {'period': 128, 'current': 5973050}, 'tip': 0, 'asset_id': {'tip': 0, 'asset_id': None}, 'mode': 'Disabled', 'signature_version': 1, 'address': '0x105bfdbbaa8c1a08251f2672b753eda64debeb3d2ff2bc6cd685a7df8e405164', 'call': {'call_function': 'submit_encrypted', 'call_module': 'MevShield', 'call_args': {'commitment': '0xd706f59b3341689ffb110aee61d7ecdecb33bb5aa42ed481f99c4279297eb8ba', 'ciphertext': b'@\x04\xef\xe8\xfa\xf3\n\x1b\x13\xcd%*\x9co\xc5\x0c\x906L\x1f\xff\xa8\xcf4\xc4$\xa2kJ|x\x84\xe1\xab^W\x81)\x8d\x97/\xe57AQW\xad\x17l\x18]\x0e[\xe6H\'<7\xe1TzG\x1d\xef\xb2\xcc5\x07\xb9\xc4\xb2!\x87\xd4 \xee\xb1\xfc\x9d\xbfbb\xc22\xaeE;\xb2\x1a\x13\xc8\x80.nw\x05\xcb\x9c\x8a\x18\xa1\x86\xfbi\xa4\xd9\xff\xbc\x13y\x9f\xa6\xa32\x97\x8a`x\x1f\xab\x1f\x9b\xaf\xb6r\xc7v\xc1\n\\\x1ch\xd4u\x1aG&\xa1CR\x1a\xe4\xd9\xfe\x0c$\x81d` g\xa5qM\xee7\t\xb2\x9cK\xa0\xa7\x08\x9d\x9a\xe5z\xb4\xae\xd1\xa3U\x8e.\x94[\xe2 \xa4e0=`\xf2\xa3\xcb1\x01\x87\x8f\xc3\xecI\xa6h)\xcdowIp\x06\x88\x9a\x82\xe5\xf4 Z\xde\xfc\xd1oi\x95\xc7\xf7!lB{\x18\x84\xcf\xa0\xc9\x052J\xef\xbd\xc9\xb8\xe1\xa0\xfb\x1f\x17qX\xc4e\xe5\xef\xf1]\x05dp\xac[\xee\x99\xbc9\x19\x93#4\xb9J\xaeEP\xd0\x0e%\xfb\xa6\xe3\xd9\xa6\xd0\x00\x91\xd8\xda\x0cPC\x8cb0r\xfd:(I\xbd\xab\x85\x083_\xb2\x9b\x83\x0e\xbe\x90\xa1}*!\x8c\xa6\x15\xdb\x95\x97b&\x9c\x951<\x81|W\x97U\x9e\x84h\x9b\x0e\x9e\x8c\x13\r\xe5$\xa0\xd2]\xf7\xe9\x0cZ\xe5\x91\xb1\x06\xeez\x05r<\x1a\n\x90\xd4Ol\\\xaa\xff\x90P#-\xc8^\xf4\x1d\xa59Q/\x96\'\x0e.\x8e\xdb\x94\xa8\nM\xdf\x8d\xd6\xf7\xb8\xf44\x8aT\x8dqD_\x86\xb524\xa1h\xbf\x94\x80\x8c\x97\xc4\x81\x7fq\xf6\xfd\x7f\xc3\xe4X/S\xdb\x1ak\xd3\xf3\xfeJ\xc1:?\xa1UFp\x83\x8co\xa9"\xb2k\x14b\xe0\xc2m\xd3\x16\x02c*\xdd\x0c\xae\xbc\xcb\xa9)\xc5\xce6u\xa3\xe7\xcc\xc6\x13\x1d\x94\x9a\'\xaa\x04\xf8\x06w\x9c&\xcb\xc4\xad&\xfekt\xed\xf9v lm)\r\x19\x049\xfb\xc4\xfa\xc6\xbd\xd8\xf0\xe6\x9bylU\xd6\x00\x98\xe4\x89\x15\x18\xc4\xf1\n\x8e\x0e\xf1~/\x8d&\xdbT\xe7@\xdd\x8a>\xd4U\x9b\xafL\x9fh\x19;\xfe\x8f\x13\x9e\xa5\xb0\xd5\x1a\r\\TBa\xfcO\x8a2\t\x0072\xff\xbc\x1a\x9e\x0e\x08p\xb7\x99>\xcbv\xd7/d\xb4\x037\x95\x0e\xfb0=F5\x9a\'hw\xc6\xc5\xc63\x85\x19\xc7\xe0\xd7\x00+\xf5j\xf1t\xe4\xb0f\xebM\xab3\x88?\xd2\xa4\x15\xf4^\xdc\xba\xbez\x86%\x8b\x9eO5\x04\xc4\xa2)\xea\xfe!\xb4\x8e\x83\xf7\x82\xed\x8c\xc0\xbbq\x89\xa2\xa7s\xfb\xf9\xc9\x02-\xe7\xe3\xdfp1\x1f\xdf\xb7Go\xa9t\xda\xf8n\xce\x84\x04X(\xdb\x84\x9a8\xa6\xe6B\xa2\xe1\x00l7|_3i\xc8\x01u\x04+\x1b\xd8\x9e\xd5\x94J\x04\xc5B\xa1%\xaf\x7f\xd7\x07\xc6\x98\x03_ \xdf7\x8a\xfc9b;\xf58\xc8w\xefz%\xf5h\x07\xdbB\xab\xb5/\x8d\x03Z\x1btBm3\x90\xc7\x9c\x8d:\xc6*\x8e\xe1\x0f\xc29W\x16\xfe\x7fW\xaa?\x13\x08\xad^R\x9d\xf0\xb75\xb2z^~\x12\x1d\x0fs\x8d\xa20\xfdK\xa1\xdb\xe7\xcc\xecPhH\xf4\x03\xceo\xa7\xd9L*\x1f.\xcc`\xbc\x08\xdc@<+/s\x92JH\xe1\xeer\xc7\xe9\xaf+\x8dyQVn0\x92\x93\xccI\xa1\xd4r6d\xd6\xca\x1f\r\x16\xbd\xf1m\x1d\x82\xb2h\xc3\x14\xed\x03\xfb=-q\xed\xc0\x90\xf4\xa9D\t\x94\xac\xd3\xe6\xa4\x14\x8a\xbe\x1dyy\xda\x1cmV\x85\xd3\xd1tpB\xe8\xe1\xa4\x0b\xa6A\x02C$M\xc6=\xe1\xf7\xf2\xf8.\x13\xc3\x87\xb4\xbfo\xac\xb54[8\xc2\x8d#\xa9-L!8\xecq\xc7\xdb\x9bA6\xa3,\x97\xaa\xf0P\x99\xb7\x89a;\x07\xac\xc2\'\xae~\x06(\xad\xc0\x0f\'\xb2:\x0fG\xf2\xf2\x8dl,\xd5\xc4\xf2\x9a\xcc\x08k12u\x19\xfb\x18\xbf\x1f\x0e\x92B\xfc\xcd\t\xf8\xaa\x8b\xf4K\x9dN\x95\x9a\xe8\xf2\x8b@\xb4}!\xf3\xdf\xaf&o\xb5O\x08\x1b\x08\x08\xeb\xe7\xf6\xd3\x9e#\x15\xb8\xf6\n\xba\xcfz\x84\xd2\xf9~T\xfaT\xed\xbe\x10E*\x86\xdav\xd0k\xb9$\x01)}8\xd1\xf1bQ\xeb\x18\x86\x7f\xe5\xe2\xa1\xdc\x16\x8db\xc5\xa4\xc4\\1\x00Wi\xc5\xf5\xc6\xe0!\xa8\x88\xaf\xa8\x87os\x88=\xfd\xc9\xd7\xde\x16\xc76b\x01un\xaa[\xf7o\x8a\xf3=\xf9\xe6\xf9Uj\xfa\xd7\xa5C\xdaJ\xfc\t\xc8\xf28p\xe2\xe25\xe0\xde\xddf\x92l-\x05g\x0c\xd3\xa8oW\'O\xb4\xcc\xecc8\x02q\x0e\xe0\x07\xe0\x9b1\xa3L\xf5\xfa\x8dB\xff>\xa2\xbb\xa5\xa2l\xc1\xd3n\x12E\n\x1b\xabo#v\x9b\x92c\x0b\x1f\xf6\xf5\xba\xaf\xef\xfeh\\\xa7\x08\xb6h\xc4\x040\x91\xf4c\xbb|\x11Y\xc7\xd6\x15\xea\xa9\xa9I\xc0\x06\xa9\xf8\x8c}?A\xb1\xbb\xebx7\x02\x80TNB\xb5\xe9\x0e\xf0k\xdc2.\x0f\x88\x0f\xb9\n>Dg\xf2Y\xfd\xa4\x91\r\xa0\x92\xe1\x17z\xc3^\xf9Q\xc7\\\xef\x18;\xb2^R+TF7\xfe\xa0L\xd5E\xa2S\xfd'}}} + extrinsic_fee: τ0.000013779 + extrinsic_receipt: ExtrinsicReceipt + + mev_extrinsic: + transaction_tao_fee: τ0.000503547 + transaction_alpha_fee: 0.000000000α + error: None + data: {'balance_before': τ90.314788205, 'balance_after': τ89.314638078, 'stake_before': 0.000000000α, 'stake_after': 2,408.440776606α} +``` + +### Option 2: Compose Call and Submit Encrypted + +For full control over the encryption and submission process, you can use the `mev_submit_encrypted` method on the `Subtensor` instance or call the `submit_encrypted_extrinsic` function directly. + +See [Working with Blockchain Calls](./call). + +### Nonce management + +:::tip +The SDK handles nonce management automatically! +::: + +When using MEV Shield, nonce management is important if you're using the **same account** to sign both the inner call and the submit call: + +- If your next available nonce is `X`: + - Sign the **inner call** (the one being encrypted) with nonce `X+1` + - Sign the **submit call** with nonce `X` + +This is because the submit call will be executed first (consuming nonce `X`), and then the inner call will be decrypted and executed (consuming nonce `X+1`). + +**Alternative approach**: Use a different account as the submitter. This eliminates nonce coordination entirely—the inner call signer and the submit call signer have independent nonce sequences. + +#### Key Parameters + +- `signer_keypair` (optional): The keypair used to sign the inner call. This parameter is only available when calling `submit_encrypted_extrinsic` directly. If not provided, the wallet's coldkey is used as the default signer. + +- `wait_for_revealed_execution` (default: `True`): Whether to wait for the `DecryptedExecuted` event, indicating that validators have successfully decrypted and executed the inner call. If `True`, the function polls subsequent blocks for the event matching this submission's commitment. + +- `blocks_for_revealed_execution` (default: `5`): Maximum number of blocks to poll for the `DecryptedExecuted` event after inclusion. The function checks blocks from `start_block + 1` to `start_block + blocks_for_revealed_execution`. It returns immediately if the event is found before the block limit is reached. + +#### MEV Receipt + +- `mev_extrinsic_receipt`: When `wait_for_revealed_execution=True`, the `ExtrinsicResponse` object will contain a `mev_extrinsic_receipt` attribute. This contains the execution details of the revealed (decrypted and executed) extrinsic, including triggered events such as `DecryptedExecuted` or `DecryptedRejected`, block information, and other execution metadata. + +:::note +If `wait_for_inclusion=False`, you cannot set `wait_for_revealed_execution=True`. This will raise a `ValueError` because we need to know the block where the encrypted transaction was included to search for the revealed execution event. +::: + +#### Example: Direct MEV Shield Submission with SDK + +```python +from bittensor import Subtensor, Wallet +from bittensor.core.extrinsics.pallets import SubtensorModule +from bittensor.utils.balance import Balance + +# Initialize subtensor and wallet +subtensor = Subtensor() +wallet = Wallet() + +staking_call = subtensor.compose_call( + call_module="SubtensorModule", + call_function="add_stake", + call_params={ + "netuid": 1, + "hotkey": "5C86aJ2uQawR6P6veaJQXNK9HaWh6NMbUhTiLs65kq4ZW3NH", + "amount_staked": 1000000000 # in RAO + } +) +# Submit with MEV protection +response = subtensor.mev_submit_encrypted( + wallet=wallet, + call=staking_call, + wait_for_inclusion=True, + wait_for_finalization=True, + wait_for_revealed_execution=True, + blocks_for_revealed_execution=5 +) + +print(response) +``` diff --git a/docs/sdk/migration-guide.md b/docs/sdk/migration-guide.md new file mode 100644 index 0000000000..0bc5c4d229 --- /dev/null +++ b/docs/sdk/migration-guide.md @@ -0,0 +1,1106 @@ +--- +title: "Bittensor SDK v10 Migration Guide" +--- + +import { SdkVersion } from "./_sdk-version.mdx"; + +# Bittensor SDK v10 Migration Guide + +This page documents breaking changes and new features for the Bittensor Python SDK `v10`. This is a major release with significant refactoring, standardization, and new functionality. + +See [Bittensor Python SDK Reference Docs](./bt-api-ref) + +## Executive Summary + +Bittensor SDK v10 is a **major breaking release** with significant improvements to consistency, type safety, and functionality. Key changes include: + +**Breaking Changes:** + +- **Python 3.10+ required** - Python 3.9 no longer supported ([details](#python-version-support)) +- **ExtrinsicResponse return type** - All blockchain transaction functions now return structured `ExtrinsicResponse` objects instead of `bool` or tuples ([details](#extrinsicresponse-return-type)) +- **Strict Balance type checking** - All amount parameters require `Balance` objects. ([details](#balance-handling)) +- **Parameter renames** - Consistent `_ss58` suffix for all address parameters (e.g., `hotkey` → `hotkey_ss58`) ([details](#parameter-renames)) +- **Method renames and removals** - Several methods renamed or removed for consistency ([details](#breaking-changes-method-renames)) + +**New Features:** + +- **Multiple Incentive Mechanisms** - Full SDK support for running multiple evaluation mechanisms per subnet with independent weight matrices and emissions ([details](#multiple-incentive-mechanisms-support)) +- **Root claim implementation**: Adds support for setting and managing root claims directly through the SDK +- **Proxy implementation**: Complete SDK support for creating, managing, and executing calls through proxy accounts ([details](#proxy-support)) +- **Crowdloan implementation**: Adds support for creating, managing, and interacting with crowdloans directly through the SDK +- **MEV Shield protection**: Encrypt transactions to protect against front-running and MEV attacks ([details](./mev-protection.md)) +- **GenericCall and CallBuilder** - Create, compose, and submit blockchain calls with enhanced validation ([details](./call.md)) +- **Transaction simulation** - `sim_swap()` calculates exact token yields without executing transactions ([details](#simulate-token-swaps)) +- **Fee estimation** - `get_extrinsic_fee()` estimates blockchain transaction costs before submission ([details](#estimate-transaction-fees)) +- **BlockInfo class** - Rich blockchain block information objects ([details](#blockinfo-class)) + +**Major Improvements:** + +- Standardized parameter ordering across all functions ([details](#standardized-parameters)) +- Centralized extrinsic parameters in `bittensor.core.extrinsics.params` ([details](#extrinsic-parameters-package)) +- Enhanced metagraph support for mechanism-specific queries ([details](#metagraph-changes)) +- Environment variable updates for clarity ([details](#environment-variables)) + +**Migration Required:** +See the [Migration Checklist](#migration-checklist) for step-by-step upgrade instructions. + +--- + +## Python Version Support + +**Python 3.9 is no longer supported.** The SDK now requires **Python 3.10 or higher**. + +## New Features + +### Structured Extrinsic Responses (ExtrinsicResponse) + +`ExtrinsicResponse` provides rich, structured data for both outgoing requests and incoming on-chain results. While it is a breaking change in return types, it primarily unlocks better development, testing, and debugging workflows by standardizing success flags, messages, fees, receipts, and operation-specific data in one object. + +- **Purpose**: Enables more accurate, predictable code paths and easier assertions in tests +- **What you get**: Success flag, human-readable message, network fee, application-level swap fee(s), inclusion/finalization receipts, and operation-specific data +- **Where it applies**: Returned by all functions that submit extrinsics + +See details: [ExtrinsicResponse Return Type](#extrinsicresponse-return-type) + +### Multiple Incentive Mechanisms Support + +Full SDK support for **multiple incentive mechanisms within subnets** is now implemented, a major new Subtensor blockchain feature. + +Previously referred to as "sub-subnets" during development, this feature allows subnet creators to run multiple independent evaluation mechanisms within a single subnet, each with separate weight matrices, bond pools, and emission distributions. This is a significant architectural change that enables more sophisticated subnet designs. See [Multiple Incentive Mechanisms Within Subnets](../subnets/understanding-multiple-mech-subnets) for a complete overview. + +**Key Concepts:** + +- **`mechid` (Mechanism ID)**: An integer identifying which mechanism within a subnet (0 for the first mechanism, 1 for the second, etc.). +- **Default behavior**: All methods default to `mechid=0`, so existing single-mechanism subnets work unchanged +- **Backward compatible**: Subnets with only one mechanism (the default) don't need code changes + +#### Setting Mechanism Weights: + + + +Validators must set weights independently for each mechanism in a subnet: + +```python +# Set weights for a specific mechanism (mechid) +response = subtensor.set_weights( + wallet, + netuid=1, + uids=[0, 1, 2], + weights=[0.5, 0.3, 0.2], + mechid=0 # Mechanism ID (default: 0) +) + +# For subnets with multiple mechanisms, set weights for each: +mechanism1_response = subtensor.set_weights(wallet, netuid=1, uids, weights1, mechid=0) +mechanism2_response = subtensor.set_weights(wallet, netuid=1, uids, weights2, mechid=1) +``` + +#### Querying Mechanism-Specific Data on the Metagraph: + +### Proxy Support + +Full SDK support for **proxy accounts** is now implemented. Proxies allow one wallet to perform Bittensor operations on behalf of another, enabling enhanced security by keeping your main coldkey in cold storage while a proxy handles day-to-day operations. + +See [Proxies: Overview](../keys/proxies/index.md) and [Working with Proxies](../keys/proxies/working-with-proxies.md) for complete documentation. + +All metagraph queries now accept a `mechid` parameter: + +```python +# Get metagraph for specific mechanism +metagraph = subtensor.metagraph(netuid=1, mechid=0) + +# Get weights for specific mechanism +weights = subtensor.weights(netuid=1, mechid=0) + +# Get bonds for specific mechanism +bonds = subtensor.bonds(netuid=1, mechid=0) + +# Get timelocked weight commits for a mechanism +commits = subtensor.get_timelocked_weight_commits(netuid=1, mechid=0) +``` + +### Simulate Token Swaps + +`sim_swap()` calculates the **exact token yields** for stake or unstake operations at a given block, without actually executing the transaction. + +```python +# Simulate adding stake (TAO → Alpha) to see exact Alpha received +result = subtensor.sim_swap( + origin_netuid=0, # 0 = TAO (root) + destination_netuid=1, # Target subnet + amount=tao(100.0), +) + +print(f"TAO amount: {result.tao_amount}") +print(f"Alpha received: {result.alpha_amount}") +print(f"TAO fee: {result.tao_fee}") +print(f"Alpha fee: {result.alpha_fee}") + +# Simulate unstaking (Alpha → TAO) +result = subtensor.sim_swap( + origin_netuid=1, # Source subnet + destination_netuid=0, # 0 = TAO (root) + amount=tao(100.0), +) +``` + +### Build Extrinsic Calls + +Compose an extrinsic call without submitting it to the blockchain with `compose_call` or `CallBuilder`. Useful for fee estimation, transaction preparation, proxies, crowdloans, and MEV protection. + +```python +# Compose a call for later submission or fee estimation +call = subtensor.compose_call( + call_module="SubtensorModule", + call_function="add_stake", + call_params={ + "netuid": 1, + "hotkey": hotkey_ss58, + "amount_staked": amount.rao + } +) + +# Use the composed call to estimate fees (requires keypair) +fee = subtensor.get_extrinsic_fee(call, wallet.coldkeypub) +``` + +For detailed documentation on `GenericCall`, `CallBuilder`, and practical examples including proxy calls and MEV protection, see **[Working with Blockchain Calls](./call.md)**. + +### SimSwap Fee Calculation Methods + +The SDK now provides dedicated methods for calculating swap-based fees for staking operations. These methods use the new `sim_swap()` functionality (see [New Subtensor Methods](#new-subtensor-methods)) to query the Subtensor blockchain and return precise fee calculations: + +```python +# Get fee for adding stake (staking operation) +fee = subtensor.get_stake_add_fee(amount, netuid) + +# Get fee for moving stake between subnets +fee = subtensor.get_stake_movement_fee(origin_netuid, destination_netuid, amount) + +# Get fee for removing stake (unstaking operation) +fee = subtensor.get_unstake_fee(netuid, amount) + +# All methods return Balance objects representing the fee in TAO or Alpha +``` + +**Note:** These are **application-level swap fees** (0.05% of transacted liquidity), separate from **blockchain transaction fees** (weight-based). See [Transaction Fees in Bittensor](../learn/fees) for details on both fee types. + +### Verbose Logging Control + +The `Subtensor` class now supports verbose logging to help debug interactions with the Subtensor blockchain: + +```python +# Set verbose mode for trace-level logging +subtensor = Subtensor(network="test", log_verbose=True) +# Automatically sets btlogging to TRACE level for detailed blockchain interaction logs +``` + +### BlockInfo Class + +New [`BlockInfo`](pathname:///python-api/html/autoapi/bittensor/core/types/index.html) class provides rich information about blockchain blocks, including metadata and links to block explorers. + +```python +from bittensor.core.types import BlockInfo + +# Get block information by block number +block = subtensor.get_block_info(block=12345) + +# Or get block information by block hash +block = subtensor.get_block_info(block_hash="0x1234...") + +# Access block data +print(f"Block number: {block.number}") +print(f"Block hash: {block.hash}") +print(f"Timestamp: {block.timestamp}") +print(f"Number of extrinsics: {len(block.extrinsics)}") +print(f"View on explorer: {block.explorer}") + +# Access raw header data +print(f"Parent hash: {block.header['parentHash']}") + +# Iterate through extrinsics +for extrinsic in block.extrinsics: + print(f"Extrinsic: {extrinsic}") +``` + +**BlockInfo attributes:** + +- **`number`** (int): The block number +- **`hash`** (str): The block hash +- **`timestamp`** (Optional[int]): Unix timestamp when the block was created (from `Timestamp.Now` extrinsic) +- **`header`** (dict): Raw block header data from the node RPC, including parent hash, state root, and other metadata +- **`extrinsics`** (list): List of all extrinsics (transactions) included in the block +- **`explorer`** (str): Direct link to view the block on [tao.app/](https://tao.app) block explorer + +**Use cases:** + +- Inspect transaction history and block contents +- Debug blockchain interactions +- Verify transaction inclusion in specific blocks +- Access detailed block metadata for analysis +- Link users to block explorer for visual inspection + +### Hex / SS58 Conversion + +New utility function for converting hex addresses to SS58 format: + +```python +from bittensor.utils import hex_to_ss58 + +ss58_address = hex_to_ss58(hex_string) + +from bittensor.utils import ss58_to_hex + +hex_string = ss58_to_hex(ss58_address) +``` + +**Note:** `hex_to_ss58` is an alias for `ss58_encode` from scalecodec. Similarly, `ss58_to_hex` is an alias for `ss58_decode`. + +### Development Test Framework + +New developer testing utilities provide helpers and fixtures for rapid local testing of SDK integrations and extrinsic flows. Use cases: Simulate common workflows, stub chain interactions, and write predictable tests around `ExtrinsicResponse` without a full node. + +Learn more: [`bittensor/extras/dev_framework`](https://github.com/opentensor/bittensor/tree/SDKv10/bittensor/extras/dev_framework) + +### Estimate Transaction Fees + +Query the estimated fee for submitting an extrinsic to the Subtensor blockchain before actually sending it, with `get_extrinsic_fee()`. + +```python +# Compose a call first +call = subtensor.compose_call( + call_module="Balances", + call_function="transfer_keep_alive", + call_params={"dest": destination_address, "value": amount.rao} +) + +# Estimate fee without submitting +fee = subtensor.get_extrinsic_fee(call, wallet.coldkeypub) +print(f"Estimated fee: {fee}") # Returns Balance object +``` + +**Use cases:** + +- Check if wallet has sufficient balance before submitting transactions +- Display estimated costs to users +- Optimize transaction batching based on fee estimates + +See also: +- [Working with Blockchain Calls](./call.md) for more examples of composing and submitting calls +- [Transaction Fees in Bittensor](../learn/fees) for complete fee information + +### Parameter Validation + +Validate extrinsic parameters before submission to catch errors early, with `validate_extrinsic_params`. + +```python +# Validate parameters match the extrinsic schema +params = { + "netuid": 1, + "hotkey": hotkey_ss58, + "amount_staked": amount.rao +} + +try: + # Returns validated/corrected params or raises an exception + validated_params = subtensor.validate_extrinsic_params( + call_module="SubtensorModule", + call_function="add_stake", + call_params=params + ) + print(f"Parameters validated: {validated_params}") +except Exception as e: + print(f"Invalid parameters: {e}") +``` + +**Note:** This method returns the validated parameters (potentially with corrections) or raises an exception if validation fails. It does not return a boolean. + +### Query Commitment Data + +Get commitment metadata for a hotkey on a subnet with `get_commitment_metadata`. Previously in `bittensor.core.extrinsic.serving`, now a `Subtensor` method. + +```python +# Query commitment metadata +metadata = subtensor.get_commitment_metadata(netuid=1, hotkey_ss58="5D...") +``` + +### Query Bonds Reset + +Get the last bonds reset block for a subnet with `get_last_bonds_reset`. Previously in `bittensor.core.extrinsic.serving`, now a `Subtensor` method. + +```python +# Query when bonds were last reset (requires both netuid and hotkey_ss58) +last_reset_block = subtensor.get_last_bonds_reset(netuid=1, hotkey_ss58="5D...") +``` + +### Historical Block Data Query + +The `blocks_since_last_update` method has been improved and can now be used to query historical data from archive nodes. + +```python +# Query blocks since last update with archive node support +blocks = subtensor.blocks_since_last_update(netuid=1, uid=0) +``` + +## Breaking Changes: Method Renames + +### Subnet Methods + +```python +# ❌ Old: +netuids = subtensor.get_subnets() + +# ✅ New: +netuids = subtensor.get_all_subnets_netuid() +``` + +### Stake Methods + +```python +# ❌ Old (removed - duplicate functionality): +stake_info = subtensor.get_stake_for_coldkey(coldkey) + +# ✅ Use instead: +stake_info = subtensor.get_stake_info_for_coldkey(coldkey_ss58) +``` + +### Commitment Methods + +```python +# ❌ Old: +subtensor.commit(wallet, netuid, data) + +# ✅ New: +subtensor.set_commitment(wallet, netuid, data) + +``` + +### Serving Methods + +Functions moved from `bittensor.core.extrinsic.serving` to `Subtensor` methods: + +```python +# ❌ Old: +from bittensor.core.extrinsic.serving import get_metadata, get_last_bonds_reset +metadata = get_metadata(subtensor, netuid, hotkey) +last_reset = get_last_bonds_reset(subtensor, netuid) + +# ✅ New: +metadata = subtensor.get_commitment_metadata(netuid, hotkey_ss58) +last_reset = subtensor.get_last_bonds_reset(netuid, hotkey_ss58) +``` + +### Timelocked Weight Commits + +```python +# ❌ Old (deprecated): +commits = subtensor.get_current_weight_commit_info(netuid, mechid) +commits_v2 = subtensor.get_current_weight_commit_info_v2(netuid, mechid) + +# ✅ Use: +commits = subtensor.get_timelocked_weight_commits(netuid, mechid) +``` + +## Breaking Changes: Parameter Changes + +### Consistent Parameter Ordering + +Many methods now follow the standard order: `subtensor`, `netuid`, `hotkey_ss58`, ... + +```python +# ❌ Old: +subtensor.set_children(wallet, netuid, hotkey, children, proportions) +subtensor.move_stake(wallet, origin_hotkey, dest_hotkey, amount) + +# ✅ New: +subtensor.set_children(wallet, netuid, hotkey_ss58, children) +subtensor.move_stake(wallet, origin_netuid, origin_hotkey_ss58, destination_netuid, destination_hotkey_ss58, amount) +``` + +**Methods with reordered parameters:** + +- `add_stake_multiple` +- `set_children` +- `move_stake` +- `query_subtensor` +- `query_module` +- `query_map_subtensor` +- `query_map` +- `root_set_pending_childkey_cooldown` + +### Block Parameter Standardization + +```python +# ❌ Old: +subnets = subtensor.all_subnets(block_number=12345) + +# ✅ New: +subnets = subtensor.all_subnets(block=12345) +``` + +All `block_number` and `block_id` parameters are now consistently named `block`. + +### Get Metagraph Info Fields Parameter + +```python +# ❌ Old: +info = subtensor.get_metagraph_info(netuid, field_indices=[0, 1, 2]) + +# ✅ New: +info = subtensor.get_metagraph_info(netuid, selected_indices=[0, 1, 2]) +``` + +### Mock Parameter + +```python +# ❌ Old: +subtensor = Subtensor(network="local", _mock=True) + +# ✅ New: +subtensor = Subtensor(network="local", mock=True) +``` + +The `_mock` parameter is now public as `mock` and moved to the last position in the parameter list. + +### Async Methods Parity + +All async methods now have the same parameters as sync methods: + +```python +# New parameters added to async versions: +async_subtensor.get_subnet_validator_permits(netuid, block_hash=None, reuse_block=None) +async_subtensor.get_subnet_owner_hotkey(netuid, block_hash=None, reuse_block=None) +``` + +### Removed `reuse_block` from Sync Methods + +```python +# ❌ Old: +hotkeys = subtensor.get_owned_hotkeys(coldkey, reuse_block=True) + +# ✅ New: +hotkeys = subtensor.get_owned_hotkeys(coldkey_ss58) +``` + +The `reuse_block` parameter has been removed from sync methods for consistency. It's still available in async methods where appropriate. + +### Transfer Fee Parameter Rename + +```python +# ❌ Old: +fee = subtensor.get_transfer_fee(wallet, destination, value) + +# ✅ New: +fee = subtensor.get_transfer_fee(wallet, destination, amount) +``` + +The `value` parameter has been renamed to `amount` for consistency with other amount parameters across the SDK. + +#### Weight Setting Methods Parameter Rename + +The following weight-setting methods have renamed `max_retries` to `max_attempts`: + +```python +# ❌ Old: +subtensor.commit_weights(wallet, netuid, uids, weights, max_retries=5) +subtensor.reveal_weights(wallet, netuid, uids, weights, salt, max_retries=5) +subtensor.set_weights(wallet, netuid, uids, weights, max_retries=5) + +# ✅ New: +subtensor.commit_weights(wallet, netuid, uids, weights, max_attempts=5) +subtensor.reveal_weights(wallet, netuid, uids, weights, salt, max_attempts=5) +subtensor.set_weights(wallet, netuid, uids, weights, max_attempts=5) +``` + +**New Validation:** The `max_attempts` parameter now includes validation. If `max_attempts=0` or negative, the method will return an `ExtrinsicResponse` with `success=False` and an appropriate error message instead of attempting the operation. + +## Breaking Changes:Removed Methods + +### Duplicate References + +```python +# ❌ Removed (was just a reference): +subtensor.get_stake_info_for_coldkey = subtensor.get_stake_for_coldkey + +# ✅ Use the canonical name: +subtensor.get_stake_info_for_coldkey(coldkey_ss58) +``` + +### DefaultConfig Class Removed + +```python +# ❌ Removed: +from bittensor.core.config import DefaultConfig + +# ✅ Use Config directly: +from bittensor.core.config import Config +``` + +The `DefaultConfig` class has been removed as it was unused in the codebase. + +### DelegateInfo Attribute Removed + +```python +# ❌ Removed: +delegate_info.total_daily_return # No longer calculated or provided + +# This attribute has been removed from both DelegateInfo and DelegateInfoLite classes +``` + +The `total_daily_return` attribute has been removed as it was not providing accurate information and should not be relied upon. + +## Extrinsic Calling Changes + +All functions that submit extrinsics to the Subtensor blockchain (both standalone functions and `Subtensor` class methods) have been standardized for consistency. + +### Standardized Parameters + +All functions that submit extrinsics now follow a **consistent parameter ordering** and include standard flags: + +```python +# Standard parameter order: +extrinsic_function( + subtensor, + # ... extrinsic-specific parameters (wallet, netuid, hotkey_ss58, amount, etc.) ... + period: Optional[int] = None, + raise_error: bool = False, + wait_for_inclusion: bool = True, + wait_for_finalization: bool = True, +) +``` + +1. **Extrinsic-specific arguments come first** (e.g., `wallet`, `hotkey_ss58`, `netuid`, `amount`) +2. **Optional general flags come last** (e.g., `period`, `raise_error`, `wait_for_inclusion`, `wait_for_finalization`) +3. **Default behavior changed**: `wait_for_inclusion` and `wait_for_finalization` now default to `True` + +This ensures the SDK function response correctly reflects the blockchain transaction outcome. + +:::note +When `raise_error=False`, extrinsic functions do not raise exceptions; all error information is captured inside the returned `ExtrinsicResponse` object. Set `raise_error=True` if you prefer exceptions to be raised directly for error cases. +::: + +### Keyword-Only Arguments + +All extrinsics and related `Subtensor` methods now use **keyword-only arguments** (indicated by `*,` in the function signature). This means that certain parameters must be passed by name rather than position, improving code clarity and preventing accidental argument misplacement. + +The `*` symbol in Python function signatures creates a boundary: all parameters after `*` must be passed as keyword arguments. This helps prevent bugs from positional argument confusion, especially when functions have many parameters. + +#### Example: Keyword-Only Arguments + +```python +# Before (positional arguments could cause confusion): +subtensor.add_stake( + wallet, + 1, + "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY", + amount, + False, + False, + 0.005, + False, + None, + False, + True, + True +) +# Which parameter is which? Hard to tell! + +# After (keyword-only arguments enforce clarity): +subtensor.add_stake( + wallet, + 1, + "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY", + amount, + False, + False, + 0.005, + mev_protection=True, # Must be passed by name if provided + period=None, # Must be passed by name if provided + raise_error=False, # Must be passed by name if provided + wait_for_inclusion=True, # Must be passed by name if provided + wait_for_finalization=True # Must be passed by name if provided +) +``` + +### ExtrinsicResponse Return Type + +All SDK functions that submit extrinsics to the blockchain now return an `ExtrinsicResponse` object instead of `bool` or tuples. + +- **`success`**: Primary indicator - `True` if transaction succeeded, `False` otherwise +- **`message`**: User-friendly status (e.g., "Success", "Insufficient balance") +- **`extrinsic_fee`**: Network fee paid to validators (similar to gas fees) - see [Transaction Fees](../learn/fees) +- **`transaction_tao_fee`**: Application-level fee charged in TAO for swap-based staking operations (0.05% of transacted liquidity when applicable) +- **`transaction_alpha_fee`**: Application-level fee charged in Alpha (subnet token) for swap-based staking operations (0.05% of transacted liquidity when applicable) +- **`extrinsic_receipt`**: Contains block number, hash, events, and execution details when `wait_for_inclusion=True` +- **`data`**: Operation-specific results: + - Registration: `{"uid": int}` - assigned neuron UID + - Commit weights: `{"reveal_round": int}` - round for revealing + - Metadata: `{"encrypted": bytes, "reveal_round": int}` + - Stake operations: balance information +- **`error`**: Python exception for programmatic error handling when `raise_error=False` + +See [source code](https://github.com/opentensor/bittensor/blob/main/bittensor/core/types.py#L290-L484). + +### Parameter Renames + +Many parameters in functions that submit blockchain transactions have been renamed for consistency across the SDK: + +#### Hotkey and Coldkey Parameters + +**All SS58 address parameters now use the `_ss58` suffix:** + +```python +# ❌ Old: +subtensor.move_stake(wallet, origin_hotkey, destination_hotkey, amount) + +# ✅ New: +subtensor.move_stake(wallet, origin_netuid, origin_hotkey_ss58, destination_netuid, destination_hotkey_ss58, amount) +``` + +**Affected methods:** + +- `hotkey` → `hotkey_ss58` (all methods) +- `hotkey_ss58_address` → `hotkey_ss58` (all methods) +- `coldkey` → `coldkey_ss58` (all methods) +- `coldkey_ss58_address` → `coldkey_ss58` (all methods) +- `hotkeypub` → `hotkeypub_ss58` (where applicable) +- `coldkeypub` → `coldkeypub_ss58` (where applicable) + +#### Transfer Extrinsic + +```python +# ❌ Old: +subtensor.transfer(wallet, dest, amount) + +# ✅ New: +subtensor.transfer(wallet, destination_ss58, amount) +``` + +#### Staking Parameters + +```python +# ❌ Old: +subtensor.unstake(wallet, hotkey, amount, safe_staking=True) +subtensor.swap_stake(wallet, from_hotkey, to_hotkey, amount, safe_staking=True) + +# ✅ New: +subtensor.unstake(wallet, netuid, hotkey_ss58, amount, safe_unstaking=True) + +# For swapping stake between subnets (same hotkey, different subnets): +subtensor.swap_stake( + wallet, + hotkey_ss58="5D...", + origin_netuid=1, + destination_netuid=2, + amount=amount, + safe_swapping=True +) + +# For moving stake between hotkeys (use move_stake instead): +subtensor.move_stake( + wallet, + origin_netuid=1, + origin_hotkey_ss58="5D...1", + destination_netuid=1, + destination_hotkey_ss58="5D...2", + amount=amount +) +``` + +#### Required Parameters + +Several previously optional parameters are now **required**: + +```python +# ❌ Old: +subtensor.add_stake(wallet, hotkey_ss58=None, amount=None) + +# ✅ New: +subtensor.add_stake( + wallet, + netuid: int, # Now required + hotkey_ss58: str, # Now required + amount: Balance # Now required +) +``` + +**Affected functions:** + +- `add_stake_extrinsic`: `netuid`, `hotkey_ss58`, `amount` now required +- `add_stake_multiple_extrinsic`: `amounts` now required +- `unstake_extrinsic`: `netuid`, `hotkey_ss58`, `amount` now required +- `unstake_multiple_extrinsic`: `amounts` now required + +### Removed Functions + +#### `unstake_all` parameter removed from `unstake_extrinsic` + +```python +# ❌ Old: +subtensor.unstake(wallet, hotkey, amount=None, unstake_all=True) + +# ✅ New: Use dedicated method +subtensor.unstake_all(wallet, netuid, hotkey_ss58) +``` + +#### Internal `_do*` methods removed + +All internal helper methods have been consolidated into the main functions that submit extrinsics: + +- `_do_commit_reveal_v3` → merged into `commit_timelocked_weights_extrinsic` +- `_do_commit_weights` → merged into `commit_weights_extrinsic` +- `_do_reveal_weights` → merged into `reveal_weights_extrinsic` +- `_do_set_weights` → merged into `set_weights_extrinsic` +- `_do_burned_register` → merged into `burned_register_extrinsic` +- `_do_pow_register` → merged into `register_extrinsic` +- `_do_set_root_weights` → merged into `set_root_weights_extrinsic` +- `_do_transfer` → merged into `transfer_extrinsic` + +#### Deprecated root weights method removed + +```python +# ❌ Removed: +subtensor.set_root_weights_extrinsic(...) + +# This was obsolete and has been removed entirely +``` + +#### Commit-Reveal v3 (CRv3) removed + +All CRv3-related logic and extrinsics have been removed as CRv3 is no longer supported on the chain. + +```python +# ❌ Removed: +commit_reveal_extrinsic(...) # Old non-mechanism version + +# ✅ Use: +commit_timelocked_weights_extrinsic(..., commit_reveal_version=4) +``` + +### Merged Functions + +#### `increase_take` and `decrease_take` merged into `set_delegate_take` + +```python +# ❌ Old: +subtensor.increase_take(wallet, hotkey_ss58, take) +subtensor.decrease_take(wallet, hotkey_ss58, take) + +# ✅ New: +# Automatically determines whether to increase or decrease based on current vs new take +subtensor.set_delegate_take( + wallet, + hotkey_ss58="5D...", + take=0.18 # 18% as a float between 0 and 1 +) + +# ✅ New (low-level extrinsic with explicit action): +# The extrinsic requires an explicit action parameter with a strict type: +# action: Literal["increase_take", "decrease_take"] +from bittensor.core.extrinsics.take import set_take_extrinsic + +# Example: increase take +response_inc = set_take_extrinsic( + subtensor, + wallet=wallet, + hotkey_ss58="5D...", + take=0.20, + action="increase_take", +) + +# Example: decrease take +response_dec = set_take_extrinsic( + subtensor, + wallet=wallet, + hotkey_ss58="5D...", + take=0.15, + action="decrease_take", +) +``` + +**Note:** The method automatically calls `increase_take` or `decrease_take` internally based on whether the new take is higher or lower than the current take. + +#### Mechanism-specific weight functions consolidated + +Non-mechanism versions removed, mechanism versions renamed and moved: + +```python +# Old paths (removed): +from bittensor.core.extrinsics.mechanism import ( + commit_timelocked_mechanism_weights_extrinsic, + commit_mechanism_weights_extrinsic, + reveal_mechanism_weights_extrinsic, +) + +# ✅ New paths: +from bittensor.core.extrinsics.weights import ( + commit_timelocked_weights_extrinsic, + commit_weights_extrinsic, + reveal_weights_extrinsic, + set_weights_extrinsic, +) +``` + +## Balance Handling + +### Stricter Type Checking + +**Balance operations now raise errors instead of warnings** for type mismatches. + +#### 1) Invalid balance type (`BalanceTypeError`) + +Raised when a method expecting a `Balance` receives a non-`Balance` value. + +```python +from bittensor.utils.balance import Balance, tao, rao +from bittensor.core.errors import BalanceTypeError + +# ❌ Old (pre-10.0): would warn but continue +amount = 1.0 # float +# subtensor.transfer(wallet, dest, amount) + +# ✅ New: must pass a Balance object (choose your preferred constructor) +subtensor.transfer(wallet, dest, tao(1.0)) +subtensor.transfer(wallet, dest, rao(1_000_000_000)) +subtensor.transfer(wallet, dest, Balance.from_tao(1.0)) +subtensor.transfer(wallet, dest, Balance.from_rao(1_000_000_000)) +``` + +#### 2) Mismatched balance units (`BalanceUnitMismatchError`) + +Raised when performing operations on two `Balance` objects that represent different units (e.g., TAO vs Alpha from a subnet). + +```python +from bittensor.utils.balance import Balance +from bittensor.core.errors import BalanceUnitMismatchError + +balance_tao = Balance.from_tao(1.0) +balance_alpha = Balance.from_rao(1_000_000_000) # 1 tao = 1x10^9 rao + +# ❌ Will raise BalanceUnitMismatchError: mixing units in arithmetic +_ = balance_tao + balance_alpha + +# ❌ Will raise BalanceUnitMismatchError: comparing mismatched units +_ = balance_tao > balance_alpha + +# ✅ Ensure units match before operations +_ = balance_tao + Balance.from_tao(0.5) +``` + +### Function Renames + +```python +# ❌ Old: +from bittensor.utils.balance import check_balance, check_and_convert_to_balance + +amount = check_and_convert_to_balance(value) + +# ✅ New: +from bittensor.utils.balance import check_balance_amount + +amount = check_balance_amount(value) +``` + +### All Amount Parameters Require Balance Objects + +```python +# ❌ Old: +subtensor.transfer(wallet, destination, 1.0) # float accepted +subtensor.add_stake(wallet, hotkey, 5) # int accepted + +# ✅ New: +from bittensor.utils.balance import tao, rao + +subtensor.transfer(wallet, destination, tao(1.0)) # convenience helper +subtensor.add_stake(wallet, netuid, hotkey_ss58, tao(5.0)) +# or +subtensor.transfer(wallet, destination, rao(1000000000)) +``` + +**Affected methods:** + +- `transfer` +- `add_stake` +- `add_stake_multiple` +- `unstake` +- `unstake_multiple` +- `move_stake` +- `swap_stake` +- `transfer_stake` +- `get_transfer_fee` +- `get_stake_add_fee` +- `get_stake_movement_fee` +- `get_unstake_fee` + +## Import Changes + +### Removed Backwards Compatibility Aliases + +The following lowercase aliases have been **removed** from `bittensor`: + +```python +# ❌ Old (removed): +from bittensor import subtensor, wallet, config, axon, dendrite +from bittensor import keyfile, metagraph, synapse, async_subtensor + +# ✅ New (use PascalCase): +from bittensor import Subtensor, Wallet, Config, Axon, Dendrite +from bittensor import Keyfile, Metagraph, Synapse, AsyncSubtensor +``` + +### Removed Direct Subpackage Links + +```python +# ❌ Old (removed): +from bittensor.mock import MockSubtensor +from bittensor.extrinsics import transfer_extrinsic + +# ✅ New (use top-level convenience imports or full paths): +from bittensor import mock, extrinsics +mock_sub = mock.MockSubtensor() +response = extrinsics.transfer.transfer_extrinsic(...) + +# Or use full paths: +from bittensor.utils.mock import MockSubtensor +from bittensor.core.extrinsics import transfer_extrinsic +``` + +### New Import Convenience + +```python +# ✅ New convenience imports: +from bittensor import extrinsics +from bittensor import mock +from bittensor import get_async_subtensor + +# Use them: +response = extrinsics.transfer.transfer_extrinsic(...) +mock_sub = mock.MockSubtensor() +async_sub = get_async_subtensor(network="test") +``` + +### Module Reorganization + +Several modules have been moved to new subpackages: + +```python +# ❌ Old: +from bittensor.core.subtensor_api import SubtensorAPI +from bittensor.core.timelock import TimelockManager + +# ✅ New: +from bittensor.extras.subtensor_api import SubtensorAPI +from bittensor.extras import timelock + +# Or use top-level convenience import: +from bittensor import SubtensorApi, timelock +``` + +The `bittensor.extras` package now hosts optional extensions like `SubtensorApi`, `timelock` and `dev_framework`. + +### Extrinsic Parameters Package + +Parameters for functions that submit extrinsics are now centralized in a dedicated package, `bittensor.core.extrinsics.params`. + +This makes it easier to discover available parameters and ensures consistency across sync/async implementations of blockchain transaction functions. + +## Environment Variables + +### Renamed Variables + +```python +# ❌ Old: +BT_CHAIN_ENDPOINT=ws://127.0.0.1:9945 +BT_NETWORK=local + +# ✅ New: +BT_SUBTENSOR_CHAIN_ENDPOINT=ws://127.0.0.1:9945 +BT_SUBTENSOR_NETWORK=local +``` + +**All renamed environment variables:** + +- `BT_CHAIN_ENDPOINT` → `BT_SUBTENSOR_CHAIN_ENDPOINT` +- `BT_NETWORK` → `BT_SUBTENSOR_NETWORK` + +### Disabling CLI Argument Parsing + +If your script uses the SDK and receives unwanted `--config` or other CLI parameters: + +```python +# Set environment variable to disable config processing: +BT_NO_PARSE_CLI_ARGS=1 # or: true, yes, on + +# In code: +import os +os.environ['BT_NO_PARSE_CLI_ARGS'] = '1' + +from bittensor import Subtensor +# CLI args will no longer be processed +``` + +:::tip +When `BT_NO_PARSE_CLI_ARGS` is set, the SDK skips CLI parsing entirely and falls back to default configuration values defined in `bittensor.core.settings.DEFAULTS` for all configuration options across the SDK. This is useful when embedding the SDK in applications that manage their own configuration. +::: + +## Metagraph Changes + +This section covers changes to metagraph-related functionality in both the `Subtensor` and `Metagraph` classes, particularly around the new multiple incentive mechanisms feature. + +### Mechid Parameter Ordering + +With the introduction of multiple incentive mechanisms per subnet, many methods now accept a `mechid` (mechanism ID) parameter to specify which mechanism to query: + +```python +# Query methods with mechid support (parameter order: netuid, mechid=0, block=None) +bonds = subtensor.bonds(netuid=1, mechid=0) +weights = subtensor.weights(netuid=1, mechid=0) +metagraph = subtensor.metagraph(netuid=1, mechid=0) +commits = subtensor.get_timelocked_weight_commits(netuid=1, mechid=0) +``` + +**Methods with mechid parameter:** + +- `bonds(netuid, mechid=0, block=None)` +- `weights(netuid, mechid=0, block=None)` +- `metagraph(netuid, mechid=0, lite=True, block=None)` +- `get_metagraph_info(netuid, mechid=0, ...)` +- `get_timelocked_weight_commits(netuid, mechid=0, block=None)` +- `commit_weights(wallet, netuid, uids, weights, mechid=0, ...)` +- `reveal_weights(wallet, netuid, uids, weights, mechid=0, ...)` +- `set_weights(wallet, netuid, uids, weights, mechid=0, ...)` + +### MetagraphInfo Changes + +The `MetagraphInfo` class now requires a `mechid` parameter to support multiple incentive mechanisms: + +```python +# mechid is now required in MetagraphInfo +from bittensor.core.chain_data.metagraph_info import MetagraphInfo + +info = MetagraphInfo( + netuid=1, + mechid=0, # Now required (mechanism ID) + # ... other fields +) +``` + +**Note:** `mechid=0` refers to the first (or only) incentive mechanism in a subnet. Subnets can have multiple mechanisms (currently limited to 2), each with their own independent weight matrices and emissions. See [Multiple Incentive Mechanisms](../subnets/understanding-multiple-mech-subnets) for details. + +### Async Metagraph Initialization + +The async `AsyncMetagraph.sync` method no longer terminates the subtensor instance after use, improving resource management and allowing for reuse of connections in async contexts. + +## Migration Checklist + +1. **Update Python version** to 3.10 or higher +2. **Update bittensor package**: `pip install bittensor>=10.0.0` (until the public release, you should install the latest available release candidate). +3. **Update all imports** to use PascalCase class names (`Subtensor`, `Wallet`, etc.), also known as the CapWords convention. +4. **Replace all amount parameters** with `Balance` objects.` +5. **Update all functions that submit extrinsics** to handle `ExtrinsicResponse` return type instead of `bool` or tuples[bool, str] +6. **Rename parameters** according to the standardization (`hotkey` → `hotkey_ss58`, `dest` → `destination`, etc.) +7. **Update environment variables** (`BT_CHAIN_ENDPOINT` → `BT_SUBTENSOR_CHAIN_ENDPOINT`, `BT_NETWORK` → `BT_SUBTENSOR_NETWORK`) +8. **Review removed methods** and replace with alternatives (see [Removed Methods](#removed-methods)) +9. **Update parameter order** for affected methods (see [Parameter Changes](#parameter-changes)) +10. **Add `mechid` parameter** to weight-setting code if working with multiple mechanisms +11. **Test thoroughly** with your specific use case, especially blockchain transactions and balance handling diff --git a/docs/sdk/subtensor-api.md b/docs/sdk/subtensor-api.md index d81eea69b3..6391e3469b 100644 --- a/docs/sdk/subtensor-api.md +++ b/docs/sdk/subtensor-api.md @@ -1,55 +1,57 @@ --- -title: Subtensor API +title: SubtensorAPI --- -# Subtensor API +import { SdkVersion } from "./_sdk-version.mdx"; +# Subtensor API ## Overview -The SubtensorApi is a unified interface for the Bittensor blockchain. It wraps both the synchronous and asynchronous Subtensor implementations, providing modular access to chain subsystems like wallets, delegates, neurons, and more. - +The `SubtensorAPI` is a unified interface for the Bittensor blockchain. It wraps both the synchronous and asynchronous Subtensor implementations, providing modular access to chain subsystems like wallets, delegates, neurons, and more. ### Modules -All methods are grouped into logical modules for better organization and readability. Some methods may belong to more than one group if they span multiple functional areas. This does not compromise the internal logic — rather, it enhances discoverability and cohesion. Method equivalence between `SubtensorApi` and the original `Subtensor` is automatically verified by test coverage on every pull request (PR). - +All methods are grouped into logical modules for better organization and readability. Some methods may belong to more than one group if they span multiple functional areas. This does not compromise the internal logic — rather, it enhances discoverability and cohesion. Method equivalence between `SubtensorAPI` and the original `Subtensor` is automatically verified by test coverage on every pull request (PR).
Subsystem modules -| Property | Description | -|----------|-------------| -| chain | Blockchain interaction methods | -| commitments | Commitment and reveal logic | -| delegates | Delegate management tools | -| extrinsics | Transaction construction and signing | -| metagraphs | Metagraph data and operations | -| neurons | Neuron-level APIs | -| queries | General query endpoints | -| staking | Staking operations | -| subnets | Subnet access and management | -| wallets | Wallet creation, import/export | +| Property | Description | +| ----------- | ------------------------------------ | +| chain | Blockchain interaction methods | +| commitments | Commitment and reveal logic | +| crowdloans | Crowdloan management operations | +| delegates | Delegate management tools | +| extrinsics | Transaction construction and signing | +| metagraphs | Metagraph data and operations | +| neurons | Neuron-level APIs | +| queries | General query endpoints | +| staking | Staking operations | +| subnets | Subnet access and management | +| wallets | Wallet creation, import/export | +
### Configuration -The behavior of the `SubtensorApi` object is configured with the following parameters. +The behavior of the `SubtensorAPI` object is configured with the following parameters. +
Parameters -| Parameter | Type | Description | Default Value | -|-------------------|-------------------|----------------------------------------------------------------------------------------------------------|-------------------------------| -| `network` | `str` or `None` | The network to connect to. If not specified, defaults to `"finney"`. | `None` (interpreted as "finney")| -| `config` | `Config` or `None`| Pre-built Bittensor configuration object. | `None` | -| `async_subtensor` | `bool` | Whether to use the asynchronous version of the API. | `False` | -| `legacy_methods` | `bool` | If `True`, all methods from the legacy `Subtensor` class are added to this class. | `False` | -| `fallback_endpoints` | `list[str]` or `None`| List of fallback endpoints to use if default or provided network is not available. | `None` | -| `retry_forever` | `bool` | If `True`, continuously retries on connection errors until successful. | `False` | -| `log_verbose` | `bool` | Enables detailed logging output when set to `True`. | `False` | -| `mock` | `bool` | Enables mock mode for testing without connecting to the blockchain. | `False` | -
+| Parameter | Type | Description | Default Value | +| -------------------- | --------------------- | ---------------------------------------------------------------------------------- | -------------------------------- | +| `network` | `str` or `None` | The network to connect to. If not specified, defaults to `"finney"`. | `None` (interpreted as "finney") | +| `config` | `Config` or `None` | Pre-built Bittensor configuration object. | `None` | +| `async_subtensor` | `bool` | Whether to use the asynchronous version of the API. | `False` | +| `legacy_methods` | `bool` | If `True`, all methods from the legacy `Subtensor` class are added to this class. | `False` | +| `fallback_endpoints` | `list[str]` or `None` | List of fallback endpoints to use if default or provided network is not available. | `None` | +| `retry_forever` | `bool` | If `True`, continuously retries on connection errors until successful. | `False` | +| `log_verbose` | `bool` | Enables detailed logging output when set to `True`. | `False` | +| `mock` | `bool` | Enables mock mode for testing without connecting to the blockchain. | `False` | +
Reference docs: [SubtensorApi](pathname:///python-api/html/autoapi/bittensor/core/subtensor_api/index.html) @@ -57,13 +59,17 @@ Reference docs: [SubtensorApi](pathname:///python-api/html/autoapi/bittensor/cor :::tip Upgrade to the [latest Bittensor release](https://pypi.org/project/bittensor/). + ```shell pip install bittensor ``` + ::: ### Synchronous (Default) + + ```python import bittensor as bt @@ -74,6 +80,36 @@ print(sub.delegates.get_delegate_identities()) sub.chain.tx_rate_limit() ``` +### Mechanism helpers (multiple incentive mechanisms) + +Subnets can run multiple incentive mechanisms. The API adds helpers and optional `mechid` on key calls. + +- New getters: + - `get_mechanism_count(netuid)` → int + - `get_mechanism_emission_split(netuid)` → list[int] or None (even split implied) + - `is_in_admin_freeze_window(netuid)` → bool +- Mechanism-aware methods now accept `mechid` (default `0`): + - `set_weights`, `commit_weights`, `reveal_weights`, `weights`, `bonds`, `get_metagraph_info`, `get_all_metagraphs_info(all_mechanisms=False)` + +```python +import bittensor as bt + +sub = bt.SubtensorApi() +netuid = 14 + +count = sub.subnets.get_mechanism_count(netuid=netuid) +split = sub.subnets.get_mechanism_emission_split(netuid=netuid) + +# Set weights for mechanism 1 +ok, msg = sub.extrinsics.set_weights( + wallet=bt.Wallet(name="alice", hotkey="alice"), + netuid=netuid, + mechid=1, + uids=[0,1,2], + weights=[1,1,1], +) +``` + ### Asynchronous ```python @@ -89,6 +125,7 @@ async def main(): asyncio.run(main()) ``` + ### Legacy Method Support You can enable all legacy methods from the original `Subtensor` class directly on this interface: @@ -101,6 +138,7 @@ print(sub.bonds(0)) # Classic method usage ``` ## Advanced Usage + ### Retry and Fallback RPC Nodes Enable redundancy and resilience with fallback endpoints and retry logic: @@ -140,7 +178,7 @@ import bittensor as bt parser = argparse.ArgumentParser('Miner') bt.SubtensorApi.add_args(parser) -config = bt.config(parser) +config = bt.Config(parser) sub = bt.SubtensorApi(config=config) print(sub) @@ -168,4 +206,4 @@ async def main(): print(await sub.block) asyncio.run(main()) -``` \ No newline at end of file +``` diff --git a/docs/staking-and-delegation/delegation.md b/docs/staking-and-delegation/delegation.md index b6c0b8c846..ad6ebf73c2 100644 --- a/docs/staking-and-delegation/delegation.md +++ b/docs/staking-and-delegation/delegation.md @@ -9,105 +9,151 @@ import useBaseUrl from '@docusaurus/useBaseUrl'; TAO holders can **stake** any amount of the liquidity they hold to a validator. Also known as **delegation**, staking supports validators, because their total stake in the subnet, including stake delegated to them by others, determines their consensus power and their share of emissions. After the validator/delegate extracts their **take** the remaining emissions are credited back to the stakers/delegators in proportion to their stake with that validator. +:::note Transaction Fees +Staking and unstaking operations incur transaction fees. See [Transaction Fees in Bittensor](../learn/fees.md) for details. +::: + See also: -- [Staking with Polkadot JS](./staking-polkadot-js.md). -- See also [Validators: Acquiring stake](../validators/index.md#acquiring-stake). +- [Verified Validators on TAO.app](https://www.tao.app/validators): Browse validators with on-chain identities, compare stake distributions, and view validator take percentages +- [Staking with a Proxy](../keys/proxies/staking-with-proxy): Keep your coldkey secure while managing staking operations +- [Staking with Polkadot JS](./staking-polkadot-js.md) +- [Validators: Acquiring stake](../validators/index.md#acquiring-stake) :::tip tips -Validators/delegates can configure their take. The default value is 18%. See [Setting your delegate take](#setting-your-delegate-take). +Validators/delegates can configure their take. The default value is 18%. See [`btcli sudo set-take`](../btcli#btcli-sudo-set-take). Minimum required stake for nominators is 0.1 TAO. ::: +### Staking into Subnets + Staking is always local to a subnet. -Each subnet operates its own automated market-maker (AMM), meaning it mantains its own reserves of the two tokens being traded so that it can facilitate a trade of any desired quantity of liquidity (as long as its available), at a price that it automated calculates. +Each subnet operates its own automated market maker (AMM), meaning it mantains its own reserves of the two tokens being traded so that it can facilitate a trade of any desired quantity of liquidity (as long as its available), at a price that it automated calculates. Each subnet has a reserve of TAO and a reserve of its currency, referred to in general as its alpha ($\alpha$) currency. Stake is held in $\alpha$ token denominations. -As a TAO holder you will stake to a validator’s hotkey on a specific subnet. Staking to a given validator's hotkeys on different subnets is independent. +As a TAO holder, you will stake to a validator’s hotkey on a specific subnet. Staking to a given validator's hotkeys on different subnets is independent. **When you stake:** -1. First, your TAO stake goes into the subnet's TAO reserve of its AMM (automated market maker) pool. -1. Then, the subnet AMM pool algorithm uses the exchange rate and calculates the equivalent units of $\alpha$, for the TAO that was just added to the TAO reserve side. This amount of $\alpha$ is taken out of the alpha reserve of the pool and is sent to the validator’s hotkey. -1. The validator’s hotkey holds the $\alpha$. The sum of stake among all hotkeys is referred as **$\alpha$ outstanding** for that subnet. +1. First, your TAO stake goes into the subnet's TAO reserve of its AMM pool. +1. Then, the subnet's AMM pool algorithm uses the latest exchange rate and calculates the equivalent units of $\alpha$, for the TAO that was just added to the TAO reserve side. This amount of $\alpha$ is taken out of the alpha reserve of the pool and is sent to the validator’s hotkey. +1. The validator’s hotkey holds the $\alpha$. The sum of stake among all hotkeys is referred as **$\alpha$ outstanding** for that subnet. + +### Unstaking back to TAO **When you unstake:** -1. When you issue an unstake command, `btcli stake remove`, and specify the units of $\alpha$ token you want to unstake, this $\alpha$ is first taken out of the validator’s hotkey and added to the $\alpha$ reserves of the subnet pool. -2. The subnet AMM pool algorithm then applies the latest exchange rate and calculates the equivalent TAO units for the $\alpha$ token units that were just added to the $\alpha$ reserves of the pool. -3. These equivalent TAO units are then taken out of the TAO reserves of the subnet pool and are sent to the TAO holder’s coldkey. +1. When you issue an unstake command, `btcli stake remove`, and specify the units of $\alpha$ token you want to unstake, this $\alpha$ is first taken out of the validator's hotkey and added to the $\alpha$ reserves of the subnet pool. +2. The subnet's AMM pool algorithm then applies the latest exchange rate and calculates the equivalent TAO units for the $\alpha$ token units that were just added to the $\alpha$ reserves of the pool. +3. These equivalent TAO units are then taken out of the TAO reserves of the subnet pool and are sent to the TAO holder's coldkey. + +:::important Key considerations when unstaking +**Slippage**: Like staking, unstaking operations are subject to slippage because your transaction affects the subnet's AMM pool prices. Larger unstaking amounts will experience more slippage. See [Understanding Pricing and Anticipating Slippage](../learn/slippage.md) for details. + +**Price protection**: Bittensor provides built-in price protection mechanisms to prevent unfavorable unstaking transactions. You can set tolerance limits and enable partial execution. See [Price Protection When Staking](../learn/price-protection.md) for more information. + +**Transaction fees**: Unstaking operations incur blockchain transaction fees. These fees are recycled back into the TAO emission pool. See [Transaction Fees in Bittensor](../learn/fees.md). +::: + +### Unstaking methods + +There are several ways to unstake your TAO: + +- **Direct unstaking**: Remove stake from a specific validator on a specific subnet using `btcli stake remove` or the SDK's `unstake()` method +- **Unstake all**: Remove all stake from a validator on a subnet in one operation +- **Move stake**: Move stake between validators or subnets without withdrawing to your coldkey (see [Moving stake](#moving-stake)) +- **Transfer stake**: Transfer ownership of staked tokens to another coldkey (see [Transferring stake](#transferring-stake)) + +See the guides for detailed instructions: +- [Managing Stake with btcli](./managing-stake-btcli.md) +- [Managing Stake with SDK](./managing-stake-sdk.md) + +### Moving stake + +Moving stake is a special operation that transfers stake between validators or subnets in a single atomic transaction, without first withdrawing to your coldkey. This can be more efficient than unstaking and restaking separately, as it minimizes the number of transactions and associated fees. + +### Transferring stake + +Transferring stake changes ownership of staked tokens from one coldkey to another while keeping the stake on the same validator. This comprises unstaking, transferring TAO ownership, and restaking to the same validator as an atomic transaction. :::tip Stake is always expressed in alpha units -In Dynamic TAO, except for the stake held in [the Root Subnet](#root-subnet-subnet-zero), the stake held by a hotkey in a subnet is always expressed in the subnet-specific $\alpha$ units. Root Subnet stake is expressed in $\tau$. +In Dynamic TAO, except for the stake held in [the Root Subnet](../subnets/understanding-subnets.md#subnet-zero), the stake held by a hotkey in a subnet is always expressed in the subnet-specific $\alpha$ units. Root Subnet stake is expressed in $\tau$. ::: :::tip Prereq To follow along, install the [latest release of `btcli`](https://pypi.org/project/bittensor-cli/). ::: +
+ See how its calculated ## Example Suppose a validator holds 800 TAO of their own. -Then three nominators stake to the validator as follows: - - Nominator 1: 100 TAO. - - Nominator 2: 70 TAO. - - Nominator 3: 30 TAO. +Then three nominators stake to the validator as follows: + +- Nominator 1: 100 TAO. +- Nominator 2: 70 TAO. +- Nominator 3: 30 TAO. The validator's effective stake is the total sum of their own and all delegated stake. - $$ - \text{delegated stake} = 100\tau + 70\tau + 30\tau = 200\tau - $$ - $$ - \text{total stake} = \text{self-stake} + \text{delegated stake} = 800\tau + 200\tau = 1000 \tau - $$ +$$ +\text{delegated stake} = 100\tau + 70\tau + 30\tau = 200\tau +$$ + +$$ +\text{total stake} = \text{self-stake} + \text{delegated stake} = 800\tau + 200\tau = 1000 \tau +$$ Emissions to stakers are proportional to their contribution to delegated stake: $$ - \text{emission for staker x from validator V} = + \text{emission for staker x from validator V} = \frac { stake_x } { \sum_{i \in \text{V's stakers}} \bigl(stake_i) } $$ + - Nominator 1 represents 50% of total delegated TAO: - $$ - \text{emission for staker x from validator V} = - \frac - { 100\tau } - { 100\tau + 70\tau + 30\tau } = 50\% - $$ + $$ + \text{emission for staker x from validator V} = + \frac + { 100\tau } + { 100\tau + 70\tau + 30\tau } = 50\% + $$ + - Nominator 2 contributes 35% of the total delegated TAO. - $$ - \text{emission for staker x from validator V} = + $$ + \text{emission for staker x from validator V} = \frac { 70\tau } { 100\tau + 70\tau + 30\tau } = 35\% - $$ + $$ - Nominator 3 contributes 15% of the total delegated TAO. - $$ - \text{emission for staker x from validator V} = + $$ + \text{emission for staker x from validator V} = \frac { 30\tau } { 100\tau + 70\tau + 30\tau } = 15\% - $$ + $$ The delegate validator would keep 80% of the emissions, based on their 80% proportion of the total stake (0.8). In addition, the validator would keep their 18% take of the emissions earned on the delegated stake. As a result: - - Total emissions to the delegate are: $0.8 + 0.2*0.18= .836 = 83.6\%$ of the received emissions. - - Each nominator receives the following portions of the validator's total emissions, based on their contribution percentages: - - Nominator 1 emissions: $(1-0.8)*(1-0.18)*.5 = .082 = 8.2\%$ - - Nominator 2 emissions: $(1-0.8)*(1-0.18)*.35 = .0574 = 5.74\%$ - - Nominator 3 emissions: $(1-0.8)*(1-0.18)*.15 = .0246 = 2.46\%$ - + +- Total emissions to the delegate are: $0.8 + 0.2*0.18= .836 = 83.6\%$ of the received emissions. +- Each nominator receives the following portions of the validator's total emissions, based on their contribution percentages: + - Nominator 1 emissions: $(1-0.8)*(1-0.18)*.5 = .082 = 8.2\%$ + - Nominator 2 emissions: $(1-0.8)*(1-0.18)*.35 = .0574 = 5.74\%$ + - Nominator 3 emissions: $(1-0.8)*(1-0.18)*.15 = .0246 = 2.46\%$ :::info A nominator is a delegating authority A nominator is the same as a delegating authority. Typically, a nominator is an owner of TAO funds who wants to invest in the Bittensor network without performing any validating tasks. ::: +
diff --git a/docs/staking-and-delegation/managing-stake-btcli.md b/docs/staking-and-delegation/managing-stake-btcli.md index 8f093a7a14..6319027e4e 100644 --- a/docs/staking-and-delegation/managing-stake-btcli.md +++ b/docs/staking-and-delegation/managing-stake-btcli.md @@ -4,19 +4,33 @@ title: "Managing Stake with BTCLI" # Managing stake with `btcli` -This pages demonstrates usage of `btcli`, the Bittensor CLI, for managing stake. +This page demonstrates usage of `btcli`, the Bittensor CLI, for managing stake. TAO holders can **stake** any amount of the liquidity they hold to a validator. Also known as **delegation**, staking supports validators, because their total stake in the subnet, including stake delegated to them by others, determines their consensus power and their share of emissions. After the validator/delegate extracts their **take** the remaining emissions are credited back to the stakers/delegators in proportion to their stake with that validator. +Likewise, TAO holders can **unstake** to withdraw their delegated tokens from validators, converting subnet-specific alpha tokens back to TAO through the subnet's automated market maker (AMM). + +:::note Transaction Fees +Staking and unstaking operations incur transaction fees for the underlying blockchain transactions they trigger. See [Transaction Fees in Bittensor](../learn/fees.md) for details. +::: + See also: - [Staking/delegation overview](./delegation) -- [Understanding pricing and anticipating slippage](../dynamic-tao/staking-unstaking-dtao) +- [Understanding pricing and anticipating slippage](../learn/slippage) +- [Price protection when staking](../learn/price-protection) +- [Staking with a proxy](../keys/proxies/staking-with-proxy) :::tip Minimum transaction amount for stake/unstake/move/transfer: 500,000 RAO or 0.0005 TAO. ::: +:::warning Keep your coldkey secure +Staking is a regular operation for most TAO holders. Every time you stake or unstake directly, you must decrypt and use your coldkey—exposing it to potential compromise. + +**For better security, use a [Staking Proxy](../keys/proxies/staking-with-proxy)**. With a `Staking` proxy configured with a delay, you can manage your stake without ever exposing your coldkey. If the proxy is compromised, the delay gives you time to reject unauthorized unstaking attempts. +::: + ## Pre-requisite: Create a wallet To manage stake you will need a wallet. For practice, create one with `btcli`. @@ -33,7 +47,7 @@ Test network tokens have no real value. Before managing liquidity on Bittensor m ## View TAO balance -To stake, you'll first need some TAO. Inquire in [Discord](https://discord.com/channels/799672011265015819/1107738550373454028/threads/1331693251589312553) to obtain TAO on Bittensor test network. Alternatively, you can transfer some testnet TAO to your wallet address using the [BTCLI Live Coding Playground](../btcli/btcli-playground.md#transfer). +To stake, you'll first need some TAO. Inquire in [Discord](https://discord.com/channels/799672011265015819/1107738550373454028/threads/1331693251589312553) to obtain TAO on Bittensor test network. Alternatively, you can obtain some by completing the [BTCLI Live Coding Playground](../btcli/btcli-playground.md#transfer). After creating a wallet, ensure that you are targeting the test network by running the `btcli config set` command. Next, select network, and set it to `test`. @@ -84,7 +98,7 @@ You should see something like the following output. Notice that next to the subn ... ``` -## View a subnet's nodes +## View a subnet's validator neurons ```shell btcli subnet show --netuid 119 @@ -119,7 +133,7 @@ Using the specified network test from config 46 │ 928.60 Ⲃ │ 928.23 Ⲃ │ τ 0.38 │ 0.00439 │ 0.0088 │ 0.35965 Ⲃ │ 5GuqX1 │ 5Ehuid │ ~ ``` -## Stake into a node +## Stake to a validator Use `btcli stake add` to stake to a validator on a subnet. You'll be prompted to choose a subnet and validator, as well as specify an amount of TAO to stake into the validator's hotkey as alpha. @@ -164,11 +178,11 @@ After selecting a validator to delegate stake to, you'll see your wallet balance Amount to stake (TAO τ): 5 ``` -You'll then see the details of the trade, including [slippage](../dynamic-tao/staking-unstaking-dtao), and be asked to confirm execution. +You'll then see the details of the trade, including [slippage](../learn/slippage), and be asked to confirm execution. ```console Staking to: - Wallet: PracticeKey!, Coldkey ss58: 5G4mxrN8msvc4jjwp7xoBrtAejTfAMLCMTFGCivY5inmySbq + Wallet: PracticeKey!, Coldkey ss58: 5G4m... Network: test Netuid ┃ Hotkey ┃ Amount (τ) ┃ Rate (per τ) ┃ Received ┃ Slippage @@ -190,7 +204,21 @@ The columns are as follows: Would you like to continue? [y/n]: ``` -If you confirm, the staking operation will execute. After completion +If you confirm, the staking operation will execute. + +### Staking to multiple validators + +You can add stake to multiple validators at once by running the following command: + +```shell +btcli stake add -n 4,14,70 +``` + +The command accepts a comma-separated list of the subnets you wish to stake into. If you want to stake the same amount of TAO into all subnets, you can include the `--amount` flag as shown: + +```shell +btcli stake add -n 4,14,70 --amount 100 +``` ## View your current stakes @@ -215,6 +243,137 @@ Stake is held in alpha, but note that value at the current price is also display Press Enter to continue to the next hotkey... ``` +## Unstaking with btcli + +Unstaking is the process of withdrawing your staked TAO from validators, converting subnet-specific alpha tokens back to TAO through the subnet's AMM. When you unstake, slippage applies similar to staking operations—your transaction affects pool prices, with larger amounts experiencing more slippage. + +:::important Key considerations when unstaking +**Slippage**: Unstaking operations are subject to slippage as your transaction affects the subnet's AMM pool prices. The CLI will show you the expected slippage before confirming. See [Understanding Pricing and Anticipating Slippage](../learn/slippage.md). + +**Price protection**: btcli provides built-in confirmation screens showing rates and slippage before execution. See [Price Protection When Staking](../learn/price-protection.md). + +**Transaction fees**: Unstaking incurs blockchain transaction fees. See [Transaction Fees in Bittensor](../learn/fees.md). +::: + +### Remove stake from a validator + +Use `btcli stake remove` to unstake from a specific validator. You'll be prompted to select the subnet and validator, then specify the amount to unstake. + +```shell +btcli stake remove +``` + +You'll see a confirmation screen showing: + +- The amount you're unstaking (in alpha) +- The current exchange rate +- How much TAO you'll receive +- The slippage percentage + +```console +Enter the hotkey name or ss58 address to unstake from (or Press Enter to view existing staked hotkeys): +Using the wallet path from config: /Users/michaeltrestman/.bittensor/wallets +Using the specified network test from config + + + + Hotkeys with Stakes + + Index ┃ Identity ┃ Netuids ┃ Hotkey Address +━━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + 0 │ SuperNetOwnerGuy │ 0, 2-3, 320, 324, 119, 250 │ 5GEXJdUXxLVmrkaHBfkFmoodXrCSUMFSgPXULbnrRicEt1kK + 1 │ Owner3 │ 3 │ 5FupG35rCCMghVEAzdYuxxb4SWHU7HtpKeveDmSoyCN8vHyb + 2 │ CrypticMax │ 3 │ 5EHammhTy9rV9FhDdYeFY98YTMvU8Vz9Zv2FuFQQQyMTptc6 + 3 │ muv │ 5, 277, 45 │ 5FCPTnjevGqAuTttetBy4a24Ej3pH9fiQ8fmvP1ZkrVsLUoT + 4 │ Brainlock │ 277 │ 5EFtEvPcgZHheW36jGXMPMrDETzbngziR3DPPVVp5L5Gt7Wo + 5 │ merit │ 119 │ 5CFZ9xDaFQVLA9ERsTs9S3i6jp1VDydvjQH5RDsyWCCJkTM4 +───────┼──────────────────┼────────────────────────────┼────────────────────────────────────────────────── + │ │ │ + +Enter the index of the hotkey you want to unstake from [0/1/2/3/4/5]: 0 + + + + Stakes for hotkey + SuperNetOwnerGuy + 5GEXJdUXxLVmrkaHBfkFmoodXrCSUMFSgPXULbnrRicEt1kK + + Subnet ┃ Symbol ┃ Stake Amount ┃ Rate (Τ/α) +━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━ + 0 │ Τ │ Τ 7.3947 │ 1.000000 τ/Τ + 2 │ β │ 0.0243 β │ 0.001754 τ/β + 3 │ γ │ 0.0414 γ │ 0.111141 τ/γ + 320 │ イ │ 1,724,839.6158 イ │ 0.000000 τ/イ + 324 │ カ │ 1,677,528.1530 カ │ 0.000522 τ/カ + 119 │ Ⲃ │ 474.0460 Ⲃ │ 0.077959 τ/Ⲃ + 250 │ ኤ │ 981.1793 ኤ │ 0.015457 τ/ኤ +────────┼────────┼───────────────────┼─────────────── + │ │ │ + + + +Enter the netuids of the subnets to unstake from (comma-separated), or 'all' to unstake from all (all): all + +Do you want to: +Yes: Unstake from all subnets and automatically re-stake to subnet 0 (root) +No: Unstake everything (including subnet 0) [y/n] (y): y +🌏 Retrieving stake information & identities from test...[Error]: Not enough Alpha to pay the transaction fee. + + + Unstaking Summary - All Alpha Stakes + Wallet: PracticeKey!, Coldkey ss58: 5G4m... + Network: test + + Netuid ┃ Hotkey ┃ Current Stake (α) ┃ Rate (τ/α) ┃ Fee (α) ┃ Extrinsic Fee (τ) ┃ Received (τ) +━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━ + 3 │ 5GEXJdUXxLVmrkaHBfkFmood… │ 0.0414 γ │ 0.111141(Τ/γ) │ 0.0000 γ │ 0.0002 τ │ 0.0044 τ + 320 │ 5GEXJdUXxLVmrkaHBfkFmood… │ 1,724,839.6158 イ │ 0.000000(Τ/イ) │ 868.5391 イ │ 0.0002 τ │ 0.0092 τ + 324 │ 5GEXJdUXxLVmrkaHBfkFmood… │ 1,677,528.1530 カ │ 0.000522(Τ/カ) │ 844.7155 カ │ 0.0002 τ │ 164.4346 τ + 119 │ 5GEXJdUXxLVmrkaHBfkFmood… │ 474.0460 Ⲃ │ 0.077959(Τ/Ⲃ) │ 0.2387 Ⲃ │ 0.0002 τ │ 36.9276 τ + 250 │ 5GEXJdUXxLVmrkaHBfkFmood… │ 981.1793 ኤ │ 0.015457(Τ/ኤ) │ 0.4941 ኤ │ 0.0002 τ │ 15.1467 τ +────────┼───────────────────────────┼───────────────────┼────────────────┼─────────────┼───────────────────┼────────────── + │ │ │ │ │ │ +Total expected return: 216.5224 τ + +Do you want to proceed with unstaking everything? [y/n]: y +``` + +### Unstake all from a validator + +To unstake all your stake from a specific validator, or from all validators use the `--all` flag: + +```shell +btcli stake remove --all +``` + +Either specify the hotkey, to remove all stake on all subnets, or `all` for all stake on all subnets for all validator hotkeys. + +```console +Enter the hotkey name or ss58 address to unstake all from (or enter 'all' to unstake from all hotkeys) (default): all +Using the specified network test from config + + Unstaking Summary - All Stakes + Wallet: PracticeKey!, Coldkey ss58: 5G4mx... + Network: test + + Netuid ┃ Hotkey ┃ Current Stake (α) ┃ Rate (τ/α) ┃ Fee (α) ┃ Extrinsic Fee (τ) ┃ Received (τ) +━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━ + 0 │ stakinkey1 │ Τ 223.9187 │ 1.000000(Τ/Τ) │ Τ 0.0000 │ 0.0000 τ │ 223.9187 τ + 3 │ CrypticMax │ 55.3817 γ │ 0.111113(Τ/γ) │ 0.0279 γ │ 0.0000 τ │ 6.1504 τ + 5 │ muv │ 2,433.6223 ε │ 0.000400(Τ/ε) │ 1.2254 ε │ 0.0000 τ │ 0.9727 τ + 17 │ Owner16 │ 10,660.8115 ρ │ 0.000209(Τ/ρ) │ 5.3682 ρ │ 0.0000 τ │ 2.2171 τ + 277 │ muv │ 20.0331 इ │ 0.274036(Τ/इ) │ 0.0101 इ │ 0.0000 τ │ 5.4870 τ + 277 │ Brainlock │ 16.3792 इ │ 0.274036(Τ/इ) │ 0.0082 इ │ 0.0000 τ │ 4.4862 τ + 45 │ muv │ 1,452.0454 פ │ 0.000207(Τ/פ) │ 0.7312 פ │ 0.0000 τ │ 0.2998 τ + 119 │ merit │ 107.4401 Ⲃ │ 0.077918(Τ/Ⲃ) │ 0.0541 Ⲃ │ 0.0000 τ │ 8.3667 τ + 250 │ stakinkey1 │ 6.7777 ኤ │ 0.015434(Τ/ኤ) │ 0.0034 ኤ │ 0.0000 τ │ 0.1045 τ +────────┼────────────┼───────────────────┼───────────────┼──────────┼───────────────────┼────────────── + │ │ │ │ │ │ +Total expected return: 252.0030 τ + +Do you want to proceed with unstaking everything? [y/n]: +``` + ## Transferring stake The `btcli stake transfer` command is used to transfer ownership of stake from one wallet (coldkey) to another. @@ -296,7 +455,7 @@ Using the specified network test from config Wallet: - Coldkey SS58: 5F1TCdVcRWLYyKiS2kF2nBZ21EwQDDFr8hEqrDhRL6YvdtgQ + Coldkey SS58: 5F1T... Free Balance: τ 0.0000 Total TAO (τ): τ 2.51 Total Value (τ): τ 2.56 diff --git a/docs/staking-and-delegation/managing-stake-sdk.md b/docs/staking-and-delegation/managing-stake-sdk.md index 6bc7e6cbb7..3050124bbf 100644 --- a/docs/staking-and-delegation/managing-stake-sdk.md +++ b/docs/staking-and-delegation/managing-stake-sdk.md @@ -2,24 +2,39 @@ title: "Managing stake with Bittensor Python SDK" --- +import { SdkVersion } from "../sdk/_sdk-version.mdx"; + # Managing Stake with Bittensor Python SDK -This pages demonstrates usage of the Bittensor SDK for Python for managing stake. +This page demonstrates usage of the Bittensor SDK for Python for managing stake. TAO holders can **stake** any amount of the liquidity they hold to a validator. Also known as **delegation**, staking supports validators, because their total stake in the subnet, including stake delegated to them by others, determines their consensus power and their share of emissions. After the validator/delegate extracts their **take** the remaining emissions are credited back to the stakers/delegators in proportion to their stake with that validator. +Likewise, TAO holders can **unstake** from a subnet by converting subnet-specific alpha tokens back to TAO through the subnet's automated market maker (AMM). + See also: - [Staking/delegation overview](./delegation) -- [Understanding pricing and anticipating slippage](../dynamic-tao/staking-unstaking-dtao) +- [Understanding pricing and anticipating slippage](../learn/slippage) +- [Price protection when staking](../learn/price-protection) +- [MEV Shield Protection](../sdk/mev-protection.md) +- [Staking with a Proxy](../keys/proxies/staking-with-proxy) :::tip Minimum transaction amount for stake/unstake/move/transfer: 500,000 RAO or 0.0005 TAO. ::: +:::warning Keep your coldkey secure +Staking is a regular operation for most TAO holders. Every time you stake or unstake directly, you must decrypt and use your coldkey—exposing it to potential compromise. + +**For better security, use a [Staking Proxy](../keys/proxies/staking-with-proxy)**. With a `Staking` proxy configured with a delay, you can manage your stake without ever exposing your coldkey. If the proxy is compromised, the delay gives you time to reject unauthorized unstaking attempts. +::: + ## Check your TAO balance -To stake, you'll first need some TAO. Inquire in [Discord](https://discord.com/channels/799672011265015819/1107738550373454028/threads/1331693251589312553) to obtain TAO on Bittensor test network. Alternatively, you can transfer some testnet TAO to your wallet address using the [BTCLI Live Coding Playground](../btcli/btcli-playground.md#transfer). + + +To stake, you'll first need some TAO. Inquire in [Discord](https://discord.com/channels/799672011265015819/1107738550373454028/threads/1331693251589312553) to obtain TAO on Bittensor test network. Alternatively, you can obtain some by completing the [BTCLI Live Coding Playground](../btcli/btcli-playground.md#transfer). :::danger The funds in a crypto wallet are only as secure as your private key and/or seed phrase, and the devices that have access to these. @@ -30,7 +45,7 @@ Test network tokens have no real value. Before managing liquidity on Bittensor m ```python import bittensor as bt sub = bt.Subtensor(network="test") -wallet = bt.wallet( +wallet = bt.Wallet( name="PracticeKey!", hotkey="stakinkey1", ) @@ -49,14 +64,44 @@ import bittensor as bt sub = bt.Subtensor(network="test") subnet = sub.subnet(netuid=1) -print("alpha_to_tao_with_slippage", subnet.alpha_to_tao_with_slippage(100)) -print("alpha_to_tao_with_slippage percentage", subnet.alpha_to_tao_with_slippage(100, percentage=True)) +alpha_amount = bt.Balance.from_tao(100).set_unit(1) + +print("alpha_to_tao_with_slippage", subnet.alpha_to_tao_with_slippage(alpha_amount)) +print("alpha_to_tao_with_slippage percentage", subnet.alpha_to_tao_with_slippage(alpha_amount, percentage=True)) print("tao_to_alpha_with_slippage", subnet.tao_to_alpha_with_slippage(100)) print("tao_to_alpha_with_slippage percentage", subnet.tao_to_alpha_with_slippage(100, percentage=True)) print("tao_to_alpha", subnet.tao_to_alpha(100)) -print("alpha_to_tao", subnet.alpha_to_tao(100)) +print("alpha_to_tao", subnet.alpha_to_tao(alpha_amount)) +``` + +## View top validators in a subnet + +Use the metagraph to view validators and their stakes within a subnet. This helps you identify top validators before deciding where to stake. + +```python +import bittensor as bt + +sub = bt.Subtensor(network="test") +netuid = 14 # Change to your desired subnet + +# Fetch the metagraph for the subnet +metagraph = sub.metagraph(netuid=netuid) + +# Get validator hotkeys and their stakes +validators = [] +for uid in range(len(metagraph.hotkeys)): + hotkey = metagraph.hotkeys[uid] + stake = metagraph.stake[uid] + validators.append((uid, hotkey, stake)) + +# Sort by stake (highest first) and show top 10 +top_validators = sorted(validators, key=lambda x: x[2], reverse=True)[:10] + +print(f"Top 10 Validators in Subnet {netuid}:") +for rank, (uid, hotkey, stake) in enumerate(top_validators, start=1): + print(f" {rank}. UID {uid} | Stake: {stake:.4f} | Hotkey: {hotkey}") ``` ## Register on a subnet @@ -68,7 +113,7 @@ import bittensor as bt logging = bt.logging logging.set_info() sub = bt.Subtensor(network="test") -wallet = bt.wallet( +wallet = bt.Wallet( name="ExampleWalletName", hotkey="ExampleHotkey", ) @@ -81,7 +126,7 @@ reg = sub.burned_register(wallet=wallet, netuid=3) ```python import bittensor as bt sub = bt.Subtensor(network="test") -wallet = bt.wallet( +wallet = bt.Wallet( name="ExampleWalletName", hotkey="ExampleHotkey", ) @@ -100,6 +145,21 @@ Note that it uses asynchronous calls to the Bittensor blockchain via the `async_ See [Working with Concurrency](/subnets/asyncio). +:::info +You must create some environment variables before running the following script. To do this, paste the following in your Python environment: + +```python +import os + +os.environ['BT_WALLET_NAME'] = 'STAKE_WALLET' +os.environ['TOTAL_TAO_TO_STAKE'] = '1' +os.environ['NUM_SUBNETS_TO_STAKE_IN'] = '3' +os.environ['NUM_VALIDATORS_PER_SUBNET'] = '3' +``` + +Replace `STAKE_WALLET` with the name of the funded wallet you intend to use. +::: + ```python import os, sys, asyncio import bittensor as bt @@ -107,7 +167,7 @@ import time from bittensor import tao # Load environmental variables -wallet_name=os.environ.get('WALLET') +wallet_name=os.environ.get('BT_WALLET_NAME') total_to_stake=os.environ.get('TOTAL_TAO_TO_STAKE') num_subnets= os.environ.get('NUM_SUBNETS_TO_STAKE_IN') validators_per_subnet = os.environ.get('NUM_VALIDATORS_PER_SUBNET') @@ -142,14 +202,14 @@ else: sys.exit("❌ Invalid NUM_VALIDATORS_PER_SUBNET.") print(f"\n🔓 Using wallet: {wallet_name}") -print(f"📊 Dividing {total_to_stake} TAO across top {validators_per_subnet} validators in each of top {num_subnets} subnets.") +print(f" Dividing {total_to_stake} TAO across top {validators_per_subnet} validators in each of top {num_subnets} subnets.") -wallet = bt.wallet(wallet_name) +wallet = bt.Wallet(wallet_name) # Initialize the subtensor connection within a block scope to ensure it is garbage collected async def stake_batch(subtensor, netuid, top_validators, amount_to_stake): for hk in top_validators: - print(f"💰 Staking {amount_to_stake} to {hk} on subnet {netuid}...") + print(f" Staking {amount_to_stake} to {hk} on subnet {netuid}...") try: results = await asyncio.gather(*[ subtensor.add_stake(wallet=wallet, netuid=netuid, hotkey_ss58=hk, amount=amount_to_stake) for hk in top_validators ] ) print(results) @@ -158,8 +218,8 @@ async def stake_batch(subtensor, netuid, top_validators, amount_to_stake): async def find_top_three_valis(subtensor,subnet): netuid = subnet.netuid - print(f"\n🔍 Subnet {netuid} had {subnet.tao_in_emission} emissions!") - print(f"\n🔍 Fetching metagraph for subnet {netuid}...") + print(f"\n Subnet {netuid} had {subnet.tao_in_emission} emissions!") + print(f"\n Fetching metagraph for subnet {netuid}...") start_time = time.time() metagraph = await subtensor.metagraph(netuid) @@ -172,7 +232,7 @@ async def find_top_three_valis(subtensor,subnet): top_validators = sorted(hk_stake_pairs, key=lambda x: x[1], reverse=True)[0:3] # Print the top 3 validators for this subnet - print(f"\n🏆 Top 3 Validators for Subnet {netuid}:") + print(f"\n Top 3 Validators for Subnet {netuid}:") for rank, (index, stake) in enumerate(top_validators, start=1): print(f" {rank}. Validator index {index} - Stake: {stake}") @@ -183,7 +243,7 @@ async def find_top_three_valis(subtensor,subnet): } async def main(): - async with bt.async_subtensor(network='test') as subtensor: + async with bt.AsyncSubtensor(network='test') as subtensor: print("Fetching information on top subnets by TAO emissions") @@ -212,60 +272,151 @@ async def main(): asyncio.run(main()) ``` +
+ Show sample response! + ```console -🔍 Using wallet: PracticeKey! + Using wallet: PracticeKey! Staking total not specified, dividing 1 TAO across top 3 validators in each of top 3 subnets by default. Usage: `TOTAL_TAO_TO STAKE=1 WALLET=my-wallet-name ./stakerscript.py` Fetching information on top subnets by TAO emissions -🔍 Subnet 277 had τ0.415595173 emissions! + Subnet 277 had τ0.415595173 emissions! -🔍 Fetching metagraph for subnet 277... + Fetching metagraph for subnet 277... -🔍 Subnet 3 had τ0.170148635 emissions! + Subnet 3 had τ0.170148635 emissions! -🔍 Fetching metagraph for subnet 3... + Fetching metagraph for subnet 3... -🔍 Subnet 119 had τ0.137442127 emissions! + Subnet 119 had τ0.137442127 emissions! -🔍 Fetching metagraph for subnet 119... + Fetching metagraph for subnet 119... ✅ Retrieved metagraph for subnet 277 in 1.60 seconds. -🏆 Top 3 Validators for Subnet 277: + Top 3 Validators for Subnet 277: 1. Validator index 5FCPTnjevGqAuTttetBy4a24Ej3pH9fiQ8fmvP1ZkrVsLUoT - Stake: 550446.75 2. Validator index 5EFtEvPcgZHheW36jGXMPMrDETzbngziR3DPPVVp5L5Gt7Wo - Stake: 123175.8515625 3. Validator index 5GNyf1SotvL34mEx86C2cvEGJ563hYiPZWazXUueJ5uu16EK - Stake: 54379.609375 ✅ Retrieved metagraph for subnet 119 in 1.97 seconds. -🏆 Top 3 Validators for Subnet 119: + Top 3 Validators for Subnet 119: 1. Validator index 5FCPTnjevGqAuTttetBy4a24Ej3pH9fiQ8fmvP1ZkrVsLUoT - Stake: 231810.8125 2. Validator index 5FRxKzKrBDX3cCGqXFjYb6zCNC7GMTEaam1FWtsE8Nbr1EQJ - Stake: 118400.6328125 3. Validator index 5CFZ9xDaFQVLA9ERsTs9S3i6jp1VDydvjQH5RDsyWCCJkTM4 - Stake: 30794.974609375 ✅ Retrieved metagraph for subnet 3 in 2.00 seconds. -🏆 Top 3 Validators for Subnet 3: + Top 3 Validators for Subnet 3: 1. Validator index 5EHammhTy9rV9FhDdYeFY98YTMvU8Vz9Zv2FuFQQQyMTptc6 - Stake: 285393.71875 2. Validator index 5FupG35rCCMghVEAzdYuxxb4SWHU7HtpKeveDmSoyCN8vHyb - Stake: 190750.453125 3. Validator index 5FCPTnjevGqAuTttetBy4a24Ej3pH9fiQ8fmvP1ZkrVsLUoT - Stake: 57048.80859375 -💰 Staking τ0.111111111 to 5FCPTnjevGqAuTttetBy4a24Ej3pH9fiQ8fmvP1ZkrVsLUoT on subnet 277... -💰 Staking τ0.111111111 to 5EFtEvPcgZHheW36jGXMPMrDETzbngziR3DPPVVp5L5Gt7Wo on subnet 277... -💰 Staking τ0.111111111 to 5GNyf1SotvL34mEx86C2cvEGJ563hYiPZWazXUueJ5uu16EK on subnet 277... + Staking τ0.111111111 to 5FCPTnjevGqAuTttetBy4a24Ej3pH9fiQ8fmvP1ZkrVsLUoT on subnet 277... + Staking τ0.111111111 to 5EFtEvPcgZHheW36jGXMPMrDETzbngziR3DPPVVp5L5Gt7Wo on subnet 277... + Staking τ0.111111111 to 5GNyf1SotvL34mEx86C2cvEGJ563hYiPZWazXUueJ5uu16EK on subnet 277... Enter your password: Decrypting... [True, True, True] -💰 Staking 0.111111111इ to 5EHammhTy9rV9FhDdYeFY98YTMvU8Vz9Zv2FuFQQQyMTptc6 on subnet 3... -💰 Staking 0.111111111इ to 5FupG35rCCMghVEAzdYuxxb4SWHU7HtpKeveDmSoyCN8vHyb on subnet 3... -💰 Staking 0.111111111इ to 5FCPTnjevGqAuTttetBy4a24Ej3pH9fiQ8fmvP1ZkrVsLUoT on subnet 3... + Staking 0.111111111इ to 5EHammhTy9rV9FhDdYeFY98YTMvU8Vz9Zv2FuFQQQyMTptc6 on subnet 3... + Staking 0.111111111इ to 5FupG35rCCMghVEAzdYuxxb4SWHU7HtpKeveDmSoyCN8vHyb on subnet 3... + Staking 0.111111111इ to 5FCPTnjevGqAuTttetBy4a24Ej3pH9fiQ8fmvP1ZkrVsLUoT on subnet 3... [True, True, True] -💰 Staking 0.111111111γ to 5FCPTnjevGqAuTttetBy4a24Ej3pH9fiQ8fmvP1ZkrVsLUoT on subnet 119... -💰 Staking 0.111111111γ to 5FRxKzKrBDX3cCGqXFjYb6zCNC7GMTEaam1FWtsE8Nbr1EQJ on subnet 119... -💰 Staking 0.111111111γ to 5CFZ9xDaFQVLA9ERsTs9S3i6jp1VDydvjQH5RDsyWCCJkTM4 on subnet 119... + Staking 0.111111111γ to 5FCPTnjevGqAuTttetBy4a24Ej3pH9fiQ8fmvP1ZkrVsLUoT on subnet 119... + Staking 0.111111111γ to 5FRxKzKrBDX3cCGqXFjYb6zCNC7GMTEaam1FWtsE8Nbr1EQJ on subnet 119... + Staking 0.111111111γ to 5CFZ9xDaFQVLA9ERsTs9S3i6jp1VDydvjQH5RDsyWCCJkTM4 on subnet 119... [True, True, True] ``` +## Unstaking From a Validator + +Unstaking is the process of withdrawing your staked TAO from validators, converting subnet-specific alpha tokens back to TAO through the subnet's AMM. When you unstake, slippage applies similar to staking operations—your transaction affects pool prices, with larger amounts experiencing more slippage. + +Here's a basic example of unstaking from a specific validator on a specific subnet. + +`amount` specifies the amount of alpha to unstake. + +```python +import asyncio +import bittensor as bt +async def main(): + async with bt.AsyncSubtensor(network='test') as subtensor: + wallet = bt.Wallet(name="PracticeKey!") + wallet.unlock_coldkey() + + + result = await subtensor.unstake( + wallet=wallet, + netuid=17, + hotkey_ss58="5FvC...", + amount=bt.Balance.from_tao(10), + wait_for_inclusion=True, + wait_for_finalization=False, + ) + + print(result) +asyncio.run(main()) +``` + +To unstake all your stake from a specific validator on a subnet: + +```python +import asyncio +import bittensor as bt + +async def main(): + async with bt.async_subtensor(network='test') as subtensor: + wallet = bt.Wallet(name="ExampleWallet") + wallet.unlock_coldkey() + + # Unstake all from this validator + result = await subtensor.unstake_all( + wallet=wallet, + netuid=1, + hotkey_ss58="5FCP...", + rate_tolerance=0.005, + wait_for_inclusion=True, + wait_for_finalization=True, + ) + + print(result) + +asyncio.run(main()) +``` + +```console +Enter your password: +Decrypting... +ExtrinsicResponse: + success: True + message: Success + extrinsic_function: unstake_all_extrinsic + extrinsic: {'account_id': '0xb0fec20486c9cf366c90bf1c93ad1bbc6b50596653f8832ee6c40483aa73d851', 'signature': {'Sr25519': '0xee6ee6315786232da41a7cc79e583a41179dd28357843ba1d017c11e8d1d52185586bacd5aad5ac52d205a9bcaa49725a572784b1f2a45dbbd8e10d16a0a1e82'}, 'call_function': 'remove_stake_full_limit', 'call_module': 'SubtensorModule', 'call_args': {'hotkey': '5FupG35rCCMghVEAzdYuxxb4SWHU7HtpKeveDmSoyCN8vHyb', 'netuid': 3, 'limit_price': τ0.110584903}, 'nonce': 629, 'era': {'period': 128, 'current': 5844829}, 'tip': 0, 'asset_id': {'tip': 0, 'asset_id': None}, 'mode': 'Disabled', 'signature_version': 1, 'address': '0xb0fec20486c9cf366c90bf1c93ad1bbc6b50596653f8832ee6c40483aa73d851', 'call': {'call_function': 'remove_stake_full_limit', 'call_module': 'SubtensorModule', 'call_args': {'hotkey': '5FupG35rCCMghVEAzdYuxxb4SWHU7HtpKeveDmSoyCN8vHyb', 'netuid': 3, 'limit_price': τ0.110584903}}} + extrinsic_fee: τ0.000136575 + extrinsic_receipt: ExtrinsicReceipt + transaction_tao_fee: None + transaction_alpha_fee: None + data: None + error: None +``` +
+ ## Asynchronously unstake from low-emissions validators -The script below will unstake from the delegations (stakes) to validators on particular subnets that have yielded the least emissions in the last tempo. +The more advanced script below will unstake from the delegations (stakes) to validators on particular subnets that have yielded the least emissions in the last tempo. + +:::info +You must create some environment variables before running the following script. To do this, paste the following in your Python environment: + +```python +import os + +os.environ['WALLET'] = 'STAKE_WALLET' +os.environ['TOTAL_TAO_TO_STAKE'] = '1' +os.environ['NUM_SUBNETS_TO_STAKE_IN'] = '3' +os.environ['NUM_VALIDATORS_PER_SUBNET'] = '3' +``` + +Replace `STAKE_WALLET` with the name of the funded wallet you intend to use. +::: ```python import os, sys, asyncio, time @@ -281,22 +432,19 @@ async def perform_unstake(subtensor, stake, amount): wallet, hotkey_ss58=stake.hotkey_ss58, netuid=stake.netuid, amount=amount ) elapsed = time.time() - start - if result: - print(f"✅ Successfully unstaked {amount} from {stake.hotkey_ss58} on subnet {stake.netuid} in {elapsed:.2f}s") - return True - else: - print(f"❌ Failed to unstake from {stake.hotkey_ss58} on subnet {stake.netuid}") - return False + print(result) + print(f"Time elapsed: {elapsed:.2f}s") + return result.success except Exception as e: print(f"❌ Error during unstake from {stake.hotkey_ss58} on subnet {stake.netuid}: {e}") return False async def main(): - async with bt.async_subtensor(network='test') as subtensor: + async with bt.AsyncSubtensor(network='test') as subtensor: try: # Retrieve all active active stakes asscociated with the coldkey - stakes = await subtensor.get_stake_for_coldkey(wallet_ck) + stakes = await subtensor.get_stake_info_for_coldkey(wallet_ck) except Exception as e: sys.exit(f"❌ Failed to get stake info: {e}") @@ -311,25 +459,25 @@ async def main(): if not stakes: sys.exit("❌ No eligible stakes found to unstake.") - print(f"\n📊 Preparing to unstake from {len(stakes)} validators:\n") + print(f"\n Preparing to unstake from {len(stakes)} validators:\n") for s in stakes: print(f"Validator: {s.hotkey_ss58}\n NetUID: {s.netuid}\n Stake: {s.stake.tao}\n Emission: {s.emission}\n-----------") # Determine how much TAO to unstake per validator - amount_per_stake = total_to_unstake / len(stakes) + amount_per_stake = total_to_unstake.tao / len(stakes) # Prepare concurrent unstake tasks, then execute as a batch tasks = [ - perform_unstake(subtensor, stake, min(amount_per_stake, stake.stake)) + perform_unstake(subtensor, stake, bt.Balance.from_tao(min(amount_per_stake, stake.stake.tao)).set_unit(stake.netuid)) for stake in stakes ] results = await asyncio.gather(*tasks) # Count successes and print final report success_count = sum(results) - print(f"\n🎯 Unstake complete. Success: {success_count}/{len(stakes)}") + print(f"\n Unstake complete. Success: {success_count}/{len(stakes)}") -wallet_name = os.environ.get('WALLET') +wallet_name = os.environ.get('BT_WALLET_NAME') total_to_unstake = os.environ.get('TOTAL_TAO_TO_UNSTAKE') max_stakes_to_unstake = os.environ.get('MAX_STAKES_TO_UNSTAKE') @@ -353,11 +501,11 @@ else: except: sys.exit("invalid number for MAX_STAKES_TO_UNSTAKE") -print(f"🔍 Using wallet: {wallet_name}") -print(f"🧮 Unstaking a total of {total_to_unstake} TAO across up to {max_stakes_to_unstake} lowest-emission validators") +print(f" Using wallet: {wallet_name}") +print(f" Unstaking a total of {total_to_unstake} TAO across up to {max_stakes_to_unstake} lowest-emission validators") total_to_unstake = bt.Balance.from_tao(total_to_unstake) -wallet = bt.wallet(wallet_name) +wallet = bt.Wallet(wallet_name) wallet_ck = wallet.coldkeypub.ss58_address unstake_minimum = 0.0005 # TAO @@ -365,12 +513,15 @@ asyncio.run(main()) ``` +
+ Show sample response! + ```console Unstaking total not specified, defaulting to 1 TAO. -🔍 Using wallet: PracticeKey! -🧮 Unstaking a total of 1 TAO across up to 10 lowest-emission validators + Using wallet: PracticeKey! + Unstaking a total of 1 TAO across up to 10 lowest-emission validators -📊 Preparing to unstake from 10 validators: + Preparing to unstake from 10 validators: Validator: 5GEXJdUXxLVmrkaHBfkFmoodXrCSUMFSgPXULbnrRicEt1kK NetUID: 119 @@ -445,12 +596,14 @@ Decrypting... ✅ Successfully unstaked 0.100000000इ from 5GNyf1SotvL34mEx86C2cvEGJ563hYiPZWazXUueJ5uu16EK on subnet 277 in 10.84s ✅ Successfully unstaked 0.100000000इ from 5CFZ9xDaFQVLA9ERsTs9S3i6jp1VDydvjQH5RDsyWCCJkTM4 on subnet 119 in 10.89s -🎯 Unstake complete. Success: 10/10 + Unstake complete. Success: 10/10 ``` +
+ ## Move stake -This stake moves stake from one delegate to another. +This operation moves stake from one delegate to another. ```python import asyncio @@ -461,24 +614,24 @@ from bittensor.core.async_subtensor import AsyncSubtensor async def main(): async with AsyncSubtensor("test") as subtensor: - wallet = bt.wallet( - name="PracticeKey!" - ) + wallet = bt.Wallet() wallet.unlock_coldkey() + amount = bt.Balance.from_tao(1.0).set_unit(5) # set amount in origin subnet result = await subtensor.move_stake(wallet = wallet, - origin_hotkey = "5DyHnV9Wz6cnefGfczeBkQCzHZ5fJcVgy7x1eKVh8otMEd31", + origin_hotkey_ss58 = "5DyHnV9Wz6cnefGfczeBkQCzHZ5fJcVgy7x1eKVh8otMEd31", origin_netuid = 5, - destination_hotkey = "5HidY9Danh9NhNPHL2pfrf97Zboew3v7yz4abuibZszcKEMv", + destination_hotkey_ss58 = "5HidY9Danh9NhNPHL2pfrf97Zboew3v7yz4abuibZszcKEMv", destination_netuid = 18, - amount = bt.Balance.from_tao(1.0), + amount = amount, wait_for_inclusion = True, wait_for_finalization = False, ) - if result: - print("Stake was successfully moved!") - else: - print("Failed to move stake.") + print(result) # Because move_stake is asynchronous, we run it in an event loop: asyncio.run(main()) ``` + +:::info +Replace `WALLET_NAME` with the name of the funded wallet you intend to use. +::: diff --git a/docs/staking-and-delegation/managing-stake-tao-app.md b/docs/staking-and-delegation/managing-stake-tao-app.md deleted file mode 100644 index 4e8689683c..0000000000 --- a/docs/staking-and-delegation/managing-stake-tao-app.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: "Managing Stake with tao.app" ---- - -[TAO.app](https://tao.app) offers a portal to real-time tokenomic data about the Bittensor ecoystems and all its subnets, and allows users to securely manage their stake using the Bittensor wallet browser extension. - -## Subnets Explorer - -## Metrics/dTAO Market Overview - -The dTAO Market Overview panel gives ecosystem users and investors an overview into the many measurements for assessing various important aspects of the state of the overall TAO ecosystem. - -### Sum of Alpha Prices - -The Sum of Alpha Prices is the combined value of all active subnet token prices (Alpha tokens) relative to TAO. - -#### How it works - -When there's no trading activity, the AMM mechanism causes Alpha token prices to converge back toward 1, maintaining price equilibrium. -When trading is active, prices diverge &mdash often significantly &mdash based on supply/demand dynamics within each subnet's liquidity pool. -Because prices are AMM-driven, the sum can theoretically grow infinitely if there's significant buy pressure on multiple subnet at once. - -#### Why it matters - -The most useful aspect of this overview metric is that it can give you, as an ecosystem participant, insight into the level of speculation currently in the market overall over a given time period. - -When the sum is closer to around 1 for the time period specified, it suggest that there has been little market pressure, low activity, and/or natural decay back to equilibrium between TAO and Alpha tokens. -When the sum is greater than 1 for the time period specified, it suggests that at least some subnets are experiencing buying pressure, which is driving up prices. -When there is a high sum (e.g. 10+) in a relatively short time frame, it could indicate widespread speculation, possibly even signaling a bubble, or at least high usage/subnet demand. - -## Metrics/dTAO Market Overview - -The dTAO Market Overview panel gives ecosystem users and investors an overview into the many measurements for assessing various important aspects of the state of the overall TAO ecosystem. - -### Sum of Alpha Prices - -The Sum of Alpha Prices is the combined value of all active subnet token prices (Alpha tokens) relative to TAO. - -#### How it works - -When there's no trading activity, the AMM mechanism causes Alpha token prices to converge back toward 1, maintaining price equilibrium. -When trading is active, prices diverge &mdash often significantly &mdash based on supply/demand dynamics within each subnet's liquidity pool. -Because prices are AMM-driven, the sum can theoretically grow infinitely if there's significant buy pressure on multiple subnet at once. - -#### Why it matters - -The most useful aspect of this overview metric is that it can give you, as an ecosystem participant, insight into the level of speculation currently in the market overall over a given time period. - -When the sum is closer to around 1 for the time period specified, it suggest that there has been little market pressure, low activity, and/or natural decay back to equilibrium between TAO and Alpha tokens. -When the sum is greater than 1 for the time period specified, it suggests that at least some subnets are experiencing buying pressure, which is driving up prices. -When there is a high sum (e.g. 10+) in a relatively short time frame, it could indicate widespread speculation, possibly even signaling a bubble, or at least high usage/subnet demand. - -## Subnet details diff --git a/docs/staking-and-delegation/root-claims/index.md b/docs/staking-and-delegation/root-claims/index.md new file mode 100644 index 0000000000..392d2de693 --- /dev/null +++ b/docs/staking-and-delegation/root-claims/index.md @@ -0,0 +1,42 @@ +--- +title: "Root Claim: Overview" +--- + +# Root Claim: Overview + +The Root Claim feature in Bittensor allows stakers who stake to validators on the [Root Subnet (a.k.a. Subnet Zero)](../subnets/understanding-subnets#subnet-zero) to choose whether their staking dividends will accumulate as alpha, or be converted immediately to TAO. + +- In **Swap** mode (default), the alpha is automatically converted to TAO at the current alpha-to-TAO rate and restaked on the root subnet. +- In **Keep** mode, the earned alpha accumulates on the subnet(s) that generated it. + +This design creates flexibility for stakers. Choosing `Swap` favors long-term TAO accumulation and minimum risk, while `Keep` favors remaining invested in subnets and therefore maximizing possible reward while accepting some risk, due to fluctuation of token values. + +:::info +The initial TAO staked to the validator remain staked on root in both modes. Only the alpha dividends from subnets are treated differently. + +Dividends are divided between TAO and alpha based on [Root Proportion](../resources/glossary#root-proportion) +::: + + +### Claiming dividends + +There are two ways to process claims: + +- **Automatic Claims**: Each block, the blockchain selects accounts to claim rewards. Auto-claims happen randomly—roughly once every two days per account. +- **Manual Claims**: You can trigger a claim at any time using the `claim_root()` extrinsic and specifying the subnets you want to claim alpha dividends from, specifying up to five subnets to claim alpha dividends from. + +Your configured `Keep` or `Swap` setting is applied automatically to both manual and automatic claims. To change this, you must call the `set_root_claim_type` extrinsic. + +See [Managing Root Claims](../../staking-and-delegation/root-claims/managing-root-claims). + +:::info claim threshold +Automatic claims are only processed when the accumulated alpha dividends exceed the minimum threshold of 500,000 RAO (0.0005 TAO equivalent). This prevents small, frequent transactions from increasing network load. The threshold is configurable per subnet by the subnet owner or root via the `sudo_set_root_claim_threshold` extrinsic. + + +::: + +:::note Flow-based emissions +Root claim swaps (when using **Swap** mode) do not count as TAO outflows for the purpose of subnet flow-based emissions calculations. This means claiming and converting alpha dividends to TAO does not negatively impact a subnet's emission allocation. + +See [Emissions: Exceptions to Inflows/Outflows](../learn/emissions#tao-reserve-injection) for details. +::: diff --git a/docs/staking-and-delegation/root-claims/managing-root-claims.md b/docs/staking-and-delegation/root-claims/managing-root-claims.md new file mode 100644 index 0000000000..13c051298a --- /dev/null +++ b/docs/staking-and-delegation/root-claims/managing-root-claims.md @@ -0,0 +1,442 @@ +--- +title: "Managing Root Claims" +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; +import { SdkVersion } from "../../sdk/_sdk-version.mdx"; + +# Managing Root Claims + +This page covers how to configure, monitor, and claim root dividends, i.e. dividends from staking to validators on the Root Subnet. See [Root Claim](./) + +## Prerequisites + +- A coldkey with TAO staked on the root network (subnet 0). +- A hotkey that's registered and staked on one or more subnets. +- To set your Root Claim preference requires a transaction fee, so you must be able to cover the cost of the fee. + +## Set a claim type + +Your claim type determines what happens to your root dividends when they're claimed: + +**Claim Types:** + +- **Swap** (default): Future Root Alpha Emissions are swapped to TAO and added to root stake. +- **Keep**: Future Root Alpha Emissions are kept as Alpha tokens. +- **KeepSubnets**: Keep Alpha for specific subnets only; all other subnets are swapped to TAO. This gives you fine-grained control over which subnet tokens you want to hold. Note that this is a new feature and not yet supported by BTCLI and the SDK (coming soon). + + + + + +Use the `btcli stake set-claim` command to set your root claim type: + +```bash +btcli stake set-claim +``` + +The command will display your current setting and prompt for changes. + +
+Show Sample Output + +```console + Current root claim type: + + Coldkey Root Claim Type + ────────────────────────────────────────────────────────────────── + 5G4mxrN8msvc4jjwp7xoBrtAejTfAMLCMTFGCivY5inmySbq Swap + +Select new root claim type [Swap/Keep] (Swap): Keep + +Changing root claim type from 'Swap' -> 'Keep' + +Note: With 'Keep', future root alpha emissions will be kept as Alpha tokens. + +Do you want to proceed? [y/n]: y +Enter your password: +Decrypting... +✅ Successfully set root claim type to 'Keep' +✅ Your extrinsic has been included as 5751523-6 +``` + +
+ +
+ + + + +Use the `set_root_claim_type()` method to set your root claim type: + +```python +import asyncio +from bittensor_wallet import Wallet +from bittensor.core.async_subtensor import AsyncSubtensor + +async def main(): + # Initialize wallet and subtensor + wallet = Wallet(name="validator", hotkey="default") + async with AsyncSubtensor(network="local") as subtensor: + # Set claim type to 'Keep' to retain Alpha tokens + response = await subtensor.set_root_claim_type( + wallet=wallet, + new_root_claim_type="Keep", # or "Swap" for TAO accumulation + wait_for_finalization=True + ) + + print(response) + if response.extrinsic_receipt: + print(f"Transaction hash: {response.extrinsic_receipt.extrinsic_hash}") + +asyncio.run(main()) +``` + +``` +Enter your password: +Decrypting... +✅ Successfully set root claim type to 'Keep' +Transaction hash: 0xe3a387589b0ae6abfd7172088cc7853224f304e0bc4c3688b335a6f6e8f9a508 +``` + +You can also query the current claim type: + +```python +import asyncio +from bittensor_wallet import Wallet +from bittensor.core.async_subtensor import AsyncSubtensor + +async def main(): + wallet = Wallet(name="validator", hotkey="default") + async with AsyncSubtensor(network="finney") as subtensor: + claim_type = await subtensor.get_root_claim_type( + coldkey_ss58=wallet.coldkeypub.ss58_address + ) + print(f"Current root claim type: {claim_type}") + +asyncio.run(main()) +``` + + + + +1. Navigate to **Developer** → **Extrinsics** +2. Select your coldkey account +3. Choose the pallet: `subtensorModule` and choose the `setRootClaimType(newRootClaimType)` extrinsic. +4. Select your desired claim type: + - `Swap` - convert all Alpha to TAO (default) + - `Keep` - retain all Alpha tokens + - `KeepSubnets` - keep Alpha for specific subnets only (requires specifying subnet IDs) +5. Click **Submit Transaction** and sign. + + +
+ + +## Monitor claim status and types + +### View claimable amounts with stake list + +Output from the `btcli stake list` command includes a **Claimable** column, which shows the amount of unclaimed, accumulated ALPHA emissions available for manual claiming from each subnet. + +```bash +btcli stake list +``` + +For a live-updating view: + +```bash +btcli stake list --live +``` + +
+Show Sample Output + +```console + Hotkey: Example (...) + Network: finney + + + ┃ ┃ Value ┃ ┃ Price ┃ ┃ Emission ┃ Emission ┃ Claimable + Netuid ┃ Name ┃ (α x τ/α) ┃ Stake (α) ┃ (τ_in/α_in) ┃ Registered ┃ (α/block) ┃ (Τ/block) ┃ (α) +━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━ + 0 │ τ root │ τ 46.93 │ Τ 46.93 │ 1.0000 τ/Τ │ YES │ Τ 0.0000 │ 0.0000 τ │ - + 4 │ δ Targon │ τ 0.30 │ 6.88 δ │ 0.0437 τ/δ │ YES │ 0.0012 δ │ 0.0000 τ │ 0.00031 δ + 120 │ ⲃ Affine │ τ 0.00 │ 0.01 ⲃ │ 0.0551 τ/ⲃ │ NO │ 0.0013 ⲃ │ 0.0000 τ │ 0.00107 ⲃ + 119 │ Ⲃ Akihabara │ τ 0.00 │ 0.01 Ⲃ │ 0.0176 τ/Ⲃ │ NO │ 0.0017 Ⲃ │ 0.0000 τ │ 0.00199 Ⲃ + 62 │ ز Ridges │ τ 0.00 │ 0.00 ز │ 0.0676 τ/ز │ NO │ 0.0011 ز │ 0.0000 τ │ 0.00050 ز + 64 │ ش Chutes │ τ 0.00 │ 0.00 ش │ 0.0783 τ/ش │ NO │ 0.0008 ش │ 0.0000 τ │ 0.00025 ش + 115 │ Ѕ SoulX │ τ 0.00 │ 0.01 Ѕ │ 0.0125 τ/Ѕ │ NO │ 0.0015 Ѕ │ 0.0000 τ │ 0.00190 Ѕ + 51 │ ת lium.io │ τ 0.00 │ 0.00 ת │ 0.0548 τ/ת │ NO │ 0.0004 ת │ 0.0000 τ │ 0.00039 ת + 41 │ נ Sportstensor │ τ 0.00 │ 0.00 נ │ 0.0320 τ/נ │ NO │ 0.0009 נ │ 0.0000 τ │ 0.00045 נ + 8 │ θ Proprietary Tradi... │ τ 0.00 │ 0.00 θ │ 0.0286 τ/θ │ NO │ 0.0004 θ │ 0.0000 τ │ 0.00050 θ +``` + +
+ +### Query claimable ALPHA + + + + +Using the following methods, you can query the claimable stake for a specific subnet. + +```python +import asyncio +from bittensor_wallet import Wallet +from bittensor.core.async_subtensor import AsyncSubtensor + +async def main(): + wallet = Wallet(name="validator", hotkey="default") + async with AsyncSubtensor(network="local") as subtensor: + # Get claimable stake for a specific subnet + netuid = 2 + claimable_stake = await subtensor.get_root_claimable_stake( + coldkey_ss58=wallet.coldkeypub.ss58_address, + hotkey_ss58=wallet.hotkey.ss58_address, + netuid=netuid + ) + print(f"Claimable stake for subnet {netuid}: {claimable_stake}") + +asyncio.run(main()) +``` + + + + +To see how much you can claim from a specific subnet: + +1. Navigate to **Developer** → **Chain State** +2. Select the storage query: `subtensorModule` → `rootClaimable(AccountId)` +3. Enter your hotkey address +4. Click the **+** button to query + + + + +--- + +### Check claimed ALPHA + + + + +You can check how much you've already claimed from a subnet: + +```python +import asyncio +from bittensor_wallet import Wallet +from bittensor.core.async_subtensor import AsyncSubtensor + +async def main(): + wallet = Wallet(name="validator", hotkey="default") + async with AsyncSubtensor(network="local") as subtensor: + # Get already claimed stake for a specific subnet + netuid = 2 + claimed_stake = await subtensor.get_root_claimed( + coldkey_ss58=wallet.coldkeypub.ss58_address, + hotkey_ss58=wallet.hotkey.ss58_address, + netuid=netuid + ) + print(f"Already claimed stake for subnet {netuid}: {claimed_stake}") + +asyncio.run(main()) +``` + + + + +To see how much you've already claimed from a subnet: + +1. Navigate to **Developer** → **Chain State** +2. Select the storage query: `subtensorModule` → `rootClaimed(AccountId, AccountId, u16)` +3. Fill the parameters: + - `AccountId`: Enter the account hotkey. + - `AccountId`: Enter the account coldkey. + - `u16`: Enter the subnet uid. +4. Click the **+** button to query + + + + +--- + +## Trigger a manual claim + +The network will eventually process your pending emissions automatically. However, you can choose to manually claim your accumulated ALPHA without waiting, for a small extrinsic fee. See [Transaction Fees](../../learn/fees). + +To manually trigger a claim: + + + + +Use the `btcli stake process-claim` command to manually claim your accumulated root network emissions: + +```console +btcli st process-claim --verbose +``` + +
+Show Sample Output + +``` + Claimable emissions + + Netuid Current Stake Claimable Hotkey Identity + ───────────────────────────────────────────────────────────────────────────────────────────────────────────── + 1 0.0035 α 0.0005 α 5CoZxgtfhcJKX2HmkwnsN18KbaT9aih9eF3b6qVPTgAUbifj TAO.app + 0.0015 α 0.0002 α 5G3wMP3g3d775hauwmAZioYFVZYnvw6eY46wkFy8hEWD5KP3 Openτensor Foundaτion + 2 0.0036 β 0.0005 β 5CoZxgtfhcJKX2HmkwnsN18KbaT9aih9eF3b6qVPTgAUbifj TAO.app + 0.0015 β 0.0002 β 5G3wMP3g3d775hauwmAZioYFVZYnvw6eY46wkFy8hEWD5KP3 Openτensor Foundaτion + 3 0.0033 γ 0.0005 γ 5CoZxgtfhcJKX2HmkwnsN18KbaT9aih9eF3b6qVPTgAUbifj TAO.app + 2.6817 γ 0.0002 γ 5G3wMP3g3d775hauwmAZioYFVZYnvw6eY46wkFy8hEWD5KP3 Openτensor Foundaτion + 4 6.8791 δ 0.0003 δ 5CoZxgtfhcJKX2HmkwnsN18KbaT9aih9eF3b6qVPTgAUbifj TAO.app + 0.0020 δ 0.0003 δ 5G3wMP3g3d775hauwmAZioYFVZYnvw6eY46wkFy8hEWD5KP3 Openτensor Foundaτion + 5 0.0033 ε 0.0004 ε 5CoZxgtfhcJKX2HmkwnsN18KbaT9aih9eF3b6qVPTgAUbifj TAO.app + 0.0014 ε 0.0002 ε 5G3wMP3g3d775hauwmAZioYFVZYnvw6eY46wkFy8hEWD5KP3 Openτensor Foundaτion + +... + +Enter up to 5 netuids to claim from (comma-separated) +(1,2,3,4,5): 1,2,3,4,5 + +Estimated extrinsic fee: 0.000046377 τ +Do you want to proceed? [y/n]: +``` + +
+ +
+ + +Use the `claim_root()` method to manually claim your accumulated root network emissions: + +```python +import asyncio +from bittensor_wallet import Wallet +from bittensor.core.async_subtensor import AsyncSubtensor + +async def main(): + # Initialize wallet and subtensor + wallet = Wallet(name="validator", hotkey="default") + async with AsyncSubtensor(network="local") as subtensor: + # Specify the subnets to claim from (up to 5 at once) + netuids = [1, 2, 3] + + # Claim root emissions + response = await subtensor.claim_root( + wallet=wallet, + netuids=netuids, + wait_for_finalization=True + ) + + print(response) + if response.extrinsic_receipt: + print(f"Transaction hash: {response.extrinsic_receipt.extrinsic_hash}") + +asyncio.run(main()) +``` + +```console +Enter your password: +Decrypting... +✅ Successfully claimed root emissions from subnets [1, 2, 3] +Transaction hash: 0x0e153ac52f63dde1be1854f00daf09f643d1491c6e6b4103cdd5b04591921e3f +``` + +You can also check claimable amounts before claiming: + +```python +import asyncio +from bittensor_wallet import Wallet +from bittensor.core.async_subtensor import AsyncSubtensor + +async def main(): + wallet = Wallet(name="validator", hotkey="default") + async with AsyncSubtensor(network="finney") as subtensor: + # Get stake info which includes claimable amounts + stake_info = await subtensor.get_stake_info_for_coldkey( + coldkey_ss58=wallet.coldkeypub.ss58_address + ) + + if stake_info: + print("Claimable emissions by subnet:") + for info in stake_info: + if hasattr(info, 'claimable') and info.claimable > 0: + print(f" Subnet {info.netuid}: {info.claimable}") + else: + print("No claimable emissions found") + +asyncio.run(main()) +``` + + + + +1. Navigate to **Developer** → **Extrinsics** +2. Select your coldkey account +3. Choose: `subtensorModule` → `claimRoot(subnets)` +4. Add subnet IDs to claim from: + - Click **Add item** for each subnet + - Enter the netuid (e.g., `1`, `2`, `3`) + - You can claim from up to 5 subnets at once. +5. Click **Submit Transaction** and sign + + +
+ +--- + +## Inspecting the Metagraph: View claim types for registered neurons + +When viewing any subnet's metagraph, the **Claim Type** column shows the claim setting for registered neurons who have stake: + +```bash +btcli subnets metagraph --netuid 14 +``` + +
+Show Sample Output + +```console + + + Subnet 14: TAOHash + Network: finney • Mechanism 0 + + UID ┃ Stake (ξ) ┃ Alpha (ξ) ┃ Tao (τ) ┃ Dividends ┃ Incentive ┃ Emissions (ξ) ┃ Hotkey ┃ Coldkey ┃ Identity ┃ Claim Type +━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━ + 29 │ 475.38k テ │ 395.29k テ │ τ 80.09k │ 0.265568 │ 0.999588 │ 187.260435 テ │ 5Cf4LP │ 5CKhH8 │ Owner14 (*Owner) │ Swap + 3 │ 784.52k テ │ 294.40k テ │ τ 490.12k │ 0.438437 │ 0.000000 │ 64.894660 テ │ 5C59tt │ 5GZSAg │ RoundTable21 │ Swap + 243 │ 155.00k テ │ 44.71k テ │ τ 110.29k │ 0.086595 │ 0.000000 │ 12.817256 テ │ 5Ev8Zs │ 5HBtpw │ Openτensor Foundaτion │ Swap + 147 │ 138.50k テ │ 51.49k テ │ τ 87.01k │ 0.077363 │ 0.000000 │ 11.450874 テ │ 5DfmoR │ 5E9fVY │ Yuma, a DCG Company │ Swap + 191 │ 66.50k テ │ 17.62 テ │ τ 66.48k │ 0.060868 │ 0.000000 │ 9.010114 テ │ 5GYfuc │ 5FHxxe │ Kraken │ Swap + 99 │ 53.92k テ │ 1.77k テ │ τ 52.14k │ 0.030121 │ 0.000000 │ 4.458510 テ │ 5HmkM6 │ 5Eq8b9 │ Crucible Labs │ Swap + 4 │ 50.66k テ │ 26.55k テ │ τ 24.10k │ 0.028290 │ 0.000000 │ 4.188392 テ │ 5GRhNw │ 5Fuzgv │ Rizzo (Insured) │ Swap + 70 │ 10.85k テ │ 1.16k テ │ τ 9.69k │ 0.006058 │ 0.000000 │ 0.897160 テ │ 5G9hfk │ 5Ek8i6 │ 1T1B.AI │ Swap + 235 │ 9.38k テ │ 0.77 テ │ τ 9.38k │ 0.005234 │ 0.000000 │ 0.775315 テ │ 5HbScN │ 5F4Xca │ ~ │ Swap + 89 │ 5.00k テ │ 0.02 テ │ τ 5.00k │ 0.000000 │ 0.000000 │ 0.000000 テ │ 5GKH9F │ 5GcCZ2 │ Taostats │ Swap + 59 │ 2.54k テ │ 484.57 テ │ τ 2.05k │ 0.001404 │ 0.000000 │ 0.209705 テ │ 5FZGu1 │ 5CMUVy │ MUV │ Swap + 207 │ 533.28 テ │ 533.28 テ │ τ 0.00 │ 0.000000 │ 0.000000 │ 0.000000 テ │ 5HTSgd │ 5GNE4s │ tao5 (taohash key) │ - + 21 │ 350.18 テ │ 350.18 テ │ τ 0.00 │ 0.000000 │ 0.000000 │ 0.000000 テ │ 5GND7u │ 5FNRRL │ ~ │ - + 134 │ 116.72 テ │ 116.72 テ │ τ 0.00 │ 0.000000 │ 0.000000 │ 0.000000 テ │ 5Esg46 │ 5ECNhc │ ~ │ - + +... + +────┼────────────┼────────────┼────────────┼───────────┼───────────┼───────────────┼────────┼─────────┼───────────────────────┼──────────── │ 1.75m テ │ 816.98k テ │ 936.37k テ │ 1.000 │ │ 296.0217 ξ │ │ │ │ + + +Subnet 14: TAOHash + Total mechanisms: 1 + Owner: 5CKhH8nKAhXLmqxwaXzFtVFgxqwwnyckXG8qLpmGtzVJH9Ri (Owner14) + Rate: 0.0104 τ/テ + EMA TAO Inflow: τ 0.0102 + Emission: τ 0.0099 + TAO Pool: τ 21.15k + Alpha Pool: 2.04m テ + Tempo: 150/360 + Registration cost (recycled): τ 0.0005 +``` + +
diff --git a/docs/staking-and-delegation/stakers-btcli-guide.md b/docs/staking-and-delegation/stakers-btcli-guide.md index 118a6508a0..a006cb4bf2 100644 --- a/docs/staking-and-delegation/stakers-btcli-guide.md +++ b/docs/staking-and-delegation/stakers-btcli-guide.md @@ -6,53 +6,61 @@ title: "Staker's Guide to `BTCLI`" This page prepares the reader for managing TAO and alpha stake using `btcli` in a secure manner. -For general coverage of `btcli` security and usage considerations across persona, see: [Bittensor CLI: Permissions Guide](../btcli-permissions) +:::note Transaction Fees +Staking and unstaking operations incur transaction fees. See [Transaction Fees in Bittensor](../learn/fees.md) for details. +::: + +For general coverage of `btcli` security and usage considerations across persona, see: [Bittensor CLI: Permissions Guide](../btcli/btcli-permissions) ## Intro -Stakers enter value into the Bittensor network by acquiring TAO and staking or *delegating* it to validators to support their work. As validators extract emissions, a certain percentage goes back to stakers. +Stakers enter value into the Bittensor network by acquiring TAO and staking or _delegating_ it to validators to support their work. As validators extract emissions, a certain percentage goes back to stakers. Stakers must be familiar with operations related to managing the TAO and staked alpha tokens in their Bittensor wallet balances. -Account balances are public information, and can be viewed *without* using a coldkey, even in an insecure environment. However, any account operation that **changes the state** of the Bittensor chain, such as a balance transfer or staking operation, must be signed with your wallet's coldkey private key. +Account balances are public information, and can be viewed _without_ using a coldkey, even in an insecure environment. However, any account operation that **changes the state** of the Bittensor chain, such as a balance transfer or staking operation, must be signed with your wallet's coldkey private key. -Performing these functions requires using a **coldkey**, and hence must be performed in a [**highly secure environment**](../getting-started/coldkey-hotkey-security) for any wallet connected to real (mainnet) TAO balance. A leak of your coldkey can lead to a catastrophic loss of funds. +Performing these functions requires using a **coldkey**, and hence must be performed in a [**highly secure environment**](../keys/coldkey-hotkey-security) for any wallet connected to real (mainnet) TAO balance. A leak of your coldkey can lead to a catastrophic loss of funds. -Any operation can be practiced against Bittensor testnet using throw-away keys *not* connected to your real TAO balances on mainnet. +Any operation can be practiced against Bittensor testnet using throw-away keys _not_ connected to your real TAO balances on mainnet. :::tip Stakers only need a coldkey. Unless you plan to mine, validate, or participate in governance, you do not need a hotkey. ::: See: + - [Staking/Delegation Overview](./delegation.md) -- [Bittensor CLI: Permissions Guide](../btcli-permissions) -- [Wallets, Coldkeys and Hotkeys in Bittensor](../getting-started/wallets) -- [Coldkey and Hotkey Workstation Security](../getting-started/coldkey-hotkey-security) +- [Bittensor CLI: Permissions Guide](../btcli/btcli-permissions) +- [Wallets, Coldkeys and Hotkeys in Bittensor](../keys/wallets) +- [Coldkey and Hotkey Workstation Security](../keys/coldkey-hotkey-security) ## Requirements for wallet, balance and staking functions ### Wallets - - View balances and stake—only coldkey public key is required (permissionless) - - Create or generate a new coldkey. - - Transfer TAO from your coldkey to another address. Requires a coldkey signature (secure environment). + +- View balances and stake—only coldkey public key is required (permissionless) +- Create or generate a new coldkey. +- Transfer TAO from your coldkey to another address. Requires a coldkey signature (secure environment). ### Subnet Discovery - - `btcli subnets list`, `btcli subnets show`, `btcli subnets metagraph`: See available subnets or node info. Permissionless read. - - `btcli subnets price`, `btcli subnets burn-cost`, `btcli subnets burn_cost`: Show the required burn to register in a particular subnet. Permissionless read. + +- `btcli subnets list`, `btcli subnets show`, `btcli subnets metagraph`: See available subnets or node info. Permissionless read. +- `btcli subnets price`, `btcli subnets burn-cost`, `btcli subnets burn_cost`: Show the required burn to register in a particular subnet. Permissionless read. ### Staking (All require **coldkey** except for list): - - Add, remove, or move stake to validators on specific subnets. - - Transfer ownership of stake to anoth - - `btcli stake child ...` / `btcli stake children ...` (get, set, revoke, take) - - Short aliases: `btcli st add`, `btcli st remove`, etc. + +- Add, remove, or move stake to validators on specific subnets. +- Transfer ownership of stake to anoth +- `btcli stake child ...` / `btcli stake children ...` (get, set, revoke, take) +- Short aliases: `btcli st add`, `btcli st remove`, etc. ### Workstation configuration - - `btcli config set`, `btcli config get`, etc. (Permissionless) to configure a `btcli` environment. + +- `btcli config set`, `btcli config get`, etc. (Permissionless) to configure a `btcli` environment. ## Key rotation If you suspect your coldkey may have been leaked, you can request to swap it out of your wallet, using an extrinsic blockchain transaction. This operation has a 5 day waiting period, during which your coldkey will be locked. The cost of this coldkey swap transaction is 0.1 TAO. -See [Rotate/Swap your Coldkey](../subnets/schedule-coldkey-swap) - +See [Rotate/Swap your Coldkey](../keys/schedule-coldkey-swap) diff --git a/docs/subnets/_legacy_hyperparams.md b/docs/subnets/_legacy_hyperparams.md deleted file mode 100644 index de302b54fb..0000000000 --- a/docs/subnets/_legacy_hyperparams.md +++ /dev/null @@ -1,340 +0,0 @@ -!!!Legacy!!! -!!!For reference, do not publish!!! - - -## serving_rate_limit - -**Description** -: Determines how often you can change your node's IP address on the blockchain. Expressed in number of blocks. Applies to both subnet validator and subnet miner nodes. Used when you move your node to a new machine. - -**Value** -: Usually this is set to `100` blocks. - -**Setting** -: This parameter can be changed by the subnet owner. The value of this parameter varies from subnet to subnet. - ---- - -## min_difficulty, max_difficulty - -**Description** -: For subnets that have enabled PoW registration using [`network_pow_registration_allowed`](#network_pow_registration_allowed), these parameters determine the minimum and maximum difficulty for the Proof of Work calculation, respectively, expressed in terahashes. The actual difficulty is dynamic, auto-adjusting based on the number of registrations per [adjustment interval](#adjustment_interval). When a new adjustment interval is reached and the number of registrations or registration attempts in the previous adjustment interval exceeds the target number of registrations value, the difficulty will double in the following adjustment interval. If the number of registrations or registration attempts was fewer than the target number of registrations value, the difficulty will halve. - -**Setting** -: This parameter can be changed by the subnet owner. - ---- - -## weights_version - -**Description** -: Indicates the required minimum version of the subnet validator code. - -**Value** -: Set to `2013` for Subnet-1. -: This means that every subnet validator in Subnet-1 must have at least version `2013` of the subnet validator code. - -**Setting** -: This parameter can be changed by the subnet owner. The value of this parameter varies from subnet to subnet. Setting this parameter to a version ensures that all the subnet validators use the same version of the code. - ---- - -## weights_rate_limit - -**Description** -: How often a subnet validator can set weights on the blockchain, expressed in number of blocks. - -**Value** -: Set to `100` for Subnet-1. -: This means that after a subnet validator in Subnet-1 sends the weights to the blockchain, this subnet validator must wait for at least 100 blocks before sending the weights again to the blockchain. - -**Setting** -: This parameter can be changed by the subnet owner. The value of this parameter varies from subnet to subnet. - ---- - -## max_weight_limit - -**Description** - -: This is the maximum weight that can be set by a subnet validator for a subnet miner, expressed as a value between `0` and `65535`. This is a u16 (unsigned integer) representation of the range from 0 and 1.0. The normalized weights of all miners in a subnet must always sum to 1. - -**Value** -: Set to `455` for Subnet-1. - -**Setting** -: This parameter can be changed by the subnet owner. The value of this parameter varies from subnet to subnet. - -### Example - -Consider Subnet-1 where `max_weight_limit` is set to 455 and `min_allowed_weights` is set to 8. This means that each subnet validator must set weights for at least 8 subnet miners, and each such weight must not exceed `455`. - ---- - - - -## commit_reveal_weights_enabled - -**Description** -: Enables the [Commit Reveal](./commit-reveal.md) feature. - -**Value** -: `True` or `False`. Enables or disables the feature, default: false. - -**Setting** -: This parameter can be changed by the subnet owner. - - -## commit_reveal_weights_interval - -**Description** -: The interval, measured as a number of blocks, that elapses before unencrypted weights are revealed. - -**Value** -: The commit reveal interval, as an integer count of blocks. - -**Setting** -: This parameter can be changed by the subnet owner, and must be tuned carefully for the subnet. It should always be greater than the [immunity period](#immunity_period) to avoid unintended miner deregistration—see [Commit Reveal and Immunity Period](./commit-reveal.md#commit-reveal-and-immunity-period). - -## immunity_period - -**Description** -: The [Immunity Period](../glossary.md#immunity-period) within a subnet. This is a grace period, measured in blocks, granted to a miner or a validator when registered at a UID on a given subnet, that elapses before they are considered for deregistration due to performance. - -If the UID still does not perform well even after the expiry of the `immunity_period`, the miner or validator at that UID can be removed from the subnet when a new miner or validator requests to join. - -When a subnet miner or a subnet validator is deregistered, they must register again to rejoin the subnet. - -In case all peers (miners or validators within a subnet) are in their immunity period, immunity is overriden, and the lowest scoring peer is de-registered. - -In case the lowest ranking position is held by multiple peers with a tied score, the one who was registered first is de-registered. This step applies first to peers outside of their immunity period unless all are immune, in which case it applies to immune peers. - -**Value** -: Default value: 5000 blocks. - -Varies between subnets, for example 7200 blocks for Subnet-1. - -**Setting** -: This parameter can be changed by the subnet owner, and must be tuned carefully for the subnet. - -If [Commit Reveal](./commit-reveal.md) is enabled for the subnet, the value of the commit reveal interval should always be greater than the immunity period within the subnet, to avoid unintended miner deregistration—see [Commit Reveal and Immunity Period](./commit-reveal.md#commit-reveal-and-immunity-period). - -:::tip immunity period for a subnet - -Immunity Period for miners and validators *within* a subnet is distinct from the immunity period *for* a newly created subnet, before it can be deregistered from the Bittensor network. For the latter, see [Immunity period for a subnet](./create-a-subnet.md#immunity-period-for-a-subnet). -::: - -### Example -Consider Subnet-1, that has its `immunity_period` set to 7200 blocks. The duration of a block is 12 seconds. Hence a subnet validator or a subnet miner at any UID in Subnet-1 has 24 hours (=7200 blocks) from the moment they have registered, before they will be considered for deregistration. - -:::tip Managing node deregistration during major updates -The subnet owner may modify the [`immunity_period`](#immunity_period) at any given time, as well as temporarily turn off [`network_registration_allowed`] to allow established nodes (miners and/or validators) to adjust to major codebase updates without being deregistered. -::: - ---- - -## min_allowed_weights - -**Description** -: The minimum number of UIDs a subnet validator must set weights on, before the subnet validator is allowed to set weights on the blockchain. - -**Value** -: Set to `8` for Subnet-1. -: This means that any subnet validator who is trying to set weights on the blockchain must set weights on a minimum of 8 subnet miners before this subnet validator is able to successfully set its weights on the blockchain. - -**Setting** -: This parameter can be changed by the subnet owner. The value of this parameter varies from subnet to subnet. - -The value of `min_allowed_weights` sets a lower bound for the consensus. A higher value of `min_allowed_weights` means that the subnet validators are forced to set weights for more subnet miners. This parameter is mainly for security reasons, to eliminate unreasonably low consensus amongst the subnet validators in the subnet. - -### Example - -A subnet validator can be considered as poorly performing if they set weights on only five subnet miners, when the `min_allowed_weights` is set to 8. This might occur due to a variety of reasons, for example: Maybe the subnet validator does not have enough stake to query the subnet miners, or maybe the subnet validator is part of a cabal engaged in cheating the system. - -In this case, none of the actual weight-setting extrinsics that the subnet validator sends to the chain will be accepted. Hence on the chain it will look like this subnet validator has not set any weights at all. The Yuma Consensus may conclude that this subnet validator is performing poorly and after the `immunity_period` expires, this subnet validator could be deregistered to make room for others waiting to be miners or validators. - -:::important Minimum 1000 TAO required to set weights -A validate function will blacklist set-weights transactions from keys with less than 1000 TAO. This is designed to reduce chain bloat and make it easier for validators to set weights on the chain. -::: - ---- - -## tempo - -**Description** -: A duration of a number of blocks. Several subnet events occur at the end of every tempo period. For example, Yuma Consensus runs for the subnet and emissions are transferred to the hotkeys (delegated or staked). - -:::tip See also -See also [Anatomy of Incentive Mechanism](../learn/anatomy-of-incentive-mechanism.md#tempo). -::: - -**Value** -: Set to `99` blocks for Subnet-1. All other subnets are set to `360` blocks. - -**Setting** -: Must not be changed. - ---- - -## adjustment_alpha - -**Description** - -A factor that controls the subnet registrations adjustment interval. This hyperparameter is now set to `0.97`, a change from an earlier value of `0`. A larger adjustment alpha will smooth the registration burn and POW cost for newly registered subnets, thus reducing the thrashing seen for registration costs. This parameter functions as a balance between registration burn and POW cost. - -For example: If the target registration was `2` and there was `1` burn registration in the interval, the registration cost halving would apply to POW. On the other hand, if there were 1 POW registration, it would decrease the registration burn costs by half. In this way the `adjustment_alpha` mechanism tries to balance out the registration burn and POW costs. - -:::important -By default this change from `0` to `0.97` does not affect already registered subnets. However, to take advantage of the new value, we strongly recommend that existing subnet owners update this value by setting it through the CLI, by running the below command. The `--value 17893341751498265066` corresponds to setting the `adjustment_alpha` to `0.97`. See [this line of code](https://github.com/opentensor/subtensor/pull/249/files#diff-731a2a37ce113771b45fd0a44bf63d71307465bcb1ce26353eed95c1f4d4c26cR728). -::: - -```bash -btcli sudo set --param adjustment_alpha --value 17893341751498265066 --netuid -``` - -**Setting** -: Must not be changed. - ---- - -## adjustment_interval - -**Description** -: Expressed in number of blocks. This is the number of blocks after which the recycle register cost and the `pow_register` difficulty are recalculated. - -If the number of actual registrations that occurred in the last [`adjustment_interval`](#adjustment_interval) is higher than the [`target_regs_per_interval`](#target_regs_per_interval), then the blockchain will raise the recycle register cost, by increasing the [`min_burn`](#min_burn-max_burn) value by a certain amount, in order to slow down the actual registrations and bring them back to `target_regs_per_interval` value. - -**Value** -: Set to `112` for Subnet-1. -: The blockchain uses this parameter together with the `target_regs_per_interval` and the [`min_burn`](#min_burn-max_burn) and [`max_burn`](#min_burn-max_burn) parameters. - -**Setting** -: Must not be changed. - -### Example - -The Subnet-1 has its `target_regs_per_interval` set to 2. Consider a scenario where, in a 112-block interval (`adjustment_interval`) this subnet had 6 registrations. This is higher than `target_regs_per_interval`. The blockchain will now raise the minimum cost to recycle register, by increasing the `min_burn` value by a certain amount, in order to slow down the actual registrations. - ---- - -## activity_cutoff - -**Description** -: Expressed in number of blocks. If a subnet validator has not set weights on the blockchain for `activity_cutoff` duration, then the Yuma Consensus will consider this subnet validator as offline, i.e., turned off. The weights of this subnet validator are considered too old to be useful. The weights of this subnet validator slowly lose their impact over time and eventually will no longer be considered for consensus calculation. - -:::tip This parameter is applicable to subnet validators only. -::: - -**Value** -: Set to `5000` (blocks) for Subnet-1. - -**Setting** -: This parameter can be changed by the subnet owner. The value of this parameter varies from subnet to subnet. - ---- - -## network_registration_allowed - -**Description** -: `True` or `False`. Indicates whether this subnet allows registrations. - -**Value** -: Set to `True` for Subnet-1. - -**Setting** -: This parameter can be changed by the subnet owner. The value of this parameter varies from subnet to subnet. - ---- - -## network_pow_registration_allowed - -**Description** -: `True` or `False`. Indicates whether this subnet allows POW (proof of work) registrations. - -**Setting** -: This parameter can be changed by the subnet owner. The value of this parameter varies from subnet to subnet. - ---- - -## target_regs_per_interval - -**Description** -: The target number of registrations desired in a `adjustment_interval` period. Expressed as an integer number. - -:::tip Maximum number of registrations -The maximum number of registrations that can occur in an `adjustment_interval` is (3 * `target_regs_per_interval`). -::: - -**Value** -: Set to `1` for Subnet-1. - -**Setting** -: Must not be changed. - ---- - -## min_burn, max_burn - -**Description** -: Minimum and maximum cost to register on this subnet. Expressed in Rao (10-9 TAO). - -**Setting** -: This parameter is automatically updated by the blockchain. - ---- - - - -## max_regs_per_block - -**Description** -: Maximum allowed registrations in this subnet per block. - -**Value** -: Set to `1` for Subnet-1. - -**Setting** -: Must not be changed. - ---- - -## max_validators - -**Description** -: Determines the maximum number of subnet validators you can have in the subnet. - -**Value** -: Default value is `64`. - -**Setting** -: Must not be changed. diff --git a/docs/subnets/asyncio.md b/docs/subnets/asyncio.md index d8c16602a6..f57bf24e5b 100644 --- a/docs/subnets/asyncio.md +++ b/docs/subnets/asyncio.md @@ -2,8 +2,12 @@ title: "Working with Concurrency" --- +import { SdkVersion } from "../sdk/_sdk-version.mdx"; + This page provides some tips for working with concurrent async functions in Bittensor. + + Calls to the blockchain can be slow, and routines that make many calls in series become very slow. For example, suppose we want to check a list of UIDS for subnets and see if they exist. In series, we could execute the following, but it will take longer in proportion to the list of netuids, since it makes a separate call for each. ```python @@ -16,7 +20,6 @@ for netuid in range(1, 8): To avoid this, we could create a separate thread with a new `Subtensor` object on each thread, as below. This is faster, but can cause problems by hogging as many web sockets as UIDS in the list of subnets to check. - ```python import asyncio from concurrent.futures import ThreadPoolExecutor @@ -44,14 +47,15 @@ async def main(): block_hash = await subtensor.get_block_hash() subnets = await asyncio.gather(*[subtensor.subnet_exists(netuid, block_hash=block_hash) for netuid in range(1, 8)]) for i, subnet in enumerate(subnets): - print("subnet " + str(1+i) + " exists: " + str(subnet)) + print("subnet " + str(1+i) + " exists: " + str(subnet)) asyncio.run(main()) ``` + ## Coroutine vs function -The usage of `async def` creates an asyncio *coroutine* rather than a function. +The usage of `async def` creates an asyncio _coroutine_ rather than a function. Coroutines differ from functions in that coroutines are run in event loops using `await`. @@ -61,22 +65,22 @@ Coroutines always need to be awaited, and generally speaking, “asyncio objects ## AsyncSubstrateInterface -[AsyncSubstrateInterface](pathname:///python-api/html/autoapi/bittensor/utils/async_substrate_interface/index.html) is an `asyncio` rewrite of Polkadot's original [`py-substrate-interface`](https://github.com/polkascan/py-substrate-interface) library, with a few added functionalities such as using the `bt_decode` for most SCALE decoding. +[AsyncSubstrateInterface](pathname:///python-api/html/autoapi/bittensor/utils/async_substrate_interface/index.html) is an `asyncio` rewrite of Polkadot's original [`py-substrate-interface`](https://github.com/polkascan/py-substrate-interface) library, with a few added functionalities such as using the `bt_decode` for most SCALE decoding. -While `AsyncSubstrateInterface` is about 90% API compatible with `py-substrate-interface`, it is its own library. Similar to how we initialize `aiohttp.ClientSession` as shown in line 21 of the above example, the `AsyncSubstrateInterface` is initialized in the same way, as shown below: +While `AsyncSubstrateInterface` is about 90% API compatible with `py-substrate-interface`, it is its own library. Similar to how we initialize `aiohttp.ClientSession` as shown in line 21 of the above example, the `AsyncSubstrateInterface` is initialized in the same way, as shown below: ```python async with AsyncSubstrateInterface(chain_endpoint) as substrate: block_hash = await substrate.get_chain_head() ``` -:::tip +:::tip Generally speaking, you should use `AsyncSubstrateInterface` as a part of `AsyncSubtensor`, as the methods there are more specifically designed around using it within the Bittensor ecosystem. ::: ## AsyncSubtensor -`AsyncSubtensor` is the `asyncio` version of the Subtensor class. Under the hood, it utilises `AsyncSubstrateInterface`. +`AsyncSubtensor` is the `asyncio` version of the Subtensor class. Under the hood, it utilises `AsyncSubstrateInterface`. ### AsyncSubtensor vs Subtensor @@ -87,6 +91,7 @@ Major differences between `AsyncSubtensor` and `Subtensor` are: - The usage of `block_hash` is pretty obvious, i.e., you can specify the block hash (`str`) rather than the block number (`int`). - The usage of `reuse_block` is a bit different. It allows you to reuse the same block hash that you have used for a previous call. - Finally, the remaining major change is the use of args in the below `AsyncSubtensor` methods: + - `get_balance` - `get_total_stake_for_coldkey` - `get_total_stake_for_hotkey` @@ -108,14 +113,18 @@ async def main(): And because `AsyncSubtensor` uses `AsyncSubstrateInterface` under the hood, we can use this to our advantage in `asyncio` gathering: ```python +import asyncio +import time from bittensor.core.async_subtensor import AsyncSubtensor -async def async_main(): - async with AsyncSubtensor("test") as subtensor: +async def main(): + async with AsyncSubtensor(network="test") as subtensor: start = time.time() - block_hash = await subtensor.get_block_hash() - total_subnets = await subtensor.get_total_subnets(block_hash=block_hash) - neurons = await asyncio.gather(*[subtensor.neurons(x, block_hash) for x in range(0, total_subnets+1)]) + total_subnets = await subtensor.get_total_subnets() + neurons = await asyncio.gather(*[ + subtensor.neurons(netuid=x) + for x in range(1, total_subnets + 1) + ]) print(time.time() - start) asyncio.run(main()) @@ -124,23 +133,27 @@ asyncio.run(main()) The above code example pulls all the neurons from the testnet. Compare this to the below sync version of the same code: ```python +import time from bittensor.core.subtensor import Subtensor def sync_main(): - subtensor = Subtensor("test") + subtensor = Subtensor(network="test") start = time.time() block = subtensor.block total_subnets = subtensor.get_total_subnets(block) - neurons = [subtensor.neurons(x, block) for x in range(0, total_subnets+1)] + neurons = [subtensor.neurons(netuid=x, block=block) for x in range(1, total_subnets + 1)] print(time.time() - start) + +sync_main() ``` ### Performance On a high-latency South African Internet connection: + - The `async` version runs in 13.02 seconds. - The sync version runs in 1566.86 seconds. -Hence the `async` version runs a full 120X faster. Your results will vary depending on your connection latency. + Hence the `async` version runs a full 120X faster. Your results will vary depending on your connection latency. :::caution Some overhead with async Note that there is a bit of overhead with the `async` instantiation over the sync version. Therefore, if you are writing a script to maybe retrieve one item, it will likely be faster and less complex using the sync version. However, if you are building anything more complex than this, the `async` version will likely be faster, as shown in the above example. @@ -148,7 +161,7 @@ Note that there is a bit of overhead with the `async` instantiation over the syn ### Example -Below is an example of how you can use the `AsyncSubtensor` module to retrieve balances from multiple coldkey SS58 addresses in various ways: +Below is an example of how you can use the `AsyncSubtensor` module to retrieve balances from multiple coldkey SS58 addresses in various ways: :::tip Python reference Also see the Bittensor SDK reference for [AsyncSubtensor](pathname:///python-api/html/autoapi/bittensor/core/async_subtensor/index.html). @@ -170,57 +183,71 @@ COLDKEY_PUBS = [ "5DZaBZKKGZBGaevi42bYUK44tEuS3SYJ7GU3rQKYr7kjfa8v" ] - async def main(): # define a coroutine with `async def` - sync_sub = Subtensor("finney") # same as always - async with AsyncSubtensor("finney") as async_subtensor: # very important to initialise this with `async with` + sync_sub = Subtensor(network="finney") + async with AsyncSubtensor(network="finney") as async_subtensor: sync_balance: Balance = sync_sub.get_balance(COLDKEY_PUB) - # returns τ0.000000000 + print(f"Sync balance: {sync_balance}") async_balance: dict[str, Balance] = await async_subtensor.get_balance(COLDKEY_PUB) - # returns {'5EhCvSxpFRgXRCaN5LH2wRCD5su1vKsnVfYfjzkqfmPoCy2G': τ0.000000000} - # get_balance now takes multiple addresses, and returns them as a dict - # of {ss58: Balance} - # for example: - async_balances: dict[str, Balance] = await async_subtensor.get_balance(*COLDKEY_PUBS) - # returns: { - # '5EhCvSxpFRgXRCaN5LH2wRCD5su1vKsnVfYfjzkqfmPoCy2G': τ0.000000000, - # '5CZrQzo3W6LGEopMw2zVMugPcwFBmQDYne3TJc9XzZbTX2WR': τ0.000000000, - # '5Dcmx3kNTKqExHoineVpBJ6HnD9JHApRs8y2GFBgPLCaYn8d': τ0.000000000, - # '5DZaBZKKGZBGaevi42bYUK44tEuS3SYJ7GU3rQKYr7kjfa8v': τ0.000000000 - # } - # This works the same with .get_total_stake_for_coldkey, .get_total_stake_for_hotkey - # to do multiples with sync subtensor, we would do: + print(f"Async balance: {async_balance}") + + async_balances: dict[str, Balance] = await async_subtensor.get_balances(*COLDKEY_PUBS) + print(f"Async multiple balances: {async_balances}") + sync_balances: dict[str, Balance] = {} for coldkey in COLDKEY_PUBS: sync_balances[coldkey] = sync_sub.get_balance(coldkey) + print(f"Sync multiple balances: {sync_balances}") - # let's say we want to make multiple calls at the same time. We can do this with asyncio.gather async_delegated, async_balance = await asyncio.gather( async_subtensor.get_delegated(COLDKEY_PUB), async_subtensor.get_balance(COLDKEY_PUB) ) + print(f"Delegated: {async_delegated}") + print(f"Balance: {async_balance}") + + + # This will make concurrent calls to retrieve the delegates and balance of this coldkey # We can even chain these together quite dramatically, such as this example in btcli wallets: """ - balances, all_neurons, all_delegates = await asyncio.gather( - subtensor.get_balance( - *[w.coldkeypub.ss58_address for w in wallets_with_ckp_file], - block_hash=block_hash, - ), - asyncio.gather( - *[ - subtensor.neurons_lite(netuid=netuid, block_hash=block_hash) - for netuid in all_netuids - ] - ), - asyncio.gather( - *[ - subtensor.get_delegated(w.coldkeypub.ss58_address) - for w in wallets_with_ckp_file - ] - ), - ) + async def main(): + async with AsyncSubtensor(network="finney") as subtensor: + # Get current block hash for consistency + block_hash = await subtensor.get_block_hash() + + # Get total subnets to query + total_subnets = await subtensor.get_total_subnets(block_hash=block_hash) + all_netuids = list(range(1, min(total_subnets + 1, 10))) # Limit to first 10 for testing + + # Example wallet addresses (in real usage these would come from wallet objects) + wallets_with_ckp_file = COLDKEY_PUBS # Using the addresses directly + + # Concurrent batch fetch + balances, all_neurons, all_delegates = await asyncio.gather( + subtensor.get_balances( # Fixed: use get_balances for multiple addresses + *wallets_with_ckp_file, + block_hash=block_hash, + ), + asyncio.gather( + *[ + subtensor.neurons_lite(netuid=netuid, block_hash=block_hash) + for netuid in all_netuids + ] + ), + asyncio.gather( + *[ + subtensor.get_delegated(addr) + for addr in wallets_with_ckp_file + ] + ), + ) + + # Print results + print(f"Balances: {balances}") + print(f"Neurons from {len(all_neurons)} subnets") + print(f"Delegates: {len(all_delegates)} results") """ # There are also certain changes for the decoding of SCALE objects from the chain. # As a rule of thumb, anything using `.value` from sync Subtensor just returns the value itself diff --git a/docs/subnets/child-hotkeys.md b/docs/subnets/child-hotkeys.md deleted file mode 100644 index 9f2bf7d4bb..0000000000 --- a/docs/subnets/child-hotkeys.md +++ /dev/null @@ -1,278 +0,0 @@ ---- -title: "Child Hotkeys" ---- - -import ThemedImage from '@theme/ThemedImage'; -import useBaseUrl from '@docusaurus/useBaseUrl'; - -# Child Hotkeys - -This guide describes the **child hotkeys** feature and how to use it. With the child hotkeys, a subnet validator is no longer required to use the same delegate hotkey for every subnet they validate in. The subnet validator can use a separate **child hotkey** per subnet. The subnet validator does this by re-delegating a portion of their stake from their delegate hotkey to this separate child hotkey on a subnet. The originating delegate hotkey is called the **parent hotkey**. - -The owner of this child hotkey would then validate in the subnet on behalf of the parent hotkey. The child hotkey would receive a percentage `take` from the resulting dividends. - - - -
- -
- -
- -See the above diagram. Without the child hotkeys, a subnet validator's delegate hotkey would have to sign all the validation operations in all the subnets. This exposes the delegate hotkey in all the subnets. An attacker can get hold of the delegate hotkey from any one subnet in order to take over the validation operations with this hotkey, thereby crippling this subnet validator in all their subnets across the entire Bittensor network. - -
- -
- - -See the above diagram. With the child hotkeys, if an attacker steals a child hotkey, then only those subnets are at risk where this child hotkey is used as the delegate hotkey. - -## Benefits of child hotkeys - -- **Security for parent hotkeys**: Re-delegating stake to multiple child hotkeys enhances the security of the parent hotkey. Each child hotkey can validate on a specific subnet using a different machine. The child hotkey would sign the validation operations on behalf of the parent hotkey: There is no need to use the parent hotkey on any of these subnets. As a consequence, the exposure of the parent hotkey can be minimized. The parent hotkey can even be moved to a secure location until it is needed, for example, to revoke a child hotkey. -- **Validators can easily scale up**: As Bittensor scales up towards hundreds of subnets, it is not practical for a single delegate to validate in every single subnet. With child hotkeys, a validator can easily make this feasible by re-delegating and offloading the validating operations to multiple child hotkeys. -- **Increased bandwidth for a subnet owner**: A validator can also re-delegate to a subnet owner's hotkey. The subnet owner would then do the validation work on the subnet, in exchange for a percentage `take` from the resulting dividends. A subnet owner can increase their access bandwidth into their own subnet in this way. -- A child hotkey and a parent hotkey need not be owned by the same entity. -- A validator can re-delegate to a hotkey of any other validator on any subnet. After re-delegation, the hotkey that is the source of the stake is called **parent hotkey** and the hotkey that receives this re-delegated stake is called **child hotkey**. - :::tip "Child hotkey" and "parent hotkey" are terms of convenience - The terms "child hotkey" and "parent hotkey" are only terms of convenience. There is nothing inherently different about a "child hotkey" that separates it from a "parent hotkey". Neither have any special attributes compared to a normal hotkey. - ::: - ---- - -## Features - -The child hotkey features are as follows: - -- A hotkey must be registered on a subnet before it can be used as a parent hotkey. The hotkey can be registered on any subnet. -- A parent hotkey can have multiple child hotkeys. Similarly, a child hotkey can have more than one parent hotkey. -- A child hotkey can exist as a registered hotkey in multiple netuids simultaneously. -- **IMPORTANT**: For a given `netuid`, say, `netuid 5`, a single parent hotkey can have at most five (`5`) child hotkeys. Moreover, the same parent hotkey on a different `netuid 11` can have another set of `5` child hotkeys. Alternately, on this `netuid 11` the same parent hotkey can also have the same (`5`) child hotkeys that are in the netuid `5`. -- While setting the child hotkeys, the proportion field can have proportions that add to less than `1.0`. The proportion that was not assigned to the child hotkeys will remain with the parent hotkey. However, a proportion cannot be zero. A `0` proportion value will result in an error. Furthermore, in a given subnet, the sum of all proportions must not exceed `1.0`. - -## Rate limits - -The following rate limits apply for child hotkeys: - -- A child hotkey's take rate can only be adjusted once per 30 days. -- One successful execution of `set_children` or `revoke_children` is allowed for every 720 blocks. - -## Minimum stake - -The minimum stake you can redelegate to a child hotkey is as follows: -- **Testnet**: 100 testnet TAO. -- **Mainnet**: 1000 TAO. - ---- - -## Installing - -This feature is available in Bittensor 7.4.0 and later versions. See [Install Bittensor](../getting-started/installation.md). - -## Child hotkey commands - -Use the `btcli` command options described below to work with child hotkeys. - -## Setting a child hotkey - -This command assigns a proportion of the parent hotkey's stake weight to the child hotkeys. Specific proportion for each child hotkey can be set. The parent hotkey must be registered on at least one `netuid`. This `netuid` need not be the same `netuid` used in this command. Only the stake TAO of the parent hotkey can be assigned to the child hotkeys. - -### Usage - -```bash -btcli stake set_children --netuid --children --proportions --hotkey --wallet.name -``` - -### Parameters - -- `--netuid:` Integer. Should be a single integer value representing a current subnet's `netuid`. - - Must be greater than `0` (`netuid 0` is not allowed). - - Integer values greater than the value of current subnet limit, i.e., greater than the value of `subtensorModule.subnetLimit()`, will be rejected with an error message and the command will stop. - - All child hotkeys used in this command must be already registered on this `netuid`. -- `--children`: SS58. A comma-separated ordered list of SS58 hotkeys for child hotkeys. - - There should be a maximum of five, 5, SS58 hotkeys in this comma-separated list. If there are more than five hotkeys, the command will issue an error message and stop. - - The number of list elements should match the number of elements passed in the `--proportions` parameter. If the number of list elements do not match, the command will issue an error and stop. - - All hotkeys used here must be already registered on the `netuid` used in this command. - -- `--proportions`: Floating. A comma-separated ordered list of floating values. Each proportion value of the parent hotkey's stake weight will be assigned to the corresponding child hotkey in the `--children` parameter. - - Each floating value should be a number greater than zero and equal to or less than `1.0`. - - If a value is zero, the corresponding child hotkey will be revoked. - - If a value is greater than `1.0`, the command will issue an error message and stop. - - All the proportions for a given `netuid` must sum to less than or equal to `1.0`. If the proportions sum to greater than `1.0`, the command will issue an error message and stop. -- `--hotkey`: SS58. A single SS58 of the parent hotkey. This must be a delegate hotkey that is already registered in with any `netuid`. This `netuid` need not be the same `netuid` used in this command. - - If this parent hotkey has zero stake, then the command will issue an error message and stop. - - Note that this `--hotkey` parameter expects parent hotkey whereas the `--hotkey` parameter of the [Setting child hotkey take](#parameters-1) expects child hotkey. -- `--wallet.name`: String or SS58. Name of the wallet or the SS58 of the coldkey. This coldkey must be matched with the parent hotkey SS58 of the `--hotkey`. If the coldkey and the parent hotkey do not match, the command will issue an error message and stop. - -### Examples - -#### Setting a single child hotkey - -```bash -btcli stake set_children \ - --netuid 4 \ - --children 5HEXVAHY9gyavj5xnbov9Qoba4hPJYkkwwnq1MQFepLK7Gei \ - --proportions 0.5 \ - --hotkey 5DqJdDLU23m7yf6rZSmbLTshU7Bfn9eCTBkduhF4r9i73B9Y \ - --wallet.name Alice -``` - -#### Setting multiple child hotkeys - -```bash -btcli stake set_children \ - --netuid 4 \ - --children 5Gx1CZ9jviC6V2KynBAcTpES4yK76riCagv5o5SFFZFYXj4s,5HEXVAHY9gyavj5xnbov9Qoba4hPJYkkwwnq1MQFepLK7Gei \ - --proportions 0.3,0.7 \ - --hotkey 5DqJdDLU23m7yf6rZSmbLTshU7Bfn9eCTBkduhF4r9i73B9Y \ - --wallet.name Alice -``` - -## Adding a new child hotkey - -If a parent hotkey has, for example, three child hotkeys: child hotkey A, child hotkey B and child hotkey C, then to add a fourth child hotkey D, you must run `set_children` command again with the parent hotkey and all four child hotkeys A, B, C and D. - -## Changing the proportions - -If a parent hotkey has, for example, three child hotkeys: - - child hotkey A with `0.2` proportion. - - child hotkey B with `0.5` proportion. - - child hotkey C with `0.1` proportion. - -Then to change the proportion of, for example, the child hotkey B from `0.5` to `0.3`, you must run `set_children` command again with the parent hotkey and all three child hotkeys A, B, and C set to `0.2`, `0.3` and `0.1` proportions. - - -## Getting the child hotkeys - -This command displays all the child hotkeys for a given parent hotkey. - -### Usage - -```bash -btcli stake get_children --netuid --hotkey --all -``` - -### Example - -```bash -btcli stake get_children \ - --netuid 4 \ - --hotkey 5DqJdDLU23m7yf6rZSmbLTshU7Bfn9eCTBkduhF4r9i73B9Y \ - --wallet.name Alice \ - --all -``` - -or - -```bash -btcli stake get_children -``` -and follow the prompts. - -## Revoking the child hotkeys - -This command revokes **all** the child hotkeys for a given parent hotkey. - -:::danger Revoking a specific child hotkey is not allowed -Currently it is not possible to revoke a specific child hotkey. However, if a parent hotkey has, for example, three child hotkeys: child hotkey A, child hotkey B and child hotkey C, then setting the parent hotkey again with only child hotkeys A and B will result in revoking the child hotkey C. -::: - -### Usage - - -```bash -btcli stake revoke_children \ - --netuid \ - --hotkey \ - --wallet.name -``` - -### Example - -```bash -btcli stake revoke_children \ - --netuid 4 \ - --hotkey 5DqJdDLU23m7yf6rZSmbLTshU7Bfn9eCTBkduhF4r9i73B9Y \ - --wallet.name Alice -``` - -or - -```bash -btcli stake revoke_children -``` -and follow the prompts. - -## Setting child hotkey take - -This command sets the take percentage of the child hotkey for a given `netuid`. The `take` can be between `0` (0%) and `0.18` (18%). - -A child hotkey's `take` is subnet-specific, i.e., a child hotkey can have one `take` in one `netuid` and a different `take` in another `netuid`. - -The child hotkey take rate is an attribute of the child hotkey and this take rate applies to all the parent hotkeys for which this hotkey is the child hotkey. - -The child hotkey can also set its delegate take separately from the child hotkey take. That is, a child hotkey can carry two separate take rates: the child hotkey take rate and the delegate take rate. For the delegate take rate, see [Set delegate take](../btcli.md#set-delegate-take). - -### Usage - -```bash -btcli stake set_childkey_take \ - --netuid \ - --hotkey \ - --take \ - --wallet.name -``` - -### Parameters - -- `--hotkey`: SS58. A single SS58 of the child hotkey. Note that this `--hotkey` parameter expects child hotkey whereas the `--hotkey` parameter of the [Setting a child hotkey](#parameters) expects parent hotkey. -- `--take`: Floating. A value between `0` (0%) and `0.18` (18%). Default value is `0`. -- `--netuid`: Integer. The `netuid` in which this child hotkey's `take` is applicable. Note that a child hotkey's `take` is subnet-specific, i.e., a child hotkey can have one `take` in one `netuid` and a different `take` in another `netuid`. - -### Example - -```bash -btcli stake set_childkey_take \ - --netuid 4 \ - --hotkey 5DqJdDLU23m7yf6rZSmbLTshU7Bfn9eCTBkduhF4r9i73B9Y \ - --take 0.09 \ - --wallet.name Alice -``` - -## Getting child hotkey take - -This command displays the take percentage of a given child hotkey and `netuid`. - -### Usage - -```bash -btcli stake get_childkey_take \ - --netuid \ - --hotkey \ - --wallet.name -``` - - -### Example - -```bash -btcli stake get_childkey_take \ - --netuid 4 \ - --hotkey 5Gx1CZ9jviC6V2KynBAcTpES4yK76riCagv5o5SFFZFYXj4s \ - --wallet.name Bob -``` diff --git a/docs/subnets/commit-reveal.md b/docs/subnets/commit-reveal.md deleted file mode 100644 index 61158405bb..0000000000 --- a/docs/subnets/commit-reveal.md +++ /dev/null @@ -1,97 +0,0 @@ - -import ThemedImage from '@theme/ThemedImage'; -import useBaseUrl from '@docusaurus/useBaseUrl'; - -# Commit Reveal - -This page describes the **commit reveal** feature: a configurable waiting period that elapses between a) when consensus weights set by subnet validators are first committed, and b) when they are revealed publicly and included in Yuma Consensus. - -This feature was designed to address the issue of *weight copying* by validators. - -## Weight copying - -In each Bittensor subnet, each validator scores—or *'weights'*—each miner, producing what is referred to as a [weight vector](../glossary.md#weight-vector). The weight vectors for each validator in a subnet are combined into a weight matrix. This matrix determines emissions to miners in the subnet based on the consensus evaluation of their performance, according to [Yuma Consensus](../glossary.md#yuma-consensus). - -The weight matrix is public information, and must be, so that emissions in the Bittensor platform can be transparently fair. However, this transparency makes it possible for subnet validators to free-ride on the work of other validators by copying the latest consensus rather than independently evaluating subnet miners. This is unfair and potentially degrades the quality of validation work, undermining Bittensor's ability to incentivize the best miners and produce the best digital commodities overall. - -The commit reveal feature is designed to solve the weight copying problem by giving would-be weight copiers access only to stale weights. Copying stale weights should result in validators departing from consensus. However, it is critical to note that this only works if the consensus weight matrix changes sufficiently on the time scale of the commit reveal interval. If the demands on miners are too static, and miner performance is very stable, weight copying will still be successful. The only solution for this is to demand continuous improvement from miners, requiring them to continuously evolve to maintain their scoring. Combined with a properly tuned Commit Reveal interval, this will keep validators honest, as well as producing the best models. - -## Commit Reveal and Immunity Period - -The [Immunity Period](../glossary.md#immunity-period) is the interval (measured in blocks) during which a miner or validator newly registered on a subnet is 'immune' from deregistration due to performance. The duration of this period value should always be larger than the Commit Reveal interval, otherwise the immunity period will expire before a given miner's scores are available, and they may be deregistered without having their work counted. - -When creating a new subnet, ensure that the miner immunity period is larger than the commit reveal interval. When updating the immunity period or commit reveal interval hyperparameters for a subnet, use the following formula: - -``` -new_immunity_period = (new_commit_reveal_interval - old_commit_reveal_interval) + old_immunity_period -``` - -See [Subnet Hyperparameters](./subnet-hyperparameters.md). - -## Commit reveal in detail - -When commit reveal is enabled, it works as follows: - -1. A subnet validator sets the weights normally by using [`set_weights`](pathname:///python-api/html/autoapi/bittensor/core/extrinsics/set_weights/index.html). - -2. Instead of publishing weights openly, an encrypted copy of these weights is committed to the blockchain, using an internal method called [`commit_weights`](pathname:///python-api/html/autoapi/bittensor/core/extrinsics/commit_weights/index.html). - -3. A waiting interval, specified as a number of blocks, elapses. Subnet owners configure this interval with the subnet hyperparameter `commit_reveal_weights_interval`. - -4. After this interval has elapsed, the unencrypted weights are automatically revealed by the chain, using [Drand time-lock encryption](https://drand.love/docs/timelock-encryption/). - -5. The weights are now input to Yuma Consensus. - -
-:::tip Commit reveal works behind the scenes -After the subnet owner turns ON the commit reveal feature, everything happens behind the scenes. A subnet validator will continue to set weights normally by using [`set_weights`](pathname:///python-api/html/autoapi/bittensor/core/extrinsics/set_weights/index.html). -::: - -
- -
- - -## How to use the commit reveal feature - -As a subnet owner, set the below hyperparameters to use the commit reveal feature: - -1. `commit_reveal_weights_enabled` (boolean): Set this to `True` to activate the commit reveal feature for the subnet. Default value is `False`. -2. `commit_reveal_weights_interval` (int): Set this to an integer number. This is the number of subnet tempos to elapse before revealing the weights by submitting them again to the blockchain, but now openly for everyone to see. Default value is `1`. - -See [Setting subnet hyperparameters](subnet-hyperparameters#setting-the-hyperparameters). - -:::danger Ensure that the commit reveal interval is less than your immunity period to avoid unintended miner de-registration! -See [Commit Reveal and Immunity Period](#commit-reveal-and-immunity-period). -::: - - -Weights will be revealed immediately at the beginning of the tempo after the `commit_reveal_weights_interval`. For example, if `commit_reveal_weights_interval` value is set to `3`, then the reveal will occur at the beginning of the fourth tempo from the current tempo. The current tempo is counted as the first tempo. See the below diagram for this example: - -
- -
- -
- - -## Technical papers and blog - -- ACM CCS2024 Poster PDF [Solving the Free-rider Problem In Bittensor](pathname:///papers/ACM_CCS2024_Poster.pdf). -- See [Weight Copying in Bittensor, a technical paper (PDF)](pathname:///papers/BT_Weight_Copier-29May2024.pdf). -- Blog post, [Weight Copying in Bittensor](https://blog.bittensor.com/weight-copying-in-bittensor-422585ab8fa5). - diff --git a/docs/subnets/create-a-subnet.md b/docs/subnets/create-a-subnet.md index 983ea28092..5ad60e048b 100644 --- a/docs/subnets/create-a-subnet.md +++ b/docs/subnets/create-a-subnet.md @@ -8,9 +8,10 @@ This page describes the procedures for creating a new Bittensor subnet on test c You should first try [Creating a Subnet on a locally deployed chain](../local-build/create-subnet). -Creating a subnet is a major undertaking. You should read up on [Understanding Subnets](understanding-subnets) and research existing subnets before planning to create one. +Creating a subnet is a major undertaking. You should read up on [Understanding Subnets](understanding-subnets) and research existing subnets before planning to create one. ## Considerations + ### Research existing subnets Prospective subnet creators should familiarize themselves with the space of existing subnets. @@ -20,7 +21,7 @@ Prospective subnet creators should familiarize themselves with the space of exis ### Burn cost -The burn cost for subnet creation is dynamic; it lowers gradually and doubles every time a subnet is created. +This refers to the required amount of TAO to be recycled when creating a new subnet. The burn cost for subnet creation is dynamic and reflects the current cost to register a new subnet. Its value lowers gradually and doubles every time a subnet is created. :::tip try it live @@ -33,19 +34,21 @@ Check the burn cost to create a subnet on Bittensor main network and test networ ```shell btcli subnet burn-cost --network finney ``` + ```shell btcli subnet burn-cost --network test ``` + ::: ### A new subnet is not automatically active -To allow subnet owners to fully set up their subnets and to prevent extraction of emissions to subnet participants before the subnet is contributing to the network, new subnets are inactive and cannot be started for 7 * 7200 blocks (roughly one week) after they are registered. During this time, you can register and activate validators and invite miners into the subnet. +To allow subnet owners to fully set up their subnets and to prevent extraction of emissions to subnet participants before the subnet is contributing to the network, new subnets are inactive and cannot be started for 7 \* 7200 blocks (roughly one week) after they are registered. During this time, you can register and activate validators and invite miners into the subnet. :::info The subnet and its participants will receive **no emissions** during the time that the subnet is inactive. @@ -55,16 +58,18 @@ The subnet and its participants will receive **no emissions** during the time th You must meet the same [requirements for validation](../validators#requirements-for-validation) as other validators in order to set weights in your own subnet. -One option for subnet owners is to ask one of the root network (subnet 0) validators to parent your validator hotkey as a childkey of theirs. This will lend their stake to your validator, and can help you ensure that your validator maintains a sufficient stake to effectively participate in consensus as well as resist deregistration. See the [Child Hotkeys](./child-hotkeys) documentation for more detail. +One option for subnet owners is to ask one of the root network (subnet 0) validators to parent your validator hotkey as a childkey of theirs. This will lend their stake to your validator, and can help you ensure that your validator maintains a sufficient stake to effectively participate in consensus as well as resist deregistration. See the [Child Hotkeys](../validators/child-hotkeys) documentation for more detail. ### Subnet creation rate limits -Subnet creations are limited to **one subnet creation per 7200 blocks** (approximately one per day). The cost to register a new subnet is also dynamic. For these reason, picking the right time to create your subnet requires planning. +Subnet creations are limited to **one subnet creation per 28800 blocks** (approximately one every four days). The cost to register a new subnet is also dynamic. For these reason, picking the right time to create your subnet requires planning. ## Prerequisites - [Install the most recent version of BTCLI](../getting-started/install-btcli). -- [Created a wallet](../getting-started/wallets.md#creating-a-local-wallet). + +- [Create a wallet](../keys/working-with-keys#creating-a-wallet-with-btcli). + - To create a subnet on test chain, your wallet must have sufficient test net TAO. Inquire in [Discord](https://discord.com/channels/799672011265015819/1107738550373454028/threads/1331693251589312553) to obtain TAO on Bittensor test network. - To create a subnet on main network (finney) requires a substantial investment of TAO, depending on current registration cost for new subnets. @@ -75,9 +80,11 @@ Create your new subnet on the testchain using the test TAO you received from the Run the create subnet command on the testchain. ```bash -btcli subnet create --network test +btcli subnet create --network test ``` + Output: + ```bash # Enter the owner wallet name, which gives the coldkey permissions to define running hyperparameters later. >> Enter wallet name (default): owner # Enter your owner wallet name @@ -89,18 +96,20 @@ Output: ## Creating a subnet on mainchain -:::caution Alert: Minimum required TAO +:::caution Alert: Minimum required TAO Creating a subnet on the mainnet is competitive, and the cost is determined by the rate at which new networks are registered onto the chain. ::: -### Create the subnet +### Create the subnet -Use the below command to create a new subnet on the mainchain. +Use the below command to create a new subnet on the mainchain. ```bash btcli subnet create ``` + Output: + ```bash >> Enter wallet name (default): owner # Enter your owner wallet name >> Enter password to unlock key: # Enter your wallet password. @@ -111,7 +120,7 @@ Output: ### Check to see if you can start the subnet -Use the below command to check whether the subnet can be started. +Use the below command to check whether the subnet can be started. ```bash btcli subnet check-start --netuid x @@ -119,11 +128,11 @@ btcli subnet check-start --netuid x Where "x" is the subnet ID. -The output will provide you with the block registered and the block at which the subnet can be started, with "blocks remaining" and an estimated time. When this time has passed, the `check-start` command will return `Emission schedule can be started.` +The output will provide you with the block registered and the block at which the subnet can be started, with "blocks remaining" and an estimated time. When this time has passed, the `check-start` command will return `Emission schedule can be started.` ### Start the subnet -Use the below command to start the subnet once `check-start` returns `Emission schedule can be started.` +Use the below command to start the subnet once `check-start` returns `Emission schedule can be started.` ```bash btcli subnet start --netuid x diff --git a/docs/subnets/crowdloans/crowdloans-tutorial.md b/docs/subnets/crowdloans/crowdloans-tutorial.md new file mode 100644 index 0000000000..5a21237d0f --- /dev/null +++ b/docs/subnets/crowdloans/crowdloans-tutorial.md @@ -0,0 +1,305 @@ +--- +title: "Create a Subnet with a Crowdloan" +--- + +# Create a Subnet with a Crowdloan + +This page describes creating a subnet via **crowdloan** on a locally deployed Bittensor chain. We will use the Polkadot‑JS web app to submit extrinsics. + +See also [Crowdloans Overview](./index.md) + +The following steps will take us through the lifecycle of a subnet creation crowdloan: + +- First, we will **create** a crowdloan for a subnet. This is a special contract that will conditionally create the subnet if enough funds are raised (this threshold is called a crowdloan's **cap**). +- Next, we will **contribute** enough funds for the crowdloan to reach its cap. +- Next we must **finalize** the crowdloan, which executes the action wrapped inside the crowdloan—the creation of the subnet. +- Finally, we will verify the successful creation of the subnet by starting its emissions and observing the flow of liquidity to validator and creator hotkeys. + +## Prerequisites + +- A locally running subtensor development chain. For more information, see [run a local Bittensor blockchain instance](../../local-build/deploy.md). +- [Polkadot‑JS browser app](https://polkadot.js.org/apps/?#/explorer) and [Polkadot‑JS browser extension](https://chrome.google.com/webstore/detail/polkadot%7Bjs%7D-extension/mopnmbcafieddcagagdcbnhejhlodfdd) installed. +- An accessible 'Alice' wallet (see: [Provision Wallets for Local Deploy](../../local-build/provision-wallets)) + +## Step 1: Connect Polkadot‑JS to your local chain + +1. Open the Polkadot‑JS app. +2. In the network selector, choose Development → custom endpoint `ws://127.0.0.1:9944`. +3. Confirm your local chain metadata loads and your test accounts appear in the Accounts tab. To do this, see [create and import accounts to the Polkadot-JS extension](../../keys/multisig.md#create-and-import-3-coldkey-pairs-accounts-in-the-polkadot-js-browser-extension). + +:::tip +If the web app does not connect to your local chain, your browser’s privacy or security settings may be blocking it. Try adjusting those settings and reconnecting. +::: + +## Step 2: Generate call hash + +Before creating the crowdloan, you must first generate the hash that registers the subnet and creates a dedicated proxy for the designated beneficiary. +To begin: + +1. Go to **Developer** → **Extrinsics**. +2. Under “**using the selected account**”, pick the crowdloan "`creator`" account. +3. Under “**submit the following extrinsic**”, choose module `subtensorModule`, call `registerLeasedNetwork(emissionsShare, endBlock)`. +4. Fill the parameters: + + - `emissionsShare`: choose a percentage, e.g, 30. + - `endBlock`: leave as none. + +5. Copy the hex code shown in the **encoded call data** field. You will use this to create the crowdloan in the next step. + +:::info +Do not submit the transaction after entering the parameters. Only copy the encoded call data once all parameters are provided. +::: + +## Step 3: Create a crowdloan + +We will create a campaign whose purpose is to register a leased subnet on finalize. + +1. Go to **Developer** → **Extrinsics**. +2. Under “**using the selected account**”, pick the crowdloan "`creator`" account. +3. Under “**submit the following extrinsic**”, choose module `crowdloan`, call `create`. +4. Fill the parameters: + + - `deposit`: choose an amount (e.g., `10,000,000,000` = 10 TAO on default dev config) + - `min_contribution`: e.g., `100,000,000` (0.1 TAO) + - `cap`: e.g., `2,000,000,000,000` (2000 TAO) + - `end`: pick a block height in the near future (e.g., current + 5000) + - `call`: put the hex code of the encoded call data saved from the previous step. + - `target_address`: leave as **None**. + + :::info + + - Set the `cap` value higher than the projected subnet lock cost plus proxy deposit (and a small fee buffer). On most dev setups the baseline lock cost is 1,000 TAO (1,000,000,000,000 RAO). If `cap` equals the lock cost exactly, the lease coldkey may lack enough to pay proxy deposits and finalize can fail with insufficient balance. + - Crowdloans must have a duration between **7 days** (50,400 blocks minimum) and **60 days** (432,000 blocks maximum) on production chains. Therefore, the `end` value must be set at least 50,400 blocks and at most 432,000 blocks after the current block. This limitation also applies on testnet and mainnet. + ::: + +5. Click **Submit Transaction** and sign with the `creator` account. + +### Get the crowdloan ID + +Crowdloan IDs are allocated sequentially, starting from `0`, with each new crowdloan assigned the next incremental ID. There is no extrinsic to list created crowdloans. Therefore, to check the identity of crowdloans created, you must use one of these methods. + +- **From Events**: + + 1. Navigate to the **block explorer** after submitting the crowdload transaction. + 2. In the **Explorer** tab, find the block in which the transaction occured. + 3. In the **Events** panel, locate the `crowdloan.create` extrinsic. The `crowdloan.Created` event payload includes `crowdloanId` that represents the ID of the crowdloan. + +- **From storage**: + + 1. From the **Developer** dropdown, navigate to **Chain state** → **Storage**. + 2. Click the **selected state query** menu and select `crowdloan.nextCrowdloanId`. + 3. Click the **+** icon to run the query. + + :::tip + This query returns the ID assigned to the next crowdloan that will be created. Subtract 1 from the returned value to determine the total number of crowdloans that currently exist. + ::: + +- **From the JS console**: + 1. From the **Developer** dropdown, navigate to **Javascript**. + 2. Next, paste the following code block in the editor and run: + +```javascript +// List all existing crowdloan ids +const keys = await api.query.crowdloan.crowdloans.keys(); +console.log(keys.map((k) => k.args[0].toNumber())); +``` + +## Step 4: Contribute to the crowdloan + +All contributions must occur before the defined `end` block and will be clipped to the `cap` value provided. + +To contribute to the crowdloan, repeat the following steps for each contributor account: + +1. From the **Developer** dropdown, navigate to **Extrinsics** +2. Under “**using the selected account**”, select the crowdloan "contributor(s)" account. +3. Under “**submit the following extrinsic**”, choose module `crowdloan`, call `contribute (crowdloan_id, amount)`. +4. Provide the `crowdloan_id` (typically 0 on a fresh chain) and an amount. +5. Submit and sign. + +:::info + +The crowdloan cap is the maximum total raise. If a contribution would push the total above this cap, the contribution is clipped to fit the remaining available amount. Once the cap is reached, any further contributions are rejected and a `crowdloan.CapRaised` event is triggered. +::: + +### Verify crowdloan contributions + +To verify crowdload contributions: + +- **From Events**: + + 1. Navigate to the **block explorer** after contributing to the crowdload. + 2. In the **Explorer** tab, find the block in which the transaction occured. + 3. In the **Events** panel, locate the `crowdloan.contribute` extrinsic. The `crowdloan.Contributed` event payload contains the `crowdloanId`, the contributing account, and amount contributed. + +- **From storage**: + + 1. From the **Developer** dropdown, navigate to **Chain state** → **Storage**. + 2. Click the **selected state query** menu and select one of the following: + + - `crowdloan.Crowdloans(crowdloan_id)` to check details of the crowdloan + - `crowdloan.Contributions(crowdloan_id, contributor)` to check contributions by an account. + + 3. Click the **+** icon to run the query. + +## Step 5: Finalize the crowdloan + +The crowdload can be finalized by the creator when the end block has passed and the cap has been fully raised (`raised == cap`). + +1. Wait for the chain to reach the `end` block. +2. From the **Developer** dropdown, go to **Extrinsics**. +3. Under **using the selected account**, select the crowdloan creator account. +4. Select `crowdloan.finalize(crowdloan_id)` and put the ID of the crowdload. +5. Submit and sign. + +
+Show Event Output +``` +system.ExtrinsicSuccess +balances.Withdraw (x2) +system.NewAccount (x2) +balances.Endowed +balances.Transfer (x2) +subtensorModule.RegistrationAllowed +subtensorModule.MaxAllowedUidsSet +subtensorModule.MaxAllowedValidatorsSet +subtensorModule.MinAllowedWeightSet +subtensorModule.MaxWeightLimitSet +subtensorModule.AdjustmentIntervalSet +subtensorModule.RegistrationPerIntervalSet +subtensorModule.AdjustmentAlphaSet +subtensorModule.ImmunityPeriodSet +subtensorModule.MinDifficultySet +subtensorModule.MaxDifficultySet +subtensorModule.NetworkAdded +balances.Reserved +proxy.ProxyAdded +subtensorModule.SubnetLeaseCreated +crowdloan.Finalized +balances.Deposit +transactionPayment.TransactionFeePaid +extrinsic event +``` +
+ +:::info + +- Even if the `cap` has been raised, the crowdloan cannot be finalized before the `end` block. Finalizing before the contribution period ends fails with a `ContributionPeriodNotEnded` event. +- If `target_address` was provided, the raised amount is transferred there. +- The stored `subtensor.register_leased_network` call executes with creator origin, and the subnet lease is created. +- The created subnet lease includes the coldkey and hotkey of the proxy wallet that manages the subnet. See [Get the lease coldkey](#get-the-lease-coldkey). + ::: + +### Verify the leased subnet + +Finalizing the crowdloan registers a new subnet and creates a dedicated proxy for the designated beneficiary. Use one of the following methods to verify the creation of the leased subnet: + +- **Using BTCLI**: + + You can verify the creation of the new subnet by running the following command in your terminal: + + ```sh + btcli subnets list --network local + ``` + + This command lists all created subnets on the chain. Notice the addition of a new subnet among the listed subnets—netuid `2` in the following output. + +
+Show Sample Output + +```console +Using the specified network local from config +[15:49:40] Warning: Verify your local subtensor is running on port 9944. subtensor_interface.py:89 + + Subnets + Network: local + + + ┃ ┃ Price ┃ Market Cap ┃ ┃ ┃ ┃ ┃ +Netuid ┃ Name ┃ (Τ_in/α_in) ┃ (α * Price) ┃ Emission (Τ) ┃ P (Τ_in, α_in) ┃ Stake (α_out) ┃ Supply (α) ┃ Tempo (k/n) +━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━━ + 0 │ τ root │ 1.0000 τ/Τ │ τ 0.00 │ τ 0.0000 │ -, - │ Τ 0.00 │ 0.00 Τ /21M │ -/- + 2 │ β omron │ 0.0000 τ/β │ τ 0.00 │ τ 0.0000 │ τ 1.00k, 1.00k β │ 0.00 β │ 1.00k β /21M │ 3/10 + 1 │ α apex │ 0.0000 τ/α │ τ 0.00 │ τ 0.0000 │ τ 10.00, 10.00 α │ 1.00 α │ 11.00 α /21M │ 28/100 +────────┼───────────┼─────────────┼─────────────┼──────────────┼────────────────────────┼───────────────┼──────────────┼───────────── + 4 │ │ τ 0.0 │ │ τ 0.0 │ τ 2.01k/20.93k (9.60%) │ │ │ + +``` + +
+ +## Step 6: Start the leased subnet (via proxy) + +Before starting the subnet, you must first get the address of the proxy wallet specified in the subnet lease, as this wallet controls the subnet. + +#### **Get the lease coldkey** + +1. From the **Developer** dropdown, navigate to **Chain state** → **Storage**. +2. Click the **selected state query** menu and select `subtensorModule.SubnetLeases(lease_id)` to display details of the subnet lease, including the beneficiary, emission share, end block, lease coldkey and hotkey, netuid, and creation cost. +3. Click the **+** icon to run the query. +4. Copy the value of the `lease.coldkey` in the response. You can add the lease coldkey to the address book on the Polkadot.js web app so that it's selectable in the UI. + +:::tip + +- In your local environment, the `lease_id` would be the same as the ID of the crowdloan created. You can confirm the `lease_id` by examining the block where the subnet lease was created for a `subtensorModule.SubnetLeaseCreated` event. + + ::: + +Next, follow the following steps to start the subnet: + +1. Go to **Developer** → **Extrinsics**. +2. Under “**using the selected account**”, pick the crowdloan "`creator`" account. +3. Under “**submit the following extrinsic**”, choose module `proxy`, call `proxy(real, forceProxyType, call)`. +4. Fill the parameters: + + - `real`: enter the `lease.coldkey` gotten from the previous query. + - `forceProxyType`: click the toggle and then choose the `SubnetLeaseBeneficiary`option in the dropdown. + - `call`: choose `subtensorModule.start_call` and then enter the netuid of the subnet you want to start. + - Submit and sign. + +## Observe dividends distribution + +Emissions accrue in Alpha (subnet share units), but are distributed in TAO. On distribution, the contributors' alpha is unstaked/swapped to TAO using the subnet pool; if swap/unstake cannot proceed (liquidity/price), the alpha is accumulated for later. + +Owner emissions are periodically split among contributors and the beneficiary, but only when all of these are true: + +- The subnet is leased and active (lease has not ended). +- A coinbase cycle paid an owner cut to the subnet owner for the given `netuid`. +- Current block is an exact multiple of `LeaseDividendsDistributionInterval` (check in Constants). +- There is sufficient liquidity to unstake the contributors’ cut from the subnet at or above the minimum swap price. + +Balances credited go to each contributor’s coldkey and the beneficiary’s coldkey. You can observe changes by querying balances over time. + +## Alternative path: Refund and dissolve + +If the cap is not reached by `end`: + +1. Anyone can call `crowdloan.refund(crowdloan_id)` repeatedly until all contributors (except the creator) are refunded (batched per call). +2. After refunds complete (only the creator’s deposit remains), the `creator` can call `crowdloan.dissolve(crowdloan_id)` to clean up and recover the deposit. + +### Optional: Withdraw + +Before finalization: + +- Any contributor can `crowdloan.withdraw(crowdloan_id)` to recover their contribution. +- The creator can only withdraw amounts above the kept deposit; the deposit itself remains until refund/dissolve. + +## Troubleshooting + +- Call fails with `InvalidCrowdloadId` + - Ensure that the crowdloan ID exists. +- Call fails with `InvalidOrigin` + - Ensure that the selected account that is responsible for signing the transaction. +- Call fails with `BlockDurationTooShort` + - Ensure that the crowdloan `end` is set at least 7 days (50,400 blocks) from the current block. +- Call fails with `BlockDurationTooLong` + - Ensure that the crowdloan `end` is set at most 60 days (432,000 blocks) from the current block. +- Contribution call fails with `ContributionPeriodEnded` + - Extend the `end` value on the crowdloan using the `crowdloan.updateEnd` extrinsic. +- Finalize fails with `CapNotRaised` + - Ensure total `raised` equals `cap`. Add contributions or adjust `cap` via `update_cap` (creator‑only) before `finalize`. +- Finalize fails with `ContributionPeriodNotEnded` + - Wait until the `end` block is reached. +- Finalize fails with `CallUnavailable` + - Ensure the nested call was supplied during `create`. The pallet stores it as a preimage; if unavailable, it errors and drops the reference. +- Refund does nothing + - Refunds only after `end` and only for non‑finalized campaigns. It processes up to `RefundContributorsLimit` contributors per call. diff --git a/docs/subnets/crowdloans/index.md b/docs/subnets/crowdloans/index.md new file mode 100644 index 0000000000..a64d47a0cb --- /dev/null +++ b/docs/subnets/crowdloans/index.md @@ -0,0 +1,120 @@ +--- +title: "Crowdloans" +--- + +### Overview + +The crowdloan feature lets a group of people collectively fund an extrinsic execution or a balance transfer to a specific address. For example, it can be used to fund the registration of a new Bittensor subnet and share the resulting emissions according to each person's contribution. Instead of a single sponsor paying the full lease cost up front, a creator opens a crowdloan with a funding cap and end block, contributors deposit funds until the cap is met, and—on success—the pallet finalizes the crowdloan by funding subnet registration and activating emissions for the group. + +At finalization, the system executes an on‑chain call—typically `subtensor::register_leased_network`—using the crowdloan's funds. This registers the subnet and creates a dedicated proxy, `SubnetLeaseBeneficiary`, for the designated beneficiary (the crowdloan creator). That proxy is authorized to operate the subnet (for example, configuring subnet parameters and other allowed controls) without having custody of contributor funds or emissions splits. + +If the crowdloan is finalized and a lease is created, emissions flow to contributors pro‑rata based on their contributed share. If the crowdloan is not finalized after the end block, anyone can call refunds; once all contributors are refunded, the creator can dissolve the crowdloan. The call and target address specified at creation are immutable, ensuring that the purpose of the crowdloan cannot be changed mid‑campaign. This model makes subnet bootstrapping collaborative, transparent, and permissioned through a narrowly scoped proxy for safe, ongoing operations. + +Design features: +- Strong defaults: immutable target and call, capped funding, clear end block +- Shared upside: emissions distributed proportionally to contributions +- Safe operations: a dedicated proxy to manage the subnet within defined permissions + +:::info +**Crowdloans** and **Leasing** are two different but related concepts: + +**Crowdloan** enables someone to fund some extrinsic execution or a balance transfer at some end date, with contributors able to participate to a cap. When finalized, this will execute the extrinsic (substrate defined logic where we can move the funds and do something else) or transfer the balance to an address (EVM smart contract address for example). + +**Leasing** is split profit ownership of a subnet. This is tightly coupled to Crowdloan because a lease can only be created through a Crowdloan where the crowdloan extrinsic will be the `register_leased_network`. The logic to create a lease uses the contributors from the crowdloan as the lease shareholders, and the crowdloan creator as the lease beneficiary. Parameters like the lease end block and lease emissions shares are defined when you create the crowdloan. +::: + +See also [Create a Subnet with a Crowdloan](./crowdloans-tutorial.md) + +## Crowdloan Lifecycle + +- **Create** a campaign with deposit, cap, end, min contribution, optional `call` and `target_address`. [Source code](https://github.com/opentensor/subtensor/blob/main/pallets/crowdloan/src/lib.rs#L318-L326) + +- **Contribute** funds; amounts are clipped to remaining cap; contributors are counted. [Source code](https://github.com/opentensor/subtensor/blob/main/pallets/crowdloan/src/lib.rs#L413-L420) + +- **Withdraw** before finalization; creator cannot withdraw below their deposit. [Source code](https://github.com/opentensor/subtensor/blob/main/pallets/crowdloan/src/lib.rs#L505-L525) + +- **Finalize** after end when cap is fully raised. Optionally transfers to `target_address` and dispatches the stored `call`. [Source code](https://github.com/opentensor/subtensor/blob/main/pallets/crowdloan/src/lib.rs#L566-L581) + +- **Refund** loop refunds up to `RefundContributorsLimit` per call; may need multiple calls. [Source code](https://github.com/opentensor/subtensor/blob/main/pallets/crowdloan/src/lib.rs#L637-L646) + +- **Dissolve** after refunds; creator's deposit is returned and storage cleaned up. [Source code](https://github.com/opentensor/subtensor/blob/main/pallets/crowdloan/src/lib.rs#L711-L721) + +- **Update** parameters while crowdloan is running (creator only): + - `update_min_contribution` - adjust minimum contribution amount + - `update_end` - extend the end block + - `update_cap` - adjust the funding cap + +## Emissions distribution during a lease + +- When owner rewards are paid to a leased subnet, they are split into contributor dividends and a beneficiary cut. [Source code](https://github.com/opentensor/subtensor/blob/81ee047fd124f8837555fd79e8a3957688c5b0c6/pallets/subtensor/src/subnets/leasing.rs#L250) + +- Distribution is pro‑rata by recorded share; any remainder goes to the beneficiary. A lease can be created with an emissions share from 0 to 100%, which determines the share distributed to contributors. For example, if the emissions share is 50%, it means that 50% of the owner cut (18% currently) so 9% will be split proportionally to their share to contributors. [Source code](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/subnets/leasing.rs#L324-L339) + +## Operating the leased subnet via proxy + +- On successful registration, a `SubnetLeaseBeneficiary` proxy is added from the lease coldkey to the beneficiary. This proxy can call a narrowly scoped set of operations to operate the subnet. [Source code](https://github.com/opentensor/subtensor/blob/main/runtime/src/lib.rs#L886-L907) + +- Allowed calls for `ProxyType::SubnetLeaseBeneficiary` include starting subnet calls and selected admin‑utils setters (hyperparameters), not unrestricted sudo. [Source code](https://github.com/opentensor/subtensor/blob/main/runtime/src/lib.rs#L792-L852) + +## Runtime parameters (defaults) + +These constants define crowdloan requirements and operational limits in the runtime: [Source code](https://github.com/opentensor/subtensor/blob/main/runtime/src/lib.rs#L1556-L1571) + +Implications: + +- **Refund batching**: Up to 50 contributors are processed per `refund` call. +- **Duration bounds**: Campaigns must last between 7 days (50,400 blocks) and 60 days (432,000 blocks) on production chains. +- **Contribution floor**: Enforces a minimum "ticket size" for contributors. + +## FAQ + +### What problem do crowdloans solve? + +Crowdloans enable someone to fund some extrinsic execution or a balance transfer at some end date, with contributors able to participate to a cap. When finalized, this will execute the extrinsic (substrate defined logic where we can move the funds and do something else) or transfer the balance to an address (EVM smart contract address for example). + +Leasing is defined as split profit ownership of a subnet. This is tightly coupled to Crowdloan because a lease can only be created through a Crowdloan where the crowdloan extrinsic will be the "register_leased_network". The logic to create a lease will use the contributors from the crowdloan as the lease shareholders, the lease beneficiary will be crowdloan creator. Parameters like lease end block (some block in the future, probably much farther than crowdloan end) or lease emissions share are defined when you create the crowdloan and you pass the register_lease_network call with the parameters filled. + +### How does the end‑to‑end flow work? + +Creator calls `create` with deposit, cap, end, and a `call` of `subtensor::register_leased_network`. Contributors fund until the cap is hit. After the end block, creator calls `finalize`; funds transfer and the stored call executes with creator origin. A subnet and a `SubnetLeaseBeneficiary` proxy are set up; contributor shares are recorded, leftover cap is refunded. + +### Can the purpose of a crowdloan be changed after it starts? + +No. The `call` and optional `target_address` are bound at creation and used at `finalize`. The pallet exposes `CurrentCrowdloanId` only during dispatch to the called extrinsic, preventing mid‑campaign repurposing. + +### Who can finalize a crowdloan and when? + +Only the creator, after the end block, and only if `raised == cap` and it hasn’t already been finalized. + +### What happens if the cap is not reached? + +Anyone can call `refund` to batch‑refund contributors (excluding the creator) up to `RefundContributorsLimit` per call. After all refunds, only the creator can `dissolve` to recover the deposit and clean storage. + +### How are emissions split during a lease? + +Owner rewards are split to contributors by their recorded `SubnetLeaseShares`; any remainder goes to the beneficiary. The emissions are swapped for TAO and TAO is distributed to the contributors, not alpha. This runs automatically during coinbase distribution. + +### What permissions does the beneficiary proxy have? + +They can invoke a curated set of calls (e.g., start subnet calls and selected admin‑utils setters like difficulty, weights, limits). + + +### Can the campaign parameters be updated mid‑flight? + +The creator can update `min_contribution`, `end`, and `cap` on a non‑finalized crowdloan, subject to checks (duration bounds, cap >= raised, etc.). The `call` and `target_address` are immutable. + +### Is there a maximum number of contributors? + +Yes. `MaxContributors` limits unique contributors per crowdloan; contributions beyond that will be rejected. + +### How are leftover funds handled at lease creation? + +Any leftover cap (after paying registration + proxy cost) is refunded to contributors; the residual remainder goes to the beneficiary. + +### How do I track my expected emissions? + +Your share equals your contribution divided by total raised at `finalize`. Emissions are distributed to your coldkey during the lease according to that share. + +### Can a lease be terminated early? + +No. The beneficiary may terminate only after the optional `end_block` has passed; for perpetual leases there is no end block. diff --git a/docs/subnets/index.md b/docs/subnets/index.md deleted file mode 100644 index 9b728cbe7d..0000000000 --- a/docs/subnets/index.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: "Managing Subnets" ---- - -Creating and managing a subnet is a significant undertaking diff --git a/docs/subnets/managing-mechanisms-btcli.md b/docs/subnets/managing-mechanisms-btcli.md new file mode 100644 index 0000000000..c962ada776 --- /dev/null +++ b/docs/subnets/managing-mechanisms-btcli.md @@ -0,0 +1,156 @@ +--- +title: "Managing Multiple Incentive Mechanisms with BTCLI" +--- + +# Managing Multiple Incentive Mechanisms with BTCLI + +This tutorial shows how to configure and manage multiple incentive mechanisms in a single subnet using BTCLI. + +For a discussion of the background concepts, see [Understanding Multiple Incentive Mechanisms](understanding-multiple-mech-subnets). + +See also: [Managing Mechanisms with SDK](managing-mechanisms-with-sdk). + +:::tip Hot new feature +Multiple incentive mechanisms per subnet is a new feature that is still in development. It's initial release on mainnet is expected the week of September 22. In the meantime, it can be experimented with using a locally run chain. + +See [Announcements](../learn/announcements) for updates. +::: + +**Prerequisites** +- A local Subtensor chain running. See: [Run a Local Bittensor Blockchain Instance](../local-build/deploy) +- A local subnet created (and emissions started). See: [Create a Subnet (Locally)](../local-build/create-subnet) +- Wallets provisioned and funded for local development. See: [Provision Wallets](../local-build/provision-wallets) +- BTCLI installed (development version required for mechanism commands) + +:::tip +Substitute your subnet's netuid, which you can find with `btcli subnet list`. +::: + +:::warning Runtime limit +As of the current Subtensor runtime, a subnet can have a maximum of 2 mechanisms. Attempts to set a higher count will be rejected by the chain (runtime enforces `MaxMechanismCount = 2`). + +::: + +## Check initial state + +The following command will check the count of your subnet's incentive mechanisms and display the emissions split among them. + + +```bash +btcli subnet mech count --netuid 6 --network local +btcli subnet mech emissions --netuid 6 --network local +``` +``` +Subnet 6 currently has 1 mechanism. +(Tip: 1 mechanism means there are no mechanisms beyond the main subnet) + +Subnet 6 only has the primary mechanism (mechanism 0). No emission split to display. +``` + +## Create a second mechanism + +Create a second incentive mechanism by specifying the desired count as two for your subnet. + +```bash +btcli subnet mech set --mech-count 2 --netuid 6 --network local +``` +``` +Subnet 6 currently has 1 mechanism. Set it to 2? [y/n]: y +✅ Mechanism count set to 2 for subnet 6 +``` + + +Check the state to confirm the change + +```bash +btcli subnet mech count --netuid 6 --network local +btcli subnet mech emissions --netuid 6 --network local +``` +``` +Subnet 6 currently has 2 mechanisms. +(Tip: 1 mechanism means there are no mechanisms beyond the main subnet) +[13:44:15] Warning: Verify your local subtensor is running on port 9944. subtensor_interface.py:85 + + Subnet 6 • Emission split + Network: local + + Mechanism Index Weight (u16) Share (%) + ───────────────────────────────────────────── + 0 32768 50.000763 + 1 32767 49.999237 + Total 65535 100.000000 + ───────────────────────────────────────────── + + +Totals are expressed as a fraction of 65535 (U16_MAX). +No custom split found; displaying an even distribution. +``` + + +## Set a custom 90/10 emission split + +Let's allocate only 10% of our subnet's emissions to the second subnet. + + +```bash +btcli subnet mech emissions-split --netuid 6 --network local --split "90,10" --wallet-name alice +``` +``` + Subnet 6 • Emission split + Network: local + + Mechanism Index Weight (u16) Share (%) + ───────────────────────────────────────────── + 0 32768 50.000763 + 1 32767 49.999237 + Total 65535 100.000000 + ───────────────────────────────────────────── + + +Totals are expressed as a fraction of 65535 (U16_MAX). +No custom split found; displaying an even distribution. + + Proposed emission split + Subnet 6 + + Mechanism Index Weight (u16) Share (%) + ───────────────────────────────────────────── + 0 58982 90.000000 + 1 6553 10.000000 + + Total 65535 100.000000 + ───────────────────────────────────────────── + + +Proceed with these emission weights? [y/n] (y): y +🌍 📡 Setting emission split for subnet 6... +✅ Emission split updated for subnet 6 +``` + + +We can confirm this by running the getter command again: + +```bash +btcli subnet mech emissions --netuid 6 --network local +``` +``` + + Subnet 6 • Emission split + Network: local + + Mechanism Index Weight (u16) Share (%) + ───────────────────────────────────────────── + 0 58982 90.000763 + 1 6553 9.999237 + Total 65535 100.000000 + ───────────────────────────────────────────── + + +Totals are expressed as a fraction of 65535 (U16_MAX). +``` + +## Troubleshooting + +- Rate limiting: mechanism count changes are restricted (on mainnet) to once per ~24 hours (7200 blocks). See [Rate Limits in Bittensor](../learn/chain-rate-limits.md). +- Permissions: emission split and count updates require the subnet owner wallet. +- Local chain connectivity: ensure your local chain is running and the `network` parameter in your BTCLI config is set to `local`. diff --git a/docs/subnets/managing-mechanisms-with-sdk.md b/docs/subnets/managing-mechanisms-with-sdk.md new file mode 100644 index 0000000000..492fe4bfe5 --- /dev/null +++ b/docs/subnets/managing-mechanisms-with-sdk.md @@ -0,0 +1,164 @@ +--- +title: "Managing Multiple Incentive Mechanisms with SDK" +--- + +import { SdkVersion } from "../sdk/_sdk-version.mdx"; + +# Managing Multiple Incentive Mechanisms with SDK + +This tutorial shows how to configure and manage multiple incentive mechanisms in a single subnet using the Bittensor Python SDK. + +For background on the concepts, see [Understanding Multiple Incentive Mechanisms](./understanding-multiple-mech-subnets). + +See also [Managing Mechanisms with BTCLI](./managing-mechanisms-btcli). + +:::tip Hot new feature +Multiple incentive mechanisms per subnet is a new feature that is still in development. It's initial release on mainnet is expected the week of September 22. In the meantime, it can be experimented with using a locally run chain. + +See [Announcements](../learn/announcements) for updates. +::: + +**Prerequisites** + +- A local Subtensor chain running. See: [Run a Local Bittensor Blockchain Instance](../local-build/deploy) +- A local subnet created (and emissions started). See: [Create a Subnet (Locally)](../local-build/create-subnet) +- Wallets provisioned and funded for local development. See: [Provision Wallets](../local-build/provision-wallets) +- BTCLI installed (development version required for mechanism commands) + +:::tip +Substitute your subnet's netuid, which you can find with `btcli subnet list`. +::: + +:::warning Runtime limit +As of the current Subtensor runtime, a subnet can have a maximum of 2 mechanisms. Attempts to set a higher count will be rejected by the chain (runtime enforces `MaxMechanismCount = 2`). +::: + +## Initialize SDK and wallet + + + +The following snippet initializes the Bittensor SDK, imports the needed modules, connects to the local blockchain, and initializes the wallet object for the Alice wallet. + +Run this at the top of each script below. + +```python +import bittensor as bt +from bittensor.core.extrinsics.sudo import ( + sudo_set_mechanism_emission_split_extrinsic, + sudo_set_mechanism_count_extrinsic, +) + +# Connect to local chain +subtensor = bt.Subtensor(network="local") + +# Load the subnet owner wallet (assumes wallet is provisioned locally) +wallet = bt.Wallet(name="alice") + +# Input the netuid of the created subnet +netuid = 2 +print("SDK version:", bt.__version__) +print(f"Connected to {subtensor.network} — managing subnet {netuid} with wallet {wallet.name}") +``` + +```text +SDK version: 9.10.1 +Connected to local — managing subnet 7 with wallet alice +``` + +## Read current mechanism configuration + +Add the below snippet to display the current mechanism count on subnet 7 (or whatever subnet you have set above). + +```python +# Mechanism count +mech_count = subtensor.get_mechanism_count(netuid=netuid) +print(f"Subnet {netuid} mech count: {mech_count} ") + +# Current emission split (chain-stored values) +raw_split = subtensor.get_mechanism_emission_split(netuid=netuid) + +# Normalize to percentages by sum (works for either u16-scaled or raw values) +if not raw_split == None: + _total = max(1, sum(raw_split)) + percentages = [round((v / _total) * 100, 6) for v in raw_split] + print("Percentages:", percentages) +else: + print("No split defined.") +``` + +``` +Subnet 7 mech count: 1 +No split defined. +``` + +## Create a second mechanism + +Use the sudo extrinsic to increase the mechanism count to 2 for your subnet owner wallet. + +```python +# Increase mechanism count to 2 +response = sudo_set_mechanism_count_extrinsic( + subtensor=subtensor, + wallet=wallet, + netuid=netuid, + mech_count=2, +) +print(response) + +# Verify the change +new_count = subtensor.get_mechanism_count(netuid=netuid) +print(f"Subnet {netuid} mech count (after): {new_count}") + +# Read split again; if None, display implied equal distribution +split_after = subtensor.get_mechanism_emission_split(netuid=netuid) + +print("split:") +print(split_after) +``` + +```text +Set mech count success: True +Subnet 7 mech count (after): 2 +split: +[50, 50] +``` + +## Set a custom 60/40 emission split + +```python +new_split = [60, 40] + +response = sudo_set_mechanism_emission_split_extrinsic( + subtensor=subtensor, + wallet=wallet, + netuid=netuid, + maybe_split=new_split, +) + +print(response) +``` + +```text +Update success: True + + +``` + +## Verify the change + +```python +split_after = subtensor.get_mechanism_emission_split(netuid=netuid) +print("split:") +print(split_after) +``` + +```text +split: +[60, 40] +``` + +## Troubleshooting + +- Rate limiting: mechanism count changes are restricted (on mainnet) to once per ~24 hours (7200 blocks). See [Rate Limits in Bittensor](../learn/chain-rate-limits.md). +- Permissions: emission split and count updates require the subnet owner wallet. +- Local chain connectivity: ensure your local chain is running and your SDK points to `network="local"`. diff --git a/docs/subnets/metagraph.md b/docs/subnets/metagraph.md new file mode 100644 index 0000000000..6f51f32e18 --- /dev/null +++ b/docs/subnets/metagraph.md @@ -0,0 +1,969 @@ +--- +title: "The Subnet Metagraph" +--- + +import ThemedImage from '@theme/ThemedImage'; +import useBaseUrl from '@docusaurus/useBaseUrl'; +import { SdkVersion } from "../sdk/_sdk-version.mdx"; + +# Subnet Metagraph + +This page documents the Bittensor subnet metagraph. + +The **metagraph** is a core data structure in Bittensor that represents the complete state of a subnet at any given block. It contains comprehensive information about all neurons (miners and validators) participating in a subnet, their emissions, bonds, and trust, as well as subnet metrics. + +:::info source code +The metagraph is implemented in the Bittensor blockchain (Subtensor) as a Rust data structure. The source code is located in the [Subtensor repository](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/rpc_info/metagraph.rs). +::: + +Related reading: + +- [Understanding Neurons](../learn/neurons.md) +- [Subnet Hyperparameters](./subnet-hyperparameters.md) +- [Bittensor CLI Reference](../btcli/btcli.md) +- [Metagraph Precompile](../evm-tutorials/metagraph-precompile.md) + +## Accessing the Metagraph + +You can access metagraph data through multiple interfaces: + +### Bittensor CLI (btcli) + +The `btcli` command-line interface provides access to a subset of metagraph information (corresponding to "lite" mode in the SDK). For full metagraph data including weights and bonds, use the Python SDK with `lite=False`. + + + +```bash +# Dump metagraph subset to file (lite mode) +btcli subnets metagraph --netuid 14 --network finney \ + --json-output > sn14_metagraph.json + +# View abridged metagraph +btcli subnets metagraph --netuid 14 --network finney +``` + +```console + Subnet 14: TAOHash + Network: finney + + UID ┃ Stake (ξ) ┃ Alpha (ξ) ┃ Tao (τ) ┃ Dividends ┃ Incentive ┃ Emissions (ξ) ┃ Hotk… ┃ Coldkey ┃ Identity +━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━ + 29 │ 271.67k ξ │ 254.83k ξ │ τ 16.84k │ 0.129183 │ 0.000000 │ 19.122456 ξ │ 5Cf4… │ 5CKhH8 │ Owner14 (*Owner) + 3 │ 387.08k ξ │ 61.46k ξ │ τ 325.62k │ 0.184314 │ 0.000000 │ 27.280861 ξ │ 5C59… │ 5GZSAg │ + +... +``` + +:::note btcli Limitations +The btcli output shows a subset of metagraph data (lite mode). For complete data including ranks, trust scores, weights, and bonds, use the Python SDK with `lite=False`. +::: + +### Python SDK + + + +The Bittensor Python SDK [Metagraph module](pathname:///python-api/html/autoapi/bittensor/core/metagraph/index.html) provides programmatic access to metagraph data: + +```python +from bittensor.core.metagraph import Metagraph + +# Initialize metagraph for subnet 14 (lite mode - excludes weights/bonds) +m = Metagraph(netuid=14, network="finney", sync=True) + +# Initialize metagraph with full data including weights and bonds +m = Metagraph(netuid=14, network="finney", lite=False, sync=True) +``` + +### Mechanism-aware metagraphs (multiple incentive mechanisms) + +Subnets can run multiple incentive mechanisms. The SDK supports selecting a mechanism and exposes mechanism-related fields: + +- Metagraph accepts a `mechid` parameter (default `0`). +- New fields: `mechid: int`, `mechanisms_emissions_split: list[int]`, `mechanism_count: int`. + +```python +from bittensor.core.metagraph import Metagraph + +# Default mechanism (0) +meta = Metagraph(netuid=14, network="finney", sync=True) +print(meta.mechid) # 0 +print(meta.mechanism_count) # e.g., 2 +print(meta.emissions_split) # e.g., [60, 40] + +# Specific mechanism (1) +mech_meta = Metagraph(netuid=14, network="finney", sync=True, lite=False) +mech_meta.mechid = 1 +mech_meta.sync() # or re-init with mechid in helper constructors +``` + +See also: [Multiple Incentive Mechanisms Within Subnets](./understanding-multiple-mech-subnets.md). + +### Smart Contract Access (Metagraph Precompile) + +For smart contract integration, you can access metagraph data through the **Metagraph Precompile** at address `0x0000000000000000000000000000000000000802`. This provides read-only access to individual neuron metrics and network information. + +:::tip Smart Contract Integration +For detailed smart contract examples and complete ABI, see the [Metagraph Precompile](../evm-tutorials/metagraph-precompile.md) documentation. +::: + +### RPC Functions + +The blockchain provides several RPC functions for accessing metagraph data: + +- `get_metagraph(netuid)` - Returns complete metagraph for a subnet +- `get_all_metagraphs()` - Returns metagraphs for all subnets +- `get_selective_metagraph(netuid, indexes)` - Returns partial metagraph data + +See [Subtensor:Metagraph RPC source code](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/rpc_info/metagraph.rs) + +## Performance Considerations + +### Lite vs Full Sync + +- **Lite Mode** (`lite=True`): Faster sync, excludes weights and bonds (corresponds to btcli output) +- **Full Mode** (`lite=False`): Complete data including weight matrices and bond matrices + +### Caching + +The metagraph supports local caching to persistent files: + +```python +# Save metagraph for later use +metagraph.save() + +# Load cached metagraph +metagraph.load() + +# Custom save directory +metagraph.save(root_dir=['/custom', 'path']) +``` + +:::info Cache Location +Metagraph files are saved to `~/.bittensor/metagraphs/network-{network}/netuid-{netuid}/block-{block_number}.pt` by default. The files are persistent and not temporary. + +**Source**: [`bittensor/bittensor/core/metagraph.py:96-115`](https://github.com/opentensor/bittensor/blob/main/bittensor/core/metagraph.py#L96-L115) +::: + +## Data Structures + +### Metagraph Object + +In the Bittensor Python SDK, the `Metagraph` class encapsulates the following information about a particular subnet. + +[Metagraph class specification, SDK reference](pathname:///python-api/html/autoapi/bittensor/core/metagraph/index.html) + + +
+ Metagraph Properties +| Name | Description | +|------|--| +| `netuid` | The subnet's unique identifier within the Bittensor network | +| `network` | Name of the Bittensor network, i.e. mainnet ('finney'), test, or a locally deployed chain | +| `version` | Bittensor version number | +| `n` | Total number of neurons registered on the subnet | +| `block` | Block number when the metagraph record was retrieved | +| `total_stake` | Total [stake weight](../resources/glossary.md#stake-weight) (α + τ × 0.18) across all neurons | +| **Stake** / `S` | Total [stake weight](../resources/glossary.md#stake-weight) (α + τ × 0.18) of each neuron, determining consensus power and emissions | +| **Alpha Stake** / `AS` | Alpha token stake (α) for each neuron | +| **Tao Stake** / `TS` | [TAO](../resources/glossary.md#tao-tau) token stake (τ) for each neuron | +| **Ranks** / `R` | Final performance scores after [consensus](../resources/glossary.md#consensus-score) weight clipping - [stake-weighted](../resources/glossary.md#stake-weight) sum of clipped weights that directly determine emissions to miners | +| **Trust** / `T` | [Consensus alignment](../resources/glossary.md#trust) ratio (final rank / pre-rank) - measures how much consensus clipping affected the rank, where 1.0 indicates perfect consensus alignment | +| **Validator Trust** / `Tv` | [Validator trust](../resources/glossary.md#validator-trust) - sum of clipped weights set by each validator, measuring validator influence in consensus | +| **Consensus** / `C` | [Consensus score](../resources/glossary.md#consensus-score) - stake-weighted median of weights per neuron, serving as consensus threshold for weight clipping | +| **Incentive** / `I` | Normalized ranks representing [incentive](../resources/glossary.md#incentives) allocation for miners based on performance | +| **Emission** / `E` | Token [emission](../resources/glossary.md#emission) amounts in [RAO](../resources/glossary.md#rao) (10^-9 TAO) per block | +| **Dividends** / `D` | [Bond](../resources/glossary.md#validator-miner-bonds)-based rewards for validators from their investments in miners | +| **Bonds** / `B` | Inter-neuronal [bond matrix](../resources/glossary.md#validator-miner-bonds) representing validator investments in miners, used to calculate validator emissions | +| **Weights** / `W` | [Weight matrix](../resources/glossary.md#weight-matrix) (validator → miner assignments) formed from validator weight vectors, input for [Yuma Consensus](../resources/glossary.md#yuma-consensus) | +| `uids` | Unique [UID](../resources/glossary.md#uid-slot) identifiers for each neuron | +| `hotkeys` | Neuron [hotkey](../resources/glossary.md#hotkey) addresses | +| `coldkeys` | Neuron [coldkey](../resources/glossary.md#coldkey) addresses | +| `addresses` | Network IP addresses | +| `axons` | Network connection details for [axon](../resources/glossary.md#axon) servers | +| `neurons` | Complete [neuron](../resources/glossary.md#neuron) objects with all metadata | +| `active` | Neuron activity status within the [`activity_cutoff`](./subnet-hyperparameters.md#activitycutoff) window | +| `last_update` | Last update block numbers for staleness detection | +| `validator_permit` | Boolean array indicating whether each neuron has [validator permits](../resources/glossary.md#validator-permit) to set weights and participate in consensus | +| `name` | Subnet name | +| `symbol` | Subnet token symbol | +| `network_registered_at` | Registration block when subnet was created | +| `num_uids` | Current number of neurons | +| `max_uids` | Maximum allowed neurons (typically 256) | +| `identities` | List of chain identities | +| `identity` | Subnet identity information | +| `pruning_score` | List of pruning scores based on emissions, used for [deregistration](../resources/glossary.md#deregistration) when subnet is full | +| `block_at_registration` | List of registration blocks for each neuron, used for [immunity period](../resources/glossary.md#immunity-period) calculations | +| `tao_dividends_per_hotkey` | [TAO](../resources/glossary.md#tao-tau) dividends by hotkey | +| `alpha_dividends_per_hotkey` | Alpha dividends by hotkey | +| `last_step` | Last step block number | +| `tempo` | [Tempo](../resources/glossary.md#tempo) - block interval for updates (360 blocks = 72 minutes) | +| `blocks_since_last_step` | Blocks since last step | +| `owner_coldkey` | Subnet owner [coldkey](../resources/glossary.md#coldkey) | +| `owner_hotkey` | Subnet owner [hotkey](../resources/glossary.md#hotkey) | +| `hparams` | Subnet [hyperparameters](./subnet-hyperparameters.md) (`MetagraphInfoParams`) | +| `pool` | Liquidity pool information (`MetagraphInfoPool`) | +| `emissions` | Emission configuration (`MetagraphInfoEmissions`) | +
+ +### Neuron Info + +A neuron represents any registered participant on the subnet, whether a miner or a validator. + +See also: + +- [Understanding Neurons](../learn/neurons.md) +- [NeuronInfo class specification, SDK reference](pathname:///python-api/html/autoapi/bittensor/core/chain_data/neuron_info/index.html#bittensor.core.chain_data.neuron_info.NeuronInfo) + +
+ Neuron Info Properties +| Name | Description | +--|-- +`uid` | Unique [UID](../resources/glossary.md#uid-slot) identifier for the neuron within the subnet +`hotkey` | [Hotkey](../resources/glossary.md#hotkey) address for network operations and signing +`coldkey` | [Coldkey](../resources/glossary.md#coldkey) address for secure storage and high-risk operations +`stake` | Total [stake weight](../resources/glossary.md#stake-weight) (α + τ × 0.18) determining consensus power and emissions +`rank` | Final [performance rank](../resources/glossary.md#rank) after consensus weight clipping, directly determining emissions +`trust` | [Consensus alignment](../resources/glossary.md#trust) ratio (final rank / pre-rank) measuring impact of consensus filtering +`consensus` | [Consensus score](../resources/glossary.md#consensus-score) - stake-weighted median of weights serving as clipping threshold +`incentive` | Normalized [incentive](../resources/glossary.md#incentives) score representing reward allocation for miners +`emission` | Token [emission](../resources/glossary.md#emission) rate in [RAO](../resources/glossary.md#rao) per block +`dividends` | [Bond](../resources/glossary.md#validator-miner-bonds)-based dividend amount for validators +`validator_trust` | [Validator trust](../resources/glossary.md#validator-trust) measuring validator influence in consensus +`active` | Activity status within the [`activity_cutoff`](./subnet-hyperparameters.md#activitycutoff) window +`last_update` | Last update block number for staleness detection +`validator_permit` | Boolean indicating [validator permit](../resources/glossary.md#validator-permit) status for weight setting and consensus participation +`weights` | [Weight vector](../resources/glossary.md#weight-vector) assignments from this neuron to others +`bonds` | [Bond](../resources/glossary.md#validator-miner-bonds) investments from this neuron to others +`axon_info` | Network connection details for the [axon](../resources/glossary.md#axon) server +
+ +### Axons + +An axon represents a server run by a registered miner, capable of answering requests by validators. + +See also: + +- [Understanding Neurons](../learn/neurons.md) +- [Axon class specification, SDK reference](pathname:///python-api/html/autoapi/bittensor/core/axon/index.html#module-bittensor.core.axon) +- [Axon class specification, SDK reference](pathname:///python-api/html/autoapi/bittensor/core/axon/index.html#module-bittensor.core.axon) + +
+ Axon Properties + +| Name | Description | +| -------------- | --------------------------------------------------------------- | +| `hotkey` | Neuron [hotkey](../resources/glossary.md#hotkey) address | +| `coldkey` | Neuron [coldkey](../resources/glossary.md#coldkey) address | +| `ip` | IP address for the [axon](../resources/glossary.md#axon) server | +| `port` | Port number for the axon server | +| `ip_type` | IP type (IPv4/IPv6) | +| `version` | Protocol version for axon-dendrite communication | +| `placeholder1` | Reserved field for future use | +| `placeholder2` | Reserved field for future use | + +
+ +### MetagraphInfoParams + +Represents the hyperparameters of a subnet. + +See also: + +- [Subnet Hyperparameters](./subnet-hyperparameters) +- [MetagraphInfoParams class specification, SDK reference](pathname:///python-api/html/autoapi/bittensor/core/chain_data/metagraph_info/index.html#bittensor.core.chain_data.metagraph_info.MetagraphInfoParams) + +
+ MetagraphInfoParams (Hyperparams) Properties + +| Name | Description | +| ------------------------------- | ---------------------------------------------------------------------------------------------- | +| `activity_cutoff` | Activity cutoff threshold | +| `adjustment_alpha` | Adjustment alpha parameter | +| `adjustment_interval` | Adjustment interval | +| `alpha_high` | Alpha high threshold | +| `alpha_low` | Alpha low threshold | +| `bonds_moving_avg` | Bonds moving average | +| `burn` | Burn amount | +| `commit_reveal_period` | Commit reveal period | +| `commit_reveal_weights_enabled` | Commit reveal weights enabled | +| `difficulty` | Network difficulty | +| `immunity_period` | Immunity period | +| `kappa` | Kappa parameter | +| `liquid_alpha_enabled` | Liquid alpha enabled | +| `max_burn` | Maximum burn | +| `max_difficulty` | Maximum difficulty | +| `max_regs_per_block` | Max registrations per block | +| `max_validators` | Maximum validators | +| `max_weights_limit` | Maximum weights limit | +| `min_allowed_weights` | Minimum allowed weights | +| `min_burn` | Minimum burn | +| `min_difficulty` | Minimum difficulty | +| `pow_registration_allowed` | POW registration allowed | +| `registration_allowed` | Registration allowed | +| `rho` | Rho parameter | +| `serving_rate_limit` | Serving rate limit | +| `target_regs_per_interval` | Target registrations per interval | +| `tempo` | [Tempo](../resources/glossary.md#tempo) - block interval for updates (360 blocks = 72 minutes) | +| `weights_rate_limit` | [Weights](../resources/glossary.md#weight-vector) rate limit for submissions | +| `weights_version` | [Weights](../resources/glossary.md#weight-vector) version for protocol compatibility | + +
+ +### MetagraphInfoPool + +Contains information about the subnet's liquidity pool + +See also: + +- [Understanding Subnets: Liquidity pools](./understanding-subnets#liquidity-pools). +- [MetagraphInfoPool class specification, SDK reference](pathname:///python-api/html/autoapi/bittensor/core/chain_data/metagraph_info/index.html#bittensor.core.chain_data.metagraph_info.MetagraphInfoPool) + +
+ MetagraphInfoPool properties +| Name | Description | +--|-- +`alpha_out` | Alpha token quanitity bound for emission to subnet participants +`alpha_in` | Alpha token quanitity emitted to the liquidity pool +`tao_in` | Tao token emission to the liquidity pool +`subnet_volume` | Total trading volume in the subnet's liquidity pool +`moving_price` | Moving average price of the subnet token +
+ +### MetagraphInfoEmissions + +Contains detailed information about the subnet's emissions. + +See also: + +- [Emissions](../learn/emissions). +- [MetagraphInfoEmissions class specification, SDK reference](pathname:///python-api/html/autoapi/bittensor/core/chain_data/metagraph_info/index.html#bittensor.core.chain_data.metagraph_info.MetagraphInfoPool) + +
+ MetagraphInfoEmissions properties +| Name | Description | +--|-- +`alpha_out_emission` | Alpha token outflow [emission](../resources/glossary.md#emission) rate +`alpha_in_emission` | Alpha token inflow [emission](../resources/glossary.md#emission) rate +`subnet_emission` | Subnet [emission](../resources/glossary.md#emission) rate to participants +`tao_in_emission` | [TAO](../resources/glossary.md#tao-tau) token inflow [emission](../resources/glossary.md#emission) rate +`pending_alpha_emission` | Pending alpha token [emission](../resources/glossary.md#emission) amount +`pending_root_emission` | Pending root network [emission](../resources/glossary.md#emission) amount +
+ +## Python Code Examples + +This section provides practical examples of working with the Bittensor metagraph using the Python SDK. Each example demonstrates different aspects of metagraph analysis and data extraction. + +**Prerequisites**: + +- Bittensor Python SDK installed (`pip install bittensor`) +- Network connection to access Bittensor blockchain +- Python 3.7+ environment + +### Basic Metagraph Information + +This example shows how to access basic metagraph metadata and subnet information: + +```python +#!/usr/bin/env python3 + +from bittensor.core.metagraph import Metagraph + +def main(): + # Initialize metagraph for subnet 1 + print("Initializing metagraph for subnet 1...") + metagraph = Metagraph(netuid=1, network="finney", sync=True) + + # Get basic metagraph metadata + print("\n=== Basic Metagraph Metadata ===") + print(f"Network: {metagraph.network}") + print(f"Subnet UID: {metagraph.netuid}") + print(f"Total neurons: {metagraph.n.item()}") + print(f"Current block: {metagraph.block.item()}") + print(f"Version: {metagraph.version.item()}") + + # Get subnet information + print("\n=== Subnet Information ===") + print(f"Subnet name: {metagraph.name}") + print(f"Subnet symbol: {metagraph.symbol}") + print(f"Registered at block: {metagraph.network_registered_at}") + print(f"Max UIDs: {metagraph.max_uids}") + print(f"Owner: {metagraph.owner_coldkey}") + +if __name__ == "__main__": + main() +``` + +### Neuron Metrics Analysis + +This example demonstrates stake distribution and neuron metrics analysis: + +```python +#!/usr/bin/env python3 + +from bittensor.core.metagraph import Metagraph + +def main(): + # Initialize metagraph for subnet 1 + print("Initializing metagraph for subnet 1...") + metagraph = Metagraph(netuid=1, network="finney", sync=True) + + # Get all neuron UIDs + uids = metagraph.uids + print(f"\nNeuron UIDs: {uids.tolist()}") + + # Analyze stake distribution + stakes = metagraph.S # Total stake + alpha_stakes = metagraph.AS # Alpha token stake + tao_stakes = metagraph.TS # TAO token stake + + print(f"\n=== Stake Analysis ===") + print(f"Total stake across all neurons: {stakes.sum().item():.2f}") + print(f"Average stake per neuron: {stakes.mean().item():.2f}") + print(f"Highest stake: {stakes.max().item():.2f}") + print(f"Lowest stake: {stakes.min().item():.2f}") + + # Find top staked neurons + top_staked_indices = stakes.argsort()[::-1][:10] + print("\nTop 10 staked neurons:") + for i, idx in enumerate(top_staked_indices): + uid = uids[idx].item() + stake = stakes[idx].item() + print(f" {i+1}. UID {uid}: {stake:.2f} τ") + +if __name__ == "__main__": + main() +``` + +### Performance and Ranking Analysis + +This example shows how to analyze neuron performance, ranks, and trust scores: + +```python +#!/usr/bin/env python3 + +from bittensor.core.metagraph import Metagraph + +def main(): + # Initialize metagraph for subnet 1 + print("Initializing metagraph for subnet 1...") + metagraph = Metagraph(netuid=1, network="finney", sync=True) + + # Get performance metrics + ranks = metagraph.R # Performance ranks + trust = metagraph.T # Trust scores + consensus = metagraph.C # Consensus scores + validator_trust = metagraph.Tv # Validator trust + uids = metagraph.uids + + # Find top performing neurons + top_ranked_indices = ranks.argsort()[::-1][:10] + print("\n=== Top 10 Ranked Neurons ===") + for i, idx in enumerate(top_ranked_indices): + uid = uids[idx].item() + rank = ranks[idx].item() + trust_score = trust[idx].item() + consensus_score = consensus[idx].item() + print(f" {i+1}. UID {uid}: Rank={rank:.4f}, Trust={trust_score:.4f}, Consensus={consensus_score:.4f}") + + # Analyze trust distribution + print(f"\n=== Trust Analysis ===") + print(f"Average trust score: {trust.mean().item():.4f}") + print(f"Trust score std dev: {trust.std().item():.4f}") + print(f"Highest trust: {trust.max().item():.4f}") + print(f"Lowest trust: {trust.min().item():.4f}") + + # Find most trusted validators + validator_indices = metagraph.validator_permit.nonzero()[0] + if len(validator_indices) > 0: + validator_trust_scores = validator_trust[validator_indices] + top_validators = validator_indices[validator_trust_scores.argsort()[::-1][:5]] + print("\n=== Top 5 Trusted Validators ===") + for i, idx in enumerate(top_validators): + uid = uids[idx].item() + vtrust = validator_trust[idx].item() + print(f" {i+1}. UID {uid}: Validator Trust={vtrust:.4f}") + else: + print("\nNo validators found in this subnet.") + +if __name__ == "__main__": + main() +``` + +### Economic Analysis + +This example demonstrates analysis of economic metrics like incentives, emissions, and dividends: + +```python +#!/usr/bin/env python3 + +from bittensor.core.metagraph import Metagraph + +def main(): + # Initialize metagraph for subnet 1 + print("Initializing metagraph for subnet 1...") + metagraph = Metagraph(netuid=1, network="finney", sync=True) + + # Get economic metrics + incentives = metagraph.I # Incentive scores + emissions = metagraph.E # Emission rates + dividends = metagraph.D # Dividend distributions + uids = metagraph.uids + + # Analyze incentive distribution + print(f"\n=== Incentive Analysis ===") + print(f"Total incentives: {incentives.sum().item():.4f}") + print(f"Average incentive: {incentives.mean().item():.4f}") + print(f"Highest incentive: {incentives.max().item():.4f}") + + # Find highest incentivized neurons + top_incentive_indices = incentives.argsort()[::-1][:10] + print("\n=== Top 10 Incentivized Neurons ===") + for i, idx in enumerate(top_incentive_indices): + uid = uids[idx].item() + incentive = incentives[idx].item() + emission = emissions[idx].item() + dividend = dividends[idx].item() + print(f" {i+1}. UID {uid}: Incentive={incentive:.4f}, Emission={emission:.4f}, Dividend={dividend:.4f}") + + # Analyze dividend distribution + print(f"\n=== Dividend Analysis ===") + print(f"Total dividends: {dividends.sum().item():.4f}") + print(f"Average dividend: {dividends.mean().item():.4f}") + print(f"Dividend std dev: {dividends.std().item():.4f}") + +if __name__ == "__main__": + main() +``` + +### Network Connectivity Analysis + +This example shows how to analyze network addresses and axon information: + +```python +#!/usr/bin/env python3 + +from bittensor.core.metagraph import Metagraph + +def main(): + # Initialize metagraph for subnet 1 + print("Initializing metagraph for subnet 1...") + metagraph = Metagraph(netuid=1, network="finney", sync=True) + + # Get network information + axons = metagraph.axons + uids = metagraph.uids + + # Analyze network addresses + addresses = [axon.ip for axon in axons] + unique_addresses = set(addresses) + unique_hotkeys = set(metagraph.hotkeys) + unique_coldkeys = set(metagraph.coldkeys) + + print(f"\n=== Network Address Analysis ===") + print(f"Total unique addresses: {len(unique_addresses)}") + print(f"Total unique hotkeys: {len(unique_hotkeys)}") + print(f"Total unique coldkeys: {len(unique_coldkeys)}") + + # Find neurons sharing addresses + address_to_uids = {} + for i, address in enumerate(addresses): + if address not in address_to_uids: + address_to_uids[address] = [] + address_to_uids[address].append(uids[i].item()) + + print(f"\n=== Neurons Sharing Addresses ===") + for address, uids_list in address_to_uids.items(): + if len(uids_list) > 1: + print(f" Address {address}: UIDs {uids_list}") + + # Show axon details for first few neurons + print(f"\n=== Axon Details (First 5 Neurons) ===") + for i in range(min(5, len(axons))): + axon = axons[i] + uid = uids[i].item() + hotkey = metagraph.hotkeys[i][:10] + "..." + print(f" UID {uid}: IP={axon.ip}, Port={axon.port}, Hotkey={hotkey}") + +if __name__ == "__main__": + main() +``` + +### Weight Matrix Analysis + +This example demonstrates weight matrix analysis (requires `lite=False`): + +```python +#!/usr/bin/env python3 + +from bittensor.core.metagraph import Metagraph + +def main(): + # Initialize metagraph for subnet 1 with full sync (not lite) + print("Initializing metagraph for subnet 1 (full sync)...") + metagraph = Metagraph(netuid=1, network="finney", lite=False, sync=True) + + uids = metagraph.uids + + # Get weight matrix (requires lite=False) + if not metagraph.lite and hasattr(metagraph, 'weights') and metagraph.weights.size > 0: + weights = metagraph.W # Weight matrix + + print(f"\n=== Weight Matrix Analysis ===") + print(f"Weight matrix shape: {weights.shape}") + print(f"Total weights: {weights.sum().item():.4f}") + print(f"Average weight: {weights.mean().item():.4f}") + print(f"Max weight: {weights.max().item():.4f}") + + # Find miners receiving most weights + weight_received = weights.sum(axis=0) # Sum of incoming weights + top_receivers = weight_received.argsort()[::-1][:10] + print("\n=== Miners Receiving Most Frequent Weights ===") + for i, idx in enumerate(top_receivers): + uid = uids[idx].item() + total_weight = weight_received[idx].item() + print(f" {i+1}. UID {uid}: {total_weight:.4f}") + + # Find validators sending most weights + weight_sent = weights.sum(axis=1) # Sum of outgoing weights + top_senders = weight_sent.argsort()[::-1][:10] + print("\n=== Validators Setting Weights Most Frequently ===") + for i, idx in enumerate(top_senders): + uid = uids[idx].item() + total_weight = weight_sent[idx].item() + print(f" {i+1}. UID {uid}: {total_weight:.4f}") + + # Find highest set weight + max_weight_idx = weights.argmax() + sender_idx = max_weight_idx // weights.shape[1] + receiver_idx = max_weight_idx % weights.shape[1] + max_weight = weights.max().item() + print(f"\n=== Highest Single Set Weight ===") + print(f"UID {uids[sender_idx].item()} -> UID {uids[receiver_idx].item()}: {max_weight:.4f}") + else: + print("Weights not available. Make sure to use lite=False when initializing the metagraph.") + +if __name__ == "__main__": + main() +``` + +### Bond Analysis + +This example shows bond matrix analysis (requires `lite=False`): + +```python +#!/usr/bin/env python3 + +from bittensor.core.metagraph import Metagraph + +def main(): + # Initialize metagraph for subnet 1 with full sync (not lite) + print("Initializing metagraph for subnet 1 (full sync)...") + metagraph = Metagraph(netuid=1, network="finney", lite=False, sync=True) + + uids = metagraph.uids + + # Get bond matrix (requires lite=False) + if not metagraph.lite and hasattr(metagraph, 'bonds') and metagraph.bonds.size > 0: + bonds = metagraph.B # Bond matrix + + print(f"\n=== Bond Matrix Analysis ===") + print(f"Bond matrix shape: {bonds.shape}") + print(f"Total bonds: {bonds.sum().item():.4f}") + print(f"Average bond: {bonds.mean().item():.4f}") + + # Find miners with most bonds + bonds_received = bonds.sum(axis=0) # Sum of incoming bonds + top_bonded = bonds_received.argsort()[::-1][:10] + print("\n=== Top 10 Most Bonded Miners ===") + for i, idx in enumerate(top_bonded): + uid = uids[idx].item() + total_bonds = bonds_received[idx].item() + print(f" {i+1}. UID {uid}: {total_bonds:.4f}") + else: + print("Bonds not available. Make sure to use lite=False when initializing the metagraph.") + +if __name__ == "__main__": + main() +``` + +### Neuron Activity Analysis + +This example demonstrates analyzing validator activity: + +```python +#!/usr/bin/env python3 + +from bittensor.core.metagraph import Metagraph + +def main(): + # Initialize metagraph for subnet 1 + print("Initializing metagraph for subnet 1...") + metagraph = Metagraph(netuid=1, network="finney", sync=True) + + # Get activity information + active = metagraph.active # Activity status + last_update = metagraph.last_update # Last update blocks + validator_permit = metagraph.validator_permit # Validator permissions + uids = metagraph.uids + stakes = metagraph.S + ranks = metagraph.R + + # Analyze activity + active_count = active.sum().item() + total_count = len(active) + print(f"\n=== Activity Analysis ===") + print(f"Active validators: {active_count}/{total_count} ({active_count/total_count:.1%})") + + + # Analyze validator distribution + validator_count = validator_permit.sum().item() + print(f"\n=== Validator Analysis ===") + print(f"Validators: {validator_count}/{total_count} ({validator_count/total_count:.1%})") + + # Find validators + validator_indices = validator_permit.nonzero()[0] + if len(validator_indices) > 0: + print("\n=== Validators ===") + for idx in validator_indices: + uid = uids[idx].item() + stake = stakes[idx].item() + rank = ranks[idx].item() + print(f" UID {uid}: Stake={stake:.2f}, Rank={rank:.4f}") + else: + print("\nNo validators found in this subnet.") + +if __name__ == "__main__": + main() +``` + +### Subnet Economics + +This example shows how to access subnet hyperparameters, pool, and emissions: + +```python +#!/usr/bin/env python3 + +from bittensor.core.metagraph import Metagraph + +def main(): + # Initialize metagraph for subnet 1 + print("Initializing metagraph for subnet 1...") + metagraph = Metagraph(netuid=1, network="finney", sync=True) + + # Get subnet hyperparameters + hparams = metagraph.hparams + print(f"\n=== Subnet Hyperparameters ===") + print(f" Activity cutoff: {hparams.activity_cutoff}") + print(f" Adjustment alpha: {hparams.adjustment_alpha}") + print(f" Adjustment interval: {hparams.adjustment_interval}") + print(f" Alpha high: {hparams.alpha_high}") + print(f" Alpha low: {hparams.alpha_low}") + print(f" Burn rate: {hparams.burn}") + print(f" Max burn: {hparams.max_burn}") + print(f" Min burn: {hparams.min_burn}") + print(f" Difficulty: {hparams.difficulty}") + print(f" Max difficulty: {hparams.max_difficulty}") + print(f" Min difficulty: {hparams.min_difficulty}") + print(f" Max validators: {hparams.max_validators}") + print(f" Tempo: {hparams.tempo}") + print(f" Weights version: {hparams.weights_version}") + + # Get subnet pool information + pool = metagraph.pool + print(f"\n=== Subnet Pool ===") + print(f" Alpha out: {pool.alpha_out}") + print(f" Alpha in: {pool.alpha_in}") + print(f" TAO in: {pool.tao_in}") + print(f" Subnet volume: {pool.subnet_volume}") + print(f" Moving price: {pool.moving_price}") + + # Get subnet emissions + emissions = metagraph.emissions + print(f"\n=== Subnet Emissions ===") + print(f" Alpha out emission: {emissions.alpha_out_emission}") + print(f" Alpha in emission: {emissions.alpha_in_emission}") + print(f" Subnet emission: {emissions.subnet_emission}") + print(f" TAO in emission: {emissions.tao_in_emission}") + print(f" Pending alpha emission: {emissions.pending_alpha_emission}") + print(f" Pending root emission: {emissions.pending_root_emission}") + +if __name__ == "__main__": + main() +``` + +### Advanced Analysis Examples + +This example demonstrates advanced analysis techniques including correlations and [Gini coefficient](https://en.wikipedia.org/wiki/Gini_coefficient) of stake distribution. + +```python +#!/usr/bin/env python3 + +import numpy as np +from bittensor.core.metagraph import Metagraph + +def main(): + # Initialize metagraph for subnet 1 + print("Initializing metagraph for subnet 1...") + metagraph = Metagraph(netuid=1, network="finney", sync=True) + + # Get basic metrics + stakes = metagraph.S + ranks = metagraph.R + trust = metagraph.T + uids = metagraph.uids + + # Correlation analysis between metrics + print("\n=== Metric Correlations ===") + try: + # Calculate correlations + stake_rank_corr = np.corrcoef(stakes, ranks)[0, 1] + stake_trust_corr = np.corrcoef(stakes, trust)[0, 1] + rank_trust_corr = np.corrcoef(ranks, trust)[0, 1] + + print("Metric Correlations:") + print(f" Stake vs Rank: {stake_rank_corr:.4f}") + print(f" Stake vs Trust: {stake_trust_corr:.4f}") + print(f" Rank vs Trust: {rank_trust_corr:.4f}") + except Exception as e: + print(f"Could not calculate correlations: {e}") + + # Network efficiency analysis (if weights are available) + if not metagraph.lite and hasattr(metagraph, 'weights') and metagraph.weights.size > 0: + weights = metagraph.W + + print("\n=== Network Efficiency Analysis ===") + # Calculate network efficiency (average path length) + non_zero_weights = weights[weights > 0] + if len(non_zero_weights) > 0: + avg_weight = non_zero_weights.mean().item() + weight_std = non_zero_weights.std().item() + print(f"Network efficiency:") + print(f" Average non-zero weight: {avg_weight:.4f}") + print(f" Weight standard deviation: {weight_std:.4f}") + print(f" Weight distribution CV: {weight_std/avg_weight:.4f}") + else: + print("\nWeights not available for network efficiency analysis.") + + # Stake concentration analysis + print("\n=== Stake Concentration Analysis ===") + total_stake = stakes.sum().item() + try: + stake_percentiles = np.percentile(stakes, [25, 50, 75, 90, 95, 99]) + print("Stake distribution percentiles:") + for p, val in zip([25, 50, 75, 90, 95, 99], stake_percentiles): + print(f" {p}th percentile: {val:.2f} τ") + + # Gini coefficient for stake inequality + sorted_stakes = np.sort(stakes) + n = len(sorted_stakes) + cumulative_stakes = np.cumsum(sorted_stakes) + gini = (n + 1 - 2 * np.sum(cumulative_stakes) / cumulative_stakes[-1]) / n + print(f"Stake Gini coefficient: {gini:.4f}") + except Exception as e: + print(f"Could not calculate stake concentration metrics: {e}") + +if __name__ == "__main__": + main() +``` + +### Async Usage + +This example demonstrates async metagraph usage: + +```python +#!/usr/bin/env python3 + +import asyncio +from bittensor.core.async_subtensor import AsyncSubtensor +from bittensor.core.metagraph import async_metagraph + +async def analyze_metagraph(): + # Create async subtensor first + async with AsyncSubtensor(network="finney") as subtensor: + # Create async metagraph with subtensor + print("Creating async metagraph...") + metagraph = await async_metagraph( + netuid=1, + network="finney", + lite=False, + subtensor=subtensor # Pass the subtensor + ) + + # Perform analysis + stakes = metagraph.S + print(f"Total stake: {stakes.sum().item():.2f}") + + # Sync to latest block + print("Syncing to latest block...") + await metagraph.sync(subtensor=subtensor) + print(f"Synced to block: {metagraph.block.item()}") + +async def main(): + print("=== Async Metagraph Analysis ===") + await analyze_metagraph() + +if __name__ == "__main__": + asyncio.run(main()) +``` + +### Complete Neuron Information + +This example shows how to access complete neuron object information: + +```python +#!/usr/bin/env python3 + +from bittensor.core.metagraph import Metagraph + +def main(): + # Initialize metagraph for subnet 1 + print("Initializing metagraph for subnet 1...") + metagraph = Metagraph(netuid=1, network="finney", sync=True, lite=False) + + # Get complete neuron information for first 5 neurons + print("=== Complete Neuron Information (First 5 Neurons) ===") + + for i in range(min(5, metagraph.n.item())): + neuron = metagraph.neurons[i] + axon = metagraph.axons[i] # Fixed: Access axon from metagraph.axons + + print(f"\nNeuron {i}:") + print(f" UID: {neuron.uid}") + print(f" Hotkey: {neuron.hotkey}") + print(f" Coldkey: {neuron.coldkey}") + print(f" Stake: {neuron.stake}") + print(f" Rank: {neuron.rank}") + print(f" Trust: {neuron.trust}") + print(f" Consensus: {neuron.consensus}") + print(f" Incentive: {neuron.incentive}") + print(f" Emission: {neuron.emission}") + print(f" Dividends: {neuron.dividends}") + print(f" Active: {neuron.active}") + print(f" Last update: {neuron.last_update}") + print(f" Validator permit: {neuron.validator_permit}") + print(f" Validator trust: {neuron.validator_trust}") + print(f" Axon IP: {axon.ip}") # From metagraph.axons + print(f" Axon port: {axon.port}") + print(f" ---") + +if __name__ == "__main__": + main() +``` + +## Source Code References + +### Core Implementation + +- **Metagraph Class**: [`bittensor/bittensor/core/metagraph.py`](https://github.com/opentensor/bittensor/blob/main/bittensor/core/metagraph.py) +- **Chain Data**: [`bittensor/bittensor/core/chain_data/metagraph_info.py`](https://github.com/opentensor/bittensor/blob/main/bittensor/core/chain_data/metagraph_info.py) +- **Subtensor RPC**: [`subtensor/pallets/subtensor/src/rpc_info/metagraph.rs`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/rpc_info/metagraph.rs) + +### Consensus Algorithm + +- **Yuma Consensus**: [`subtensor/pallets/subtensor/src/epoch/run_epoch.rs`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/epoch/run_epoch.rs) +- **Mathematical Operations**: [`subtensor/pallets/subtensor/src/epoch/math.rs`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/epoch/math.rs) + +### Key Constants + +- **TAO Stake Weight**: [`bittensor/bittensor/core/settings.py:7`](https://github.com/opentensor/bittensor/blob/main/bittensor/core/settings.py#L7) - `ROOT_TAO_STAKE_WEIGHT = 0.18` diff --git a/docs/subnets/subnet-creators-btcli-guide.md b/docs/subnets/subnet-creators-btcli-guide.md index 4a796cd44d..cab7f0bc64 100644 --- a/docs/subnets/subnet-creators-btcli-guide.md +++ b/docs/subnets/subnet-creators-btcli-guide.md @@ -4,23 +4,26 @@ title: "Subnet Creator's Guide to `BTCLI`" # Subnet Creator's Guide to `BTCLI` -Subnet creators define and manage new subnets, specifying parameters like burn cost, hyperparameters, or other chain-level configurations. This role inherently requires a **coldkey** with sufficient balance/permissions to create or update subnets. +Subnet creators define and manage new subnets, specifying parameters like burn cost, hyperparameters, or other chain-level configurations. This role inherently requires a **coldkey** with sufficient balance/permissions to create or update subnets. -This page discusses btcli stuff specifically for Subnet Creators. For general coverage of BTCLI and permissions stuff, see: [Bittensor CLI: Permissions Guide](../btcli-permissions) +This page discusses btcli stuff specifically for Subnet Creators. For general coverage of BTCLI and permissions stuff, see: [Bittensor CLI: Permissions Guide](../btcli/btcli-permissions) -See also: [Coldkey and Hotkey Workstation Security](../getting-started/coldkey-hotkey-security). +See also: [Coldkey and Hotkey Workstation Security](../keys/coldkey-hotkey-security). ## Subnet Creator Requirements -To create a new subnet, you need a coldkey with sufficient TAO to pay the burn cost for creating a subnet +To create a new subnet, you need a coldkey with sufficient TAO to pay the burn cost for creating a subnet To modify a subnet, you need the coldkey associated with ownership of the subnet ## `btcli` commands for subnet creators + ### monitor subnet + Permissionless, use `btcli subnet show` or `btcli view dashboard`. ### create subnet + Requires coldkey with sufficient TAO. `btcli subnet create` @@ -32,5 +35,4 @@ Configure your subnet's hyperparameters with `btcli sudo set`. Requires the cold If you suspect your coldkey may have been leaked, you can request to swap it out of your wallet, using an extrinsic blockchain transaction. This operation has a 5 day waiting period, during which your coldkey will be locked. The cost of this coldkey swap transaction is 0.1 TAO. -See [Rotate/Swap your Coldkey](../subnets/schedule-coldkey-swap) - +See [Rotate/Swap your Coldkey](../keys/schedule-coldkey-swap) diff --git a/docs/subnets/subnet-deregistration.md b/docs/subnets/subnet-deregistration.md new file mode 100644 index 0000000000..6702164e42 --- /dev/null +++ b/docs/subnets/subnet-deregistration.md @@ -0,0 +1,115 @@ +--- +title: "Subnet Deregistration" +--- + +# Subnet Deregistration + +This page details the process by which subnets can become deregistered from Bittensor network, with an eye to the implementation of the functionality in the Subtensor codebase that makes up Bittensor's blockchain layer. + +See also [Learn Bittensor: Subnet Deregistration](https://learnbittensor.org/concepts/dynamic-tao/subnet-deregistration) + +Subnet deregistration is a mechanism that manages the lifecycle of subnets within the Bittensor network. It ensures network quality by removing underperforming subnets, clearing room for new subnet registrations within the 128 subnet limit. + +:::info Deployment Timeline +The subnet deregistration feature deployed on September 17, 2025, with a 7-day delay before the first registrations can occur. +::: + +Subnet deregistration addresses network efficiency issues: +- Removes underperforming subnets that consume TAO emissions without providing value. +- Unlocks TAO resources locked in underperforming subnet pools + +| Parameter | Value | Description | +|-----------|-------|-------------| +| **Subnet Limit** | 128 | Maximum number of occupied subnet slots | +| **Immunity Period** | 4 months (864000 blocks) | Protection period from subnet deregistration +| **Rate Limiting** | 4 days (28800 blocks) | Minimum time between registrations/deregistrations | + +## The Automated Deregistration Process + +### Trigger + +The process begins when the subnet limit is reached and a new subnet attempts to register. + +Source: [`do_register_network()`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/subnets/subnet.rs#L146-158) + +### Selection Criteria +The subnet to deregister is the subnet with lowest EMA (Exponential Moving Average) price among non-immune subnets. + +Source code: [`get_network_to_prune()`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/coinbase/root.rs#L753-795) + +The subnet price EMA uses the standard EMA formula: +$$ +\mathrm{EMA}^{(t)} = \alpha \times \mathrm{current\_price} + (1 - \alpha) \times \mathrm{EMA}^{(t-1)} +$$ + +Where $\alpha$ is calculated dynamically based on subnet age: +$$ +\alpha = \frac{\mathrm{base\_alpha} \times \mathrm{blocks\_since\_start}}{\mathrm{blocks\_since\_start} + \mathrm{halving\_blocks}} +$$ + +- **base_alpha**: ~0.0003 for Bittensor mainnet ("finney") +- **blocks_since_start**: Number of blocks since subnet registration +- **halving_blocks**: Halving period for the subnet + +This EMA value is recalculated for the subnet each time the coinbase function runs. + +See also: +- [Navigating Subtensor Codebase: Coinbase Implementation](../navigating-subtensor/emissions-coinbase) +- [Exponential Moving Averages (EMAs) in Bittensor](../learn/ema.md). + + +### Immunity Protection +Network immunity period is currently 4 months from registration block. + - Formula: `current_block < registered_at + network_immunity_period` + - Source code: [Immunity check](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/coinbase/root.rs#L768-770) +### Rate Limiting +Deregistration can occur at most every once every 4 days (coordinated with registration rate). + - Block-based timing: 28800 blocks ≈ 4 days at 12s/block + - [Source code](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/utils/rate_limiting.rs#L27) + +See [Rate Limits in Bittensor](../learn/chain-rate-limits.md). + +## Special Cases and Edge Conditions + +### All Subnets Immune +If all subnets are still within their immunity period, the system will: +1. Return `None` from [`get_network_to_prune()`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/coinbase/root.rs#L753-795) +2. Registration fails with `SubnetLimitReached` error +3. No subnet is deregistered until at least one becomes eligible + +### Tied EMA Prices + +When multiple subnets have identical EMA prices: +1. Select the subnet with the earliest registration timestamp +2. Implementation: [Tie-breaking logic](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/coinbase/root.rs#L774-781) + +## Token Liquidation + +When a subnet is deregistered, all alpha tokens in that subnet are liquidated and the subnet's TAO pool is distributed to alpha holders and to refunding the subnet owner for their lock cost minus the emissions they've received. + +### Takeaways + +**Distribution Method**: Largest-remainder for fair rounding +**Owner Protection**: Owner gets refund minus emissions already received +**Immediate Effect**: All alpha tokens are destroyed and cannot be recovered + +### Liquidation Steps + +1. **Dissolve Liquidity Pools**: All liquidity pools in the subnet's AMM pools are dissolved +2. **Calculate Owner Refund**: The subnet owner's refund is calculated as: + ``` + refund = max(0, lock_cost - owner_received_emission_in_tao) + ``` + Where `owner_received_emission_in_tao` is the TAO value of the owner's cut of all emissions received during the subnet's lifetime. + +3. **Enumerate alpha Holders**: All alpha token holders and their stake amounts are collected + +4. **Extract TAO Pool**: The subnet's TAO pool (`SubnetTAO`) is extracted for distribution + +5. **Distribution**: TAO is distributed proportionally to alpha holders: + - Each holder receives: `(holder_alpha_value / total_alpha_value) * pool_tao` + - TAO is credited directly to each holder's coldkey free balance + +**Source Code**: +- [`destroy_alpha_in_out_stakes()`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/staking/remove_stake.rs#L444-623) +- [`prune_network()`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/coinbase/root.rs#L377) diff --git a/docs/subnets/subnet-hyperparameters.md b/docs/subnets/subnet-hyperparameters.md index ef1b8bbc99..770d193e35 100644 --- a/docs/subnets/subnet-hyperparameters.md +++ b/docs/subnets/subnet-hyperparameters.md @@ -34,35 +34,41 @@ Using the specified network test from config HYPERPARAMETER VALUE NORMALIZED ──────────────────────────────────────────────────────────────────────── - rho 10 10 - kappa 32767 0.4999923705 - immunity_period 5000 5000 - min_allowed_weights 1 1 - max_weights_limit 65535 65535 - tempo 99 99 - min_difficulty 10000000 5.421010862e-13 - max_difficulty 18446744073709551615 1 - weights_version 0 0 - weights_rate_limit 100 100 - adjustment_interval 360 360 activity_cutoff 5000 5000 - registration_allowed True True - target_regs_per_interval 1 1 - min_burn 500000 τ 0.0005 - max_burn 100000000000 τ 100.0000 + adjustment_alpha 17893341751498265066 0.97 + adjustment_interval 360 360 + alpha_high 58982 0.9000076295 + alpha_low 45875 0.7000076295 + alpha_sigmoid_steepness 0.0 0 bonds_moving_avg 900000 4.878909776e-14 - max_regs_per_block 1 1 - serving_rate_limit 50 50 - max_validators 64 64 - adjustment_alpha 58000 3.1441863e-15 - difficulty 10000000 5.421010862e-13 + bonds_reset_enabled False False commit_reveal_period 1 1 commit_reveal_weights_enabled False False - alpha_high 58982 0.9000076295 - alpha_low 45875 0.7000076295 + difficulty 18446744073709551615 1 + immunity_period 5000 5000 + kappa 32767 0.4999923705 liquid_alpha_enabled False False + max_burn 100000000000 100.0000 τ + max_difficulty 18446744073709551615 1 + max_regs_per_block 1 1 + max_validators 64 64 + max_weight_limit 65535 1 + min_allowed_weights 1 1 + min_burn 500000 0.0005 τ + min_difficulty 18446744073709551615 1 + registration_allowed True True + rho 10 10 + serving_rate_limit 50 50 + subnet_is_active True True + target_regs_per_interval 1 1 + tempo 360 360 + transfers_enabled True True + user_liquidity_enabled True True + weights_rate_limit 100 100 + weights_version 0 0 + yuma_version 2 2 ──────────────────────────────────────────────────────────────────────── - ``` +``` :::tip @@ -111,14 +117,13 @@ The number of blocks for the stake to become inactive for the purpose of epoch i **`btcli` setter**: `btcli sudo set --param adjustment_alpha` -**Setter extrinsic**: `sudo_set_activity_cutoff` +**Setter extrinsic**: `sudo_set_adjustment_alpha` **Permissions required to set**: Subnet Creator **Description**: `AdjustmentAlpha` is the rate at which difficulty and burn are adjusted up or down. - ### AdjustmentInterval **Type**: u16 @@ -133,18 +138,32 @@ The number of blocks for the stake to become inactive for the purpose of epoch i **Description**: -`AdjustmentInterval` is number of blocks that pass between difficulty and burn adjustments. So, I was wrong about "next block" when I said that if root sets difficulty outside of range, it will get back in range. Difficulty will get back in range at most after `AdjustmentInterval` blocks pass. +`AdjustmentInterval` is number of blocks that pass between difficulty and burn adjustments. + +### AlphaSigmoidSteepness + +**Type**: u16 + +**Default**: 1000 + +**`btcli` setter**: `btcli sudo set --param alpha_sigmoid_steepness` + +**Setter extrinsic**: `sudo_set_alpha_sigmoid_steepness` +**Permissions required to set**: Subnet Creator + +**Description**: +`AlphaSigmoidSteepness` determines how the consensus mechanism assigns an alpha value for a given miner-validator pair based on voting alignment. Lower steepness values result in moderate alpha values, while higher steepness values push alpha values closer to the defined `alpha_low` or `alpha_high` values. ### BondsMovingAverage -**Type**: +**Type**: -**Default**: +**Default**: -**`btcli` setter**: bonds_moving_avg +**`btcli` setter**: `btcli sudo set --param bonds_moving_avg` -**`btcli` setter**: `btcli sudo set --param sudo_set_bonds_moving_average` +**`btcli` setter**: `sudo_set_bonds_moving_average` **Permissions required to set**: Subnet Creator @@ -152,8 +171,7 @@ The number of blocks for the stake to become inactive for the purpose of epoch i The moving average of bonds. The higher bonds yield to higher dividends for validators. -See [Yuma Consensus: bonding mechanics](../yuma-consensus#bonding-mechanics). - +See [Yuma Consensus: bonding mechanics](../learn/yuma-consensus#bonding-mechanics). ### BondsPenalty @@ -166,18 +184,34 @@ See [Yuma Consensus: bonding mechanics](../yuma-consensus#bonding-mechanics). **Setter extrinsic**: `sudo_set_bonds_penalty` **Permissions required to set**: root + **Description**: The magnitude of the penalty subtracted from weights for exceeding consensus, for a specific subnet. -See [Yuma Consensus: Penalizing out-of-consensus bonds](../yuma-consensus#penalizing-out-of-consensus-bonds). +See [Yuma Consensus: Penalizing out-of-consensus bonds](../learn/yuma-consensus#penalizing-out-of-consensus-bonds). + +### BondsResetEnabled +**Type**: Bool + +**Default**: False + +**`btcli` setter**: `btcli sudo set --param bonds_reset_enabled` + +**Setter extrinsic**: `sudo_set_bonds_reset_enabled` + +**Permissions required to set**: Subnet creator + +**Description**: + +Determines whether or not bonds are reset-enabled. ### CommitRevealPeriod -**Type**: u16 - +**Type**: u16 + **Default**: 1 **`btcli` setter**: `btcli sudo set --param commit_reveal_period` @@ -188,9 +222,11 @@ See [Yuma Consensus: Penalizing out-of-consensus bonds](../yuma-consensus#penali **Description**: -How long, in blocks, the consensus weights for a subnet remain time-lock encrypted, preventing weight-copying. +The number of **tempos** (epochs) that must elapse before validator weights are revealed from time-lock encryption. Prevents weight-copying. + +**Important**: This is measured in **tempos** (not blocks, as you might expect). A tempo equals the subnet's `tempo` hyperparameter (typically 360 blocks). For example, if you set `commit_reveal_period` to 3 and your `tempo` is 360, weights will be revealed after 3 tempos = 1080 blocks. -See [Commit Reveal](./commit-reveal) +See [Commit Reveal](../concepts/commit-reveal) for details on how commit reveal works. ### CommitRevealWeightsEnabled @@ -198,7 +234,7 @@ See [Commit Reveal](./commit-reveal) **Default**: false -**`btcli` setter**: yes +**`btcli` setter**: `btcli sudo set --param commit_reveal_weights_enabled` **Setter extrinsic**: `sudo_set_commit_reveal_weights_enabled` @@ -206,8 +242,7 @@ See [Commit Reveal](./commit-reveal) **Description**: - Enables [Commit Reveal](./commit-reveal) - +Enables [Commit Reveal](../concepts/commit-reveal) ### Difficulty @@ -215,9 +250,9 @@ See [Commit Reveal](./commit-reveal) **Default**: 10000000 -**`btcli` setter**: none +**`btcli` setter**: `btcli sudo set --param difficulty` -**Setter extrinsic**: `sudo_set_difficulty` +**Setter extrinsic**: `sudo_set_difficulty` **Permissions required to set**: Root @@ -227,17 +262,15 @@ Current dynamically computed value for the proof-of-work (POW) requirement for P - ### ImmunityPeriod - **Type**: u16 **Default**: 5000 -**`btcli` setter**: yes +**`btcli` setter**: `btcli sudo set --param immunity_period` -**Setter extrinsic**: `sudo_set_immunity_period` +**Setter extrinsic**: `sudo_set_immunity_period` **Permissions required to set**: Subnet creator @@ -245,15 +278,13 @@ Current dynamically computed value for the proof-of-work (POW) requirement for P The number of blocks after registration when a miner is protected from deregistration - ### Kappa - **Type**: u16 -**Default**: 32767 ( or approximately 0.5 normalized ) +**Default**: 32767 ( or approximately 0.5 normalized ) -**`btcli` setter**: yes +**`btcli` setter**: `btcli sudo set --param kappa` **Setter extrinsic**: `sudo_set_kappa` @@ -263,9 +294,7 @@ The number of blocks after registration when a miner is protected from deregistr The consensus majority ratio: The weights set by validators who have lower normalized stake than Kappa are not used in calculating consensus, which affects ranks, which affect incentives. - - -the consensus threshold for bond-clipping during [Yuma Consensus](../yuma-consensus) +the consensus threshold for bond-clipping during [Yuma Consensus](../learn/yuma-consensus) ### LiquidAlphaEnabled @@ -281,14 +310,10 @@ the consensus threshold for bond-clipping during [Yuma Consensus](../yuma-consen **Description**: -Enables the [liquid alpha ](./consensus-based-weights) feature. +Enables the [liquid alpha ](../concepts/consensus-based-weights) feature. - - - ### MaxAllowedValidators - **Type**: u16 **Default**: 64 @@ -303,7 +328,6 @@ Enables the [liquid alpha ](./consensus-based-weights) feature. Maximum validators on a subnet. - ### MaxBurn **Type**: u64 @@ -319,7 +343,6 @@ Maximum validators on a subnet. **Description**: The maximum of the dynamic range for TAO cost of burn registration on the subnet. - ### MaxDifficulty @@ -327,9 +350,9 @@ The maximum of the dynamic range for TAO cost of burn registration on the subnet **Default**: 18446744073709551615 normalized to 1 -**`btcli` setter**: `btcli sudo set --param min_difficulty` +**`btcli` setter**: `btcli sudo set --param max_difficulty` -**Setter extrinsic**: +**Setter extrinsic**: `sudo_set_max_difficulty` **Permissions required to set**: Subnet creator @@ -353,10 +376,8 @@ The maximum of the dynamic range for difficulty of proof-of-work registration on Maximum neuron registrations per block. Note: Actual limit may be lower, as there is also per interval limit `TargetRegistrationsPerInterval`. - ### MaxWeightsLimit - **Type**: u16 **Default**: 65535 @@ -386,7 +407,6 @@ Minimum number of weights for a validator to set when setting weights. ### MinBurn - **Type**: u64 **Default**: 500000 normalized to 0.0005(τ) @@ -396,7 +416,7 @@ Minimum number of weights for a validator to set when setting weights. **Setter extrinsic**: `sudo_set_min_burn` **Permissions required to set**: Subnet creator - + **Description**: The minimum of the range of the dynamic burn cost for registering on the subnet. @@ -435,17 +455,15 @@ The minimum of the range of the proof-of-work for registering on the subnet `NetworkPowRegistrationAllowed` is a flag that toggles PoW registrations on a subnet - ### NetworkRateLimit - **Type**: u64 **Default**: 7200 **`btcli` setter**: none -**Setter extrinsic**: +**Setter extrinsic**: **Permissions required to set**: root @@ -453,7 +471,6 @@ The minimum of the range of the proof-of-work for registering on the subnet Rate limit for network registrations expressed in blocks - ### NetworkRegistrationAllowed **Type**: Boolean @@ -462,7 +479,7 @@ Rate limit for network registrations expressed in blocks **`btcli` setter**: `btcli sudo set --param registration_allowed` -**Setter extrinsic**: `sudo_set_network_registration_allowed` +**Setter extrinsic**: `sudo_set_network_registration_allowed` **Permissions required to set**: Subnet creator @@ -470,18 +487,15 @@ Rate limit for network registrations expressed in blocks `NetworkRegistrationAllowed` determines if burned registrations are allowed. If both burned and pow registrations are disabled, the subnet will not get emissions. - - ### Rho - **Type**: u16 **Default**: 10 -**`btcli` setter**: yes +**`btcli` setter**: `btcli sudo set --param rho` -**Setter extrinsic**: `sudo_set_rho` +**Setter extrinsic**: `sudo_set_rho` **Permissions required to set**: Subnet creator @@ -493,14 +507,13 @@ Deprecated. ### ServingRateLimit - **Type**: u16 **Default**: 50 -**`btcli` setter**: +**`btcli` setter**: `btcli sudo set --param serving_rate_limit` -**Setter extrinsic**: `sudo_set_serving_rate_limit` +**Setter extrinsic**: `sudo_set_serving_rate_limit` **Permissions required to set**: Subnet creator @@ -508,9 +521,38 @@ Deprecated. Rate limit for calling `serve_axon` and `serve_prometheus` extrinsics used by miners. +### OwnerHyperparamRateLimit -### TargetRegistrationsPerInterval +**Type**: u16 + +**Default**: 2 (tempos) + +**`btcli` setter**: none + +**Setter extrinsic**: `sudo_set_owner_hparam_rate_limit` + +**Permissions required to set**: Root + +**Description**: +Global multiplier that rate-limits how frequently a subnet owner can update subnet hyperparameters. The cooldown window equals `Tempo(netuid) × OwnerHyperparamRateLimit` blocks. The rate limit is tracked independently per hyperparameter; changing `kappa` does not block an immediate change to `rho`, for example. + +### SubnetIsActive + +**Type**: Bool + +**Default**: False + +**`btcli` setter**: `btcli subnets start` + +**Setter extrinsic**: nil + +**Permissions required to set**: Subnet creator + +**Description**: +Indicates whether or not the subnet's emissions have started. + +### TargetRegistrationsPerInterval **Type**: u16 @@ -526,7 +568,6 @@ Rate limit for calling `serve_axon` and `serve_prometheus` extrinsics used by mi Maximum number of neuron registrations allowed per interval. Interval is `AdjustmentInterval` - ### Tempo **Type**: u16 @@ -542,18 +583,17 @@ Maximum number of neuron registrations allowed per interval. Interval is `Adjust **Description**: Length of subnet tempo in blocks. -See [Emission](../emissions.md) +See [Emission](../learn/emissions.md) ### ToggleTransfer - **Type**: Boolean **Default**: True -**`btcli` setter**: none +**`btcli` setter**: btcli sudo set --param transfers_enabled` -**Setter extrinsic**: `sudo_set_toggle_transfer` +**Setter extrinsic**: `sudo_set_toggle_transfer` **Permissions required to set**: Subnet creator @@ -561,6 +601,22 @@ See [Emission](../emissions.md) Allows/disallows transfer of stake between coldkeys. +### UserLiquidityEnabled + +**Type**: Bool + +**Default**: False + +**`btcli` setter**: `btcli sudo set --param user_liquidity_enabled` + +**Setter extrinsic**: `toggle_user_liquidity` + +**Permissions required to set**: Subnet creator + +**Description**: + +Determines whether or not the user liquidity feature is enabled on the subnet. + ### WeightsVersion **Type**: u16 @@ -587,7 +643,7 @@ If the version key specified in `set_weights` extrinsic is lower than this syste **`btcli` setter**: `btcli sudo set --param weights_rate_limit` -**Setter extrinsic**: +**Setter extrinsic**: `sudo_set_weights_set_rate_limit` **Permissions required to set**: Root @@ -595,6 +651,22 @@ If the version key specified in `set_weights` extrinsic is lower than this syste How long, in blocks, a validator must wait between weight commits on a subnet. +### YumaVersion + +**Type**: Bool + +**Default**: False + +**`btcli` setter**: `btcli sudo set --param yuma_version` + +**Setter extrinsic**: `sudo_set_yuma3_enabled` + +**Permissions required to set**: Subnet Creator + +**Description**: + +Toggles the consensus mechanism used by the subnet between Yuma Consensus v2 and v3. + ## Global/Root State Variables The following variables are global and/or can only be configured with `root` permissions, which are held by a triumvirate of Opentensor Foundation employees. They are listed here for reference. @@ -603,7 +675,7 @@ The following variables are global and/or can only be configured with `root` per **Type**: u12 -**Default**: +**Default**: **`btcli` setter**: no @@ -615,77 +687,74 @@ The following variables are global and/or can only be configured with `root` per The duration in blocks of the waiting period before a coldkey swap. -See [Rotate/Swap your Coldkey](./schedule-coldkey-swap) +See [Rotate/Swap your Coldkey](../keys/schedule-coldkey-swap) + -### Issuance +### DissolveNetworkScheduleDuration -**Type**: u64 +Deprecated -**Description**: -Refers to total issuance, the amount of TAO in circulation. +### EmissionValue +**Description**: -### LockReductionInterval +Deprecated. replaced with SubnetAlphaInEmission, SubnetAlphaOutEmission, and SubnetTaoInEmission. +### EvmChainId -**Type**: u64 +**Permissions required to set**: root -**Default**: 14 * 7200 +**Description**: -**`btcli` setter**: +The Chain ID. `945` for Bittensor mainnet, a.k.a. Finney. -**Setter extrinsic**: +### Issuance -**Permissions required to set**: root +**Type**: u64 **Description**: +Refers to total issuance, the amount of TAO in circulation. -The number of blocks that need to pass in order for the network lock cost to half. - -`sudo_set_lock_reduction_interval`| root +### LockReductionInterval +**Type**: u64 +**Default**: 14 \* 7200 -### NetworkMinLockCost +**`btcli` setter**: -**`btcli` setter**: none - -**Setter extrinsic**: `sudo_set_network_min_lock_cost` +**Setter extrinsic**: **Permissions required to set**: root **Description**: -`NetworkMinLockCost` is the minimum TAO to pay for subnet registration - -### StakeThreshold - +The number of blocks that need to pass in order for the network lock cost to half. -**Type**: u12 +`sudo_set_lock_reduction_interval`| root -**Default**: 1000 +### NetworkMinLockCost **`btcli` setter**: none -**Setter extrinsic**: `sudo_set_stake_threshold` +**Setter extrinsic**: `sudo_set_network_min_lock_cost` **Permissions required to set**: root **Description**: -The minimum stake required for validating. Currently 1000 +`NetworkMinLockCost` is the minimum TAO to pay for subnet registration ### TxDelegateTakeRateLimit - **Type**: u64 **Default**: 216000 -**`btcli` setter**: +**`btcli` setter**: -**Setter extrinsic**: +**Setter extrinsic**: **Permissions required to set**: root @@ -693,30 +762,8 @@ The minimum stake required for validating. Currently 1000 Rate limit of how frequently can a delegate take be increased - - -### DissolveNetworkScheduleDuration - -Deprecated - -### EmissionValue - -**Description**: - -Deprecated. replaced with SubnetAlphaInEmission, SubnetAlphaOutEmission, and SubnetTaoInEmission. - -### EvmChainId - -**Permissions required to set**: root - -**Description**: - -The Chain ID. `945` for Bittensor mainnet, a.k.a. Finney. - - ### TxRateLimit - **Type**: u64 **Default**: 1000 @@ -731,16 +778,30 @@ The Chain ID. `945` for Bittensor mainnet, a.k.a. Finney. Rate limit for `swap_hotkey` extrinsic. - ### SubnetOwnerCut **`btcli` setter**: none **Setter extrinsic**: `sudo_set_subnet_owner_cut` -**Permissions required to set**: root +**Permissions required to set**: root **Description**: The ratio of all subnet alpha emissions that is given to subnet owner as stake. (Global, fixed at 18%.) +### StakeThreshold + +**Type**: u12 + +**Default**: 1000 + +**`btcli` setter**: none + +**Setter extrinsic**: `sudo_set_stake_threshold` + +**Permissions required to set**: root + +**Description**: + +The minimum stake required for validating. Currently 1000 diff --git a/docs/subnets/uid-trimming.md b/docs/subnets/uid-trimming.md new file mode 100644 index 0000000000..846fe1151e --- /dev/null +++ b/docs/subnets/uid-trimming.md @@ -0,0 +1,121 @@ +--- +title: "UID Trimming" +--- + +# UID Trimming + +UID trimming is a subnet management feature that allows subnet owners to reduce the number of neuron UIDs registered on their subnet, compressing the remaining UIDs to maintain consecutive indexing. UID trimming safely preserves high-performing and immune neurons, + +:::info UID trimming rate limit +The chain's trim UID rate limit is 216,000 blocks (~30 days). Therefore, subnet owners can only make changes to their UID count every 30 days. + +See [Rate Limits in Bittensor](../learn/chain-rate-limits.md). +::: + +- **Preserves Immune UIDs**: Both temporally immune UIDs and owner-owned UIDs are protected from trimming +- **Emission-Based Selection**: UIDs are trimmed based on their emission scores, removing the lowest performers +- **UID Compression**: After trimming, remaining UIDs are compressed to the left to maintain consecutive indexing +- **Storage Migration**: All associated storage is properly migrated and cleaned up +- **Configurable Limits**: Subnet owners can set minimum and maximum allowed UID counts + +:::info + +- The minimum UID count to which subnet owners can trim is currently 64. +- The maximum number of immune UIDs must not exceed 80% of the maximum UID count. + ::: + +## Emission-Based Selection + +UIDs are sorted by their emission scores in descending order. The trimming process: + +1. **Identifies Low Performers**: Starts from the lowest emitters and works upward +2. **Skips Immune UIDs**: Bypasses any UIDs that are temporally or owner immune +3. **Respects Limits**: Ensures the final count doesn't exceed the maximum allowed UIDs + +## For Subnet Owners + +Subnet trim UIDs using [`btcli sudo trim`](#uid-trimming-with-btcli) or the `sudo_trim_to_max_allowed_uids` extrinsic. + +**What happens:** + +- Owner-controlled UIDs are protected +- Recently registered UIDs (within immunity period) are protected +- UIDs with the lowest emission scores are removed first +- Remaining UIDs are compressed to maintain consecutive indexing +- All associated data (weights, bonds, etc.) is properly migrated + +## For Miners and Validators + +### Protection from Trimming + +You are protected from trimming if you have: + +1. **Temporal Immunity**: You registered recently (within the subnet's immunity period) +2. **Owner Immunity**: Your UID is owned by the subnet owner (up to a configurable limit) +3. **High Emissions**: Only low emissions neurons can be trimmed. + +### What Happens When Your UID Gets Trimmed + +When your UID is trimmed, all of your neuron data is **permanently deleted** from the blockchain, including: + +- UID-to-hotkey mapping +- Block registration timestamp +- Emission (incentive and dividends) history +- All weights you set to other neurons (Validators only) +- All bonds other neurons (Validators) had to you (Miners) +- Axon information (IP, port, etc.) +- Neuron certificates +- Prometheus metrics +- Last update timestamps + +**Your UID number will be reassigned** - the remaining UIDs are compressed to maintain consecutive numbering (e.g., if UIDs 5, 7, 9 remain after trimming, they become UIDs 0, 1, 2). + +### After Trimming + +If your UID was trimmed: + +- You must re-register to participate again +- You will receive a new UID number +- You start fresh with default scores + +### Source Code References + +- **Core Implementation**: `subtensor/pallets/subtensor/src/subnets/uids.rs` + +## UID trimming with BTCLI + +The `btcli sudo trim` command allows subnet owners to reduce the number of active UIDs on their subnet by trimming excess UIDs down to a specified maximum limit. + +:::warning Subnet Owner Only +This is a **sudo operation** that can only be performed by the subnet owner (the wallet that created the subnet). +::: + +### Basic usage + +```shell +btcli sudo trim --netuid --max +``` + +### Example + + +To trim subnet 14 on a local chain to a maximum of 100 UIDs: + +```shell +btcli sudo trim --netuid 14 --max 100 +``` +``` +You are about to trim UIDs on SN3 to a limit of 100 [y/n] (n): y +✅ Successfully trimmed UIDs on SN3 to 100 +``` + +The command will: + +1. Verify that your wallet owns the specified subnet +2. Display a confirmation prompt showing the trim operation details +3. Execute the trim operation if confirmed +4. Display the result of the operation + +:::note Transaction Fees +UID trimming operations incur transaction fees for the underlying blockchain transactions they trigger. See [Transaction Fees in Bittensor](../learn/fees.md) for details. +::: diff --git a/docs/subnets/understanding-multiple-mech-subnets.md b/docs/subnets/understanding-multiple-mech-subnets.md new file mode 100644 index 0000000000..9a3e7f350c --- /dev/null +++ b/docs/subnets/understanding-multiple-mech-subnets.md @@ -0,0 +1,151 @@ +--- +title: "Multiple Incentive Mechanisms Within Subnets" +--- + +import ThemedImage from '@theme/ThemedImage'; +import useBaseUrl from '@docusaurus/useBaseUrl'; + +# Multiple Incentive Mechanisms Within Subnets + +This page explores how subnets can implement multiple incentive mechanisms to distribute emissions across different evaluation criteria. + +:::tip Hot new feature +Multiple incentive mechanisms per subnet is a new feature that is still in development. It's initial release on mainnet is expected the week of September 22. In the meantime, it can be experimented with using a locally run chain. + +See [Announcements](../learn/announcements) for updates. +::: + +For an introduction to incentive mechanisms in general, see [Understanding Incentive Mechanisms](../learn/anatomy-of-incentive-mechanism). For the basics of subnets, miners, validators, and the blockchain, see [Components of the Bittensor platform](../learn/neurons). + +For coverage of the procedures involved, see: +- [Managing Mechanisms with SDK](./managing-mechanisms-with-sdk) +- [Managing Mechanisms with BTCLI](./managing-mechanisms-btcli) + +Historically, each subnet operates with a single **incentive mechanism**, a function that validators run to assign weights to miners based on the value of their work. Subnets can now support **multiple incentive mechanisms**, allowing a subnet creator to apportion the subnet's emissions across different evaluation criteria, each running Yuma Consensus _independently_ with separate bond pools to evaluate miners' performance on distinct tasks. + +Each miner receives emissions separately from each incentive mechanism, so a miner's performance in one mechanism does not affect their rating in another, and their emissions for each epoch are summed across all mechanisms. Validators receive dividends as a weighted sum of their performance across all incentive mechanisms - they cannot choose which mechanisms to validate, and if they don't validate all mechanisms, they receive proportionally reduced emissions. Multiple incentive mechanisms don't change the total emissions to a subnet, but create a way for subnet creators to distribute those emissions to miners working on different tasks. This mechanism affords subnet creators a transparent, on-chain way to exercise fine-grained control over the work they are incentivizing, keeping miner effort focused on work that is most needed at a time. + +Each incentive mechanism has its own: + +- **Weight matrix**: Each validator sets weights for each miner on each of the subnet's incentive mechanisms. +- **Independent bond pools**: Each mechanism maintains separate bonding relationships for Yuma Consensus calculations. +- **Independent emissions**: Since they depend on weights set by validators, a miner's emissions from each mechanism are independent. +- **Transparent on-chain data**: All incentive mechanism configurations and the flow of emissions are visible on-chain. +- **Emission distribution**: Subnet creators can control what percentage of total emissions goes to each mechanism using the `sudo_set_mechanism_emission_split` extrinsic. + +### Takeaways + +1. **Same Validators, Same Stake**: All validators participate in all incentive mechanisms within a subnet with identical stake weights. +2. **Same Miners**: All miners registered on a subnet can participate in any of its incentive mechanisms. +3. **Owner-Controlled Proportions**: The holder of the _subnet creator_ key sets the emission distribution among incentive mechanisms. +4. **Separate Bond Pools**: Each incentive mechanism maintains separate bonding relationships for independent Yuma Consensus calculations. + +:::note Current runtime limit +As of the current Subtensor runtime, a subnet can have a maximum of 2 mechanisms. It is planned to raised this cap in the future. +::: + +## What Should Stakers Know? + +**Core Impact:** + +- **No change to your staking mechanics**: Your stake is delegated to a validator on a subnet, and applies across all incentive mechanisms equally. +- **Same total emissions**: The subnet's total emissions remain unchanged - multiple mechanisms only redistribute these emissions internally among miners and validators. +- **Transparent allocation**: All emission proportions are visible on-chain, so you can see exactly how subnet owners are distributing emissions. + +**What This Means for Your Strategy:** + +- **No immediate action required**: Your existing staking strategy doesn't need to change +- **Enhanced monitoring**: You may want to track individual mechanism performance to understand subnet health +- **Risk assessment**: Factor in incentive mechanism design when evaluating subnet quality +- **Community oversight**: Use transparency to hold subnet owners accountable for fair emission distribution + +## What Should Miners Know? + +**Automatic Participation:** + +- **No separate registration**: When you register for a subnet, you are eligible to participate in any of its incentive mechanisms +- **Same UID across all mechanisms**: You use the same UID for all incentive mechanisms within a subnet + +**Performance Tracking:** + +- **Independent scoring**: Your performance is independent across different mechanisms, e.g. mechanism 0 doesn't affect your rating in mechanism 1. +- **Separate incentive columns**: You'll see individual incentive amounts for each mechanism in metagraph data. +- **Cumulative emissions**: Your total emissions = sum of emissions from all mechanisms where you participate. + +## What Should Validators Know? + +### Core Changes + +- **Separate weight setting**: You must set weights independently for each incentive mechanism. +- **Independent evaluation**: Each mechanism requires separate assessment according to its specific criteria. +- **Separate bond pools**: Each mechanism maintains independent bonding relationships for Yuma Consensus calculations. +- **Same stake weight**: Your stake weight is identical across all mechanisms - no additional stake required. +- **Weighted dividend calculation**: Your dividends are calculated as a weighted sum of your performance across all mechanisms. If you don't validate on all mechanisms, you will receive proportionally reduced emissions. + +### Operational Changes + +**1. Evaluation Workload:** + +- **Multiple assessments**: You must evaluate miners separately for each mechanism's tasks +- **Different criteria**: Each mechanism may have distinct evaluation standards + +**2. Data Structure Changes:** + +- **Two-dimensional weights**: Weights are now set for each miner on each mechanism. +- **Separate incentive tracking**: Each mechanism tracks incentives independently +- **Extended metagraph**: New columns for mechanism weights and incentives + +## What Should Subnet Creators/Developers Know? + +### Core Changes + +- **Emission distribution**: You can control what percentage of total emissions goes to each incentive mechanism using the `sudo_set_mechanism_emission_split` extrinsic. When the number of mechanisms is set, the emission distribution is reset to an even split, but you can set it again with custom proportions. + + :::info + The `sudo_set_mechanism_emission_split` extrinsic accepts an optional vector parameter. If the parameter is `None`, the distribution is set to an even split. When it's not `None`, it reflects the proportion of emissions each mechanism gets. The proportion is calculated as `value / 65535`. For example, in a subnet with two mechanisms and vector `[13107, 52428]`, mechanism 0 gets 20% and mechanism 1 gets 80%. + ::: + +- **Incentive mechanism design**: You define the specific tasks and evaluation criteria for each mechanism +- **Transparent configuration**: All mechanism settings are visible on-chain for community oversight +- **Single subnet slot**: No need to register multiple subnets for multiple competitions +- **Immediate mechanism number setting**: The number of mechanisms is set immediately when changed. +- **Rate limiting**: Subnet owners can set the number of mechanisms once per 7200 blocks (24 hours) on mainnet. See [Rate Limits in Bittensor](../learn/chain-rate-limits.md). + +:::tip +Ensure proportions sum to 100% when setting them, or the request will be rejected. +::: + +## Example Emissions Split + +For each subnet, the subnet creator keeps 18% of emissions, 41% is allocated to miners, and 41% to validators and their stakers, unless the subnet creator has reduced their take. Of the 41% that goes to miners and validators, here is an estimated emission distribution across three incentive mechanisms for each 100 $\tau$ earned on the subnet: + +:::info +Note that currently, only 2 mechanisms are allowed per subnet; it is planned that this cap will be raised in the future. +::: + +- Mechanism 0 (60%): 100 $\tau$ X .41 X .6 = 24.6 +- Mechanism 1 (30%): 100 $\tau$ X .41 X .3 = 12.3 +- Mechanism 2 (10%): 100 $\tau$ X .41 X .1 = 4.1 + +:::info Setting Custom Proportions +To achieve the above distribution, the subnet owner would submit the `sudo_set_mechanism_emission_split` extrinsic with the vector `[39321, 19660, 6554]` (calculated as 60% × 65535, 30% × 65535, 10% × 65535). +::: + +Note that a miner who excels in mechanism 0 but performs poorly in others might receive more emissions than a miner who performs moderately across all mechanisms, depending on the emission proportions and their relative performance. + +## On-Chain Data Structure + +Multiple incentive mechanisms extend the existing metagraph with additional columns: + +``` +UID | Hotkey | Stake | Mechanism 0 Weights | Mechanism 1 Weights | Mechanism 0 Incentive | Mechanism 1 Incentive +-----|--------|-------|---------------------|---------------------|----------------------|---------------------- +123 | 5ABC...| 1000 | [0.3, 0.2, 0.1...] | [0.1, 0.4, 0.2...] | 0.05 τ | 0.02 τ +456 | 7DEF...| 800 | [0.2, 0.3, 0.2...] | [0.2, 0.3, 0.1...] | 0.03 τ | 0.04 τ +``` + +## Backward Compatibility + +- Existing subnets continue with only one incentive mechanism (mechanism 0) collecting all emissions by default +- All existing API calls default to mechanism 0 +- No breaking changes to current functionality diff --git a/docs/subnets/understanding-subnets.md b/docs/subnets/understanding-subnets.md index a7930a1e85..368edc0c97 100644 --- a/docs/subnets/understanding-subnets.md +++ b/docs/subnets/understanding-subnets.md @@ -7,17 +7,18 @@ import useBaseUrl from '@docusaurus/useBaseUrl'; # Understanding Subnets -In Bittensor, a subnet is an incentive-based competition marketplace that produces a specific kind of digital commodity related to artificial intelligence. It consists of a community of miners that produce the commodity, and a community of validators that measures the miners' work to ensure its quality. Often, parties that serve as validators do so in order to run applications that make use of the services provided by the miners. +In Bittensor, a subnet is an incentive-based competition marketplace that produces a specific kind of digital commodity related to artificial intelligence. It consists of a community of miners that produce the commodity, and a community of validators that measure the miners' work to ensure its quality. Often, parties that serve as validators do so in order to run applications that make use of the services provided by the miners. Emissions of TAO (τ) from Bittensor—are distributed among miners and validators based on their performance within subnets, and based on the relative performance of subnets within Bittensor. ## Anatomy of a subnet The illustration below shows the main components of a subnet: + 1. A subnet's [incentive mechanism](../learn/anatomy-of-incentive-mechanism) defines the work that miners must perform, and the work that validators must perform to evaluate the miners' work. The incentive mechanism is unique to the subnet, and maintained off-chain by the subnet creator in the form of a code-repository that defines the interface for miners and validators to participate. For example, see [Subnet 1](https://github.com/macrocosm-os/prompting). 2. **Miners** perform some useful work as defined in the subnet's incentive mechanism. For example, in Subnet 1, miners serve chat prompt completion. 3. **Validators** independently evaluate the task performed by the subnet miners, according to standards defined by the subnet's incentive mechanism. -4. Validators each score the performance of of each miner over the most recent time period. The matrix of these scores, by each validator for each miner, serves as input to **Yuma Consensus**. +4. Validators each score the performance of each miner over the most recent time period. The matrix of these scores, by each validator for each miner, serves as input to **Yuma Consensus**. 5. The Yuma Consensus algorithm operates on-chain, and determines emissions to miners, validators, and subnet creators across the platform, based on performance.
@@ -31,23 +32,24 @@ style={{width: 600}} />
-## Subnet liquidity reserves +## Liquidity pools -The key mechanism introduced with Dynamic TAO is that each subnet functions as its own automated market marker (AMM), with two liquidity reserves, one containing TAO($$\tau$$)—the currency of the Bittensor network, and one containing a subnet specific "dynamic" currency, referred to as that subnet's alpha ($$\alpha$$) token. The alpha token is purchased by staking TAO into the subnet's reserve, which is initialized with a negligible amount of liquidity (1e-9). +Each subnet functions as its own _automated market maker_ (_AMM_), with two liquidity reserves, one containing TAO($$\tau$$)—the currency of the Bittensor network, and one containing a subnet specific "dynamic" currency, referred to as that subnet's alpha ($$\alpha$$) token. The alpha token is purchased by staking TAO into the subnet's reserve, which is initialized with a negligible amount of liquidity (1e-9). A subnet's economy therefore consists of three pools of currency: + - **Tao reserves**: the amount of tao ($$\tau$$) that has been staked into the subnet - **Alpha reserves**: the amount of alpha ($$\alpha$$) available for purchase -- **Alpha outstanding**: the amount of alpha ($$\alpha$$) held in the hotkeys of a subnet's participants, also referred to as the total *stake* in the subnet +- **Alpha outstanding**: the amount of alpha ($$\alpha$$) held in the hotkeys of a subnet's participants, also referred to as the total _stake_ in the subnet :::tip Terminology: alpha tokens Each subnet has its own currency with its own name, but in the abstract a given subnet's token is referred to as its $\alpha$ token. With a set of subnets in mind, we refer to $\alpha$ as the token for subnet $\alpha$, $$\beta$$ as the token for subnet $$\beta$$, $$\gamma$$ as the token for subnet $$\gamma$$, and so on. These subnet tokens contrast with TAO ($$\tau$$), the token of the Bittensor network as a whole. A subnet pool's reserve ratio (tao/alpha) determines the price of its alpha token. ::: -The *price* of a subnet's alpha token is determined by the ratio of TAO in that subnet's reserve to its alpha in reserve. Alpha currency that is not held in reserve but is which is held in the hotkeys of subnet participants is referred to as *alpha outstanding*. +The _price_ of a subnet's alpha token is determined by the ratio of TAO in that subnet's reserve to its alpha in reserve. Alpha currency that is not held in reserve but is which is held in the hotkeys of subnet participants is referred to as _alpha outstanding_. -Run `btcli subnet list` with the Dynamic TAO-enabled `btcli` to view information about the subnets and their currency reserves on Bittensor testnet. +Run the `btcli subnet list` command with the Dynamic TAO-enabled `btcli` to view information about the subnets and their currency reserves on Bittensor testnet. ```txt ┃ ┃ Price ┃ Market Cap ┃ ┃ ┃ ┃ ┃ @@ -61,54 +63,65 @@ Run `btcli subnet list` with the Dynamic TAO-enabled `btcli` to view information 4 │ δ targon │ 0.02 τ/δ │ τ 54.45 │ τ 0.0192 │ τ 30.65, 1.47k δ │ 1.14k δ │ 2.61k δ /21M │ 68/99 ... ``` -See: [Using Dynamic TAO](./index.md#using-dynamic-tao) ## Price/rate of alpha tokens ### Ideal price -For each subnet, you'll see that *Price* (listed in the third column) is a function of TAO in reserve `τ_in` over alpha in reserve `α_in` + +For each subnet, you'll see that _Price_ (listed in the third column) is a function of TAO in reserve `τ_in` over alpha in reserve `α_in` $$ Price = \frac{\tau_{in}}{\alpha_{in}} $$ -For example, if for subnet $\varepsilon$, its subnet pool contains TAO reserves of 1000 TAO units and its alpha reserves of 16000 $\varepsilon$ units, then the relative price of the $\varepsilon$ token is: +
+ See how it's calculated! -$$ -R = \frac{\tau_{in}}{\alpha_{in}} = \frac{1000}{16000} = 0.0625 -$$ + For example, if for subnet $\varepsilon$, its subnet pool contains TAO reserves of 1000 TAO units and its alpha reserves of 16000 $\varepsilon$ units, then the relative price of the $\varepsilon$ token is: -Hence, -$$ -\text{1 } \varepsilon = 0.0625 \text{ TAO} -$$ + $$ + R = \frac{\tau_{in}}{\alpha_{in}} = \frac{1000}{16000} = 0.0625 + $$ + + Hence, + + $$ + \text{1 } \varepsilon = 0.0625 \text{ TAO} + $$ This exchange rate can change every block when staking or unstaking or emissions occur on this subnet. -## Emission in Dynamic TAO +
+ +## Emissions in Bittensor Liquidity is steadily emitted into the Bittensor token economy according to an algorithm intended to foster growth while stabilizing prices and protecting them from manipulation. Each block: + - the chain emits TAO and injects it into the TAO reserves of the subnets. -- the chain emits alpha tokens at twice the base alpha emission rate (which starts at 1 α/block and follows the same halving schedule as TAO). These emitted alpha tokens are allocoated between: +- the chain emits alpha tokens at twice the base alpha emission rate (which starts at 1 α/block and follows the same halving schedule as TAO). These emitted alpha tokens are allocated between: - the subnet's alpha reserve (increasing available liquidity) - alpha outstanding (incentives for miners, validators, and subnet creators) -See the main article: [Emission in Dynamic TAO](../emissions.md) +See [Emissions](../learn/emissions.md). ## Decentralized evaluation of subnets -The relative value or *weight* of subnets within Bittensor is critically important as it determines emissions to different subnets and their participant miners and validators. Prior to Dynamic TAO, relative weight among subnets within the Bittensor network were determined by Yuma Consensus over the evaluations of the Root Network validators. This gives a fundamentally centralizing role to the holders of Root Network validator keys. +The relative value or _weight_ of subnets within Bittensor is critically important as it determines emissions to different subnets and their participant miners and validators. Prior to Dynamic TAO, relative weight among subnets within the Bittensor network were determined by Yuma Consensus over the evaluations of the Root Network validators. This gives a fundamentally centralizing role to the holders of Root Network validator keys. -In Dynamic TAO, the relative weight is determined organically according to the emergent market value of the subnet, as represented by its stabilized token price. TAO-holders can stake TAO into subnets in exchange for the subnet-specific dynamic currency, referred to as the subnet's alpha ($$\alpha$$) token. In this way, stakers 'vote with their TAO' for the value of the subnet, determining the emissions to the validators and miners working in it. In return, stakers extract a share of the subnet's emissions. +In Dynamic TAO, the relative weight is determined organically according to net TAO flows into and out of each subnet. As TAO-holders stake TAO into subnets in exchange for the subnet-specific alpha, they are essentially 'voting with their TAO' for the value of the subnet. Subnets with more staking than unstaking receive higher emissions, while subnets with net outflows receive reduced or zero emissions. This flow-based model rewards subnets that attract genuine user engagement. In return, stakers extract a share of the subnet's emissions. + +:::tip Flow-Based Model Active +As of November 2025, emissions are based on net TAO flows (staking minus unstaking) rather than token prices. See [Emissions](../learn/emissions.md) for details. +::: ## Subnet Zero -In Dynamic TAO, Subnet Zero—or *Root Subnet*—is a special subnet. It is the only subnet that does not have its own $\alpha$ currency. No miners can register on subnet zero, and no validation work is performed. However validators can register, and $\tau$-holders can stake to those validators, as with any other subnet. This offers a mechanism for $\tau$-holders to stake $\tau$ into validators in a subnet-agnostic way. This works because the weight of a validator in a subnet includes both their share of that subnet's $\alpha$ and their share of TAO staked into the root subnet. in Subnet Zero. +In Dynamic TAO, Subnet Zero—or _Root Subnet_—is a special subnet. It is the only subnet that does not have its own $\alpha$ currency. No miners can register on subnet zero, and no validation work is performed. However validators can register, and $\tau$-holders can stake to those validators, as with any other subnet. This offers a mechanism for $\tau$-holders to stake $\tau$ into validators in a subnet-agnostic way. This works because the weight of a validator in a subnet includes both their share of that subnet's $\alpha$ and their share of TAO staked into the root subnet. -Over time, the emissions generated by TAO staked into Subnet Zero will decrease, relative to stake held in the alpha currency of active subnets. See [Note on evolution of Bittensor token economy](../emissions.md#note-on-evolution-of-bittensor-token-economy). +Over time, the emissions generated by TAO staked into Subnet Zero will decrease, relative to stake held in the alpha currency of active subnets. See [Note on evolution of Bittensor token economy](../learn/emissions.md#note-on-evolution-of-bittensor-token-economy). ## Validator stake weight @@ -116,9 +129,11 @@ A validator's stake weight in a subnet equals their alpha stake plus their TAO s $$ -\text{Validator stake weight} = \text{Alpha stake} (\alpha) + \text{TAO stake} (\tau) \times \text{TAO weight} +\text{Validator stake weight} = \text{Alpha stake} (\alpha) + \text{TAO stake} (\tau) \times \text{TAO weight} + $$ + :::tip A validator's stake weight in Subnet Zero is simply their staked TAO. ::: @@ -127,9 +142,10 @@ A validator's relative stake weight (their stake weight over the total stake wei $$ -\text{Validator x's relative stake weight} +\text{Validator x's relative stake weight} = \frac{\alpha_x + \tau_x \times w_{\tau}} {\displaystyle \sum_{v \in \text{validators}} \bigl(\alpha_v + \tau_v \times w_{\tau}\bigr)} + $$ diff --git a/docs/subnets/walkthrough-prompting.md b/docs/subnets/walkthrough-prompting.md index c0e7ff8b2a..93ee6be98e 100644 --- a/docs/subnets/walkthrough-prompting.md +++ b/docs/subnets/walkthrough-prompting.md @@ -1,13 +1,13 @@ --- -title: "Walkthrough of Subnet 1" +title: "Walkthrough of Example Subnet" --- import ThemedImage from '@theme/ThemedImage'; import useBaseUrl from '@docusaurus/useBaseUrl'; -# Walkthrough of Subnet 1 +# Walkthrough of Example Subnet -In this section we present a high-level walkthrough of the [Subnet 1: Prompting](https://github.com/opentensor/prompting/tree/main). This subnet contains multiple incentive mechanisms which produce an internet-scale conversational intelligence. Below are a few examples of the intelligence produced by this subnet: +This page presents a high-level walkthrough of an example architecture for a subnet based on LLM inference. This architecture was originally based on [Subnet 1, Apex](https://github.com/opentensor/prompting/tree/main), although subnets rapidly evolve and that subnet now has a more complicated architecture. This example subnet contains several incentive mechanisms which produce conversational intelligence capable of: - Answering questions. - Summarizing a given text. @@ -15,26 +15,24 @@ In this section we present a high-level walkthrough of the [Subnet 1: Prompting] - Translating languages. - Solve mathematics problems, and more. -This subnet is driven by large language models (LLMs). These LLMs search the internet and utilize specialized simulator modules to produce factually accurate and mathematically correct responses. +Our example subnet is driven by large language models (LLMs). These LLMs search the internet and utilize specialized simulator modules to produce factually accurate and mathematically correct responses. -:::tip Subnet 1 Explorer -You can see the prompting subnet in action on the [TAO.app explorer (select Subnet 01: Text Prompting from the top menu)](https://tao.app). +:::tip Explore the Subnets +Browse tokenomic information about the subnets on [TAO.app](https://tao.app), and learn more about the projects and services they support on the [Learnbittensor.org subnet listings](https://learnbittensor.org/subnets). ::: -## Before you proceed +**Prerequisites** If you are new to Bittensor subnets and building blocks, read the following sections before you proceed further: -- [Bittensor Building Blocks](../learn/bittensor-building-blocks). +- [Understanding Neurons](../learn/neurons). - [Anatomy of Incentive Mechanism](../learn/anatomy-of-incentive-mechanism). -The below diagram shows a typical subnet with many subnet miners and subnet validators together executing the subnet incentive mechanism code. On the [TAO.app explorer (select Subnet 01: Text Prompting from the top menu)](https://tao.app) the **Metagraph** view for this Subnet 1: Prompting shows the performance details for each subnet miner and validator. - -For easier understanding, in this document we will focus on how a **single** subnet validator interacts with **multiple** subnet miners in this subnet. +The below diagram shows a typical subnet with many miners and validators together executing the incentive mechanism code. On the [TAO.app explorer](https://tao.app) the **Metagraph** view within a subnet's page shows the performance details for each subnet miner and validator. For example, visit [tao.app/subnets/14?active_tab=metagraph](https://www.tao.app/subnets/14?active_tab=metagraph) to view subnet 14's metagraph.
-## Subnet 1 summary +## Subnet Summary -See the below diagram showing a high-level view of how this Prompting subnet works. +See the below diagram showing a high-level view of how an example subnet works.
-The challenge generation works like this (see the above diagram): - The subnet validator generates a **prompt** consisting of a clearly stated question or a task description, for a given task type. - The subnet validator also generates one or more **reference** answers to the above prompt. The subnet validator also provides the context to generate this reference answer. -- A requirement for this prompting subnet is that the entire conversation should be human-like. To accomplish this, the subnet validator takes on a human persona and wraps the above prompt in the persona's style and tone. The introduction of such random persona's style and tone creates a lossy, corrupted, version of the original clear instruction. This corrupted prompt is called a **challenge**. -- The subnet validator prompts the subnet miners with this challenge. Note that the **reference** is not sent to the subnet miners. +- A requirement for this example subnet is that the entire conversation should be human-like. To accomplish this, the subnet validator takes on a human persona and wraps the above prompt in the persona's style and tone. The introduction of such random persona's style and tone creates a lossy, corrupted, version of the original clear instruction. This corrupted prompt is called a **challenge**. +- The subnet validator prompts the miners with this challenge. Note that the **reference** is not sent to the miners. -## Score the subnet miner responses +## Scoring the miners' responses -The responses from the subnet miners are compared to the reference answers by the subnet validator. The closer a subnet miner's response is to the reference answer, the higher is the subnet miner's score. +The responses from the miners are compared to the reference answers by the subnet validator. The closer a subnet miner's response is to the reference answer, the higher is the subnet miner's score. :::tip Measuring subnet miner's response -This Prompting Subnet 1 presently uses a combination of string literal similarity and semantic similarity as the basis for measuring the closeness of a subnet miner's response to the reference answer. +This example subnet uses a combination of string literal similarity and semantic similarity as the basis for measuring the closeness of a subnet miner's response to the reference answer. ::: -## Key innovations in this subnet +## Key subnet features -This subnet has developed a few innovative techniques to get to a real human-like conversational AI that actually produces intelligence instead of copying from the internet. Refer to the diagram in the above [Challenge generation](#challenge-generation) section: +This subnet demonstrates several design features that favor actually producing intelligence instead of copying from the internet. Refer to the diagram in the above [Challenge generation](#challenge-generation) section: ### Achieving human-like conversation To deliver to a user of this subnet an experience of a human-like conversation: -- Subnet validators perform a roleplay where they take on the persona of **random** human users before they prompt the subnet miners. There are several tangible benefits to this role playing flow, such as: - - Subnet validators can engage the subnet miners in a real, random, human-like conversation throughout the subnet operation. - - Subnet miners become adept at handling ambiguous instructions. +- Validators perform a roleplay where they take on the persona of **random** human users before they prompt the miners. There are several tangible benefits to this role playing flow, such as: + - Validators can engage the miners in a real, random, human-like conversation throughout the subnet operation. + - Miners become adept at handling ambiguous instructions. - This generates, as a byproduct, interesting synthetic datasets that can be used to finetune other LLMs. -- Subnet miners are required to produce completions that are as close as possible to the reference. To accomplish this a subnet miner must: +- Miners are required to produce completions that are as close as possible to the reference. To accomplish this a subnet miner must: - Extract clear instruction from the lossy challenge. - Find the appropriate context, for example, using Wikipedia. - Generate a completion that matches the tone and style of the reference. -- This means that throughout the subnet validation process the subnet miners become better and better at handling ambiguous, "fuzzy" instructions. +- This means that throughout the subnet validation process the miners become better and better at handling ambiguous, "fuzzy" instructions. - A subnet validator could increase the corruption of the instruction to increase the difficulty of the tasks. - To change the subnet miner completions, a subnet validator may modify the style and tone of the reference answers or change the scoring function, or both. +### Prevent miners from looking up the answers -:::tip Class HumanAgent -See [class HumanAgent](https://github.com/opentensor/prompting/blob/main/prompting/agent.py#L30). -::: - -### Prevent subnet miners from looking up the answers - -To prevent the subnet miners from simply looking up the answers on the internet, this subnet incorporates a novel approach—it introduces fuzziness into the prompt and requires that the subnet miners use semantic intelligence to understand the instructions contained in the prompt. +To prevent the miners from simply looking up the answers on the internet, this subnet introduces fuzziness into the prompt and requires that the miners use semantic intelligence to understand the instructions contained in the prompt. ### Evolve subnet as a mixture of experts (MoE) The subnet validator composes a challenge based on whether the task is answering questions, summarizing a given text, debugging code, solve mathematics problems, and so on. The motivation behind using multiple tasks is several fold: -- Using multiple tasks in the prompts continuously benchmarks the capabilities of the subnet miners across a broad range of tasks that are challenging but are still common use-cases. -- Using multiple tasks, prompts can be routed to specialized subnet miners, thereby providing an effective mixture of experts system. -- This approach also serves as a precursor to Bittensor's inter-subnet bridging mechanism that will enable Subnet 1 to interact with other subnets and access the useful work provided by these subnets. -- Finally, the subnet miners in this subnet must become adept at using tools and APIs in order to fulfill validation tasks. We are building an API layer for inter-subnet communication, which is a natural extension of 'agentic' models. +- Using multiple tasks in the prompts continuously benchmarks the capabilities of the miners across a broad range of tasks that are challenging but are still common use-cases. +- Using multiple tasks, prompts can be routed to specialized miners, thereby providing an effective mixture of experts system. +- Finally, the miners in this subnet must become adept at using tools and APIs in order to fulfill validation tasks. We are building an API layer for inter-subnet communication, which is a natural extension of 'agentic' models. :::tip Continuously improving performance -One objective of this subnet is to achieve full coverage of the distributions across different personas (representing different users), and different tasks (representing different use-cases). See the arXiv paper [Super-Natural Instructions](https://arxiv.org/abs/2204.07705) [(PDF)](https://arxiv.org/pdf/2204.07705.pdf). - +This example subnet is designed to achieve full coverage of the distributions across different personas (representing different users), and different tasks (representing different use-cases). See the arXiv paper [Super-Natural Instructions](https://arxiv.org/abs/2204.07705) [(PDF)](https://arxiv.org/pdf/2204.07705.pdf). ::: diff --git a/docs/subnets/working-with-subnets.md b/docs/subnets/working-with-subnets.md index 761a6114b8..765eb9c1dd 100644 --- a/docs/subnets/working-with-subnets.md +++ b/docs/subnets/working-with-subnets.md @@ -2,12 +2,14 @@ title: "Working with Subnets" --- +import { SdkVersion } from "../sdk/_sdk-version.mdx"; + # Working with Subnets -Subnets are composed of a discrete number of UIDs. The subnet validators and subnet miners are associated with these UIDs. Each UID in the subnet belongs to a unique [hotkey](../getting-started/wallets.md#coldkey-and-hotkey) which in turn is connected to a unique **coldkey** which was used during registration. The Yuma Consensus runs on these UIDs. This section presents a few examples showing how to work with subnets. +Subnets are composed of a discrete number of UIDs. The subnet validators and subnet miners are associated with these UIDs. Each UID in the subnet belongs to a unique [hotkey](../keys/wallets.md#what-are-wallets-and-keys) which in turn is connected to a unique **coldkey** which was used during registration. The Yuma Consensus runs on these UIDs. This section presents a few examples showing how to work with subnets. -Transfer is transfer from cold to cold -Registration takes tao from cold +Transfer is transfer from cold to cold +Registration takes tao from cold Hotkey Tao movement is only stake add and remove and it’s loaded by emissions while mining Root delegation/undelegation is hotkey Tao movement to a strangers hotkey and it’s loaded by the activities of the strangers emission validation activities @@ -15,57 +17,59 @@ Root delegation/undelegation is hotkey Tao movement to a strangers hotkey and it Show all currently running subnets on Bittensor: -```bash +```bash btcli subnets list ``` ## Viewing state -To display fine-grained information about each subnetwork use [bt.metagraph](pathname:///python-api/html/autoapi/bittensor/core/metagraph/index.html): + + +To display fine-grained information about each subnetwork use [bt.Metagraph](pathname:///python-api/html/autoapi/bittensor/core/metagraph/index.html): ```python import bittensor as bt -subnet = bt.metagraph( netuid = 1 ) # Get the current state. +subnet = bt.Metagraph( netuid = 1 ) # Get the current state. assert subnet.netuid == 1 -subnet.sync( block = 101010 ) # Sync the state with a particular block. -assert subnet.block == 101010 +subnet.sync( block = 6711260 ) # Sync the state with a particular block. +assert subnet.block == 6711260 ``` ## Verifying UIDs ```python import bittensor as bt +subnet = bt.Metagraph( netuid = 1 ) subnet = bt.metagraph( netuid = 1 ) -assert subnet.uids.tolist() == [ 0, 1, 2, ... 1022, 1023 ] +print(subnet.uids.tolist()) ``` ## Extracting UID information - ```python import bittensor as bt -subnet = bt.metagraph( netuid = 1 ) +subnet = bt.Metagraph(netuid=1) uid = 123 -print ('uid', uid, ' owned by hotkey:', subnet.hotkeys[ uid ], 'associated with coldkey': subnet.coldkey[ uid ] ) +print('uid', uid, 'owned by hotkey:', subnet.hotkeys[uid], 'associated with coldkey:', subnet.coldkeys[uid]) ``` ## Viewing parameters -The below code prints stake `S` on the subnet and the weights `W` set by the subnet validators in the subnet. +The below code prints stake `S` on the subnet and the weights `W` set by the subnet validators in the subnet. ```python numbered dark import bittensor as bt -subnet = bt.metagraph( netuid = 1, lite = False) +subnet = bt.Metagraph( netuid = 1, lite = False) print ('subnet 1 validator stake', subnet.S ) print ('subnet 1 validator weights', subnet.W ) ``` ## Viewing dividends -The below code prints the subnet validator dividends, `D`. +The below code prints the subnet validator dividends, `D`. ```python import bittensor as bt -subnet = bt.metagraph( netuid = 1 ) +subnet = bt.Metagraph( netuid = 1 ) print ('subnet 1 validator dividends', subnet.D ) ``` diff --git a/docs/subtensor-nodes/index.md b/docs/subtensor-nodes/index.md index d8db06b965..c39ff2513f 100644 --- a/docs/subtensor-nodes/index.md +++ b/docs/subtensor-nodes/index.md @@ -1,8 +1,10 @@ --- title: "Subtensor Node Basics" --- + import ThemedImage from '@theme/ThemedImage'; import useBaseUrl from '@docusaurus/useBaseUrl'; +import { SdkVersion } from "../sdk/_sdk-version.mdx"; # Subtensor Node Basics @@ -72,13 +74,15 @@ The full synchronization performed by an archive node can be significantly slowe ## Query archived data + + We recommend that you use archive public subtensor node to retrieve blockchain data older than the previous 300 blocks. See the below example: For example, to sync with a specific block number `12345` that is older than the 300 blocks: ```python import bittensor as bt -meta = bt.subtensor('archive').metagraph(netuid=18, block=12345) +meta = bt.Subtensor('archive').metagraph(netuid=18, block=12345) print(meta) ``` diff --git a/docs/subtensor-nodes/subtensor-rate-limits.md b/docs/subtensor-nodes/subtensor-rate-limits.md deleted file mode 100644 index e80734e3fb..0000000000 --- a/docs/subtensor-nodes/subtensor-rate-limits.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "Subtensor Rate Limits" ---- - -# Subtensor Rate Limits - -We strongly encourage you to run your own local lite node. If you must query an OTF-provided lite node, then the following rate limits apply: - -- Any OTF-provided lite node will rate limit the requests to one request per second, per IP address. Note that this rate limit may change dynamically based on the network or application requirements. -- A request can be either WS/WSS or HTTP/HTTPS. -- If you exceed the rate limit, you will receive 429 error code. You will then have to wait until the rate limit window has expired. -- You can avoid OTF-lite node rate limits by running your own local lite node. You can run a lite node either [Using Docker](./using-docker.md#run-a-lite-node-on-mainchain) or [Using Source](./using-source.md#lite-node-on-mainchain). diff --git a/docs/subtensor-nodes/subtensor-storage-query-examples.md b/docs/subtensor-nodes/subtensor-storage-query-examples.md index cdb8985a80..8d66af7e73 100644 --- a/docs/subtensor-nodes/subtensor-storage-query-examples.md +++ b/docs/subtensor-nodes/subtensor-storage-query-examples.md @@ -2,9 +2,45 @@ title: "Subtensor Storage Query Examples" --- +import { SdkVersion } from "../sdk/_sdk-version.mdx"; + # Subtensor Storage Query Examples -## 1. ActivityCutoff +## 1. AccumulatedLeaseDividends + + + +- **Description**: Storage for a lease ID's accumulated dividends. +- **Query Type**: `u16 -> unknown` +- **Parameters**: + - `lease_id`: `u32` +- **Default Value**: `0` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") + + lease_id = 1 + result = substrate.query('SubtensorModule', 'AccumulatedLeaseDividends', [lease_id]) + print(result.value) + ``` +## 2. Active + +- **Description**: Storage for Active. +- **Query Type**: `u16 -> unknown` +- **Parameters**: + - `netuid`: `u16` +- **Default Value**: `[]` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") + + netuid = 1 + result = substrate.query('SubtensorModule', 'Active', [netuid]) + print(result.value) + ``` +## 3. ActivityCutoff - **Description**: Activity cutoff for networks. - **Query Type**: `u16 -> u16` @@ -13,15 +49,14 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `5000` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'ActivityCutoff', [netuid]) print(result.value) ``` - -## 2. AdjustmentAlpha +## 4. AdjustmentAlpha - **Description**: Alpha adjustment value for the network. - **Query Type**: `u16 -> u64` @@ -30,15 +65,14 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'AdjustmentAlpha', [netuid]) print(result.value) ``` - -## 3. AdjustmentInterval +## 5. AdjustmentInterval - **Description**: Adjustment interval for networks. - **Query Type**: `u16 -> u16` @@ -47,15 +81,49 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `100` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'AdjustmentInterval', [netuid]) print(result.value) ``` +## 6. AdminFreezeWindow + +- **Description**: Global window (in blocks) at the end of each tempo where admin ops are disallowed +- **Query Type**: `u16` +- **Parameters**: None +- **Default Value**: `0` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") + + result = substrate.query('SubtensorModule', 'AdminFreezeWindow') + print(result.value) + ``` +## 7. Alpha + +- **Description**: Storage for Alpha. +- **Query Type**: `(AccountId, AccountId, u16) -> unknown` +- **Parameters**: + - `hotkey`: `AccountId` + - `coldkey`: `AccountId` + - `netuid`: `u16` +- **Default Value**: `0` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") -## 4. AlphaDividendsPerSubnet + from bittensor_wallet import Keypair + hotkey = Keypair.create_from_uri('//Alice').ss58_address + coldkey = Keypair.create_from_uri('//Bob').ss58_address + netuid = 1 + result = substrate.query('SubtensorModule', 'Alpha', [hotkey, coldkey, netuid]) + print(result) + ``` +## 8. AlphaDividendsPerSubnet - **Description**: Last total alpha dividend for a hotkey on a subnet. - **Query Type**: `(u16, AccountId) -> u64` @@ -65,7 +133,8 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface, Keypair + from async_substrate_interface import SubstrateInterface + from bittensor_wallet import Keypair substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 @@ -73,8 +142,37 @@ title: "Subtensor Storage Query Examples" result = substrate.query('SubtensorModule', 'AlphaDividendsPerSubnet', [netuid, hotkey]) print(result.value) ``` +## 9. AlphaMapLastKey + +- **Description**: Storage for AlphaMapLastKey. +- **Query Type**: `unknown` +- **Parameters**: None +- **Default Value**: `0` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") + + result = substrate.query('SubtensorModule', 'AlphaMapLastKey') + print(result.value) + ``` +## 10. AlphaSigmoidSteepness + +- **Description**: Storage for AlphaSigmoidSteepness. +- **Query Type**: `u16 -> unknown` +- **Parameters**: + - `netuid`: `u16` +- **Default Value**: `0` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") -## 5. AlphaValues + netuid = 1 + result = substrate.query('SubtensorModule', 'AlphaSigmoidSteepness', [netuid]) + print(result.value) + ``` +## 11. AlphaValues - **Description**: Alpha values for the network (lower and upper alpha). - **Query Type**: `u16 -> (u16, u16)` @@ -83,29 +181,70 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `(45875, 58982)` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'AlphaValues', [netuid]) print(result.value) ``` +## 12. AssociatedEvmAddress -## 6. AvgTempo +- **Description**: Storage for the EVM address associated with a subnet's uid. +- **Query Type**: `(u16, u16) -> u16` +- **Parameters**: + - `key`: `AccountId` + - `netuid`: `u16` +- **Default Value**: `0` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") -- **Description**: Global average tempo. -- **Query Type**: `u16` -- **Default Value**: `30` + netuid = 1 + uid = 1 + result = substrate.query('SubtensorModule', 'AssociatedEvmAddress', [netuid, uid]) + print(result) + ``` +## 13. AutoStakeDestination + +- **Description**: Storage for AutoStakeDestination. +- **Query Type**: `(u16, AccountId) -> unknown` +- **Parameters**: + - `netuid`: `u16` + - `hotkey`: `AccountId` +- **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") - result = substrate.query('SubtensorModule', 'AvgTempo') - print(result.value) + netuid = 1 + from bittensor_wallet import Keypair + hotkey = Keypair.create_from_uri('//Alice').ss58_address + result = substrate.query('SubtensorModule', 'AutoStakeDestination', [hotkey, netuid]) + print(result) ``` +## 14. AutoStakeDestinationColdkeys + +- **Description**: Storage for AutoStakeDestinationColdkeys. +- **Query Type**: `(u16, AccountId) -> unknown` +- **Parameters**: + - `netuid`: `u16` + - `hotkey`: `AccountId` +- **Default Value**: `0` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") -## 7. Axons + netuid = 1 + from bittensor_wallet import Keypair + hotkey = Keypair.create_from_uri('//Alice').ss58_address + result = substrate.query('SubtensorModule', 'AutoStakeDestinationColdkeys', [hotkey, netuid]) + print(result.value) + ``` +## 15. Axons - **Description**: Axon information for a given hotkey within a network. - **Query Type**: `(u16, AccountId) -> AxonInfoOf` @@ -115,16 +254,16 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `None` - **Python Example**: ```python - from substrateinterface import SubstrateInterface, Keypair + from async_substrate_interface import SubstrateInterface + from bittensor_wallet import Keypair substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 hotkey = Keypair.create_from_uri('//Alice').ss58_address result = substrate.query('SubtensorModule', 'Axons', [netuid, hotkey]) - print(result.value) + print(result) ``` - -## 8. BlockAtRegistration +## 16. BlockAtRegistration - **Description**: Block number at registration for a given UID. - **Query Type**: `(u16, u16) -> u64` @@ -134,7 +273,7 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 @@ -142,22 +281,21 @@ title: "Subtensor Storage Query Examples" result = substrate.query('SubtensorModule', 'BlockAtRegistration', [netuid, uid]) print(result.value) ``` - -## 9. BlockEmission +## 17. BlockEmission - **Description**: The total block emission value. - **Query Type**: `u64` +- **Parameters**: None - **Default Value**: `1000000000` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") result = substrate.query('SubtensorModule', 'BlockEmission') print(result.value) ``` - -## 10. BlocksSinceLastStep +## 18. BlocksSinceLastStep - **Description**: Number of blocks since the last mechanism step. - **Query Type**: `u16 -> u64` @@ -166,15 +304,14 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'BlocksSinceLastStep', [netuid]) print(result.value) ``` - -## 11. Bonds +## 19. Bonds - **Description**: Bond values of UIDs in a network. - **Query Type**: `(u16, u16) -> Vec<(u16, u16)>` @@ -184,7 +321,7 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `[]` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 @@ -192,8 +329,7 @@ title: "Subtensor Storage Query Examples" result = substrate.query('SubtensorModule', 'Bonds', [netuid, uid]) print(result.value) ``` - -## 12. BondsMovingAverage +## 20. BondsMovingAverage - **Description**: Moving average of bonds in the network. - **Query Type**: `u16 -> u64` @@ -202,15 +338,14 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `900000` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'BondsMovingAverage', [netuid]) print(result.value) ``` - -## 13. BondsPenalty +## 21. BondsPenalty - **Description**: Bonds penalty setting for a subnet. - **Query Type**: `u16 -> u16` @@ -219,15 +354,30 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'BondsPenalty', [netuid]) print(result.value) ``` +## 22. BondsResetOn + +- **Description**: Storage for BondsResetOn. +- **Query Type**: `u16 -> unknown` +- **Parameters**: + - `netuid`: `u16` +- **Default Value**: `0` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") -## 14. Burn + netuid = 1 + result = substrate.query('SubtensorModule', 'BondsResetOn', [netuid]) + print(result.value) + ``` +## 23. Burn - **Description**: Burn value for a given network. - **Query Type**: `u16 -> u64` @@ -236,15 +386,14 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `1000000000` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'Burn', [netuid]) print(result.value) ``` - -## 15. BurnRegistrationsThisInterval +## 24. BurnRegistrationsThisInterval - **Description**: Number of burn registrations in this interval. - **Query Type**: `u16 -> u16` @@ -253,15 +402,33 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'BurnRegistrationsThisInterval', [netuid]) print(result.value) ``` +## 25. ChildKeys -## 16. ChildkeyTake +- **Description**: Maps parent keys to child keys with proportions. +- **Query Type**: `(AccountId, u16) -> Vec<(u64, AccountId)>` +- **Parameters**: + - `parent`: `AccountId` + - `netuid`: `u16` +- **Default Value**: `[]` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + from bittensor_wallet import Keypair + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") + + parent = Keypair.create_from_uri('//Alice').ss58_address + netuid = 1 + result = substrate.query('SubtensorModule', 'ChildKeys', [parent, netuid]) + print(result.value) + ``` +## 26. ChildkeyTake - **Description**: Returns the childkey take for a given hotkey on a specific subnet. - **Query Type**: `(AccountId, u16) -> u16` @@ -271,7 +438,8 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface, Keypair + from async_substrate_interface import SubstrateInterface + from bittensor_wallet import Keypair substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") hotkey = Keypair.create_from_uri('//Alice').ss58_address @@ -279,41 +447,66 @@ title: "Subtensor Storage Query Examples" result = substrate.query('SubtensorModule', 'ChildkeyTake', [hotkey, netuid]) print(result.value) ``` +## 27. CKBurn + +- **Description**: Storage for coldkey burn. +- **Query Type**: `u64` +- **Parameters**: None +- **Default Value**: `0` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") + + result = substrate.query('SubtensorModule', 'CKBurn') + print(result.value) + ``` +## 28. ColdkeySwapRescheduleDuration -## 17. ChildKeys +- **Description**: Storage for ColdkeySwapRescheduleDuration. +- **Query Type**: `u32` +- **Parameters**: None +- **Default Value**: `0` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") -- **Description**: Maps parent keys to child keys with proportions. -- **Query Type**: `(AccountId, u16) -> Vec<(u64, AccountId)>` + result = substrate.query('SubtensorModule', 'ColdkeySwapRescheduleDuration') + print(result.value) + ``` +## 29. ColdkeySwapScheduled + +- **Description**: Storage for ColdkeySwapScheduled. +- **Query Type**: `u16 -> AccountId` - **Parameters**: - - `parent`: `AccountId` - - `netuid`: `u16` -- **Default Value**: `[]` + - `coldkey`: `AccountId` +- **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface, Keypair + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") - parent = Keypair.create_from_uri('//Alice').ss58_address - netuid = 1 - result = substrate.query('SubtensorModule', 'ChildKeys', [parent, netuid]) + from bittensor_wallet import Keypair + coldkey = Keypair.create_from_uri('//Bob').ss58_address + result = substrate.query('SubtensorModule', 'ColdkeySwapScheduled', [coldkey]) print(result.value) ``` - -## 18. ColdkeySwapScheduleDuration +## 30. ColdkeySwapScheduleDuration - **Description**: The block duration for which a coldkey swap schedule must wait before execution. - **Query Type**: `u32` -- **Default Value**: `36000` (approx. 5 days at 12s blocks) +- **Parameters**: None +- **Default Value**: `36000` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") result = substrate.query('SubtensorModule', 'ColdkeySwapScheduleDuration') print(result.value) ``` - -## 19. CommitRevealWeightsEnabled +## 31. CommitRevealWeightsEnabled - **Description**: Indicates whether the commit-reveal process for weights is enabled for a given network. - **Query Type**: `u16 -> bool` @@ -322,15 +515,28 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `false` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'CommitRevealWeightsEnabled', [netuid]) print(result.value) ``` +## 32. CommitRevealWeightsVersion + +- **Description**: Storage for CommitRevealWeightsVersion. +- **Query Type**: `u16` +- **Parameters**: None +- **Default Value**: `0` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") -## 20. Consensus + result = substrate.query('SubtensorModule', 'CommitRevealWeightsVersion') + print(result.value) + ``` +## 33. Consensus - **Description**: Consensus values of UIDs in a network. - **Query Type**: `u16 -> Vec` @@ -339,15 +545,14 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `[]` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'Consensus', [netuid]) print(result.value) ``` - -## 21. CRV3WeightCommits +## 34. CRV3WeightCommits - **Description**: Stores a queue of v3 commits for an account on a given netuid and epoch. - **Query Type**: `(u16, u64) -> VecDeque<(AccountId, Vec, u64)>` @@ -357,7 +562,7 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `[]` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 @@ -365,8 +570,25 @@ title: "Subtensor Storage Query Examples" result = substrate.query('SubtensorModule', 'CRV3WeightCommits', [netuid, commit_epoch]) print(result.value) ``` +## 35. CRV3WeightCommitsV2 + +- **Description**: +- **Query Type**: `(u16, u64) -> VecDeque<(AccountId, Vec, u64)>` +- **Parameters**: + - `key`: `AccountId` + - `netuid`: `u16` +- **Default Value**: `0` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") -## 22. Delegates + netuid = 1 + commit_epoch = 100 + result = substrate.query('SubtensorModule', 'CRV3WeightCommitsV2', [netuid, commit_epoch]) + print(result.value) + ``` +## 36. Delegates - **Description**: Returns the hotkey delegation take, signaling that this key is open for delegation. - **Query Type**: `AccountId -> u16` @@ -375,15 +597,15 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `11796` - **Python Example**: ```python - from substrateinterface import SubstrateInterface, Keypair + from async_substrate_interface import SubstrateInterface + from bittensor_wallet import Keypair substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") hotkey = Keypair.create_from_uri('//Alice').ss58_address result = substrate.query('SubtensorModule', 'Delegates', [hotkey]) print(result.value) ``` - -## 23. Difficulty +## 37. Difficulty - **Description**: Difficulty parameter for a given network. - **Query Type**: `u16 -> u64` @@ -392,29 +614,28 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `10000000` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'Difficulty', [netuid]) print(result.value) ``` - -## 24. DissolveNetworkScheduleDuration +## 38. DissolveNetworkScheduleDuration - **Description**: The block duration required before a network dissolve schedule executes. - **Query Type**: `u32` +- **Parameters**: None - **Default Value**: `36000` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") result = substrate.query('SubtensorModule', 'DissolveNetworkScheduleDuration') print(result.value) ``` - -## 25. Dividends +## 39. Dividends - **Description**: Dividend values of UIDs in a network. - **Query Type**: `u16 -> Vec` @@ -423,29 +644,30 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `[]` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'Dividends', [netuid]) print(result.value) ``` +## 40. EMAPriceHalvingBlocks -## 26. DynamicBlock - -- **Description**: Block number when the dynamic logic was enabled. -- **Query Type**: `u64` +- **Description**: Storage for EMAPriceHalvingBlocks. +- **Query Type**: `u16 -> unknown` +- **Parameters**: + - `netuid`: `u16` - **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") - result = substrate.query('SubtensorModule', 'DynamicBlock') + netuid = 1 + result = substrate.query('SubtensorModule', 'EMAPriceHalvingBlocks', [netuid]) print(result.value) ``` - -## 27. Emission +## 41. Emission - **Description**: Emission values of UIDs in a network. - **Query Type**: `u16 -> Vec` @@ -454,32 +676,72 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `[]` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'Emission', [netuid]) print(result.value) ``` +## 42. FirstEmissionBlockNumber -## 28. EmissionValues - -- **Description**: Emission values of the network. -- **Query Type**: `u16 -> u64` +- **Description**: Storage for FirstEmissionBlockNumber. +- **Query Type**: `u16 -> unknown` - **Parameters**: - `netuid`: `u16` - **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 - result = substrate.query('SubtensorModule', 'EmissionValues', [netuid]) + result = substrate.query('SubtensorModule', 'FirstEmissionBlockNumber', [netuid]) print(result.value) ``` +## 43. FlowEmaSmoothingFactor -## 29. HasMigrationRun +- **Description**: Storage for flow EMA smoothing factor. +- **Query Type**: `u64` +- **Parameters**: None +- **Default Value**: `29597889189277` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") + + result = substrate.query('SubtensorModule', 'FlowEmaSmoothingFactor') + print(result.value) + ``` +## 44. FlowFirstBlock + +- **Description**: Storage for block when TAO flow calculation starts. +- **Query Type**: `u64` +- **Parameters**: None +- **Default Value**: `0` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") + + result = substrate.query('SubtensorModule', 'FlowFirstBlock') + print(result.value) + ``` +## 45. FlowNormExponent + +- **Description**: Default value for flow normalization exponent. +- **Query Type**: `U64F64` +- **Parameters**: None +- **Default Value**: `0` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") + + result = substrate.query('SubtensorModule', 'FlowNormExponent') + print(result) + ``` +## 46. HasMigrationRun - **Description**: Storage for migration run status. - **Query Type**: `Vec -> bool` @@ -488,15 +750,31 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `false` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") key = b"migrate_identities" result = substrate.query('SubtensorModule', 'HasMigrationRun', [key]) print(result.value) ``` +## 47. Identities + +- **Description**: Storage for Identities. +- **Query Type**: `u16 -> AccountId` +- **Parameters**: + - `coldkey`: `AccountId` +- **Default Value**: `0` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") -## 30. IdentitiesV2 + from bittensor_wallet import Keypair + coldkey = Keypair.create_from_uri('//Bob').ss58_address + result = substrate.query('SubtensorModule', 'Identities', [coldkey]) + print(result) + ``` +## 48. IdentitiesV2 - **Description**: Identity information for a given coldkey (v2 format). - **Query Type**: `AccountId -> ChainIdentityOfV2` @@ -505,15 +783,31 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `None` - **Python Example**: ```python - from substrateinterface import SubstrateInterface, Keypair + from async_substrate_interface import SubstrateInterface + from bittensor_wallet import Keypair substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") coldkey = Keypair.create_from_uri('//Charlie').ss58_address result = substrate.query('SubtensorModule', 'IdentitiesV2', [coldkey]) - print(result.value) + print(result) ``` +## 49. ImmuneOwnerUidsLimit + +- **Description**: List of subnet owner immune UIDs. +- **Query Type**: `u16 -> unknown` +- **Parameters**: + - `netuid`: `u16` +- **Default Value**: `0` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") -## 31. ImmunityPeriod + netuid = 1 + result = substrate.query('SubtensorModule', 'ImmuneOwnerUidsLimit', [netuid]) + print(result.value) + ``` +## 50. ImmunityPeriod - **Description**: Immunity period for networks. - **Query Type**: `u16 -> u16` @@ -522,15 +816,14 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `4096` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'ImmunityPeriod', [netuid]) print(result.value) ``` - -## 32. Incentive +## 51. Incentive - **Description**: Incentive values of UIDs in a network. - **Query Type**: `u16 -> Vec` @@ -539,15 +832,14 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `[]` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'Incentive', [netuid]) print(result.value) ``` - -## 33. IsNetworkMember +## 52. IsNetworkMember - **Description**: Whether a hotkey is a member of a network. - **Query Type**: `(AccountId, u16) -> bool` @@ -557,7 +849,8 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `false` - **Python Example**: ```python - from substrateinterface import SubstrateInterface, Keypair + from async_substrate_interface import SubstrateInterface + from bittensor_wallet import Keypair substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") hotkey = Keypair.create_from_uri('//Alice').ss58_address @@ -565,8 +858,7 @@ title: "Subtensor Storage Query Examples" result = substrate.query('SubtensorModule', 'IsNetworkMember', [hotkey, netuid]) print(result.value) ``` - -## 34. Kappa +## 53. Kappa - **Description**: Kappa parameter of the network. - **Query Type**: `u16 -> u16` @@ -575,53 +867,48 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `32767` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'Kappa', [netuid]) print(result.value) ``` - -## 35. Keys +## 54. Keys - **Description**: Maps UID to hotkey within a network. - **Query Type**: `(u16, u16) -> AccountId` - **Parameters**: - `netuid`: `u16` - `uid`: `u16` -- **Default Value**: `AccountId` derived from trailing zeroes +- **Default Value**: `AccountId` derived from trailing zeroes. - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 uid = 123 result = substrate.query('SubtensorModule', 'Keys', [netuid, uid]) - print(result.value) + print(result) ``` +## 55. LargestLocked -## 36. LastAddStakeIncrease - -- **Description**: Last block number when stake was increased for a hotkey-coldkey pair. -- **Query Type**: `(AccountId, AccountId) -> u64` +- **Description**: +- **Query Type**: `u16 -> unknown` - **Parameters**: - - `hotkey`: `AccountId` - - `coldkey`: `AccountId` + - `netuid`: `u16` - **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface, Keypair + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") - hotkey = Keypair.create_from_uri('//Alice').ss58_address - coldkey = Keypair.create_from_uri('//Bob').ss58_address - result = substrate.query('SubtensorModule', 'LastAddStakeIncrease', [hotkey, coldkey]) + netuid = 1 + result = substrate.query('SubtensorModule', 'LargestLocked', [netuid]) print(result.value) ``` - -## 37. LastAdjustmentBlock +## 56. LastAdjustmentBlock - **Description**: Block number of the last adjustment for a given network. - **Query Type**: `u16 -> u64` @@ -630,15 +917,14 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'LastAdjustmentBlock', [netuid]) print(result.value) ``` - -## 38. LastColdkeyHotkeyStakeBlock +## 57. LastColdkeyHotkeyStakeBlock - **Description**: Last block at which stake was added/removed for a coldkey-hotkey pair. - **Query Type**: `(AccountId, AccountId) -> u64` @@ -648,7 +934,8 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `None` - **Python Example**: ```python - from substrateinterface import SubstrateInterface, Keypair + from async_substrate_interface import SubstrateInterface + from bittensor_wallet import Keypair substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") coldkey = Keypair.create_from_uri('//Alice').ss58_address @@ -656,82 +943,78 @@ title: "Subtensor Storage Query Examples" result = substrate.query('SubtensorModule', 'LastColdkeyHotkeyStakeBlock', [coldkey, hotkey]) print(result.value) ``` +## 58. LastHotkeyEmissionOnNetuid -## 39. LastHotkeyColdkeyEmissionOnNetuid - -- **Description**: Last emission block for a hotkey-coldkey pair on a given netuid. -- **Query Type**: `(AccountId, AccountId, u16) -> u64` +- **Description**: Last emission block for a hotkey on a given netuid. +- **Query Type**: `(AccountId, u16) -> u64` - **Parameters**: - `hotkey`: `AccountId` - - `coldkey`: `AccountId` - `netuid`: `u16` - **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface, Keypair + from async_substrate_interface import SubstrateInterface + from bittensor_wallet import Keypair substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") hotkey = Keypair.create_from_uri('//Alice').ss58_address - coldkey = Keypair.create_from_uri('//Bob').ss58_address netuid = 1 - result = substrate.query('SubtensorModule', 'LastHotkeyColdkeyEmissionOnNetuid', [hotkey, coldkey, netuid]) + result = substrate.query('SubtensorModule', 'LastHotkeyEmissionOnNetuid', [hotkey, netuid]) print(result.value) ``` +## 59. LastHotkeySwapOnNetuid -## 40. LastHotkeyEmissionDrain - -- **Description**: Last block we drained this hotkey's emission. -- **Query Type**: `AccountId -> u64` +- **Description**: Storage for LastHotkeySwapOnNetuid. +- **Query Type**: `(u16, AccountId) -> unknown` - **Parameters**: + - `netuid`: `u16` - `hotkey`: `AccountId` - **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface, Keypair + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") + netuid = 1 + from bittensor_wallet import Keypair hotkey = Keypair.create_from_uri('//Alice').ss58_address - result = substrate.query('SubtensorModule', 'LastHotkeyEmissionDrain', [hotkey]) + result = substrate.query('SubtensorModule', 'LastHotkeySwapOnNetuid', [netuid, hotkey]) print(result.value) ``` +## 60. LastMechansimStepBlock -## 41. LastHotkeyEmissionOnNetuid - -- **Description**: Last emission block for a hotkey on a given netuid. -- **Query Type**: `(AccountId, u16) -> u64` +- **Description**: Last block when the mechanism step was performed. +- **Query Type**: `u16 -> u64` - **Parameters**: - - `hotkey`: `AccountId` - `netuid`: `u16` - **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface, Keypair + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") - hotkey = Keypair.create_from_uri('//Alice').ss58_address netuid = 1 - result = substrate.query('SubtensorModule', 'LastHotkeyEmissionOnNetuid', [hotkey, netuid]) + result = substrate.query('SubtensorModule', 'LastMechansimStepBlock', [netuid]) print(result.value) ``` +## 61. LastRateLimitedBlock -## 42. LastMechansimStepBlock - -- **Description**: Last block when the mechanism step was performed. -- **Query Type**: `u16 -> u64` -- **Parameters**: - - `netuid`: `u16` +- **Description**: Storage for `LastRateLimitedBlock` +- **Query Type**: `u16 -> AccountId` +- **Parameters**: + - `RatelimitKey` - **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") - netuid = 1 - result = substrate.query('SubtensorModule', 'LastMechansimStepBlock', [netuid]) + from bittensor_wallet import Keypair + coldkey = Keypair.create_from_uri('//Bob').ss58_address + result = substrate.query('SubtensorModule', 'LastRateLimitedBlock', [{"LastTxBlock": coldkey}]) print(result.value) ``` - -## 43. LastTxBlock +## 62. LastTxBlock - **Description**: Last block for a transaction key. - **Query Type**: `AccountId -> u64` @@ -740,15 +1023,15 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface, Keypair + from async_substrate_interface import SubstrateInterface + from bittensor_wallet import Keypair substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") key = Keypair.create_from_uri('//Alice').ss58_address result = substrate.query('SubtensorModule', 'LastTxBlock', [key]) print(result.value) ``` - -## 44. LastTxBlockChildKeyTake +## 63. LastTxBlockChildKeyTake - **Description**: Last block for a childkey take transaction. - **Query Type**: `AccountId -> u64` @@ -757,15 +1040,15 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface, Keypair + from async_substrate_interface import SubstrateInterface + from bittensor_wallet import Keypair substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") key = Keypair.create_from_uri('//Alice').ss58_address result = substrate.query('SubtensorModule', 'LastTxBlockChildKeyTake', [key]) print(result.value) ``` - -## 45. LastTxBlockDelegateTake +## 64. LastTxBlockDelegateTake - **Description**: Last block for a delegate take transaction key. - **Query Type**: `AccountId -> u64` @@ -774,15 +1057,15 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface, Keypair + from async_substrate_interface import SubstrateInterface + from bittensor_wallet import Keypair substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") key = Keypair.create_from_uri('//Alice').ss58_address result = substrate.query('SubtensorModule', 'LastTxBlockDelegateTake', [key]) print(result.value) ``` - -## 46. LastUpdate +## 65. LastUpdate - **Description**: Last update values of UIDs in a network. - **Query Type**: `u16 -> Vec` @@ -791,15 +1074,14 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `[]` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'LastUpdate', [netuid]) print(result.value) ``` - -## 47. LiquidAlphaOn +## 66. LiquidAlphaOn - **Description**: Whether Liquid Alpha is enabled. - **Query Type**: `u16 -> bool` @@ -808,15 +1090,14 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `false` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'LiquidAlphaOn', [netuid]) print(result.value) ``` - -## 48. LoadedEmission +## 67. LoadedEmission - **Description**: Emission data loaded for a network. - **Query Type**: `u16 -> Vec<(AccountId, u64, u64)>` @@ -825,15 +1106,14 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `None` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'LoadedEmission', [netuid]) - print(result.value) + print(result) ``` - -## 49. MaxAllowedUids +## 68. MaxAllowedUids - **Description**: Maximum allowed UIDs for networks. - **Query Type**: `u16 -> u16` @@ -842,15 +1122,14 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `4096` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'MaxAllowedUids', [netuid]) print(result.value) ``` - -## 50. MaxAllowedValidators +## 69. MaxAllowedValidators - **Description**: Maximum allowed validators for networks. - **Query Type**: `u16 -> u16` @@ -859,15 +1138,14 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `128` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'MaxAllowedValidators', [netuid]) print(result.value) ``` - -## 51. MaxBurn +## 70. MaxBurn - **Description**: Maximum burn value for a given network. - **Query Type**: `u16 -> u64` @@ -876,43 +1154,42 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `100000000000` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'MaxBurn', [netuid]) print(result.value) ``` +## 71. MaxChildkeyTake -## 52. MaxChildkeyTake - -- **Description**: Maximum childkey take (percentage * 65535) for child-keys. +- **Description**: Maximum childkey take (percentage \* 65535) for child-keys. - **Query Type**: `u16` +- **Parameters**: None - **Default Value**: `11796` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") result = substrate.query('SubtensorModule', 'MaxChildkeyTake') print(result.value) ``` - -## 53. MaxDelegateTake +## 72. MaxDelegateTake - **Description**: Maximum delegate take (percentage * 65535) for delegations. - **Query Type**: `u16` +- **Parameters**: None - **Default Value**: `11796` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") result = substrate.query('SubtensorModule', 'MaxDelegateTake') print(result.value) ``` - -## 54. MaxDifficulty +## 73. MaxDifficulty - **Description**: Maximum difficulty parameter for a given network. - **Query Type**: `u16 -> u64` @@ -921,15 +1198,14 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `u64::MAX / 4` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'MaxDifficulty', [netuid]) print(result.value) ``` - -## 55. MaxRegistrationsPerBlock +## 74. MaxRegistrationsPerBlock - **Description**: Maximum registrations allowed per block. - **Query Type**: `u16 -> u16` @@ -938,46 +1214,91 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `1` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") block = 100 result = substrate.query('SubtensorModule', 'MaxRegistrationsPerBlock', [block]) print(result.value) ``` +## 75. MaxWeightsLimit -## 56. MaxTempo - -- **Description**: Global maximum tempo. -- **Query Type**: `u16` -- **Default Value**: `30` +- **Description**: Maximum weight limit for networks. +- **Query Type**: `u16 -> u16` +- **Parameters**: + - `netuid`: `u16` +- **Default Value**: `1000` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") - result = substrate.query('SubtensorModule', 'MaxTempo') + netuid = 1 + result = substrate.query('SubtensorModule', 'MaxWeightsLimit', [netuid]) print(result.value) ``` +## 76. MechanismCountCurrent + +- **Description**: Storage for MechanismCountCurrent. +- **Query Type**: `u16 -> unknown` +- **Parameters**: + - `netuid`: `u16` +- **Default Value**: `0` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") -## 57. MaxWeightsLimit + netuid = 1 + result = substrate.query('SubtensorModule', 'MechanismCountCurrent', [netuid]) + print(result.value) + ``` +## 77. MechanismEmissionSplit -- **Description**: Maximum weight limit for networks. -- **Query Type**: `u16 -> u16` +- **Description**: Storage for a subnet's mechanism emissions split. +- **Query Type**: `u16 -> unknown` - **Parameters**: - `netuid`: `u16` -- **Default Value**: `1000` +- **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 - result = substrate.query('SubtensorModule', 'MaxWeightsLimit', [netuid]) + result = substrate.query('SubtensorModule', 'MechanismEmissionSplit', [netuid]) + print(result) + ``` +## 78. MinActivityCutoff + +- **Description**: Storage for MinActivityCutoff. +- **Query Type**: `u16` +- **Parameters**: None +- **Default Value**: `0` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") + + result = substrate.query('SubtensorModule', 'MinActivityCutoff') print(result.value) ``` +## 79. MinAllowedUids + +- **Description**: Minimum allowed UIDs for networks (global). +- **Query Type**: `u16` +- **Parameters**: None +- **Default Value**: `128` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") -## 58. MinAllowedWeights + netuid = 1 + result = substrate.query('SubtensorModule', 'MinAllowedUids', [netuid]) + print(result.value) + ``` +## 80. MinAllowedWeights - **Description**: Minimum allowed weights for networks. - **Query Type**: `u16 -> u16` @@ -986,15 +1307,14 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `1024` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'MinAllowedWeights', [netuid]) print(result.value) ``` - -## 59. MinBurn +## 81. MinBurn - **Description**: Minimum burn value for a given network. - **Query Type**: `u16 -> u64` @@ -1003,43 +1323,42 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `1000000000` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'MinBurn', [netuid]) print(result.value) ``` - -## 60. MinChildkeyTake +## 82. MinChildkeyTake - **Description**: Minimum childkey take (percentage * 65535) for child-keys. - **Query Type**: `u16` +- **Parameters**: None - **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") result = substrate.query('SubtensorModule', 'MinChildkeyTake') print(result.value) ``` - -## 61. MinDelegateTake +## 83. MinDelegateTake - **Description**: Minimum delegate take (percentage * 65535) for delegations. - **Query Type**: `u16` +- **Parameters**: None - **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") result = substrate.query('SubtensorModule', 'MinDelegateTake') print(result.value) ``` - -## 62. MinDifficulty +## 84. MinDifficulty - **Description**: Minimum difficulty parameter for a given network. - **Query Type**: `u16 -> u64` @@ -1048,147 +1367,70 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `10000000` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'MinDifficulty', [netuid]) print(result.value) ``` - -## 63. MinStake - -- **Description**: Minimum stake requirement (global). -- **Query Type**: `u64` -- **Default Value**: `500000` -- **Python Example**: - ```python - from substrateinterface import SubstrateInterface - substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") - - result = substrate.query('SubtensorModule', 'MinStake') - print(result.value) - ``` - -## 64. NetworkImmunityPeriod +## 85. NetworkImmunityPeriod - **Description**: Immunity period for networks (global). - **Query Type**: `u64` +- **Parameters**: None - **Default Value**: `50400` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") result = substrate.query('SubtensorModule', 'NetworkImmunityPeriod') print(result.value) ``` - -## 65. NetworkLastLockCost +## 86. NetworkLastLockCost - **Description**: Last lock cost for networks. - **Query Type**: `u64` +- **Parameters**: None - **Default Value**: `1000000000000` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") result = substrate.query('SubtensorModule', 'NetworkLastLockCost') print(result.value) ``` - -## 66. NetworkLastRegistered - -- **Description**: Last registered block number for networks. -- **Query Type**: `u64` -- **Default Value**: `0` -- **Python Example**: - ```python - from substrateinterface import SubstrateInterface - substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") - - result = substrate.query('SubtensorModule', 'NetworkLastRegistered') - print(result.value) - ``` - -## 67. NetworkLockReductionInterval +## 87. NetworkLockReductionInterval - **Description**: Lock reduction interval for networks. - **Query Type**: `u64` +- **Parameters**: None - **Default Value**: `100800` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") result = substrate.query('SubtensorModule', 'NetworkLockReductionInterval') print(result.value) ``` - -## 68. NetworkMaxStake - -- **Description**: Max stake allowed on a subnet. -- **Query Type**: `u16 -> u64` -- **Parameters**: - - `netuid`: `u16` -- **Default Value**: `18446744073709551615` -- **Python Example**: - ```python - from substrateinterface import SubstrateInterface - substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") - - netuid = 1 - result = substrate.query('SubtensorModule', 'NetworkMaxStake', [netuid]) - print(result.value) - ``` - -## 69. NetworkMinAllowedUids - -- **Description**: Minimum allowed UIDs for networks (global). -- **Query Type**: `u16` -- **Default Value**: `128` -- **Python Example**: - ```python - from substrateinterface import SubstrateInterface - substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") - - result = substrate.query('SubtensorModule', 'NetworkMinAllowedUids') - print(result.value) - ``` - -## 70. NetworkMinLockCost +## 88. NetworkMinLockCost - **Description**: Minimum lock cost for networks. - **Query Type**: `u64` +- **Parameters**: None - **Default Value**: `1000000000000` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") result = substrate.query('SubtensorModule', 'NetworkMinLockCost') print(result.value) ``` - -## 71. NetworkModality - -- **Description**: Modality of the network (0: TEXT, 1: IMAGE, 2: TENSOR). -- **Query Type**: `u16 -> u16` -- **Parameters**: - - `netuid`: `u16` -- **Default Value**: `0` -- **Python Example**: - ```python - from substrateinterface import SubstrateInterface - substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") - - netuid = 1 - result = substrate.query('SubtensorModule', 'NetworkModality', [netuid]) - print(result.value) - ``` - -## 72. NetworkPowRegistrationAllowed +## 89. NetworkPowRegistrationAllowed - **Description**: Whether PoW registration is allowed in the network. - **Query Type**: `u16 -> bool` @@ -1197,29 +1439,28 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `false` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'NetworkPowRegistrationAllowed', [netuid]) print(result.value) ``` - -## 73. NetworkRateLimit +## 90. NetworkRateLimit - **Description**: Network rate limit. - **Query Type**: `u64` +- **Parameters**: None - **Default Value**: `7200` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") result = substrate.query('SubtensorModule', 'NetworkRateLimit') print(result.value) ``` - -## 74. NetworkRegisteredAt +## 91. NetworkRegisteredAt - **Description**: Block number when the network was registered. - **Query Type**: `u16 -> u64` @@ -1228,15 +1469,14 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'NetworkRegisteredAt', [netuid]) print(result.value) ``` - -## 75. NetworkRegistrationAllowed +## 92. NetworkRegistrationAllowed - **Description**: Whether registration is allowed in the network. - **Query Type**: `u16 -> bool` @@ -1245,15 +1485,28 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `false` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'NetworkRegistrationAllowed', [netuid]) print(result.value) ``` +## 93. NetworkRegistrationStartBlock + +- **Description**: Storage for `NetworkRegistrationStartBlock`. +- **Query Type**: `u64` +- **Parameters**: None +- **Default Value**: `0` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") -## 76. NetworksAdded + result = substrate.query('SubtensorModule', 'NetworkRegistrationStartBlock') + print(result.value) + ``` +## 94. NetworksAdded - **Description**: Whether the network has been added. - **Query Type**: `u16 -> bool` @@ -1262,63 +1515,103 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `false` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'NetworksAdded', [netuid]) print(result.value) ``` +## 95. NeuronCertificates -## 77. NeuronsToPruneAtNextEpoch - -- **Description**: UIDs of neurons to be pruned at the next epoch. -- **Query Type**: `u16 -> u16` +- **Description**: Storage for NeuronCertificates. +- **Query Type**: `(u16, AccountId) -> unknown` - **Parameters**: - `netuid`: `u16` + - `hotkey`: `AccountId` - **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 - result = substrate.query('SubtensorModule', 'NeuronsToPruneAtNextEpoch', [netuid]) + from bittensor_wallet import Keypair + hotkey = Keypair.create_from_uri('//Alice').ss58_address + result = substrate.query('SubtensorModule', 'NeuronCertificates', [netuid, hotkey]) + print(result) + ``` +## 96. NextStakeJobId + +- **Description**: Ensures unique IDs for StakeJobs storage map. +- **Query Type**: `u64` +- **Parameters**: None +- **Default Value**: `0` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") + + result = substrate.query('SubtensorModule', 'NextStakeJobId') print(result.value) ``` +## 97. NextSubnetLeaseId + +- **Description**: Storage for NextSubnetLeaseId. +- **Query Type**: `u32` +- **Parameters**: None +- **Default Value**: `0` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") -## 78. NominatorMinRequiredStake + result = substrate.query('SubtensorModule', 'NextSubnetLeaseId') + print(result.value) + ``` +## 98. NominatorMinRequiredStake - **Description**: Minimum required stake for nominators. - **Query Type**: `u64` +- **Parameters**: None - **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") result = substrate.query('SubtensorModule', 'NominatorMinRequiredStake') print(result.value) ``` +## 99. NumRootClaim -## 79. Owner - -- **Description**: Returns the controlling coldkey for a hotkey. -- **Query Type**: `AccountId -> AccountId` -- **Parameters**: - - `hotkey`: `AccountId` -- **Default Value**: `AccountId` derived from trailing zeroes +- **Description**: Storage for NumRootClaim. +- **Query Type**: `u64` +- **Parameters**: None +- **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface, Keypair + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") - hotkey = Keypair.create_from_uri('//Alice').ss58_address - result = substrate.query('SubtensorModule', 'Owner', [hotkey]) + result = substrate.query('SubtensorModule', 'NumRootClaim') print(result.value) ``` +## 100. NumStakingColdkeys + +- **Description**: Storage for NumStakingColdkeys. +- **Query Type**: `u64` +- **Parameters**: None +- **Default Value**: `0` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") -## 80. OwnedHotkeys + result = substrate.query('SubtensorModule', 'NumStakingColdkeys') + print(result.value) + ``` +## 101. OwnedHotkeys - **Description**: Returns the vector of hotkeys controlled by this coldkey. - **Query Type**: `AccountId -> Vec` @@ -1327,15 +1620,46 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `[]` - **Python Example**: ```python - from substrateinterface import SubstrateInterface, Keypair + from async_substrate_interface import SubstrateInterface + from bittensor_wallet import Keypair substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") coldkey = Keypair.create_from_uri('//Bob').ss58_address result = substrate.query('SubtensorModule', 'OwnedHotkeys', [coldkey]) print(result.value) ``` +## 102. Owner + +- **Description**: Returns the controlling coldkey for a hotkey. +- **Query Type**: `AccountId -> AccountId` +- **Parameters**: + - `hotkey`: `AccountId` +- **Default Value**: `AccountId` derived from trailing zeroes +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + from bittensor_wallet import Keypair + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") + + hotkey = Keypair.create_from_uri('//Alice').ss58_address + result = substrate.query('SubtensorModule', 'Owner', [hotkey]) + print(result) + ``` +## 103. OwnerHyperparamRateLimit + +- **Description**: Global number of epochs used to rate limit subnet owner hyperparameter updates +- **Query Type**: `u16` +- **Parameters**: None +- **Default Value**: `0` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") -## 81. ParentKeys + result = substrate.query('SubtensorModule', 'OwnerHyperparamRateLimit') + print(result.value) + ``` +## 104. ParentKeys - **Description**: Maps child keys to parent keys with proportions. - **Query Type**: `(AccountId, u16) -> Vec<(u64, AccountId)>` @@ -1345,7 +1669,8 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `[]` - **Python Example**: ```python - from substrateinterface import SubstrateInterface, Keypair + from async_substrate_interface import SubstrateInterface + from bittensor_wallet import Keypair substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") child = Keypair.create_from_uri('//Alice').ss58_address @@ -1353,8 +1678,21 @@ title: "Subtensor Storage Query Examples" result = substrate.query('SubtensorModule', 'ParentKeys', [child, netuid]) print(result.value) ``` +## 105. PendingChildKeyCooldown + +- **Description**: Storage value for pending childkey cooldown, settable by root. Stakes record in genesis. The total issued balance in genesis +- **Query Type**: `u64` +- **Parameters**: None +- **Default Value**: `0` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") -## 82. PendingChildKeys + result = substrate.query('SubtensorModule', 'PendingChildKeyCooldown') + print(result.value) + ``` +## 106. PendingChildKeys - **Description**: Pending child keys to be applied after cooldown. - **Query Type**: `(u16, AccountId) -> (Vec<(u64, AccountId)>, u64)` @@ -1364,7 +1702,8 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `( [], 0 )` - **Python Example**: ```python - from substrateinterface import SubstrateInterface, Keypair + from async_substrate_interface import SubstrateInterface + from bittensor_wallet import Keypair substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") parent = Keypair.create_from_uri('//Alice').ss58_address @@ -1372,8 +1711,7 @@ title: "Subtensor Storage Query Examples" result = substrate.query('SubtensorModule', 'PendingChildKeys', [netuid, parent]) print(result.value) ``` - -## 83. PendingEmission +## 107. PendingEmission - **Description**: Pending emission of the network. - **Query Type**: `u16 -> u64` @@ -1382,117 +1720,177 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'PendingEmission', [netuid]) print(result.value) ``` +## 108. PendingOwnerCut -## 84. PendingdHotkeyEmission - -- **Description**: Accumulated hotkey emission. -- **Query Type**: `AccountId -> u64` +- **Description**: Storage for PendingOwnerCut. +- **Query Type**: `u16 -> unknown` - **Parameters**: - - `hotkey`: `AccountId` + - `netuid`: `u16` - **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface, Keypair + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") - hotkey = Keypair.create_from_uri('//Alice').ss58_address - result = substrate.query('SubtensorModule', 'PendingdHotkeyEmission', [hotkey]) + netuid = 1 + result = substrate.query('SubtensorModule', 'PendingOwnerCut', [netuid]) print(result.value) ``` +## 109. PendingRootAlphaDivs -## 85. POWRegistrationsThisInterval - -- **Description**: Number of PoW registrations in this interval. -- **Query Type**: `u16 -> u16` +- **Description**: Storage for PendingRootDivs. +- **Query Type**: `u16 -> unknown` - **Parameters**: - `netuid`: `u16` - **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 - result = substrate.query('SubtensorModule', 'POWRegistrationsThisInterval', [netuid]) + result = substrate.query('SubtensorModule', 'PendingRootAlphaDivs', [netuid]) print(result.value) ``` +## 110. POWRegistrationsThisInterval -## 86. PruningScores - -- **Description**: Pruning scores of UIDs in a network. -- **Query Type**: `u16 -> Vec` +- **Description**: Number of PoW registrations in this interval. +- **Query Type**: `u16 -> u16` - **Parameters**: - `netuid`: `u16` -- **Default Value**: `[]` +- **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 - result = substrate.query('SubtensorModule', 'PruningScores', [netuid]) + result = substrate.query('SubtensorModule', 'POWRegistrationsThisInterval', [netuid]) print(result.value) ``` +## 111. Prometheus -## 87. RAORecycledForRegistration - -- **Description**: Global RAO recycled for registration. -- **Query Type**: `u16 -> u64` +- **Description**: Storage for Prometheus. +- **Query Type**: `(u16, AccountId) -> unknown` - **Parameters**: - `netuid`: `u16` + - `hotkey`: `AccountId` - **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 - result = substrate.query('SubtensorModule', 'RAORecycledForRegistration', [netuid]) - print(result.value) + from bittensor_wallet import Keypair + hotkey = Keypair.create_from_uri('//Alice').ss58_address + result = substrate.query('SubtensorModule', 'Prometheus', [netuid, hotkey]) + print(result) ``` +## 112. PruningScores -## 88. Rank - -- **Description**: Rank values of UIDs in a network. +- **Description**: Pruning scores of UIDs in a network. - **Query Type**: `u16 -> Vec` - **Parameters**: - `netuid`: `u16` - **Default Value**: `[]` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 - result = substrate.query('SubtensorModule', 'Rank', [netuid]) + result = substrate.query('SubtensorModule', 'PruningScores', [netuid]) print(result.value) ``` +## 113. Rank -## 89. RegistrationsThisBlock - -- **Description**: Number of registrations in the current block for a given network. +- **Description**: Rank values of UIDs in a network. +- **Query Type**: `u16 -> Vec` +- **Parameters**: + - `netuid`: `u16` +- **Default Value**: `[]` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") + + netuid = 1 + result = substrate.query('SubtensorModule', 'Rank', [netuid]) + print(result.value) + ``` +## 114. RAORecycledForRegistration + +- **Description**: Global RAO recycled for registration. +- **Query Type**: `u16 -> u64` +- **Parameters**: + - `netuid`: `u16` +- **Default Value**: `0` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") + + netuid = 1 + result = substrate.query('SubtensorModule', 'RAORecycledForRegistration', [netuid]) + print(result.value) + ``` +## 115. RecycleOrBurn + +- **Description**: Storage for RecycleOrBurn. +- **Query Type**: `u16 -> unknown` +- **Parameters**: + - `netuid`: `u16` +- **Default Value**: `0` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") + + netuid = 1 + result = substrate.query('SubtensorModule', 'RecycleOrBurn', [netuid]) + print(result) + ``` +## 116. RegistrationsThisBlock + +- **Description**: Number of registrations in the current block for a given network. - **Query Type**: `u16 -> u16` - **Parameters**: - `netuid`: `u16` - **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'RegistrationsThisBlock', [netuid]) print(result.value) ``` +## 117. RegistrationsThisInterval -## 90. RevealPeriodEpochs +- **Description**: Storage for RegistrationsThisInterval. +- **Query Type**: `u16 -> unknown` +- **Parameters**: + - `netuid`: `u16` +- **Default Value**: `0` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") + + netuid = 1 + result = substrate.query('SubtensorModule', 'RegistrationsThisInterval', [netuid]) + print(result.value) + ``` +## 118. RevealPeriodEpochs - **Description**: Number of epochs allowed for commit-reveal periods on a given netuid. - **Query Type**: `u16 -> u64` @@ -1501,15 +1899,14 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `1` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'RevealPeriodEpochs', [netuid]) print(result.value) ``` - -## 91. Rho +## 119. Rho - **Description**: Rho parameter of the network. - **Query Type**: `u16 -> u16` @@ -1518,46 +1915,102 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `10` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'Rho', [netuid]) print(result.value) ``` +## 120. RootClaimable + +- **Description**: Storage for RootClaimable. +- **Query Type**: `u16 -> AccountId` +- **Parameters**: + - `netuid`: `u16` +- **Default Value**: `0` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + from bittensor_wallet import Keypair + + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") + hotkey = Keypair.create_from_uri('//Alice').ss58_address + + result = substrate.query('SubtensorModule', 'RootClaimable', [hotkey]) + print(result.value) + ``` +## 121. RootClaimableThreshold + +- **Description**: Storage for RootClaimableThreshold. +- **Query Type**: `u16 -> unknown` +- **Parameters**: + - `netuid`: `u16` +- **Default Value**: `0` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") -## 92. ScalingLawPower + netuid = 1 + result = substrate.query('SubtensorModule', 'RootClaimableThreshold', [netuid]) + print(result) + ``` +## 122. RootClaimed -- **Description**: Scaling law power for the network. -- **Query Type**: `u16 -> u16` +- **Description**: Storage for RootClaimed. +- **Query Type**: `(AccountId, AccountId, u16) -> unknown` - **Parameters**: + - `hotkey`: `AccountId` + - `coldkey`: `AccountId` - `netuid`: `u16` -- **Default Value**: `50` +- **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface + from bittensor_wallet import Keypair substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") + hotkey = Keypair.create_from_uri('//Alice').ss58_address + coldkey = Keypair.create_from_uri('//Bob').ss58_address netuid = 1 - result = substrate.query('SubtensorModule', 'ScalingLawPower', [netuid]) + result = substrate.query('SubtensorModule', 'RootClaimed', [hotkey, coldkey, netuid]) print(result.value) ``` +## 123. RootClaimType -## 93. SenateRequiredStakePercentage +- **Description**: Storage for RootClaimType. +- **Query Type**: `u16 -> AccountId` +- **Parameters**: + - `coldkey`: `AccountId` +- **Default Value**: `0` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + from bittensor_wallet import Keypair + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") -- **Description**: The percentage of stake required by the Senate. -- **Query Type**: `u64` -- **Default Value**: `1` + coldkey = Keypair.create_from_uri('//Bob').ss58_address + result = substrate.query('SubtensorModule', 'RootClaimType', [coldkey]) + print(result) + ``` +## 124. ScalingLawPower + +- **Description**: Scaling law power for the network. +- **Query Type**: `u16 -> u16` +- **Parameters**: + - `netuid`: `u16` +- **Default Value**: `50` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") - result = substrate.query('SubtensorModule', 'SenateRequiredStakePercentage') + netuid = 1 + result = substrate.query('SubtensorModule', 'ScalingLawPower', [netuid]) print(result.value) ``` - -## 94. ServingRateLimit +## 125. ServingRateLimit - **Description**: Rate limit for serving in the network. - **Query Type**: `u16 -> u64` @@ -1566,80 +2019,116 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `50` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'ServingRateLimit', [netuid]) print(result.value) ``` +## 126. StakeThreshold -## 95. StakingFee - -- **Description**: Staking fee (global). +- **Description**: Storage for `StakeThreshold`. - **Query Type**: `u64` -- **Default Value**: `50000` +- **Parameters**: None +- **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") - result = substrate.query('SubtensorModule', 'StakingFee') + result = substrate.query('SubtensorModule', 'StakeThreshold') print(result.value) ``` +## 127. StakeWeight -## 96. StakingHotkeys +- **Description**: Weight for stake used in YC (consensus). +- **Query Type**: `u16 -> Vec` +- **Parameters**: + - `netuid`: `u16` +- **Default Value**: `[]` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") -- **Description**: Maps coldkey to hotkeys that stake to it. -- **Query Type**: `AccountId -> Vec` + netuid = 1 + result = substrate.query('SubtensorModule', 'StakeWeight', [netuid]) + print(result.value) + ``` +## 128. StakingColdkeys + +- **Description**: Storage for StakingColdkeys. +- **Query Type**: `u16 -> AccountId` - **Parameters**: - `coldkey`: `AccountId` -- **Default Value**: `[]` +- **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface, Keypair + from async_substrate_interface import SubstrateInterface + from bittensor_wallet import Keypair substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") coldkey = Keypair.create_from_uri('//Bob').ss58_address - result = substrate.query('SubtensorModule', 'StakingHotkeys', [coldkey]) + result = substrate.query('SubtensorModule', 'StakingColdkeys', [coldkey]) print(result.value) ``` +## 129. StakingColdkeysByIndex -## 97. StakeWeight +- **Description**: Storage for coldkeys that have stake to an index +- **Query Type**: `u16 -> u64` +- **Parameters**: + - `coldkey`: `AccountId` +- **Default Value**: `0` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") -- **Description**: Weight for stake used in YC (consensus). -- **Query Type**: `u16 -> Vec` + index = 1 + result = substrate.query('SubtensorModule', 'StakingColdkeysByIndex', [index]) + print(result) + ``` +## 130. StakingHotkeys + +- **Description**: Maps coldkey to hotkeys that stake to it. +- **Query Type**: `AccountId -> Vec` - **Parameters**: - - `netuid`: `u16` + - `coldkey`: `AccountId` - **Default Value**: `[]` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface + from bittensor_wallet import Keypair substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") - netuid = 1 - result = substrate.query('SubtensorModule', 'StakeWeight', [netuid]) + coldkey = Keypair.create_from_uri('//Bob').ss58_address + result = substrate.query('SubtensorModule', 'StakingHotkeys', [coldkey]) print(result.value) ``` +## 131. StakingOperationRateLimiter -## 98. SubnetAlphaEmissionSell - -- **Description**: Alpha sold per block in the subnet. -- **Query Type**: `(u16) -> u64` +- **Description**: Rate limits for staking operations. +- **Query Type**: `(AccountId, AccountId, u16) -> unknown` - **Parameters**: + - `hotkey`: `AccountId` + - `coldkey`: `AccountId` - `netuid`: `u16` - **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") + from bittensor_wallet import Keypair + hotkey = Keypair.create_from_uri('//Alice').ss58_address + from bittensor_wallet import Keypair + coldkey = Keypair.create_from_uri('//Bob').ss58_address netuid = 1 - result = substrate.query('SubtensorModule', 'SubnetAlphaEmissionSell', [netuid]) + result = substrate.query('SubtensorModule', 'StakingOperationRateLimiter', [hotkey, coldkey, netuid]) print(result.value) ``` - -## 99. SubnetAlphaIn +## 132. SubnetAlphaIn - **Description**: Amount of alpha in the subnet's liquidity pool. - **Query Type**: `(u16) -> u64` @@ -1648,15 +2137,14 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'SubnetAlphaIn', [netuid]) print(result.value) ``` - -## 100. SubnetAlphaInEmission +## 133. SubnetAlphaInEmission - **Description**: Amount of alpha entering a subnet per block. - **Query Type**: `(u16) -> u64` @@ -1665,15 +2153,30 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'SubnetAlphaInEmission', [netuid]) print(result.value) ``` +## 134. SubnetAlphaInProvided + +- **Description**: Storage for SubnetAlphaInProvided. +- **Query Type**: `u16 -> unknown` +- **Parameters**: + - `netuid`: `u16` +- **Default Value**: `0` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") -## 101. SubnetAlphaOut + netuid = 1 + result = substrate.query('SubtensorModule', 'SubnetAlphaInProvided', [netuid]) + print(result.value) + ``` +## 135. SubnetAlphaOut - **Description**: Amount of alpha in the subnet itself. - **Query Type**: `(u16) -> u64` @@ -1682,15 +2185,14 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'SubnetAlphaOut', [netuid]) print(result.value) ``` - -## 102. SubnetAlphaOutEmission +## 136. SubnetAlphaOutEmission - **Description**: Amount of alpha leaving a subnet per block. - **Query Type**: `(u16) -> u64` @@ -1699,15 +2201,46 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'SubnetAlphaOutEmission', [netuid]) print(result.value) ``` +## 137. SubnetEmaTaoFlow + +- **Description**: Default value for flow cutoff. +- **Query Type**: `u16 -> unknown` +- **Parameters**: + - `netuid`: `u16` +- **Default Value**: `0` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") + + netuid = 1 + result = substrate.query('SubtensorModule', 'SubnetEmaTaoFlow', [netuid]) + print(result.value) + ``` +## 138. SubnetIdentities -## 103. SubnetIdentitiesV2 +- **Description**: Storage for SubnetIdentities. +- **Query Type**: `u16 -> unknown` +- **Parameters**: + - `netuid`: `u16` +- **Default Value**: `0` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") + + netuid = 1 + result = substrate.query('SubtensorModule', 'SubnetIdentities', [netuid]) + print(result) + ``` +## 139. SubnetIdentitiesV2 - **Description**: Identity information for a subnet (v2 format). - **Query Type**: `u16 -> SubnetIdentityOfV2` @@ -1716,29 +2249,77 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `None` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'SubnetIdentitiesV2', [netuid]) - print(result.value) + print(result) ``` +## 140. SubnetIdentitiesV3 + +- **Description**: Identity information for a subnet (v3 format). +- **Query Type**: `u16 -> unknown` +- **Parameters**: + - `netuid`: `u16` +- **Default Value**: `0` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") + + netuid = 1 + result = substrate.query('SubtensorModule', 'SubnetIdentitiesV3', [netuid]) + print(result) + ``` +## 141. SubnetLeases + +- **Description**: Storage for SubnetLeases. +- **Query Type**: `u16 -> unknown` +- **Parameters**: + - `lease_id`: `u32` +- **Default Value**: `0` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") + + lease_id = 1 + result = substrate.query('SubtensorModule', 'SubnetLeases', [lease_id]) + print(result) + ``` +## 142. SubnetLeaseShares + +- **Description**: Storage for SubnetLeaseShares. +- **Query Type**: `(u16, AccountId) -> unknown` +- **Parameters**: None +- **Default Value**: `0` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") -## 104. SubnetLimit + lease_id = 1 + coldkey = Keypair.create_from_uri('//Bob').ss58_address + result = substrate.query('SubtensorModule', 'SubnetLeaseShares', [lease_id, coldkey]) + + print(result) + ``` +## 143. SubnetLimit - **Description**: Maximum number of networks. - **Query Type**: `u16` +- **Parameters**: None - **Default Value**: `12` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") result = substrate.query('SubtensorModule', 'SubnetLimit') print(result.value) ``` - -## 105. SubnetLocked +## 144. SubnetLocked - **Description**: Locked amount in the subnet. - **Query Type**: `u16 -> u64` @@ -1747,15 +2328,14 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'SubnetLocked', [netuid]) print(result.value) ``` - -## 106. SubnetMechanism +## 145. SubnetMechanism - **Description**: Mechanism identifier for the subnet. - **Query Type**: `u16 -> u16` @@ -1764,29 +2344,28 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'SubnetMechanism', [netuid]) print(result.value) ``` - -## 107. SubnetMovingAlpha +## 146. SubnetMovingAlpha - **Description**: Moving alpha parameter for the dynamic subnet price. - **Query Type**: `I96F32` +- **Parameters**: None - **Default Value**: `0.000003` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") result = substrate.query('SubtensorModule', 'SubnetMovingAlpha') - print(result.value) + print(result) ``` - -## 108. SubnetMovingPrice +## 147. SubnetMovingPrice - **Description**: The moving average price for a subnet. - **Query Type**: `(u16) -> I96F32` @@ -1795,80 +2374,140 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `0.0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'SubnetMovingPrice', [netuid]) - print(result.value) + print(result) ``` +## 148. SubnetOwner -## 109. SubnetName - -- **Description**: The name of the subnet. -- **Query Type**: `u16 -> Vec` +- **Description**: Owner of the subnet. +- **Query Type**: `u16 -> AccountId` - **Parameters**: - `netuid`: `u16` -- **Default Value**: `𝜏` +- **Default Value**: `AccountId` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 - result = substrate.query('SubtensorModule', 'SubnetName', [netuid]) + result = substrate.query('SubtensorModule', 'SubnetOwner', [netuid]) + print(result) + ``` +## 149. SubnetOwnerCut + +- **Description**: Subnet owner cut percentage. +- **Query Type**: `u16` +- **Parameters**: None +- **Default Value**: `11796` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") + + result = substrate.query('SubtensorModule', 'SubnetOwnerCut') print(result.value) ``` +## 150. SubnetOwnerHotkey -## 110. SubnetOwner +- **Description**: Storage for SubnetOwnerHotkey. +- **Query Type**: `u16 -> unknown` +- **Parameters**: + - `netuid`: `u16` +- **Default Value**: `0` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") -- **Description**: Owner of the subnet. -- **Query Type**: `u16 -> AccountId` + netuid = 1 + result = substrate.query('SubtensorModule', 'SubnetOwnerHotkey', [netuid]) + print(result) + ``` +## 151. SubnetTAO + +- **Description**: Amount of TAO in a given subnet's pool. +- **Query Type**: `(u16) -> u64` - **Parameters**: - `netuid`: `u16` -- **Default Value**: `AccountId` derived from trailing zeroes +- **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 - result = substrate.query('SubtensorModule', 'SubnetOwner', [netuid]) + result = substrate.query('SubtensorModule', 'SubnetTAO', [netuid]) print(result.value) ``` +## 152. SubnetTaoFlow -## 111. SubnetOwnerCut - -- **Description**: Subnet owner cut percentage. -- **Query Type**: `u16` -- **Default Value**: `11796` +- **Description**: Storage for SubnetTaoFlow. +- **Query Type**: `u16 -> unknown` +- **Parameters**: + - `netuid`: `u16` +- **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") - result = substrate.query('SubtensorModule', 'SubnetOwnerCut') + netuid = 1 + result = substrate.query('SubtensorModule', 'SubnetTaoFlow', [netuid]) print(result.value) ``` +## 153. SubnetTaoInEmission + +- **Description**: Storage for SubnetTaoInEmission. +- **Query Type**: `u16 -> unknown` +- **Parameters**: + - `netuid`: `u16` +- **Default Value**: `0` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") -## 112. SubnetTAO + netuid = 1 + result = substrate.query('SubtensorModule', 'SubnetTaoInEmission', [netuid]) + print(result.value) + ``` +## 154. SubnetTaoProvided -- **Description**: Amount of TAO in a given subnet's pool. -- **Query Type**: `(u16) -> u64` +- **Description**: Storage for SubnetTaoProvided. +- **Query Type**: `u16 -> unknown` - **Parameters**: - `netuid`: `u16` - **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 - result = substrate.query('SubtensorModule', 'SubnetTAO', [netuid]) + result = substrate.query('SubtensorModule', 'SubnetTaoProvided', [netuid]) print(result.value) ``` +## 155. SubnetUidToLeaseId + +- **Description**: Storage for SubnetUidToLeaseId. +- **Query Type**: `u16 -> unknown` +- **Parameters**: + - `netuid`: `u16` +- **Default Value**: `0` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") -## 113. SubnetVolume + netuid = 1 + result = substrate.query('SubtensorModule', 'SubnetUidToLeaseId', [netuid]) + print(result) + ``` +## 156. SubnetVolume - **Description**: Total volume of TAO bought/sold for a subnet. - **Query Type**: `(u16) -> u128` @@ -1877,15 +2516,14 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'SubnetVolume', [netuid]) print(result.value) ``` - -## 114. SubnetworkN +## 157. SubnetworkN - **Description**: Number of UIDs in the network. - **Query Type**: `u16 -> u16` @@ -1894,48 +2532,58 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'SubnetworkN', [netuid]) print(result.value) ``` +## 158. SubtokenEnabled -## 115. TaoDividendsPerSubnet - -- **Description**: Last total root dividend for a hotkey on a subnet. -- **Query Type**: `(u16, AccountId) -> u64` +- **Description**: Storage for `SubtokenEnabled`. +- **Query Type**: `u16 -> unknown` - **Parameters**: - `netuid`: `u16` - - `hotkey`: `AccountId` -- **Default Value**: `0` +- **Default Value**: `false` - **Python Example**: ```python - from substrateinterface import SubstrateInterface, Keypair + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 - hotkey = Keypair.create_from_uri('//Alice').ss58_address - result = substrate.query('SubtensorModule', 'TaoDividendsPerSubnet', [netuid, hotkey]) + result = substrate.query('SubtensorModule', 'SubtokenEnabled', [netuid]) print(result.value) ``` +## 159. TaoFlowCutoff -## 116. TaoWeight +- **Description**: Default value for flow normalization exponent. +- **Query Type**: `unknown` +- **Parameters**: None +- **Default Value**: `0` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") + + result = substrate.query('SubtensorModule', 'TaoFlowCutoff') + print(result) + ``` +## 160. TaoWeight - **Description**: A global parameter representing "Tao weight" in the system. - **Query Type**: `u64` +- **Parameters**: None - **Default Value**: `971718665099567868` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") result = substrate.query('SubtensorModule', 'TaoWeight') print(result.value) ``` - -## 117. TargetRegistrationsPerInterval +## 161. TargetRegistrationsPerInterval - **Description**: Target registrations per interval for the network. - **Query Type**: `u16 -> u16` @@ -1944,46 +2592,48 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `2` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'TargetRegistrationsPerInterval', [netuid]) print(result.value) ``` +## 162. Tempo -## 118. TargetStakesPerInterval - -- **Description**: Target stakes per interval. -- **Query Type**: `u64` -- **Default Value**: `1` +- **Description**: Tempo of the network. +- **Query Type**: `u16 -> u16` +- **Parameters**: + - `netuid`: `u16` +- **Default Value**: `99` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") - result = substrate.query('SubtensorModule', 'TargetStakesPerInterval') + netuid = 1 + result = substrate.query('SubtensorModule', 'Tempo', [netuid]) print(result.value) ``` +## 163. TimelockedWeightCommits -## 119. Tempo - -- **Description**: Tempo of the network. -- **Query Type**: `u16 -> u16` +- **Description**: Stores a queue of weight commits for an account on a given subnet. +- **Query Type**: `(u16, AccountId) -> u64` - **Parameters**: + - `key`: `AccountId` - `netuid`: `u16` -- **Default Value**: `99` +- **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 - result = substrate.query('SubtensorModule', 'Tempo', [netuid]) + commit_epoch = 100 + result = substrate.query('SubtensorModule', 'TimelockedWeightCommits', [netuid, commit_epoch]) print(result.value) ``` - -## 120. TokenSymbol +## 164. TokenSymbol - **Description**: The token symbol for a subnet. - **Query Type**: `u16 -> Vec` @@ -1992,129 +2642,150 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `"\xF0\x9D\x9C\x8F"` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'TokenSymbol', [netuid]) print(result.value) ``` +## 165. TotalHotkeyAlpha -## 121. TotalColdkeyStake - -- **Description**: Returns the total amount of stake under a coldkey. -- **Query Type**: `AccountId -> u64` +- **Description**: Storage for TotalHotkeyAlpha. +- **Query Type**: `(u16, AccountId) -> unknown` - **Parameters**: - - `coldkey`: `AccountId` + - `netuid`: `u16` + - `hotkey`: `AccountId` - **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface, Keypair + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") - coldkey = Keypair.create_from_uri('//Bob').ss58_address - result = substrate.query('SubtensorModule', 'TotalColdkeyStake', [coldkey]) + netuid = 1 + from bittensor_wallet import Keypair + hotkey = Keypair.create_from_uri('//Alice').ss58_address + result = substrate.query('SubtensorModule', 'TotalHotkeyAlpha', [hotkey, netuid]) print(result.value) ``` +## 166. TotalHotkeyAlphaLastEpoch -## 122. TotalHotkeyStake - -- **Description**: Returns the total amount of stake under a hotkey. -- **Query Type**: `AccountId -> u64` +- **Description**: Storage for TotalHotkeyAlphaLastEpoch. +- **Query Type**: `(u16, AccountId) -> unknown` - **Parameters**: + - `netuid`: `u16` - `hotkey`: `AccountId` - **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface, Keypair + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") + netuid = 1 + from bittensor_wallet import Keypair hotkey = Keypair.create_from_uri('//Alice').ss58_address - result = substrate.query('SubtensorModule', 'TotalHotkeyStake', [hotkey]) + result = substrate.query('SubtensorModule', 'TotalHotkeyAlphaLastEpoch', [hotkey, netuid]) print(result.value) ``` +## 167. TotalHotkeyShares -## 123. TotalIssuance +- **Description**: Returns the number of alpha shares for a hotkey on a subnet. +- **Query Type**: `(u16, AccountId) -> unknown` +- **Parameters**: + - `netuid`: `u16` + - `hotkey`: `AccountId` +- **Default Value**: `0` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") + + netuid = 1 + from bittensor_wallet import Keypair + hotkey = Keypair.create_from_uri('//Alice').ss58_address + result = substrate.query('SubtensorModule', 'TotalHotkeyShares', [hotkey, netuid]) + print(result) + ``` +## 168. TotalIssuance - **Description**: Represents the total issuance of tokens on the Bittensor network. - **Query Type**: `u64` +- **Parameters**: None - **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") result = substrate.query('SubtensorModule', 'TotalIssuance') print(result.value) ``` - -## 124. TotalNetworks +## 169. TotalNetworks - **Description**: Total number of existing networks. - **Query Type**: `u16` +- **Parameters**: None - **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") result = substrate.query('SubtensorModule', 'TotalNetworks') print(result.value) ``` - -## 125. TotalStake +## 170. TotalStake - **Description**: The total amount of tokens staked in the system. - **Query Type**: `u64` +- **Parameters**: None - **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") result = substrate.query('SubtensorModule', 'TotalStake') print(result.value) ``` +## 171. TransactionKeyLastBlock -## 126. TotalStakeAtDynamic - -- **Description**: Total stake in the system at the moment of subnet registration under dynamic pricing. -- **Query Type**: `(u16) -> u64` +- **Description**: Last block of a transaction for a given key, netuid, and name. +- **Query Type**: `(AccountId, u16, u16) -> u64` - **Parameters**: + - `hotkey`: `AccountId` - `netuid`: `u16` + - `name`: `u16` - **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface + from bittensor_wallet import Keypair substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") + hotkey = Keypair.create_from_uri('//Alice').ss58_address netuid = 1 - result = substrate.query('SubtensorModule', 'TotalStakeAtDynamic', [netuid]) + name = 1 + result = substrate.query('SubtensorModule', 'TransactionKeyLastBlock', [hotkey, netuid, name]) print(result.value) ``` +## 172. TransferToggle -## 127. TransactionKeyLastBlock - -- **Description**: Last block of a transaction for a given key, netuid, and name. -- **Query Type**: `(AccountId, u16, u16) -> u64` +- **Description**: Storage for TransferToggle. +- **Query Type**: `u16 -> unknown` - **Parameters**: - - `hotkey`: `AccountId` - `netuid`: `u16` - - `name`: `u16` -- **Default Value**: `0` +- **Default Value**: `true` - **Python Example**: ```python - from substrateinterface import SubstrateInterface, Keypair + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") - hotkey = Keypair.create_from_uri('//Alice').ss58_address netuid = 1 - name = 1 - result = substrate.query('SubtensorModule', 'TransactionKeyLastBlock', [hotkey, netuid, name]) + result = substrate.query('SubtensorModule', 'TransferToggle', [netuid]) print(result.value) ``` - -## 128. Trust +## 173. Trust - **Description**: Trust values of UIDs in a network. - **Query Type**: `u16 -> Vec` @@ -2123,57 +2794,56 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `[]` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'Trust', [netuid]) print(result.value) ``` - -## 129. TxChildkeyTakeRateLimit +## 174. TxChildkeyTakeRateLimit - **Description**: Transaction childkey take rate limit. - **Query Type**: `u64` -- **Default Value**: `0` or chain-defined +- **Parameters**: None +- **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") result = substrate.query('SubtensorModule', 'TxChildkeyTakeRateLimit') print(result.value) ``` - -## 130. TxDelegateTakeRateLimit +## 175. TxDelegateTakeRateLimit - **Description**: Transaction delegate take rate limit. - **Query Type**: `u64` +- **Parameters**: None - **Default Value**: `216000` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") result = substrate.query('SubtensorModule', 'TxDelegateTakeRateLimit') print(result.value) ``` - -## 131. TxRateLimit +## 176. TxRateLimit - **Description**: Transaction rate limit. - **Query Type**: `u64` +- **Parameters**: None - **Default Value**: `1000` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") result = substrate.query('SubtensorModule', 'TxRateLimit') print(result.value) ``` - -## 132. Uids +## 177. Uids - **Description**: Maps hotkey to UID within a network. - **Query Type**: `(u16, AccountId) -> u16` @@ -2183,7 +2853,8 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `None` - **Python Example**: ```python - from substrateinterface import SubstrateInterface, Keypair + from async_substrate_interface import SubstrateInterface + from bittensor_wallet import Keypair substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 @@ -2191,8 +2862,7 @@ title: "Subtensor Storage Query Examples" result = substrate.query('SubtensorModule', 'Uids', [netuid, hotkey]) print(result.value) ``` - -## 133. UsedWork +## 178. UsedWork - **Description**: Global used work storage. - **Query Type**: `Vec -> u64` @@ -2201,15 +2871,14 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") key = b"some_key" result = substrate.query('SubtensorModule', 'UsedWork', [key]) print(result.value) ``` - -## 134. ValidatorPermit +## 179. ValidatorPermit - **Description**: Validator permit values of UIDs in a network. - **Query Type**: `u16 -> Vec` @@ -2218,15 +2887,14 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `[]` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'ValidatorPermit', [netuid]) print(result.value) ``` - -## 135. ValidatorPruneLen +## 180. ValidatorPruneLen - **Description**: Length of validator pruning. - **Query Type**: `u16 -> u64` @@ -2235,15 +2903,14 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `1` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'ValidatorPruneLen', [netuid]) print(result.value) ``` - -## 136. ValidatorTrust +## 181. ValidatorTrust - **Description**: Validator trust values of UIDs in a network. - **Query Type**: `u16 -> Vec` @@ -2252,32 +2919,14 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `[]` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 result = substrate.query('SubtensorModule', 'ValidatorTrust', [netuid]) print(result.value) ``` - -## 137. WeightCommitRevealInterval - -- **Description**: Interval for the commit-reveal process of weights. -- **Query Type**: `u16 -> u64` -- **Parameters**: - - `netuid`: `u16` -- **Default Value**: `1000` -- **Python Example**: - ```python - from substrateinterface import SubstrateInterface - substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") - - netuid = 1 - result = substrate.query('SubtensorModule', 'WeightCommitRevealInterval', [netuid]) - print(result.value) - ``` - -## 138. WeightCommits +## 182. WeightCommits - **Description**: Returns the commit data for an account on a given netuid (commit-reveal). - **Query Type**: `(u16, AccountId) -> VecDeque<(H256, u64, u64, u64)>` @@ -2287,16 +2936,16 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `None` - **Python Example**: ```python - from substrateinterface import SubstrateInterface, Keypair + from async_substrate_interface import SubstrateInterface + from bittensor_wallet import Keypair substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 who = Keypair.create_from_uri('//Alice').ss58_address result = substrate.query('SubtensorModule', 'WeightCommits', [netuid, who]) - print(result.value) + print(result) ``` - -## 139. Weights +## 183. Weights - **Description**: Weight values of UIDs in a network. - **Query Type**: `(u16, u16) -> Vec<(u16, u16)>` @@ -2306,7 +2955,7 @@ title: "Subtensor Storage Query Examples" - **Default Value**: `[]` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 @@ -2314,51 +2963,66 @@ title: "Subtensor Storage Query Examples" result = substrate.query('SubtensorModule', 'Weights', [netuid, uid]) print(result.value) ``` +## 184. WeightsSetRateLimit -## 140. WeightsMinStake - -- **Description**: Minimum stake required for weights. -- **Query Type**: `u64` -- **Default Value**: `0` +- **Description**: Rate limit for setting weights in the network. +- **Query Type**: `u16 -> u64` +- **Parameters**: + - `netuid`: `u16` +- **Default Value**: `100` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") - result = substrate.query('SubtensorModule', 'WeightsMinStake') + netuid = 1 + result = substrate.query('SubtensorModule', 'WeightsSetRateLimit', [netuid]) print(result.value) ``` +## 185. WeightsVersionKey -## 141. WeightsSetRateLimit - -- **Description**: Rate limit for setting weights in the network. +- **Description**: Version key for weights in the network. - **Query Type**: `u16 -> u64` - **Parameters**: - `netuid`: `u16` -- **Default Value**: `100` +- **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 - result = substrate.query('SubtensorModule', 'WeightsSetRateLimit', [netuid]) + result = substrate.query('SubtensorModule', 'WeightsVersionKey', [netuid]) print(result.value) ``` +## 186. WeightsVersionKeyRateLimit -## 142. WeightsVersionKey +- **Description**: Storage for `WeightsVersionKeyRateLimit` +- **Query Type**: `u64` +- **Parameters**: None +- **Default Value**: `0` +- **Python Example**: + ```python + from async_substrate_interface import SubstrateInterface + substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") -- **Description**: Version key for weights in the network. -- **Query Type**: `u16 -> u64` + result = substrate.query('SubtensorModule', 'WeightsVersionKeyRateLimit') + print(result.value) + ``` +## 187. Yuma3On + +- **Description**: Storage for value for a subnet's `Yuma3On` hyperparameter. +- **Query Type**: `u16 -> unknown` - **Parameters**: - `netuid`: `u16` - **Default Value**: `0` - **Python Example**: ```python - from substrateinterface import SubstrateInterface + from async_substrate_interface import SubstrateInterface substrate = SubstrateInterface(url="wss://test.finney.opentensor.ai:443") netuid = 1 - result = substrate.query('SubtensorModule', 'WeightsVersionKey', [netuid]) + result = substrate.query('SubtensorModule', 'Yuma3On', [netuid]) print(result.value) ``` + diff --git a/docs/subtensor-nodes/using-docker.md b/docs/subtensor-nodes/using-docker.md index 09e2d04261..21f8a49df5 100644 --- a/docs/subtensor-nodes/using-docker.md +++ b/docs/subtensor-nodes/using-docker.md @@ -1,109 +1,118 @@ --- title: "Using Docker" --- + import ThemedImage from '@theme/ThemedImage'; import useBaseUrl from '@docusaurus/useBaseUrl'; +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; # Using Docker To run a subtensor node with Docker, follow the below steps. -:::danger Not tested on cloud -We have not tested subtensor node installation scripts on any cloud service. In addition, if you are using Runpod cloud service, then note that this service is already [containerized](https://docs.runpod.io/pods/overview). Hence, the only option available to you for Runpod is to install a subtensor node by [compiling from source](using-source.md). **Note that we have not tested any subtensor installation steps on Runpod.** +:::danger Not tested on cloud +We have not tested subtensor node installation scripts on any cloud service. In addition, if you are using Runpod cloud service, then note that this service is already [containerized](https://docs.runpod.io/pods/overview). Hence, the only option available to you for Runpod is to install a subtensor node by [compiling from source](using-source.md). **Note that we have not tested any subtensor installation steps on Runpod.** ::: -If you are already running a subtensor node using Docker, then go directly to [Step 5 Prepare to Run ](#step-5-prepare-to-run). The below steps 1 through 4 are for first time users only. - -## Step 1: Install git +## Prerequisites -Ensure that `git` is installed on your machine. Refer to the [GitHub documentation](https://docs.github.com/en/get-started) for installation instructions. +Before you begin, make sure you have installed the following on your machine: -## Step 2: Install Docker +- Install [Git](https://git-scm.com/downloads) +- [Docker](https://docs.docker.com/desktop/use-desktop/) -Follow Docker's [official installation guides](https://docs.docker.com/engine/install/) and install Docker. +The Bittensor SDK and Bittensor CLI are required to interact with the local blockchain instance. -:::tip Run Docker first -Before proceeding, make sure that Docker is running. -::: +## Step 1: Clone the subtensor repo -## Step 3: Clone the subtensor repo - -Clone the subtensor repository: +Clone the subtensor repository and navigate into the Subtensor directory: ```bash git clone https://github.com/opentensor/subtensor.git -``` - -## Step 4: Go into subtensor directory - -Navigate into the Subtensor directory: - -```bash cd subtensor ``` -## Step 5: Switch to `main` branch +:::tip Always Pull the Latest Changes -Execute the below commands in this order: +Before running the subtensor node, always ensure that you're working with the latest version of the repository. To do this, run the following command in the `subtensor` directory to fetch and merge the most recent updates: -Switch to the `main` branch: - -```bash -git checkout main -``` - -Pull the latest `main` branch contents: - -```bash +```sh git pull ``` -## Step 6: Stop and clean Docker environment +::: + +## Step 2: Clean Docker environment -Stop any currently running Docker containers and clean up the Docker environment: +Next, stop any currently running Docker containers and clean up the Docker environment using the following command: ```bash docker compose down --volumes && docker system prune -a --volumes -f ``` -## Linux post-installation steps for Docker Engine +:::warning Linux post-installation steps for Docker Engine +Please follow Docker's [official documentation](https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user) to perform standard Linux post-installation steps for Docker Engine -Please follow Docker's [official documentation](https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user ) to perform standard Linux post-installation steps for Docker Engine - -:::tip Adding a user to the `docker` group is only necessary on Linux, where `sudo` privileges are required to run Docker commands. It is unnecessary on macOS. ::: +## Step 3: Run the subtensor node + +Now you can run the subtensor nodes for either mainchain or testchain using any of available options. -## Run a Lite Node on Mainchain +### Using lite nodes -To run a lite node connected to the Bittensor mainchain, execute the below command. +A lite node which primarily syncs with the only blocks that have been finalized, and not the entire blockchain. Run a lite node using the command corresponding to your target chain: + + +To run a lite node connected to the Bittensor mainchain, run the following command: ```bash ./scripts/run/subtensor.sh -e docker --network mainnet --node-type lite ``` -## Run an Archive Node on Mainchain - -To run an archive node connected to the Bittensor mainchain, execute the below command. + + +To run a lite node connected to the Bittensor testchain, run the following command: ```bash -./scripts/run/subtensor.sh -e docker --network mainnet --node-type archive +./scripts/run/subtensor.sh -e docker --network testnet --node-type lite ``` -## Run a Lite Node on Testchain + + + +The command pulls the Subtensor Docker image and starts the container. + +:::warning Docker Resource Allocation +Ensure Docker is configured with sufficient CPU and memory resources to meet the system requirements for running a subtensor node. Inadequate allocation may prevent the node from starting correctly. + +We recommend allocating at least 20 GB of RAM. You can adjust these settings in Docker Desktop under **Settings** > **Resources**. +::: + +### Using archive nodes -To run a lite node connected to the Bittensor testchain, execute the below command. +An archive node downloads and validates all the Bittensor blockchain blocks from inception up to the most recent block. Run an archive node using the command corresponding to your target chain: + + + +To run an archive node connected to the Bittensor mainchain, run the following command: ```bash -./scripts/run/subtensor.sh -e docker --network testnet --node-type lite +./scripts/run/subtensor.sh -e docker --network mainnet --node-type archive ``` -## Run an Archive Node on Testchain - -To run an archive node connected to the Bittensor testchain, execute the below command. + + +To run an archive node connected to the Bittensor testchain, run the following command: ```bash ./scripts/run/subtensor.sh -e docker --network testnet --node-type archive ``` + + + + +The command pulls the Subtensor Docker image and starts the container. diff --git a/docs/subtensor-nodes/using-source.md b/docs/subtensor-nodes/using-source.md index e521b5036d..11385ef923 100644 --- a/docs/subtensor-nodes/using-source.md +++ b/docs/subtensor-nodes/using-source.md @@ -1,6 +1,7 @@ --- title: "Using Source Code" --- + import ThemedImage from '@theme/ThemedImage'; import useBaseUrl from '@docusaurus/useBaseUrl'; @@ -8,8 +9,8 @@ import useBaseUrl from '@docusaurus/useBaseUrl'; To install and run a subtensor node by compiling the source code, follow the below steps. -:::danger Not tested on cloud -We have not tested subtensor node installation scripts on any cloud service. In addition, if you are using Runpod cloud service, then note that this service is already [containerized](https://docs.runpod.io/pods/overview). Hence, the only option available to you for Runpod is to install a subtensor node by compiling from source, as described below. **Note that we have not tested any subtensor installation steps on Runpod.** +:::danger Not tested on cloud +We have not tested subtensor node installation scripts on any cloud service. In addition, if you are using Runpod cloud service, then note that this service is already [containerized](https://docs.runpod.io/pods/overview). Hence, the only option available to you for Runpod is to install a subtensor node by compiling from source, as described below. **Note that we have not tested any subtensor installation steps on Runpod.** ::: ## Install basic packages @@ -17,7 +18,7 @@ We have not tested subtensor node installation scripts on any cloud service. In Install the basic requirements by running the below commands on a Linux terminal. ```bash title="Linux" -sudo apt-get update +sudo apt-get update sudo apt install -y build-essential clang curl git make libssl-dev llvm libudev-dev protobuf-compiler pkg-config ``` @@ -46,7 +47,7 @@ rustup toolchain install nightly rustup target add --toolchain nightly wasm32-unknown-unknown ``` -## Compile subtensor code +## Compile subtensor code Next, to compile the subtensor source code, follow the below steps: @@ -55,6 +56,7 @@ Next, to compile the subtensor source code, follow the below steps: ```bash git clone https://github.com/opentensor/subtensor.git ``` + 2. Change to the Subtensor directory: ```bash @@ -70,7 +72,7 @@ git checkout main 4. Remove any previous chain state: ```bash -rm -rf /var/lib/subtensor +rm -rf /var/lib/subtensor ``` 5. Install Subtensor by compiling with Cargo: @@ -83,34 +85,34 @@ cargo build -p node-subtensor --profile=production --features=metadata-hash You can now run the public subtensor node either as a lite node or as an archive node. See below: -### Lite node on mainchain +### Lite node on mainchain To run a lite node connected to the mainchain, execute the below command (note the `--sync=warp` flag which runs the subtensor node in lite mode): -```bash title="With --sync=warp setting, for lite node" -./target/production/node-subtensor --chain ./chainspecs/raw_spec_finney.json --base-path /var/lib/subtensor --sync=warp --port 30333 --max-runtime-instances 32 --rpc-max-response-size 2048 --rpc-cors all --rpc-port 9944 --bootnodes /dns/bootnode.finney.chain.opentensor.ai/tcp/30333/ws/p2p/12D3KooWRwbMb85RWnT8DSXSYMWQtuDwh4LJzndoRrTDotTR5gDC --no-mdns --prometheus-external --rpc-external -``` +```bash +./target/production/node-subtensor --chain ./chainspecs/raw_spec_finney.json --base-path /var/lib/subtensor --sync=warp --port 30333 --max-runtime-instances 32 --database paritydb --db-cache 4096 --trie-cache-size 2048 --rpc-max-response-size 2048 --rpc-cors all --rpc-port 9944 --bootnodes /dns/bootnode.finney.chain.opentensor.ai/tcp/30333/ws/p2p/12D3KooWRwbMb85RWnT8DSXSYMWQtuDwh4LJzndoRrTDotTR5gDC --no-mdns --rpc-external +``` ### Archive node on mainchain To run an archive node connected to the mainchain, execute the below command (note the `--sync=full` which syncs the node to the full chain and `--pruning archive` flags, which disables the node's automatic pruning of older historical data): -```bash title="With --sync=full and --pruning archive setting, for archive node" +```bash ./target/production/node-subtensor --chain ./chainspecs/raw_spec_finney.json --base-path /var/lib/subtensor --sync=full --pruning archive --port 30333 --max-runtime-instances 32 --rpc-max-response-size 2048 --rpc-cors all --rpc-port 9944 --bootnodes /dns/bootnode.finney.chain.opentensor.ai/tcp/30333/ws/p2p/12D3KooWRwbMb85RWnT8DSXSYMWQtuDwh4LJzndoRrTDotTR5gDC --no-mdns --prometheus-external --rpc-external -``` +``` -### Lite node on testchain +### Lite node on testchain To run a lite node connected to the testchain, execute the below command: -```bash title="With bootnodes set to testnet and --sync=warp setting, for lite node." -./target/production/node-subtensor --chain ./chainspecs/raw_spec_testfinney.json --base-path /var/lib/subtensor --sync=warp --port 30333 --max-runtime-instances 32 --rpc-max-response-size 2048 --rpc-cors all --rpc-port 9944 --bootnodes /dns/bootnode.test.finney.opentensor.ai/tcp/30333/ws/p2p/12D3KooWPM4mLcKJGtyVtkggqdG84zWrd7Rij6PGQDoijh1X86Vr --no-mdns --prometheus-external --rpc-external -``` +```bash +./target/production/node-subtensor --chain ./chainspecs/raw_spec_testfinney.json --base-path /var/lib/subtensor --sync=warp --port 30333 --max-runtime-instances 32 --database paritydb --db-cache 4096 --trie-cache-size 2048 --rpc-max-response-size 2048 --rpc-cors all --rpc-port 9944 --bootnodes /dns/bootnode.test.finney.opentensor.ai/tcp/30333/ws/p2p/12D3KooWPM4mLcKJGtyVtkggqdG84zWrd7Rij6PGQDoijh1X86Vr --no-mdns --rpc-external +``` ### Archive node on testchain To run an archive node connected to the testchain, execute the below command: -```bash title="With bootnodes set to testnet and --sync=full and --pruning archive setting, for archive node" +```bash ./target/production/node-subtensor --chain ./chainspecs/raw_spec_testfinney.json --base-path /var/lib/subtensor --sync=full --pruning archive --port 30333 --max-runtime-instances 32 --rpc-max-response-size 2048 --rpc-cors all --rpc-port 9944 --bootnodes /dns/bootnode.test.finney.opentensor.ai/tcp/30333/ws/p2p/12D3KooWPM4mLcKJGtyVtkggqdG84zWrd7Rij6PGQDoijh1X86Vr --no-mdns --prometheus-external --rpc-external -``` +``` diff --git a/docs/tutorials/ocr-subnet-tutorial.md b/docs/tutorials/ocr-subnet-tutorial.md index 5402367b9c..25a8b946e3 100644 --- a/docs/tutorials/ocr-subnet-tutorial.md +++ b/docs/tutorials/ocr-subnet-tutorial.md @@ -4,6 +4,7 @@ title: "OCR Subnet Tutorial" import ThemedImage from '@theme/ThemedImage'; import useBaseUrl from '@docusaurus/useBaseUrl'; +import { SdkVersion } from "../sdk/_sdk-version.mdx"; # OCR Subnet Tutorial @@ -53,7 +54,7 @@ For the rest of this tutorial we will proceed by demonstrating which blocks of P If you are new to Bittensor, read the following sections before you proceed: 1. [Introduction](../learn/introduction.md) that describes how subnets form the heartbeat of the Bittensor network. -2. [Bittensor Building Blocks](../learn/bittensor-building-blocks.md) that presents the basic building blocks you use to develop your subnet incentive mechanism. +2. [Bittensor Building Blocks](../learn/neurons.md) that presents the basic building blocks you use to develop your subnet incentive mechanism. 3. [Anatomy of Incentive Mechanism](../learn/anatomy-of-incentive-mechanism.md) that introduces the general concept of a subnet incentive mechanism. ## OCR subnet summary @@ -99,6 +100,8 @@ To generate this challenge, the subnet validator applies the following steps: #### Code snapshot + + See below for a snapshot view of the code. ```python @@ -218,7 +221,7 @@ See the `OCRSynapse` class definition in [**ocr_subnet/protocol.py**](https://gi ``` :::tip Study tip -See [Neuron-to-neuron communication](../learn/bittensor-building-blocks.md#neuron-to-neuron-communication). +See [Neuron-to-neuron communication](../learn/neurons.md#neuron-to-neuron-communication). ::: #### Send OCRSynapse to miners diff --git a/docs/validators/child-hotkeys.md b/docs/validators/child-hotkeys.md new file mode 100644 index 0000000000..c306e207a1 --- /dev/null +++ b/docs/validators/child-hotkeys.md @@ -0,0 +1,227 @@ +--- +title: "Child Hotkeys" +toc_max_heading_level: 2 +--- + +import ThemedImage from '@theme/ThemedImage'; +import useBaseUrl from '@docusaurus/useBaseUrl'; + +# Child Hotkeys + +This guide describes the **child hotkeys** feature and how to use it. With the child hotkeys, a subnet validator is no longer required to use the same delegate hotkey for every subnet they validate in. The subnet validator can use a separate **child hotkey** per subnet. The subnet validator does this by re-delegating a portion of their stake from their delegate hotkey to this separate child hotkey on a subnet. The originating delegate hotkey is called the **parent hotkey**. + +The owner of this child hotkey would then validate in the subnet on behalf of the parent hotkey. The child hotkey would receive a percentage `take` from the resulting dividends. + +
+ +
+ +
+ +See the above diagram. Without the child hotkeys, a subnet validator's delegate hotkey would have to sign all the validation operations in all the subnets. This exposes the delegate hotkey in all the subnets. An attacker can get hold of the delegate hotkey from any one subnet in order to take over the validation operations with this hotkey, thereby crippling this subnet validator in all their subnets across the entire Bittensor network. + +
+ +
+ +See the above diagram. With the child hotkeys, if an attacker steals a child hotkey, then only those subnets are at risk where this child hotkey is used as the delegate hotkey. + +## Benefits of child hotkeys + +- **Security for parent hotkeys**: Re-delegating stake to multiple child hotkeys enhances the security of the parent hotkey. Each child hotkey can validate on a specific subnet using a different machine. The child hotkey would sign the validation operations on behalf of the parent hotkey: There is no need to use the parent hotkey on any of these subnets. As a consequence, the exposure of the parent hotkey can be minimized. The parent hotkey can even be moved to a secure location until it is needed, for example, to revoke a child hotkey. +- **Validators can easily scale up**: As Bittensor scales up towards hundreds of subnets, it is not practical for a single delegate to validate in every single subnet. With child hotkeys, a validator can easily make this feasible by re-delegating and offloading the validating operations to multiple child hotkeys. +- **Increased bandwidth for a subnet owner**: A validator can also re-delegate to a subnet owner's hotkey. The subnet owner would then do the validation work on the subnet, in exchange for a percentage `take` from the resulting dividends. A subnet owner can increase their access bandwidth into their own subnet in this way. +- A child hotkey and a parent hotkey need not be owned by the same entity. +- A validator can re-delegate to a hotkey of any other validator on any subnet. After re-delegation, the hotkey that is the source of the stake is called **parent hotkey** and the hotkey that receives this re-delegated stake is called **child hotkey**. + :::tip "Child hotkey" and "parent hotkey" are terms of convenience + The terms "child hotkey" and "parent hotkey" are only terms of convenience. There is nothing inherently different about a "child hotkey" that separates it from a "parent hotkey". Neither have any special attributes compared to a normal hotkey. + ::: + +## Features + +The child hotkey features are as follows: + +- A hotkey must be registered on a subnet before it can be used as a parent hotkey. The hotkey can be registered on any subnet. +- A parent hotkey can have multiple child hotkeys. Similarly, a child hotkey can have more than one parent hotkey. +- A child hotkey can exist as a registered hotkey in multiple netuids simultaneously. +- **IMPORTANT**: For a given `netuid`, say, `netuid 5`, a single parent hotkey can have at most five (`5`) child hotkeys. Moreover, the same parent hotkey on a different `netuid 11` can have another set of `5` child hotkeys. Alternately, on this `netuid 11` the same parent hotkey can also have the same (`5`) child hotkeys that are in the netuid `5`. +- While setting the child hotkeys, the proportion field can have proportions that add to less than `1.0`. The proportion that was not assigned to the child hotkeys will remain with the parent hotkey. However, a proportion cannot be zero. A `0` proportion value will result in an error. Furthermore, in a given subnet, the sum of all proportions must not exceed `1.0`. + +## Rate limits + +The following rate limits apply for child hotkeys: + +- Setting or revoking children is allowed for every 150 blocks (~30 minutes). +- A given child hotkey's take rate can only be adjusted once per 30 days. + +See [Rate Limits in Bittensor: Child hotkey operations rate limit](../learn/chain-rate-limits#child-hotkey-operations-rate-limit). + +## Minimum stake requirement + +To set child hotkeys, the parent hotkey must have a minimum total stake. This requirement checks the TAO-equivalent value of your alpha stake across all subnets. + +The minimum stake requirement is: + +- **Mainnet**: 1000 TAO worth of alpha +- **Testnet**: 100 TAO worth of alpha + +**How it's calculated**: Your alpha stake is summed **across ALL subnets** (not just the subnet where you're setting children). Each subnet's alpha is converted to TAO value using that subnet's alpha price, then all values are summed together. View [source code](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/staking/helpers.rs#L47-L62). + +:::tip +Query `subtensorModule.stakeThreshold()` to check the current threshold. +::: + +## Child hotkey commands + +Use the `btcli` command options described below to work with child hotkeys. + +## Setting a child hotkey + +You can allocate a portion of the parent hotkey’s stake weight to its child hotkeys, specifying the exact proportion for each one. The parent hotkey must be registered on at least one netuid, but it doesn’t have to be registered on the same netuid where the child weights are being set. However, all child hotkeys assigned must be registered on the netuid specified in the command. + +### Usage + +```bash +btcli stake child set --netuid --children
--proportions --hotkey --wallet.name +``` + +### Parameters + +- `--netuid:` The netuid of the subnet in the network. Value must be greater than zero. +- `--children`: A comma-separated ordered list of SS58 hotkeys for the child hotkeys. +- `--proportions`: A comma-separated ordered list of the stake weight proportions for the child hotkeys listed in the `--children` parameter. +- `--hotkey`: A single SS58 of the parent hotkey. This must be a delegate hotkey that is already registered in with any `netuid`. +- `--wallet.name`: Name of the wallet or the SS58 of the coldkey. This coldkey must be matched with the parent hotkey SS58 of the `--hotkey`. + +:::info + +- The `--children` and `--proportions` parameters can each include up to five comma-separated values. +- The sum of all proportion values for the child hotkeys should be less than or equal to 1. +- All hotkeys listed in the `--children` parameter must be already registered on the `netuid` used in this command. +- Only the staked TAO of the parent hotkey can be assigned to the child hotkeys. If the parent hotkey has zero stake, then the command will issue an error message and stop. + + ::: + +#### Setting a single child hotkey + +```bash +btcli stake child set \ + --netuid 4 \ + --children 5HEXVAHY9gyavj5xnbov9Qoba4hPJYkkwwnq1MQFepLK7Gei \ + --proportions 0.5 \ + --hotkey 5DqJdDLU23m7yf6rZSmbLTshU7Bfn9eCTBkduhF4r9i73B9Y \ + --wallet.name Alice +``` + +#### Setting multiple child hotkeys + +```bash +btcli stake child set \ + --netuid 4 \ + --children 5Gx1CZ9jviC6V2KynBAcTpES4yK76riCagv5o5SFFZFYXj4s,5HEXVAHY9gyavj5xnbov9Qoba4hPJYkkwwnq1MQFepLK7Gei \ + --proportions 0.3,0.7 \ + --hotkey 5DqJdDLU23m7yf6rZSmbLTshU7Bfn9eCTBkduhF4r9i73B9Y \ + --wallet.name Alice\ +``` + +## Adding a new child hotkey + +If a parent hotkey has, for example, three child hotkeys: `child hotkey A`, `child hotkey B` and `child hotkey C`, then to add a fourth—`child hotkey D`, you must run `btcli stake child set` command again with the parent hotkey and set the proportions for all four child hotkeys `A`, `B`, `C` and `D`. + +:::info Updating hotkey proportions +When updating the proportion of a child hotkey, you must rerun the `btcli stake child set` command with the parent hotkey and all existing child hotkeys, including their updated proportions. + +::: + +## Getting the child hotkeys + +Run the following command to display all the child hotkeys for a given parent hotkey. + +```bash +btcli stake child get +``` + +### Example usage + +```bash +btcli stake child get --netuid --hotkey --all +``` + +## Revoking the child hotkeys + +This is used to remove delegated authority from all child hotkeys, removing their position and influence on the subnet. + +:::info Revoking a specific child hotkey is not allowed +It is not possible to revoke a specific child hotkey. However, if a parent hotkey has, for example, three child hotkeys: `child hotkey A`, `child hotkey B` and `child hotkey C`, then setting the parent hotkey again with only child hotkeys `A` and `B` will result in revoking `child hotkey C`. +::: + +### Usage + +```bash +btcli stake child revoke +``` + +### Example + +```bash +btcli stake child revoke \ + --netuid 4 \ + --hotkey 5DqJdDLU23m7yf6rZSmbLTshU7Bfn9eCTBkduhF4r9i73B9Y \ + --wallet.name Alice +``` + +## Get and set child hotkey take + +Each child hotkey can have a defined take percentage that determines the portion of rewards it receives on a given netuid. The take value can range from `0` (0%) to `0.18` (18%). This configuration is subnet-specific meaning that a child hotkey may have one take percentage on one netuid and a different value on another. + +The child hotkey can also set its delegate take separately from the child hotkey take. That is, a child hotkey can carry two separate take rates: the child hotkey take rate and the delegate take rate. For the delegate take rate, see [Set delegate take](../btcli/btcli.md#btcli-sudo-set-take). + +### Usage + +```bash +btcli stake child take +``` + +:::info +Running the command without the `--take` flag only retrieves the child hotkey's take on the subnet. To set the child hotkey take, you must run the command with the `--take` flag. +::: + +To set child hotkey take, run the following command: + +```bash +btcli stake child take \ + --netuid \ + --child-hotkey-ss58 \ + --take \ + --wallet.name +``` + +### Parameters + +- `--child-hotkey-ss58 `: A single SS58 of the child hotkey. If not provided, it assigns the take value to the hotkey of the signing wallet. +- `--take`: A value between `0` (0%) and `0.18` (18%). Default value is `0`. +- `--netuid`: The `netuid` in which this child hotkey's `take` is applicable. Note that a child hotkey's `take` is subnet-specific, i.e., a child hotkey can have one `take` in one `netuid` and a different `take` in another `netuid`. + +### Example + +```bash +btcli stake take child take \ + --netuid 4 \ + --hotkey 5DqJdDLU23m7yf6rZSmbLTshU7Bfn9eCTBkduhF4r9i73B9Y \ + --take 0.09 \ + --wallet.name Alice +``` diff --git a/docs/validators/index.md b/docs/validators/index.md index 2c39063479..41e0e32e17 100644 --- a/docs/validators/index.md +++ b/docs/validators/index.md @@ -4,15 +4,16 @@ title: "Validating in Bittensor" import ThemedImage from '@theme/ThemedImage'; import useBaseUrl from '@docusaurus/useBaseUrl'; +import { SdkVersion } from "../sdk/_sdk-version.mdx"; # Validating in Bittensor -All mining and validating in Bittensor occur within a subnet. Each subnet independently produces the digital commodities that are its purpose, each subnet creator defining a different _incentive mechanism_ for validators to use in judging miners' work. The validator's work is to apply this incentive mechanism to miners, using it to score their performance, and then to submit these weights to the Bittensor blockchain. It is validators scores of miners' performance that determines the proportion of the subnet's emissions allocated to each miner, according to the Yuma Consensus algorithm. See [Emissions](../emissions.md). +All validating in Bittensor occurs within a subnet. Each subnet independently produces the digital commodities that are its purpose, with each subnet creator defining a different _incentive mechanism_ for validators to use in judging miners' work. The validator's work is to apply this incentive mechanism to miners, using it to score their performance, and then to submit these weights to the Bittensor blockchain.  The validator scores of miners' performance determine the proportion of the subnet's emissions allocated to each miner, according to the Yuma Consensus algorithm. See [Emissions](../learn/emissions.md). Browse the subnets and explore links to their code repositories on [TAO.app' subnets listings](https://tao.app). :::tip Typical compute requirements -Each subnet may have distinct hardware requirements, but this [minimum requirements template for subnet creators](https://github.com/opentensor/bittensor-subnet-template/blob/main/min_compute.yml) may give an idea of minimum memory, bandwidth and storage requirements for a typical subnet node. +Each subnet may have distinct hardware requirements, but this [subnet minimum requirements template](https://github.com/opentensor/bittensor-subnet-template/blob/main/min_compute.yml#L49) may give an idea of the minimum memory, bandwidth and storage requirements for validators in a typical subnet node. Validating is not supported on Windows. ::: @@ -32,7 +33,7 @@ The number of validators isn't hardcoded. The subnet governor has the authority To have a **validator permit** in a given subnet, you must meet the following requirements: - Your hotkey must be registered, granting you a UID on the subnet -- You must have a stake-weight on the subnet of least 1000, including stake delegated to your hotkey from other wallets' coldkeys. A validator's stake weight in a subnet equals their alpha stake plus their TAO stake times the `tao_weight` parameter (current value: 0.18): +- You must have a stake-weight on the subnet of least 1000, including stake delegated to your hotkey from other wallets' coldkeys. A validator's stake weight in a subnet equals their alpha stake plus their TAO stake multiplied by the `tao_weight` parameter (current value: 0.18): $$ @@ -42,12 +43,14 @@ To have a **validator permit** in a given subnet, you must meet the following re - You must be one of the top 64 nodes in the subnet, ranked by emissions. -## Hotkey Association & Staking (subnet 0, the root subnet, only) +## Hotkey Association & Staking :::tip Root Subnet (Subnet 0) only -Skip this step if you are not registering a validator on the root subnet (subnet 0) +This step is only required if you are registering on the root subnet (Subnet O). Skip this step if you are not registering a validator on the root subnet. ::: +To become a validator on the root subnet, you must first associate your hotkey and then stake funds to your hotkey account within the subnet. To associate your hotkey: + ```bash btcli wallet associate-hotkey --wallet.name --hotkey ``` @@ -81,7 +84,7 @@ When a validator falls below the top 64 nodes by emissions, or has less than the Deregistration only occurs on subnets where all 256 UID slots are occupied. If a new registration occurs in a subnet with available UID slots, the registered neuron occupies one of the available UID slots. ::: -Each tempo, the '[neuron](../learn/bittensor-building-blocks)' (miner _or_ validator node) with the lowest 'pruning score' (based solely on emissions), and that is no longer within its [immunity period](../subnets/subnet-hyperparameters.md#immunityperiod), risks being replaced by a newly registered neuron, who takes over that UID. +Each tempo, the '[neuron](../learn/neurons)' (miner _or_ validator node) with the lowest 'pruning score' (based solely on emissions), and that is no longer within its [immunity period](../subnets/subnet-hyperparameters.md#immunityperiod), risks being replaced by a newly registered neuron, who takes over that UID. :::info Deregistration is based on emissions The subnet does not distinguish between miners and validators for the purpose of deregistration. The chain only looks at emissions (represented as 'pruning score'). Whenever a new registration occurs in the subnet, the neuron with the lowest emissions will get deregistered. @@ -93,6 +96,19 @@ Every subnet has an `immunity_period` hyperparameter expressed in a number of bl A subnet neuron (miner or validator) at a UID (in that subnet) has `immunity_period` blocks to improve its performance. When `immunity_period` expires, that miner or validator can be deregistered if it has the lowest performance in the subnet and a new registration arrives. +**Implementation Details:** + +Immunity status is calculated dynamically using the formula `is_immune = (current_block - registered_at) < immunity_period`, where: + +- `current_block` is the current blockchain block number +- `registered_at` is the block number when the neuron was registered +- `immunity_period` is the configured protection period for the subnet (default: 4096 blocks ≈ 13.7 hours) + +**Code References:** + +- [`subtensor/pallets/subtensor/src/utils/misc.rs:442-448`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/utils/misc.rs#L442-448) - Immunity status calculation +- [`subtensor/pallets/subtensor/src/subnets/registration.rs:409-485`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/subnets/registration.rs#L409-485) - Pruning algorithm with immunity priority + :::tip Special cases - In the unlikely event that all neurons are still immune, the one with the lowest "pruning score" will be deregistered by the next incoming registration. @@ -107,7 +123,7 @@ A subnet neuron (miner or validator) at a UID (in that subnet) has `immunity_per A validator's consensus weight and emissions depend on their hotkey's stake weight. You can stake your own TAO to your validator hotkey, or advertise your hotkey to others and seek stake. Any wallet's coldkey can stake to any hotkey, subsequently receiving emissions from that stake. :::tip Delegation -See [StakingDelegation](../staking-and-delegation/delegation.md) +See [Staking and Delegation](../staking-and-delegation/delegation.md) ::: ### Add stake @@ -119,11 +135,13 @@ btcli stake add --wallet.name --wallet.hotkey + The amount of TAO needed to acquire a validator permit depends on how the other largest 64 wallets distribute TAO across themselves. You can calculate the minimum using [bt.metagraph](pathname:///python-api/html/autoapi/bittensor/core/metagraph/index.html): ```python import bittensor as bt -subnet = bt.metagraph(1) +subnet = bt.Metagraph(14) top_64_stake = sorted(subnet.S)[-64:] print (f'Current requirement for validator permits based on the top 64 stake stands at {min(top_64_stake)} tao') ``` @@ -135,12 +153,58 @@ This information can be obtained from the metagraph using your UID. ```python import bittensor as bt -subnet = bt.metagraph(1) -wallet = bt.wallet( name = 'my_coldkey', hotkey = 'my_validator_hotkey' ) + +subnet = bt.Metagraph(1) + +wallet = bt.Wallet( name = 'my_coldkey', hotkey = 'my_validator_hotkey' ) my_uid = subnet.hotkeys.index( wallet.hotkey.ss58_address ) -print(f'Validator permit: {subnet.validator_permit(my_uid)}') +print(f'Validator permit: {subnet.validator_permit[my_uid]}') ``` +## Validator Permits + +Validator permits control which neurons can participate in validation activities within a subnet. The system operates on a stake-weighted basis, ensuring that only high-stake, trusted neurons can influence consensus. + +### Permit Calculation Algorithm + +Validator permits are calculated every epoch using the following process: + +1. **Stake Filtering**: Only neurons with sufficient stake (minimum 1000 stake weight) are considered +2. **Top-K Selection**: The top K neurons by stake weight are awarded validator permits (typically top 64) +3. **Dynamic Updates**: Permits are recalculated every epoch based on current stake distribution + +### Access Control and Security + +Validator permits control several critical network functions: + +- **Weight Setting**: Only permitted neurons can set non-self weights +- **Consensus Participation**: Only permitted neurons contribute to Yuma Consensus +- **Bond Management**: Neurons retain bonds only if they keep validator permits +- **Active Stake**: Only permitted neurons contribute to active stake calculations + +### Permit Requirements + +To obtain a validator permit, a neuron must meet these criteria: + +- **Minimum Stake**: At least 1000 stake weight (α + 0.18 × τ) +- **Top K Ranking**: Be among the top K neurons by stake weight +- **Active Status**: Maintain active participation in the subnet + +### Permit Lifecycle and Bond Management + +When validator permits are lost, associated bonds are deleted. This ensures that only currently qualified validators can influence consensus. + +### Implementation Details + +For implementation details of how validator permits are calculated, managed, and cleaned up in the codebase, see the [Validator Permit Management section](../navigating-subtensor/epoch.md#validator-permit-management) in the Epoch Implementation documentation. + +### Code References + +- Validator permit calculation: [`subtensor/pallets/subtensor/src/epoch/run_epoch.rs:520-537`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/epoch/run_epoch.rs#L520-537) +- Top-K selection algorithm: [`subtensor/pallets/subtensor/src/epoch/math.rs:250-263`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/epoch/math.rs#L250-263) +- Bond cleanup logic: [`subtensor/pallets/subtensor/src/epoch/run_epoch.rs:903-921`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/epoch/run_epoch.rs#L903-921) +- Access control: [`subtensor/pallets/subtensor/src/subnets/weights.rs:745-748`](https://github.com/opentensor/subtensor/blob/main/pallets/subtensor/src/subnets/weights.rs#L745-748) + ## Inspecting UIDs After you obtain a UID slot, you can view the status of your registered wallet by running: @@ -151,28 +215,28 @@ btcli wallet overview --netuid After providing your wallet name at the prompt, you will see output like: -| Parameter | Value | Description | -| :---------- | :----------------- | :------------------------------------------------------------------------- | -| COLDKEY | my_coldkey | The name of the coldkey associated with your slot. | -| HOTKEY | my_first_hotkey | The name of the hotkey associated with your slot. | -| UID | 5 | The index of the uid out of available uids. | -| ACTIVE | True | Whether or not the uid is considered active. | -| STAKE(τ) | 71.296 | The amount of stake in this wallet. | -| RANK | 0.0629 | This miner's absolute ranking according to validators on the network. | -| TRUST | 0.2629 | This miner's trust as a proportion of validators on the network. | -| CONSENSUS | 0.89 | This validator's aggregate consensus score. | -| INCENTIVE | 0.029 | This miner's incentive, TAO emission, is attained via mining. | -| DIVIDENDS | 0.001 | This validator's dividends, TAO emission, are attained via validating. | -| EMISSION | 29_340_153 | This miner's total emission in RAO (10^(-9) TAO) per block. | -| VTRUST | 0.96936 | This validator's trust score as a validator. | -| VPERMIT | \* | Whether this miner is considered active for validating on this subnetwork. | -| UPDATED | 43 | Blocks since this miner set weights on the chain. | -| AXON | 131.186.56.85:8091 | The entrypoint advertised by this miner on the bittensor blockchain. | -| HOTKEY_SS58 | 5F4tQyWr... | The ss58-encoded address of the miner's hotkey. | +| Parameter | Example value | Description | +| :---------- | :----------------- | :------------------------------------------------------------------------------------- | +| COLDKEY | my_coldkey | The name of the coldkey associated with your slot. | +| HOTKEY | my_first_hotkey | The name of the hotkey associated with your slot. | +| UID | 5 | Unique identifier of the neuron. | +| ACTIVE | True | Whether or not the uid is considered active. | +| STAKE(τ) | 71.296 | The amount of stake in this wallet. | +| RANK | 0.0629 | This miner's absolute ranking according to validators on the network. | +| TRUST | 0.2629 | This miner's trust score as a proportion of validators on the network. | +| CONSENSUS | 0.89 | The consensus score of the neuron. | +| INCENTIVE | 0.029 | Thencentive score representing the miner's incentive alignment. | +| DIVIDENDS | 0.001 | The dividends earned by the neuron for validating on the subnet. | +| EMISSION | 29_340_153 | The emission in RAO (p) received by the neuron. | +| VTRUST | 0.96936 | The validator trust score indicating the network's trust in the neuron as a validator. | +| VPERMIT | \* | Whether this neuron is considered eligible for validating on this subnetwork. | +| UPDATED | 43 | Blocks since the neuron set weights on the chain. | +| AXON | 131.186.56.85:8091 | The entrypoint advertised by this miner on the bittensor blockchain. | +| HOTKEY_SS58 | 5F4tQyWr... | The ss58-encoded address of the miner's hotkey. | ### Meaning of ACTIVE -In the above table, the `ACTIVE` row applies only to UIDs that are subnet validators. It shows whether the UID is actively setting weights within the [`activity_cutoff`](../subnets/subnet-hyperparameters#activity_cutoff) window. If the UID has not set weights on the blockchain for the `activity_cutoff` duration, then the Yuma Consensus will consider this subnet validator offline, i.e., turned off (`False`). +In the above table, the `ACTIVE` row applies only to UIDs that are subnet validators. It shows whether the UID is actively setting weights within the [`activity_cutoff`](../subnets/subnet-hyperparameters#activitycutoff) window. If the UID has not set weights on the blockchain for the `activity_cutoff` duration, then the Yuma Consensus will consider this subnet validator offline, i.e., turned off (`False`). ## Checking the registration status @@ -188,7 +252,7 @@ import bittensor as bt # Replace below with your SS58 hotkey hotkey = "5HEo565WAy4Dbq3Sv271SAi7syBSofyfhhwRNjFNSM2gP9M2" network = "finney" -sub = bt.subtensor(network) +sub = bt.Subtensor(network) print(f"Registration status for hotkey {hotkey} is: {sub.is_hotkey_registered(hotkey)}") ``` @@ -200,7 +264,7 @@ import bittensor as bt hotkey = "5HEo565WAy4Dbq3Sv271SAi7syBSofyfhhwRNjFNSM2gP9M2" network = "finney" netuid = 1 # subnet uid -sub = bt.subtensor(network) +sub = bt.Subtensor(network) mg = sub.metagraph(netuid) if hotkey not in mg.hotkeys: print(f"Hotkey {hotkey} deregistered") @@ -216,7 +280,7 @@ import bittensor as bt hotkey = "5HEo565WAy4Dbq3Sv271SAi7syBSofyfhhwRNjFNSM2gP9M2" network = "finney" netuid = 1 # subnet uid -sub = bt.subtensor(network) +sub = bt.Subtensor(network) mg = sub.metagraph(netuid) uid = 2 # Your UID registered = mg.hotkeys[uid] == hotkey diff --git a/docs/validators/validators-btcli-guide.md b/docs/validators/validators-btcli-guide.md index 269ba0380b..c100c9207c 100644 --- a/docs/validators/validators-btcli-guide.md +++ b/docs/validators/validators-btcli-guide.md @@ -6,27 +6,33 @@ title: "Validator's Guide to `BTCLI`" Validators evaluate miner performance, and post their evaluations to the blockchain. This page discusses considerations specific to validators when using `btcli`. -For general coverage of `btcli` permissions and requirements, see: [Bittensor CLI: Permissions Guide](../btcli-permissions) +:::note Transaction Fees +Certain validator operations incur transaction fees. See [Transaction Fees in Bittensor](../learn/fees.md) for details. +::: + +For general coverage of `btcli` permissions and requirements, see: [Bittensor CLI: Permissions Guide](../btcli/btcli-permissions) -See also: [Coldkey and Hotkey Workstation Security](../getting-started/coldkey-hotkey-security). +See also: [Coldkey and Hotkey Workstation Security](../keys/coldkey-hotkey-security). :::tip tips It is highly recommended to use a unique hotkey per subnet. -Note that hotkeys are not encrypted by default, but can be password [optionally encrypted](../working-with-keys#encrypting-the-hotkey). +Note that hotkeys are not encrypted by default, but can be password [optionally encrypted](../keys/working-with-keys#encrypting-the-hotkey). ::: ## Requirements for validator functions ### Unpermissioned workstation (public keys only): + - Check balances - Monitor emissions and other metagraph info - Check subnet alpha prices across Bittensor ### Coldkey workstation: + - Create/import coldkey - Manage TAO and alpha stake -- Create and register a hotkey on a secure coldkey workstation then transfer the hotkey file or mnemonic to the validator workstation: `btcli wallet new-hotkey` , `btcli wallet regen-hotkey` +- Create and register a hotkey on a secure coldkey workstation then transfer the hotkey file or mnemonic to the validator workstation: `btcli wallet new-hotkey` , `btcli wallet regen-hotkey` - Transfer/rotate TAO and alpha stake in case of key compromise - Rotate hotkeys in case of compromise - Register a hotkey on a subnet with `btcli subnets register`, `btcli subnets pow-register` @@ -36,9 +42,9 @@ Note that hotkeys are not encrypted by default, but can be password [optionally These require a hotkey with an active validator permit on the subnet. Run in a live environment (the validator node), which is a hotkey workstation. -- `btcli weights reveal`, `btcli weights commit` -- `btcli wt reveal`, `btcli wt commit` -- `btcli weight reveal`, `btcli weight commit` +- `btcli weights reveal`, `btcli weights commit` +- `btcli wt reveal`, `btcli wt commit` +- `btcli weight reveal`, `btcli weight commit` ### Weight-setting requirements @@ -48,5 +54,4 @@ To set weights, a validator must meet several requirements. See [Requirements fo If you suspect your coldkey may have been leaked, you can request to swap it out of your wallet, using an extrinsic blockchain transaction. This operation has a 5 day waiting period, during which your coldkey will be locked. The cost of this coldkey swap transaction is 0.1 TAO. -See [Rotate/Swap your Coldkey](../subnets/schedule-coldkey-swap) - +See [Rotate/Swap your Coldkey](../keys/schedule-coldkey-swap) diff --git a/docusaurus.config.js b/docusaurus.config.js index 477c973ae2..75e167cc3e 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -10,23 +10,23 @@ const darkTheme = themes.dracula; // KaTex stuff // const math = require("remark-math"); // const katex = require("rehype-katex"); -import remarkMath from 'remark-math'; -import rehypeKatex from 'rehype-katex'; - +import remarkMath from "remark-math"; +import rehypeKatex from "rehype-katex"; /** @type {import('@docusaurus/types').Config} */ const config = { title: "Bittensor", tagline: "Developer Documentation", favicon: "img/favicon.ico", + trailingSlash: false, // Set the production url of your site here - url: "https://docs.bittensor.com", + url: "https://docs.learnbittensor.org", // Set the // pathname under which your site is served // For GitHub pages deployment, it is often '//' baseUrl: "/", // GitHub pages deployment config. // If you aren't using GitHub pages, you don't need these. - organizationName: "opentensor", // Usually your GitHub org/user name. + organizationName: "latent-to", // Usually your GitHub org/user name. projectName: "developer-docs", // Usually your repo name. onBrokenLinks: "throw", onBrokenMarkdownLinks: "throw", @@ -37,7 +37,7 @@ const config = { customFields: { enableIssueLinks: true, // Set to true to enable issue links enableEditUrlLinks: true, // Set to true to enable edit url links - issueBaseUrl: "https://github.com/opentensor/developer-docs/issues", + issueBaseUrl: "https://github.com/latent-to/developer-docs/issues", enableFeedback: false, // Set to false to disable feedback }, @@ -59,7 +59,7 @@ const config = { sidebarCollapsible: true, showLastUpdateTime: true, docItemComponent: "@theme/DocItem", - editUrl: "https://github.com/opentensor/developer-docs/blob/main/", + editUrl: "https://github.com/latent-to/developer-docs/blob/main/", }, theme: { customCss: require.resolve("./src/css/custom.css"), @@ -73,13 +73,17 @@ const config = { "@docusaurus/plugin-client-redirects", { redirects: [ - { - to: "/btcli", - from: "/reference/btcli", + { + "to": "/keys/proxies/working-with-proxies", + "from": "/keys/proxies/create-proxy" }, - { - to: "/staking-and-delegation/delegation", - from: "/delegation", + { + "to": "/subnets/understanding-multiple-mech-subnets", + "from": "/subnets/understanding-sub-subnets" + }, + { + to: "/liquidity-positions/", + from: "/liquidity-provider", }, { to: "/staking-and-delegation/staking-polkadot-js", @@ -89,41 +93,133 @@ const config = { to: "/staking-and-delegation/delegation", from: "/staking", }, + { + to: "/staking-and-delegation/delegation", + from: "/staking-and-delegation/staking", + }, { from: "/subnets/register-validate-mine", - to: "validators/index" + to: "/validators", }, { - from: "/recycled-tao", - to: "/glossary" + to: "/keys/schedule-coldkey-swap", + from: "/subnets/schedule-coldkey-swap", }, { - to: "/subnets/walkthrough-prompting", - from: "/subnets/code-walkthrough-text-prompting", + to: "/sdk/bt-api-ref", + from: "/reference/bittensor-api-ref", }, { - to: "/subtensor-nodes", - from: "/getting-started/running-a-public-subtensor", + to: "/errors", + from: "/subtensor-nodes/subtensor-error-messages", }, { - to: "/", - from: "/subnet-pages", + from: "/glossary", + to: "/resources/glossary", }, { - to: "/subnets/schedule-coldkey-swap", - from: "/schedule-key-swap", + from: "/bittensor-rel-notes", + to: "/resources/bittensor-rel-notes", }, { - to: "/subnets/schedule-coldkey-swap", - from: "/subnets/schedule-key-swap", + from: "/questions-and-answers", + to: "/resources/questions-and-answers", }, - { - to: "/bt-api-ref", - from: "/reference/bittensor-api-ref", + { + from: "/emissions", + to: "/learn/emissions", }, { - to: "/errors", - from: "/subtensor-nodes/subtensor-error-messages", + from: "/yuma-consensus", + to: "/learn/yuma-consensus", + }, + { + from: "/subnets/yc3-blog", + to: "/learn/yc3-blog", + }, + { + from: "/fees", + to: "/learn/fees", + }, + { + from: "/community-links", + to: "/resources/community-links", + }, + { + from: "/subnets/yuma3-migration-guide", + to: "/learn/yuma3-migration-guide", + }, + { + from: "/subnets/child-hotkeys", + to: "/validators/child-hotkeys", + }, + { + from: "/btcli", + to: "/btcli", + }, + { + from: "/btcli-permissions", + to: "/btcli/btcli-permissions", + }, + { + from: "/migration_guide", + to: "/sdk/migration-guide", + }, + { + from: "/bt-api-ref", + to: "/sdk/bt-api-ref", + }, + { + from: "/getting-started/wallets", + to: "/keys/wallets", + }, + { + from: "/getting-started/coldkey-hotkey-security", + to: "/keys/coldkey-hotkey-security", + }, + { + from: "/working-with-keys", + to: "/keys/working-with-keys", + }, + { + from: "/tools", + to: "/concepts/tools", + }, + { + from: "/bittensor-networks", + to: "/concepts/bittensor-networks", + }, + { + from: "/commit-reveal", + to: "/concepts/commit-reveal", + }, + { + from: "/consensus-based-weights", + to: "/concepts/consensus-based-weights", + }, + { + from: "/bt-logging-levels", + to: "/concepts/bt-logging-levels", + }, + { + from: "/utilities", + to: "/resources/utilities", + }, + { + from: "/governance", + to: "/governance", + }, + { + from: "/senate", + to: "/governance/senate", + }, + { + from: "/errors-and-troubleshooting", + to: "/errors/troubleshooting", + }, + { + from: "/media-assets", + to: "/resources/media-assets", }, ], }, @@ -141,7 +237,6 @@ const config = { ], // clientModules: ["/static/feedbug-widjet.js"], - stylesheets: [ { href: "https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css", @@ -151,7 +246,7 @@ const config = { crossorigin: "anonymous", }, { - href: "https://unpkg.com/@antonz/codapi@0.19.10/dist/snippet.css", + href: "https://unpkg.com/@antonz/codapi@0.19.10/dist/snippet.css", }, ], themeConfig: @@ -159,12 +254,21 @@ const config = { ({ // Replace with your project's social card image: "img/bittensor-dev-docs-social-card.png", + announcementBar: { + id: "package_source", + content: + " ⚠️ For security, only use links and commands directly from our docs or official release announcements to avoid malicious lookalikes.", + backgroundColor: "#FFF4E5", + textColor: "#4A2F00", + isCloseable: true, + }, docs: { sidebar: { autoCollapseCategories: true, hideable: false, }, }, + // announcementBar: { // id: 'support_us', // content: @@ -179,7 +283,7 @@ const config = { alt: "Bittensor", src: "img/logo.svg", srcDark: "img/logo-dark-mode.svg", - href: "https://bittensor.com", + href: "https://docs.learnbittensor.org", style: { objectFit: "contain", width: 21, @@ -188,25 +292,25 @@ const config = { items: [ { position: "left", - label: "What is Bittensor?", - to: "learn/introduction", + label: "Announcements", + to: "learn/announcements", }, { position: "left", - label: "SubtensorAPI", - to: "sdk/subtensor-api", + label: "Bittensor SDKv10 Migration Guide", + to: "sdk/migration-guide", }, { position: "left", - label: "Bittensor SDK Reference", - to: "bt-api-ref", + label: "What is Bittensor?", + to: "learn/introduction", }, { position: "left", - label: "BTCLI Live Coding Playground", - to: "btcli/btcli-playground", + label: "Bittensor SDK Reference", + to: "sdk/bt-api-ref", }, - + { position: "left", label: "EVM on Bittensor", @@ -218,12 +322,12 @@ const config = { className: "custom_algolia", }, { - to: "bittensor-rel-notes", + to: "resources/bittensor-rel-notes", label: "Releases", position: "left", }, { - href: "https://github.com/opentensor/developer-docs", + href: "https://github.com/latent-to/developer-docs", label: "Docs GitHub", position: "right", }, @@ -236,20 +340,26 @@ const config = { additionalLanguages: ["bash", "python", "diff", "json", "yaml"], }, algolia: { - appId: "B07G29NY9F", - apiKey: "d23c920e8a9bdae899572be3c8494696", - indexName: "new--alpha", + appId: "UXNFOAH677", + apiKey: "72af66272aba6bd27e76ac6f7eec0068", + indexName: "learnbittensor", contextualSearch: true, insights: true, debug: false, + searchPagePath: "search", + // // Optional: Replace parts of the item URLs from Algolia. Useful when using the same search index for multiple deployments using a different baseUrl. You can use regexp or string in the `from` param. For example: localhost:3000 vs myCompany.com/docs + // replaceSearchResultPathname: { + // from: "/docs/", // or as RegExp: /\/docs\// + // to: "/", + // }, }, footer: { copyright: `
- © ${new Date().getFullYear()} BittensorLatent Holdings, all rights reserved. + © ${new Date().getFullYear()} LearnBittensorLatent Holdings, all rights reserved. contact the docs team
- + logo `, diff --git a/llms.txt b/llms.txt new file mode 100644 index 0000000000..032b5a0b82 --- /dev/null +++ b/llms.txt @@ -0,0 +1,140 @@ +# Bittensor Documentation Resources + +## Official Documentation +The primary sources for Bittensor documentation and learning resources. +- **Main Documentation**: https://docs.bittensor.com - Comprehensive technical documentation covering all aspects of Bittensor +- **Learn Bittensor**: https://learnbittensor.org - User-friendly explanations and tutorials for beginners + +## Quick Reference +- **FAQ**: https://docs.bittensor.com/questions-and-answers - Frequently asked questions +- **Glossary**: https://docs.bittensor.com/glossary - Comprehensive terminology reference +- **Release Notes**: https://docs.bittensor.com/bittensor-rel-notes - Version release information + +## Core Concepts +### Introduction +- **Introduction to Bittensor**: https://docs.bittensor.com/learn/introduction +- **Learn Bittensor Introduction**: https://learnbittensor.org/explore/article/introduction-to-bittensor + +### Subnets +- **Understanding Subnets**: https://docs.bittensor.com/subnets/understanding-subnets +- **Creating Subnets**: https://docs.bittensor.com/subnets/create-a-subnet +- **Subnet Management**: + - Subnet Creators Guide: https://docs.bittensor.com/subnets/subnet-creators-btcli-guide + - Subnet Hyperparameters: https://docs.bittensor.com/subnets/subnet-hyperparameters + - Working with Subnets: https://docs.bittensor.com/subnets/working-with-subnets + - Walkthrough of Example Subnet: https://docs.bittensor.com/subnets/walkthrough-prompting + +### Consensus and Emissions +The mechanisms that power Bittensor's incentive system and reward distribution. +- **Yuma Consensus**: https://docs.bittensor.com/yuma-consensus - Technical details of Bittensor's consensus mechanism +- **Emissions**: https://docs.bittensor.com/emissions - How TAO and alpha tokens are distributed in the network + +### Dynamic TAO +- **Dynamic TAO Guide**: https://docs.bittensor.com/dynamic-tao/dtao-guide +- **Dynamic TAO FAQ**: https://docs.bittensor.com/dynamic-tao/dtao-faq +- **SDK Cheat Sheet**: https://docs.bittensor.com/dynamic-tao/sdk-cheat-sheet + +## Network Participants +### Miners +Participants who provide AI services to the network. +- **Miner Documentation**: https://docs.bittensor.com/miners/ - Complete guide to mining on Bittensor +- **Miner Guide**: https://docs.bittensor.com/miners/miners-btcli-guide - Command-line interface guide for miners +- **Learn Bittensor Miner Concept**: https://learnbittensor.org/explore/concept/miner - Simplified explanation of mining + +### Validators +Network participants who verify and rank miner performance. +- **Validator Documentation**: https://docs.bittensor.com/validators/ - Comprehensive validator guide +- **Validator Guide**: https://docs.bittensor.com/validators/validators-btcli-guide - CLI operations for validators +- **Child Hotkeys**: https://docs.bittensor.com/validators/subnets/child-hotkeys - Managing multiple validator instances +- **Learn Bittensor Validator Concept**: https://learnbittensor.org/explore/concept/validator - Beginner's guide to validation + +### Staking and Delegation +- **Staking/Delegation Overview**: https://docs.bittensor.com/staking-and-delegation/delegation +- **Staking Guides**: + - BTCLI Guide: https://docs.bittensor.com/staking-and-delegation/stakers-btcli-guide + - Managing Stake with BTCLI: https://docs.bittensor.com/staking-and-delegation/managing-stake-btcli + - Managing Stake with SDK: https://docs.bittensor.com/staking-and-delegation/managing-stake-sdk + - Polkadot.js Guide: https://docs.bittensor.com/staking-and-delegation/staking-polkadot-js + - Ledger Hardware Wallet: https://docs.bittensor.com/staking-and-delegation/using-ledger-hw-wallet + +## Development Tools +Essential tools for building and interacting with Bittensor. + +### BTCLI (Command Line Interface) +The primary command-line tool for Bittensor operations. +- **Overview**: https://docs.bittensor.com/btcli/overview - Introduction to BTCLI +- **Installation**: https://docs.bittensor.com/getting-started/install-btcli - Setting up BTCLI +- **Playground**: https://docs.bittensor.com/btcli/btcli-playground - Interactive BTCLI learning environment +- **Permissions**: https://docs.bittensor.com/btcli-permissions - Understanding BTCLI access levels +- **Full Reference**: https://docs.bittensor.com/btcli - Complete command reference + +### Bittensor Python SDK +- **Installation**: https://docs.bittensor.com/getting-started/installation +- **Wallet SDK Installation**: https://docs.bittensor.com/getting-started/install-wallet-sdk +- **SDK Documentation**: + - Async Subtensor: https://docs.bittensor.com/python-api/autoapi/bittensor/core/async_subtensor/index.html + - Subtensor: https://docs.bittensor.com/python-api/autoapi/bittensor/core/subtensor/index.html + - Metagraph API: https://docs.bittensor.com/python-api/html/autoapi/bittensor/metagraph/index.html + - Bittensor Wallet: https://docs.bittensor.com/btwallet-api/html/autoapi/btwallet/wallet/index.html +- **Migration Guide**: https://docs.bittensor.com/migration_guide +- **Subtensor Connections**: https://docs.bittensor.com/sdk/managing-subtensor-connections + +## Security +### Wallets and Keys +- **Wallet Basics**: https://docs.bittensor.com/getting-started/wallets +- **Seed Phrase Security**: https://docs.bittensor.com/keys/handle-seed-phrase +- **Coldkey/Hotkey Security**: https://docs.bittensor.com/getting-started/coldkey-hotkey-security +- **Working with Keys**: https://docs.bittensor.com/working-with-keys +- **Multisig Security**: https://docs.bittensor.com/keys/multisig +- **Coldkey Rotation**: https://docs.bittensor.com/subnets/schedule-coldkey-swap + +## Network Environments +### Endpoints +- **Mainnet**: wss://entrypoint-finney.opentensor.ai:443 +- **Testnet**: wss://test.finney.opentensor.ai:443 +- **Devnet**: wss://dev.chain.opentensor.ai:443 + +## Advanced Topics +### Local Development +- **Local Subtensor Deployment**: https://docs.bittensor.com/local-build/deploy + +### Subtensor Nodes +- **Node Basics**: https://docs.bittensor.com/subtensor-nodes/ +- **Node Requirements**: https://docs.bittensor.com/subtensor-nodes/subtensor-node-requirements +- **Source Installation**: https://docs.bittensor.com/subtensor-nodes/using-source +- **Docker Installation**: https://docs.bittensor.com/subtensor-nodes/using-docker +- **Rate Limits**: https://docs.bittensor.com/subtensor-nodes/subtensor-rate-limits +- **Storage Queries**: https://docs.bittensor.com/subtensor-nodes/subtensor-storage-query-examples +- **Error Messages**: https://docs.bittensor.com/subtensor-nodes/subtensor-error-messages + +### EVM Integration +- **EVM on Bittensor Overview**: https://docs.bittensor.com/evm-tutorials/ +- **EVM on Subtensor**: https://docs.bittensor.com/evm-tutorials/evm-on-subtensor +- **Installation**: https://docs.bittensor.com/evm-tutorials/install +- **Setup**: + - Hardhat Config: https://docs.bittensor.com/evm-tutorials/hardhat-config-for-subtensor-evm + - Testnet: https://docs.bittensor.com/evm-tutorials/evm-testnet-with-metamask-wallet + - Localnet: https://docs.bittensor.com/evm-tutorials/evm-localnet-with-metamask-wallet + - Mainnet: https://docs.bittensor.com/evm-tutorials/evm-mainnet-with-metamask-wallet +- **Precompiles**: + - Metamask to SS58: https://docs.bittensor.com/evm-tutorials/transfer-from-metamask-to-ss58 + - Between H160 Accounts: https://docs.bittensor.com/evm-tutorials/transfer-between-two-h160-accounts + - Staking Precompile: https://docs.bittensor.com/evm-tutorials/staking-precompile + - ED25519 Verify: https://docs.bittensor.com/evm-tutorials/ed25519-verify-precompile + +### Governance +- **Overview**: https://docs.bittensor.com/governance +- **Senate**: https://docs.bittensor.com/senate +- **Senator Guide**: https://docs.bittensor.com/governance/senators-btcli-guide + +## Releases and Downloads +### Bittensor +- **PyPI**: https://pypi.org/project/bittensor/ +- **GitHub**: https://github.com/opentensor/bittensor/releases + +### BTCLI +- **PyPI**: https://pypi.org/project/bittensor-cli/ +- **GitHub**: https://github.com/opentensor/btcli/releases + +### Subtensor +- **GitHub**: https://github.com/opentensor/subtensor/releases diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 599ad73957..0000000000 --- a/package-lock.json +++ /dev/null @@ -1,17442 +0,0 @@ -{ - "name": "bittensor-docs", - "version": "0.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "bittensor-docs", - "version": "0.0.0", - "dependencies": { - "@docusaurus/core": "^3.4.0", - "@docusaurus/plugin-client-redirects": "^3.4.0", - "@docusaurus/preset-classic": "^3.4.0", - "@gracefullight/docusaurus-plugin-vercel-analytics": "^1.0.0", - "@mdx-js/react": "^3.0.0", - "@vercel/analytics": "^1.1.2", - "clsx": "^1.2.1", - "hast-util-is-element": "1.1.0", - "prism-react-renderer": "^2.1.0", - "punycode": "^2.3.1", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-icons": "^4.12.0", - "rehype-katex": "^7.0.1", - "remark-definition-list": "^2.0.0", - "remark-math": "^6.0.0", - "zwitch": "^2.0.4" - }, - "devDependencies": { - "@docusaurus/module-type-aliases": "^3.3.2", - "@docusaurus/tsconfig": "^3.3.2", - "@docusaurus/types": "^3.3.2", - "typescript": "~5.2.2" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@algolia/autocomplete-core": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz", - "integrity": "sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==", - "license": "MIT", - "dependencies": { - "@algolia/autocomplete-plugin-algolia-insights": "1.9.3", - "@algolia/autocomplete-shared": "1.9.3" - } - }, - "node_modules/@algolia/autocomplete-plugin-algolia-insights": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz", - "integrity": "sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==", - "license": "MIT", - "dependencies": { - "@algolia/autocomplete-shared": "1.9.3" - }, - "peerDependencies": { - "search-insights": ">= 1 < 3" - } - }, - "node_modules/@algolia/autocomplete-preset-algolia": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz", - "integrity": "sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==", - "license": "MIT", - "dependencies": { - "@algolia/autocomplete-shared": "1.9.3" - }, - "peerDependencies": { - "@algolia/client-search": ">= 4.9.1 < 6", - "algoliasearch": ">= 4.9.1 < 6" - } - }, - "node_modules/@algolia/autocomplete-shared": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz", - "integrity": "sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==", - "license": "MIT", - "peerDependencies": { - "@algolia/client-search": ">= 4.9.1 < 6", - "algoliasearch": ">= 4.9.1 < 6" - } - }, - "node_modules/@algolia/cache-browser-local-storage": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.22.1.tgz", - "integrity": "sha512-Sw6IAmOCvvP6QNgY9j+Hv09mvkvEIDKjYW8ow0UDDAxSXy664RBNQk3i/0nt7gvceOJ6jGmOTimaZoY1THmU7g==", - "license": "MIT", - "dependencies": { - "@algolia/cache-common": "4.22.1" - } - }, - "node_modules/@algolia/cache-common": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.22.1.tgz", - "integrity": "sha512-TJMBKqZNKYB9TptRRjSUtevJeQVXRmg6rk9qgFKWvOy8jhCPdyNZV1nB3SKGufzvTVbomAukFR8guu/8NRKBTA==", - "license": "MIT" - }, - "node_modules/@algolia/cache-in-memory": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.22.1.tgz", - "integrity": "sha512-ve+6Ac2LhwpufuWavM/aHjLoNz/Z/sYSgNIXsinGofWOysPilQZPUetqLj8vbvi+DHZZaYSEP9H5SRVXnpsNNw==", - "license": "MIT", - "dependencies": { - "@algolia/cache-common": "4.22.1" - } - }, - "node_modules/@algolia/client-account": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.22.1.tgz", - "integrity": "sha512-k8m+oegM2zlns/TwZyi4YgCtyToackkOpE+xCaKCYfBfDtdGOaVZCM5YvGPtK+HGaJMIN/DoTL8asbM3NzHonw==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "4.22.1", - "@algolia/client-search": "4.22.1", - "@algolia/transporter": "4.22.1" - } - }, - "node_modules/@algolia/client-analytics": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.22.1.tgz", - "integrity": "sha512-1ssi9pyxyQNN4a7Ji9R50nSdISIumMFDwKNuwZipB6TkauJ8J7ha/uO60sPJFqQyqvvI+px7RSNRQT3Zrvzieg==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "4.22.1", - "@algolia/client-search": "4.22.1", - "@algolia/requester-common": "4.22.1", - "@algolia/transporter": "4.22.1" - } - }, - "node_modules/@algolia/client-common": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.22.1.tgz", - "integrity": "sha512-IvaL5v9mZtm4k4QHbBGDmU3wa/mKokmqNBqPj0K7lcR8ZDKzUorhcGp/u8PkPC/e0zoHSTvRh7TRkGX3Lm7iOQ==", - "license": "MIT", - "dependencies": { - "@algolia/requester-common": "4.22.1", - "@algolia/transporter": "4.22.1" - } - }, - "node_modules/@algolia/client-personalization": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.22.1.tgz", - "integrity": "sha512-sl+/klQJ93+4yaqZ7ezOttMQ/nczly/3GmgZXJ1xmoewP5jmdP/X/nV5U7EHHH3hCUEHeN7X1nsIhGPVt9E1cQ==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "4.22.1", - "@algolia/requester-common": "4.22.1", - "@algolia/transporter": "4.22.1" - } - }, - "node_modules/@algolia/client-search": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.22.1.tgz", - "integrity": "sha512-yb05NA4tNaOgx3+rOxAmFztgMTtGBi97X7PC3jyNeGiwkAjOZc2QrdZBYyIdcDLoI09N0gjtpClcackoTN0gPA==", - "license": "MIT", - "dependencies": { - "@algolia/client-common": "4.22.1", - "@algolia/requester-common": "4.22.1", - "@algolia/transporter": "4.22.1" - } - }, - "node_modules/@algolia/events": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", - "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==", - "license": "MIT" - }, - "node_modules/@algolia/logger-common": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.22.1.tgz", - "integrity": "sha512-OnTFymd2odHSO39r4DSWRFETkBufnY2iGUZNrMXpIhF5cmFE8pGoINNPzwg02QLBlGSaLqdKy0bM8S0GyqPLBg==", - "license": "MIT" - }, - "node_modules/@algolia/logger-console": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.22.1.tgz", - "integrity": "sha512-O99rcqpVPKN1RlpgD6H3khUWylU24OXlzkavUAMy6QZd1776QAcauE3oP8CmD43nbaTjBexZj2nGsBH9Tc0FVA==", - "license": "MIT", - "dependencies": { - "@algolia/logger-common": "4.22.1" - } - }, - "node_modules/@algolia/requester-browser-xhr": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.22.1.tgz", - "integrity": "sha512-dtQGYIg6MteqT1Uay3J/0NDqD+UciHy3QgRbk7bNddOJu+p3hzjTRYESqEnoX/DpEkaNYdRHUKNylsqMpgwaEw==", - "license": "MIT", - "dependencies": { - "@algolia/requester-common": "4.22.1" - } - }, - "node_modules/@algolia/requester-common": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.22.1.tgz", - "integrity": "sha512-dgvhSAtg2MJnR+BxrIFqlLtkLlVVhas9HgYKMk2Uxiy5m6/8HZBL40JVAMb2LovoPFs9I/EWIoFVjOrFwzn5Qg==", - "license": "MIT" - }, - "node_modules/@algolia/requester-node-http": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.22.1.tgz", - "integrity": "sha512-JfmZ3MVFQkAU+zug8H3s8rZ6h0ahHZL/SpMaSasTCGYR5EEJsCc8SI5UZ6raPN2tjxa5bxS13BRpGSBUens7EA==", - "license": "MIT", - "dependencies": { - "@algolia/requester-common": "4.22.1" - } - }, - "node_modules/@algolia/transporter": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.22.1.tgz", - "integrity": "sha512-kzWgc2c9IdxMa3YqA6TN0NW5VrKYYW/BELIn7vnLyn+U/RFdZ4lxxt9/8yq3DKV5snvoDzzO4ClyejZRdV3lMQ==", - "license": "MIT", - "dependencies": { - "@algolia/cache-common": "4.22.1", - "@algolia/logger-common": "4.22.1", - "@algolia/requester-common": "4.22.1" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.3.tgz", - "integrity": "sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", - "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.0", - "@babel/generator": "^7.26.0", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.0", - "@babel/parser": "^7.26.0", - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.26.0", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/generator": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.3.tgz", - "integrity": "sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.26.3", - "@babel/types": "^7.26.3", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", - "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", - "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.23.10", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.10.tgz", - "integrity": "sha512-2XpP2XhkXzgxecPNEEK8Vz8Asj9aRxt08oKOqtiZoqV2UGZ5T+EkyP9sXQ9nwMxBIG34a7jmasVqoMop7VdPUw==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-member-expression-to-functions": "^7.23.0", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", - "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "regexpu-core": "^5.3.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", - "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "license": "MIT", - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", - "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", - "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", - "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", - "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-wrap-function": "^7.22.20" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", - "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", - "license": "MIT", - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-member-expression-to-functions": "^7.22.15", - "@babel/helper-optimise-call-expression": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", - "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", - "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", - "license": "MIT", - "dependencies": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.15", - "@babel/types": "^7.22.19" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", - "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", - "license": "MIT", - "dependencies": { - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.3.tgz", - "integrity": "sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.26.3" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz", - "integrity": "sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz", - "integrity": "sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.23.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz", - "integrity": "sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==", - "license": "MIT", - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz", - "integrity": "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz", - "integrity": "sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", - "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", - "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz", - "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz", - "integrity": "sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.20", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", - "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.20" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz", - "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz", - "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz", - "integrity": "sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz", - "integrity": "sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.23.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz", - "integrity": "sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20", - "@babel/helper-split-export-declaration": "^7.22.6", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz", - "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz", - "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz", - "integrity": "sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz", - "integrity": "sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz", - "integrity": "sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz", - "integrity": "sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz", - "integrity": "sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz", - "integrity": "sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz", - "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==", - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz", - "integrity": "sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz", - "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz", - "integrity": "sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz", - "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz", - "integrity": "sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", - "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.9.tgz", - "integrity": "sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw==", - "license": "MIT", - "dependencies": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz", - "integrity": "sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz", - "integrity": "sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz", - "integrity": "sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz", - "integrity": "sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz", - "integrity": "sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==", - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.23.3", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.23.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz", - "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.20" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz", - "integrity": "sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz", - "integrity": "sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz", - "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz", - "integrity": "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz", - "integrity": "sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz", - "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-constant-elements": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.23.3.tgz", - "integrity": "sha512-zP0QKq/p6O42OL94udMgSfKXyse4RyJ0JqbQ34zDAONWjyrEsghYEyTSK5FIpmXmCpB55SHokL1cRRKHv8L2Qw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.23.3.tgz", - "integrity": "sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz", - "integrity": "sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.23.3", - "@babel/types": "^7.23.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz", - "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==", - "license": "MIT", - "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.23.3.tgz", - "integrity": "sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz", - "integrity": "sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "regenerator-transform": "^0.15.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz", - "integrity": "sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.9.tgz", - "integrity": "sha512-A7clW3a0aSjm3ONU9o2HAILSegJCYlEZmOhmBRReVtIpY/Z/p7yIZ+wR41Z+UipwdGuqwtID/V/dOdZXjwi9gQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.8", - "babel-plugin-polyfill-corejs3": "^0.9.0", - "babel-plugin-polyfill-regenerator": "^0.5.5", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz", - "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz", - "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz", - "integrity": "sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz", - "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz", - "integrity": "sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz", - "integrity": "sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.23.6", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-typescript": "^7.23.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz", - "integrity": "sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz", - "integrity": "sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz", - "integrity": "sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz", - "integrity": "sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.9.tgz", - "integrity": "sha512-3kBGTNBBk9DQiPoXYS0g0BYlwTQYUTifqgKTjxUwEUkduRT2QOa0FPGBJ+NROQhGyYO5BuTJwGvBnqKDykac6A==", - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.23.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.7", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.23.3", - "@babel/plugin-syntax-import-attributes": "^7.23.3", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.23.3", - "@babel/plugin-transform-async-generator-functions": "^7.23.9", - "@babel/plugin-transform-async-to-generator": "^7.23.3", - "@babel/plugin-transform-block-scoped-functions": "^7.23.3", - "@babel/plugin-transform-block-scoping": "^7.23.4", - "@babel/plugin-transform-class-properties": "^7.23.3", - "@babel/plugin-transform-class-static-block": "^7.23.4", - "@babel/plugin-transform-classes": "^7.23.8", - "@babel/plugin-transform-computed-properties": "^7.23.3", - "@babel/plugin-transform-destructuring": "^7.23.3", - "@babel/plugin-transform-dotall-regex": "^7.23.3", - "@babel/plugin-transform-duplicate-keys": "^7.23.3", - "@babel/plugin-transform-dynamic-import": "^7.23.4", - "@babel/plugin-transform-exponentiation-operator": "^7.23.3", - "@babel/plugin-transform-export-namespace-from": "^7.23.4", - "@babel/plugin-transform-for-of": "^7.23.6", - "@babel/plugin-transform-function-name": "^7.23.3", - "@babel/plugin-transform-json-strings": "^7.23.4", - "@babel/plugin-transform-literals": "^7.23.3", - "@babel/plugin-transform-logical-assignment-operators": "^7.23.4", - "@babel/plugin-transform-member-expression-literals": "^7.23.3", - "@babel/plugin-transform-modules-amd": "^7.23.3", - "@babel/plugin-transform-modules-commonjs": "^7.23.3", - "@babel/plugin-transform-modules-systemjs": "^7.23.9", - "@babel/plugin-transform-modules-umd": "^7.23.3", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.23.3", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", - "@babel/plugin-transform-numeric-separator": "^7.23.4", - "@babel/plugin-transform-object-rest-spread": "^7.23.4", - "@babel/plugin-transform-object-super": "^7.23.3", - "@babel/plugin-transform-optional-catch-binding": "^7.23.4", - "@babel/plugin-transform-optional-chaining": "^7.23.4", - "@babel/plugin-transform-parameters": "^7.23.3", - "@babel/plugin-transform-private-methods": "^7.23.3", - "@babel/plugin-transform-private-property-in-object": "^7.23.4", - "@babel/plugin-transform-property-literals": "^7.23.3", - "@babel/plugin-transform-regenerator": "^7.23.3", - "@babel/plugin-transform-reserved-words": "^7.23.3", - "@babel/plugin-transform-shorthand-properties": "^7.23.3", - "@babel/plugin-transform-spread": "^7.23.3", - "@babel/plugin-transform-sticky-regex": "^7.23.3", - "@babel/plugin-transform-template-literals": "^7.23.3", - "@babel/plugin-transform-typeof-symbol": "^7.23.3", - "@babel/plugin-transform-unicode-escapes": "^7.23.3", - "@babel/plugin-transform-unicode-property-regex": "^7.23.3", - "@babel/plugin-transform-unicode-regex": "^7.23.3", - "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.8", - "babel-plugin-polyfill-corejs3": "^0.9.0", - "babel-plugin-polyfill-regenerator": "^0.5.5", - "core-js-compat": "^3.31.0", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", - "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/preset-react": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.23.3.tgz", - "integrity": "sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-transform-react-display-name": "^7.23.3", - "@babel/plugin-transform-react-jsx": "^7.22.15", - "@babel/plugin-transform-react-jsx-development": "^7.22.5", - "@babel/plugin-transform-react-pure-annotations": "^7.23.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-typescript": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.23.3.tgz", - "integrity": "sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-syntax-jsx": "^7.23.3", - "@babel/plugin-transform-modules-commonjs": "^7.23.3", - "@babel/plugin-transform-typescript": "^7.23.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "license": "MIT" - }, - "node_modules/@babel/runtime": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz", - "integrity": "sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==", - "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime-corejs3": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.23.9.tgz", - "integrity": "sha512-oeOFTrYWdWXCvXGB5orvMTJ6gCZ9I6FBjR+M38iKNXCsPxr4xT0RTdg5uz1H7QP8pp74IzPtwritEr+JscqHXQ==", - "license": "MIT", - "dependencies": { - "core-js-pure": "^3.30.2", - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", - "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/parser": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.26.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.4.tgz", - "integrity": "sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.3", - "@babel/parser": "^7.26.3", - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.3", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.26.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.3.tgz", - "integrity": "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==", - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@docsearch/css": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.5.2.tgz", - "integrity": "sha512-SPiDHaWKQZpwR2siD0KQUwlStvIAnEyK6tAE2h2Wuoq8ue9skzhlyVQ1ddzOxX6khULnAALDiR/isSF3bnuciA==", - "license": "MIT" - }, - "node_modules/@docsearch/react": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.5.2.tgz", - "integrity": "sha512-9Ahcrs5z2jq/DcAvYtvlqEBHImbm4YJI8M9y0x6Tqg598P40HTEkX7hsMcIuThI+hTFxRGZ9hll0Wygm2yEjng==", - "license": "MIT", - "dependencies": { - "@algolia/autocomplete-core": "1.9.3", - "@algolia/autocomplete-preset-algolia": "1.9.3", - "@docsearch/css": "3.5.2", - "algoliasearch": "^4.19.1" - }, - "peerDependencies": { - "@types/react": ">= 16.8.0 < 19.0.0", - "react": ">= 16.8.0 < 19.0.0", - "react-dom": ">= 16.8.0 < 19.0.0", - "search-insights": ">= 1 < 3" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "react": { - "optional": true - }, - "react-dom": { - "optional": true - }, - "search-insights": { - "optional": true - } - } - }, - "node_modules/@docusaurus/core": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.4.0.tgz", - "integrity": "sha512-g+0wwmN2UJsBqy2fQRQ6fhXruoEa62JDeEa5d8IdTJlMoaDaEDfHh7WjwGRn4opuTQWpjAwP/fbcgyHKlE+64w==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.23.3", - "@babel/generator": "^7.23.3", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.22.9", - "@babel/preset-env": "^7.22.9", - "@babel/preset-react": "^7.22.5", - "@babel/preset-typescript": "^7.22.5", - "@babel/runtime": "^7.22.6", - "@babel/runtime-corejs3": "^7.22.6", - "@babel/traverse": "^7.22.8", - "@docusaurus/cssnano-preset": "3.4.0", - "@docusaurus/logger": "3.4.0", - "@docusaurus/mdx-loader": "3.4.0", - "@docusaurus/utils": "3.4.0", - "@docusaurus/utils-common": "3.4.0", - "@docusaurus/utils-validation": "3.4.0", - "autoprefixer": "^10.4.14", - "babel-loader": "^9.1.3", - "babel-plugin-dynamic-import-node": "^2.3.3", - "boxen": "^6.2.1", - "chalk": "^4.1.2", - "chokidar": "^3.5.3", - "clean-css": "^5.3.2", - "cli-table3": "^0.6.3", - "combine-promises": "^1.1.0", - "commander": "^5.1.0", - "copy-webpack-plugin": "^11.0.0", - "core-js": "^3.31.1", - "css-loader": "^6.8.1", - "css-minimizer-webpack-plugin": "^5.0.1", - "cssnano": "^6.1.2", - "del": "^6.1.1", - "detect-port": "^1.5.1", - "escape-html": "^1.0.3", - "eta": "^2.2.0", - "eval": "^0.1.8", - "file-loader": "^6.2.0", - "fs-extra": "^11.1.1", - "html-minifier-terser": "^7.2.0", - "html-tags": "^3.3.1", - "html-webpack-plugin": "^5.5.3", - "leven": "^3.1.0", - "lodash": "^4.17.21", - "mini-css-extract-plugin": "^2.7.6", - "p-map": "^4.0.0", - "postcss": "^8.4.26", - "postcss-loader": "^7.3.3", - "prompts": "^2.4.2", - "react-dev-utils": "^12.0.1", - "react-helmet-async": "^1.3.0", - "react-loadable": "npm:@docusaurus/react-loadable@6.0.0", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.3.4", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.3.4", - "rtl-detect": "^1.0.4", - "semver": "^7.5.4", - "serve-handler": "^6.1.5", - "shelljs": "^0.8.5", - "terser-webpack-plugin": "^5.3.9", - "tslib": "^2.6.0", - "update-notifier": "^6.0.2", - "url-loader": "^4.1.1", - "webpack": "^5.88.1", - "webpack-bundle-analyzer": "^4.9.0", - "webpack-dev-server": "^4.15.1", - "webpack-merge": "^5.9.0", - "webpackbar": "^5.0.2" - }, - "bin": { - "docusaurus": "bin/docusaurus.mjs" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@docusaurus/core/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@docusaurus/core/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@docusaurus/core/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC" - }, - "node_modules/@docusaurus/cssnano-preset": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.4.0.tgz", - "integrity": "sha512-qwLFSz6v/pZHy/UP32IrprmH5ORce86BGtN0eBtG75PpzQJAzp9gefspox+s8IEOr0oZKuQ/nhzZ3xwyc3jYJQ==", - "license": "MIT", - "dependencies": { - "cssnano-preset-advanced": "^6.1.2", - "postcss": "^8.4.38", - "postcss-sort-media-queries": "^5.2.0", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/cssnano-preset/node_modules/autoprefixer": { - "version": "10.4.19", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", - "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "caniuse-lite": "^1.0.30001599", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/@docusaurus/cssnano-preset/node_modules/cssnano-preset-advanced": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-6.1.2.tgz", - "integrity": "sha512-Nhao7eD8ph2DoHolEzQs5CfRpiEP0xa1HBdnFZ82kvqdmbwVBUr2r1QuQ4t1pi+D1ZpqpcO4T+wy/7RxzJ/WPQ==", - "license": "MIT", - "dependencies": { - "autoprefixer": "^10.4.19", - "browserslist": "^4.23.0", - "cssnano-preset-default": "^6.1.2", - "postcss-discard-unused": "^6.0.5", - "postcss-merge-idents": "^6.0.3", - "postcss-reduce-idents": "^6.0.3", - "postcss-zindex": "^6.0.2" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/@docusaurus/cssnano-preset/node_modules/postcss": { - "version": "8.4.38", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", - "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/@docusaurus/cssnano-preset/node_modules/postcss-discard-unused": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-6.0.5.tgz", - "integrity": "sha512-wHalBlRHkaNnNwfC8z+ppX57VhvS+HWgjW508esjdaEYr3Mx7Gnn2xA4R/CKf5+Z9S5qsqC+Uzh4ueENWwCVUA==", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/@docusaurus/cssnano-preset/node_modules/postcss-merge-idents": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-6.0.3.tgz", - "integrity": "sha512-1oIoAsODUs6IHQZkLQGO15uGEbK3EAl5wi9SS8hs45VgsxQfMnxvt+L+zIr7ifZFIH14cfAeVe2uCTa+SPRa3g==", - "license": "MIT", - "dependencies": { - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/@docusaurus/cssnano-preset/node_modules/postcss-reduce-idents": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-6.0.3.tgz", - "integrity": "sha512-G3yCqZDpsNPoQgbDUy3T0E6hqOQ5xigUtBQyrmq3tn2GxlyiL0yyl7H+T8ulQR6kOcHJ9t7/9H4/R2tv8tJbMA==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/@docusaurus/cssnano-preset/node_modules/postcss-sort-media-queries": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-5.2.0.tgz", - "integrity": "sha512-AZ5fDMLD8SldlAYlvi8NIqo0+Z8xnXU2ia0jxmuhxAU+Lqt9K+AlmLNJ/zWEnE9x+Zx3qL3+1K20ATgNOr3fAA==", - "license": "MIT", - "dependencies": { - "sort-css-media-queries": "2.2.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "postcss": "^8.4.23" - } - }, - "node_modules/@docusaurus/cssnano-preset/node_modules/postcss-zindex": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-6.0.2.tgz", - "integrity": "sha512-5BxW9l1evPB/4ZIc+2GobEBoKC+h8gPGCMi+jxsYvd2x0mjq7wazk6DrP71pStqxE9Foxh5TVnonbWpFZzXaYg==", - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/@docusaurus/logger": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.4.0.tgz", - "integrity": "sha512-bZwkX+9SJ8lB9kVRkXw+xvHYSMGG4bpYHKGXeXFvyVc79NMeeBSGgzd4TQLHH+DYeOJoCdl8flrFJVxlZ0wo/Q==", - "license": "MIT", - "dependencies": { - "chalk": "^4.1.2", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/mdx-loader": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.4.0.tgz", - "integrity": "sha512-kSSbrrk4nTjf4d+wtBA9H+FGauf2gCax89kV8SUSJu3qaTdSIKdWERlngsiHaCFgZ7laTJ8a67UFf+xlFPtuTw==", - "license": "MIT", - "dependencies": { - "@docusaurus/logger": "3.4.0", - "@docusaurus/utils": "3.4.0", - "@docusaurus/utils-validation": "3.4.0", - "@mdx-js/mdx": "^3.0.0", - "@slorber/remark-comment": "^1.0.0", - "escape-html": "^1.0.3", - "estree-util-value-to-estree": "^3.0.1", - "file-loader": "^6.2.0", - "fs-extra": "^11.1.1", - "image-size": "^1.0.2", - "mdast-util-mdx": "^3.0.0", - "mdast-util-to-string": "^4.0.0", - "rehype-raw": "^7.0.0", - "remark-directive": "^3.0.0", - "remark-emoji": "^4.0.0", - "remark-frontmatter": "^5.0.0", - "remark-gfm": "^4.0.0", - "stringify-object": "^3.3.0", - "tslib": "^2.6.0", - "unified": "^11.0.3", - "unist-util-visit": "^5.0.0", - "url-loader": "^4.1.1", - "vfile": "^6.0.1", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@docusaurus/module-type-aliases": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.3.2.tgz", - "integrity": "sha512-b/XB0TBJah5yKb4LYuJT4buFvL0MGAb0+vJDrJtlYMguRtsEBkf2nWl5xP7h4Dlw6ol0hsHrCYzJ50kNIOEclw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@docusaurus/types": "3.3.2", - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router-config": "*", - "@types/react-router-dom": "*", - "react-helmet-async": "*", - "react-loadable": "npm:@docusaurus/react-loadable@6.0.0" - }, - "peerDependencies": { - "react": "*", - "react-dom": "*" - } - }, - "node_modules/@docusaurus/module-type-aliases/node_modules/react-helmet-async": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-2.0.4.tgz", - "integrity": "sha512-yxjQMWposw+akRfvpl5+8xejl4JtUlHnEBcji6u8/e6oc7ozT+P9PNTWMhCbz2y9tc5zPegw2BvKjQA+NwdEjQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "invariant": "^2.2.4", - "react-fast-compare": "^3.2.2", - "shallowequal": "^1.1.0" - }, - "peerDependencies": { - "react": "^16.6.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@docusaurus/plugin-client-redirects": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-client-redirects/-/plugin-client-redirects-3.4.0.tgz", - "integrity": "sha512-Pr8kyh/+OsmYCvdZhc60jy/FnrY6flD2TEAhl4rJxeVFxnvvRgEhoaIVX8q9MuJmaQoh6frPk94pjs7/6YgBDQ==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.4.0", - "@docusaurus/logger": "3.4.0", - "@docusaurus/utils": "3.4.0", - "@docusaurus/utils-common": "3.4.0", - "@docusaurus/utils-validation": "3.4.0", - "eta": "^2.2.0", - "fs-extra": "^11.1.1", - "lodash": "^4.17.21", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-blog": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.4.0.tgz", - "integrity": "sha512-vv6ZAj78ibR5Jh7XBUT4ndIjmlAxkijM3Sx5MAAzC1gyv0vupDQNhzuFg1USQmQVj3P5I6bquk12etPV3LJ+Xw==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.4.0", - "@docusaurus/logger": "3.4.0", - "@docusaurus/mdx-loader": "3.4.0", - "@docusaurus/types": "3.4.0", - "@docusaurus/utils": "3.4.0", - "@docusaurus/utils-common": "3.4.0", - "@docusaurus/utils-validation": "3.4.0", - "cheerio": "^1.0.0-rc.12", - "feed": "^4.2.2", - "fs-extra": "^11.1.1", - "lodash": "^4.17.21", - "reading-time": "^1.5.0", - "srcset": "^4.0.0", - "tslib": "^2.6.0", - "unist-util-visit": "^5.0.0", - "utility-types": "^3.10.0", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-blog/node_modules/@docusaurus/types": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.4.0.tgz", - "integrity": "sha512-4jcDO8kXi5Cf9TcyikB/yKmz14f2RZ2qTRerbHAsS+5InE9ZgSLBNLsewtFTcTOXSVcbU3FoGOzcNWAmU1TR0A==", - "license": "MIT", - "dependencies": { - "@mdx-js/mdx": "^3.0.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "commander": "^5.1.0", - "joi": "^17.9.2", - "react-helmet-async": "^1.3.0", - "utility-types": "^3.10.0", - "webpack": "^5.88.1", - "webpack-merge": "^5.9.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-docs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.4.0.tgz", - "integrity": "sha512-HkUCZffhBo7ocYheD9oZvMcDloRnGhBMOZRyVcAQRFmZPmNqSyISlXA1tQCIxW+r478fty97XXAGjNYzBjpCsg==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.4.0", - "@docusaurus/logger": "3.4.0", - "@docusaurus/mdx-loader": "3.4.0", - "@docusaurus/module-type-aliases": "3.4.0", - "@docusaurus/types": "3.4.0", - "@docusaurus/utils": "3.4.0", - "@docusaurus/utils-common": "3.4.0", - "@docusaurus/utils-validation": "3.4.0", - "@types/react-router-config": "^5.0.7", - "combine-promises": "^1.1.0", - "fs-extra": "^11.1.1", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "tslib": "^2.6.0", - "utility-types": "^3.10.0", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-docs/node_modules/@docusaurus/module-type-aliases": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.4.0.tgz", - "integrity": "sha512-A1AyS8WF5Bkjnb8s+guTDuYmUiwJzNrtchebBHpc0gz0PyHJNMaybUlSrmJjHVcGrya0LKI4YcR3lBDQfXRYLw==", - "license": "MIT", - "dependencies": { - "@docusaurus/types": "3.4.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router-config": "*", - "@types/react-router-dom": "*", - "react-helmet-async": "*", - "react-loadable": "npm:@docusaurus/react-loadable@6.0.0" - }, - "peerDependencies": { - "react": "*", - "react-dom": "*" - } - }, - "node_modules/@docusaurus/plugin-content-docs/node_modules/@docusaurus/types": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.4.0.tgz", - "integrity": "sha512-4jcDO8kXi5Cf9TcyikB/yKmz14f2RZ2qTRerbHAsS+5InE9ZgSLBNLsewtFTcTOXSVcbU3FoGOzcNWAmU1TR0A==", - "license": "MIT", - "dependencies": { - "@mdx-js/mdx": "^3.0.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "commander": "^5.1.0", - "joi": "^17.9.2", - "react-helmet-async": "^1.3.0", - "utility-types": "^3.10.0", - "webpack": "^5.88.1", - "webpack-merge": "^5.9.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-docs/node_modules/@docusaurus/types/node_modules/react-helmet-async": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz", - "integrity": "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==", - "license": "Apache-2.0", - "dependencies": { - "@babel/runtime": "^7.12.5", - "invariant": "^2.2.4", - "prop-types": "^15.7.2", - "react-fast-compare": "^3.2.0", - "shallowequal": "^1.1.0" - }, - "peerDependencies": { - "react": "^16.6.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-docs/node_modules/react-helmet-async": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-2.0.4.tgz", - "integrity": "sha512-yxjQMWposw+akRfvpl5+8xejl4JtUlHnEBcji6u8/e6oc7ozT+P9PNTWMhCbz2y9tc5zPegw2BvKjQA+NwdEjQ==", - "license": "Apache-2.0", - "dependencies": { - "invariant": "^2.2.4", - "react-fast-compare": "^3.2.2", - "shallowequal": "^1.1.0" - }, - "peerDependencies": { - "react": "^16.6.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-pages": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.4.0.tgz", - "integrity": "sha512-h2+VN/0JjpR8fIkDEAoadNjfR3oLzB+v1qSXbIAKjQ46JAHx3X22n9nqS+BWSQnTnp1AjkjSvZyJMekmcwxzxg==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.4.0", - "@docusaurus/mdx-loader": "3.4.0", - "@docusaurus/types": "3.4.0", - "@docusaurus/utils": "3.4.0", - "@docusaurus/utils-validation": "3.4.0", - "fs-extra": "^11.1.1", - "tslib": "^2.6.0", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-pages/node_modules/@docusaurus/types": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.4.0.tgz", - "integrity": "sha512-4jcDO8kXi5Cf9TcyikB/yKmz14f2RZ2qTRerbHAsS+5InE9ZgSLBNLsewtFTcTOXSVcbU3FoGOzcNWAmU1TR0A==", - "license": "MIT", - "dependencies": { - "@mdx-js/mdx": "^3.0.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "commander": "^5.1.0", - "joi": "^17.9.2", - "react-helmet-async": "^1.3.0", - "utility-types": "^3.10.0", - "webpack": "^5.88.1", - "webpack-merge": "^5.9.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@docusaurus/plugin-debug": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.4.0.tgz", - "integrity": "sha512-uV7FDUNXGyDSD3PwUaf5YijX91T5/H9SX4ErEcshzwgzWwBtK37nUWPU3ZLJfeTavX3fycTOqk9TglpOLaWkCg==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.4.0", - "@docusaurus/types": "3.4.0", - "@docusaurus/utils": "3.4.0", - "fs-extra": "^11.1.1", - "react-json-view-lite": "^1.2.0", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@docusaurus/plugin-debug/node_modules/@docusaurus/types": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.4.0.tgz", - "integrity": "sha512-4jcDO8kXi5Cf9TcyikB/yKmz14f2RZ2qTRerbHAsS+5InE9ZgSLBNLsewtFTcTOXSVcbU3FoGOzcNWAmU1TR0A==", - "license": "MIT", - "dependencies": { - "@mdx-js/mdx": "^3.0.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "commander": "^5.1.0", - "joi": "^17.9.2", - "react-helmet-async": "^1.3.0", - "utility-types": "^3.10.0", - "webpack": "^5.88.1", - "webpack-merge": "^5.9.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-analytics": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.4.0.tgz", - "integrity": "sha512-mCArluxEGi3cmYHqsgpGGt3IyLCrFBxPsxNZ56Mpur0xSlInnIHoeLDH7FvVVcPJRPSQ9/MfRqLsainRw+BojA==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.4.0", - "@docusaurus/types": "3.4.0", - "@docusaurus/utils-validation": "3.4.0", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-analytics/node_modules/@docusaurus/types": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.4.0.tgz", - "integrity": "sha512-4jcDO8kXi5Cf9TcyikB/yKmz14f2RZ2qTRerbHAsS+5InE9ZgSLBNLsewtFTcTOXSVcbU3FoGOzcNWAmU1TR0A==", - "license": "MIT", - "dependencies": { - "@mdx-js/mdx": "^3.0.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "commander": "^5.1.0", - "joi": "^17.9.2", - "react-helmet-async": "^1.3.0", - "utility-types": "^3.10.0", - "webpack": "^5.88.1", - "webpack-merge": "^5.9.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-gtag": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.4.0.tgz", - "integrity": "sha512-Dsgg6PLAqzZw5wZ4QjUYc8Z2KqJqXxHxq3vIoyoBWiLEEfigIs7wHR+oiWUQy3Zk9MIk6JTYj7tMoQU0Jm3nqA==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.4.0", - "@docusaurus/types": "3.4.0", - "@docusaurus/utils-validation": "3.4.0", - "@types/gtag.js": "^0.0.12", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-gtag/node_modules/@docusaurus/types": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.4.0.tgz", - "integrity": "sha512-4jcDO8kXi5Cf9TcyikB/yKmz14f2RZ2qTRerbHAsS+5InE9ZgSLBNLsewtFTcTOXSVcbU3FoGOzcNWAmU1TR0A==", - "license": "MIT", - "dependencies": { - "@mdx-js/mdx": "^3.0.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "commander": "^5.1.0", - "joi": "^17.9.2", - "react-helmet-async": "^1.3.0", - "utility-types": "^3.10.0", - "webpack": "^5.88.1", - "webpack-merge": "^5.9.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-tag-manager": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.4.0.tgz", - "integrity": "sha512-O9tX1BTwxIhgXpOLpFDueYA9DWk69WCbDRrjYoMQtFHSkTyE7RhNgyjSPREUWJb9i+YUg3OrsvrBYRl64FCPCQ==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.4.0", - "@docusaurus/types": "3.4.0", - "@docusaurus/utils-validation": "3.4.0", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-tag-manager/node_modules/@docusaurus/types": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.4.0.tgz", - "integrity": "sha512-4jcDO8kXi5Cf9TcyikB/yKmz14f2RZ2qTRerbHAsS+5InE9ZgSLBNLsewtFTcTOXSVcbU3FoGOzcNWAmU1TR0A==", - "license": "MIT", - "dependencies": { - "@mdx-js/mdx": "^3.0.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "commander": "^5.1.0", - "joi": "^17.9.2", - "react-helmet-async": "^1.3.0", - "utility-types": "^3.10.0", - "webpack": "^5.88.1", - "webpack-merge": "^5.9.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@docusaurus/plugin-sitemap": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.4.0.tgz", - "integrity": "sha512-+0VDvx9SmNrFNgwPoeoCha+tRoAjopwT0+pYO1xAbyLcewXSemq+eLxEa46Q1/aoOaJQ0qqHELuQM7iS2gp33Q==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.4.0", - "@docusaurus/logger": "3.4.0", - "@docusaurus/types": "3.4.0", - "@docusaurus/utils": "3.4.0", - "@docusaurus/utils-common": "3.4.0", - "@docusaurus/utils-validation": "3.4.0", - "fs-extra": "^11.1.1", - "sitemap": "^7.1.1", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@docusaurus/plugin-sitemap/node_modules/@docusaurus/types": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.4.0.tgz", - "integrity": "sha512-4jcDO8kXi5Cf9TcyikB/yKmz14f2RZ2qTRerbHAsS+5InE9ZgSLBNLsewtFTcTOXSVcbU3FoGOzcNWAmU1TR0A==", - "license": "MIT", - "dependencies": { - "@mdx-js/mdx": "^3.0.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "commander": "^5.1.0", - "joi": "^17.9.2", - "react-helmet-async": "^1.3.0", - "utility-types": "^3.10.0", - "webpack": "^5.88.1", - "webpack-merge": "^5.9.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@docusaurus/preset-classic": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.4.0.tgz", - "integrity": "sha512-Ohj6KB7siKqZaQhNJVMBBUzT3Nnp6eTKqO+FXO3qu/n1hJl3YLwVKTWBg28LF7MWrKu46UuYavwMRxud0VyqHg==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.4.0", - "@docusaurus/plugin-content-blog": "3.4.0", - "@docusaurus/plugin-content-docs": "3.4.0", - "@docusaurus/plugin-content-pages": "3.4.0", - "@docusaurus/plugin-debug": "3.4.0", - "@docusaurus/plugin-google-analytics": "3.4.0", - "@docusaurus/plugin-google-gtag": "3.4.0", - "@docusaurus/plugin-google-tag-manager": "3.4.0", - "@docusaurus/plugin-sitemap": "3.4.0", - "@docusaurus/theme-classic": "3.4.0", - "@docusaurus/theme-common": "3.4.0", - "@docusaurus/theme-search-algolia": "3.4.0", - "@docusaurus/types": "3.4.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@docusaurus/preset-classic/node_modules/@docusaurus/types": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.4.0.tgz", - "integrity": "sha512-4jcDO8kXi5Cf9TcyikB/yKmz14f2RZ2qTRerbHAsS+5InE9ZgSLBNLsewtFTcTOXSVcbU3FoGOzcNWAmU1TR0A==", - "license": "MIT", - "dependencies": { - "@mdx-js/mdx": "^3.0.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "commander": "^5.1.0", - "joi": "^17.9.2", - "react-helmet-async": "^1.3.0", - "utility-types": "^3.10.0", - "webpack": "^5.88.1", - "webpack-merge": "^5.9.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@docusaurus/theme-classic": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.4.0.tgz", - "integrity": "sha512-0IPtmxsBYv2adr1GnZRdMkEQt1YW6tpzrUPj02YxNpvJ5+ju4E13J5tB4nfdaen/tfR1hmpSPlTFPvTf4kwy8Q==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.4.0", - "@docusaurus/mdx-loader": "3.4.0", - "@docusaurus/module-type-aliases": "3.4.0", - "@docusaurus/plugin-content-blog": "3.4.0", - "@docusaurus/plugin-content-docs": "3.4.0", - "@docusaurus/plugin-content-pages": "3.4.0", - "@docusaurus/theme-common": "3.4.0", - "@docusaurus/theme-translations": "3.4.0", - "@docusaurus/types": "3.4.0", - "@docusaurus/utils": "3.4.0", - "@docusaurus/utils-common": "3.4.0", - "@docusaurus/utils-validation": "3.4.0", - "@mdx-js/react": "^3.0.0", - "clsx": "^2.0.0", - "copy-text-to-clipboard": "^3.2.0", - "infima": "0.2.0-alpha.43", - "lodash": "^4.17.21", - "nprogress": "^0.2.0", - "postcss": "^8.4.26", - "prism-react-renderer": "^2.3.0", - "prismjs": "^1.29.0", - "react-router-dom": "^5.3.4", - "rtlcss": "^4.1.0", - "tslib": "^2.6.0", - "utility-types": "^3.10.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@docusaurus/theme-classic/node_modules/@docusaurus/module-type-aliases": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.4.0.tgz", - "integrity": "sha512-A1AyS8WF5Bkjnb8s+guTDuYmUiwJzNrtchebBHpc0gz0PyHJNMaybUlSrmJjHVcGrya0LKI4YcR3lBDQfXRYLw==", - "license": "MIT", - "dependencies": { - "@docusaurus/types": "3.4.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router-config": "*", - "@types/react-router-dom": "*", - "react-helmet-async": "*", - "react-loadable": "npm:@docusaurus/react-loadable@6.0.0" - }, - "peerDependencies": { - "react": "*", - "react-dom": "*" - } - }, - "node_modules/@docusaurus/theme-classic/node_modules/@docusaurus/types": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.4.0.tgz", - "integrity": "sha512-4jcDO8kXi5Cf9TcyikB/yKmz14f2RZ2qTRerbHAsS+5InE9ZgSLBNLsewtFTcTOXSVcbU3FoGOzcNWAmU1TR0A==", - "license": "MIT", - "dependencies": { - "@mdx-js/mdx": "^3.0.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "commander": "^5.1.0", - "joi": "^17.9.2", - "react-helmet-async": "^1.3.0", - "utility-types": "^3.10.0", - "webpack": "^5.88.1", - "webpack-merge": "^5.9.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@docusaurus/theme-classic/node_modules/@docusaurus/types/node_modules/react-helmet-async": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz", - "integrity": "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==", - "license": "Apache-2.0", - "dependencies": { - "@babel/runtime": "^7.12.5", - "invariant": "^2.2.4", - "prop-types": "^15.7.2", - "react-fast-compare": "^3.2.0", - "shallowequal": "^1.1.0" - }, - "peerDependencies": { - "react": "^16.6.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@docusaurus/theme-classic/node_modules/clsx": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz", - "integrity": "sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/@docusaurus/theme-classic/node_modules/react-helmet-async": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-2.0.4.tgz", - "integrity": "sha512-yxjQMWposw+akRfvpl5+8xejl4JtUlHnEBcji6u8/e6oc7ozT+P9PNTWMhCbz2y9tc5zPegw2BvKjQA+NwdEjQ==", - "license": "Apache-2.0", - "dependencies": { - "invariant": "^2.2.4", - "react-fast-compare": "^3.2.2", - "shallowequal": "^1.1.0" - }, - "peerDependencies": { - "react": "^16.6.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@docusaurus/theme-common": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.4.0.tgz", - "integrity": "sha512-0A27alXuv7ZdCg28oPE8nH/Iz73/IUejVaCazqu9elS4ypjiLhK3KfzdSQBnL/g7YfHSlymZKdiOHEo8fJ0qMA==", - "license": "MIT", - "dependencies": { - "@docusaurus/mdx-loader": "3.4.0", - "@docusaurus/module-type-aliases": "3.4.0", - "@docusaurus/plugin-content-blog": "3.4.0", - "@docusaurus/plugin-content-docs": "3.4.0", - "@docusaurus/plugin-content-pages": "3.4.0", - "@docusaurus/utils": "3.4.0", - "@docusaurus/utils-common": "3.4.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router-config": "*", - "clsx": "^2.0.0", - "parse-numeric-range": "^1.3.0", - "prism-react-renderer": "^2.3.0", - "tslib": "^2.6.0", - "utility-types": "^3.10.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@docusaurus/theme-common/node_modules/@docusaurus/module-type-aliases": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.4.0.tgz", - "integrity": "sha512-A1AyS8WF5Bkjnb8s+guTDuYmUiwJzNrtchebBHpc0gz0PyHJNMaybUlSrmJjHVcGrya0LKI4YcR3lBDQfXRYLw==", - "license": "MIT", - "dependencies": { - "@docusaurus/types": "3.4.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router-config": "*", - "@types/react-router-dom": "*", - "react-helmet-async": "*", - "react-loadable": "npm:@docusaurus/react-loadable@6.0.0" - }, - "peerDependencies": { - "react": "*", - "react-dom": "*" - } - }, - "node_modules/@docusaurus/theme-common/node_modules/@docusaurus/types": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.4.0.tgz", - "integrity": "sha512-4jcDO8kXi5Cf9TcyikB/yKmz14f2RZ2qTRerbHAsS+5InE9ZgSLBNLsewtFTcTOXSVcbU3FoGOzcNWAmU1TR0A==", - "license": "MIT", - "dependencies": { - "@mdx-js/mdx": "^3.0.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "commander": "^5.1.0", - "joi": "^17.9.2", - "react-helmet-async": "^1.3.0", - "utility-types": "^3.10.0", - "webpack": "^5.88.1", - "webpack-merge": "^5.9.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@docusaurus/theme-common/node_modules/@docusaurus/types/node_modules/react-helmet-async": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz", - "integrity": "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==", - "license": "Apache-2.0", - "dependencies": { - "@babel/runtime": "^7.12.5", - "invariant": "^2.2.4", - "prop-types": "^15.7.2", - "react-fast-compare": "^3.2.0", - "shallowequal": "^1.1.0" - }, - "peerDependencies": { - "react": "^16.6.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@docusaurus/theme-common/node_modules/clsx": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz", - "integrity": "sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/@docusaurus/theme-common/node_modules/react-helmet-async": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-2.0.4.tgz", - "integrity": "sha512-yxjQMWposw+akRfvpl5+8xejl4JtUlHnEBcji6u8/e6oc7ozT+P9PNTWMhCbz2y9tc5zPegw2BvKjQA+NwdEjQ==", - "license": "Apache-2.0", - "dependencies": { - "invariant": "^2.2.4", - "react-fast-compare": "^3.2.2", - "shallowequal": "^1.1.0" - }, - "peerDependencies": { - "react": "^16.6.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/@docusaurus/theme-search-algolia": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.4.0.tgz", - "integrity": "sha512-aiHFx7OCw4Wck1z6IoShVdUWIjntC8FHCw9c5dR8r3q4Ynh+zkS8y2eFFunN/DL6RXPzpnvKCg3vhLQYJDmT9Q==", - "license": "MIT", - "dependencies": { - "@docsearch/react": "^3.5.2", - "@docusaurus/core": "3.4.0", - "@docusaurus/logger": "3.4.0", - "@docusaurus/plugin-content-docs": "3.4.0", - "@docusaurus/theme-common": "3.4.0", - "@docusaurus/theme-translations": "3.4.0", - "@docusaurus/utils": "3.4.0", - "@docusaurus/utils-validation": "3.4.0", - "algoliasearch": "^4.18.0", - "algoliasearch-helper": "^3.13.3", - "clsx": "^2.0.0", - "eta": "^2.2.0", - "fs-extra": "^11.1.1", - "lodash": "^4.17.21", - "tslib": "^2.6.0", - "utility-types": "^3.10.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@docusaurus/theme-search-algolia/node_modules/clsx": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz", - "integrity": "sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/@docusaurus/theme-translations": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.4.0.tgz", - "integrity": "sha512-zSxCSpmQCCdQU5Q4CnX/ID8CSUUI3fvmq4hU/GNP/XoAWtXo9SAVnM3TzpU8Gb//H3WCsT8mJcTfyOk3d9ftNg==", - "license": "MIT", - "dependencies": { - "fs-extra": "^11.1.1", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@docusaurus/tsconfig": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@docusaurus/tsconfig/-/tsconfig-3.3.2.tgz", - "integrity": "sha512-2MQXkLoWqgOSiqFojNEq8iPtFBHGQqd1b/SQMoe+v3GgHmk/L6YTTO/hMcHhWb1hTFmbkei++IajSfD3RlZKvw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@docusaurus/types": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.3.2.tgz", - "integrity": "sha512-5p201S7AZhliRxTU7uMKtSsoC8mgPA9bs9b5NQg1IRdRxJfflursXNVsgc3PcMqiUTul/v1s3k3rXXFlRE890w==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@mdx-js/mdx": "^3.0.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "commander": "^5.1.0", - "joi": "^17.9.2", - "react-helmet-async": "^1.3.0", - "utility-types": "^3.10.0", - "webpack": "^5.88.1", - "webpack-merge": "^5.9.0" - }, - "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@docusaurus/utils": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.4.0.tgz", - "integrity": "sha512-fRwnu3L3nnWaXOgs88BVBmG1yGjcQqZNHG+vInhEa2Sz2oQB+ZjbEMO5Rh9ePFpZ0YDiDUhpaVjwmS+AU2F14g==", - "license": "MIT", - "dependencies": { - "@docusaurus/logger": "3.4.0", - "@docusaurus/utils-common": "3.4.0", - "@svgr/webpack": "^8.1.0", - "escape-string-regexp": "^4.0.0", - "file-loader": "^6.2.0", - "fs-extra": "^11.1.1", - "github-slugger": "^1.5.0", - "globby": "^11.1.0", - "gray-matter": "^4.0.3", - "jiti": "^1.20.0", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "micromatch": "^4.0.5", - "prompts": "^2.4.2", - "resolve-pathname": "^3.0.0", - "shelljs": "^0.8.5", - "tslib": "^2.6.0", - "url-loader": "^4.1.1", - "utility-types": "^3.10.0", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "@docusaurus/types": "*" - }, - "peerDependenciesMeta": { - "@docusaurus/types": { - "optional": true - } - } - }, - "node_modules/@docusaurus/utils-common": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.4.0.tgz", - "integrity": "sha512-NVx54Wr4rCEKsjOH5QEVvxIqVvm+9kh7q8aYTU5WzUU9/Hctd6aTrcZ3G0Id4zYJ+AeaG5K5qHA4CY5Kcm2iyQ==", - "license": "MIT", - "dependencies": { - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "@docusaurus/types": "*" - }, - "peerDependenciesMeta": { - "@docusaurus/types": { - "optional": true - } - } - }, - "node_modules/@docusaurus/utils-validation": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.4.0.tgz", - "integrity": "sha512-hYQ9fM+AXYVTWxJOT1EuNaRnrR2WGpRdLDQG07O8UOpsvCPWUVOeo26Rbm0JWY2sGLfzAb+tvJ62yF+8F+TV0g==", - "license": "MIT", - "dependencies": { - "@docusaurus/logger": "3.4.0", - "@docusaurus/utils": "3.4.0", - "@docusaurus/utils-common": "3.4.0", - "fs-extra": "^11.2.0", - "joi": "^17.9.2", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@gracefullight/docusaurus-plugin-vercel-analytics": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@gracefullight/docusaurus-plugin-vercel-analytics/-/docusaurus-plugin-vercel-analytics-1.0.1.tgz", - "integrity": "sha512-6Xj63GIBadwLhoDVNpRXlEs3ieTetd8ZcNGKIJ8ADT0IjZIvcIW6CZFY5RgGtxuJ4PxFXVU2DDV14M2uXXTvGQ==", - "license": "MIT", - "dependencies": { - "@docusaurus/utils-validation": "^3" - } - }, - "node_modules/@gracefullight/docusaurus-plugin-vercel-analytics/node_modules/@docusaurus/logger": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.1.1.tgz", - "integrity": "sha512-BjkNDpQzewcTnST8trx4idSoAla6zZ3w22NqM/UMcFtvYJgmoE4layuTzlfql3VFPNuivvj7BOExa/+21y4X2Q==", - "license": "MIT", - "dependencies": { - "chalk": "^4.1.2", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@gracefullight/docusaurus-plugin-vercel-analytics/node_modules/@docusaurus/utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.1.1.tgz", - "integrity": "sha512-ZJfJa5cJQtRYtqijsPEnAZoduW6sjAQ7ZCWSZavLcV10Fw0Z3gSaPKA/B4micvj2afRZ4gZxT7KfYqe5H8Cetg==", - "license": "MIT", - "dependencies": { - "@docusaurus/logger": "3.1.1", - "@svgr/webpack": "^6.5.1", - "escape-string-regexp": "^4.0.0", - "file-loader": "^6.2.0", - "fs-extra": "^11.1.1", - "github-slugger": "^1.5.0", - "globby": "^11.1.0", - "gray-matter": "^4.0.3", - "jiti": "^1.20.0", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "micromatch": "^4.0.5", - "resolve-pathname": "^3.0.0", - "shelljs": "^0.8.5", - "tslib": "^2.6.0", - "url-loader": "^4.1.1", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=18.0" - }, - "peerDependencies": { - "@docusaurus/types": "*" - }, - "peerDependenciesMeta": { - "@docusaurus/types": { - "optional": true - } - } - }, - "node_modules/@gracefullight/docusaurus-plugin-vercel-analytics/node_modules/@docusaurus/utils-validation": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.1.1.tgz", - "integrity": "sha512-KlY4P9YVDnwL+nExvlIpu79abfEv6ZCHuOX4ZQ+gtip+Wxj0daccdReIWWtqxM/Fb5Cz1nQvUCc7VEtT8IBUAA==", - "license": "MIT", - "dependencies": { - "@docusaurus/logger": "3.1.1", - "@docusaurus/utils": "3.1.1", - "joi": "^17.9.2", - "js-yaml": "^4.1.0", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=18.0" - } - }, - "node_modules/@gracefullight/docusaurus-plugin-vercel-analytics/node_modules/@svgr/plugin-svgo": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz", - "integrity": "sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==", - "license": "MIT", - "dependencies": { - "cosmiconfig": "^7.0.1", - "deepmerge": "^4.2.2", - "svgo": "^2.8.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "*" - } - }, - "node_modules/@gracefullight/docusaurus-plugin-vercel-analytics/node_modules/@svgr/webpack": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.5.1.tgz", - "integrity": "sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.19.6", - "@babel/plugin-transform-react-constant-elements": "^7.18.12", - "@babel/preset-env": "^7.19.4", - "@babel/preset-react": "^7.18.6", - "@babel/preset-typescript": "^7.18.6", - "@svgr/core": "^6.5.1", - "@svgr/plugin-jsx": "^6.5.1", - "@svgr/plugin-svgo": "^6.5.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@gracefullight/docusaurus-plugin-vercel-analytics/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/@gracefullight/docusaurus-plugin-vercel-analytics/node_modules/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "license": "MIT", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@gracefullight/docusaurus-plugin-vercel-analytics/node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "license": "MIT", - "dependencies": { - "css-tree": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@gracefullight/docusaurus-plugin-vercel-analytics/node_modules/svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "license": "MIT", - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", - "license": "BSD-3-Clause" - }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "license": "BSD-3-Clause", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", - "license": "MIT" - }, - "node_modules/@mdx-js/mdx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.0.1.tgz", - "integrity": "sha512-eIQ4QTrOWyL3LWEe/bu6Taqzq2HQvHcyTMaOrI95P2/LmJE7AsfPfgJGuFLPVqBUE1BC1rik3VIhU+s9u72arA==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdx": "^2.0.0", - "collapse-white-space": "^2.0.0", - "devlop": "^1.0.0", - "estree-util-build-jsx": "^3.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "estree-util-to-js": "^2.0.0", - "estree-walker": "^3.0.0", - "hast-util-to-estree": "^3.0.0", - "hast-util-to-jsx-runtime": "^2.0.0", - "markdown-extensions": "^2.0.0", - "periscopic": "^3.0.0", - "remark-mdx": "^3.0.0", - "remark-parse": "^11.0.0", - "remark-rehype": "^11.0.0", - "source-map": "^0.7.0", - "unified": "^11.0.0", - "unist-util-position-from-estree": "^2.0.0", - "unist-util-stringify-position": "^4.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/mdx/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "license": "BSD-3-Clause", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@mdx-js/react": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.0.1.tgz", - "integrity": "sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A==", - "license": "MIT", - "dependencies": { - "@types/mdx": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "@types/react": ">=16", - "react": ">=16" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@pnpm/config.env-replace": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", - "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", - "license": "MIT", - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/network.ca-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", - "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", - "license": "MIT", - "dependencies": { - "graceful-fs": "4.2.10" - }, - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "license": "ISC" - }, - "node_modules/@pnpm/npm-conf": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz", - "integrity": "sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==", - "license": "MIT", - "dependencies": { - "@pnpm/config.env-replace": "^1.1.0", - "@pnpm/network.ca-file": "^1.0.1", - "config-chain": "^1.1.11" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@polka/url": { - "version": "1.0.0-next.24", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.24.tgz", - "integrity": "sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==", - "license": "MIT" - }, - "node_modules/@sideway/address": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", - "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", - "license": "BSD-3-Clause", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", - "license": "BSD-3-Clause" - }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "license": "BSD-3-Clause" - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "license": "MIT" - }, - "node_modules/@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/@slorber/remark-comment": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@slorber/remark-comment/-/remark-comment-1.0.0.tgz", - "integrity": "sha512-RCE24n7jsOj1M0UPvIQCHTe7fI0sFL4S2nwKVWwHyVr/wI/H8GosgsJGyhnsZoGFnD/P2hLf1mSbrrgSLN93NA==", - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.1.0", - "micromark-util-symbol": "^1.0.1" - } - }, - "node_modules/@slorber/remark-comment/node_modules/micromark-factory-space": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", - "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/@slorber/remark-comment/node_modules/micromark-util-character": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", - "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "node_modules/@slorber/remark-comment/node_modules/micromark-util-symbol": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", - "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/@slorber/remark-comment/node_modules/micromark-util-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", - "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz", - "integrity": "sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz", - "integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz", - "integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz", - "integrity": "sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-svg-dynamic-title": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz", - "integrity": "sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-svg-em-dimensions": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz", - "integrity": "sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz", - "integrity": "sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-transform-svg-component": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz", - "integrity": "sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-preset": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.5.1.tgz", - "integrity": "sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==", - "license": "MIT", - "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "^6.5.1", - "@svgr/babel-plugin-remove-jsx-attribute": "*", - "@svgr/babel-plugin-remove-jsx-empty-expression": "*", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.5.1", - "@svgr/babel-plugin-svg-dynamic-title": "^6.5.1", - "@svgr/babel-plugin-svg-em-dimensions": "^6.5.1", - "@svgr/babel-plugin-transform-react-native-svg": "^6.5.1", - "@svgr/babel-plugin-transform-svg-component": "^6.5.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/core": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.5.1.tgz", - "integrity": "sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.19.6", - "@svgr/babel-preset": "^6.5.1", - "@svgr/plugin-jsx": "^6.5.1", - "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/core/node_modules/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "license": "MIT", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@svgr/hast-util-to-babel-ast": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz", - "integrity": "sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.20.0", - "entities": "^4.4.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-jsx": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz", - "integrity": "sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.19.6", - "@svgr/babel-preset": "^6.5.1", - "@svgr/hast-util-to-babel-ast": "^6.5.1", - "svg-parser": "^2.0.4" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "^6.0.0" - } - }, - "node_modules/@svgr/plugin-svgo": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-8.1.0.tgz", - "integrity": "sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA==", - "license": "MIT", - "dependencies": { - "cosmiconfig": "^8.1.3", - "deepmerge": "^4.3.1", - "svgo": "^3.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "*" - } - }, - "node_modules/@svgr/webpack": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-8.1.0.tgz", - "integrity": "sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.21.3", - "@babel/plugin-transform-react-constant-elements": "^7.21.3", - "@babel/preset-env": "^7.20.2", - "@babel/preset-react": "^7.18.6", - "@babel/preset-typescript": "^7.21.0", - "@svgr/core": "8.1.0", - "@svgr/plugin-jsx": "8.1.0", - "@svgr/plugin-svgo": "8.1.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.5.tgz", - "integrity": "sha512-uRc4Cv8UQWnE4NXlYTIIdM7wfFkOqlFztcC/gVXDKohKoVB3OyonfelUBaJzSwpBntZ2KYGF/9S7asCHsXwW6g==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-member-expression-to-functions": "^7.24.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.24.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.24.5", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.5.tgz", - "integrity": "sha512-4owRteeihKWKamtqg4JmWSsEZU445xpFRXPEwp44HbgbxdWlUV1b4Agg4lkA806Lil5XM/e+FJyS0vj5T6vmcA==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.24.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", - "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/helper-define-polyfill-provider/node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/helper-plugin-utils": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.5.tgz", - "integrity": "sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/helper-replace-supers": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz", - "integrity": "sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-member-expression-to-functions": "^7.23.0", - "@babel/helper-optimise-call-expression": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/helper-split-export-declaration": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.5.tgz", - "integrity": "sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.24.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.5.tgz", - "integrity": "sha512-LdXRi1wEMTrHVR4Zc9F8OewC3vdm5h4QB6L71zy6StmYeqGi1b3ttIO8UC+BfZKcH9jdr4aI249rBkm+3+YvHw==", - "license": "MIT", - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.24.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz", - "integrity": "sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz", - "integrity": "sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.24.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.1.tgz", - "integrity": "sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw==", - "license": "MIT", - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz", - "integrity": "sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz", - "integrity": "sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-syntax-jsx": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz", - "integrity": "sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-syntax-typescript": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz", - "integrity": "sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz", - "integrity": "sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.24.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.3.tgz", - "integrity": "sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg==", - "license": "MIT", - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-remap-async-to-generator": "^7.22.20", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.1.tgz", - "integrity": "sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.24.1", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-remap-async-to-generator": "^7.22.20" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz", - "integrity": "sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.5.tgz", - "integrity": "sha512-sMfBc3OxghjC95BkYrYocHL3NaOplrcaunblzwXhGmlPwpmfsxr4vK+mBBt49r+S240vahmv+kUxkeKgs+haCw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-class-properties": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz", - "integrity": "sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.1", - "@babel/helper-plugin-utils": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.4.tgz", - "integrity": "sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.4", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-classes": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.5.tgz", - "integrity": "sha512-gWkLP25DFj2dwe9Ck8uwMOpko4YsqyfZJrOmqqcegeDYEbp7rmn4U6UQZNj08UF6MaX39XenSpKRCvpDRBtZ7Q==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.24.5", - "@babel/helper-replace-supers": "^7.24.1", - "@babel/helper-split-export-declaration": "^7.24.5", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz", - "integrity": "sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/template": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-destructuring": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.5.tgz", - "integrity": "sha512-SZuuLyfxvsm+Ah57I/i1HVjveBENYK9ue8MJ7qkc7ndoNjqquJiElzA7f5yaAXjyW2hKojosOTAQQRX50bPSVg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz", - "integrity": "sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz", - "integrity": "sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.1.tgz", - "integrity": "sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz", - "integrity": "sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==", - "license": "MIT", - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz", - "integrity": "sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-for-of": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz", - "integrity": "sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-function-name": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz", - "integrity": "sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==", - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-plugin-utils": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-json-strings": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.1.tgz", - "integrity": "sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-literals": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz", - "integrity": "sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.1.tgz", - "integrity": "sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz", - "integrity": "sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz", - "integrity": "sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz", - "integrity": "sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-simple-access": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz", - "integrity": "sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==", - "license": "MIT", - "dependencies": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-validator-identifier": "^7.22.20" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz", - "integrity": "sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==", - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helper-plugin-utils": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-new-target": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz", - "integrity": "sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz", - "integrity": "sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.1.tgz", - "integrity": "sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.5.tgz", - "integrity": "sha512-7EauQHszLGM3ay7a161tTQH7fj+3vVM/gThlz5HpFtnygTxjrlvoeq7MPVA1Vy9Q555OB8SnAOsMkLShNkkrHA==", - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.24.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.24.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-object-super": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz", - "integrity": "sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-replace-supers": "^7.24.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.1.tgz", - "integrity": "sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.5.tgz", - "integrity": "sha512-xWCkmwKT+ihmA6l7SSTpk8e4qQl/274iNbSKRRS8mpqFR32ksy36+a+LWY8OXCCEefF8WFlnOHVsaDI2231wBg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-parameters": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.5.tgz", - "integrity": "sha512-9Co00MqZ2aoky+4j2jhofErthm6QVLKbpQrvz20c3CH9KQCLHyNB+t2ya4/UrRpQGR+Wrwjg9foopoeSdnHOkA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-private-methods": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz", - "integrity": "sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.1", - "@babel/helper-plugin-utils": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.5.tgz", - "integrity": "sha512-JM4MHZqnWR04jPMujQDTBVRnqxpLLpx2tkn7iPn+Hmsc0Gnb79yvRWOkvqFOx3Z7P7VxiRIR22c4eGSNj87OBQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.24.5", - "@babel/helper-plugin-utils": "^7.24.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-property-literals": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz", - "integrity": "sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-react-constant-elements": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.24.1.tgz", - "integrity": "sha512-QXp1U9x0R7tkiGB0FOk8o74jhnap0FlZ5gNkRIWdG3eP+SvMFg118e1zaWewDzgABb106QSKpVsD3Wgd8t6ifA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-regenerator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz", - "integrity": "sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "regenerator-transform": "^0.15.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz", - "integrity": "sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz", - "integrity": "sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-spread": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz", - "integrity": "sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz", - "integrity": "sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-template-literals": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz", - "integrity": "sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.5.tgz", - "integrity": "sha512-UTGnhYVZtTAjdwOTzT+sCyXmTn8AhaxOS/MjG9REclZ6ULHWF9KoCZur0HSGU7hk8PdBFKKbYe6+gqdXWz84Jg==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-typescript": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.5.tgz", - "integrity": "sha512-E0VWu/hk83BIFUWnsKZ4D81KXjN5L3MobvevOHErASk9IPwKHOkTgvqzvNo1yP/ePJWqqK2SpUR5z+KQbl6NVw==", - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.24.5", - "@babel/helper-plugin-utils": "^7.24.5", - "@babel/plugin-syntax-typescript": "^7.24.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz", - "integrity": "sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.1.tgz", - "integrity": "sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz", - "integrity": "sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.1.tgz", - "integrity": "sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA==", - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.15", - "@babel/helper-plugin-utils": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/preset-env": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.5.tgz", - "integrity": "sha512-UGK2ifKtcC8i5AI4cH+sbLLuLc2ktYSFJgBAXorKAsHUZmrQ1q6aQ6i3BvU24wWs2AAKqQB6kq3N9V9Gw1HiMQ==", - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.24.4", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-plugin-utils": "^7.24.5", - "@babel/helper-validator-option": "^7.23.5", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.1", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.1", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.24.1", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.24.1", - "@babel/plugin-syntax-import-attributes": "^7.24.1", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.24.1", - "@babel/plugin-transform-async-generator-functions": "^7.24.3", - "@babel/plugin-transform-async-to-generator": "^7.24.1", - "@babel/plugin-transform-block-scoped-functions": "^7.24.1", - "@babel/plugin-transform-block-scoping": "^7.24.5", - "@babel/plugin-transform-class-properties": "^7.24.1", - "@babel/plugin-transform-class-static-block": "^7.24.4", - "@babel/plugin-transform-classes": "^7.24.5", - "@babel/plugin-transform-computed-properties": "^7.24.1", - "@babel/plugin-transform-destructuring": "^7.24.5", - "@babel/plugin-transform-dotall-regex": "^7.24.1", - "@babel/plugin-transform-duplicate-keys": "^7.24.1", - "@babel/plugin-transform-dynamic-import": "^7.24.1", - "@babel/plugin-transform-exponentiation-operator": "^7.24.1", - "@babel/plugin-transform-export-namespace-from": "^7.24.1", - "@babel/plugin-transform-for-of": "^7.24.1", - "@babel/plugin-transform-function-name": "^7.24.1", - "@babel/plugin-transform-json-strings": "^7.24.1", - "@babel/plugin-transform-literals": "^7.24.1", - "@babel/plugin-transform-logical-assignment-operators": "^7.24.1", - "@babel/plugin-transform-member-expression-literals": "^7.24.1", - "@babel/plugin-transform-modules-amd": "^7.24.1", - "@babel/plugin-transform-modules-commonjs": "^7.24.1", - "@babel/plugin-transform-modules-systemjs": "^7.24.1", - "@babel/plugin-transform-modules-umd": "^7.24.1", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.24.1", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.1", - "@babel/plugin-transform-numeric-separator": "^7.24.1", - "@babel/plugin-transform-object-rest-spread": "^7.24.5", - "@babel/plugin-transform-object-super": "^7.24.1", - "@babel/plugin-transform-optional-catch-binding": "^7.24.1", - "@babel/plugin-transform-optional-chaining": "^7.24.5", - "@babel/plugin-transform-parameters": "^7.24.5", - "@babel/plugin-transform-private-methods": "^7.24.1", - "@babel/plugin-transform-private-property-in-object": "^7.24.5", - "@babel/plugin-transform-property-literals": "^7.24.1", - "@babel/plugin-transform-regenerator": "^7.24.1", - "@babel/plugin-transform-reserved-words": "^7.24.1", - "@babel/plugin-transform-shorthand-properties": "^7.24.1", - "@babel/plugin-transform-spread": "^7.24.1", - "@babel/plugin-transform-sticky-regex": "^7.24.1", - "@babel/plugin-transform-template-literals": "^7.24.1", - "@babel/plugin-transform-typeof-symbol": "^7.24.5", - "@babel/plugin-transform-unicode-escapes": "^7.24.1", - "@babel/plugin-transform-unicode-property-regex": "^7.24.1", - "@babel/plugin-transform-unicode-regex": "^7.24.1", - "@babel/plugin-transform-unicode-sets-regex": "^7.24.1", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.4", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.31.0", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@babel/preset-typescript": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.24.1.tgz", - "integrity": "sha512-1DBaMmRDpuYQBPWD8Pf/WEwCrtgRHxsZnP4mIy9G/X+hFfbI47Q2G4t1Paakld84+qsk2fSsUPMKg71jkoOOaQ==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-validator-option": "^7.23.5", - "@babel/plugin-syntax-jsx": "^7.24.1", - "@babel/plugin-transform-modules-commonjs": "^7.24.1", - "@babel/plugin-transform-typescript": "^7.24.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz", - "integrity": "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz", - "integrity": "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@svgr/babel-plugin-svg-dynamic-title": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz", - "integrity": "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@svgr/babel-plugin-svg-em-dimensions": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz", - "integrity": "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz", - "integrity": "sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@svgr/babel-plugin-transform-svg-component": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz", - "integrity": "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@svgr/babel-preset": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz", - "integrity": "sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==", - "license": "MIT", - "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "8.0.0", - "@svgr/babel-plugin-remove-jsx-attribute": "8.0.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "8.0.0", - "@svgr/babel-plugin-replace-jsx-attribute-value": "8.0.0", - "@svgr/babel-plugin-svg-dynamic-title": "8.0.0", - "@svgr/babel-plugin-svg-em-dimensions": "8.0.0", - "@svgr/babel-plugin-transform-react-native-svg": "8.1.0", - "@svgr/babel-plugin-transform-svg-component": "8.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/webpack/node_modules/@svgr/core": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz", - "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.21.3", - "@svgr/babel-preset": "8.1.0", - "camelcase": "^6.2.0", - "cosmiconfig": "^8.1.3", - "snake-case": "^3.0.4" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/webpack/node_modules/@svgr/hast-util-to-babel-ast": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz", - "integrity": "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.21.3", - "entities": "^4.4.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/webpack/node_modules/@svgr/plugin-jsx": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz", - "integrity": "sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.21.3", - "@svgr/babel-preset": "8.1.0", - "@svgr/hast-util-to-babel-ast": "8.0.0", - "svg-parser": "^2.0.4" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "*" - } - }, - "node_modules/@svgr/webpack/node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", - "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.2", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@svgr/webpack/node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz", - "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==", - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.1", - "core-js-compat": "^3.36.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@svgr/webpack/node_modules/babel-plugin-polyfill-corejs3/node_modules/core-js-compat": { - "version": "3.37.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz", - "integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/@svgr/webpack/node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", - "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", - "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", - "license": "MIT", - "dependencies": { - "defer-to-connect": "^2.0.1" - }, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "license": "ISC", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@types/acorn": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz", - "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==", - "license": "MIT", - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", - "license": "MIT", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/bonjour": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", - "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", - "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", - "license": "MIT", - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "node_modules/@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", - "license": "MIT", - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/eslint": { - "version": "8.56.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.2.tgz", - "integrity": "sha512-uQDwm1wFHmbBbCZCqAlq6Do9LYwByNZHWzXppSnay9SuwJ+VRbjkbLABer54kcPnMSlG6Fdiy2yaFXm/z9Z5gw==", - "license": "MIT", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "license": "MIT", - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "license": "MIT" - }, - "node_modules/@types/estree-jsx": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.4.tgz", - "integrity": "sha512-5idy3hvI9lAMqsyilBM+N+boaCf1MgoefbDxN6KEO5aK17TOHwFAYT9sjxzeKAiIWRUBgLxmZ9mPcnzZXtTcRQ==", - "license": "MIT", - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", - "license": "MIT", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.43", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz", - "integrity": "sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/gtag.js": { - "version": "0.0.12", - "resolved": "https://registry.npmjs.org/@types/gtag.js/-/gtag.js-0.0.12.tgz", - "integrity": "sha512-YQV9bUsemkzG81Ea295/nF/5GijnD2Af7QhEofh7xu+kvCN6RdodgNwwGWXB5GMI3NoyvQo0odNctoH/qLMIpg==", - "license": "MIT" - }, - "node_modules/@types/hast": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", - "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/history": { - "version": "4.7.11", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", - "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==", - "license": "MIT" - }, - "node_modules/@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", - "license": "MIT" - }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", - "license": "MIT" - }, - "node_modules/@types/http-errors": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", - "license": "MIT" - }, - "node_modules/@types/http-proxy": { - "version": "1.17.14", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", - "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "license": "MIT" - }, - "node_modules/@types/katex": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.16.7.tgz", - "integrity": "sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==", - "license": "MIT" - }, - "node_modules/@types/mdast": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", - "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/mdx": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.11.tgz", - "integrity": "sha512-HM5bwOaIQJIQbAYfax35HCKxx7a3KrK3nBtIqJgSOitivTD1y3oW9P3rxY9RkXYPUk7y/AjAohfHKmFpGE79zw==", - "license": "MIT" - }, - "node_modules/@types/mime": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.4.tgz", - "integrity": "sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw==", - "license": "MIT" - }, - "node_modules/@types/ms": { - "version": "0.7.34", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", - "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "20.11.20", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.20.tgz", - "integrity": "sha512-7/rR21OS+fq8IyHTgtLkDK949uzsa6n8BkziAKtPVpugIkO6D+/ooXMvzXxDnZrmtXVfjb1bKQafYpb8s89LOg==", - "license": "MIT", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/node-forge": { - "version": "1.3.11", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", - "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/parse-json": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", - "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", - "license": "MIT" - }, - "node_modules/@types/prismjs": { - "version": "1.26.3", - "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.3.tgz", - "integrity": "sha512-A0D0aTXvjlqJ5ZILMz3rNfDBOx9hHxLZYv2by47Sm/pqW35zzjusrZTryatjN/Rf8Us2gZrJD+KeHbUSTux1Cw==", - "license": "MIT" - }, - "node_modules/@types/prop-types": { - "version": "15.7.11", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", - "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==", - "license": "MIT" - }, - "node_modules/@types/qs": { - "version": "6.9.11", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", - "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==", - "license": "MIT" - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "license": "MIT" - }, - "node_modules/@types/react": { - "version": "18.2.57", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.57.tgz", - "integrity": "sha512-ZvQsktJgSYrQiMirAN60y4O/LRevIV8hUzSOSNB6gfR3/o3wCBFQx3sPwIYtuDMeiVgsSS3UzCV26tEzgnfvQw==", - "license": "MIT", - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-router": { - "version": "5.1.20", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", - "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", - "license": "MIT", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*" - } - }, - "node_modules/@types/react-router-config": { - "version": "5.0.11", - "resolved": "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.11.tgz", - "integrity": "sha512-WmSAg7WgqW7m4x8Mt4N6ZyKz0BubSj/2tVUMsAHp+Yd2AMwcSbeFq9WympT19p5heCFmF97R9eD5uUR/t4HEqw==", - "license": "MIT", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "^5.1.0" - } - }, - "node_modules/@types/react-router-dom": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", - "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", - "license": "MIT", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "license": "MIT" - }, - "node_modules/@types/sax": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz", - "integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/scheduler": { - "version": "0.16.8", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", - "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==", - "license": "MIT" - }, - "node_modules/@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", - "license": "MIT", - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/send/node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "license": "MIT" - }, - "node_modules/@types/serve-index": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", - "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", - "license": "MIT", - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", - "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", - "license": "MIT", - "dependencies": { - "@types/http-errors": "*", - "@types/mime": "*", - "@types/node": "*" - } - }, - "node_modules/@types/sockjs": { - "version": "0.3.36", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", - "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", - "license": "MIT" - }, - "node_modules/@types/ws": { - "version": "8.5.10", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", - "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yargs": { - "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "license": "MIT" - }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "license": "ISC" - }, - "node_modules/@vercel/analytics": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@vercel/analytics/-/analytics-1.2.2.tgz", - "integrity": "sha512-X0rctVWkQV1e5Y300ehVNqpOfSOufo7ieA5PIdna8yX/U7Vjz0GFsGf4qvAhxV02uQ2CVt7GYcrFfddXXK2Y4A==", - "license": "MPL-2.0", - "dependencies": { - "server-only": "^0.0.1" - }, - "peerDependencies": { - "next": ">= 13", - "react": "^18 || ^19" - }, - "peerDependenciesMeta": { - "next": { - "optional": true - }, - "react": { - "optional": true - } - } - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", - "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", - "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", - "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", - "license": "MIT", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", - "license": "Apache-2.0", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", - "license": "MIT" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", - "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", - "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", - "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", - "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", - "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "license": "BSD-3-Clause" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "license": "Apache-2.0" - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", - "license": "MIT", - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", - "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/address": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", - "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/algoliasearch": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.22.1.tgz", - "integrity": "sha512-jwydKFQJKIx9kIZ8Jm44SdpigFwRGPESaxZBaHSV0XWN2yBJAOT4mT7ppvlrpA4UGzz92pqFnVKr/kaZXrcreg==", - "license": "MIT", - "dependencies": { - "@algolia/cache-browser-local-storage": "4.22.1", - "@algolia/cache-common": "4.22.1", - "@algolia/cache-in-memory": "4.22.1", - "@algolia/client-account": "4.22.1", - "@algolia/client-analytics": "4.22.1", - "@algolia/client-common": "4.22.1", - "@algolia/client-personalization": "4.22.1", - "@algolia/client-search": "4.22.1", - "@algolia/logger-common": "4.22.1", - "@algolia/logger-console": "4.22.1", - "@algolia/requester-browser-xhr": "4.22.1", - "@algolia/requester-common": "4.22.1", - "@algolia/requester-node-http": "4.22.1", - "@algolia/transporter": "4.22.1" - } - }, - "node_modules/algoliasearch-helper": { - "version": "3.16.2", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.16.2.tgz", - "integrity": "sha512-Yl/Gu5Cq4Z5s/AJ0jR37OPI1H3+z7PHz657ibyaXgMOaWvPlZ3OACN13N+7HCLPUlB0BN+8BtmrG/CqTilowBA==", - "license": "MIT", - "dependencies": { - "@algolia/events": "^4.0.1" - }, - "peerDependencies": { - "algoliasearch": ">= 3.1 < 6" - } - }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "license": "ISC", - "dependencies": { - "string-width": "^4.1.0" - } - }, - "node_modules/ansi-align/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/ansi-align/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "engines": [ - "node >= 0.8.0" - ], - "license": "Apache-2.0", - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "license": "MIT" - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "license": "Python-2.0" - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "license": "MIT" - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/assert": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", - "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "is-nan": "^1.3.2", - "object-is": "^1.1.5", - "object.assign": "^4.1.4", - "util": "^0.12.5" - } - }, - "node_modules/astring": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/astring/-/astring-1.8.6.tgz", - "integrity": "sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==", - "license": "MIT", - "bin": { - "astring": "bin/astring" - } - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "license": "ISC", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/autoprefixer": { - "version": "10.4.17", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.17.tgz", - "integrity": "sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "browserslist": "^4.22.2", - "caniuse-lite": "^1.0.30001578", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "license": "MIT", - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/babel-loader": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", - "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", - "license": "MIT", - "dependencies": { - "find-cache-dir": "^4.0.0", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0", - "webpack": ">=5" - } - }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "license": "MIT", - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.8", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz", - "integrity": "sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==", - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.5.0", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz", - "integrity": "sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==", - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.5.0", - "core-js-compat": "^3.34.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz", - "integrity": "sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==", - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.5.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "license": "MIT" - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "license": "MIT" - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/bonjour-service": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", - "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "license": "ISC" - }, - "node_modules/boxen": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", - "integrity": "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==", - "license": "MIT", - "dependencies": { - "ansi-align": "^3.0.1", - "camelcase": "^6.2.0", - "chalk": "^4.1.2", - "cli-boxes": "^3.0.0", - "string-width": "^5.0.1", - "type-fest": "^2.5.0", - "widest-line": "^4.0.1", - "wrap-ansi": "^8.0.1" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "license": "MIT", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.24.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", - "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001669", - "electron-to-chromium": "^1.5.41", - "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.1" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "license": "MIT" - }, - "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacheable-lookup": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", - "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", - "license": "MIT", - "engines": { - "node": ">=14.16" - } - }, - "node_modules/cacheable-request": { - "version": "10.2.14", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", - "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", - "license": "MIT", - "dependencies": { - "@types/http-cache-semantics": "^4.0.2", - "get-stream": "^6.0.1", - "http-cache-semantics": "^4.1.1", - "keyv": "^4.5.3", - "mimic-response": "^4.0.0", - "normalize-url": "^8.0.0", - "responselike": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/cacheable-request/node_modules/mimic-response": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", - "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "license": "MIT", - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001687", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001687.tgz", - "integrity": "sha512-0S/FDhf4ZiqrTUiQ39dKeUjYRjkv7lOZU1Dgif2rIqrTzX/1wV2hfKu9TOm1IHkdSijfLswxTFzl/cvir+SLSQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/ccount": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/character-entities": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-html4": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", - "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-legacy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", - "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-reference-invalid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", - "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/cheerio": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "license": "MIT", - "dependencies": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" - }, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" - } - }, - "node_modules/cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cheerio-select/node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "license": "MIT", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/clean-css": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", - "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", - "license": "MIT", - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 10.0" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-boxes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", - "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-table3": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", - "license": "MIT", - "dependencies": { - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" - } - }, - "node_modules/cli-table3/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/cli-table3/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/clone-deep/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/clsx": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", - "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/collapse-white-space": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz", - "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" - }, - "node_modules/colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", - "license": "MIT" - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "license": "MIT" - }, - "node_modules/combine-promises": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.2.0.tgz", - "integrity": "sha512-VcQB1ziGD0NXrhKxiwyNbCDmRzs/OShMs2GqW2DlU2A/Sd0nQxE1oWDAE5O0ygSx5mgQOn9eIFh7yKPgFRVkPQ==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/comma-separated-tokens": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", - "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/common-path-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", - "license": "ISC" - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "license": "MIT", - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "license": "MIT", - "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/compression/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "license": "MIT" - }, - "node_modules/config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "license": "MIT", - "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "node_modules/configstore": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-6.0.0.tgz", - "integrity": "sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==", - "license": "BSD-2-Clause", - "dependencies": { - "dot-prop": "^6.0.1", - "graceful-fs": "^4.2.6", - "unique-string": "^3.0.0", - "write-file-atomic": "^3.0.3", - "xdg-basedir": "^5.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/yeoman/configstore?sponsor=1" - } - }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/consola": { - "version": "2.15.3", - "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", - "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", - "license": "MIT" - }, - "node_modules/content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "license": "MIT" - }, - "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "license": "MIT" - }, - "node_modules/copy-text-to-clipboard": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz", - "integrity": "sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/copy-webpack-plugin": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", - "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", - "license": "MIT", - "dependencies": { - "fast-glob": "^3.2.11", - "glob-parent": "^6.0.1", - "globby": "^13.1.1", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", - "license": "MIT", - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/copy-webpack-plugin/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/core-js": { - "version": "3.36.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.36.0.tgz", - "integrity": "sha512-mt7+TUBbTFg5+GngsAxeKBTl5/VS0guFeJacYge9OmHb+m058UwwIm41SE9T4Den7ClatV57B6TYTuJ0CX1MAw==", - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat": { - "version": "3.36.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.36.0.tgz", - "integrity": "sha512-iV9Pd/PsgjNWBXeq8XRtWVSgz2tKAfhfvBs7qxYty+RlRd+OCksaWmOnc4JKrTc1cToXL1N0s3l/vwlxPtdElw==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.22.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-pure": { - "version": "3.36.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.36.0.tgz", - "integrity": "sha512-cN28qmhRNgbMZZMc/RFu5w8pK9VJzpb2rJVR/lHuZJKwmXnoWOpXmMkxqBB514igkp1Hu8WGROsiOAzUcKdHOQ==", - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "license": "MIT" - }, - "node_modules/cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", - "license": "MIT", - "dependencies": { - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto-random-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", - "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", - "license": "MIT", - "dependencies": { - "type-fest": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/crypto-random-string/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/css-declaration-sorter": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz", - "integrity": "sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==", - "license": "ISC", - "engines": { - "node": "^14 || ^16 || >=18" - }, - "peerDependencies": { - "postcss": "^8.0.9" - } - }, - "node_modules/css-loader": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.10.0.tgz", - "integrity": "sha512-LTSA/jWbwdMlk+rhmElbDR2vbtQoTBPr7fkJE+mxrHj+7ru0hUmHafDRzWIjIHTwpitWVaqY2/UWGRca3yUgRw==", - "license": "MIT", - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.33", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.4", - "postcss-modules-scope": "^3.1.1", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/css-loader/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/css-loader/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/css-loader/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC" - }, - "node_modules/css-minimizer-webpack-plugin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-5.0.1.tgz", - "integrity": "sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg==", - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "cssnano": "^6.0.1", - "jest-worker": "^29.4.3", - "postcss": "^8.4.24", - "schema-utils": "^4.0.1", - "serialize-javascript": "^6.0.1" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@parcel/css": { - "optional": true - }, - "@swc/css": { - "optional": true - }, - "clean-css": { - "optional": true - }, - "csso": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "lightningcss": { - "optional": true - } - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/postcss": { - "version": "8.4.38", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", - "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-select/node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/css-select/node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/css-select/node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/css-select/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "license": "BSD-2-Clause", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "license": "MIT", - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "license": "BSD-2-Clause", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.1.2.tgz", - "integrity": "sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==", - "license": "MIT", - "dependencies": { - "cssnano-preset-default": "^6.1.2", - "lilconfig": "^3.1.1" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/cssnano-preset-default": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz", - "integrity": "sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "css-declaration-sorter": "^7.2.0", - "cssnano-utils": "^4.0.2", - "postcss-calc": "^9.0.1", - "postcss-colormin": "^6.1.0", - "postcss-convert-values": "^6.1.0", - "postcss-discard-comments": "^6.0.2", - "postcss-discard-duplicates": "^6.0.3", - "postcss-discard-empty": "^6.0.3", - "postcss-discard-overridden": "^6.0.2", - "postcss-merge-longhand": "^6.0.5", - "postcss-merge-rules": "^6.1.1", - "postcss-minify-font-values": "^6.1.0", - "postcss-minify-gradients": "^6.0.3", - "postcss-minify-params": "^6.1.0", - "postcss-minify-selectors": "^6.0.4", - "postcss-normalize-charset": "^6.0.2", - "postcss-normalize-display-values": "^6.0.2", - "postcss-normalize-positions": "^6.0.2", - "postcss-normalize-repeat-style": "^6.0.2", - "postcss-normalize-string": "^6.0.2", - "postcss-normalize-timing-functions": "^6.0.2", - "postcss-normalize-unicode": "^6.1.0", - "postcss-normalize-url": "^6.0.2", - "postcss-normalize-whitespace": "^6.0.2", - "postcss-ordered-values": "^6.0.2", - "postcss-reduce-initial": "^6.1.0", - "postcss-reduce-transforms": "^6.0.2", - "postcss-svgo": "^6.0.3", - "postcss-unique-selectors": "^6.0.4" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/cssnano-utils": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.2.tgz", - "integrity": "sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==", - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/csso": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", - "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", - "license": "MIT", - "dependencies": { - "css-tree": "~2.2.0" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/csso/node_modules/css-tree": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", - "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", - "license": "MIT", - "dependencies": { - "mdn-data": "2.0.28", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.28", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", - "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", - "license": "CC0-1.0" - }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "license": "MIT" - }, - "node_modules/debounce": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", - "license": "MIT" - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decode-named-character-reference": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", - "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", - "license": "MIT", - "dependencies": { - "character-entities": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "license": "MIT", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "license": "BSD-2-Clause", - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "license": "MIT", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/del": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", - "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", - "license": "MIT", - "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "license": "MIT" - }, - "node_modules/detect-port": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", - "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", - "license": "MIT", - "dependencies": { - "address": "^1.0.1", - "debug": "4" - }, - "bin": { - "detect": "bin/detect-port.js", - "detect-port": "bin/detect-port.js" - } - }, - "node_modules/detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", - "license": "MIT", - "dependencies": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "bin": { - "detect": "bin/detect-port", - "detect-port": "bin/detect-port" - }, - "engines": { - "node": ">= 4.2.1" - } - }, - "node_modules/detect-port-alt/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/detect-port-alt/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/devlop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", - "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", - "license": "MIT", - "dependencies": { - "dequal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dns-packet": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", - "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", - "license": "MIT", - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "license": "MIT", - "dependencies": { - "utila": "~0.4" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/dot-prop": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", - "license": "MIT", - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/dot-prop/node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "license": "MIT" - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "license": "MIT" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "license": "MIT" - }, - "node_modules/electron-to-chromium": { - "version": "1.5.72", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.72.tgz", - "integrity": "sha512-ZpSAUOZ2Izby7qnZluSrAlGgGQzucmFbN0n64dYzocYxnxV5ufurpj3VgEe4cUp7ir9LmeLxNYo8bVnlM8bQHw==", - "license": "ISC" - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "license": "MIT" - }, - "node_modules/emojilib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/emojilib/-/emojilib-2.4.0.tgz", - "integrity": "sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==", - "license": "MIT" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/emoticon": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-4.0.1.tgz", - "integrity": "sha512-dqx7eA9YaqyvYtUhJwT4rC1HIp82j5ybS1/vQ42ur+jBe17dJMwZE4+gvL1XadSFfxaPFFGt3Xsw+Y8akThDlw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-module-lexer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", - "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", - "license": "MIT" - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-goat": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz", - "integrity": "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "license": "MIT" - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-util-attach-comments": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz", - "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-build-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz", - "integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==", - "license": "MIT", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "devlop": "^1.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "estree-walker": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-is-identifier-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", - "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-to-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz", - "integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==", - "license": "MIT", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "astring": "^1.8.0", - "source-map": "^0.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-to-js/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "license": "BSD-3-Clause", - "engines": { - "node": ">= 8" - } - }, - "node_modules/estree-util-value-to-estree": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.0.1.tgz", - "integrity": "sha512-b2tdzTurEIbwRh+mKrEcaWfu1wgb8J1hVsgREg7FFiecWwK/PhO8X0kyc+0bIcKNtD4sqxIdNoRy6/p/TvECEA==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "is-plain-obj": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/remcohaszing" - } - }, - "node_modules/estree-util-visit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz", - "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==", - "license": "MIT", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eta": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/eta/-/eta-2.2.0.tgz", - "integrity": "sha512-UVQ72Rqjy/ZKQalzV5dCCJP80GrmPrMxh6NlNf+erV6ObL0ZFkhCstWRawS85z3smdr3d2wXPsZEY7rDPfGd2g==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "url": "https://github.com/eta-dev/eta?sponsor=1" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eval": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", - "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", - "dependencies": { - "@types/node": "*", - "require-like": ">= 0.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "license": "MIT" - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "license": "MIT", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/express/node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "license": "MIT" - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "license": "MIT" - }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "license": "MIT" - }, - "node_modules/fast-url-parser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", - "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", - "license": "MIT", - "dependencies": { - "punycode": "^1.3.2" - } - }, - "node_modules/fast-url-parser/node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fault": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", - "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", - "license": "MIT", - "dependencies": { - "format": "^0.2.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "license": "Apache-2.0", - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/feed": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", - "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", - "license": "MIT", - "dependencies": { - "xml-js": "^1.6.11" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "license": "MIT", - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/file-loader/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/filesize": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", - "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", - "license": "BSD-3-Clause", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/find-cache-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", - "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", - "license": "MIT", - "dependencies": { - "common-path-prefix": "^3.0.0", - "pkg-dir": "^7.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "license": "BSD-3-Clause", - "bin": { - "flat": "cli.js" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", - "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "license": "MIT", - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/fork-ts-checker-webpack-plugin": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz", - "integrity": "sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.8.3", - "@types/json-schema": "^7.0.5", - "chalk": "^4.1.0", - "chokidar": "^3.4.2", - "cosmiconfig": "^6.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "memfs": "^3.1.2", - "minimatch": "^3.0.4", - "schema-utils": "2.7.0", - "semver": "^7.3.2", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=10", - "yarn": ">=1.0.0" - }, - "peerDependencies": { - "eslint": ">= 6", - "typescript": ">= 2.7", - "vue-template-compiler": "*", - "webpack": ">= 4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - }, - "vue-template-compiler": { - "optional": true - } - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "license": "MIT", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "license": "MIT", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC" - }, - "node_modules/form-data-encoder": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", - "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", - "license": "MIT", - "engines": { - "node": ">= 14.17" - } - }, - "node_modules/format": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", - "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", - "license": "MIT", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://github.com/sponsors/rawify" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fs-monkey": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz", - "integrity": "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==", - "license": "Unlicense" - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", - "license": "ISC" - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/github-slugger": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", - "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==", - "license": "ISC" - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "license": "BSD-2-Clause" - }, - "node_modules/global-dirs": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", - "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", - "license": "MIT", - "dependencies": { - "ini": "2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/global-dirs/node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "license": "MIT", - "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "license": "MIT", - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/got": { - "version": "12.6.1", - "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", - "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", - "license": "MIT", - "dependencies": { - "@sindresorhus/is": "^5.2.0", - "@szmarczak/http-timer": "^5.0.1", - "cacheable-lookup": "^7.0.0", - "cacheable-request": "^10.2.8", - "decompress-response": "^6.0.0", - "form-data-encoder": "^2.1.2", - "get-stream": "^6.0.1", - "http2-wrapper": "^2.1.10", - "lowercase-keys": "^3.0.0", - "p-cancelable": "^3.0.0", - "responselike": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/got/node_modules/@sindresorhus/is": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", - "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "license": "ISC" - }, - "node_modules/gray-matter": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", - "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", - "license": "MIT", - "dependencies": { - "js-yaml": "^3.13.1", - "kind-of": "^6.0.2", - "section-matter": "^1.0.0", - "strip-bom-string": "^1.0.0" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/gray-matter/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/gray-matter/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "license": "MIT", - "dependencies": { - "duplexer": "^0.1.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "license": "MIT" - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-yarn": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-3.0.0.tgz", - "integrity": "sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/hasown": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", - "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hast-util-definition-list": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hast-util-definition-list/-/hast-util-definition-list-2.0.0.tgz", - "integrity": "sha512-EnkqD6a7R1fwyC9F5R6fu0ucpcwfkxjiga7/G8J7KU+uuUHVENzmgo/Da68fZBy9SZAkQOAC/8gK3m2BnuutUg==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.1", - "@types/mdast": "^4.0.1", - "@types/unist": "^3.0.0", - "hast-util-to-mdast": "^10.1.0", - "mdast-util-definition-list": "^2.0.0", - "mdast-util-phrasing": "^4.0.0" - } - }, - "node_modules/hast-util-embedded": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-embedded/-/hast-util-embedded-3.0.0.tgz", - "integrity": "sha512-naH8sld4Pe2ep03qqULEtvYr7EjrLK2QHY8KJR6RJkTUjPGObe1vnx585uzem2hGra+s1q08DZZpfgDVYRbaXA==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "hast-util-is-element": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-embedded/node_modules/hast-util-is-element": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz", - "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-from-dom": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/hast-util-from-dom/-/hast-util-from-dom-5.0.0.tgz", - "integrity": "sha512-d6235voAp/XR3Hh5uy7aGLbM3S4KamdW0WEgOaU1YoewnuYw4HXb5eRtv9g65m/RFGEfUY1Mw4UqCc5Y8L4Stg==", - "license": "ISC", - "dependencies": { - "@types/hast": "^3.0.0", - "hastscript": "^8.0.0", - "web-namespaces": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-from-html": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.1.tgz", - "integrity": "sha512-RXQBLMl9kjKVNkJTIO6bZyb2n+cUH8LFaSSzo82jiLT6Tfc+Pt7VQCS+/h3YwG4jaNE2TA2sdJisGWR+aJrp0g==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "devlop": "^1.1.0", - "hast-util-from-parse5": "^8.0.0", - "parse5": "^7.0.0", - "vfile": "^6.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-from-html-isomorphic": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hast-util-from-html-isomorphic/-/hast-util-from-html-isomorphic-2.0.0.tgz", - "integrity": "sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "hast-util-from-dom": "^5.0.0", - "hast-util-from-html": "^2.0.0", - "unist-util-remove-position": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-from-parse5": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.1.tgz", - "integrity": "sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "devlop": "^1.0.0", - "hastscript": "^8.0.0", - "property-information": "^6.0.0", - "vfile": "^6.0.0", - "vfile-location": "^5.0.0", - "web-namespaces": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-has-property": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-has-property/-/hast-util-has-property-3.0.0.tgz", - "integrity": "sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-is-body-ok-link": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-is-body-ok-link/-/hast-util-is-body-ok-link-3.0.0.tgz", - "integrity": "sha512-VFHY5bo2nY8HiV6nir2ynmEB1XkxzuUffhEGeVx7orbu/B1KaGyeGgMZldvMVx5xWrDlLLG/kQ6YkJAMkBEx0w==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-is-element": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-1.1.0.tgz", - "integrity": "sha512-oUmNua0bFbdrD/ELDSSEadRVtWZOf3iF6Lbv81naqsIV99RnSCieTbWuWCY8BAeEfKJTKl0gRdokv+dELutHGQ==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-parse-selector": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", - "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-phrasing": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/hast-util-phrasing/-/hast-util-phrasing-3.0.1.tgz", - "integrity": "sha512-6h60VfI3uBQUxHqTyMymMZnEbNl1XmEGtOxxKYL7stY2o601COo62AWAYBQR9lZbYXYSBoxag8UpPRXK+9fqSQ==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "hast-util-embedded": "^3.0.0", - "hast-util-has-property": "^3.0.0", - "hast-util-is-body-ok-link": "^3.0.0", - "hast-util-is-element": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-phrasing/node_modules/hast-util-is-element": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz", - "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-raw": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.0.2.tgz", - "integrity": "sha512-PldBy71wO9Uq1kyaMch9AHIghtQvIwxBUkv823pKmkTM3oV1JxtsTNYdevMxvUHqcnOAuO65JKU2+0NOxc2ksA==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "@ungap/structured-clone": "^1.0.0", - "hast-util-from-parse5": "^8.0.0", - "hast-util-to-parse5": "^8.0.0", - "html-void-elements": "^3.0.0", - "mdast-util-to-hast": "^13.0.0", - "parse5": "^7.0.0", - "unist-util-position": "^5.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0", - "web-namespaces": "^2.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-estree": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.0.tgz", - "integrity": "sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "devlop": "^1.0.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.0", - "mdast-util-mdx-jsx": "^3.0.0", - "mdast-util-mdxjs-esm": "^2.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "style-to-object": "^0.4.0", - "unist-util-position": "^5.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-html": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.0.tgz", - "integrity": "sha512-IVGhNgg7vANuUA2XKrT6sOIIPgaYZnmLx3l/CCOAK0PtgfoHrZwX7jCSYyFxHTrGmC6S9q8aQQekjp4JPZF+cw==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "ccount": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-raw": "^9.0.0", - "hast-util-whitespace": "^3.0.0", - "html-void-elements": "^3.0.0", - "mdast-util-to-hast": "^13.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "stringify-entities": "^4.0.0", - "zwitch": "^2.0.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-jsx-runtime": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.0.tgz", - "integrity": "sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "devlop": "^1.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "hast-util-whitespace": "^3.0.0", - "mdast-util-mdx-expression": "^2.0.0", - "mdast-util-mdx-jsx": "^3.0.0", - "mdast-util-mdxjs-esm": "^2.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "style-to-object": "^1.0.0", - "unist-util-position": "^5.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-jsx-runtime/node_modules/inline-style-parser": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.2.tgz", - "integrity": "sha512-EcKzdTHVe8wFVOGEYXiW9WmJXPjqi1T+234YpJr98RiFYKHV3cdy1+3mkTE+KHTHxFFLH51SfaGOoUdW+v7ViQ==", - "license": "MIT" - }, - "node_modules/hast-util-to-jsx-runtime/node_modules/style-to-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.5.tgz", - "integrity": "sha512-rDRwHtoDD3UMMrmZ6BzOW0naTjMsVZLIjsGleSKS/0Oz+cgCfAPRspaqJuE8rDzpKha/nEvnM0IF4seEAZUTKQ==", - "license": "MIT", - "dependencies": { - "inline-style-parser": "0.2.2" - } - }, - "node_modules/hast-util-to-mdast": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/hast-util-to-mdast/-/hast-util-to-mdast-10.1.0.tgz", - "integrity": "sha512-DsL/SvCK9V7+vfc6SLQ+vKIyBDXTk2KLSbfBYkH4zeF/uR1yBajHRhkzuaUSGOB1WJSTieJBdHwxlC+HLKvZZw==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@ungap/structured-clone": "^1.0.0", - "hast-util-phrasing": "^3.0.0", - "hast-util-to-html": "^9.0.0", - "hast-util-to-text": "^4.0.0", - "hast-util-whitespace": "^3.0.0", - "mdast-util-phrasing": "^4.0.0", - "mdast-util-to-hast": "^13.0.0", - "mdast-util-to-string": "^4.0.0", - "rehype-minify-whitespace": "^6.0.0", - "trim-trailing-lines": "^2.0.0", - "unist-util-position": "^5.0.0", - "unist-util-visit": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-parse5": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz", - "integrity": "sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "devlop": "^1.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "web-namespaces": "^2.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-text": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.0.tgz", - "integrity": "sha512-EWiE1FSArNBPUo1cKWtzqgnuRQwEeQbQtnFJRYV1hb1BWDgrAlBU0ExptvZMM/KSA82cDpm2sFGf3Dmc5Mza3w==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "hast-util-is-element": "^3.0.0", - "unist-util-find-after": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-text/node_modules/hast-util-is-element": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz", - "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-whitespace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", - "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hastscript": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-8.0.0.tgz", - "integrity": "sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-parse-selector": "^4.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "license": "MIT", - "bin": { - "he": "bin/he" - } - }, - "node_modules/history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "license": "BSD-3-Clause", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "license": "MIT" - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/hpack.js/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT" - }, - "node_modules/hpack.js/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/html-entities": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", - "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ], - "license": "MIT" - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "license": "MIT" - }, - "node_modules/html-minifier-terser": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz", - "integrity": "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==", - "license": "MIT", - "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "~5.3.2", - "commander": "^10.0.0", - "entities": "^4.4.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.15.1" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": "^14.13.1 || >=16.0.0" - } - }, - "node_modules/html-minifier-terser/node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "license": "MIT", - "engines": { - "node": ">=14" - } - }, - "node_modules/html-tags": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", - "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/html-void-elements": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", - "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/html-webpack-plugin": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz", - "integrity": "sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw==", - "license": "MIT", - "dependencies": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/html-webpack-plugin" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.20.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/html-webpack-plugin/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, - "node_modules/html-webpack-plugin/node_modules/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "license": "MIT", - "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "license": "BSD-2-Clause" - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "license": "MIT" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "license": "MIT" - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "license": "MIT", - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "license": "MIT", - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, - "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/http2-wrapper": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", - "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", - "license": "MIT", - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.2.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/image-size": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.1.1.tgz", - "integrity": "sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==", - "license": "MIT", - "dependencies": { - "queue": "6.0.2" - }, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=16.x" - } - }, - "node_modules/immer": { - "version": "9.0.21", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", - "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-lazy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/infima": { - "version": "0.2.0-alpha.43", - "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.43.tgz", - "integrity": "sha512-2uw57LvUqW0rK/SWYnd/2rRfxNA5DDNOh33jxF7fy46VWoNhGxiUQyVZHbBMjQ33mQem0cjdDVwgWVAmlRfgyQ==", - "license": "MIT", - "engines": { - "node": ">=12" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "license": "ISC" - }, - "node_modules/inline-style-parser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", - "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==", - "license": "MIT" - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/ipaddr.js": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", - "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/is-alphabetical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", - "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-alphanumerical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", - "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", - "license": "MIT", - "dependencies": { - "is-alphabetical": "^2.0.0", - "is-decimal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "license": "MIT" - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", - "license": "MIT", - "dependencies": { - "ci-info": "^3.2.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", - "license": "MIT", - "dependencies": { - "hasown": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-decimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", - "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-hexadecimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", - "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "license": "MIT", - "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-nan": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", - "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-npm": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.0.0.tgz", - "integrity": "sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-reference": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", - "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", - "license": "MIT", - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", - "license": "MIT", - "dependencies": { - "which-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "license": "MIT" - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-yarn-global": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.4.1.tgz", - "integrity": "sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==", - "license": "MIT", - "engines": { - "node": ">=12" - } - }, - "node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "license": "ISC" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jiti": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", - "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", - "license": "MIT", - "bin": { - "jiti": "bin/jiti.js" - } - }, - "node_modules/joi": { - "version": "17.12.2", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.12.2.tgz", - "integrity": "sha512-RonXAIzCiHLc8ss3Ibuz45u28GOsWE1UpfDXLbN/9NKbL4tCJf8TWYVKsoYuuh+sAUt7fsSNpA+r2+TBA6Wjmw==", - "license": "BSD-3-Clause", - "dependencies": { - "@hapi/hoek": "^9.3.0", - "@hapi/topo": "^5.1.0", - "@sideway/address": "^4.1.5", - "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "license": "MIT" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "license": "MIT" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/katex": { - "version": "0.16.9", - "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.9.tgz", - "integrity": "sha512-fsSYjWS0EEOwvy81j3vRA8TEAhQhKiqO+FQaKWp0m39qwOzHVBgAUBIXWj1pB+O2W3fIpNa6Y9KSKCVbfPhyAQ==", - "funding": [ - "https://opencollective.com/katex", - "https://github.com/sponsors/katex" - ], - "license": "MIT", - "dependencies": { - "commander": "^8.3.0" - }, - "bin": { - "katex": "cli.js" - } - }, - "node_modules/katex/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/latest-version": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz", - "integrity": "sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==", - "license": "MIT", - "dependencies": { - "package-json": "^8.1.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/launch-editor": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz", - "integrity": "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==", - "license": "MIT", - "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.8.1" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/lilconfig": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", - "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "license": "MIT" - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "license": "MIT", - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "license": "MIT" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "license": "MIT" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "license": "MIT" - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "license": "MIT" - }, - "node_modules/longest-streak": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", - "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "license": "MIT", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lowercase-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", - "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/markdown-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz", - "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==", - "license": "MIT", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/markdown-table": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz", - "integrity": "sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/mdast-util-definition-list": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-definition-list/-/mdast-util-definition-list-2.0.0.tgz", - "integrity": "sha512-aFWuASQs77BJndNSDcNdvB1HRqWZBptcEjwv67mnPbaAZsfwMHxI8MwoQxAz4I2bHx41hft/HDRC57ZkhpayOQ==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.1", - "@types/unist": "^3.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-hast": "^13.0.2", - "mdast-util-to-markdown": "^2.1.0", - "micromark-extension-definition-list": "^2.0.0", - "unist-builder": "^4.0.0" - } - }, - "node_modules/mdast-util-directive": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.0.0.tgz", - "integrity": "sha512-JUpYOqKI4mM3sZcNxmF/ox04XYFFkNwr0CFlrQIkCwbvH0xzMCqkMqAde9wRd80VAhaUrwFwKm2nxretdT1h7Q==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "parse-entities": "^4.0.0", - "stringify-entities": "^4.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-find-and-replace": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz", - "integrity": "sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "escape-string-regexp": "^5.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mdast-util-from-markdown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz", - "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark": "^4.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-decode-string": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-frontmatter": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz", - "integrity": "sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "escape-string-regexp": "^5.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "micromark-extension-frontmatter": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-frontmatter/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mdast-util-gfm": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz", - "integrity": "sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==", - "license": "MIT", - "dependencies": { - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-gfm-autolink-literal": "^2.0.0", - "mdast-util-gfm-footnote": "^2.0.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.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-autolink-literal": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.0.tgz", - "integrity": "sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "ccount": "^2.0.0", - "devlop": "^1.0.0", - "mdast-util-find-and-replace": "^3.0.0", - "micromark-util-character": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-footnote": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz", - "integrity": "sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.1.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-strikethrough": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", - "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", - "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "markdown-table": "^3.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-task-list-item": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", - "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-math": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-math/-/mdast-util-math-3.0.0.tgz", - "integrity": "sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "longest-streak": "^3.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.1.0", - "unist-util-remove-position": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdx": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz", - "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==", - "license": "MIT", - "dependencies": { - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-mdx-expression": "^2.0.0", - "mdast-util-mdx-jsx": "^3.0.0", - "mdast-util-mdxjs-esm": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdx-expression": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.0.tgz", - "integrity": "sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==", - "license": "MIT", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdx-jsx": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.0.tgz", - "integrity": "sha512-A8AJHlR7/wPQ3+Jre1+1rq040fX9A4Q1jG8JxmSNp/PLPHg80A6475wxTp3KzHpApFH6yWxFotHrJQA3dXP6/w==", - "license": "MIT", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "ccount": "^2.0.0", - "devlop": "^1.1.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "parse-entities": "^4.0.0", - "stringify-entities": "^4.0.0", - "unist-util-remove-position": "^5.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdxjs-esm": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", - "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", - "license": "MIT", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-phrasing": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", - "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-hast": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.1.0.tgz", - "integrity": "sha512-/e2l/6+OdGp/FB+ctrJ9Avz71AN/GRH3oi/3KAx/kMnoUsD6q0woXlDT8lLEeViVKE7oZxE7RXzvO3T8kF2/sA==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@ungap/structured-clone": "^1.0.0", - "devlop": "^1.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "trim-lines": "^3.0.0", - "unist-util-position": "^5.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-markdown": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz", - "integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "@types/unist": "^3.0.0", - "longest-streak": "^3.0.0", - "mdast-util-phrasing": "^4.0.0", - "mdast-util-to-string": "^4.0.0", - "micromark-util-decode-string": "^2.0.0", - "unist-util-visit": "^5.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", - "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "license": "CC0-1.0" - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.6.0.tgz", - "integrity": "sha512-EGowvkkgbMcIChjMTMkESFDbZeSh8xZ7kNSF0hAiAN4Jh6jgHCRS0Ga/+C8y6Au+oqpezRHCfPsmJ2+DwAgiwQ==", - "license": "Unlicense", - "dependencies": { - "fs-monkey": "^1.0.4" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "license": "MIT" - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromark": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", - "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-core-commonmark": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.0.tgz", - "integrity": "sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "devlop": "^1.0.0", - "micromark-factory-destination": "^2.0.0", - "micromark-factory-label": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-factory-title": "^2.0.0", - "micromark-factory-whitespace": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-html-tag-name": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-subtokenize": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-definition-list": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-definition-list/-/micromark-extension-definition-list-2.0.0.tgz", - "integrity": "sha512-92SSfTdG7YIXiYj60sNDPoo3MTJXK94LRLfKsoDHgDqiE61p4w4pzdyCc9SuoQ74/bzb5SXPVK11kjlYnIjzKA==", - "license": "MIT", - "dependencies": { - "assert": "^2.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.1", - "micromark-util-chunked": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "ts-dedent": "^2.2.0" - } - }, - "node_modules/micromark-extension-directive": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-3.0.0.tgz", - "integrity": "sha512-61OI07qpQrERc+0wEysLHMvoiO3s2R56x5u7glHq2Yqq6EHbH4dW25G9GfDdGCDYqA21KE6DWgNSzxSwHc2hSg==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-factory-whitespace": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "parse-entities": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-frontmatter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz", - "integrity": "sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==", - "license": "MIT", - "dependencies": { - "fault": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", - "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", - "license": "MIT", - "dependencies": { - "micromark-extension-gfm-autolink-literal": "^2.0.0", - "micromark-extension-gfm-footnote": "^2.0.0", - "micromark-extension-gfm-strikethrough": "^2.0.0", - "micromark-extension-gfm-table": "^2.0.0", - "micromark-extension-gfm-tagfilter": "^2.0.0", - "micromark-extension-gfm-task-list-item": "^2.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-autolink-literal": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.0.0.tgz", - "integrity": "sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg==", - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-footnote": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.0.0.tgz", - "integrity": "sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-strikethrough": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.0.0.tgz", - "integrity": "sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.0.0.tgz", - "integrity": "sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-tagfilter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", - "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", - "license": "MIT", - "dependencies": { - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-task-list-item": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.0.1.tgz", - "integrity": "sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-math": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-math/-/micromark-extension-math-3.1.0.tgz", - "integrity": "sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==", - "license": "MIT", - "dependencies": { - "@types/katex": "^0.16.0", - "devlop": "^1.0.0", - "katex": "^0.16.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-mdx-expression": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.0.tgz", - "integrity": "sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "micromark-factory-mdx-expression": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-events-to-acorn": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-mdx-jsx": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.0.tgz", - "integrity": "sha512-uvhhss8OGuzR4/N17L1JwvmJIpPhAd8oByMawEKx6NVdBCbesjH4t+vjEp3ZXft9DwvlKSD07fCeI44/N0Vf2w==", - "license": "MIT", - "dependencies": { - "@types/acorn": "^4.0.0", - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "estree-util-is-identifier-name": "^3.0.0", - "micromark-factory-mdx-expression": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-mdx-md": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz", - "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==", - "license": "MIT", - "dependencies": { - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-mdxjs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz", - "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==", - "license": "MIT", - "dependencies": { - "acorn": "^8.0.0", - "acorn-jsx": "^5.0.0", - "micromark-extension-mdx-expression": "^3.0.0", - "micromark-extension-mdx-jsx": "^3.0.0", - "micromark-extension-mdx-md": "^2.0.0", - "micromark-extension-mdxjs-esm": "^3.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-mdxjs-esm": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz", - "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-events-to-acorn": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unist-util-position-from-estree": "^2.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-factory-destination": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz", - "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-label": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz", - "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-mdx-expression": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.1.tgz", - "integrity": "sha512-F0ccWIUHRLRrYp5TC9ZYXmZo+p2AM13ggbsW4T0b5CRKP8KHVRB8t4pwtBgTxtjRmwrK0Irwm7vs2JOZabHZfg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "devlop": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-events-to-acorn": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unist-util-position-from-estree": "^2.0.0", - "vfile-message": "^4.0.0" - } - }, - "node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-title": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz", - "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-factory-whitespace": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz", - "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-chunked": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", - "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-classify-character": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", - "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-combine-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz", - "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-chunked": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-numeric-character-reference": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", - "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-decode-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz", - "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-decode-numeric-character-reference": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-encode": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", - "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-events-to-acorn": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.2.tgz", - "integrity": "sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "@types/acorn": "^4.0.0", - "@types/estree": "^1.0.0", - "@types/unist": "^3.0.0", - "devlop": "^1.0.0", - "estree-util-visit": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "vfile-message": "^4.0.0" - } - }, - "node_modules/micromark-util-html-tag-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz", - "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-normalize-identifier": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", - "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-resolve-all": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", - "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-sanitize-uri": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", - "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-subtokenize": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.0.tgz", - "integrity": "sha512-vc93L1t+gpR3p8jxeVdaYlbV2jTYteDje19rNSS/H5dlhxUYll5Fy6vJ2cDwP8RnsXi818yGty1ayP55y3W6fg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-types": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", - "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "license": "MIT", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.8.0.tgz", - "integrity": "sha512-CxmUYPFcTgET1zImteG/LZOy/4T5rTojesQXkSNBiquhydn78tfbCE9sjIjnJ/UcjNjOC1bphTCCW5rrS7cXAg==", - "license": "MIT", - "dependencies": { - "schema-utils": "^4.0.0", - "tapable": "^2.2.1" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "license": "ISC" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mrmime": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", - "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "license": "MIT" - }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "license": "MIT", - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "license": "MIT" - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "license": "MIT", - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/node-emoji": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-2.1.3.tgz", - "integrity": "sha512-E2WEOVsgs7O16zsURJ/eH8BqhF029wGpEOnv7Urwdo2wmQanOACwJQh0devF9D9RhoZru0+9JXIS0dBXIAz+lA==", - "license": "MIT", - "dependencies": { - "@sindresorhus/is": "^4.6.0", - "char-regex": "^1.0.2", - "emojilib": "^2.4.0", - "skin-tone": "^2.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "license": "(BSD-3-Clause OR GPL-2.0)", - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-releases": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", - "license": "MIT" - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz", - "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==", - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nprogress": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", - "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==", - "license": "MIT" - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "license": "MIT" - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "license": "MIT", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "license": "(WTFPL OR MIT)", - "bin": { - "opener": "bin/opener-bin.js" - } - }, - "node_modules/p-cancelable": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", - "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", - "license": "MIT", - "engines": { - "node": ">=12.20" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "license": "MIT", - "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/package-json": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-8.1.1.tgz", - "integrity": "sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==", - "license": "MIT", - "dependencies": { - "got": "^12.1.0", - "registry-auth-token": "^5.0.1", - "registry-url": "^6.0.0", - "semver": "^7.3.7" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/package-json/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/package-json/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/package-json/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC" - }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "license": "MIT", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-entities": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz", - "integrity": "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "character-entities": "^2.0.0", - "character-entities-legacy": "^3.0.0", - "character-reference-invalid": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "is-alphanumerical": "^2.0.0", - "is-decimal": "^2.0.0", - "is-hexadecimal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/parse-entities/node_modules/@types/unist": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", - "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", - "license": "MIT" - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-numeric-range": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", - "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==", - "license": "ISC" - }, - "node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "license": "MIT", - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", - "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", - "license": "MIT", - "dependencies": { - "domhandler": "^5.0.2", - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", - "license": "(WTFPL OR MIT)" - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "license": "MIT" - }, - "node_modules/path-to-regexp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", - "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==", - "license": "MIT" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/periscopic": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", - "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^3.0.0", - "is-reference": "^3.0.0" - } - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pkg-dir": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", - "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", - "license": "MIT", - "dependencies": { - "find-up": "^6.3.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "license": "MIT", - "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "license": "MIT", - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "license": "MIT", - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "license": "MIT", - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/pkg-dir/node_modules/yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", - "license": "MIT", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "license": "MIT", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "license": "MIT", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "license": "MIT", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "license": "MIT", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/possible-typed-array-names": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/postcss": { - "version": "8.4.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", - "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-calc": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz", - "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.11", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.2.2" - } - }, - "node_modules/postcss-colormin": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.1.0.tgz", - "integrity": "sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "caniuse-api": "^3.0.0", - "colord": "^2.9.3", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-convert-values": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz", - "integrity": "sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-discard-comments": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz", - "integrity": "sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==", - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-discard-duplicates": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz", - "integrity": "sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==", - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-discard-empty": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz", - "integrity": "sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==", - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-discard-overridden": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz", - "integrity": "sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==", - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-loader": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.4.tgz", - "integrity": "sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A==", - "license": "MIT", - "dependencies": { - "cosmiconfig": "^8.3.5", - "jiti": "^1.20.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - } - }, - "node_modules/postcss-loader/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/postcss-loader/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/postcss-loader/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC" - }, - "node_modules/postcss-merge-longhand": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz", - "integrity": "sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^6.1.1" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-merge-rules": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz", - "integrity": "sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^4.0.2", - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-font-values": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz", - "integrity": "sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-gradients": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz", - "integrity": "sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==", - "license": "MIT", - "dependencies": { - "colord": "^2.9.3", - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-params": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz", - "integrity": "sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-minify-selectors": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz", - "integrity": "sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.4.tgz", - "integrity": "sha512-L4QzMnOdVwRm1Qb8m4x8jsZzKAaPAgrUF1r/hjDR2Xj7R+8Zsf97jAlSQzWtKx5YNiNGN8QxmPFIc/sh+RQl+Q==", - "license": "MIT", - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default/node_modules/postcss-selector-parser": { - "version": "6.0.15", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", - "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.1.1.tgz", - "integrity": "sha512-uZgqzdTleelWjzJY+Fhti6F3C9iF1JR/dODLs/JDefozYcKTBCdD8BIl6nNPbTbcLnGrk56hzwZC2DaGNvYjzA==", - "license": "ISC", - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope/node_modules/postcss-selector-parser": { - "version": "6.0.15", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", - "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "license": "ISC", - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-normalize-charset": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz", - "integrity": "sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==", - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-display-values": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz", - "integrity": "sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-positions": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz", - "integrity": "sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-repeat-style": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz", - "integrity": "sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-string": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz", - "integrity": "sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-timing-functions": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz", - "integrity": "sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-unicode": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz", - "integrity": "sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-url": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz", - "integrity": "sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-normalize-whitespace": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz", - "integrity": "sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-ordered-values": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz", - "integrity": "sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==", - "license": "MIT", - "dependencies": { - "cssnano-utils": "^4.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-reduce-initial": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz", - "integrity": "sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "caniuse-api": "^3.0.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-reduce-transforms": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz", - "integrity": "sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz", - "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-svgo": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.3.tgz", - "integrity": "sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^3.2.0" - }, - "engines": { - "node": "^14 || ^16 || >= 18" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-unique-selectors": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz", - "integrity": "sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "license": "MIT" - }, - "node_modules/postcss/node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", - "license": "MIT", - "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" - } - }, - "node_modules/pretty-time": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", - "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/prism-react-renderer": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.3.1.tgz", - "integrity": "sha512-Rdf+HzBLR7KYjzpJ1rSoxT9ioO85nZngQEoFIhL07XhtJHlCU3SOz0GJ6+qvMyQe0Se+BV3qpe6Yd/NmQF5Juw==", - "license": "MIT", - "dependencies": { - "@types/prismjs": "^1.26.0", - "clsx": "^2.0.0" - }, - "peerDependencies": { - "react": ">=16.0.0" - } - }, - "node_modules/prism-react-renderer/node_modules/clsx": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz", - "integrity": "sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/prismjs": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", - "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "license": "MIT" - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "license": "MIT", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/property-information": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.4.1.tgz", - "integrity": "sha512-OHYtXfu5aI2sS2LWFSN5rgJjrQ4pCy8i1jubJLe2QvMF8JJ++HXTUIVWFLfXJoaOfvYYjk2SN8J2wFUWIGXT4w==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", - "license": "ISC" - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-addr/node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pupa": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.1.0.tgz", - "integrity": "sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==", - "license": "MIT", - "dependencies": { - "escape-goat": "^4.0.0" - }, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", - "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", - "license": "MIT", - "dependencies": { - "inherits": "~2.0.3" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dev-utils": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", - "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.16.0", - "address": "^1.1.2", - "browserslist": "^4.18.1", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.3", - "detect-port-alt": "^1.1.6", - "escape-string-regexp": "^4.0.0", - "filesize": "^8.0.6", - "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^6.5.0", - "global-modules": "^2.0.0", - "globby": "^11.0.4", - "gzip-size": "^6.0.0", - "immer": "^9.0.7", - "is-root": "^2.1.0", - "loader-utils": "^3.2.0", - "open": "^8.4.0", - "pkg-up": "^3.1.0", - "prompts": "^2.4.2", - "react-error-overlay": "^6.0.11", - "recursive-readdir": "^2.2.2", - "shell-quote": "^1.7.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/react-dev-utils/node_modules/loader-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", - "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", - "license": "MIT", - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - }, - "peerDependencies": { - "react": "^18.2.0" - } - }, - "node_modules/react-error-overlay": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", - "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==", - "license": "MIT" - }, - "node_modules/react-fast-compare": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", - "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==", - "license": "MIT" - }, - "node_modules/react-helmet-async": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz", - "integrity": "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==", - "license": "Apache-2.0", - "dependencies": { - "@babel/runtime": "^7.12.5", - "invariant": "^2.2.4", - "prop-types": "^15.7.2", - "react-fast-compare": "^3.2.0", - "shallowequal": "^1.1.0" - }, - "peerDependencies": { - "react": "^16.6.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/react-icons": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.12.0.tgz", - "integrity": "sha512-IBaDuHiShdZqmfc/TwHu6+d6k2ltNCf3AszxNmjJc1KUfXdEeRJOKyNvLmAHaarhzGmTSVygNdyu8/opXv2gaw==", - "license": "MIT", - "peerDependencies": { - "react": "*" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "license": "MIT" - }, - "node_modules/react-json-view-lite": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/react-json-view-lite/-/react-json-view-lite-1.2.1.tgz", - "integrity": "sha512-Itc0g86fytOmKZoIoJyGgvNqohWSbh3NXIKNgH6W6FT9PC1ck4xas1tT3Rr/b3UlFXyA9Jjaw9QSXdZy2JwGMQ==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "react": "^16.13.1 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/react-loadable": { - "name": "@docusaurus/react-loadable", - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-6.0.0.tgz", - "integrity": "sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ==", - "license": "MIT", - "dependencies": { - "@types/react": "*" - }, - "peerDependencies": { - "react": "*" - } - }, - "node_modules/react-loadable-ssr-addon-v5-slorber": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz", - "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.3" - }, - "engines": { - "node": ">=10.13.0" - }, - "peerDependencies": { - "react-loadable": "*", - "webpack": ">=4.41.1 || 5.x" - } - }, - "node_modules/react-router": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", - "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-router-config": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", - "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.1.2" - }, - "peerDependencies": { - "react": ">=15", - "react-router": ">=5" - } - }, - "node_modules/react-router-dom": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", - "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.3.4", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-router/node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "license": "MIT", - "dependencies": { - "isarray": "0.0.1" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/reading-time": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz", - "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==", - "license": "MIT" - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/recursive-readdir": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", - "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", - "license": "MIT", - "dependencies": { - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "license": "MIT" - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", - "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "license": "MIT" - }, - "node_modules/regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "license": "MIT", - "dependencies": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/registry-auth-token": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", - "integrity": "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==", - "license": "MIT", - "dependencies": { - "@pnpm/npm-conf": "^2.1.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/registry-url": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", - "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", - "license": "MIT", - "dependencies": { - "rc": "1.2.8" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "license": "BSD-2-Clause", - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/rehype-katex": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/rehype-katex/-/rehype-katex-7.0.1.tgz", - "integrity": "sha512-OiM2wrZ/wuhKkigASodFoo8wimG3H12LWQaH8qSPVJn9apWKFSH3YOCtbKpBorTVw/eI7cuT21XBbvwEswbIOA==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/katex": "^0.16.0", - "hast-util-from-html-isomorphic": "^2.0.0", - "hast-util-to-text": "^4.0.0", - "katex": "^0.16.0", - "unist-util-visit-parents": "^6.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-minify-whitespace": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/rehype-minify-whitespace/-/rehype-minify-whitespace-6.0.0.tgz", - "integrity": "sha512-i9It4YHR0Sf3GsnlR5jFUKXRr9oayvEk9GKQUkwZv6hs70OH9q3OCZrq9PpLvIGKt3W+JxBOxCidNVpH/6rWdA==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "hast-util-embedded": "^3.0.0", - "hast-util-is-element": "^3.0.0", - "hast-util-whitespace": "^3.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-minify-whitespace/node_modules/hast-util-is-element": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz", - "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-raw": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", - "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "hast-util-raw": "^9.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/remark-definition-list": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-definition-list/-/remark-definition-list-2.0.0.tgz", - "integrity": "sha512-OOJ0zUrfUGITUNxOBnsipyFUjqq1m4AgYOqQk10jDXyz+RoODJL3qYvRn8qzYQDzRnz1wlCP3dbDEOpl05LlQw==", - "license": "MIT", - "dependencies": { - "hast-util-definition-list": "^2.0.0", - "mdast-util-definition-list": "^2.0.0", - "micromark-extension-definition-list": "^2.0.0" - } - }, - "node_modules/remark-directive": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-directive/-/remark-directive-3.0.0.tgz", - "integrity": "sha512-l1UyWJ6Eg1VPU7Hm/9tt0zKtReJQNOA4+iDMAxTyZNWnJnFlbS/7zhiel/rogTLQ2vMYwDzSJa4BiVNqGlqIMA==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-directive": "^3.0.0", - "micromark-extension-directive": "^3.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-emoji": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-4.0.1.tgz", - "integrity": "sha512-fHdvsTR1dHkWKev9eNyhTo4EFwbUvJ8ka9SgeWkMPYFX4WoI7ViVBms3PjlQYgw5TLvNQso3GUB/b/8t3yo+dg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.2", - "emoticon": "^4.0.1", - "mdast-util-find-and-replace": "^3.0.1", - "node-emoji": "^2.1.0", - "unified": "^11.0.4" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/remark-frontmatter": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-5.0.0.tgz", - "integrity": "sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-frontmatter": "^2.0.0", - "micromark-extension-frontmatter": "^2.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-gfm": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.0.tgz", - "integrity": "sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-gfm": "^3.0.0", - "micromark-extension-gfm": "^3.0.0", - "remark-parse": "^11.0.0", - "remark-stringify": "^11.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-math": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/remark-math/-/remark-math-6.0.0.tgz", - "integrity": "sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-math": "^3.0.0", - "micromark-extension-math": "^3.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-mdx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.0.1.tgz", - "integrity": "sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA==", - "license": "MIT", - "dependencies": { - "mdast-util-mdx": "^3.0.0", - "micromark-extension-mdxjs": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-parse": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", - "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-from-markdown": "^2.0.0", - "micromark-util-types": "^2.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-rehype": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.0.tgz", - "integrity": "sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==", - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "mdast-util-to-hast": "^13.0.0", - "unified": "^11.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-stringify": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", - "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-to-markdown": "^2.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "license": "MIT", - "dependencies": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - } - }, - "node_modules/renderkid/node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "license": "BSD-2-Clause", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-like": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", - "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==", - "engines": { - "node": "*" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "license": "MIT" - }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "license": "MIT", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "license": "MIT" - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==", - "license": "MIT" - }, - "node_modules/responselike": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", - "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", - "license": "MIT", - "dependencies": { - "lowercase-keys": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rtl-detect": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.1.2.tgz", - "integrity": "sha512-PGMBq03+TTG/p/cRB7HCLKJ1MgDIi07+QU1faSjiYRfmY5UsAttV9Hs08jDAHVwcOwmVLcSJkpwyfXszVjWfIQ==", - "license": "BSD-3-Clause" - }, - "node_modules/rtlcss": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-4.1.1.tgz", - "integrity": "sha512-/oVHgBtnPNcggP2aVXQjSy6N1mMAfHg4GSag0QtZBlD5bdDgAHwr4pydqJGd+SUCu9260+Pjqbjwtvu7EMH1KQ==", - "license": "MIT", - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0", - "postcss": "^8.4.21", - "strip-json-comments": "^3.1.1" - }, - "bin": { - "rtlcss": "bin/rtlcss.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" - }, - "node_modules/sax": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", - "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==", - "license": "ISC" - }, - "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/schema-utils/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/schema-utils/node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/schema-utils/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/schema-utils/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT" - }, - "node_modules/search-insights": { - "version": "2.17.3", - "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.17.3.tgz", - "integrity": "sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==", - "license": "MIT", - "peer": true - }, - "node_modules/section-matter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", - "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", - "license": "MIT", - "dependencies": { - "extend-shallow": "^2.0.1", - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "license": "MIT" - }, - "node_modules/selfsigned": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", - "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", - "license": "MIT", - "dependencies": { - "@types/node-forge": "^1.3.0", - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/semver-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", - "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", - "license": "MIT", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/semver-diff/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver-diff/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver-diff/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC" - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-handler": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.5.tgz", - "integrity": "sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg==", - "license": "MIT", - "dependencies": { - "bytes": "3.0.0", - "content-disposition": "0.5.2", - "fast-url-parser": "1.1.3", - "mime-types": "2.1.18", - "minimatch": "3.1.2", - "path-is-inside": "1.0.2", - "path-to-regexp": "2.2.1", - "range-parser": "1.2.0" - } - }, - "node_modules/serve-handler/node_modules/mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-handler/node_modules/mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", - "license": "MIT", - "dependencies": { - "mime-db": "~1.33.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-handler/node_modules/range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "license": "MIT", - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "license": "MIT", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "license": "ISC" - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "license": "ISC" - }, - "node_modules/serve-index/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "license": "MIT", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/server-only": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/server-only/-/server-only-0.0.1.tgz", - "integrity": "sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==", - "license": "MIT" - }, - "node_modules/set-function-length": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", - "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.2", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "license": "ISC" - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "license": "MIT", - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shallowequal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", - "license": "MIT" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "license": "BSD-3-Clause", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/side-channel": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz", - "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "license": "ISC" - }, - "node_modules/sirv": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", - "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", - "license": "MIT", - "dependencies": { - "@polka/url": "^1.0.0-next.24", - "mrmime": "^2.0.0", - "totalist": "^3.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "license": "MIT" - }, - "node_modules/sitemap": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.1.tgz", - "integrity": "sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==", - "license": "MIT", - "dependencies": { - "@types/node": "^17.0.5", - "@types/sax": "^1.2.1", - "arg": "^5.0.0", - "sax": "^1.2.4" - }, - "bin": { - "sitemap": "dist/cli.js" - }, - "engines": { - "node": ">=12.0.0", - "npm": ">=5.6.0" - } - }, - "node_modules/sitemap/node_modules/@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", - "license": "MIT" - }, - "node_modules/skin-tone": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/skin-tone/-/skin-tone-2.0.0.tgz", - "integrity": "sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==", - "license": "MIT", - "dependencies": { - "unicode-emoji-modifier-base": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/snake-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", - "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", - "license": "MIT", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "license": "MIT", - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/sort-css-media-queries": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.2.0.tgz", - "integrity": "sha512-0xtkGhWCC9MGt/EzgnvbbbKhqWjl1+/rncmhTh5qCpbYguXh6S/qwePfv/JQ8jePXXmqingylxoC49pCkSPIbA==", - "license": "MIT", - "engines": { - "node": ">= 6.3.0" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/space-separated-tokens": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", - "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "license": "BSD-3-Clause" - }, - "node_modules/srcset": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/srcset/-/srcset-4.0.0.tgz", - "integrity": "sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "license": "MIT" - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/std-env": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", - "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==", - "license": "MIT" - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/stringify-entities": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.3.tgz", - "integrity": "sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==", - "license": "MIT", - "dependencies": { - "character-entities-html4": "^2.0.0", - "character-entities-legacy": "^3.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "license": "BSD-2-Clause", - "dependencies": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/style-to-object": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.4.tgz", - "integrity": "sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==", - "license": "MIT", - "dependencies": { - "inline-style-parser": "0.1.1" - } - }, - "node_modules/stylehacks": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.1.1.tgz", - "integrity": "sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.0", - "postcss-selector-parser": "^6.0.16" - }, - "engines": { - "node": "^14 || ^16 || >=18.0" - }, - "peerDependencies": { - "postcss": "^8.4.31" - } - }, - "node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", - "license": "MIT" - }, - "node_modules/svgo": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", - "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", - "license": "MIT", - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^5.1.0", - "css-tree": "^2.3.1", - "css-what": "^6.1.0", - "csso": "^5.0.5", - "picocolors": "^1.0.0" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/svgo" - } - }, - "node_modules/svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/svgo/node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/svgo/node_modules/css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", - "license": "MIT", - "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" - } - }, - "node_modules/svgo/node_modules/mdn-data": { - "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", - "license": "CC0-1.0" - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/terser": { - "version": "5.27.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.27.2.tgz", - "integrity": "sha512-sHXmLSkImesJ4p5apTeT63DsV4Obe1s37qT8qvwHRmVxKTBH7Rv9Wr26VcAMmLbmk9UliiwK8z+657NyJHHy/w==", - "license": "BSD-2-Clause", - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", - "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.20", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.26.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "license": "MIT" - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "license": "MIT" - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "license": "MIT" - }, - "node_modules/tiny-invariant": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", - "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==", - "license": "MIT" - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==", - "license": "MIT" - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/totalist": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", - "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/trim-lines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", - "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/trim-trailing-lines": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-2.1.0.tgz", - "integrity": "sha512-5UR5Biq4VlVOtzqkm2AZlgvSlDJtME46uV0br0gENbwN4l5+mMKT4b9gJKqWtuL2zAIqajGJGuvbCbcAJUZqBg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/trough": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", - "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/ts-dedent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", - "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", - "license": "MIT", - "engines": { - "node": ">=6.10" - } - }, - "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "license": "0BSD" - }, - "node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "license": "MIT", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "license": "MIT", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "license": "MIT" - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-emoji-modifier-base": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz", - "integrity": "sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "license": "MIT", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unified": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", - "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "bail": "^2.0.0", - "devlop": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unique-string": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", - "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", - "license": "MIT", - "dependencies": { - "crypto-random-string": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/unist-builder": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-4.0.0.tgz", - "integrity": "sha512-wmRFnH+BLpZnTKpc5L7O67Kac89s9HMrtELpnNaE6TAobq5DTZZs5YaTQfAZBA9bFPECx2uVAPO31c+GVug8mg==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-find-after": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz", - "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-position": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", - "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-position-from-estree": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz", - "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-remove-position": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", - "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-visit": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", - "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit-parents": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", - "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/update-notifier": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-6.0.2.tgz", - "integrity": "sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==", - "license": "BSD-2-Clause", - "dependencies": { - "boxen": "^7.0.0", - "chalk": "^5.0.1", - "configstore": "^6.0.0", - "has-yarn": "^3.0.0", - "import-lazy": "^4.0.0", - "is-ci": "^3.0.1", - "is-installed-globally": "^0.4.0", - "is-npm": "^6.0.0", - "is-yarn-global": "^0.4.0", - "latest-version": "^7.0.0", - "pupa": "^3.1.0", - "semver": "^7.3.7", - "semver-diff": "^4.0.0", - "xdg-basedir": "^5.1.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/yeoman/update-notifier?sponsor=1" - } - }, - "node_modules/update-notifier/node_modules/boxen": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.1.1.tgz", - "integrity": "sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==", - "license": "MIT", - "dependencies": { - "ansi-align": "^3.0.1", - "camelcase": "^7.0.1", - "chalk": "^5.2.0", - "cli-boxes": "^3.0.0", - "string-width": "^5.1.2", - "type-fest": "^2.13.0", - "widest-line": "^4.0.1", - "wrap-ansi": "^8.1.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier/node_modules/camelcase": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz", - "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==", - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/update-notifier/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/update-notifier/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/update-notifier/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC" - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url-loader": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", - "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", - "license": "MIT", - "dependencies": { - "loader-utils": "^2.0.0", - "mime-types": "^2.1.27", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "file-loader": "*", - "webpack": "^4.0.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "file-loader": { - "optional": true - } - } - }, - "node_modules/url-loader/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "license": "MIT" - }, - "node_modules/utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", - "license": "MIT" - }, - "node_modules/utility-types": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.11.0.tgz", - "integrity": "sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==", - "license": "MIT" - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vfile": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", - "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-location": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.2.tgz", - "integrity": "sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "license": "MIT", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "license": "MIT", - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/web-namespaces": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", - "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/webpack": { - "version": "5.90.3", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.3.tgz", - "integrity": "sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA==", - "license": "MIT", - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.5", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.21.10", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.15.0", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-bundle-analyzer": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.1.tgz", - "integrity": "sha512-s3P7pgexgT/HTUSYgxJyn28A+99mmLq4HsJepMPzu0R8ImJc52QNqaFYW1Z2z2uIb1/J3eYgaAWVpaC+v/1aAQ==", - "license": "MIT", - "dependencies": { - "@discoveryjs/json-ext": "0.5.7", - "acorn": "^8.0.4", - "acorn-walk": "^8.0.0", - "commander": "^7.2.0", - "debounce": "^1.2.1", - "escape-string-regexp": "^4.0.0", - "gzip-size": "^6.0.0", - "html-escaper": "^2.0.2", - "is-plain-object": "^5.0.0", - "opener": "^1.5.2", - "picocolors": "^1.0.0", - "sirv": "^2.0.3", - "ws": "^7.3.1" - }, - "bin": { - "webpack-bundle-analyzer": "lib/bin/analyzer.js" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", - "license": "MIT", - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-server": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", - "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", - "license": "MIT", - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.5", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.13.0" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", - "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", - "license": "MIT", - "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 - } - } - }, - "node_modules/webpack-merge": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", - "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", - "license": "MIT", - "dependencies": { - "clone-deep": "^4.0.1", - "flat": "^5.0.2", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "license": "MIT", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpackbar": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.2.tgz", - "integrity": "sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==", - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "consola": "^2.15.3", - "pretty-time": "^1.1.0", - "std-env": "^3.0.1" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "webpack": "3 || 4 || 5" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "license": "Apache-2.0", - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "license": "Apache-2.0", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz", - "integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==", - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.6", - "call-bind": "^1.0.5", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/widest-line": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", - "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", - "license": "MIT", - "dependencies": { - "string-width": "^5.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/wildcard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", - "license": "MIT" - }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "license": "ISC" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "license": "MIT", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xdg-basedir": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", - "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/xml-js": { - "version": "1.6.11", - "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", - "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", - "license": "MIT", - "dependencies": { - "sax": "^1.2.4" - }, - "bin": { - "xml-js": "bin/cli.js" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "license": "ISC" - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "license": "ISC", - "engines": { - "node": ">= 6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zwitch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - } - } -} diff --git a/package.json b/package.json index 307355a71e..9f51442da0 100644 --- a/package.json +++ b/package.json @@ -14,11 +14,17 @@ "write-heading-ids": "docusaurus write-heading-ids" }, "dependencies": { - "@docusaurus/core": "^3.4.0", - "@docusaurus/plugin-client-redirects": "^3.4.0", - "@docusaurus/preset-classic": "^3.4.0", + "@docsearch/react": "^3.5.2", + "@docusaurus/core": "^3.7.0", + "@docusaurus/plugin-client-redirects": "^3.7.0", + "@docusaurus/plugin-content-docs": "^3.7.0", + "@docusaurus/preset-classic": "^3.7.0", + "@docusaurus/theme-classic": "^3.7.0", + "@docusaurus/theme-common": "^3.7.0", + "@docusaurus/theme-search-algolia": "^3.7.0", "@gracefullight/docusaurus-plugin-vercel-analytics": "^1.0.0", "@mdx-js/react": "^3.0.0", + "@polkadot/api": "^16.4.8", "@vercel/analytics": "^1.1.2", "clsx": "^1.2.1", "hast-util-is-element": "1.1.0", @@ -33,9 +39,9 @@ "zwitch": "^2.0.4" }, "devDependencies": { - "@docusaurus/module-type-aliases": "^3.3.2", - "@docusaurus/tsconfig": "^3.3.2", - "@docusaurus/types": "^3.3.2", + "@docusaurus/module-type-aliases": "^3.7.0", + "@docusaurus/tsconfig": "^3.7.0", + "@docusaurus/types": "^3.7.0", "typescript": "~5.2.2" }, "browserslist": { @@ -69,5 +75,6 @@ "RetentionPolicy": "Retain" } } - } + }, + "packageManager": "yarn@4.9.1" } diff --git a/sidebars.js b/sidebars.js index 50671bc630..f1fe7ce455 100644 --- a/sidebars.js +++ b/sidebars.js @@ -16,57 +16,127 @@ const sidebars = { bittensorSidebar: [ // { // type: 'link', - // href: 'https://docs.bittensor.com', + // href: 'https://docs.learnbittensor.org', // label: "Search", // className: 'sidebarSearch', // based on Class name it will add search component // }, "index", { - type: 'doc', - id: 'bittensor-rel-notes', - label: 'Releases', + type: "category", + label: "Releases and Announcements", + collapsible: true, + collapsed: true, + items: [ + { + type: "doc", + id: "resources/bittensor-rel-notes", + label: "Releases", + }, + { + type: "doc", + id: "learn/announcements", + label: "Announcements", + }, + ], }, - "btcli/btcli-playground", { type: "category", label: "Understand Bittensor", - link: {type: "doc", id: "learn/introduction"}, collapsible: true, collapsed: true, items: [ "learn/introduction", - "questions-and-answers", - "subnets/understanding-subnets", - "learn/bittensor-building-blocks", + "resources/questions-and-answers", + "subnets/understanding-subnets", "learn/anatomy-of-incentive-mechanism", - "emissions", - "yuma-consensus", + "subnets/understanding-multiple-mech-subnets", + "learn/neurons", + "learn/emissions", + "learn/ema", + "learn/yuma-consensus", + "learn/yc3-blog", + "concepts/weight-copying-in-bittensor", + "learn/yuma3-migration-guide", + "learn/fees", + "learn/chain-rate-limits", + { + type: "category", + label: "Navigating Subtensor Codebase", + link: { type: "doc", id: "navigating-subtensor/index" }, + collapsible: true, + collapsed: true, + items: [ + "navigating-subtensor/emissions-coinbase", + "navigating-subtensor/epoch", + "navigating-subtensor/swap-stake", + ], + }, + "resources/community-links", ], }, + { + type: "category", + label: "Wallets and Keys", + collapsible: true, + collapsed: true, + items: [ + "keys/wallets", + "keys/working-with-keys", + "keys/handle-seed-phrase", + "keys/coldkey-hotkey-security", + "keys/address-poisoning-scams", + { + type: "category", + label: "Proxies", + collapsible: true, + collapsed: true, + items: [ + "keys/proxies/index", + "keys/proxies/working-with-proxies", + "keys/proxies/pure-proxies", + ], + }, + "keys/multisig", + "keys/schedule-coldkey-swap", + ], + }, + { type: "category", label: "Staking/Delegation", collapsible: true, collapsed: true, - link: {type: "doc", id: "staking-and-delegation/delegation",}, items: [ - "staking-and-delegation/delegation", - "staking-and-delegation/stakers-btcli-guide", - "dynamic-tao/staking-unstaking-dtao", - "staking-and-delegation/managing-stake-btcli", - "staking-and-delegation/managing-stake-sdk", - "staking-and-delegation/staking-polkadot-js", - "staking-and-delegation/using-ledger-hw-wallet"], + "staking-and-delegation/delegation", + "staking-and-delegation/stakers-btcli-guide", + "staking-and-delegation/managing-stake-btcli", + "staking-and-delegation/managing-stake-sdk", + "keys/proxies/staking-with-proxy", + { + type: "category", + label: "Root claims", + collapsible: true, + collapsed: true, + items: [ + "staking-and-delegation/root-claims/index", + "staking-and-delegation/root-claims/managing-root-claims", + ], + }, + "learn/price-protection", + "learn/slippage", + "staking-and-delegation/staking-polkadot-js", + "staking-and-delegation/using-ledger-hw-wallet", + ], }, { type: "category", label: "Mining", collapsible: true, collapsed: true, - link: {type: "doc", id: "miners/index",}, items: [ - "miners/index", - "miners/miners-btcli-guide" + "miners/index", + "miners/miners-btcli-guide", + "miners/autostaking", ], }, @@ -75,11 +145,20 @@ const sidebars = { label: "Validating", collapsible: true, collapsed: true, - link: {type: "doc", id: "validators/index",}, items: [ - "validators/index", - "subnets/child-hotkeys", - "validators/validators-btcli-guide" + "validators/index", + "validators/child-hotkeys", + "validators/validators-btcli-guide", + ], + }, + { + type: "category", + label: "Liquidity Positions (Uniswap)", + collapsible: true, + collapsed: true, + items: [ + "liquidity-positions/liquidity-positions", + "liquidity-positions/managing-liquidity-positions", ], }, { @@ -88,147 +167,167 @@ const sidebars = { collapsible: true, collapsed: true, items: [ + "subnets/metagraph", "subnets/create-a-subnet", + { + type: "category", + label: "Crowdloans", + collapsible: true, + collapsed: true, + link: { type: "doc", id: "subnets/crowdloans/index" }, + items: ["subnets/crowdloans/crowdloans-tutorial"], + }, "subnets/subnet-creators-btcli-guide", "subnets/subnet-hyperparameters", "subnets/working-with-subnets", + "subnets/managing-mechanisms-with-sdk", + "subnets/managing-mechanisms-btcli", + "subnets/uid-trimming", + "subnets/subnet-deregistration", "subnets/walkthrough-prompting", "tutorials/basic-subnet-tutorials", "tutorials/ocr-subnet-tutorial", ], }, - { - type: "category", - label: "BTCLI: The Bittensor CLI", - collapsible: true, - collapsed: true, - link: {type: "doc", id: "btcli/overview",}, - items: [ - "getting-started/install-btcli", - "btcli/btcli-playground", - "btcli-permissions", - "btcli", - "staking-and-delegation/managing-stake-btcli", - ] - }, - { - type: "category", - label: "Bittensor Python SDK", - collapsible: true, - collapsed: true, - items: [ - "getting-started/installation", - "sdk/env-vars", - "bt-api-ref", - "sdk/subtensor-api", - "getting-started/install-wallet-sdk", - "migration_guide", - "subnets/asyncio", - "sdk/managing-subtensor-connections", + { + type: "category", + label: "BTCLI: The Bittensor CLI", + collapsible: true, + collapsed: true, + link: { type: "doc", id: "btcli/overview" }, + items: [ + "getting-started/install-btcli", + "btcli/btcli-playground", + "btcli/btcli-permissions", + "btcli/btcli", + ], + }, + { + type: "category", + label: "Bittensor Python SDK", + collapsible: true, + collapsed: true, + items: [ + "sdk/index", + "getting-started/installation", + "sdk/env-vars", + "sdk/bt-api-ref", + "sdk/subtensor-api", + "sdk/mev-protection", + "getting-started/install-wallet-sdk", + "sdk/call", + "sdk/migration-guide", + "subnets/asyncio", + "sdk/managing-subtensor-connections", + ], + }, - ] - }, - - { - type: "category", - label: "Wallets and Keys", - collapsible: true, - collapsed: true, - items: [ - "getting-started/wallets", - "keys/handle-seed-phrase", - "getting-started/coldkey-hotkey-security", - "working-with-keys", - "keys/multisig", - "subnets/schedule-coldkey-swap", - ] - }, { type: "category", label: "Tools and Special Features", - link: {type: "doc", id: "tools",}, + link: { type: "doc", id: "concepts/tools" }, collapsible: true, collapsed: true, items: [ - "bittensor-networks", - "subnets/commit-reveal", - "subnets/consensus-based-weights", - "subnets/bt-logging-levels", - "utilities", + "concepts/bittensor-networks", + "concepts/halving", + "concepts/mev-shield/index", + "concepts/commit-reveal", + "concepts/consensus-based-weights", + "concepts/bt-logging-levels", + "resources/utilities", ], }, { type: "category", label: "Local Development", - link: {type: "doc", id: "local-build/deploy",}, collapsible: true, collapsed: true, items: [ "local-build/deploy", "local-build/provision-wallets", "local-build/create-subnet", - // "local-build/mine-validate" + "local-build/mine-validate", ], }, - -{ + { type: "category", label: "Subtensor Nodes", - link: {type: "doc", id: "subtensor-nodes/index",}, + link: { type: "doc", id: "subtensor-nodes/index" }, collapsible: true, collapsed: true, items: [ "subtensor-nodes/subtensor-node-requirements", "subtensor-nodes/using-source", "subtensor-nodes/using-docker", - "subtensor-nodes/subtensor-rate-limits", "subtensor-nodes/subtensor-storage-query-examples", ], }, - + { type: "category", - label: "EVM smart contracts on Bittensor", - link: {type: "doc", id: "evm-tutorials/index",}, - collapsible: true, - collapsed: true, + label: "Bittensor EVM", items: [ - "evm-tutorials/evm-on-subtensor", - "evm-tutorials/install", + "evm-tutorials/index", + "evm-tutorials/subtensor-networks", + "evm-tutorials/bridge-vtao", "evm-tutorials/evm-testnet-with-metamask-wallet", "evm-tutorials/evm-localnet-with-metamask-wallet", "evm-tutorials/evm-mainnet-with-metamask-wallet", + "evm-tutorials/hardhat-config-for-subtensor-evm", + "evm-tutorials/remix-config-for-subtensor-evm", + "evm-tutorials/bridge-vtao", + "evm-tutorials/troubleshooting", + ], + }, + { + type: "category", + link: { type: "doc", id: "evm-tutorials/examples" }, + label: "Bittensor EVM: Examples and Precompiles", + items: [ + "evm-tutorials/convert-h160-to-ss58", "evm-tutorials/transfer-from-metamask-to-ss58", "evm-tutorials/transfer-between-two-h160-accounts", - "evm-tutorials/hardhat-config-for-subtensor-evm", - "evm-tutorials/staking-precompile", + "evm-tutorials/withdraw-from-alice", "evm-tutorials/ed25519-verify-precompile", + "evm-tutorials/staking-precompile", + "evm-tutorials/subnet-precompile", + "evm-tutorials/metagraph-precompile", + "evm-tutorials/neuron-precompile", ], }, + // { + // type: "category", + // label: "Bittensor EVM Smart Contracts", + // link: {type: "doc", id: "evm-tutorials/index",}, + // collapsible: true, + // collapsed: true, + // items: [ + // "evm-tutorials/install", + // , + + // ], + // }, { type: "category", label: "Governance", collapsible: true, collapsed: true, items: [ - "governance", - "senate", - "governance/senators-btcli-guide" + "governance/governance", + "governance/senate", + "governance/senators-btcli-guide", ], - }, { + }, + { type: "category", label: "Dynamic TAO", - link: {type: "doc", id: "dynamic-tao/index",}, + link: { type: "doc", id: "dynamic-tao/index" }, collapsible: true, collapsed: true, - items: [ - "dynamic-tao/dtao-guide", - "dynamic-tao/dtao-faq", - "dynamic-tao/sdk-cheat-sheet", - - ], + items: ["dynamic-tao/dtao-faq", "dynamic-tao/sdk-cheat-sheet"], }, { @@ -236,19 +335,17 @@ const sidebars = { label: "Errors and Troubleshooting", collapsible: true, collapsed: true, - link: {type: "doc", id: "errors/index",}, items: [ "errors/index", "errors/custom", "errors/subtensor", - "errors-and-troubleshooting", + "errors/troubleshooting", ], }, - "media-assets", - "glossary", - + "resources/glossary", + "resources/community-links", + "resources/media-assets", ], - }; module.exports = sidebars; diff --git a/src/css/style.css b/src/css/style.css index f020351b1d..abed8f7db4 100644 --- a/src/css/style.css +++ b/src/css/style.css @@ -6,1508 +6,1558 @@ /* You can override the default Infima variables here. */ :root { - --ifm-color-primary: rgba(14, 16, 19, 1); - --ifm-color-primary-dark: #29784c; - --ifm-color-primary-darker: #277148; - --ifm-color-primary-darkest: #205d3b; - --ifm-color-primary-light: black; - --ifm-color-primary-lighter: #359962; - --ifm-color-primary-lightest: #3cad6e; - --ifm-code-font-size: 95%; - --ifm-h1-font-size: 1.8rem; - --ifm-h2-font-size: 1.5rem; - --ifm-h3-font-size: 1.2rem; - --ifm-h4-font-size: 1rem; - --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1); - --text-primary: #5f6368; - --text-secondary: #5f6368; - --grey-100: #f8f9fa; /* --contrast-100 */ - --grey-900: #0e1013; /* --border-dashed-primary-hk */ - --ifm-menu-color-background-hover: var(--grey-100) + --ifm-color-primary: rgba(14, 16, 19, 1); + --ifm-color-primary-dark: #29784c; + --ifm-color-primary-darker: #277148; + --ifm-color-primary-darkest: #205d3b; + --ifm-color-primary-light: black; + --ifm-color-primary-lighter: #359962; + --ifm-color-primary-lightest: #3cad6e; + --ifm-code-font-size: 95%; + --ifm-h1-font-size: 1.8rem; + --ifm-h2-font-size: 1.5rem; + --ifm-h3-font-size: 1.2rem; + --ifm-h4-font-size: 1rem; + --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1); + --text-primary: #5f6368; + --text-secondary: #5f6368; + --grey-100: #f8f9fa; /* --contrast-100 */ + --grey-900: #0e1013; /* --border-dashed-primary-hk */ + --ifm-menu-color-background-hover: var(--grey-100); } /* For readability concerns, you should choose a lighter palette in dark mode. */ [data-theme="dark"] { - --ifm-color-primary: white; - --ifm-color-primary-dark: white; - --ifm-color-primary-darker: #1fa588; - --ifm-color-primary-darkest: #1a8870; - --ifm-color-primary-light: #29d5b0; - --ifm-color-primary-lighter: #32d8b4; - --ifm-color-primary-lightest: #4fddbf; - --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3); - --ifm-background-surface-color: #000000 !important; - --ifm-background-color: #000000 !important; - --ifm-navbar-active-color: white; - --ifm-navbar-item-color: #a5abaf; - --ifm-footer-div-color: black; - --ifm-table-of-contents-border: rgba(40, 42, 45, 1); - --ifm-table-of-contents-border-active: rgba(248, 249, 250, 1); - --ifm-table-of-contents-text: #a5abaf; - --ifm-table-of-contents-text-active: white; - --ifm-breadcrumbs__item--active: rgba(248, 249, 250, 1); - --ifm-menu__link--active: #5f6368; - --ifm-dropdown-background-color: #242526 !important; - --ifm-footer-bg: #0E1013; - --ifm-footer-company-name-color: white; - --ifm-algolia-bg: #242526; - --ifm-algolia-border: #7f8497; - --ifm-navbar-border: #282A2D; - --ifm-alert-secondary: rgba(235, 237, 240, 0.15); - --ifm-alert-success: rgba(0, 164, 0, 0.15); - --ifm-alert-info: rgba(84, 199, 236, 0.15); - --ifm-alert-warning: rgba(255, 186, 0, 0.15); - --ifm-alert-danger: rgba(250, 56, 62, 0.15); - --ifm-blockquote-border: #606770; - --ifm-tab-container-active-bg: white; - --ifm-tab-container-active-color: black; - --ifm-ul: #f5f6f7; - --ifm-hr: rgba(95, 99, 104, 1); - --ifm-search-icon-color: #a5abaf; - --ifm-doc-search-border-color: #000000; - --ifm-table-header-bg: #2B2B2D; - --ifm-table-header-color: white; - --ifm-table-body-color: #D7E3E3; - --ifm-table-tr-border: #3c3e42; - --ifm-doc-search-title-color: white; - --ifm-dock-search-active-a-bg: #000000; - --ifm-dock-search-active-a-color: white; - --ifm-dock-search-svg-color: white; - --ifm-doc-search-title-bg: #242526; + --ifm-color-primary: white; + --ifm-color-primary-dark: white; + --ifm-color-primary-darker: #1fa588; + --ifm-color-primary-darkest: #1a8870; + --ifm-color-primary-light: #29d5b0; + --ifm-color-primary-lighter: #32d8b4; + --ifm-color-primary-lightest: #4fddbf; + --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3); + --ifm-background-surface-color: #000000 !important; + --ifm-background-color: #000000 !important; + --ifm-navbar-active-color: white; + --ifm-navbar-item-color: #a5abaf; + --ifm-footer-div-color: black; + --ifm-table-of-contents-border: rgba(40, 42, 45, 1); + --ifm-table-of-contents-border-active: rgba(248, 249, 250, 1); + --ifm-table-of-contents-text: #a5abaf; + --ifm-table-of-contents-text-active: white; + --ifm-breadcrumbs__item--active: rgba(248, 249, 250, 1); + --ifm-menu__link--active: #5f6368; + --ifm-dropdown-background-color: #242526 !important; + --ifm-footer-bg: #0e1013; + --ifm-footer-company-name-color: white; + --ifm-algolia-bg: #242526; + --ifm-algolia-border: #7f8497; + --ifm-navbar-border: #282a2d; + --ifm-alert-secondary: rgba(235, 237, 240, 0.15); + --ifm-alert-success: rgba(0, 164, 0, 0.15); + --ifm-alert-info: rgba(84, 199, 236, 0.15); + --ifm-alert-warning: rgba(255, 186, 0, 0.15); + --ifm-alert-danger: rgba(250, 56, 62, 0.15); + --ifm-blockquote-border: #606770; + --ifm-tab-container-active-bg: white; + --ifm-tab-container-active-color: black; + --ifm-ul: #f5f6f7; + --ifm-hr: rgba(95, 99, 104, 1); + --ifm-search-icon-color: #a5abaf; + --ifm-doc-search-border-color: #000000; + --ifm-table-header-bg: #2b2b2d; + --ifm-table-header-color: white; + --ifm-table-body-color: #d7e3e3; + --ifm-table-tr-border: #3c3e42; + --ifm-doc-search-title-color: white; + --ifm-dock-search-active-a-bg: #000000; + --ifm-dock-search-active-a-color: white; + --ifm-dock-search-svg-color: white; + --ifm-doc-search-title-bg: #242526; } [data-theme="light"] { - --ifm-color-primary: black; - --ifm-color-primary-dark: white; - --ifm-color-primary-darker: #1fa588; - --ifm-color-primary-darkest: #1a8870; - --ifm-color-primary-light: black; - --ifm-color-primary-lighter: #32d8b4; - --ifm-color-primary-lightest: #4fddbf; - --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3); - --ifm-navbar-active-color: black; - --ifm-navbar-item-color: rgb(111, 112, 114); - --ifm-footer-div-color: white; - --ifm-table-of-contents-border: rgba(219, 221, 225, 1); - --ifm-table-of-contents-border-active: black; - --ifm-table-of-contents-text: #5F6368; - --ifm-table-of-contents-text-active: #0E1013; - --ifm-breadcrumbs__item--active: rgba(14, 16, 19, 1); - --ifm-menu__link--active: rgb(111, 112, 114); - --ifm-footer-bg: #0E1013; - --ifm-footer-company-name-color: white; - --ifm-algolia-bg: white; - --ifm-algolia-border: #0E1013; - --ifm-navbar-border: #DBDDE1; - --ifm-alert-secondary: #F8F9FA; - --ifm-alert-success: #E6F5E6; - --ifm-alert-info: #EEF9FC; - --ifm-alert-warning: #FFF8E6; - --ifm-alert-danger: #FFEBEC; - --ifm-blockquote-border: #DBDDE1; - --ifm-tab-container-active-bg: black; - --ifm-tab-container-active-color: white; - --ifm-ul: rgba(95, 99, 104, 1); - --ifm-hr: rgba(14, 16, 19, 1); - --ifm-search-icon-color: #1c1e21; - --ifm-doc-search-border-color: rgba(219, 221, 225, 1); - --ifm-table-header-bg: #F8F9FA; - --ifm-table-header-color: #5F6368; - --ifm-table-body-color: rgba(95, 99, 104, 1); - --ifm-table-tr-border: rgba(14, 16, 19, 1); - --ifm-doc-search-title-color: rgba(14, 16, 19, 1); - --ifm-dock-search-active-a-bg: white; - --ifm-dock-search-active-a-color: #000000; - --ifm-dock-search-svg-color: rgba(14, 16, 19, 1); - --ifm-doc-search-title-bg: white; + --ifm-color-primary: black; + --ifm-color-primary-dark: white; + --ifm-color-primary-darker: #1fa588; + --ifm-color-primary-darkest: #1a8870; + --ifm-color-primary-light: black; + --ifm-color-primary-lighter: #32d8b4; + --ifm-color-primary-lightest: #4fddbf; + --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3); + --ifm-navbar-active-color: black; + --ifm-navbar-item-color: rgb(111, 112, 114); + --ifm-footer-div-color: white; + --ifm-table-of-contents-border: rgba(219, 221, 225, 1); + --ifm-table-of-contents-border-active: black; + --ifm-table-of-contents-text: #5f6368; + --ifm-table-of-contents-text-active: #0e1013; + --ifm-breadcrumbs__item--active: rgba(14, 16, 19, 1); + --ifm-menu__link--active: rgb(111, 112, 114); + --ifm-footer-bg: #0e1013; + --ifm-footer-company-name-color: white; + --ifm-algolia-bg: white; + --ifm-algolia-border: #0e1013; + --ifm-navbar-border: #dbdde1; + --ifm-alert-secondary: #f8f9fa; + --ifm-alert-success: #e6f5e6; + --ifm-alert-info: #eef9fc; + --ifm-alert-warning: #fff8e6; + --ifm-alert-danger: #ffebec; + --ifm-blockquote-border: #dbdde1; + --ifm-tab-container-active-bg: black; + --ifm-tab-container-active-color: white; + --ifm-ul: rgba(95, 99, 104, 1); + --ifm-hr: rgba(14, 16, 19, 1); + --ifm-search-icon-color: #1c1e21; + --ifm-doc-search-border-color: rgba(219, 221, 225, 1); + --ifm-table-header-bg: #f8f9fa; + --ifm-table-header-color: #5f6368; + --ifm-table-body-color: rgba(95, 99, 104, 1); + --ifm-table-tr-border: rgba(14, 16, 19, 1); + --ifm-doc-search-title-color: rgba(14, 16, 19, 1); + --ifm-dock-search-active-a-bg: white; + --ifm-dock-search-active-a-color: #000000; + --ifm-dock-search-svg-color: rgba(14, 16, 19, 1); + --ifm-doc-search-title-bg: white; } - @font-face { - font-family: "Haffer"; - src: url(../../static/fonts/Haffer-Light.ttf); - font-weight: 200; - font-style: normal; + font-family: "Haffer"; + src: url(../../static/fonts/Haffer-Light.ttf); + font-weight: 200; + font-style: normal; } @font-face { - font-family: "Haffer"; - src: url(../../static/fonts/Haffer-Medium.ttf); - font-weight: 400; - font-style: normal; + font-family: "Haffer"; + src: url(../../static/fonts/Haffer-Medium.ttf); + font-weight: 400; + font-style: normal; } @font-face { - font-family: "Haffer"; - src: url(../../static/fonts/Haffer-Regular.ttf); - font-weight: normal; - font-style: normal; + font-family: "Haffer"; + src: url(../../static/fonts/Haffer-Regular.ttf); + font-weight: normal; + font-style: normal; } @font-face { - font-family: "Haffer"; - src: url(../../static/fonts/Haffer-SemiBold.ttf); - font-weight: bold; - font-style: normal; + font-family: "Haffer"; + src: url(../../static/fonts/Haffer-SemiBold.ttf); + font-weight: bold; + font-style: normal; } @font-face { - font-family: "HafferSQ"; - src: url(../../static/fonts/HafferSQ-Light.ttf); - font-weight: 200; - font-style: normal; + font-family: "HafferSQ"; + src: url(../../static/fonts/HafferSQ-Light.ttf); + font-weight: 200; + font-style: normal; } @font-face { - font-family: "HafferSQ"; - src: url(../../static/fonts/HafferSQ-Medium.ttf); - font-weight: 400; - font-style: normal; + font-family: "HafferSQ"; + src: url(../../static/fonts/HafferSQ-Medium.ttf); + font-weight: 400; + font-style: normal; } @font-face { - font-family: "HafferSQ"; - src: url(../../static/fonts/HafferSQ-Regular.ttf); - font-weight: normal; - font-style: normal; + font-family: "HafferSQ"; + src: url(../../static/fonts/HafferSQ-Regular.ttf); + font-weight: normal; + font-style: normal; } @font-face { - font-family: "HafferSQ"; - src: url(../../static/fonts/HafferSQ-SemiBold.ttf); - font-weight: bold; - font-style: normal; + font-family: "HafferSQ"; + src: url(../../static/fonts/HafferSQ-SemiBold.ttf); + font-weight: bold; + font-style: normal; } @font-face { - font-family: "TTCommonsPro"; - src: url(../../static/fonts/TTCommonsProMonoMedium.ttf); - font-weight: 200; - font-style: normal; + font-family: "TTCommonsPro"; + src: url(../../static/fonts/TTCommonsProMonoMedium.ttf); + font-weight: 200; + font-style: normal; } @font-face { - font-family: "TTCommonsPro"; - src: url(../../static/fonts/TTCommonsProMonoRegular.ttf); - font-weight: 100; - font-style: normal; + font-family: "TTCommonsPro"; + src: url(../../static/fonts/TTCommonsProMonoRegular.ttf); + font-weight: 100; + font-style: normal; } @font-face { - font-family: "FiraCode"; - src: url(../../static/fonts/FiraCode_VariableFont_wght.ttf); + font-family: "FiraCode"; + src: url(../../static/fonts/FiraCode_VariableFont_wght.ttf); } @font-face { - font-family: "DM Mono"; - src: url(../../static/fonts/DMMono-Regular.ttf); - font-weight: normal; - font-style: normal; + font-family: "DM Mono"; + src: url(../../static/fonts/DMMono-Regular.ttf); + font-weight: normal; + font-style: normal; } @font-face { - font-family: "DM Mono"; - src: url(../../static/fonts/DMMono-Medium.ttf); - font-weight: 500; - font-style: normal; + font-family: "DM Mono"; + src: url(../../static/fonts/DMMono-Medium.ttf); + font-weight: 500; + font-style: normal; } body { - font-family: "Haffer"; - font-size: 16px; - font-weight: 200; - letter-spacing: 0%; - line-height: 160%; + font-family: "Haffer"; + font-size: 16px; + font-weight: 200; + letter-spacing: 0%; + line-height: 160%; } .h1 { - font-family: "Haffer"; - font-size: 32px; - font-weight: 400; - letter-spacing: calc(-0.01 * 20px); - line-height: 120%; + font-family: "Haffer"; + font-size: 32px; + font-weight: 400; + letter-spacing: calc(-0.01 * 20px); + line-height: 120%; } .h2 { - font-family: "Haffer"; - font-size: 24px; - font-weight: 400; - letter-spacing: calc(-0.01 * 20px); - line-height: 120%; + font-family: "Haffer"; + font-size: 24px; + font-weight: 400; + letter-spacing: calc(-0.01 * 20px); + line-height: 120%; } .h3 { - font-family: "Haffer"; - font-size: 20px; - font-weight: 400; - letter-spacing: 0%; - line-height: 120%; + font-family: "Haffer"; + font-size: 20px; + font-weight: 400; + letter-spacing: 0%; + line-height: 120%; } .h4 { - font-family: "Haffer"; - font-size: 16px; - font-weight: bold; - letter-spacing: 0%; - line-height: 140%; + font-family: "Haffer"; + font-size: 16px; + font-weight: bold; + letter-spacing: 0%; + line-height: 140%; } a { - /* color: rgb(0, 49, 0); */ - color: none; - font-weight: 400; + /* color: rgb(0, 49, 0); */ + color: none; + font-weight: 400; } - h1 { - font-weight: 400 !important; - font-size: 32px !important; - padding-bottom: 22px !important; - margin-top: -16px !important; + font-weight: 400 !important; + font-size: 32px !important; + padding-bottom: 22px !important; + margin-top: -16px !important; } h1.anchor { - font-weight: 400 !important; - font-size: 32px !important; + font-weight: 400 !important; + font-size: 32px !important; } h2 { - font-weight: 400 !important; - font-size: 24px !important; + font-weight: 400 !important; + font-size: 24px !important; } h2.anchor { - font-weight: 400 !important; - font-size: 24px !important; + font-weight: 400 !important; + font-size: 24px !important; } h3 { - font-weight: 400 !important; - font-size: 20px !important; + font-weight: 400 !important; + font-size: 20px !important; } h3.anchor { - font-weight: 400 !important; - font-size: 20px !important; + font-weight: 400 !important; + font-size: 20px !important; } h4 { - font-size: 16px !important; - font-weight: bold !important; + font-size: 16px !important; + font-weight: bold !important; } h4.anchor { - font-size: 16px !important; - font-weight: bold !important; + font-size: 16px !important; + font-weight: bold !important; } p { - font-size: 16px !important; - font-weight: 400 !important; + font-size: 16px !important; + font-weight: 400 !important; } .menu__list { - list-style: none; - margin: 0 !important; - padding-left: 0 !important; - font-family: "FiraCode"; - font-size: 12px; - font-weight: 400; - letter-spacing: calc(0.05 * 12px); - line-height: 150%; - text-transform: uppercase; + list-style: none; + margin: 0 !important; + padding-left: 0 !important; + font-family: "FiraCode"; + font-size: 12px; + font-weight: 400; + letter-spacing: calc(0.05 * 12px); + line-height: 150%; + text-transform: uppercase; } .theme-doc-sidebar-item-category > ul > li > a { - padding-left: 48px; + padding-left: 48px; } .theme-doc-sidebar-container > div > div { - padding-top: 96px !important; - margin-top: -96px !important; + padding-top: 96px !important; + margin-top: -96px !important; +} + +li.theme-doc-sidebar-item-category.theme-doc-sidebar-item-category-level-2 + > div + a.menu__link { + padding-left: 3rem !important; +} + +li.theme-doc-sidebar-item-category.theme-doc-sidebar-item-category-level-2 { + position: relative; +} + +li.theme-doc-sidebar-item-category.theme-doc-sidebar-item-category-level-2::after { + content: ""; + background-position: 0 0; + background-image: linear-gradient( + to right, + var(--grey-900), + 1.5px, + transparent 1.5px + ); + background-repeat: repeat-x; + background-size: 6px; + display: block; + width: 100%; + height: 1.5px; + position: absolute; + bottom: 0px; + left: 0; +} + +li.theme-doc-sidebar-item-link-level-3 a { + padding-left: 4.5rem !important; } .table-of-contents, .table-of-contents ul { - font-family: "FiraCode"; + font-family: "FiraCode"; } [class*="tableOfContents"] { - padding-top: 20px; + padding-top: 20px; } .pagination-nav__link--prev .pagination-nav__label::before { - content: ""; + content: ""; } .pagination-nav__link--next .pagination-nav__label::after { - content: ""; + content: ""; } .pagination-nav__link { - border: none; + border: none; } .navbar__link { - font-size: 12px; - font-weight: 500; - font-family: 'DM Mono', monospace; - color: var(--text-secondary); - letter-spacing: 0.6px; + font-size: 12px; + font-weight: 500; + font-family: "DM Mono", monospace; + color: var(--text-secondary); + letter-spacing: 0.6px; } [data-theme="dark"] .navbar__link:hover { - color:#e3e3e3 !important; + color: #e3e3e3 !important; } .navbar__link:hover { - color: #000 !important; + color: #000 !important; } .theme-last-updated { - font-style: normal; - font-weight: 400; - font-size: 9px; - text-transform: uppercase; - font-family: "FiraCode"; + font-style: normal; + font-weight: 400; + font-size: 9px; + text-transform: uppercase; + font-family: "FiraCode"; } .parameter-label { - display: inline-block; - position: relative; - top: 3px; - color: #fff; - text-transform: uppercase; - font-size: 11px; - font-weight: 700; - padding: 1px 5px; + display: inline-block; + position: relative; + top: 3px; + color: #fff; + text-transform: uppercase; + font-size: 11px; + font-weight: 700; + padding: 1px 5px; } .success { - background: #859900; + background: #859900; } .important { - background: #dc322f; + background: #dc322f; } - ul { - font-family: "Haffer"; - font-weight: 200; - text-transform: none; + font-family: "Haffer"; + font-weight: 200; + text-transform: none; } .navbar { - margin-bottom: 10px; + margin-bottom: 10px; } .sidebar-title { - font-size: 1rem; - font-family: "Haffer"; - font-weight: 500; - letter-spacing: 0.05em; - margin: 0.7rem; - text-transform: uppercase; + font-size: 1rem; + font-family: "Haffer"; + font-weight: 500; + letter-spacing: 0.05em; + margin: 0.7rem; + text-transform: uppercase; } #bittensor-img { - width: 80%; - display: block; - margin-left: auto; - margin-right: auto; + width: 80%; + display: block; + margin-left: auto; + margin-right: auto; } /* ALGOLIA SEARCH INPUT */ /* NAVBAR LINKS */ .navbar__item.navbar__link { - font-family: 'DM Mono', monospace; - color: var(--text-secondary); - font-size: 12px !important; - align-items: center; - letter-spacing: 0.6px; - margin-left: 32px; + font-family: "DM Mono", monospace; + color: var(--text-secondary); + font-size: 12px !important; + align-items: center; + letter-spacing: 0.6px; + margin-left: 32px; } @media (min-width: 997) { - .navbar__item.navbar__link { - display: flex; - } + .navbar__item.navbar__link { + display: flex; + } } .dropdown--right { - margin-right: auto; - margin-bottom: 0 !important; + margin-right: auto; + margin-bottom: 0 !important; } /* NAV TITLE */ .navbar__title.text--truncate { - font-size: 16px !important; - line-height: 27.2px !important; - font-weight: 400 !important; - font-family: "Haffer"; - letter-spacing: 0.32px; + font-size: 16px !important; + line-height: 27.2px !important; + font-weight: 400 !important; + font-family: "Haffer"; + letter-spacing: 0.32px; } /* Bread Crumb */ .breadcrumbs__item .breadcrumbs__link { - color: var(--text-secondary); - line-height: 130%; - letter-spacing: 0.6px; + color: var(--text-secondary); + line-height: 130%; + letter-spacing: 0.6px; } .breadcrumbs__item.breadcrumbs__item--active .breadcrumbs__link { - background: initial !important; - color: var(--text-primary); - font-family: 'DM Mono', monospace; + background: initial !important; + color: var(--text-primary); + font-family: "DM Mono", monospace; } /* Footer */ .footer__copyright.footer__copyright__custom .container { - max-width: 100%; + max-width: 100%; } @media (min-width: 1440px) { - .footer .container { - max-width: 100% !important; - padding: 0; - } + .footer .container { + max-width: 100% !important; + padding: 0; + } } -.theme-doc-sidebar-container>div>div { - width: 100% !important; +.theme-doc-sidebar-container > div > div { + width: 100% !important; } .theme-doc-sidebar-container nav { - padding: 16px 16px 16px 16px !important; - margin-top: 80px; + padding: 16px 16px 16px 16px !important; + margin-top: 80px; } .menu__link { - padding: 15px; - font-size: 15px !important; + padding: 15px; + font-size: 15px !important; } -.menu__link--sublist-caret::after{ - background: url('data:image/svg+xml;utf8,'); - transform: rotate(90deg); +.menu__link--sublist-caret::after { + background: url('data:image/svg+xml;utf8,'); + transform: rotate(90deg); } -.menu__caret::before{ - background: url('data:image/svg+xml;utf8,'); +.menu__caret::before { + background: url('data:image/svg+xml;utf8,'); } -.menu__caret{ - transform: rotate(270deg); - margin-right: 2px; +.menu__caret { + transform: rotate(270deg); + margin-right: 2px; } -.menu__list-item--collapsed .menu__link--sublist::after, .menu__list-item--collapsed.menu__caret::before{ - transform: rotateZ(0deg) !important; +.menu__list-item--collapsed .menu__link--sublist::after, +.menu__list-item--collapsed.menu__caret::before { + transform: rotateZ(0deg) !important; } .theme-doc-sidebar-menu.menu__list > li { - position: relative; + position: relative; } .theme-doc-sidebar-menu.menu__list > li::after { - content: ''; - background-position: 0 0; - background-image: linear-gradient(to right, var(--grey-900), 1.5px, transparent 1.5px); - background-repeat: repeat-x; - background-size: 6px; - display: block; - width: 100%; - height: 1.5px; - position: absolute; - bottom: 0px; - left: 0; + content: ""; + background-position: 0 0; + background-image: linear-gradient( + to right, + var(--grey-900), + 1.5px, + transparent 1.5px + ); + background-repeat: repeat-x; + background-size: 6px; + display: block; + width: 100%; + height: 1.5px; + position: absolute; + bottom: 0px; + left: 0; } .menu__list-item-collapsible { - position: relative; + position: relative; } .menu__list-item-collapsible::after { - content: ''; - background-position: 0 0; - background-image: linear-gradient(to right, var(--grey-900), 1.5px, transparent 1.5px); - background-repeat: repeat-x; - background-size: 6px; - display: block; - width: 100%; - height: 1.5px; - position: absolute; - bottom: 0px; - left: 0; -} - -.theme-doc-sidebar-item-link-level-2 { - position: relative; -} -.theme-doc-sidebar-item-link-level-2:not(:last-child)::after { - content: ''; - background-position: 0 0; - background-image: linear-gradient(to right, var(--grey-900), 1.5px, transparent 1.5px); - background-repeat: repeat-x; - background-size: 6px; - display: block; - width: 100%; - height: 1.5px; - position: absolute; - bottom: 0px; - left: 0; + content: ""; + background-position: 0 0; + background-image: linear-gradient( + to right, + var(--grey-900), + 1.5px, + transparent 1.5px + ); + background-repeat: repeat-x; + background-size: 6px; + display: block; + width: 100%; + height: 1.5px; + position: absolute; + bottom: 0px; + left: 0; +} + +.theme-doc-sidebar-item-link-level-2, +.theme-doc-sidebar-item-link-level-3 { + position: relative; +} +.theme-doc-sidebar-item-link-level-2:not(:last-child)::after, +.theme-doc-sidebar-item-link-level-3:not(:last-child)::after { + content: ""; + background-position: 0 0; + background-image: linear-gradient( + to right, + var(--grey-900), + 1.5px, + transparent 1.5px + ); + background-repeat: repeat-x; + background-size: 6px; + display: block; + width: 100%; + height: 1.5px; + position: absolute; + bottom: 0px; + left: 0; } .theme-doc-sidebar-menu.menu__list li { - margin: 0 !important; + margin: 0 !important; } .theme-doc-sidebar-menu.menu__list li > a { - height: 48px; + height: 48px; } .menu__link.menu__link--sublist.menu__link--sublist-caret { - height: 48px; + height: 48px; } .menu__link { - border-radius: 0 !important; - color: var(--ifm-navbar-item-color); - font-size: 12px !important; - font-family: 'DM Mono', monospace; - letter-spacing: 0.6px !important; + border-radius: 0 !important; + color: var(--ifm-navbar-item-color); + font-size: 12px !important; + font-family: "DM Mono", monospace; + letter-spacing: 0.6px !important; } [data-theme="dark"] .menu__link:hover { - color:var(--ifm-table-of-contents-text-active); - background-color: transparent; + color: var(--ifm-table-of-contents-text-active); + background-color: transparent; } [data-theme="dark"] .menu__list-item-collapsible { - background-color: transparent !important; - color:var(--ifm-table-of-contents-text-active) !important; + background-color: transparent !important; + color: var(--ifm-table-of-contents-text-active) !important; } .menu__link--active { - background-color: transparent !important; - color: var(--ifm-navbar-active-color) !important; - font-weight: 600; + background-color: transparent !important; + color: var(--ifm-navbar-active-color) !important; + font-weight: 600; } /* custom style for navbar - Change the Class name if you want stick with it (custom_algolia) */ -.custom__algolia__search__container_xfkw>div>div { - width: 353px !important; - min-width: 353px !important; - max-width: 353px !important; - height: 50px; +.custom__algolia__search__container_xfkw > div > div { + width: 353px !important; + min-width: 353px !important; + max-width: 353px !important; + height: 50px; } -.custom__algolia__search__container_xfkw>div { - width: 353px !important; - min-width: 353px !important; - max-width: 353px !important; - height: 50px; +.custom__algolia__search__container_xfkw > div { + width: 353px !important; + min-width: 353px !important; + max-width: 353px !important; + height: 50px; } @media screen and (min-width: 996px) { - .custom_algolia { - position: absolute; - left: 178px; - top: 200px; - } - .custom_algolia > div { - display: block !important; - } + .custom_algolia { + position: absolute; + left: 178px; + top: 200px; + } + .custom_algolia > div { + display: block !important; + } } - .search_container > div { - width: 268px !important; - height: 50px; + width: 268px !important; + height: 50px; } .navbar__inner { - align-content: center; + align-content: center; } .navbar__item { - padding: 0; + padding: 0; } .navbar__items--right { - gap: 0 32px !important; - height: 48px; + gap: 0 32px !important; + height: 48px; } /* right bar style */ .table-of-contents__link { - color: #5F6368; - font-family: 'DM Mono', monospace; - font-size: 0.75rem; - line-height: 130%; - letter-spacing: 0.6px; + color: #5f6368; + font-family: "DM Mono", monospace; + font-size: 0.75rem; + line-height: 130%; + letter-spacing: 0.6px; } .table-of-contents__link--active { - font-weight: bold; + font-weight: bold; } .table-of-contents.table-of-contents__left-border { - border: none !important; + border: none !important; } .table-of-contents.table-of-contents__left-border li { - margin: 0 !important; + margin: 0 !important; } .table-of-contents.table-of-contents__left-border li a { - padding: 10px 0; - padding-left: 15px; + padding: 10px 0; + padding-left: 15px; } .table-of-contents.table-of-contents__left-border ul { - padding: 0 !important; + padding: 0 !important; } -.table-of-contents>li>ul>li>a { - padding-left: 30px !important; - display: table !important; +.table-of-contents > li > ul > li > a { + padding-left: 30px !important; + display: table !important; } -.table-of-contents>li>ul>li>ul>li>a { - margin-left: 45px !important; +.table-of-contents > li > ul > li > ul > li > a { + margin-left: 45px !important; } .table-of-contents .table-of-contents__link:hover { - color: var(--ifm-table-of-contents-text-active) !important; + color: var(--ifm-table-of-contents-text-active) !important; } .container.padding-top--md { - position: relative; + position: relative; } -.container.padding-top--md>div>div:last-child { - padding-left: 1rem !important; +.container.padding-top--md > div > div:last-child { + padding-left: 1rem !important; } -.container.padding-top--md>div>div:first-child { - padding: 32px 32px 48px 56px !important; +.container.padding-top--md > div > div:first-child { + padding: 32px 32px 48px 56px !important; } /* */ @media screen and (max-width: 550px) { - .container.padding-top--md>div>div:first-child { - padding: 32px 32px 48px 32px !important; - } + .container.padding-top--md > div > div:first-child { + padding: 32px 32px 48px 32px !important; + } } .breadcrumbs:first-child svg { - top: 0px !important; - height: 1rem; - width: 1rem; + top: 0px !important; + height: 1rem; + width: 1rem; } .breadcrumbs__item--active span { - padding: 5px; + padding: 5px; } /* dropdown */ .dropdown { - z-index: 9999 !important; - padding-bottom: 10px; - margin-bottom: -10px !important; + z-index: 9999 !important; + padding-bottom: 10px; + margin-bottom: -10px !important; } .dropdown_menu_container { - position: relative; + position: relative; } .dropdown_menu_container li { - list-style: none; + list-style: none; } .dropdown_menu_container .dropdownNavbarItemNested { - position: absolute; - left: 100%; + position: absolute; + left: 100%; } .dropdown__menu { - padding: 0; - min-width: 200px !important; - border: 1px solid var(--ifm-navbar-border); - box-shadow: 0px 0px 20px 0px rgba(0, 0, 0, 0.08); - border-radius: var(--border-radius-border-radius-base, 4px); + padding: 0; + min-width: 200px !important; + border: 1px solid var(--ifm-navbar-border); + box-shadow: 0px 0px 20px 0px rgba(0, 0, 0, 0.08); + border-radius: var(--border-radius-border-radius-base, 4px); } -.dropdown--right .dropdown__menu{ - right: unset; +.dropdown--right .dropdown__menu { + right: unset; } .dropdown__menu .dropdown__link { - padding: 7px 20px !important; - border-radius: 0 !important; - margin: 0 !important; - cursor: pointer; - color: var(--text-secondary, #5F6368); - font-family: 'DM Mono', monospace; - font-size: 12px; - letter-spacing: 0.6px; - text-transform: uppercase; + padding: 7px 20px !important; + border-radius: 0 !important; + margin: 0 !important; + cursor: pointer; + color: var(--text-secondary, #5f6368); + font-family: "DM Mono", monospace; + font-size: 12px; + letter-spacing: 0.6px; + text-transform: uppercase; } /* Custom bottom border mixin */ .dropdown__menu > li { - position: relative; + position: relative; } .dropdown__menu > li:not(:last-child)::after { - content: ''; - background-position: 0 0; - background-image: linear-gradient(to right, var(--grey-900), 1.5px, transparent 1.5px); - background-repeat: repeat-x; - background-size: 6px; - display: block; - width: 100%; - height: 1.5px; - position: absolute; - bottom: 0; - left: 0; + content: ""; + background-position: 0 0; + background-image: linear-gradient( + to right, + var(--grey-900), + 1.5px, + transparent 1.5px + ); + background-repeat: repeat-x; + background-size: 6px; + display: block; + width: 100%; + height: 1.5px; + position: absolute; + bottom: 0; + left: 0; } .dropdown__link:hover { - background-color: var(--grey-100); + background-color: var(--grey-100); } .dropdown__menu ul { - padding-left: 15px !important; - height: 0; - overflow: hidden; - transition: all ease 0.3s !important; + padding-left: 15px !important; + height: 0; + overflow: hidden; + transition: all ease 0.3s !important; } @keyframes heightAnimation { - 0% { - height: 0px; - border-bottom: 1px dashed rgba(95, 99, 104, 1); - } + 0% { + height: 0px; + border-bottom: 1px dashed rgba(95, 99, 104, 1); + } - 100% { - border-bottom: 1px dashed rgba(95, 99, 104, 1); - height: 100%; - } + 100% { + border-bottom: 1px dashed rgba(95, 99, 104, 1); + height: 100%; + } } .dropdown__menu .active-nested-dropdown { - animation-name: heightAnimation; - animation-duration: 1s; - animation-fill-mode: both; + animation-name: heightAnimation; + animation-duration: 1s; + animation-fill-mode: both; } .dropdown__menu_nested_items { - border-bottom: 1px dashed rgba(95, 99, 104, 1) !important; + border-bottom: 1px dashed rgba(95, 99, 104, 1) !important; } .dropdown__menu li:last-child a { - border-bottom: 0 !important; + border-bottom: 0 !important; } .dropdown__menu li:last-child ul { - border-bottom: 0 !important; + border-bottom: 0 !important; } .dropdown__menu li:last-child { - border-bottom: 0 !important; + border-bottom: 0 !important; } .dropdown__menu ul li { - list-style: none !important; + list-style: none !important; } .dropdown__menu .has-dropdown { - display: flex; - width: 100% !important; - position: relative; + display: flex; + width: 100% !important; + position: relative; } .dropdown__menu .has-dropdown a { - width: 100% !important; + width: 100% !important; } .dropdown__menu .has-dropdown .arrow { - position: absolute; - right: 15px; - top: 12px; + position: absolute; + right: 15px; + top: 12px; } .navbar__item.dropdown a { - /* margin-top: 6px; */ - display: block; + /* margin-top: 6px; */ + display: block; } .navbar__item.dropdown a::after { - margin-left: 8px !important; - margin-bottom: 2px !important; + margin-left: 8px !important; + margin-bottom: 2px !important; } /* Dropdown caret */ .dropdown > .navbar__link::after { - border-width: 0.3em 0.3em 0; - top: 1px; + border-width: 0.3em 0.3em 0; + top: 1px; } /* breadcrumbs styles */ .breadcrumbs { - display: flex; - flex-wrap: wrap; + display: flex; + flex-wrap: wrap; } .breadcrumbs .breadcrumbs__item::after { - background: url("../../static//img/slice.svg"); - height: 15px; - background-size: cover; - background-repeat: no-repeat; + background: url("../../static//img/slice.svg"); + height: 15px; + background-size: cover; + background-repeat: no-repeat; } .breadcrumbs .breadcrumbs__item span { - padding: 0 !important; - display: table; + padding: 0 !important; + display: table; } .breadcrumbs .breadcrumbs__item { - display: flex; - align-items: center; + display: flex; + align-items: center; } .breadcrumbs .breadcrumbs__item:first-child { - display: flex !important; + display: flex !important; } .breadcrumbs .breadcrumbs__item .breadcrumbs__link { - padding: 0 !important; - font-size: 0.75rem; + padding: 0 !important; + font-size: 0.75rem; } .breadcrumbs__item--active span { - color: var(--ifm-breadcrumbs__item--active) !important; + color: var(--ifm-breadcrumbs__item--active) !important; } /* Feedback */ .feedback { - display: flex !important; - align-items: center; - gap: 0 20px; + display: flex !important; + align-items: center; + gap: 0 20px; } .feedback span { - font-weight: 400 !important; - text-transform: uppercase; - font-size: 0.7rem; - font-family: 'DM Mono', monospace; - letter-spacing:0.6; + font-weight: 400 !important; + text-transform: uppercase; + font-size: 0.7rem; + font-family: "DM Mono", monospace; + letter-spacing: 0.6; } .feedback .feelings { - display: flex; - align-items: center; - gap: 0 16px; + display: flex; + align-items: center; + gap: 0 16px; } .feeling { - width:32px; - height:32px; - border: 1px solid rgba(219,221,225,1); - border-radius:4px; - display: flex; - align-items: center; - justify-content: center; - cursor: pointer; + width: 32px; + height: 32px; + border: 1px solid rgba(219, 221, 225, 1); + border-radius: 4px; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; } .feedbackAndName { - display: flex; - align-items: center; - width: 100%; - justify-content: space-between; - margin-top: 80px; + display: flex; + align-items: center; + width: 100%; + justify-content: space-between; + margin-top: 80px; } .feeling-symbol { - cursor: pointer !important; + cursor: pointer !important; } .footer-line div { - position: absolute; - left: 0; - right: 0; - width: 100% !important; - border-top: 2px solid var(--ifm-navbar-border); - margin-top: -10px; - height: 110px; - z-index: 9 !important; - background-color: var(--ifm-footer-div-color); + position: absolute; + left: 0; + right: 0; + width: 100% !important; + border-top: 2px solid var(--ifm-navbar-border); + margin-top: -10px; + height: 110px; + z-index: 9 !important; + background-color: var(--ifm-footer-div-color); } /* pagination */ .pagination-nav { - display: flex !important; - justify-content: space-between; - z-index: 99 !important; - position: relative; + display: flex !important; + justify-content: space-between; + z-index: 99 !important; + position: relative; } .pagination-nav .pagination-nav__link { - max-width: 30% !important; + max-width: 30% !important; } -.pagination-nav:has(.pagination-nav__link:first-child.pagination-nav__link--next) { - justify-content: end; +.pagination-nav:has( + .pagination-nav__link:first-child.pagination-nav__link--next + ) { + justify-content: end; } - .table-of-contents.table-of-contents__left-border li a { - border-left: 1px solid var(--ifm-table-of-contents-border); + border-left: 1px solid var(--ifm-table-of-contents-border); } .table-of-contents.table-of-contents__left-border li a { - font-weight: 400; - color: var(--ifm-table-of-contents-text); + font-weight: 400; + color: var(--ifm-table-of-contents-text); } .table-of-contents__link--active { - border-left: 1px solid var(--ifm-table-of-contents-border-active) !important; - color: var(--ifm-table-of-contents-text-active) !important; + border-left: 1px solid var(--ifm-table-of-contents-border-active) !important; + color: var(--ifm-table-of-contents-text-active) !important; } .menu__link--sublist-caret.menu__link--active { - color: var(--ifm-menu__link--active) !important + color: var(--ifm-menu__link--active) !important; } .footer { - padding: 25px 30px !important; - background-color: var(--ifm-footer-bg) !important; + padding: 25px 30px !important; + background-color: var(--ifm-footer-bg) !important; } .footer .footer__copyright { - font-family: TTCommonsPro !important; - font-size: 14px !important; - text-transform: uppercase !important; - display: flex; - align-items: center; - justify-content: space-between; + font-family: TTCommonsPro !important; + font-size: 14px !important; + text-transform: uppercase !important; + display: flex; + align-items: center; + justify-content: space-between; } - .footer .footer__copyright a { - color: var(--ifm-footer-company-name-color) !important; + color: var(--ifm-footer-company-name-color) !important; } - /* Algolia Search */ .DocSearch { - position: fixed !important; - left: 0; - top: 0; - width: 100%; - height: 100%; - display: flex; - align-items: center; - justify-content: center; + position: fixed !important; + left: 0; + top: 0; + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; } .DocSearch .DocSearch-Modal { - background-color: var(--ifm-algolia-bg) !important; - border-radius: 10px !important; - min-width: 40% !important; + background-color: var(--ifm-algolia-bg) !important; + border-radius: 10px !important; + min-width: 40% !important; } .DocSearch .DocSearch-Footer { - display: none !important; + display: none !important; } .DocSearch .DocSearch-Form { - background-color: var(--ifm-algolia-bg) !important; - box-shadow: inset 0 0 0 1px var(--ifm-algolia-border) !important; + background-color: var(--ifm-algolia-bg) !important; + box-shadow: inset 0 0 0 1px var(--ifm-algolia-border) !important; } .DocSearch .DocSearch-Form label { - color: var(--ifm-algolia-border) !important; + color: var(--ifm-algolia-border) !important; } .DocSearch .DocSearch-Form label svg { - width: 20px !important; - height: 20px !important; + width: 20px !important; + height: 20px !important; } .DocSearch .DocSearch-Form input::placeholder { - font-size: 16px !important; + font-size: 16px !important; } .DocSearch .DocSearch-Form input { - font-size: 16px !important; + font-size: 16px !important; } .DocSearch-Modal .DocSearch-Hit-source { - font-size: 14px !important; - text-transform: uppercase !important; - font-family: TTCommonsPro !important; + font-size: 14px !important; + text-transform: uppercase !important; + font-family: TTCommonsPro !important; } .DocSearch-Modal #docsearch-list li { - margin: 0 !important; + margin: 0 !important; } .navbar { - border-bottom: none !important; - box-shadow: none !important; + border-bottom: none !important; + box-shadow: none !important; } .navbar__logo { - margin-right: 13rem; + margin-right: 13rem; } - + /* Components design */ .alert { - position: relative; - border-left-width: 3px !important; - border-radius: 0 !important; - font-family: Haffer !important; - box-shadow: 0 !important; + position: relative; + border-left-width: 3px !important; + border-radius: 0 !important; + font-family: Haffer !important; + box-shadow: 0 !important; } .alert.alert--secondary { - background-color: var(--ifm-alert-secondary) !important; + background-color: var(--ifm-alert-secondary) !important; } .alert.alert--success { - background-color: var(--ifm-alert-success) !important; + background-color: var(--ifm-alert-success) !important; } .alert.alert--info { - background-color: var(--ifm-alert-info) !important; + background-color: var(--ifm-alert-info) !important; } .alert.alert--warning { - background-color: var(--ifm-alert-warning) !important; + background-color: var(--ifm-alert-warning) !important; } .alert.alert--warning span svg { - width: 18px !important; + width: 18px !important; } .alert.alert--danger { - background-color: var(--ifm-alert-danger) !important; + background-color: var(--ifm-alert-danger) !important; } .alert.alert--success svg, .alert.alert--info svg, .alert.alert--secondary svg { - width: 1.1rem !important; - height: 1.1rem !important; + width: 1.1rem !important; + height: 1.1rem !important; } blockquote { - border-left: 3px solid var(--ifm-blockquote-border) !important; + border-left: 3px solid var(--ifm-blockquote-border) !important; } -.language-bash>div span>span.token.plain { - font-family: FiraCode !important; +.language-bash > div span > span.token.plain { + font-family: FiraCode !important; } .theme-code-block div:first-child { - display: flex !important; - align-items: center; - gap: 0 10px !important; - font-family: FiraCode !important; + display: flex !important; + align-items: center; + gap: 0 10px !important; + font-family: FiraCode !important; } .theme-code-block div:first-child svg { - margin-top: -1px !important; + margin-top: -1px !important; } code { - font-family: FiraCode !important; + font-family: FiraCode !important; } -.tabs-container>ul { - display: flex !important; - gap: 0 5px; +.tabs-container > ul { + display: flex !important; + gap: 0 5px; } -.tabs-container>ul li { - border-radius: 5px !important; - font-weight: 400 !important; - letter-spacing: 2px; - font-size: 14px !important; - padding: 8px 10px !important; - padding-bottom: 5px !important; +.tabs-container > ul li { + border-radius: 5px !important; + font-weight: 400 !important; + letter-spacing: 2px; + font-size: 14px !important; + padding: 8px 10px !important; + padding-bottom: 5px !important; } -.tabs-container>ul li.tabs__item--active { - border-bottom: 0 !important; - background-color: var(--ifm-tab-container-active-bg) !important; - color: var(--ifm-tab-container-active-color) !important; +.tabs-container > ul li.tabs__item--active { + border-bottom: 0 !important; + background-color: var(--ifm-tab-container-active-bg) !important; + color: var(--ifm-tab-container-active-color) !important; } table { - background-color: transparent !important; - border-color: transparent !important; - border-spacing: 0 !important; - border: 0 !important; - width: 100% !important; - min-width: 100% !important; - display: table !important; + background-color: transparent !important; + border-color: transparent !important; + border-spacing: 0 !important; + border: 0 !important; + width: 100% !important; + min-width: 100% !important; + display: table !important; } table thead { - background-color: var(--ifm-table-header-bg) !important; + background-color: var(--ifm-table-header-bg) !important; } - table tr { - border-bottom: 1px dotted var(--ifm-table-tr-border) !important; - border: 0 !important; - border-spacing: 10px !important; - background-color: transparent !important; - background-image: linear-gradient(to right, var(--ifm-table-tr-border) 50%, transparent 50%); - background-size: 7px 1px; - background-repeat: repeat-x; - background-position: 0 bottom; + border-bottom: 1px dotted var(--ifm-table-tr-border) !important; + border: 0 !important; + border-spacing: 10px !important; + background-color: transparent !important; + background-image: linear-gradient( + to right, + var(--ifm-table-tr-border) 50%, + transparent 50% + ); + background-size: 7px 1px; + background-repeat: repeat-x; + background-position: 0 bottom; } table tbody tr:last-child { - border-bottom: 0 !important; - background-image: none !important; + border-bottom: 0 !important; + background-image: none !important; } table tbody { - background-color: transparent !important; + background-color: transparent !important; } table tr td, th { - border: 0 !important; - font-weight: 400 !important; + border: 0 !important; + font-weight: 400 !important; } table tr th { - color: var(--ifm-table-header-color) !important; - font-size: 15px !important; - /* text-align: center !important; */ - font-family: TTCommonsPro !important; - font-weight: 600 !important; + color: var(--ifm-table-header-color) !important; + font-size: 15px !important; + /* text-align: center !important; */ + font-family: TTCommonsPro !important; + font-weight: 600 !important; } table tr th:first-child { - text-align: start !important; + text-align: start !important; } table tr th:last-child { - text-align: start !important; + text-align: start !important; } table tr td { - color: var(--ifm-table-body-color) !important; - font-size: 14px !important; + color: var(--ifm-table-body-color) !important; + font-size: 14px !important; } table tr td:first-child { - font-weight: 400 !important; + font-weight: 400 !important; } hr { - background-color: transparent !important; - background-image: linear-gradient(to right, var(--ifm-hr) 10%, transparent 30%); - background-size: 5px 7px; - background-repeat: repeat-x; - background-position: 0 bottom; + background-color: transparent !important; + background-image: linear-gradient( + to right, + var(--ifm-hr) 10%, + transparent 30% + ); + background-size: 5px 7px; + background-repeat: repeat-x; + background-position: 0 bottom; } ol:not([class]) li { - font-size: 16px !important; - font-weight: 400 !important; - font-family: "Haffer"; + font-size: 16px !important; + font-weight: 400 !important; + font-family: "Haffer"; } ul.dashed_ul { - list-style-type: none !important; - padding: 0 !important; - padding-left: 25px !important; + list-style-type: none !important; + padding: 0 !important; + padding-left: 25px !important; } -ul.dashed_ul>li { - font-size: 16px !important; - position: relative; - font-weight: 400 !important; +ul.dashed_ul > li { + font-size: 16px !important; + position: relative; + font-weight: 400 !important; } -ul.dashed_ul>li::before { - content: "" !important; - display: block; - width: 8px !important; - background-color: var(--ifm-ul) !important; - height: 1px !important; - margin-top: 12px !important; - margin-right: 10px !important; - position: absolute; - left: -15px; +ul.dashed_ul > li::before { + content: "" !important; + display: block; + width: 8px !important; + background-color: var(--ifm-ul) !important; + height: 1px !important; + margin-top: 12px !important; + margin-right: 10px !important; + position: absolute; + left: -15px; } - -p>a>img[loading="lazy"] { - width: 100% !important; +p > a > img[loading="lazy"] { + width: 100% !important; } .open_grepper_editor { - display: none !important; + display: none !important; } - -.theme-doc-sidebar-menu.menu__list li:first-child>div { - display: none !important; +.theme-doc-sidebar-menu.menu__list li:first-child > div { + display: none !important; } .navbar .navbar__inner .navbar__items .navbar__brand { - display: flex; + display: flex; } .lastEdit { - width: 100%; - text-align: right; - font-size: 12px !important; - font-family: TTCommonsPro !important; - color: #5f6368; - position: absolute !important; - top: -15px !important; + width: 100%; + text-align: right; + font-size: 12px !important; + font-family: TTCommonsPro !important; + color: #5f6368; + position: absolute !important; + top: -15px !important; } .navbar.navbar--fixed-top { - margin-bottom: 0 !important; + margin-bottom: 0 !important; } main article { - position: relative !important; + position: relative !important; } main article a { - text-decoration: underline !important; + text-decoration: underline !important; } footer .container.container-fluid { - margin: 0 !important; - max-width: 100% !important; + margin: 0 !important; + max-width: 100% !important; } #docsearch-list { - border: 2px solid var(--ifm-doc-search-border-color) !important; - border-radius: 5px !important; + border: 2px solid var(--ifm-doc-search-border-color) !important; + border-radius: 5px !important; } #docsearch-list li { - padding: 0 !important; + padding: 0 !important; } #docsearch-list li a { - box-shadow: none !important; - border-bottom: 1px dashed var(--ifm-doc-search-border-color) !important; - background-color: transparent !important; + box-shadow: none !important; + border-bottom: 1px dashed var(--ifm-doc-search-border-color) !important; + background-color: transparent !important; } #docsearch-list li:last-child a { - border-bottom: 0 !important; + border-bottom: 0 !important; } #docsearch-list li a .DocSearch-Hit-icon svg { - color: var(--ifm-dock-search-svg-color) !important; + color: var(--ifm-dock-search-svg-color) !important; } .DocSearch-Hits .DocSearch-Hit-source { - font-weight: 600 !important; - color: var(--ifm-doc-search-title-color) !important; - font-size: 13px !important; - letter-spacing: 1px !important; - background: var(--ifm-doc-search-title-bg) !important; + font-weight: 600 !important; + color: var(--ifm-doc-search-title-color) !important; + font-size: 13px !important; + letter-spacing: 1px !important; + background: var(--ifm-doc-search-title-bg) !important; } -.DocSearch-Hit[aria-selected=true] a { - background-color: var(--ifm-dock-search-active-a-bg) !important; - border-radius: 0 !important; +.DocSearch-Hit[aria-selected="true"] a { + background-color: var(--ifm-dock-search-active-a-bg) !important; + border-radius: 0 !important; } -.DocSearch-Hit[aria-selected=true] a .DocSearch-Hit-title { - font-weight: bold !important; - color: var(--ifm-dock-search-active-a-color) !important; +.DocSearch-Hit[aria-selected="true"] a .DocSearch-Hit-title { + font-weight: bold !important; + color: var(--ifm-dock-search-active-a-color) !important; } -.DocSearch-Hit[aria-selected=true] a .DocSearch-Hit-title mark { - font-weight: bold !important; - color: var(--ifm-dock-search-active-a-color) !important; - background-color: rgba(233, 244, 164, 1) !important; - color: #000000 !important; +.DocSearch-Hit[aria-selected="true"] a .DocSearch-Hit-title mark { + font-weight: bold !important; + color: var(--ifm-dock-search-active-a-color) !important; + background-color: rgba(233, 244, 164, 1) !important; + color: #000000 !important; } -.DocSearch-Hit[aria-selected=true] a .DocSearch-Hit-path { - font-weight: 400 !important; - color: var(--ifm-dock-search-active-a-color) !important; +.DocSearch-Hit[aria-selected="true"] a .DocSearch-Hit-path { + font-weight: 400 !important; + color: var(--ifm-dock-search-active-a-color) !important; } -.DocSearch-Hit[aria-selected=true] a .DocSearch-Hit-path mark { - font-weight: 600 !important; - color: var(--ifm-dock-search-active-a-color) !important; - background-color: rgba(233, 244, 164, 1) !important; - color: #000000 !important; +.DocSearch-Hit[aria-selected="true"] a .DocSearch-Hit-path mark { + font-weight: 600 !important; + color: var(--ifm-dock-search-active-a-color) !important; + background-color: rgba(233, 244, 164, 1) !important; + color: #000000 !important; } -.DocSearch-Hit[aria-selected=true] a .DocSearch-Hit-Tree { - color: var(--docsearch-muted-color) !important; +.DocSearch-Hit[aria-selected="true"] a .DocSearch-Hit-Tree { + color: var(--docsearch-muted-color) !important; } - [data-theme="dark"] { - .theme-doc-sidebar-menu li:first-child>div>div { - border: 1px solid #282a2d !important; - } + .theme-doc-sidebar-menu li:first-child > div > div { + border: 1px solid #282a2d !important; + } } [data-theme="light"] { - .menu__link--sublist-caret.menu__link--active { - font-weight: 400; - } + .menu__link--sublist-caret.menu__link--active { + font-weight: 400; + } - .footer__copyright.footer__copyright__custom { - color: var(--grey-100) !important; - } + .footer__copyright.footer__copyright__custom { + color: var(--grey-100) !important; + } } @media screen and (max-width: 1310px) { - .navbar__inner .navbar__items--right a:nth-child(3) { - margin-right: 20px !important; - } + .navbar__inner .navbar__items--right a:nth-child(3) { + margin-right: 20px !important; + } } @media screen and (max-width: 996px) { - .navbar__inner .navbar__items:first-child div { - right: 0 !important; - } + .navbar__inner .navbar__items:first-child div { + right: 0 !important; + } - .navbar.navbar--fixed-top { - padding: 10px 15px !important; - } + .navbar.navbar--fixed-top { + padding: 10px 15px !important; + } - .navbar__inner .search_container div:last-child { - margin-right: 0px !important; - } + .navbar__inner .search_container div:last-child { + margin-right: 0px !important; + } - .theme-doc-sidebar-menu.menu__list li:first-child>div { - display: block !important; - } + .theme-doc-sidebar-menu.menu__list li:first-child > div { + display: block !important; + } - .navbar__inner .search_container { - width: 100%; - } + .navbar__inner .search_container { + width: 100%; + } - .navbar__toggle.clean-btn { - margin-bottom: 5px; - } + .navbar__toggle.clean-btn { + margin-bottom: 5px; + } - .navbar__items.navbar__items--right { - display: none; - } + .navbar__items.navbar__items--right { + display: none; + } } - @media screen and (max-width: 600px) { + .pagination-nav .pagination-nav__link { + max-width: 45% !important; + width: 100% !important; + padding: 0 !important; + } - .pagination-nav .pagination-nav__link { - max-width: 45% !important; - width: 100% !important; - padding: 0 !important; - } + .footer-line div { + height: 2px !important; + } - .footer-line div { - height: 2px !important; - } + .footer { + padding: 20px 10px !important; + } - .footer { - padding: 20px 10px !important; - } + .footer .footer__copyright { + gap: 0 20px !important; + } - .footer .footer__copyright { - gap: 0 20px !important; - } - - .navbar { - padding: 5px 20px !important; - } + .navbar { + padding: 5px 20px !important; + } } @media screen and (max-width: 550px) { - .pagination-nav.docusaurus-mt-lg { - margin-top: 80px !important; - } + .pagination-nav.docusaurus-mt-lg { + margin-top: 80px !important; + } } @media screen and (max-width: 500px) { - .navbar-sidebar { - width: 100% !important; - } + .navbar-sidebar { + width: 100% !important; + } - .navbar-sidebar__item:last-child { - width: 100% !important; - } + .navbar-sidebar__item:last-child { + width: 100% !important; + } - .pagination-nav .pagination-nav__link { - max-width: 489 !important; - } + .pagination-nav .pagination-nav__link { + max-width: 489 !important; + } - .navbar-sidebar__item menu{ - width: 100% !important; - } - + .navbar-sidebar__item menu { + width: 100% !important; + } } - @media screen and (max-width: 420px) { + .navbar { + padding: 5px 10px !important; + } - .navbar { - padding: 5px 10px !important; - } - - .footer { - padding: 20px 0 !important; - } + .footer { + padding: 20px 0 !important; + } } -.pagination-nav__link--next > .pagination-nav__label{ - text-align: right; +.pagination-nav__link--next > .pagination-nav__label { + text-align: right; } .pagination-nav__link--next > .pagination-nav__sublabel { - font-family: 'DM Mono', monospace; - position: relative; - padding-right: 12px; - text-align: right; + font-family: "DM Mono", monospace; + position: relative; + padding-right: 12px; + text-align: right; } .pagination-nav__link--next > .pagination-nav__sublabel::before { - content: ""; - position: absolute; - right: 0px; - top: 4.5px; - width: 0; - height: 0; - border-top: 4px solid transparent; /* Adjust the size of the arrow */ - border-bottom: 4px solid transparent; /* Adjust the size of the arrow */ - border-left: 6px solid rgb(82, 88, 96); /* Adjust the size and color of the arrow */ + content: ""; + position: absolute; + right: 0px; + top: 4.5px; + width: 0; + height: 0; + border-top: 4px solid transparent; /* Adjust the size of the arrow */ + border-bottom: 4px solid transparent; /* Adjust the size of the arrow */ + border-left: 6px solid rgb(82, 88, 96); /* Adjust the size and color of the arrow */ } .pagination-nav__link--prev > .pagination-nav__sublabel { - font-family: 'DM Mono', monospace; - position: relative; - padding-left: 12px; + font-family: "DM Mono", monospace; + position: relative; + padding-left: 12px; } .pagination-nav__link--prev > .pagination-nav__sublabel::before { - content: ""; - position: absolute; - left: 0px; - top: 4.5px; - width: 0; - height: 0; - border-top: 4px solid transparent; - border-bottom: 4px solid transparent; - border-right: 6px solid rgb(82, 88, 96); + content: ""; + position: absolute; + left: 0px; + top: 4.5px; + width: 0; + height: 0; + border-top: 4px solid transparent; + border-bottom: 4px solid transparent; + border-right: 6px solid rgb(82, 88, 96); } .important { - background: none; + background: none; } diff --git a/src/theme/DocBreadcrumbs/index.js b/src/theme/DocBreadcrumbs/index.js index 747304797e..e2c9fb82b8 100644 --- a/src/theme/DocBreadcrumbs/index.js +++ b/src/theme/DocBreadcrumbs/index.js @@ -2,10 +2,12 @@ import React from 'react'; import clsx from 'clsx'; import {ThemeClassNames} from '@docusaurus/theme-common'; import { - useSidebarBreadcrumbs, useHomePageRoute, } from '@docusaurus/theme-common/internal'; -import { useDoc } from "@docusaurus/theme-common/internal"; +import { + useDoc, + useSidebarBreadcrumbs +} from '@docusaurus/plugin-content-docs/client'; import Link from '@docusaurus/Link'; import {translate} from '@docusaurus/Translate'; import HomeBreadcrumbItem from '@theme/DocBreadcrumbs/Items/Home'; diff --git a/src/theme/DocItem/Content/index.js b/src/theme/DocItem/Content/index.js index e9e78dbbd8..4dfeae7cea 100644 --- a/src/theme/DocItem/Content/index.js +++ b/src/theme/DocItem/Content/index.js @@ -1,7 +1,7 @@ import React from "react"; import clsx from "clsx"; import { ThemeClassNames } from "@docusaurus/theme-common"; -import { useDoc } from "@docusaurus/theme-common/internal"; +import { useDoc } from "@docusaurus/plugin-content-docs/client"; import Heading from "@theme/Heading"; import MDXContent from "@theme/MDXContent"; import useDocusaurusContext from "@docusaurus/useDocusaurusContext"; diff --git a/src/theme/DocItem/Footer/index.js b/src/theme/DocItem/Footer/index.js index ca6a8df43b..3323e1a1db 100644 --- a/src/theme/DocItem/Footer/index.js +++ b/src/theme/DocItem/Footer/index.js @@ -1,7 +1,7 @@ import React, { useEffect, useState } from "react"; import clsx from "clsx"; import { ThemeClassNames } from "@docusaurus/theme-common"; -import { useDoc } from "@docusaurus/theme-common/internal"; +import { useDoc } from "@docusaurus/plugin-content-docs/client"; import TagsListInline from "@theme/TagsListInline"; import { track } from "@vercel/analytics"; import useDocusaurusContext from "@docusaurus/useDocusaurusContext"; diff --git a/src/theme/DocItem/Layout/index.js b/src/theme/DocItem/Layout/index.js index e5c43e6761..beaa6d9acd 100644 --- a/src/theme/DocItem/Layout/index.js +++ b/src/theme/DocItem/Layout/index.js @@ -1,7 +1,7 @@ import React from 'react'; import clsx from 'clsx'; import { useWindowSize } from '@docusaurus/theme-common'; -import { useDoc } from '@docusaurus/theme-common/internal'; +import { useDoc } from '@docusaurus/plugin-content-docs/client'; import DocItemPaginator from '@theme/DocItem/Paginator'; import DocVersionBanner from '@theme/DocVersionBanner'; import DocVersionBadge from '@theme/DocVersionBadge'; @@ -10,7 +10,7 @@ import DocItemTOCMobile from '@theme/DocItem/TOC/Mobile'; import DocItemTOCDesktop from '@theme/DocItem/TOC/Desktop'; import DocItemContent from '@theme/DocItem/Content'; import DocBreadcrumbs from '@theme/DocBreadcrumbs'; -import Unlisted from '@theme/Unlisted'; +import Unlisted from "@theme/ContentVisibility/Unlisted"; import styles from './styles.module.css'; /** * Decide if the toc should be rendered, on mobile or desktop viewports diff --git a/src/theme/DocSidebarItem/Category/index.js b/src/theme/DocSidebarItem/Category/index.js index 2f3115eead..3309aee7b0 100644 --- a/src/theme/DocSidebarItem/Category/index.js +++ b/src/theme/DocSidebarItem/Category/index.js @@ -11,12 +11,12 @@ import { isActiveSidebarItem, findFirstSidebarItemLink, useDocSidebarItemsExpandedState, - isSamePath, -} from '@docusaurus/theme-common/internal'; +} from '@docusaurus/plugin-content-docs/client'; import Link from '@docusaurus/Link'; import {translate} from '@docusaurus/Translate'; import useIsBrowser from '@docusaurus/useIsBrowser'; import DocSidebarItems from '@theme/DocSidebarItems'; +import { isSamePath } from '@docusaurus/theme-common/internal'; // If we navigate to a category and it becomes active, it should automatically // expand itself function useAutoExpandActiveCategory({isActive, collapsed, updateCollapsed}) { diff --git a/src/theme/DocSidebarItem/Link/index.js b/src/theme/DocSidebarItem/Link/index.js index 591f55c9be..112cd2e36d 100644 --- a/src/theme/DocSidebarItem/Link/index.js +++ b/src/theme/DocSidebarItem/Link/index.js @@ -1,7 +1,7 @@ import React from 'react'; import clsx from 'clsx'; import { ThemeClassNames } from '@docusaurus/theme-common'; -import { isActiveSidebarItem } from '@docusaurus/theme-common/internal'; +import { isActiveSidebarItem } from '@docusaurus/plugin-content-docs/client'; import Link from '@docusaurus/Link'; import isInternalUrl from '@docusaurus/isInternalUrl'; import IconExternalLink from '@theme/Icon/ExternalLink'; diff --git a/src/theme/DocSidebarItems/index.js b/src/theme/DocSidebarItems/index.js index 9a73944e27..86b65ea291 100644 --- a/src/theme/DocSidebarItems/index.js +++ b/src/theme/DocSidebarItems/index.js @@ -1,9 +1,9 @@ import React, {memo} from 'react'; import { DocSidebarItemsExpandedStateProvider, - useVisibleSidebarItems, -} from '@docusaurus/theme-common/internal'; + useVisibleSidebarItems } from '@docusaurus/plugin-content-docs/client'; import DocSidebarItem from '@theme/DocSidebarItem'; + function DocSidebarItems({items, ...props}) { const visibleItems = useVisibleSidebarItems(items, props.activePath); return ( diff --git a/static/img/docs/commit-reveal-v4-sequence.png b/static/img/docs/commit-reveal-v4-sequence.png new file mode 100644 index 0000000000..a922f2a2b3 Binary files /dev/null and b/static/img/docs/commit-reveal-v4-sequence.png differ diff --git a/static/img/docs/commit-reveal-v4.svg b/static/img/docs/commit-reveal-v4.svg new file mode 100644 index 0000000000..df0aceabb8 --- /dev/null +++ b/static/img/docs/commit-reveal-v4.svg @@ -0,0 +1 @@ +Commit Reveal v4 (tempo set to 100 blocks)Commit Reveal v4 (tempo set to 100 blocks)ValidatorValidatorValidatorValidatorValidatorValidatorValidatorValidatorChain storageChain storageChain storageChain storageChain storageChain storageChain storageChain storageCurrent weightsCurrent weightsCurrent weightsCurrent weightsCurrent weightsCurrent weightsCurrent weightsCurrent weightsValidatorValidatorValidatorValidatorValidatorValidatorValidatorValidatorSubtensorSubtensorSubtensorSubtensorSubtensorSubtensorSubtensorSubtensorChain storageChain storageChain storageChain storageChain storageChain storageChain storageChain storageCurrent weightsCurrent weightsCurrent weightsCurrent weightsCurrent weightsCurrent weightsCurrent weightsCurrent weightsYumaYumaYumaYumaYumaYumaYumaYumaDrandDrandDrandDrandDrandDrandDrandDrandValidatorValidatorSubtensorSubtensorChain storageChain storageCurrent weightsCurrent weightsYumaYumaDrandDrandValidatorValidatorValidatorValidatorValidatorValidatorValidatorValidatorChain storageChain storageChain storageChain storageChain storageChain storageChain storageChain storageCurrent weightsCurrent weightsCurrent weightsCurrent weightsCurrent weightsCurrent weightsCurrent weightsCurrent weightsTempo 10 start[block 1000]tempo beginsevaluateminers[block 1005]drand pulsereveal weightsweights waitingfor epoch[block 1090-1099]commit weightsstoreconcealmentperiodTempo 10 epoch[block 1100]get weightsrun epochTempo 11 start[block 1100]tempo beginsevaluateminers[block 1105]drand pulsereveal weightsweights waitingfor epoch[block 1190-1199]commit weightsstoreconcealmentperiodTempo 11 epoch[block 1200]get weightsrun epochTempo 12 start[block 1200]tempo beginsevaluateminers[block 1205]drand pulsereveal weightsweights waitingfor epoch[block 1290-1299]commit weightsstoreconcealmentperiod \ No newline at end of file diff --git a/static/img/docs/position-dashboard1.png b/static/img/docs/position-dashboard1.png new file mode 100644 index 0000000000..51e0a82b41 Binary files /dev/null and b/static/img/docs/position-dashboard1.png differ diff --git a/static/img/docs/weight-copy.svg b/static/img/docs/weight-copy.svg new file mode 100644 index 0000000000..380f508ddc --- /dev/null +++ b/static/img/docs/weight-copy.svg @@ -0,0 +1 @@ +Weight Copying (tempo set to 100 blocks)Weight Copying (tempo set to 100 blocks)ValidatorValidatorValidatorCurrent weightsValidatorValidatorSubtensorSubtensorCurrent weightsCurrent weightsYumaYumaWeight copierWeight copierValidatorValidatorSubtensorSubtensorCurrent weightsCurrent weightsYumaYumaWeight copierWeight copierValidatorValidatorValidatorCurrent weightsTempo 10 start[block 1000]tempo beginsevaluateminers[block 1090-1099]set weightsstore weightsweights waitingfor epochget weightscalculatethe stake-weightedaverage of weights[block 1090-1099]set weightsstore weightsTempo 10 epoch[block 1100]get weightsrun epochTempo 11 start[block 1100]tempo beginsevaluateminers \ No newline at end of file diff --git a/static/python-api/html/.buildinfo b/static/python-api/html/.buildinfo index d68be7cc29..f3290d2283 100644 --- a/static/python-api/html/.buildinfo +++ b/static/python-api/html/.buildinfo @@ -1,4 +1,4 @@ # Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 5db28c7b8cd6c3b493481038c43232af +config: 16aa09c3abbd86633a3054ffafa6bb1d tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/static/python-api/html/_modules/async_substrate_interface/errors.html b/static/python-api/html/_modules/async_substrate_interface/errors.html index 735378d97d..19c44f0144 100644 --- a/static/python-api/html/_modules/async_substrate_interface/errors.html +++ b/static/python-api/html/_modules/async_substrate_interface/errors.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -361,6 +364,16 @@

    Source code for async_substrate_interface.errors

    super().__init__(message) +class StateDiscardedError(SubstrateRequestException): + def __init__(self, block_hash: str): + self.block_hash = block_hash + message = ( + f"State discarded for {block_hash}. This indicates the block is too old, and you should instead " + f"make this request using an archive node." + ) + super().__init__(message) + +
    [docs] class StorageFunctionNotFound(ValueError): diff --git a/static/python-api/html/_modules/async_substrate_interface/utils.html b/static/python-api/html/_modules/async_substrate_interface/utils.html index db3ad925d4..4a59fe3c39 100644 --- a/static/python-api/html/_modules/async_substrate_interface/utils.html +++ b/static/python-api/html/_modules/async_substrate_interface/utils.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    diff --git a/static/python-api/html/_modules/bittensor/core/async_subtensor.html b/static/python-api/html/_modules/bittensor/core/async_subtensor.html index ec94203225..fd46f71850 100644 --- a/static/python-api/html/_modules/bittensor/core/async_subtensor.html +++ b/static/python-api/html/_modules/bittensor/core/async_subtensor.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -337,52 +340,67 @@

    Source code for bittensor.core.async_subtensor

    import asyncio import copy import ssl +from datetime import datetime, timezone from functools import partial -from typing import Optional, Any, Union, Iterable, TYPE_CHECKING +from typing import cast, Optional, Any, Union, Iterable, TYPE_CHECKING -import aiohttp import asyncstdlib as a import numpy as np import scalecodec from async_substrate_interface import AsyncSubstrateInterface +from async_substrate_interface.substrate_addons import RetryAsyncSubstrate +from bittensor_drand import get_encrypted_commitment from bittensor_wallet.utils import SS58_FORMAT from numpy.typing import NDArray from scalecodec import GenericCall from bittensor.core.chain_data import ( DelegateInfo, - StakeInfo, + DynamicInfo, MetagraphInfo, NeuronInfoLite, NeuronInfo, ProposalVoteData, + SelectiveMetagraphIndex, + StakeInfo, SubnetHyperparameters, SubnetIdentity, SubnetInfo, WeightCommitInfo, decode_account_id, - DynamicInfo, ) -from bittensor.core.chain_data.utils import decode_metadata +from bittensor.core.chain_data.chain_identity import ChainIdentity +from bittensor.core.chain_data.delegate_info import DelegatedInfo +from bittensor.core.chain_data.utils import ( + decode_block, + decode_metadata, + decode_revealed_commitment, + decode_revealed_commitment_with_hotkey, +) from bittensor.core.config import Config -from bittensor.core.errors import SubstrateRequestException +from bittensor.core.errors import ChainError, SubstrateRequestException +from bittensor.core.extrinsics.asyncex.children import ( + root_set_pending_childkey_cooldown_extrinsic, + set_children_extrinsic, +) from bittensor.core.extrinsics.asyncex.commit_reveal import commit_reveal_v3_extrinsic +from bittensor.core.extrinsics.asyncex.move_stake import ( + transfer_stake_extrinsic, + swap_stake_extrinsic, + move_stake_extrinsic, +) from bittensor.core.extrinsics.asyncex.registration import ( burned_register_extrinsic, register_extrinsic, register_subnet_extrinsic, set_subnet_identity_extrinsic, ) -from bittensor.core.extrinsics.asyncex.move_stake import ( - transfer_stake_extrinsic, - swap_stake_extrinsic, - move_stake_extrinsic, -) from bittensor.core.extrinsics.asyncex.root import ( set_root_weights_extrinsic, root_register_extrinsic, ) from bittensor.core.extrinsics.asyncex.serving import ( + get_last_bonds_reset, publish_metadata, get_metadata, ) @@ -391,8 +409,14 @@

    Source code for bittensor.core.async_subtensor

    add_stake_extrinsic, add_stake_multiple_extrinsic, ) +from bittensor.core.extrinsics.asyncex.start_call import start_call_extrinsic +from bittensor.core.extrinsics.asyncex.take import ( + decrease_take_extrinsic, + increase_take_extrinsic, +) from bittensor.core.extrinsics.asyncex.transfer import transfer_extrinsic from bittensor.core.extrinsics.asyncex.unstaking import ( + unstake_all_extrinsic, unstake_extrinsic, unstake_multiple_extrinsic, ) @@ -402,25 +426,41 @@

    Source code for bittensor.core.async_subtensor

    reveal_weights_extrinsic, ) from bittensor.core.metagraph import AsyncMetagraph -from bittensor.core.settings import version_as_int, TYPE_REGISTRY, DELEGATES_DETAILS_URL +from bittensor.core.settings import version_as_int, TYPE_REGISTRY from bittensor.core.types import ParamWithTypes, SubtensorMixin from bittensor.utils import ( + Certificate, decode_hex_identity_dict, format_error_message, + is_valid_ss58_address, torch, u16_normalized_float, - _decode_hex_identity_dict, - Certificate, u64_normalized_float, ) +from bittensor.core.extrinsics.asyncex.liquidity import ( + add_liquidity_extrinsic, + modify_liquidity_extrinsic, + remove_liquidity_extrinsic, + toggle_user_liquidity_extrinsic, +) from bittensor.utils.balance import ( Balance, fixed_to_float, check_and_convert_to_balance, ) from bittensor.utils.btlogging import logging -from bittensor.utils.delegates_details import DelegatesDetails -from bittensor.utils.weight_utils import generate_weight_hash +from bittensor.utils.liquidity import ( + calculate_fees, + get_fees, + tick_to_price, + price_to_tick, + LiquidityPosition, +) +from bittensor.utils.weight_utils import ( + generate_weight_hash, + convert_uids_and_weights, + U16_MAX, +) if TYPE_CHECKING: from async_substrate_interface.types import ScaleObj @@ -432,26 +472,59 @@

    Source code for bittensor.core.async_subtensor

    [docs] class AsyncSubtensor(SubtensorMixin): - """Thin layer for interacting with Substrate Interface. Mostly a collection of frequently-used calls.""" + """Asynchronous interface for interacting with the Bittensor blockchain. + + This class provides a thin layer over the Substrate Interface, offering a collection of frequently-used calls for + querying blockchain data, managing stakes, registering neurons, and interacting with the Bittensor network. + + + """ def __init__( self, network: Optional[str] = None, config: Optional["Config"] = None, - _mock: bool = False, log_verbose: bool = False, + fallback_endpoints: Optional[list[str]] = None, + retry_forever: bool = False, + _mock: bool = False, + archive_endpoints: Optional[list[str]] = None, + websocket_shutdown_timer: float = 5.0, ): - """ - Initializes an instance of the AsyncSubtensor class. + """Initializes an AsyncSubtensor instance for blockchain interaction. Arguments: - network (str): The network name or type to connect to. - config (Optional[Config]): Configuration object for the AsyncSubtensor instance. - _mock: Whether this is a mock instance. Mainly just for use in testing. - log_verbose (bool): Enables or disables verbose logging. + network: The network name or type to connect to (e.g., "finney", "test"). If ``None``, uses the default + network from config. + config: Configuration object for the AsyncSubtensor instance. If ``None``, uses the default configuration. + log_verbose: Enables or disables verbose logging. Defaults to ``False``. + fallback_endpoints: List of fallback endpoints to use if default or provided network is not available. + Defaults to ``None``. + retry_forever: Whether to retry forever on connection errors. Defaults to ``False``. + _mock: Whether this is a mock instance. Mainly for testing purposes. Defaults to ``False``. + archive_endpoints: Similar to fallback_endpoints, but specifically only archive nodes. Will be used in + cases where you are requesting a block that is too old for your current (presumably lite) node. + Defaults to ``None``. + websocket_shutdown_timer: Amount of time, in seconds, to wait after the last response from the chain to + close the connection. Defaults to ``5.0``. + Returns: + None Raises: - Any exceptions raised during the setup, configuration, or connection process. + ConnectionError: If unable to connect to the specified network. + ValueError: If invalid network or configuration parameters are provided. + Exception: Any other exceptions raised during setup or configuration. + + Typical usage example: + + import bittensor as bt + import asyncio + + async def main(): + async with bt.AsyncSubtensor(network="finney") as subtensor: + block_hash = await subtensor.get_block_hash() + + asyncio.run(main()) """ if config is None: config = AsyncSubtensor.config() @@ -459,7 +532,6 @@

    Source code for bittensor.core.async_subtensor

    self.chain_endpoint, self.network = AsyncSubtensor.setup_config( network, self._config ) - self._mock = _mock self.log_verbose = log_verbose self._check_and_log_network_settings() @@ -468,13 +540,12 @@

    Source code for bittensor.core.async_subtensor

    f"Connecting to network: [blue]{self.network}[/blue], " f"chain_endpoint: [blue]{self.chain_endpoint}[/blue]..." ) - self.substrate = AsyncSubstrateInterface( - url=self.chain_endpoint, - ss58_format=SS58_FORMAT, - type_registry=TYPE_REGISTRY, - use_remote_preset=True, - chain_name="Bittensor", + self.substrate = self._get_substrate( + fallback_endpoints=fallback_endpoints, + retry_forever=retry_forever, _mock=_mock, + archive_endpoints=archive_endpoints, + ws_shutdown_timer=websocket_shutdown_timer, ) if self.log_verbose: logging.info( @@ -484,7 +555,24 @@

    Source code for bittensor.core.async_subtensor

    [docs] async def close(self): - """Close the connection.""" + """Closes the connection to the blockchain. + + Use this to explicitly clean up resources and close the network connection instead of waiting for garbage + collection. + + Returns: + None + + Example: + subtensor = AsyncSubtensor(network="finney") + await subtensor.initialize() + + # Use the subtensor... + balance = await subtensor.get_balance(address="5F...") + + # Close when done + await subtensor.close() + """ if self.substrate: await self.substrate.close()

    @@ -492,6 +580,29 @@

    Source code for bittensor.core.async_subtensor

    [docs] async def initialize(self): + """Initializes the connection to the blockchain. + + This method establishes the connection to the Bittensor blockchain and should be called after creating an + AsyncSubtensor instance before making any queries. + + Returns: + AsyncSubtensor: The initialized instance (self) for method chaining. + + Raises: + ConnectionError: If unable to connect to the blockchain due to timeout or connection refusal. + + Example: + subtensor = AsyncSubtensor(network="finney") + + # Initialize the connection + await subtensor.initialize() + + # Now you can make queries + balance = await subtensor.get_balance(address="5F...") + + # Or chain the initialization + subtensor = await AsyncSubtensor(network="finney").initialize() + """ logging.info( f"[magenta]Connecting to Substrate:[/magenta] [blue]{self}[/blue][magenta]...[/magenta]" ) @@ -517,8 +628,8 @@

    Source code for bittensor.core.async_subtensor

    f"[magenta]Connecting to Substrate:[/magenta] [blue]{self}[/blue][magenta]...[/magenta]" ) try: - async with self.substrate: - return self + await self.substrate.initialize() + return self except TimeoutError: logging.error( f"[red]Error[/red]: Timeout occurred connecting to substrate." @@ -543,10 +654,36 @@

    Source code for bittensor.core.async_subtensor

    block_hash: Optional[str] = None, reuse_block: bool = False, ) -> Optional[str]: + """Determine the appropriate block hash based on the provided parameters. + + Ensures that only one of the block specification parameters is used and returns the appropriate block hash + for blockchain queries. + + Arguments: + block: The block number to get the hash for. Do not specify if using block_hash or reuse_block. + block_hash: The hash of the blockchain block. Do not specify if using block or reuse_block. + reuse_block: Whether to reuse the last-used block hash. Do not set if using block or reuse_block. + + Returns: + Optional[str]: The block hash if one can be determined, None otherwise. + + Raises: + ValueError: If more than one of block, block_hash, or reuse_block is specified. + + Example: + # Get hash for specific block + block_hash = await subtensor.determine_block_hash(block=1000000) + + # Use provided block hash + hash = await subtensor.determine_block_hash(block_hash="0x1234...") + + # Reuse last block hash + hash = await subtensor.determine_block_hash(reuse_block=True) + """ # Ensure that only one of the parameters is specified. if sum(bool(x) for x in [block, block_hash, reuse_block]) > 1: raise ValueError( - "Only one of `block`, `block_hash`, or `reuse_block` can be specified." + "Only one of ``block``, ``block_hash``, or ``reuse_block`` can be specified." ) # Return the appropriate value. @@ -557,14 +694,48 @@

    Source code for bittensor.core.async_subtensor

    return None

    -
    -[docs] async def encode_params( self, call_definition: dict[str, list["ParamWithTypes"]], params: Union[list[Any], dict[str, Any]], ) -> str: - """Returns a hex encoded string of the params using their types.""" + """Encodes parameters into a hex string using their type definitions. + + This method takes a call definition (which specifies parameter types) and actual parameter values, then + encodes them into a hex string that can be used for blockchain transactions. + + Arguments: + call_definition: A dictionary containing parameter type definitions. Should have a "params" key with a + list of parameter definitions. + params: The actual parameter values to encode. Can be either a list (for positional parameters) or a + dictionary (for named parameters). + + Returns: + str: A hex-encoded string representation of the parameters. + + Raises: + ValueError: If a required parameter is missing from the params dictionary. + + Example: + # Define parameter types + call_def = { + "params": [ + {"name": "amount", "type": "u64"}, + {"name": "coldkey_ss58", "type": "str"} + ] + } + + # Encode parameters as a dictionary + params_dict = { + "amount": 1000000, + "coldkey_ss58": "5F..." + } + encoded = await subtensor.encode_params(call_definition=call_def, params=params_dict) + + # Or encode as a list (positional) + params_list = [1000000, "5F..."] + encoded = await subtensor.encode_params(call_definition=call_def, params=params_list) + """ param_data = scalecodec.ScaleBytes(b"") for i, param in enumerate(call_definition["params"]): @@ -577,8 +748,7 @@

    Source code for bittensor.core.async_subtensor

    param_data += scale_obj.encode(params[param["name"]]) - return param_data.to_hex()

    - + return param_data.to_hex()
    [docs] @@ -590,20 +760,31 @@

    Source code for bittensor.core.async_subtensor

    block_hash: Optional[str] = None, reuse_block: bool = False, ) -> Optional[Any]: - """ - Retrieves a specified hyperparameter for a specific subnet. + """Retrieves a specified hyperparameter for a specific subnet. + + This method queries the blockchain for subnet-specific hyperparameters such as difficulty, tempo, immunity + period, and other network configuration values. Arguments: - param_name (str): The name of the hyperparameter to retrieve. - netuid (int): The unique identifier of the subnet. - block: the block number at which to retrieve the hyperparameter. Do not specify if using block_hash or - reuse_block - block_hash (Optional[str]): The hash of blockchain block number for the query. Do not specify if using - block or reuse_block - reuse_block (bool): Whether to reuse the last-used block hash. Do not set if using block_hash or block. + param_name: The name of the hyperparameter to retrieve (e.g., "Difficulty", "Tempo", "ImmunityPeriod"). + netuid: The unique identifier of the subnet. + block: The block number at which to retrieve the hyperparameter. Do not specify if using block_hash or + reuse_block. + block_hash: The hash of the blockchain block for the query. Do not specify if using block or reuse_block. + reuse_block: Whether to reuse the last-used block hash. Do not set if using block_hash or block. Returns: - The value of the specified hyperparameter if the subnet exists, or None + The value of the specified hyperparameter if the subnet exists, None otherwise. + + Example: + # Get difficulty for subnet 1 + difficulty = await subtensor.get_hyperparameter(param_name="Difficulty", netuid=1) + + # Get tempo at a specific block + tempo = await subtensor.get_hyperparameter(param_name="Tempo", netuid=1, block=1000000) + + # Get immunity period using block hash + immunity = await subtensor.get_hyperparameter(param_name="ImmunityPeriod", netuid=1, block_hash="0x1234...") """ block_hash = await self.determine_block_hash(block, block_hash, reuse_block) if not await self.subnet_exists( @@ -623,6 +804,56 @@

    Source code for bittensor.core.async_subtensor

    return getattr(result, "value", result)

    + def _get_substrate( + self, + fallback_endpoints: Optional[list[str]] = None, + retry_forever: bool = False, + _mock: bool = False, + archive_endpoints: Optional[list[str]] = None, + ws_shutdown_timer: float = 5.0, + ) -> Union[AsyncSubstrateInterface, RetryAsyncSubstrate]: + """Creates the Substrate instance based on provided arguments. + + This internal method creates either a standard AsyncSubstrateInterface or a RetryAsyncSubstrate depending on + the configuration parameters. + + Arguments: + fallback_endpoints: List of fallback endpoints to use if default or provided network is not available. + Defaults to ``None``. + retry_forever: Whether to retry forever on connection errors. Defaults to ``False``. + _mock: Whether this is a mock instance. Mainly for testing purposes. Defaults to ``False``. + archive_endpoints: Similar to fallback_endpoints, but specifically only archive nodes. Will be used in + cases where you are requesting a block that is too old for your current (presumably lite) node. Defaults + to ``None``. + ws_shutdown_timer: Amount of time, in seconds, to wait after the last response from the chain to close the + connection. + + Returns: + Either AsyncSubstrateInterface or RetryAsyncSubstrate. + """ + if fallback_endpoints or retry_forever or archive_endpoints: + return RetryAsyncSubstrate( + url=self.chain_endpoint, + fallback_chains=fallback_endpoints, + ss58_format=SS58_FORMAT, + type_registry=TYPE_REGISTRY, + retry_forever=retry_forever, + use_remote_preset=True, + chain_name="Bittensor", + _mock=_mock, + archive_nodes=archive_endpoints, + ws_shutdown_timer=ws_shutdown_timer, + ) + return AsyncSubstrateInterface( + url=self.chain_endpoint, + ss58_format=SS58_FORMAT, + type_registry=TYPE_REGISTRY, + use_remote_preset=True, + chain_name="Bittensor", + _mock=_mock, + ws_shutdown_timer=ws_shutdown_timer, + ) + # Subtensor queries ===========================================================================================
    @@ -635,26 +866,38 @@

    Source code for bittensor.core.async_subtensor

    block_hash: Optional[str] = None, reuse_block: bool = False, ) -> Optional["ScaleObj"]: - """ - Retrieves a constant from the specified module on the Bittensor blockchain. This function is used to access - fixed parameters or values defined within the blockchain's modules, which are essential for understanding - the network's configuration and rules. + """Retrieves a constant from the specified module on the Bittensor blockchain. - Args: - module_name: The name of the module containing the constant. - constant_name: The name of the constant to retrieve. + This function is used to access fixed values defined within the blockchain's modules, which are essential for + understanding the network's configuration and rules. These include include critical network parameters such as + inflation rates, consensus rules, or validation thresholds, providing a deeper understanding of the Bittensor + network's operational parameters. + + Arguments: + module_name: The name of the module containing the constant (e.g., "Balances", "SubtensorModule"). + constant_name: The name of the constant to retrieve (e.g., "ExistentialDeposit"). block: The blockchain block number at which to query the constant. Do not specify if using block_hash or - reuse_block - block_hash: the hash of th blockchain block at which to query the constant. Do not specify if using block - or reuse_block - reuse_block: Whether to reuse the blockchain block at which to query the constant. + reuse_block. + block_hash: The hash of the blockchain block at which to query the constant. Do not specify if using + block or reuse_block. + reuse_block: Whether to reuse the blockchain block at which to query the constant. Defaults to ``False``. Returns: - Optional[async_substrate_interface.types.ScaleObj]: The value of the constant if found, `None` otherwise. + Optional[async_substrate_interface.types.ScaleObj]: The value of the constant if found, ``None`` otherwise. - Constants queried through this function can include critical network parameters such as inflation rates, - consensus rules, or validation thresholds, providing a deeper understanding of the Bittensor network's - operational parameters. + Example: + # Get existential deposit constant + existential_deposit = await subtensor.query_constant( + module_name="Balances", + constant_name="ExistentialDeposit" + ) + + # Get constant at specific block + constant = await subtensor.query_constant( + module_name="SubtensorModule", + constant_name="SomeConstant", + block=1000000 + ) """ block_hash = await self.determine_block_hash(block, block_hash, reuse_block) return await self.substrate.get_constant( @@ -676,25 +919,30 @@

    Source code for bittensor.core.async_subtensor

    reuse_block: bool = False, params: Optional[list] = None, ) -> "AsyncQueryMapResult": - """ - Queries map storage from any module on the Bittensor blockchain. This function retrieves data structures that - represent key-value mappings, essential for accessing complex and structured data within the blockchain - modules. + """Queries map storage from any module on the Bittensor blockchain. - Args: - module: The name of the module from which to query the map storage. - name: The specific storage function within the module to query. - block: The blockchain block number at which to perform the query. + This function retrieves data structures that represent key-value mappings, essential for accessing complex and + structured data within the blockchain modules. + + Arguments: + module: The name of the module from which to query the map storage (e.g., "SubtensorModule", "System"). + name: The specific storage function within the module to query (e.g., "Bonds", "Weights"). + block: The blockchain block number at which to perform the query. Defaults to ``None`` (latest block). block_hash: The hash of the block to retrieve the parameter from. Do not specify if using block or - reuse_block - reuse_block: Whether to use the last-used block. Do not set if using block_hash or block. - params: Parameters to be passed to the query. + reuse_block. + reuse_block: Whether to use the last-used block. Do not set if using block_hash or block. Defaults to + ``False``. + params: Parameters to be passed to the query. Defaults to ``None``. Returns: - result: A data structure representing the map storage if found, `None` otherwise. + AsyncQueryMapResult: A data structure representing the map storage if found, None otherwise. + + Example: + # Query bonds for subnet 1 + bonds = await subtensor.query_map(module="SubtensorModule", name="Bonds", params=[1]) - This function is particularly useful for retrieving detailed and structured data from various blockchain - modules, offering insights into the network's state and the relationships between its different components. + # Query weights at specific block + weights = await subtensor.query_map(module="SubtensorModule", name="Weights", params=[1], block=1000000) """ block_hash = await self.determine_block_hash(block, block_hash, reuse_block) result = await self.substrate.query_map( @@ -717,23 +965,23 @@

    Source code for bittensor.core.async_subtensor

    reuse_block: bool = False, params: Optional[list] = None, ) -> "AsyncQueryMapResult": - """ - Queries map storage from the Subtensor module on the Bittensor blockchain. This function is designed to retrieve - a map-like data structure, which can include various neuron-specific details or network-wide attributes. + """Queries map storage from the Subtensor module on the Bittensor blockchain. This function is designed to + retrieve a map-like data structure, which can include various neuron-specific details or network-wide + attributes. - Args: + Arguments: name: The name of the map storage function to query. block: The blockchain block number at which to perform the query. block_hash: The hash of the block to retrieve the parameter from. Do not specify if using block or - reuse_block + reuse_block. reuse_block: Whether to use the last-used block. Do not set if using block_hash or block. params: A list of parameters to pass to the query function. Returns: - An object containing the map-like data structure, or `None` if not found. + An object containing the map-like data structure, or ``None`` if not found. This function is particularly useful for analyzing and understanding complex network structures and - relationships within the Bittensor ecosystem, such as interneuronal connections and stake distributions. + relationships within the Bittensor ecosystem, such as interneuronal connections and stake distributions. """ block_hash = await self.determine_block_hash(block, block_hash, reuse_block) return await self.substrate.query_map( @@ -756,25 +1004,24 @@

    Source code for bittensor.core.async_subtensor

    reuse_block: bool = False, params: Optional[list] = None, ) -> Optional[Union["ScaleObj", Any]]: - """ - Queries any module storage on the Bittensor blockchain with the specified parameters and block number. This - function is a generic query interface that allows for flexible and diverse data retrieval from various - blockchain modules. + """Queries any module storage on the Bittensor blockchain with the specified parameters and block number. + This function is a generic query interface that allows for flexible and diverse data retrieval from various + blockchain modules. - Args: - module (str): The name of the module from which to query data. - name (str): The name of the storage function within the module. - block (Optional[int]): The blockchain block number at which to perform the query. + Arguments: + module: The name of the module from which to query data. + name: The name of the storage function within the module. + block: The blockchain block number at which to perform the query. block_hash: The hash of the block to retrieve the parameter from. Do not specify if using block or - reuse_block + reuse_block. reuse_block: Whether to use the last-used block. Do not set if using block_hash or block. - params (Optional[list[object]]): A list of parameters to pass to the query function. + params: A list of parameters to pass to the query function. Returns: - An object containing the requested data if found, `None` otherwise. + An object containing the requested data if found, ``None`` otherwise. This versatile query function is key to accessing a wide range of data and insights from different parts of the - Bittensor blockchain, enhancing the understanding and analysis of the network's state and dynamics. + Bittensor blockchain, enhancing the understanding and analysis of the network's state and dynamics. """ block_hash = await self.determine_block_hash(block, block_hash, reuse_block) return await self.substrate.query( @@ -797,25 +1044,24 @@

    Source code for bittensor.core.async_subtensor

    block_hash: Optional[str] = None, reuse_block: bool = False, ) -> Optional[Any]: - """ - Queries the runtime API of the Bittensor blockchain, providing a way to interact with the underlying runtime and - retrieve data encoded in Scale Bytes format. This function is essential for advanced users who need to - interact with specific runtime methods and decode complex data types. + """Queries the runtime API of the Bittensor blockchain, providing a way to interact with the underlying runtime + and retrieve data encoded in Scale Bytes format. This function is essential for advanced users who need to + interact with specific runtime methods and decode complex data types. - Args: + Arguments: runtime_api: The name of the runtime API to query. method: The specific method within the runtime API to call. params: The parameters to pass to the method call. - block: the block number for this query. Do not specify if using block_hash or reuse_block - block_hash: The hash of the blockchain block number at which to perform the query. Do not specify if - using block or reuse_block - reuse_block: Whether to reuse the last-used block hash. Do not set if using block_hash or block + block: the block number for this query. Do not specify if using block_hash or reuse_block. + block_hash: The hash of the blockchain block number at which to perform the query. Do not specify if using + block or reuse_block. + reuse_block: Whether to reuse the last-used block hash. Do not set if using block_hash or block. Returns: - The decoded result from the runtime API call, or `None` if the call fails. + The decoded result from the runtime API call, or ``None`` if the call fails. This function enables access to the deeper layers of the Bittensor blockchain, allowing for detailed and - specific interactions with the network's runtime environment. + specific interactions with the network's runtime environment. """ block_hash = await self.determine_block_hash(block, block_hash, reuse_block) if not block_hash and reuse_block: @@ -836,15 +1082,15 @@

    Source code for bittensor.core.async_subtensor

    reuse_block: bool = False, params: Optional[list] = None, ) -> Optional[Union["ScaleObj", Any]]: - """ - Queries named storage from the Subtensor module on the Bittensor blockchain. This function is used to retrieve - specific data or parameters from the blockchain, such as stake, rank, or other neuron-specific attributes. + """Queries named storage from the Subtensor module on the Bittensor blockchain. This function is used to + retrieve specific data or parameters from the blockchain, such as stake, rank, or other neuron-specific + attributes. - Args: + Arguments: name: The name of the storage function to query. block: The blockchain block number at which to perform the query. block_hash: The hash of the block to retrieve the parameter from. Do not specify if using block or - reuse_block + reuse_block. reuse_block: Whether to use the last-used block. Do not set if using block_hash or block. params: A list of parameters to pass to the query function. @@ -852,7 +1098,7 @@

    Source code for bittensor.core.async_subtensor

    query_response: An object containing the requested data. This query function is essential for accessing detailed information about the network and its neurons, providing - valuable insights into the state and dynamics of the Bittensor ecosystem. + valuable insights into the state and dynamics of the Bittensor ecosystem. """ block_hash = await self.determine_block_hash(block, block_hash, reuse_block) return await self.substrate.query( @@ -874,23 +1120,22 @@

    Source code for bittensor.core.async_subtensor

    block_hash: Optional[str] = None, reuse_block: bool = False, ) -> dict[Any, Any]: - """ - Makes a state call to the Bittensor blockchain, allowing for direct queries of the blockchain's state. This - function is typically used for advanced queries that require specific method calls and data inputs. + """Makes a state call to the Bittensor blockchain, allowing for direct queries of the blockchain's state. + This function is typically used for advanced queries that require specific method calls and data inputs. - Args: + Arguments: method: The method name for the state call. data: The data to be passed to the method. block: The blockchain block number at which to perform the state call. block_hash: The hash of the block to retrieve the parameter from. Do not specify if using block or - reuse_block + reuse_block. reuse_block: Whether to use the last-used block. Do not set if using block_hash or block. Returns: result (dict[Any, Any]): The result of the rpc call. The state call function provides a more direct and flexible way of querying blockchain data, useful for specific - use cases where standard queries are insufficient. + use cases where standard queries are insufficient. """ block_hash = await self.determine_block_hash(block, block_hash, reuse_block) return await self.substrate.rpc_request( @@ -915,47 +1160,103 @@

    Source code for bittensor.core.async_subtensor

    block_hash: Optional[str] = None, reuse_block: bool = False, ) -> Optional[list[DynamicInfo]]: - """ - Retrieves the subnet information for all subnets in the network. + """Queries the blockchain for comprehensive information about all subnets, including their dynamic parameters + and operational status. - Args: - block_number (Optional[int]): The block number to query the subnet information from. Do not specify if using - block_hash or reuse_block + Arguments: + block_number: The block number to query the subnet information from. Do not specify if using block_hash or + reuse_block. block_hash: The hash of the blockchain block number for the query. Do not specify if using reuse_block or block. reuse_block: Whether to reuse the last-used blockchain block hash. Do not set if using block_hash or block. Returns: - Optional[DynamicInfo]: A list of DynamicInfo objects, each containing detailed information about a subnet. + Optional[list[DynamicInfo]]: A list of DynamicInfo objects, each containing detailed information about a + subnet, or None if the query fails. + Example: + # Get all subnets at current block + subnets = await subtensor.all_subnets() """ block_hash = await self.determine_block_hash( - block_number, block_hash, reuse_block + block=block_number, block_hash=block_hash, reuse_block=reuse_block ) if not block_hash and reuse_block: block_hash = self.substrate.last_block_hash - query = await self.substrate.runtime_call( - "SubnetInfoRuntimeApi", - "get_all_dynamic_info", + + query, subnet_prices = await asyncio.gather( + self.substrate.runtime_call( + api="SubnetInfoRuntimeApi", + method="get_all_dynamic_info", + block_hash=block_hash, + ), + self.get_subnet_prices(), + ) + + decoded = query.decode() + + for sn in decoded: + sn.update({"price": subnet_prices.get(sn["netuid"], Balance.from_tao(0))}) + return DynamicInfo.list_from_dicts(decoded)

    + + +
    +[docs] + async def blocks_since_last_step( + self, + netuid: int, + block: Optional[int] = None, + block_hash: Optional[str] = None, + reuse_block: bool = False, + ) -> Optional[int]: + """Queries the blockchain to determine how many blocks have passed since the last epoch step for a specific + subnet. + + Arguments: + netuid: The unique identifier of the subnetwork. + block: The block number for this query. Do not specify if using block_hash or reuse_block. + block_hash: The hash of the blockchain block number for the query. Do not specify if using reuse_block or + block. + reuse_block: Whether to reuse the last-used blockchain block hash. Do not set if using block_hash or block. + + Returns: + The number of blocks since the last step in the subnet, or None if the query fails. + + Example: + # Get blocks since last step for subnet 1 + blocks = await subtensor.blocks_since_last_step(netuid=1) + + # Get blocks since last step at specific block + blocks = await subtensor.blocks_since_last_step(netuid=1, block=1000000) + """ + query = await self.query_subtensor( + name="BlocksSinceLastStep", + block=block, block_hash=block_hash, + reuse_block=reuse_block, + params=[netuid], ) - subnets = DynamicInfo.list_from_dicts(query.decode()) - return subnets
    + return query.value if query is not None and hasattr(query, "value") else query
    [docs] async def blocks_since_last_update(self, netuid: int, uid: int) -> Optional[int]: - """ - Returns the number of blocks since the last update for a specific UID in the subnetwork. + """Returns the number of blocks since the last update, or ``None`` if the subnetwork or UID does not exist. Arguments: - netuid (int): The unique identifier of the subnetwork. - uid (int): The unique identifier of the neuron. + netuid: The unique identifier of the subnetwork. + uid: The unique identifier of the neuron. Returns: - Optional[int]: The number of blocks since the last update, or ``None`` if the subnetwork or UID does not - exist. + Optional[int]: The number of blocks since the last update, or None if the subnetwork or UID does not exist. + + Example: + # Get blocks since last update for UID 5 in subnet 1 + blocks = await subtensor.blocks_since_last_update(netuid=1, uid=5) + + # Check if neuron needs updating + blocks_since_update = await subtensor.blocks_since_last_update(netuid=1, uid=10) """ call = await self.get_hyperparameter(param_name="LastUpdate", netuid=netuid) return None if call is None else await self.get_current_block() - int(call[uid])
    @@ -970,25 +1271,28 @@

    Source code for bittensor.core.async_subtensor

    block_hash: Optional[str] = None, reuse_block: bool = False, ) -> list[tuple[int, list[tuple[int, int]]]]: - """ - Retrieves the bond distribution set by neurons within a specific subnet of the Bittensor network. - Bonds represent the investments or commitments made by neurons in one another, indicating a level of trust - and perceived value. This bonding mechanism is integral to the network's market-based approach to - measuring and rewarding machine intelligence. + """Retrieves the bond distribution set by subnet validators within a specific subnet. - Args: - netuid: The network UID of the subnet to query. - block: the block number for this query. Do not specify if using block_hash or reuse_block - block_hash: The hash of the blockchain block number for the query. Do not specify if using reuse_block or - block. - reuse_block: Whether to reuse the last-used blockchain block hash. Do not set if using block_hash or block. + Bonds represent the "investment" a subnet validator has made in evaluating a specific subnet miner. This + bonding mechanism is integral to the Yuma Consensus' design intent of incentivizing high-quality performance + by subnet miners, and honest evaluation by subnet validators. + + Arguments: + netuid: The unique identifier of the subnet. + block: The block number for this query. Do not specify if using block_hash or reuse_block. + block_hash: The hash of the block for the query. Do not specify if using reuse_block or block. + reuse_block: Whether to reuse the last-used block hash. Do not set if using block_hash or block. Returns: List of tuples mapping each neuron's UID to its bonds with other neurons. - Understanding bond distributions is crucial for analyzing the trust dynamics and market behavior within the - subnet. It reflects how neurons recognize and invest in each other's intelligence and contributions, - supporting diverse and niche systems within the Bittensor ecosystem. + Example: + # Get bonds for subnet 1 at block 1000000 + bonds = await subtensor.bonds(netuid=1, block=1000000) + + Notes: + - See <https://docs.learnbittensor.org/glossary#validator-miner-bonds> + - See <https://docs.learnbittensor.org/glossary#yuma-consensus> """ block_hash = await self.determine_block_hash(block, block_hash, reuse_block) b_map_encoded = await self.substrate.query_map( @@ -1006,16 +1310,33 @@

    Source code for bittensor.core.async_subtensor

    return b_map

    -
    -[docs] - async def commit(self, wallet: "Wallet", netuid: int, data: str) -> bool: - """ - Commits arbitrary data to the Bittensor network by publishing metadata. + async def commit( + self, wallet: "Wallet", netuid: int, data: str, period: Optional[int] = None + ) -> bool: + """Commits arbitrary data to the Bittensor network by publishing metadata. + + This method allows neurons to publish arbitrary data to the blockchain, which can be used for various purposes + such as sharing model updates, configuration data, or other network-relevant information. Arguments: - wallet (bittensor_wallet.Wallet): The wallet associated with the neuron committing the data. - netuid (int): The unique identifier of the subnetwork. - data (str): The data to be committed to the network. + wallet: The wallet associated with the neuron committing the data. + netuid: The unique identifier of the subnet. + data: The data to be committed to the network. + period: The number of blocks during which the transaction will remain valid after it's submitted. If the + transaction is not included in a block within that number of blocks, it will expire and be rejected. You + can think of it as an expiration date for the transaction. + + Returns: + bool: True if the commit was successful, False otherwise. + + Example: + # Commit some data to subnet 1 + success = await subtensor.commit(wallet=my_wallet, netuid=1, data="Hello Bittensor!") + + # Commit with custom period + success = await subtensor.commit(wallet=my_wallet, netuid=1, data="Model update v2.0", period=100) + + Note: See <https://docs.learnbittensor.org/glossary#commit-reveal> """ return await publish_metadata( subtensor=self, @@ -1023,8 +1344,8 @@

    Source code for bittensor.core.async_subtensor

    netuid=netuid, data_type=f"Raw{len(data)}", data=data.encode(), - )

    - + period=period, + ) set_commitment = commit @@ -1037,19 +1358,29 @@

    Source code for bittensor.core.async_subtensor

    block_hash: Optional[str] = None, reuse_block: bool = False, ) -> bool: - """ - Check if commit-reveal mechanism is enabled for a given network at a specific block. + """Check if commit-reveal mechanism is enabled for a given subnet at a specific block. + + The commit reveal feature is designed to solve the weight-copying problem by giving would-be weight-copiers + access only to stale weights. Copying stale weights should result in subnet validators departing from consensus. Arguments: - netuid: The network identifier for which to check the commit-reveal mechanism. + netuid: The unique identifier of the subnet for which to check the commit-reveal mechanism. block: The block number to query. Do not specify if using block_hash or reuse_block. - block_hash: The block hash of block at which to check the parameter. Do not set if using block or - reuse_block. - reuse_block: Whether to reuse the last-used blockchain block hash. Do not set if using block_hash or - block. + block_hash: The block hash at which to check the parameter. Do not set if using block or reuse_block. + reuse_block: Whether to reuse the last-used block hash. Do not set if using block_hash or block. Returns: - Returns the integer value of the hyperparameter if available; otherwise, returns None. + bool: True if commit-reveal mechanism is enabled, False otherwise. + + Example: + # Check if commit-reveal is enabled for subnet 1 + enabled = await subtensor.commit_reveal_enabled(netuid=1) + + # Check at specific block + enabled = await subtensor.commit_reveal_enabled(netuid=1, block=1000000) + + Notes: + See also: <https://docs.learnbittensor.org/glossary#commit-reveal> """ block_hash = await self.determine_block_hash(block, block_hash, reuse_block) call = await self.get_hyperparameter( @@ -1070,24 +1401,32 @@

    Source code for bittensor.core.async_subtensor

    block_hash: Optional[str] = None, reuse_block: bool = False, ) -> Optional[int]: - """ - Retrieves the 'Difficulty' hyperparameter for a specified subnet in the Bittensor network. + """Retrieves the 'Difficulty' hyperparameter for a specified subnet in the Bittensor network. - This parameter is instrumental in determining the computational challenge required for neurons to participate in - consensus and validation processes. + This parameter determines the computational challenge required for neurons to participate in consensus and + validation processes. The difficulty directly impacts the network's security and integrity by setting the + computational effort required for validating transactions and participating in the network's consensus + mechanism. Arguments: netuid: The unique identifier of the subnet. - block: The blockchain block number for the query. Do not specify if using block_hash or reuse_block + block: The block number for the query. Do not specify if using block_hash or reuse_block. block_hash: The hash of the block to retrieve the parameter from. Do not specify if using block or - reuse_block + reuse_block. reuse_block: Whether to use the last-used block. Do not set if using block_hash or block. Returns: - Optional[int]: The value of the 'Difficulty' hyperparameter if the subnet exists, ``None`` otherwise. + Optional[int]: The value of the 'Difficulty' hyperparameter if the subnet exists, None otherwise. - The 'Difficulty' parameter directly impacts the network's security and integrity by setting the computational - effort required for validating transactions and participating in the network's consensus mechanism. + Example: + # Get difficulty for subnet 1 + difficulty = await subtensor.difficulty(netuid=1) + + # Get difficulty at specific block + difficulty = await subtensor.difficulty(netuid=1, block=1000000) + + Notes: + See also: <https://docs.learnbittensor.org/glossary#difficulty> """ block_hash = await self.determine_block_hash(block, block_hash, reuse_block) call = await self.get_hyperparameter( @@ -1110,18 +1449,26 @@

    Source code for bittensor.core.async_subtensor

    block_hash: Optional[str] = None, reuse_block: bool = False, ) -> bool: - """ - Returns true if the hotkey is known by the chain and there are accounts. + """Returns true if the hotkey is known by the chain and there are accounts. - Args: + This method queries the SubtensorModule's Owner storage function to determine if the hotkey is registered. + + Arguments: hotkey_ss58: The SS58 address of the hotkey. - block: the block number for this query. Do not specify if using block_hash or reuse_block + block: The block number for this query. Do not specify if using block_hash or reuse_block. block_hash: The hash of the block number to check the hotkey against. Do not specify if using reuse_block or block. reuse_block: Whether to reuse the last-used blockchain hash. Do not set if using block_hash or block. Returns: - `True` if the hotkey is known by the chain and there are accounts, `False` otherwise. + bool: True if the hotkey is known by the chain and there are accounts, False otherwise. + + Example: + # Check if hotkey exists + exists = await subtensor.does_hotkey_exist(hotkey_ss58="5F...") + + # Check at specific block + exists = await subtensor.does_hotkey_exist(hotkey_ss58="5F...", block=1000000) """ block_hash = await self.determine_block_hash(block, block_hash, reuse_block) result = await self.substrate.query( @@ -1134,6 +1481,7 @@

    Source code for bittensor.core.async_subtensor

    return_val = ( False if result is None + # not the default key (0x0) else result != "5C4hrfjw9DjXZTzV3MwzrrAr9P1MJhSrvWGWqi1eSuyUpnhM" ) return return_val

    @@ -1147,24 +1495,40 @@

    Source code for bittensor.core.async_subtensor

    block_hash: Optional[str] = None, reuse_block: bool = False, ) -> list["SubnetInfo"]: - """ - Retrieves detailed information about all subnets within the Bittensor network. This function provides - comprehensive data on each subnet, including its characteristics and operational parameters. + """Retrieves detailed information about all subnets within the Bittensor network. + + This function provides comprehensive data on each subnet, including its characteristics and operational + parameters. Arguments: - block (Optional[int]): The blockchain block number for the query. - block_hash (Optional[str]): The blockchain block_hash for the query. - reuse_block (bool): Whether to reuse the last-used blockchain block hash. + block: The block number for the query. + block_hash: The block hash for the query. + reuse_block: Whether to reuse the last-used block hash. Returns: list[SubnetInfo]: A list of SubnetInfo objects, each containing detailed information about a subnet. - Gaining insights into the subnets' details assists in understanding the network's composition, the roles of - different subnets, and their unique features. - """ - result = await self.query_runtime_api( - runtime_api="SubnetInfoRuntimeApi", - method="get_subnets_info_v2", + Example: + # Get all subnet information + subnets = await subtensor.get_all_subnets_info() + + # Get at specific block + subnets = await subtensor.get_all_subnets_info(block=1000000) + + # Iterate over subnet information + for subnet in subnets: + print(f"Subnet {subnet.netuid}: {subnet.name}") + + Note: + Gaining insights into the subnets' details assists in understanding the network's composition, the roles + of different subnets, and their unique features. + + Notes: + See also: <https://docs.learnbittensor.org/glossary#subnet> + """ + result = await self.query_runtime_api( + runtime_api="SubnetInfoRuntimeApi", + method="get_subnets_info_v2", params=[], block=block, block_hash=block_hash, @@ -1172,8 +1536,13 @@

    Source code for bittensor.core.async_subtensor

    ) if not result: return [] - else: - return SubnetInfo.list_from_dicts(result)

    + + subnets_prices = await self.get_subnet_prices() + + for subnet in result: + subnet.update({"price": subnets_prices.get(subnet["netuid"], 0)}) + + return SubnetInfo.list_from_dicts(result)
    @@ -1185,17 +1554,27 @@

    Source code for bittensor.core.async_subtensor

    block_hash: Optional[str] = None, reuse_block: bool = False, ) -> Balance: - """ - Retrieves the balance for given coldkey. + """Retrieves the balance for given coldkey. + + This method queries the System module's Account storage to get the current balance of a coldkey address. The + balance represents the amount of TAO tokens held by the specified address. Arguments: - address (str): coldkey address. - block (Optional[int]): The blockchain block number for the query. - block_hash (Optional[str]): The blockchain block_hash for the query. - reuse_block (bool): Whether to reuse the last-used blockchain block hash. + address: The coldkey address in SS58 format. + block: The block number for the query. + block_hash: The block hash for the query. + reuse_block: Whether to reuse the last-used block hash. Returns: - Balance object. + Balance: The balance object containing the account's TAO balance. + + Example: + # Get balance for an address + balance = await subtensor.get_balance(address="5F...") + print(f"Balance: {balance.tao} TAO") + + # Get balance at specific block + balance = await subtensor.get_balance(address="5F...", block=1000000) """ block_hash = await self.determine_block_hash(block, block_hash, reuse_block) balance = await self.substrate.query( @@ -1217,17 +1596,24 @@

    Source code for bittensor.core.async_subtensor

    block_hash: Optional[str] = None, reuse_block: bool = False, ) -> dict[str, Balance]: - """ - Retrieves the balance for given coldkey(s) + """Retrieves the balance for given coldkey(s). + + This method efficiently queries multiple coldkey addresses in a single batch operation, returning a dictionary + mapping each address to its corresponding balance. This is more efficient than calling get_balance multiple + times. Arguments: - addresses (str): coldkey addresses(s). - block (Optional[int]): The blockchain block number for the query. - block_hash (Optional[str]): the block hash, optional. - reuse_block (Optional[bool]): whether to reuse the last-used block hash. + *addresses: Variable number of coldkey addresses in SS58 format. + block: The block number for the query. + block_hash: The block hash for the query. + reuse_block: Whether to reuse the last-used block hash. Returns: - Dict of {address: Balance objects}. + dict[str, Balance]: A dictionary mapping each address to its Balance object. + + Example: + # Get balances for multiple addresses + balances = await subtensor.get_balances("5F...", "5G...", "5H...") """ if reuse_block: block_hash = self.substrate.last_block_hash @@ -1254,16 +1640,26 @@

    Source code for bittensor.core.async_subtensor

    [docs] async def get_current_block(self) -> int: - """ - Returns the current block number on the Bittensor blockchain. This function provides the latest block number, - indicating the most recent state of the blockchain. + """Returns the current block number on the Bittensor blockchain. + + This function provides the latest block number, indicating the most recent state of the blockchain. Knowing + the current block number is essential for querying real-time data and performing time-sensitive operations on + the blockchain. It serves as a reference point for network activities and data synchronization. Returns: int: The current chain block number. - Knowing the current block number is essential for querying real-time data and performing time-sensitive - operations on the blockchain. It serves as a reference point for network activities and data - synchronization. + Example: + # Get current block number + current_block = await subtensor.get_current_block() + print(f"Current block: {current_block}") + + block = await subtensor.get_current_block() + if block > 1000000: + print("Network has progressed past block 1M") + + Notes: + See also: <https://docs.learnbittensor.org/glossary#block> """ return await self.substrate.get_block_number(None)

    @@ -1275,19 +1671,30 @@

    Source code for bittensor.core.async_subtensor

    [docs] async def get_block_hash(self, block: Optional[int] = None) -> str: - """ - Retrieves the hash of a specific block on the Bittensor blockchain. The block hash is a unique identifier - representing the cryptographic hash of the block's content, ensuring its integrity and immutability. + """Retrieves the hash of a specific block on the Bittensor blockchain. + + The block hash is a unique identifier representing the cryptographic hash of the block's content, ensuring its + integrity and immutability. It is a fundamental aspect of blockchain technology, providing a secure reference + to each block's data. It is crucial for verifying transactions, ensuring data consistency, and maintaining the + trustworthiness of the blockchain. Arguments: - block (int): The block number for which the hash is to be retrieved. + block: The block number for which the hash is to be retrieved. If ``None``, returns the latest block hash. Returns: str: The cryptographic hash of the specified block. - The block hash is a fundamental aspect of blockchain technology, providing a secure reference to each block's - data. It is crucial for verifying transactions, ensuring data consistency, and maintaining the - trustworthiness of the blockchain. + Example: + # Get hash for specific block + block_hash = await subtensor.get_block_hash(block=1000000) + print(f"Block 1000000 hash: {block_hash}") + + # Get latest block hash + latest_hash = await subtensor.get_block_hash() + print(f"Latest block hash: {latest_hash}") + + Notes: + See also: <https://docs.learnbittensor.org/glossary#block> """ if block: return await self._get_block_hash(block) @@ -1295,6 +1702,49 @@

    Source code for bittensor.core.async_subtensor

    return await self.substrate.get_chain_head()

    +
    +[docs] + async def get_parents( + self, + hotkey: str, + netuid: int, + block: Optional[int] = None, + block_hash: Optional[str] = None, + reuse_block: bool = False, + ) -> list[tuple[float, str]]: + """This method retrieves the parent of a given hotkey and netuid. It queries the SubtensorModule's ParentKeys + storage function to get the children and formats them before returning as a tuple. + + Arguments: + hotkey: The child hotkey SS58. + netuid: The netuid value. + block: The block number for which the children are to be retrieved. + block_hash: The hash of the block to retrieve the subnet unique identifiers from. + reuse_block: Whether to reuse the last-used block hash. + + Returns: + A list of formatted parents [(proportion, parent)] + """ + block_hash = await self.determine_block_hash(block, block_hash, reuse_block) + parents = await self.substrate.query( + module="SubtensorModule", + storage_function="ParentKeys", + params=[hotkey, netuid], + block_hash=block_hash, + reuse_block_hash=reuse_block, + ) + if parents: + formatted_parents = [] + for proportion, parent in parents.value: + # Convert U64 to int + formatted_child = decode_account_id(parent[0]) + normalized_proportion = u64_normalized_float(proportion) + formatted_parents.append((normalized_proportion, formatted_child)) + return formatted_parents + + return []
    + +
    [docs] async def get_children( @@ -1305,20 +1755,30 @@

    Source code for bittensor.core.async_subtensor

    block_hash: Optional[str] = None, reuse_block: bool = False, ) -> tuple[bool, list[tuple[float, str]], str]: - """ - This method retrieves the children of a given hotkey and netuid. It queries the SubtensorModule's ChildKeys - storage function to get the children and formats them before returning as a tuple. + """Retrieves the children of a given hotkey and netuid. + + This method queries the SubtensorModule's ChildKeys storage function to get the children and formats them before + returning as a tuple. It provides information about the child neurons that a validator has set for weight + distribution. Arguments: - hotkey (str): The hotkey value. - netuid (int): The netuid value. - block (Optional[int]): The block number for which the children are to be retrieved. - block_hash (Optional[str]): The hash of the block to retrieve the subnet unique identifiers from. - reuse_block (bool): Whether to reuse the last-used block hash. + hotkey: The hotkey value. + netuid: The netuid value. + block: The block number for which the children are to be retrieved. + block_hash: The hash of the block to retrieve the subnet unique identifiers from. + reuse_block: Whether to reuse the last-used block hash. Returns: - A tuple containing a boolean indicating success or failure, a list of formatted children, and an error - message (if applicable) + tuple[bool, list[tuple[float, str]], str]: A tuple containing a boolean indicating success or failure, a + list of formatted children with their proportions, and an error message (if applicable). + + Example: + # Get children for a hotkey in subnet 1 + success, children, error = await subtensor.get_children(hotkey="5F...", netuid=1) + + if success: + for proportion, child_hotkey in children: + print(f"Child {child_hotkey}: {proportion}") """ block_hash = await self.determine_block_hash(block, block_hash, reuse_block) try: @@ -1343,6 +1803,61 @@

    Source code for bittensor.core.async_subtensor

    return False, [], format_error_message(e)

    +
    +[docs] + async def get_children_pending( + self, + hotkey: str, + netuid: int, + block: Optional[int] = None, + block_hash: Optional[str] = None, + reuse_block: bool = False, + ) -> tuple[ + list[tuple[float, str]], + int, + ]: + """Retrieves the pending children of a given hotkey and netuid. + + This method queries the SubtensorModule's PendingChildKeys storage function to get children that are pending + approval or in a cooldown period. These are children that have been proposed but not yet finalized. + + Arguments: + hotkey: The hotkey value. + netuid: The netuid value. + block: The block number for which the children are to be retrieved. + block_hash: The hash of the block to retrieve the subnet unique identifiers from. + reuse_block: Whether to reuse the last-used block hash. + + Returns: + list[tuple[float, str]]: A list of children with their proportions. + int: The cool-down block number. + """ + + response = await self.substrate.query( + module="SubtensorModule", + storage_function="PendingChildKeys", + params=[netuid, hotkey], + block_hash=await self.determine_block_hash( + block, + block_hash, + reuse_block, + ), + reuse_block_hash=reuse_block, + ) + children, cooldown = response.value + + return ( + [ + ( + u64_normalized_float(proportion), + decode_account_id(child[0]), + ) + for proportion, child in children + ], + cooldown, + )
    + +
    [docs] async def get_commitment( @@ -1353,19 +1868,33 @@

    Source code for bittensor.core.async_subtensor

    block_hash: Optional[str] = None, reuse_block: bool = False, ) -> str: - """ - Retrieves the on-chain commitment for a specific neuron in the Bittensor network. + """Retrieves the on-chain commitment for a specific neuron in the Bittensor network. + + This method retrieves the commitment data that a neuron has published to the blockchain. Commitments are used in + the commit-reveal mechanism for secure weight setting and other network operations. Arguments: - netuid (int): The unique identifier of the subnetwork. - uid (int): The unique identifier of the neuron. - block (Optional[int]): The block number to retrieve the commitment from. If None, the latest block is used. - Default is ``None``. - block_hash (Optional[str]): The hash of the block to retrieve the subnet unique identifiers from. - reuse_block (bool): Whether to reuse the last-used block hash. + netuid: The unique identifier of the subnetwork. + uid: The unique identifier of the neuron. + block: The block number to retrieve the commitment from. If None, the latest block is used. + Default is None. + block_hash: The hash of the block to retrieve the subnet unique identifiers from. + reuse_block: Whether to reuse the last-used block hash. Returns: str: The commitment data as a string. + + Example: + # Get commitment for UID 5 in subnet 1 + commitment = await subtensor.get_commitment(netuid=1, uid=5) + print(f"Commitment: {commitment}") + + # Get commitment at specific block + commitment = await subtensor.get_commitment( + netuid=1, + uid=5, + block=1000000 + ) """ metagraph = await self.metagraph(netuid) try: @@ -1385,6 +1914,37 @@

    Source code for bittensor.core.async_subtensor

    return ""

    +
    +[docs] + async def get_last_commitment_bonds_reset_block( + self, netuid: int, uid: int + ) -> Optional[int]: + """ + Retrieves the last block number when the bonds reset were triggered by publish_metadata for a specific neuron. + + Arguments: + netuid: The unique identifier of the subnetwork. + uid: The unique identifier of the neuron. + + Returns: + Optional[int]: The block number when the bonds were last reset, or None if not found. + """ + + metagraph = await self.metagraph(netuid) + try: + hotkey = metagraph.hotkeys[uid] + except IndexError: + logging.error( + "Your uid is not in the hotkeys. Please double-check your UID." + ) + return None + block = await get_last_bonds_reset(self, netuid, hotkey) + try: + return decode_block(block) + except TypeError: + return None
    + +
    [docs] async def get_all_commitments( @@ -1394,18 +1954,28 @@

    Source code for bittensor.core.async_subtensor

    block_hash: Optional[str] = None, reuse_block: bool = False, ) -> dict[str, str]: - """ - Retrieves the on-chain commitments for a specific subnet in the Bittensor network. + """Retrieves the on-chain commitments for a specific subnet in the Bittensor network. + + This method retrieves all commitment data for all neurons in a specific subnet. This is useful for analyzing the + commit-reveal patterns across an entire subnet. Arguments: - netuid (int): The unique identifier of the subnetwork. - block (Optional[int]): The block number to retrieve the commitment from. If None, the latest block is used. - Default is ``None``. - block_hash (Optional[str]): The hash of the block to retrieve the subnet unique identifiers from. - reuse_block (bool): Whether to reuse the last-used block hash. + netuid: The unique identifier of the subnetwork. + block: The block number to retrieve the commitment from. If None, the latest block is used. + Default is None. + block_hash: The hash of the block to retrieve the subnet unique identifiers from. + reuse_block: Whether to reuse the last-used block hash. Returns: - dict[str, str]: A mapping of the ss58:commitment with the commitment as a string + dict[str, str]: A mapping of the ss58:commitment with the commitment as a string. + + Example: + # Get all commitments for subnet 1 + commitments = await subtensor.get_all_commitments(netuid=1) + + # Iterate over all commitments + for hotkey, commitment in commitments.items(): + print(f"Hotkey {hotkey}: {commitment}") """ query = await self.query_map( module="Commitments", @@ -1417,12 +1987,128 @@

    Source code for bittensor.core.async_subtensor

    ) result = {} async for id_, value in query: - result[decode_account_id(id_[0])] = decode_account_id(value) + result[decode_account_id(id_[0])] = decode_metadata(value.value) + return result

    + + +
    +[docs] + async def get_revealed_commitment_by_hotkey( + self, + netuid: int, + hotkey_ss58_address: Optional[str] = None, + block: Optional[int] = None, + block_hash: Optional[str] = None, + reuse_block: bool = False, + ) -> Optional[tuple[tuple[int, str], ...]]: + """Returns hotkey related revealed commitment for a given netuid. + + Arguments: + netuid: The unique identifier of the subnetwork. + block: The block number to retrieve the commitment from. Default is ``None``. + hotkey_ss58_address: The ss58 address of the committee member. + block_hash: The hash of the block to retrieve the subnet unique identifiers from. + reuse_block: Whether to reuse the last-used block hash. + + Returns: + result (tuple[int, str): A tuple of reveal block and commitment message. + """ + if not is_valid_ss58_address(address=hotkey_ss58_address): + raise ValueError(f"Invalid ss58 address {hotkey_ss58_address} provided.") + + query = await self.query_module( + module="Commitments", + name="RevealedCommitments", + params=[netuid, hotkey_ss58_address], + block=block, + block_hash=block_hash, + reuse_block=reuse_block, + ) + if query is None: + return None + return tuple(decode_revealed_commitment(pair) for pair in query)
    + + +
    +[docs] + async def get_revealed_commitment( + self, + netuid: int, + uid: int, + block: Optional[int] = None, + ) -> Optional[tuple[tuple[int, str], ...]]: + """Returns uid related revealed commitment for a given netuid. + + Arguments: + netuid: The unique identifier of the subnetwork. + uid: The neuron uid to retrieve the commitment from. + block: The block number to retrieve the commitment from. Default is ``None``. + + Returns: + result (Optional[tuple[int, str]]: A tuple of reveal block and commitment message. + + Example of result: + ( (12, "Alice message 1"), (152, "Alice message 2") ) + ( (12, "Bob message 1"), (147, "Bob message 2") ) + """ + try: + meta_info = await self.get_metagraph_info(netuid, block=block) + if meta_info: + hotkey_ss58_address = meta_info.hotkeys[uid] + else: + raise ValueError(f"Subnet with netuid {netuid} does not exist.") + except IndexError: + raise ValueError(f"Subnet {netuid} does not have a neuron with uid {uid}.") + + return await self.get_revealed_commitment_by_hotkey( + netuid=netuid, hotkey_ss58_address=hotkey_ss58_address, block=block + )
    + + +
    +[docs] + async def get_all_revealed_commitments( + self, + netuid: int, + block: Optional[int] = None, + block_hash: Optional[str] = None, + reuse_block: bool = False, + ) -> dict[str, tuple[tuple[int, str], ...]]: + """Returns all revealed commitments for a given netuid. + + Arguments: + netuid: The unique identifier of the subnetwork. + block: The block number to retrieve the commitment from. Default is ``None``. + block_hash: The hash of the block to retrieve the subnet unique identifiers from. + reuse_block: Whether to reuse the last-used block hash. + + Returns: + result: A dictionary of all revealed commitments in view {ss58_address: (reveal block, commitment message)}. + + Example of result: + { + "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY": ( (12, "Alice message 1"), (152, "Alice message 2") ), + "5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty": ( (12, "Bob message 1"), (147, "Bob message 2") ), + } + """ + query = await self.query_map( + module="Commitments", + name="RevealedCommitments", + params=[netuid], + block=block, + block_hash=block_hash, + reuse_block=reuse_block, + ) + + result = {} + async for pair in query: + hotkey_ss58_address, commitment_message = ( + decode_revealed_commitment_with_hotkey(pair) + ) + result[hotkey_ss58_address] = commitment_message return result
    -
    -[docs] async def get_current_weight_commit_info( self, netuid: int, @@ -1434,10 +2120,10 @@

    Source code for bittensor.core.async_subtensor

    Retrieves CRV3 weight commit information for a specific subnet. Arguments: - netuid (int): The unique identifier of the subnet. - block (Optional[int]): The blockchain block number for the query. Default is ``None``. - block_hash (Optional[str]): The hash of the block to retrieve the subnet unique identifiers from. - reuse_block (bool): Whether to reuse the last-used block hash. + netuid: The unique identifier of the subnet. + block: The blockchain block number for the query. Default is ``None``. + block_hash: The hash of the block to retrieve the subnet unique identifiers from. + reuse_block: Whether to reuse the last-used block hash. Returns: list: A list of commit details, where each entry is a dictionary with keys 'who', 'serialized_commit', and @@ -1453,8 +2139,7 @@

    Source code for bittensor.core.async_subtensor

    ) commits = result.records[0][1] if result.records else [] - return [WeightCommitInfo.from_vec_u8(commit) for commit in commits]

    - + return [WeightCommitInfo.from_vec_u8(commit) for commit in commits]
    [docs] @@ -1467,19 +2152,19 @@

    Source code for bittensor.core.async_subtensor

    ) -> Optional[DelegateInfo]: """ Retrieves detailed information about a delegate neuron based on its hotkey. This function provides a - comprehensive view of the delegate's status, including its stakes, nominators, and reward distribution. + comprehensive view of the delegate's status, including its stakes, nominators, and reward distribution. Arguments: - hotkey_ss58 (str): The ``SS58`` address of the delegate's hotkey. - block (Optional[int]): The blockchain block number for the query. - block_hash (Optional[str]): The hash of the block to retrieve the subnet unique identifiers from. - reuse_block (bool): Whether to reuse the last-used block hash. + hotkey_ss58: The ``SS58`` address of the delegate's hotkey. + block: The blockchain block number for the query. + block_hash: The hash of the block to retrieve the subnet unique identifiers from. + reuse_block: Whether to reuse the last-used block hash. Returns: Optional[DelegateInfo]: Detailed information about the delegate neuron, ``None`` if not found. This function is essential for understanding the roles and influence of delegate neurons within the Bittensor - network's consensus and governance structures. + network's consensus and governance structures. """ result = await self.query_runtime_api( @@ -1504,75 +2189,33 @@

    Source code for bittensor.core.async_subtensor

    block: Optional[int] = None, block_hash: Optional[str] = None, reuse_block: bool = False, - ) -> dict[str, "DelegatesDetails"]: + ) -> dict[str, ChainIdentity]: """ - Fetches delegates identities from the chain and GitHub. Preference is given to chain data, and missing info is - filled-in by the info from GitHub. At some point, we want to totally move away from fetching this info from - GitHub, but chain data is still limited in that regard. + Fetches delegates identities from the chain. Arguments: - block (Optional[int]): The blockchain block number for the query. - block_hash (str): the hash of the blockchain block for the query - reuse_block (bool): Whether to reuse the last-used blockchain block hash. + block: The blockchain block number for the query. + block_hash: the hash of the blockchain block for the query + reuse_block: Whether to reuse the last-used blockchain block hash. Returns: - Dict {ss58: DelegatesDetails, ...} + Dict {ss58: ChainIdentity, ...} """ block_hash = await self.determine_block_hash(block, block_hash, reuse_block) - timeout = aiohttp.ClientTimeout(10.0) - async with aiohttp.ClientSession(timeout=timeout) as session: - identities_info, response = await asyncio.gather( - self.substrate.query_map( - module="Registry", - storage_function="IdentityOf", - block_hash=block_hash, - reuse_block_hash=reuse_block, - ), - session.get(DELEGATES_DETAILS_URL), - ) - - all_delegates_details = {} - async for ss58_address, identity in identities_info: - all_delegates_details.update( - { - decode_account_id( - ss58_address[0] - ): DelegatesDetails.from_chain_data( - decode_hex_identity_dict(identity.value["info"]) - ) - } - ) - - if response.ok: - all_delegates: dict[str, Any] = await response.json(content_type=None) - - for delegate_hotkey, delegate_details in all_delegates.items(): - delegate_info = all_delegates_details.setdefault( - delegate_hotkey, - DelegatesDetails( - display=delegate_details.get("name", ""), - web=delegate_details.get("url", ""), - additional=delegate_details.get("description", ""), - pgp_fingerprint=delegate_details.get("fingerprint", ""), - ), - ) - delegate_info.display = ( - delegate_info.display or delegate_details.get("name", "") - ) - delegate_info.web = delegate_info.web or delegate_details.get( - "url", "" - ) - delegate_info.additional = ( - delegate_info.additional - or delegate_details.get("description", "") - ) - delegate_info.pgp_fingerprint = ( - delegate_info.pgp_fingerprint - or delegate_details.get("fingerprint", "") - ) + identities = await self.substrate.query_map( + module="SubtensorModule", + storage_function="IdentitiesV2", + block_hash=block_hash, + reuse_block_hash=reuse_block, + ) - return all_delegates_details

    + return { + decode_account_id(ss58_address[0]): ChainIdentity.from_dict( + decode_hex_identity_dict(identity.value), + ) + async for ss58_address, identity in identities + }
    @@ -1583,22 +2226,22 @@

    Source code for bittensor.core.async_subtensor

    block: Optional[int] = None, block_hash: Optional[str] = None, reuse_block: bool = False, - ) -> Optional[float]: + ) -> float: """ Retrieves the delegate 'take' percentage for a neuron identified by its hotkey. The 'take' represents the - percentage of rewards that the delegate claims from its nominators' stakes. + percentage of rewards that the delegate claims from its nominators' stakes. Arguments: - hotkey_ss58 (str): The ``SS58`` address of the neuron's hotkey. - block (Optional[int]): The blockchain block number for the query. - block_hash (Optional[str]): The hash of the block to retrieve the subnet unique identifiers from. - reuse_block (bool): Whether to reuse the last-used block hash. + hotkey_ss58: The ``SS58`` address of the neuron's hotkey. + block: The blockchain block number for the query. + block_hash: The hash of the block to retrieve the subnet unique identifiers from. + reuse_block: Whether to reuse the last-used block hash. Returns: - Optional[float]: The delegate take percentage, None if not available. + float: The delegate take percentage. The delegate take is a critical parameter in the network's incentive structure, influencing the distribution of - rewards among neurons and their nominators. + rewards among neurons and their nominators. """ block_hash = await self.determine_block_hash(block, block_hash, reuse_block) result = await self.query_subtensor( @@ -1607,11 +2250,8 @@

    Source code for bittensor.core.async_subtensor

    reuse_block=reuse_block, params=[hotkey_ss58], ) - return ( - None - if result is None - else u16_normalized_float(getattr(result, "value", 0)) - )

    + + return u16_normalized_float(result.value) # type: ignore
    @@ -1628,16 +2268,16 @@

    Source code for bittensor.core.async_subtensor

    delegates that a specific account has staked tokens on. Arguments: - coldkey_ss58 (str): The `SS58` address of the account's coldkey. - block (Optional[int]): The blockchain block number for the query. - block_hash (Optional[str]): The hash of the blockchain block number for the query. - reuse_block (bool): Whether to reuse the last-used blockchain block hash. + coldkey_ss58: The ``SS58`` address of the account's coldkey. + block: The blockchain block number for the query. + block_hash: The hash of the blockchain block number for the query. + reuse_block: Whether to reuse the last-used blockchain block hash. Returns: A list of tuples, each containing a delegate's information and staked amount. This function is important for account holders to understand their stake allocations and their involvement in - the network's delegation and consensus mechanisms. + the network's delegation and consensus mechanisms. """ result = await self.query_runtime_api( @@ -1652,7 +2292,7 @@

    Source code for bittensor.core.async_subtensor

    if not result: return [] - return DelegateInfo.delegated_list_from_dicts(result)

    + return DelegatedInfo.list_from_dicts(result)
    @@ -1667,9 +2307,9 @@

    Source code for bittensor.core.async_subtensor

    Fetches all delegates on the chain Arguments: - block (Optional[int]): The blockchain block number for the query. - block_hash (Optional[str]): hash of the blockchain block number for the query. - reuse_block (Optional[bool]): whether to reuse the last-used block hash. + block: The blockchain block number for the query. + block_hash: hash of the blockchain block number for the query. + reuse_block: whether to reuse the last-used block hash. Returns: List of DelegateInfo objects, or an empty list if there are no delegates. @@ -1702,15 +2342,15 @@

    Source code for bittensor.core.async_subtensor

    Accounts with balances below this threshold can be reaped to conserve network resources. Arguments: - block (Optional[int]): The blockchain block number for the query. - block_hash (str): Block hash at which to query the deposit amount. If `None`, the current block is used. - reuse_block (bool): Whether to reuse the last-used blockchain block hash. + block: The blockchain block number for the query. + block_hash: Block hash at which to query the deposit amount. If ``None``, the current block is used. + reuse_block: Whether to reuse the last-used blockchain block hash. Returns: The existential deposit amount. The existential deposit is a fundamental economic parameter in the Bittensor network, ensuring efficient use of - storage and preventing the proliferation of dust accounts. + storage and preventing the proliferation of dust accounts. """ block_hash = await self.determine_block_hash(block, block_hash, reuse_block) result = await self.substrate.get_constant( @@ -1738,16 +2378,22 @@

    Source code for bittensor.core.async_subtensor

    """ Retrieves the owner of the given hotkey at a specific block hash. This function queries the blockchain for the owner of the provided hotkey. If the hotkey does not exist at the - specified block hash, it returns None. + specified block hash, it returns None. Arguments: - hotkey_ss58 (str): The SS58 address of the hotkey. - block (Optional[int]): The blockchain block number for the query. - block_hash (Optional[str]): The hash of the block at which to check the hotkey ownership. - reuse_block (bool): Whether to reuse the last-used blockchain hash. + hotkey_ss58: The SS58 address of the hotkey. + block: The blockchain block number for the query. + block_hash: The hash of the block at which to check the hotkey ownership. + reuse_block: Whether to reuse the last-used blockchain hash. Returns: Optional[str]: The SS58 address of the owner if the hotkey exists, or None if it doesn't. + + Notes: + See also: + - <https://docs.learnbittensor.org/glossary#hotkey> + - <https://docs.learnbittensor.org/glossary#subnet> + - <https://docs.learnbittensor.org/glossary#neuron> """ block_hash = await self.determine_block_hash(block, block_hash, reuse_block) hk_owner_query = await self.substrate.query( @@ -1769,13 +2415,9 @@

    Source code for bittensor.core.async_subtensor

    async def get_minimum_required_stake(self): """ Returns the minimum required stake for nominators in the Subtensor network. - This method retries the substrate call up to three times with exponential backoff in case of failures. Returns: Balance: The minimum required stake as a Balance object. - - Raises: - Exception: If the substrate call fails after the maximum number of retries. """ result = await self.substrate.query( module="SubtensorModule", storage_function="NominatorMinRequiredStake" @@ -1789,15 +2431,22 @@

    Source code for bittensor.core.async_subtensor

    async def get_metagraph_info( self, netuid: int, + field_indices: Optional[Union[list[SelectiveMetagraphIndex], list[int]]] = None, block: Optional[int] = None, block_hash: Optional[str] = None, reuse_block: bool = False, ) -> Optional[MetagraphInfo]: """ - Retrieves the MetagraphInfo dataclass from the node for a single subnet (netuid) + Retrieves full or partial metagraph information for the specified subnet (netuid). + + A metagraph is a data structure that contains comprehensive information about the current state of a subnet, + including detailed information on all the nodes (neurons) such as subnet validator stakes and subnet weights + in the subnet. Metagraph aids in calculating emissions. Arguments: - netuid: The NetUID of the subnet. + netuid: The unique identifier of the subnet to query. + field_indices: An optional list of SelectiveMetagraphIndex or int values specifying which fields to + retrieve. If not provided, all available fields will be returned. block: the block number at which to retrieve the hyperparameter. Do not specify if using block_hash or reuse_block block_hash: The hash of blockchain block number for the query. Do not specify if using @@ -1805,21 +2454,56 @@

    Source code for bittensor.core.async_subtensor

    reuse_block: Whether to reuse the last-used block hash. Do not set if using block_hash or block. Returns: - MetagraphInfo dataclass + Optional[MetagraphInfo]: A MetagraphInfo object containing the requested subnet data, or None if the subnet + with the given netuid does not exist. + + Example: + meta_info = await subtensor.get_metagraph_info(netuid=2) + + partial_meta_info = await subtensor.get_metagraph_info( + netuid=2, + field_indices=[SelectiveMetagraphIndex.Name, SelectiveMetagraphIndex.OwnerHotkeys] + ) + + Notes: + See also: + - <https://docs.learnbittensor.org/glossary#metagraph> + - <https://docs.learnbittensor.org/glossary#emission> """ block_hash = await self.determine_block_hash(block, block_hash, reuse_block) if not block_hash and reuse_block: block_hash = self.substrate.last_block_hash - query = await self.substrate.runtime_call( - "SubnetInfoRuntimeApi", - "get_metagraph", - params=[netuid], - block_hash=block_hash, - ) + if field_indices: + if isinstance(field_indices, list) and all( + isinstance(f, (SelectiveMetagraphIndex, int)) for f in field_indices + ): + indexes = [ + f.value if isinstance(f, SelectiveMetagraphIndex) else f + for f in field_indices + ] + else: + raise ValueError( + "`field_indices` must be a list of SelectiveMetagraphIndex enums or ints." + ) + + query = await self.substrate.runtime_call( + "SubnetInfoRuntimeApi", + "get_selective_metagraph", + params=[netuid, indexes if 0 in indexes else [0] + indexes], + block_hash=block_hash, + ) + else: + query = await self.substrate.runtime_call( + "SubnetInfoRuntimeApi", + "get_metagraph", + params=[netuid], + ) + if query.value is None: logging.error(f"Subnet {netuid} does not exist.") return None + return MetagraphInfo.from_dict(query.value)

    @@ -1837,12 +2521,15 @@

    Source code for bittensor.core.async_subtensor

    Arguments: block: the block number at which to retrieve the hyperparameter. Do not specify if using block_hash or reuse_block - block_hash (Optional[str]): The hash of blockchain block number for the query. Do not specify if using + block_hash: The hash of blockchain block number for the query. Do not specify if using block or reuse_block - reuse_block (bool): Whether to reuse the last-used block hash. Do not set if using block_hash or block. + reuse_block: Whether to reuse the last-used block hash. Do not set if using block_hash or block. Returns: MetagraphInfo dataclass + + Notes: + See also: See <https://docs.learnbittensor.org/glossary#metagraph> """ block_hash = await self.determine_block_hash(block, block_hash, reuse_block) if not block_hash and reuse_block: @@ -1866,13 +2553,13 @@

    Source code for bittensor.core.async_subtensor

    ) -> list[int]: """ Retrieves a list of subnet UIDs (netuids) for which a given hotkey is a member. This function identifies the - specific subnets within the Bittensor network where the neuron associated with the hotkey is active. + specific subnets within the Bittensor network where the neuron associated with the hotkey is active. Arguments: - hotkey_ss58 (str): The ``SS58`` address of the neuron's hotkey. - block (Optional[int]): The blockchain block number for the query. - block_hash (Optional[str]): The hash of the blockchain block number at which to perform the query. - reuse_block (Optional[bool]): Whether to reuse the last-used block hash when retrieving info. + hotkey_ss58: The ``SS58`` address of the neuron's hotkey. + block: The blockchain block number for the query. + block_hash: The hash of the blockchain block number at which to perform the query. + reuse_block: Whether to reuse the last-used block hash when retrieving info. Returns: A list of netuids where the neuron is a member. @@ -1905,7 +2592,7 @@

    Source code for bittensor.core.async_subtensor

    ) -> Optional[Certificate]: """ Retrieves the TLS certificate for a specific neuron identified by its unique identifier (UID) within a - specified subnet (netuid) of the Bittensor network. + specified subnet (netuid) of the Bittensor network. Arguments: hotkey: The hotkey to query. @@ -1916,17 +2603,20 @@

    Source code for bittensor.core.async_subtensor

    reuse_block: Whether to use the last-used block. Do not set if using block_hash or block. Returns: - the certificate of the neuron if found, `None` otherwise. + the certificate of the neuron if found, ``None`` otherwise. This function is used for certificate discovery for setting up mutual tls communication between neurons. """ block_hash = await self.determine_block_hash(block, block_hash, reuse_block) - certificate = await self.query_module( - module="SubtensorModule", - name="NeuronCertificates", - block_hash=block_hash, - reuse_block=reuse_block, - params=[netuid, hotkey], + certificate = cast( + Union[str, dict], + await self.query_module( + module="SubtensorModule", + name="NeuronCertificates", + block_hash=block_hash, + reuse_block=reuse_block, + params=[netuid, hotkey], + ), ) try: if certificate: @@ -1937,34 +2627,243 @@

    Source code for bittensor.core.async_subtensor

    return None

    -
    -[docs] - async def get_neuron_for_pubkey_and_subnet( +
    +[docs] + async def get_all_neuron_certificates( self, - hotkey_ss58: str, netuid: int, block: Optional[int] = None, block_hash: Optional[str] = None, reuse_block: bool = False, - ) -> "NeuronInfo": + ) -> dict[str, Certificate]: """ - Retrieves information about a neuron based on its public key (hotkey SS58 address) and the specific subnet UID - (netuid). This function provides detailed neuron information for a particular subnet within the Bittensor - network. + Retrieves the TLS certificates for neurons within a specified subnet (netuid) of the Bittensor network. Arguments: - hotkey_ss58 (str): The ``SS58`` address of the neuron's hotkey. - netuid (int): The unique identifier of the subnet. - block (Optional[int]): The blockchain block number for the query. - block_hash (Optional[int]): The blockchain block number at which to perform the query. - reuse_block (bool): Whether to reuse the last-used blockchain block hash. + netuid: The unique identifier of the subnet. + block: The blockchain block number for the query. + block_hash: The hash of the block to retrieve the parameter from. Do not specify if using block or + reuse_block. + reuse_block: Whether to use the last-used block. Do not set if using block_hash or block. Returns: - Optional[bittensor.core.chain_data.neuron_info.NeuronInfo]: Detailed information about the neuron if found, - ``None`` otherwise. + {ss58: Certificate} for the key/Certificate pairs on the subnet + + This function is used for certificate discovery for setting up mutual tls communication between neurons. + """ + query_certificates = await self.query_map( + module="SubtensorModule", + name="NeuronCertificates", + params=[netuid], + block=block, + block_hash=block_hash, + reuse_block=reuse_block, + ) + output = {} + async for key, item in query_certificates: + output[decode_account_id(key)] = Certificate(item.value) + return output
    + + +
    +[docs] + async def get_liquidity_list( + self, + wallet: "Wallet", + netuid: int, + block: Optional[int] = None, + block_hash: Optional[str] = None, + reuse_block: bool = False, + ) -> Optional[list[LiquidityPosition]]: + """ + Retrieves all liquidity positions for the given wallet on a specified subnet (netuid). + Calculates associated fee rewards based on current global and tick-level fee data. + + Arguments: + wallet: Wallet instance to fetch positions for. + netuid: Subnet unique id. + block: The blockchain block number for the query. + block_hash: The hash of the block to retrieve the parameter from. Do not specify if using block or + reuse_block. + reuse_block: Whether to use the last-used block. Do not set if using block_hash or block. + + Returns: + List of liquidity positions, or None if subnet does not exist. + """ + if not await self.subnet_exists(netuid=netuid): + logging.debug(f"Subnet {netuid} does not exist.") + return None + + if not await self.is_subnet_active(netuid=netuid): + logging.debug(f"Subnet {netuid} is not active.") + return None + + block_hash = await self.determine_block_hash( + block=block, block_hash=block_hash, reuse_block=reuse_block + ) + + query = self.substrate.query + ( + fee_global_tao, + fee_global_alpha, + sqrt_price, + positions_response, + ) = await asyncio.gather( + query( + module="Swap", + storage_function="FeeGlobalTao", + params=[netuid], + block_hash=block_hash, + ), + query( + module="Swap", + storage_function="FeeGlobalAlpha", + params=[netuid], + block_hash=block_hash, + ), + query( + module="Swap", + storage_function="AlphaSqrtPrice", + params=[netuid], + block_hash=block_hash, + ), + self.query_map( + module="Swap", + name="Positions", + block=block, + params=[netuid, wallet.coldkeypub.ss58_address], + ), + ) + # convert to floats + fee_global_tao = fixed_to_float(fee_global_tao) + fee_global_alpha = fixed_to_float(fee_global_alpha) + sqrt_price = fixed_to_float(sqrt_price) + + # Fetch global fees and current price + current_tick = price_to_tick(sqrt_price**2) + + # Fetch positions + positions = [] + async for _, p in positions_response: + position = p.value + + tick_low_idx = position.get("tick_low")[0] + tick_high_idx = position.get("tick_high")[0] + + tick_low, tick_high = await asyncio.gather( + query( + module="Swap", + storage_function="Ticks", + params=[netuid, tick_low_idx], + block_hash=block_hash, + ), + query( + module="Swap", + storage_function="Ticks", + params=[netuid, tick_high_idx], + block_hash=block_hash, + ), + ) + + # Calculate fees above/below range for both tokens + tao_below = get_fees( + current_tick=current_tick, + tick=tick_low, + tick_index=tick_low_idx, + quote=True, + global_fees_tao=fee_global_tao, + global_fees_alpha=fee_global_alpha, + above=False, + ) + tao_above = get_fees( + current_tick=current_tick, + tick=tick_high, + tick_index=tick_high_idx, + quote=True, + global_fees_tao=fee_global_tao, + global_fees_alpha=fee_global_alpha, + above=True, + ) + alpha_below = get_fees( + current_tick=current_tick, + tick=tick_low, + tick_index=tick_low_idx, + quote=False, + global_fees_tao=fee_global_tao, + global_fees_alpha=fee_global_alpha, + above=False, + ) + alpha_above = get_fees( + current_tick=current_tick, + tick=tick_high, + tick_index=tick_high_idx, + quote=False, + global_fees_tao=fee_global_tao, + global_fees_alpha=fee_global_alpha, + above=True, + ) + + # Calculate fees earned by position + fees_tao, fees_alpha = calculate_fees( + position=position, + global_fees_tao=fee_global_tao, + global_fees_alpha=fee_global_alpha, + tao_fees_below_low=tao_below, + tao_fees_above_high=tao_above, + alpha_fees_below_low=alpha_below, + alpha_fees_above_high=alpha_above, + netuid=netuid, + ) + + positions.append( + LiquidityPosition( + **{ + "id": position.get("id")[0], + "price_low": Balance.from_tao( + tick_to_price(position.get("tick_low")[0]) + ), + "price_high": Balance.from_tao( + tick_to_price(position.get("tick_high")[0]) + ), + "liquidity": Balance.from_rao(position.get("liquidity")), + "fees_tao": fees_tao, + "fees_alpha": fees_alpha, + "netuid": position.get("netuid"), + } + ) + ) + + return positions
    + + +
    +[docs] + async def get_neuron_for_pubkey_and_subnet( + self, + hotkey_ss58: str, + netuid: int, + block: Optional[int] = None, + block_hash: Optional[str] = None, + reuse_block: bool = False, + ) -> "NeuronInfo": + """ + Retrieves information about a neuron based on its public key (hotkey SS58 address) and the specific subnet UID + (netuid). This function provides detailed neuron information for a particular subnet within the Bittensor + network. + + Arguments: + hotkey_ss58: The ``SS58`` address of the neuron's hotkey. + netuid: The unique identifier of the subnet. + block: The blockchain block number for the query. + block_hash: The blockchain block number at which to perform the query. + reuse_block: Whether to reuse the last-used blockchain block hash. + + Returns: + Optional[bittensor.core.chain_data.neuron_info.NeuronInfo]: Detailed information about the neuron if found, + ``None`` otherwise. This function is crucial for accessing specific neuron data and understanding its status, stake, and other - attributes within a particular subnet of the Bittensor ecosystem. + attributes within a particular subnet of the Bittensor ecosystem. """ block_hash = await self.determine_block_hash(block, block_hash, reuse_block) uid_query = await self.substrate.query( @@ -1986,6 +2885,79 @@

    Source code for bittensor.core.async_subtensor

    )

    +
    +[docs] + async def get_next_epoch_start_block( + self, + netuid: int, + block: Optional[int] = None, + block_hash: Optional[str] = None, + reuse_block: bool = False, + ) -> Optional[int]: + """ + Calculates the first block number of the next epoch for the given subnet. + + If ``block`` is not provided, the current chain block will be used. Epochs are determined based on the subnet's + tempo (i.e., blocks per epoch). The result is the block number at which the next epoch will begin. + + Arguments: + netuid: The unique identifier of the subnet. + block: The reference block to calculate from. If None, uses the current chain block height. + block_hash: The blockchain block number at which to perform the query. + reuse_block: Whether to reuse the last-used blockchain block hash. + + Returns: + int: The block number at which the next epoch will start. + + Notes: + See also: <https://docs.learnbittensor.org/glossary#tempo> + """ + block_hash = await self.determine_block_hash(block, block_hash, reuse_block) + blocks_since_last_step = await self.blocks_since_last_step( + netuid=netuid, block=block, block_hash=block_hash, reuse_block=reuse_block + ) + tempo = await self.tempo( + netuid=netuid, block=block, block_hash=block_hash, reuse_block=reuse_block + ) + + if block and blocks_since_last_step is not None and tempo: + return block - blocks_since_last_step + tempo + 1 + return None
    + + +
    +[docs] + async def get_owned_hotkeys( + self, + coldkey_ss58: str, + block: Optional[int] = None, + block_hash: Optional[str] = None, + reuse_block: bool = False, + ) -> list[str]: + """ + Retrieves all hotkeys owned by a specific coldkey address. + + Arguments: + coldkey_ss58: The SS58 address of the coldkey to query. + block: The blockchain block number for the query. + block_hash: The hash of the blockchain block number for the query. + reuse_block: Whether to reuse the last-used blockchain block hash. + + Returns: + list[str]: A list of hotkey SS58 addresses owned by the coldkey. + """ + block_hash = await self.determine_block_hash(block, block_hash, reuse_block) + owned_hotkeys = await self.substrate.query( + module="SubtensorModule", + storage_function="OwnedHotkeys", + params=[coldkey_ss58], + block_hash=block_hash, + reuse_block_hash=reuse_block, + ) + + return [decode_account_id(hotkey[0]) for hotkey in owned_hotkeys or []]
    + +
    [docs] async def get_stake( @@ -2000,14 +2972,14 @@

    Source code for bittensor.core.async_subtensor

    """ Returns the stake under a coldkey - hotkey pairing. - Args: - hotkey_ss58 (str): The SS58 address of the hotkey. - coldkey_ss58 (str): The SS58 address of the coldkey. - netuid (int): The subnet ID. - block (Optional[int]): The block number at which to query the stake information. - block_hash (Optional[str]): The hash of the block to retrieve the stake from. Do not specify if using block + Arguments: + hotkey_ss58: The SS58 address of the hotkey. + coldkey_ss58: The SS58 address of the coldkey. + netuid: The subnet ID. + block: The block number at which to query the stake information. + block_hash: The hash of the block to retrieve the stake from. Do not specify if using block or reuse_block - reuse_block (bool): Whether to use the last-used block. Do not set if using block_hash or block. + reuse_block: Whether to use the last-used block. Do not set if using block_hash or block. Returns: Balance: The stake under the coldkey - hotkey pairing. @@ -2045,6 +3017,220 @@

    Source code for bittensor.core.async_subtensor

    return Balance.from_rao(int(stake)).set_unit(netuid=netuid)

    + # TODO: remove unused parameters in SDK.v10 +
    +[docs] + async def get_stake_add_fee( + self, + amount: Balance, + netuid: int, + coldkey_ss58: str, + hotkey_ss58: str, + block: Optional[int] = None, + ) -> Balance: + """ + Calculates the fee for adding new stake to a hotkey. + + Arguments: + amount: Amount of stake to add in TAO + netuid: Netuid of subnet + coldkey_ss58: SS58 address of source coldkey + hotkey_ss58: SS58 address of destination hotkey + block: Block number at which to perform the calculation + + Returns: + The calculated stake fee as a Balance object + """ + return await self.get_stake_operations_fee( + amount=amount, netuid=netuid, block=block + )
    + + +
    +[docs] + async def get_subnet_info( + self, + netuid: int, + block: Optional[int] = None, + block_hash: Optional[str] = None, + reuse_block: bool = False, + ) -> Optional["SubnetInfo"]: + """ + Retrieves detailed information about subnet within the Bittensor network. + This function provides comprehensive data on subnet, including its characteristics and operational parameters. + + Arguments: + netuid: The unique identifier of the subnet. + block: The blockchain block number for the query. + block_hash: The hash of the block to retrieve the stake from. Do not specify if using block + or reuse_block + reuse_block: Whether to use the last-used block. Do not set if using block_hash or block. + + Returns: + SubnetInfo: A SubnetInfo objects, each containing detailed information about a subnet. + + Gaining insights into the subnet's details assists in understanding the network's composition, the roles of + different subnets, and their unique features. + """ + result = await self.query_runtime_api( + runtime_api="SubnetInfoRuntimeApi", + method="get_subnet_info_v2", + params=[netuid], + block=block, + block_hash=block_hash, + reuse_block=reuse_block, + ) + if not result: + return None + return SubnetInfo.from_dict(result)
    + + +
    +[docs] + async def get_subnet_price( + self, + netuid: int, + block: Optional[int] = None, + block_hash: Optional[str] = None, + reuse_block: bool = False, + ) -> Balance: + """Gets the current Alpha price in TAO for all subnets. + + Arguments: + netuid: The unique identifier of the subnet. + block: The blockchain block number for the query. + block_hash: The hash of the block to retrieve the stake from. Do not specify if using block + or reuse_block + reuse_block: Whether to use the last-used block. Do not set if using block_hash or block. + + Returns: + The current Alpha price in TAO units for the specified subnet. + """ + # SN0 price is always 1 TAO + if netuid == 0: + return Balance.from_tao(1) + + block_hash = await self.determine_block_hash(block=block) + current_sqrt_price = await self.substrate.query( + module="Swap", + storage_function="AlphaSqrtPrice", + params=[netuid], + block_hash=block_hash, + ) + + current_sqrt_price = fixed_to_float(current_sqrt_price) + current_price = current_sqrt_price * current_sqrt_price + return Balance.from_rao(int(current_price * 1e9))
    + + +
    +[docs] + async def get_subnet_prices( + self, + block: Optional[int] = None, + block_hash: Optional[str] = None, + reuse_block: bool = False, + ) -> dict[int, Balance]: + """Gets the current Alpha price in TAO for a specified subnet. + + Arguments: + block: The blockchain block number for the query. + block_hash: The hash of the block to retrieve the stake from. Do not specify if using block + or reuse_block + reuse_block: Whether to use the last-used block. Do not set if using block_hash or block. + + Returns: + dict: + - subnet unique ID + - The current Alpha price in TAO units for the specified subnet. + """ + block_hash = await self.determine_block_hash( + block=block, block_hash=block_hash, reuse_block=reuse_block + ) + + current_sqrt_prices = await self.substrate.query_map( + module="Swap", + storage_function="AlphaSqrtPrice", + block_hash=block_hash, + page_size=129, # total number of subnets + ) + + prices = {} + async for id_, current_sqrt_price in current_sqrt_prices: + current_sqrt_price = fixed_to_float(current_sqrt_price) + current_price = current_sqrt_price * current_sqrt_price + current_price_in_tao = Balance.from_rao(int(current_price * 1e9)) + prices.update({id_: current_price_in_tao}) + + # SN0 price is always 1 TAO + prices.update({0: Balance.from_tao(1)}) + return prices
    + + + # TODO: remove unused parameters in SDK.v10 +
    +[docs] + async def get_unstake_fee( + self, + amount: Balance, + netuid: int, + coldkey_ss58: str, + hotkey_ss58: str, + block: Optional[int] = None, + ) -> Balance: + """ + Calculates the fee for unstaking from a hotkey. + + Arguments: + amount: Amount of stake to unstake in TAO + netuid: Netuid of subnet + coldkey_ss58: SS58 address of source coldkey + hotkey_ss58: SS58 address of destination hotkey + block: Block number at which to perform the calculation + + Returns: + The calculated stake fee as a Balance object + """ + return await self.get_stake_operations_fee( + amount=amount, netuid=netuid, block=block + )
    + + + # TODO: remove unused parameters in SDK.v10 +
    +[docs] + async def get_stake_movement_fee( + self, + amount: Balance, + origin_netuid: int, + origin_hotkey_ss58: str, + origin_coldkey_ss58: str, + destination_netuid: int, + destination_hotkey_ss58: str, + destination_coldkey_ss58: str, + block: Optional[int] = None, + ) -> Balance: + """ + Calculates the fee for moving stake between hotkeys/subnets/coldkeys. + + Arguments: + amount: Amount of stake to move in TAO + origin_netuid: Netuid of source subnet + origin_hotkey_ss58: SS58 address of source hotkey + origin_coldkey_ss58: SS58 address of source coldkey + destination_netuid: Netuid of destination subnet + destination_hotkey_ss58: SS58 address of destination hotkey + destination_coldkey_ss58: SS58 address of destination coldkey + block: Block number at which to perform the calculation + + Returns: + The calculated stake fee as a Balance object + """ + return await self.get_stake_operations_fee( + amount=amount, netuid=origin_netuid, block=block + )
    + +
    [docs] async def get_stake_for_coldkey_and_hotkey( @@ -2060,13 +3246,13 @@

    Source code for bittensor.core.async_subtensor

    Retrieves all coldkey-hotkey pairing stake across specified (or all) subnets Arguments: - coldkey_ss58 (str): The SS58 address of the coldkey. - hotkey_ss58 (str): The SS58 address of the hotkey. - netuids (Optional[list[int]]): The subnet IDs to query for. Set to `None` for all subnets. - block (Optional[int]): The block number at which to query the stake information. - block_hash (Optional[str]): The hash of the block to retrieve the stake from. Do not specify if using block + coldkey_ss58: The SS58 address of the coldkey. + hotkey_ss58: The SS58 address of the hotkey. + netuids: The subnet IDs to query for. Set to ``None`` for all subnets. + block: The block number at which to query the stake information. + block_hash: The hash of the block to retrieve the stake from. Do not specify if using block or reuse_block - reuse_block (bool): Whether to use the last-used block. Do not set if using block_hash or block. + reuse_block: Whether to use the last-used block. Do not set if using block_hash or block. Returns: A {netuid: StakeInfo} pairing of all stakes across all subnets. @@ -2097,8 +3283,6 @@

    Source code for bittensor.core.async_subtensor

    }

    -
    -[docs] async def get_stake_for_coldkey( self, coldkey_ss58: str, @@ -2109,14 +3293,14 @@

    Source code for bittensor.core.async_subtensor

    """ Retrieves the stake information for a given coldkey. - Args: - coldkey_ss58 (str): The SS58 address of the coldkey. - block (Optional[int]): The block number at which to query the stake information. - block_hash (Optional[str]): The hash of the blockchain block number for the query. - reuse_block (bool): Whether to reuse the last-used block hash. + Arguments: + coldkey_ss58: The SS58 address of the coldkey. + block: The block number at which to query the stake information. + block_hash: The hash of the blockchain block number for the query. + reuse_block: Whether to reuse the last-used block hash. Returns: - Optional[list[StakeInfo]]: A list of StakeInfo objects, or ``None`` if no stake information is found. + An optional list of StakeInfo objects, or ``None`` if no stake information is found. """ result = await self.query_runtime_api( runtime_api="StakeInfoRuntimeApi", @@ -2131,8 +3315,7 @@

    Source code for bittensor.core.async_subtensor

    return [] stakes = StakeInfo.list_from_dicts(result) # type: ignore - return [stake for stake in stakes if stake.stake > 0]

    - + return [stake for stake in stakes if stake.stake > 0] get_stake_info_for_coldkey = get_stake_for_coldkey @@ -2149,13 +3332,13 @@

    Source code for bittensor.core.async_subtensor

    """ Retrieves the stake information for a given hotkey. - Args: + Arguments: hotkey_ss58: The SS58 address of the hotkey. netuid: The subnet ID to query for. block: The block number at which to query the stake information. Do not specify if also specifying - block_hash or reuse_block + block_hash or reuse_block. block_hash: The hash of the blockchain block number for the query. Do not specify if also specifying block - or reuse_block + or reuse_block. reuse_block: Whether to reuse for this query the last-used block. Do not specify if also specifying block or block_hash. """ @@ -2173,6 +3356,39 @@

    Source code for bittensor.core.async_subtensor

    get_hotkey_stake = get_stake_for_hotkey + async def get_stake_operations_fee( + self, + amount: Balance, + netuid: int, + block: Optional[int] = None, + block_hash: Optional[str] = None, + reuse_block: bool = False, + ): + """Returns fee for any stake operation in specified subnet. + + Args: + amount: Amount of stake to add in Alpha/TAO. + netuid: Netuid of subnet. + block: The block number at which to query the stake information. Do not specify if also specifying + block_hash or reuse_block. + block_hash: The hash of the blockchain block number for the query. Do not specify if also specifying block + or reuse_block. + reuse_block: Whether to reuse for this query the last-used block. Do not specify if also specifying block + or block_hash. + Returns: + The calculated stake fee as a Balance object. + """ + block_hash = await self.determine_block_hash( + block=block, block_hash=block_hash, reuse_block=reuse_block + ) + result = await self.substrate.query( + module="Swap", + storage_function="FeeRate", + params=[netuid], + block_hash=block_hash, + ) + return amount * (result.value / U16_MAX) +

    [docs] async def get_subnet_burn_cost( @@ -2183,12 +3399,12 @@

    Source code for bittensor.core.async_subtensor

    ) -> Optional[Balance]: """ Retrieves the burn cost for registering a new subnet within the Bittensor network. This cost represents the - amount of Tao that needs to be locked or burned to establish a new subnet. + amount of Tao that needs to be locked or burned to establish a new Arguments: - block (Optional[int]): The blockchain block number for the query. - block_hash (Optional[int]): The blockchain block_hash of the block id. - reuse_block (bool): Whether to reuse the last-used block hash. + block: The blockchain block number for the query. + block_hash: The blockchain block_hash of the block id. + reuse_block: Whether to reuse the last-used block hash. Returns: int: The burn cost for subnet registration. @@ -2221,23 +3437,23 @@

    Source code for bittensor.core.async_subtensor

    ) -> Optional["SubnetHyperparameters"]: """ Retrieves the hyperparameters for a specific subnet within the Bittensor network. These hyperparameters define - the operational settings and rules governing the subnet's behavior. + the operational settings and rules governing the subnet's behavior. Arguments: - netuid (int): The network UID of the subnet to query. - block (Optional[int]): The blockchain block number for the query. - block_hash (Optional[str]): The hash of the blockchain block number for the query. - reuse_block (bool): Whether to reuse the last-used blockchain hash. + netuid: The network UID of the subnet to query. + block: The blockchain block number for the query. + block_hash: The hash of the blockchain block number for the query. + reuse_block: Whether to reuse the last-used blockchain hash. Returns: - The subnet's hyperparameters, or `None` if not available. + The subnet's hyperparameters, or ``None`` if not available. Understanding the hyperparameters is crucial for comprehending how subnets are configured and managed, and how - they interact with the network's consensus and incentive mechanisms. + they interact with the network's consensus and incentive mechanisms. """ result = await self.query_runtime_api( runtime_api="SubnetInfoRuntimeApi", - method="get_subnet_hyperparams", + method="get_subnet_hyperparams_v2", params=[netuid], block=block, block_hash=block_hash, @@ -2262,8 +3478,6 @@

    Source code for bittensor.core.async_subtensor

    )

    -
    -[docs] async def get_subnets( self, block: Optional[int] = None, @@ -2274,15 +3488,15 @@

    Source code for bittensor.core.async_subtensor

    Retrieves the list of all subnet unique identifiers (netuids) currently present in the Bittensor network. Arguments: - block (Optional[int]): The blockchain block number for the query. - block_hash (Optional[str]): The hash of the block to retrieve the subnet unique identifiers from. - reuse_block (bool): Whether to reuse the last-used block hash. + block: The blockchain block number for the query. + block_hash: The hash of the block to retrieve the subnet unique identifiers from. + reuse_block: Whether to reuse the last-used block hash. Returns: A list of subnet netuids. - This function provides a comprehensive view of the subnets within the Bittensor network, - offering insights into its diversity and scale. + This function provides a comprehensive view of the subnets within the Bittensor network, offering insights into + its diversity and scale. """ block_hash = await self.determine_block_hash(block, block_hash, reuse_block) result = await self.substrate.query_map( @@ -2296,8 +3510,7 @@

    Source code for bittensor.core.async_subtensor

    async for netuid, exists in result: if exists: subnets.append(netuid) - return subnets

    - + return subnets
    [docs] @@ -2311,15 +3524,15 @@

    Source code for bittensor.core.async_subtensor

    Retrieves the total number of subnets within the Bittensor network as of a specific blockchain block. Arguments: - block (Optional[int]): The blockchain block number for the query. - block_hash (Optional[str]): The blockchain block_hash representation of block id. - reuse_block (bool): Whether to reuse the last-used block hash. + block: The blockchain block number for the query. + block_hash: The blockchain block_hash representation of block id. + reuse_block: Whether to reuse the last-used block hash. Returns: Optional[str]: The total number of subnets in the network. Understanding the total number of subnets is essential for assessing the network's growth and the extent of its - decentralized infrastructure. + decentralized infrastructure. """ block_hash = await self.determine_block_hash(block, block_hash, reuse_block) result = await self.substrate.query( @@ -2339,28 +3552,28 @@

    Source code for bittensor.core.async_subtensor

    ) -> Balance: """ Calculates the transaction fee for transferring tokens from a wallet to a specified destination address. This - function simulates the transfer to estimate the associated cost, taking into account the current network - conditions and transaction complexity. + function simulates the transfer to estimate the associated cost, taking into account the current network + conditions and transaction complexity. Arguments: - wallet (bittensor_wallet.Wallet): The wallet from which the transfer is initiated. - dest (str): The ``SS58`` address of the destination account. - value (Union[bittensor.utils.balance.Balance, float, int]): The amount of tokens to be transferred, - specified as a Balance object, or in Tao (float) or Rao (int) units. + wallet: The wallet from which the transfer is initiated. + dest: The ``SS58`` address of the destination account. + value: The amount of tokens to be transferred, specified as a Balance object, or in Tao (float) or Rao + (int) units. Returns: bittensor.utils.balance.Balance: The estimated transaction fee for the transfer, represented as a Balance object. - Estimating the transfer fee is essential for planning and executing token transactions, ensuring that the wallet - has sufficient funds to cover both the transfer amount and the associated costs. This function provides a - crucial tool for managing financial operations within the Bittensor network. + Estimating the transfer fee is essential for planning and executing token transactions, ensuring that the + wallet has sufficient funds to cover both the transfer amount and the associated costs. This function provides + a crucial tool for managing financial operations within the Bittensor network. """ value = check_and_convert_to_balance(value) call = await self.substrate.compose_call( call_module="Balances", - call_function="transfer_allow_death", + call_function="transfer_keep_alive", call_params={"dest": dest, "value": value.rao}, ) @@ -2386,19 +3599,19 @@

    Source code for bittensor.core.async_subtensor

    ) -> Optional["ProposalVoteData"]: """ Retrieves the voting data for a specific proposal on the Bittensor blockchain. This data includes information - about how senate members have voted on the proposal. + about how senate members have voted on the proposal. Arguments: - proposal_hash (str): The hash of the proposal for which voting data is requested. - block (Optional[int]): The blockchain block number for the query. - block_hash (Optional[str]): The hash of the blockchain block number to query the voting data. - reuse_block (bool): Whether to reuse the last-used blockchain block hash. + proposal_hash: The hash of the proposal for which voting data is requested. + block: The blockchain block number for the query. + block_hash: The hash of the blockchain block number to query the voting data. + reuse_block: Whether to reuse the last-used blockchain block hash. Returns: - An object containing the proposal's voting data, or `None` if not found. + An object containing the proposal's voting data, or ``None`` if not found. This function is important for tracking and understanding the decision-making processes within the Bittensor - network, particularly how proposals are received and acted upon by the governing body. + network, particularly how proposals are received and acted upon by the governing body. """ block_hash = await self.determine_block_hash(block, block_hash, reuse_block) vote_data: dict[str, Any] = await self.substrate.query( @@ -2408,10 +3621,11 @@

    Source code for bittensor.core.async_subtensor

    block_hash=block_hash, reuse_block_hash=reuse_block, ) + if vote_data is None: return None - else: - return ProposalVoteData(vote_data)

    + + return ProposalVoteData.from_dict(vote_data)
    @@ -2428,17 +3642,17 @@

    Source code for bittensor.core.async_subtensor

    Retrieves the unique identifier (UID) for a neuron's hotkey on a specific subnet. Arguments: - hotkey_ss58 (str): The ``SS58`` address of the neuron's hotkey. - netuid (int): The unique identifier of the subnet. - block (Optional[int]): The blockchain block number for the query. - block_hash (Optional[str]): The blockchain block_hash representation of the block id. - reuse_block (bool): Whether to reuse the last-used blockchain block hash. + hotkey_ss58: The ``SS58`` address of the neuron's hotkey. + netuid: The unique identifier of the subnet. + block: The blockchain block number for the query. + block_hash: The blockchain block_hash representation of the block id. + reuse_block: Whether to reuse the last-used blockchain block hash. Returns: Optional[int]: The UID of the neuron if it is registered on the subnet, ``None`` otherwise. The UID is a critical identifier within the network, linking the neuron's hotkey to its operational and - governance activities on a particular subnet. + governance activities on a particular subnet. """ block_hash = await self.determine_block_hash(block, block_hash, reuse_block) result = await self.substrate.query( @@ -2466,12 +3680,12 @@

    Source code for bittensor.core.async_subtensor

    Filters a given list of all netuids for certain specified netuids and hotkeys Arguments: - all_netuids (Iterable[int]): A list of netuids to filter. - filter_for_netuids (Iterable[int]): A subset of all_netuids to filter from the main list. - all_hotkeys (Iterable[Wallet]): Hotkeys to filter from the main list. - block (Optional[int]): The blockchain block number for the query. - block_hash (str): hash of the blockchain block number at which to perform the query. - reuse_block (bool): whether to reuse the last-used blockchain hash when retrieving info. + all_netuids: A list of netuids to filter. + filter_for_netuids: A subset of all_netuids to filter from the main list. + all_hotkeys: Hotkeys to filter from the main list. + block: The blockchain block number for the query. + block_hash: hash of the blockchain block number at which to perform the query. + reuse_block: whether to reuse the last-used blockchain hash when retrieving info. Returns: The filtered list of netuids. @@ -2523,20 +3737,20 @@

    Source code for bittensor.core.async_subtensor

    ) -> Optional[int]: """ Retrieves the 'ImmunityPeriod' hyperparameter for a specific subnet. This parameter defines the duration during - which new neurons are protected from certain network penalties or restrictions. + which new neurons are protected from certain network penalties or restrictions. - Args: - netuid (int): The unique identifier of the subnet. - block (Optional[int]): The blockchain block number for the query. - block_hash (Optional[str]): The blockchain block_hash representation of the block id. - reuse_block (bool): Whether to reuse the last-used blockchain block hash. + Arguments: + netuid: The unique identifier of the subnet. + block: The blockchain block number for the query. + block_hash: The blockchain block_hash representation of the block id. + reuse_block: Whether to reuse the last-used blockchain block hash. Returns: Optional[int]: The value of the 'ImmunityPeriod' hyperparameter if the subnet exists, ``None`` otherwise. The 'ImmunityPeriod' is a critical aspect of the network's governance system, ensuring that new participants - have a grace period to establish themselves and contribute to the network without facing immediate - punitive actions. + have a grace period to establish themselves and contribute to the network without facing immediate punitive + actions. """ block_hash = await self.determine_block_hash(block, block_hash, reuse_block) call = await self.get_hyperparameter( @@ -2548,6 +3762,15 @@

    Source code for bittensor.core.async_subtensor

    return None if call is None else int(call)

    +
    +[docs] + async def is_fast_blocks(self): + """Returns True if the node is running with fast blocks. False if not.""" + return ( + await self.query_constant("SubtensorModule", "DurationOfStartCall") + ).value == 10
    + +
    [docs] async def is_hotkey_delegate( @@ -2559,19 +3782,19 @@

    Source code for bittensor.core.async_subtensor

    ) -> bool: """ Determines whether a given hotkey (public key) is a delegate on the Bittensor network. This function checks if - the neuron associated with the hotkey is part of the network's delegation system. + the neuron associated with the hotkey is part of the network's delegation system. Arguments: - hotkey_ss58 (str): The SS58 address of the neuron's hotkey. - block (Optional[int]): The blockchain block number for the query. - block_hash (Optional[str]): The hash of the blockchain block number for the query. - reuse_block (Optional[bool]): Whether to reuse the last-used block hash. + hotkey_ss58: The SS58 address of the neuron's hotkey. + block: The blockchain block number for the query. + block_hash: The hash of the blockchain block number for the query. + reuse_block: Whether to reuse the last-used block hash. Returns: - `True` if the hotkey is a delegate, `False` otherwise. + ``True`` if the hotkey is a delegate, ``False`` otherwise. Being a delegate is a significant status within the Bittensor network, indicating a neuron's involvement in - consensus and governance processes. + consensus and governance processes. """ block_hash = await self.determine_block_hash(block, block_hash, reuse_block) delegates = await self.get_delegates( @@ -2592,27 +3815,26 @@

    Source code for bittensor.core.async_subtensor

    ) -> bool: """ Determines whether a given hotkey (public key) is registered in the Bittensor network, either globally across - any subnet or specifically on a specified subnet. This function checks the registration status of a neuron - identified by its hotkey, which is crucial for validating its participation and activities within the - network. + any subnet or specifically on a specified subnet. This function checks the registration status of a neuron + identified by its hotkey, which is crucial for validating its participation and activities within the network. - Args: + Arguments: hotkey_ss58: The SS58 address of the neuron's hotkey. - netuid: The unique identifier of the subnet to check the registration. If `None`, the + netuid: The unique identifier of the subnet to check the registration. If ``None``, the registration is checked across all subnets. block: The blockchain block number at which to perform the query. block_hash: The blockchain block_hash representation of the block id. Do not specify if using block or - reuse_block - reuse_block (bool): Whether to reuse the last-used blockchain block hash. Do not set if using block_hash or + reuse_block. + reuse_block: Whether to reuse the last-used blockchain block hash. Do not set if using block_hash or reuse_block. Returns: - bool: `True` if the hotkey is registered in the specified context (either any subnet or a specific subnet), - `False` otherwise. + bool: ``True`` if the hotkey is registered in the specified context (either any subnet or a specific subnet), + ``False`` otherwise. This function is important for verifying the active status of neurons in the Bittensor network. It aids in - understanding whether a neuron is eligible to participate in network processes such as consensus, - validation, and incentive distribution based on its registration status. + understanding whether a neuron is eligible to participate in network processes such as consensus, validation, + and incentive distribution based on its registration status. """ if netuid is None: return await self.is_hotkey_registered_any( @@ -2637,10 +3859,10 @@

    Source code for bittensor.core.async_subtensor

    Checks if a neuron's hotkey is registered on any subnet within the Bittensor network. Arguments: - hotkey_ss58 (str): The ``SS58`` address of the neuron's hotkey. - block (Optional[int]): The blockchain block number for the query. - block_hash (Optional[str]): The blockchain block_hash representation of block id. - reuse_block (bool): Whether to reuse the last-used block hash. + hotkey_ss58: The ``SS58`` address of the neuron's hotkey. + block: The blockchain block number for the query. + block_hash: The blockchain block_hash representation of block id. + reuse_block: Whether to reuse the last-used block hash. Returns: bool: ``True`` if the hotkey is registered on any subnet, False otherwise. @@ -2676,6 +3898,38 @@

    Source code for bittensor.core.async_subtensor

    )

    +
    +[docs] + async def is_subnet_active( + self, + netuid: int, + block: Optional[int] = None, + block_hash: Optional[str] = None, + reuse_block: bool = False, + ) -> bool: + """Verify if subnet with provided netuid is active. + + Arguments: + netuid: The unique identifier of the subnet. + block: The blockchain block number for the query. + block_hash: The blockchain block_hash representation of block id. + reuse_block: Whether to reuse the last-used block hash. + + Returns: + ``True`` if subnet is active, ``False`` otherwise. + + Note: This means whether the ``start_call`` was initiated or not. + """ + query = await self.query_subtensor( + name="FirstEmissionBlockNumber", + block=block, + block_hash=block_hash, + reuse_block=reuse_block, + params=[netuid], + ) + return True if query and query.value > 0 else False
    + +
    [docs] async def last_drand_round(self) -> Optional[int]: @@ -2703,11 +3957,11 @@

    Source code for bittensor.core.async_subtensor

    """ Returns network MaxWeightsLimit hyperparameter. - Args: - netuid (int): The unique identifier of the subnetwork. - block (Optional[int]): The blockchain block number for the query. - block_hash (Optional[str]): The blockchain block_hash representation of block id. - reuse_block (bool): Whether to reuse the last-used block hash. + Arguments: + netuid: The unique identifier of the subnetwork. + block: The blockchain block number for the query. + block_hash: The blockchain block_hash representation of block id. + reuse_block: Whether to reuse the last-used block hash. Returns: Optional[float]: The value of the MaxWeightsLimit hyperparameter, or ``None`` if the subnetwork does not @@ -2730,20 +3984,20 @@

    Source code for bittensor.core.async_subtensor

    ) -> "AsyncMetagraph": """ Returns a synced metagraph for a specified subnet within the Bittensor network. The metagraph represents the - network's structure, including neuron connections and interactions. + network's structure, including neuron connections and interactions. Arguments: - netuid (int): The network UID of the subnet to query. - lite (bool): If true, returns a metagraph using a lightweight sync (no weights, no bonds). Default is + netuid: The network UID of the subnet to query. + lite: If true, returns a metagraph using a lightweight sync (no weights, no bonds). Default is ``True``. - block (Optional[int]): Block number for synchronization, or ``None`` for the latest block. + block: Block number for synchronization, or `None` for the latest block. Returns: bittensor.core.metagraph.Metagraph: The metagraph representing the subnet's structure and neuron relationships. The metagraph is an essential tool for understanding the topology and dynamics of the Bittensor network's - decentralized architecture, particularly in relation to neuron interconnectivity and consensus processes. + decentralized architecture, particularly in relation to neuron interconnectivity and consensus processes. """ metagraph = AsyncMetagraph( network=self.chain_endpoint, @@ -2769,11 +4023,11 @@

    Source code for bittensor.core.async_subtensor

    """ Returns network MinAllowedWeights hyperparameter. - Args: - netuid (int): The unique identifier of the subnetwork. - block (Optional[int]): The blockchain block number for the query. - block_hash (Optional[str]): The blockchain block_hash representation of block id. - reuse_block (bool): Whether to reuse the last-used block hash. + Arguments: + netuid: The unique identifier of the subnetwork. + block: The blockchain block number for the query. + block_hash: The blockchain block_hash representation of block id. + reuse_block: Whether to reuse the last-used block hash. Returns: Optional[int]: The value of the MinAllowedWeights hyperparameter, or ``None`` if the subnetwork does not @@ -2801,21 +4055,21 @@

    Source code for bittensor.core.async_subtensor

    ) -> NeuronInfo: """ Retrieves detailed information about a specific neuron identified by its unique identifier (UID) within a - specified subnet (netuid) of the Bittensor network. This function provides a comprehensive view of a - neuron's attributes, including its stake, rank, and operational status. + specified subnet (netuid) of the Bittensor network. This function provides a comprehensive view of a neuron's + attributes, including its stake, rank, and operational status. Arguments: - uid (int): The unique identifier of the neuron. - netuid (int): The unique identifier of the subnet. - block (Optional[int]): The blockchain block number for the query. - block_hash (str): The hash of the blockchain block number for the query. - reuse_block (bool): Whether to reuse the last-used blockchain block hash. + uid: The unique identifier of the neuron. + netuid: The unique identifier of the subnet. + block: The blockchain block number for the query. + block_hash: The hash of the blockchain block number for the query. + reuse_block: Whether to reuse the last-used blockchain block hash. Returns: Detailed information about the neuron if found, a null neuron otherwise This function is crucial for analyzing individual neurons' contributions and status within a specific subnet, - offering insights into their roles in the network's consensus and validation mechanisms. + offering insights into their roles in the network's consensus and validation mechanisms. """ if uid is None: return NeuronInfo.get_null_neuron() @@ -2847,19 +4101,19 @@

    Source code for bittensor.core.async_subtensor

    """ Retrieves a list of all neurons within a specified subnet of the Bittensor network. This function provides a snapshot of the subnet's neuron population, including each neuron's attributes and - network interactions. + network interactions. Arguments: - netuid (int): The unique identifier of the subnet. - block (Optional[int]): The blockchain block number for the query. - block_hash (str): The hash of the blockchain block number for the query. - reuse_block (bool): Whether to reuse the last-used blockchain block hash. + netuid: The unique identifier of the subnet. + block: The blockchain block number for the query. + block_hash: The hash of the blockchain block number for the query. + reuse_block: Whether to reuse the last-used blockchain block hash. Returns: A list of NeuronInfo objects detailing each neuron's characteristics in the subnet. Understanding the distribution and status of neurons within a subnet is key to comprehending the network's - decentralized structure and the dynamics of its consensus and governance processes. + decentralized structure and the dynamics of its consensus and governance processes. """ result = await self.query_runtime_api( runtime_api="NeuronInfoRuntimeApi", @@ -2888,19 +4142,19 @@

    Source code for bittensor.core.async_subtensor

    """ Retrieves a list of neurons in a 'lite' format from a specific subnet of the Bittensor network. This function provides a streamlined view of the neurons, focusing on key attributes such as stake and network - participation. + participation. Arguments: - netuid (int): The unique identifier of the subnet. - block (Optional[int]): The blockchain block number for the query. - block_hash (str): The hash of the blockchain block number for the query. - reuse_block (bool): Whether to reuse the last-used blockchain block hash. + netuid: The unique identifier of the subnet. + block: The blockchain block number for the query. + block_hash: The hash of the blockchain block number for the query. + reuse_block: Whether to reuse the last-used blockchain block hash. Returns: A list of simplified neuron information for the subnet. This function offers a quick overview of the neuron population within a subnet, facilitating efficient analysis - of the network's decentralized structure and neuron dynamics. + of the network's decentralized structure and neuron dynamics. """ result = await self.query_runtime_api( runtime_api="NeuronInfoRuntimeApi", @@ -2925,43 +4179,50 @@

    Source code for bittensor.core.async_subtensor

    block: Optional[int] = None, block_hash: Optional[str] = None, reuse_block: bool = False, - ) -> dict: + ) -> Optional[ChainIdentity]: """ Queries the identity of a neuron on the Bittensor blockchain using the given key. This function retrieves - detailed identity information about a specific neuron, which is a crucial aspect of the network's - decentralized identity and governance system. + detailed identity information about a specific neuron, which is a crucial aspect of the network's decentralized + identity and governance system. Arguments: - coldkey_ss58 (str): The coldkey used to query the neuron's identity (technically the neuron's coldkey SS58 + coldkey_ss58: The coldkey used to query the neuron's identity (technically the neuron's coldkey SS58 address). - block (Optional[int]): The blockchain block number for the query. - block_hash (str): The hash of the blockchain block number at which to perform the query. - reuse_block (bool): Whether to reuse the last-used blockchain block hash. + block: The blockchain block number for the query. + block_hash: The hash of the blockchain block number at which to perform the query. + reuse_block: Whether to reuse the last-used blockchain block hash. Returns: An object containing the identity information of the neuron if found, ``None`` otherwise. The identity information can include various attributes such as the neuron's stake, rank, and other - network-specific details, providing insights into the neuron's role and status within the Bittensor network. + network-specific details, providing insights into the neuron's role and status within the Bittensor network. Note: - See the `Bittensor CLI documentation <https://docs.bittensor.com/reference/btcli>`_ for supported identity + See the ``Bittensor CLI documentation <https://docs.bittensor.com/reference/btcli>``_ for supported identity parameters. """ block_hash = await self.determine_block_hash(block, block_hash, reuse_block) - identity_info = await self.substrate.query( - module="SubtensorModule", - storage_function="IdentitiesV2", - params=[coldkey_ss58], - block_hash=block_hash, - reuse_block_hash=reuse_block, + identity_info = cast( + dict, + await self.substrate.query( + module="SubtensorModule", + storage_function="IdentitiesV2", + params=[coldkey_ss58], + block_hash=block_hash, + reuse_block_hash=reuse_block, + ), ) + if not identity_info: - return {} + return None + try: - return _decode_hex_identity_dict(identity_info) + return ChainIdentity.from_dict( + decode_hex_identity_dict(identity_info), + ) except TypeError: - return {}

    + return None
    @@ -2975,19 +4236,19 @@

    Source code for bittensor.core.async_subtensor

    ) -> Optional[Balance]: """ Retrieves the 'Burn' hyperparameter for a specified subnet. The 'Burn' parameter represents the amount of Tao - that is effectively recycled within the Bittensor network. + that is effectively recycled within the Bittensor network. - Args: - netuid (int): The unique identifier of the subnet. - block (Optional[int]): The blockchain block number for the query. - block_hash (str): The hash of the blockchain block number for the query. - reuse_block (bool): Whether to reuse the last-used blockchain block hash. + Arguments: + netuid: The unique identifier of the subnet. + block: The blockchain block number for the query. + block_hash: The hash of the blockchain block number for the query. + reuse_block: Whether to reuse the last-used blockchain block hash. Returns: - Optional[Balance]: The value of the 'Burn' hyperparameter if the subnet exists, None otherwise. + Optional[Balance]: The value of the 'Burn' hyperparameter if the subnet exists, ``None`` otherwise. Understanding the 'Burn' rate is essential for analyzing the network registration usage, particularly how it is - correlated with user activity and the overall cost of participation in a given subnet. + correlated with user activity and the overall cost of participation in a given subnet. """ block_hash = await self.determine_block_hash(block, block_hash, reuse_block) call = await self.get_hyperparameter( @@ -2999,38 +4260,103 @@

    Source code for bittensor.core.async_subtensor

    return None if call is None else Balance.from_rao(int(call))

    +
    +[docs] + async def set_reveal_commitment( + self, + wallet, + netuid: int, + data: str, + blocks_until_reveal: int = 360, + block_time: Union[int, float] = 12, + period: Optional[int] = None, + ) -> tuple[bool, int]: + """ + Commits arbitrary data to the Bittensor network by publishing metadata. + + Arguments: + wallet: The wallet associated with the neuron committing the data. + netuid: The unique identifier of the subnetwork. + data: The data to be committed to the network. + blocks_until_reveal: The number of blocks from now after which the data will be revealed. + Defaults to ``360`` (the number of blocks in one epoch). + block_time: The number of seconds between each block. Defaults to ``12``. + period: The number of blocks during which the transaction will remain valid after it's + submitted. If the transaction is not included in a block within that number of blocks, it will expire + and be rejected. You can think of it as an expiration date for the transaction. + + Returns: + bool: ``True`` if the commitment was successful, ``False`` otherwise. + + Note: A commitment can be set once per subnet epoch and is reset at the next epoch in the chain automatically. + """ + + encrypted, reveal_round = get_encrypted_commitment( + data, blocks_until_reveal, block_time + ) + + # increase reveal_round in return + 1 because we want to fetch data from the chain after that round was revealed + # and stored. + data_ = {"encrypted": encrypted, "reveal_round": reveal_round} + return await publish_metadata( + subtensor=self, + wallet=wallet, + netuid=netuid, + data_type="TimelockEncrypted", + data=data_, + period=period, + ), reveal_round
    + +
    [docs] async def subnet( self, netuid: int, - block: int = None, + block: Optional[int] = None, block_hash: Optional[str] = None, reuse_block: bool = False, ) -> Optional[DynamicInfo]: """ Retrieves the subnet information for a single subnet in the Bittensor network. - Args: - netuid (int): The unique identifier of the subnet. - block (Optional[int]): The block number to get the subnets at. - block_hash (str): The hash of the blockchain block number for the query. - reuse_block (bool): Whether to reuse the last-used blockchain block hash. + Arguments: + netuid: The unique identifier of the subnet. + block: The block number to get the subnets at. + block_hash: The hash of the blockchain block number for the query. + reuse_block: Whether to reuse the last-used blockchain block hash. Returns: Optional[DynamicInfo]: A DynamicInfo object, containing detailed information about a subnet. """ - block_hash = await self.determine_block_hash(block, block_hash, reuse_block) + block_hash = await self.determine_block_hash( + block=block, block_hash=block_hash, reuse_block=reuse_block + ) + if not block_hash and reuse_block: block_hash = self.substrate.last_block_hash - query = await self.substrate.runtime_call( - "SubnetInfoRuntimeApi", - "get_dynamic_info", - params=[netuid], - block_hash=block_hash, + + query, price = await asyncio.gather( + self.substrate.runtime_call( + "SubnetInfoRuntimeApi", + "get_dynamic_info", + params=[netuid], + block_hash=block_hash, + ), + self.get_subnet_price( + netuid=netuid, + block=block, + block_hash=block_hash, + reuse_block=reuse_block, + ), + return_exceptions=True, ) - subnet = DynamicInfo.from_dict(query.decode()) - return subnet
    + + if isinstance(decoded := query.decode(), dict): + if isinstance(price, SubstrateRequestException): + price = None + return DynamicInfo.from_dict({**decoded, "price": price}) + return None
    @@ -3046,16 +4372,16 @@

    Source code for bittensor.core.async_subtensor

    Checks if a subnet with the specified unique identifier (netuid) exists within the Bittensor network. Arguments: - netuid (int): The unique identifier of the subnet. - block (Optional[int]): The blockchain block number for the query. - block_hash (Optional[str]): The hash of the blockchain block number at which to check the subnet existence. - reuse_block (bool): Whether to reuse the last-used block hash. + netuid: The unique identifier of the subnet. + block: The blockchain block number for the query. + block_hash: The hash of the blockchain block number at which to check the subnet existence. + reuse_block: Whether to reuse the last-used block hash. Returns: - `True` if the subnet exists, `False` otherwise. + ``True`` if the subnet exists, ``False`` otherwise. - This function is critical for verifying the presence of specific subnets in the network, - enabling a deeper understanding of the network's structure and composition. + This function is critical for verifying the presence of specific subnets in the network, enabling a deeper + understanding of the network's structure and composition. """ block_hash = await self.determine_block_hash(block, block_hash, reuse_block) result = await self.substrate.query( @@ -3080,11 +4406,11 @@

    Source code for bittensor.core.async_subtensor

    """ Returns network SubnetworkN hyperparameter. - Args: - netuid (int): The unique identifier of the subnetwork. - block (Optional[int]): The blockchain block number for the query. - block_hash (Optional[str]): The hash of the blockchain block number at which to check the subnet existence. - reuse_block (bool): Whether to reuse the last-used block hash. + Arguments: + netuid: The unique identifier of the subnetwork. + block: The blockchain block number for the query. + block_hash: The hash of the blockchain block number at which to check the subnet existence. + reuse_block: Whether to reuse the last-used block hash. Returns: Optional[int]: The value of the SubnetworkN hyperparameter, or ``None`` if the subnetwork does not exist or @@ -3112,11 +4438,11 @@

    Source code for bittensor.core.async_subtensor

    """ Returns network Tempo hyperparameter. - Args: - netuid (int): The unique identifier of the subnetwork. - block (Optional[int]): The blockchain block number for the query. - block_hash (Optional[str]): The hash of the blockchain block number at which to check the subnet existence. - reuse_block (bool): Whether to reuse the last-used block hash. + Arguments: + netuid: The unique identifier of the subnetwork. + block: The blockchain block number for the query. + block_hash: The hash of the blockchain block number at which to check the subnet existence. + reuse_block: Whether to reuse the last-used block hash. Returns: Optional[int]: The value of the Tempo hyperparameter, or ``None`` if the subnetwork does not exist or the @@ -3144,17 +4470,17 @@

    Source code for bittensor.core.async_subtensor

    Retrieves the transaction rate limit for the Bittensor network as of a specific blockchain block. This rate limit sets the maximum number of transactions that can be processed within a given time frame. - Args: - block (Optional[int]): The blockchain block number for the query. - block_hash (Optional[str]): The hash of the blockchain block number at which to check the subnet existence. - reuse_block (bool): Whether to reuse the last-used block hash. + Arguments: + block: The blockchain block number for the query. + block_hash: The hash of the blockchain block number at which to check the subnet existence. + reuse_block: Whether to reuse the last-used block hash. Returns: - Optional[int]: The transaction rate limit of the network, None if not available. + Optional[int]: The transaction rate limit of the network, ``None`` if not available. The transaction rate limit is an essential parameter for ensuring the stability and scalability of the Bittensor - network. It helps in managing network load and preventing congestion, thereby maintaining efficient and - timely transaction processing. + network. It helps in managing network load and preventing congestion, thereby maintaining efficient and timely + transaction processing. """ block_hash = await self.determine_block_hash(block, block_hash, reuse_block) result = await self.query_subtensor( @@ -3167,35 +4493,39 @@

    Source code for bittensor.core.async_subtensor

    [docs] async def wait_for_block(self, block: Optional[int] = None): """ - Waits until a specific block is reached on the chain. If no block is specified, - waits for the next block. + Waits until a specific block is reached on the chain. If no block is specified, waits for the next block. - Args: - block (Optional[int]): The block number to wait for. If None, waits for next block. + Arguments: + block: The block number to wait for. If ``None``, waits for the next block. Returns: - bool: True if the target block was reached, False if timeout occurred. + bool: ``True`` if the target block was reached, ``False`` if timeout occurred. Example: + import bittensor as bt + subtensor = bt.Subtensor() + await subtensor.wait_for_block() # Waits for next block - await subtensor.wait_for_block(block=1234) # Waits for specific block + await subtensor.wait_for_block(block=1234) # Waits for a specific block """ async def handler(block_data: dict): logging.debug( - f'reached block {block_data["header"]["number"]}. Waiting for block {target_block}' + f"reached block {block_data['header']['number']}. Waiting for block {target_block}" ) if block_data["header"]["number"] >= target_block: return True + return None current_block = await self.substrate.get_block() current_block_hash = current_block.get("header", {}).get("hash") + if block is not None: target_block = block else: target_block = current_block["header"]["number"] + 1 - await self.substrate._get_block_handler( + await self.substrate.get_block_handler( current_block_hash, header_only=True, subscription_handler=handler ) return True

    @@ -3213,19 +4543,19 @@

    Source code for bittensor.core.async_subtensor

    """ Retrieves the weight distribution set by neurons within a specific subnet of the Bittensor network. This function maps each neuron's UID to the weights it assigns to other neurons, reflecting the network's trust - and value assignment mechanisms. + and value assignment mechanisms. Arguments: - netuid (int): The network UID of the subnet to query. - block (Optional[int]): Block number for synchronization, or ``None`` for the latest block. - block_hash (str): The hash of the blockchain block for the query. - reuse_block (bool): Whether to reuse the last-used blockchain block hash. + netuid: The network UID of the subnet to query. + block: Block number for synchronization, or `None` for the latest block. + block_hash: The hash of the blockchain block for the query. + reuse_block: reuse the last-used blockchain block hash. Returns: A list of tuples mapping each neuron's UID to its assigned weights. The weight distribution is a key factor in the network's consensus algorithm and the ranking of neurons, - influencing their influence and reward allocation within the subnet. + influencing their influence and reward allocation within the subnet. """ block_hash = await self.determine_block_hash(block, block_hash, reuse_block) # TODO look into seeing if we can speed this up with storage query @@ -3256,10 +4586,10 @@

    Source code for bittensor.core.async_subtensor

    Returns network WeightsSetRateLimit hyperparameter. Arguments: - netuid (int): The unique identifier of the subnetwork. - block (Optional[int]): The blockchain block number for the query. - block_hash (Optional[str]): The blockchain block_hash representation of the block id. - reuse_block (bool): Whether to reuse the last-used blockchain block hash. + netuid: The unique identifier of the subnetwork. + block: The blockchain block number for the query. + block_hash: The blockchain block_hash representation of the block id. + reuse_block: Whether to reuse the last-used blockchain block hash. Returns: Optional[int]: The value of the WeightsSetRateLimit hyperparameter, or ``None`` if the subnetwork does not @@ -3275,6 +4605,84 @@

    Source code for bittensor.core.async_subtensor

    return None if call is None else int(call)

    +
    +[docs] + async def get_timestamp( + self, + block: Optional[int] = None, + block_hash: Optional[str] = None, + reuse_block: bool = False, + ) -> datetime: + """ + Retrieves the datetime timestamp for a given block. + + Arguments: + block: The blockchain block number for the query. Do not specify if specifying block_hash or reuse_block. + block_hash: The blockchain block_hash representation of the block id. Do not specify if specifying block + or reuse_block. + reuse_block: Whether to reuse the last-used blockchain block hash. Do not specify if specifying block or + block_hash. + + Returns: + datetime object for the timestamp of the block. + """ + res = await self.query_module( + "Timestamp", + "Now", + block=block, + block_hash=block_hash, + reuse_block=reuse_block, + ) + unix = res.value + return datetime.fromtimestamp(unix / 1000, tz=timezone.utc)
    + + +
    +[docs] + async def get_subnet_owner_hotkey( + self, netuid: int, block: Optional[int] = None + ) -> Optional[str]: + """ + Retrieves the hotkey of the subnet owner for a given network UID. + + This function queries the subtensor network to fetch the hotkey of the owner of a subnet specified by its + netuid. If no data is found or the query fails, the function returns None. + + Arguments: + netuid: The network UID of the subnet to fetch the owner's hotkey for. + block: The specific block number to query the data from. + + Returns: + The hotkey of the subnet owner if available; None otherwise. + """ + return await self.query_subtensor( + name="SubnetOwnerHotkey", params=[netuid], block=block + )
    + + +
    +[docs] + async def get_subnet_validator_permits( + self, netuid: int, block: Optional[int] = None + ) -> Optional[list[bool]]: + """ + Retrieves the list of validator permits for a given subnet as boolean values. + + Arguments: + netuid: The unique identifier of the subnetwork. + block: The blockchain block number for the query. + + Returns: + A list of boolean values representing validator permits, or None if not available. + """ + query = await self.query_subtensor( + name="ValidatorPermit", + params=[netuid], + block=block, + ) + return query.value if query is not None and hasattr(query, "value") else query
    + + # Extrinsics helper ================================================================================================
    @@ -3289,19 +4697,30 @@

    Source code for bittensor.core.async_subtensor

    use_nonce: bool = False, period: Optional[int] = None, nonce_key: str = "hotkey", + raise_error: bool = False, ) -> tuple[bool, str]: """ Helper method to sign and submit an extrinsic call to chain. Arguments: - call (scalecodec.types.GenericCall): a prepared Call object - wallet (bittensor_wallet.Wallet): the wallet whose coldkey will be used to sign the extrinsic - wait_for_inclusion (bool): whether to wait until the extrinsic call is included on the chain - wait_for_finalization (bool): whether to wait until the extrinsic call is finalized on the chain + call: a prepared Call object + wallet: the wallet whose coldkey will be used to sign the extrinsic + wait_for_inclusion: whether to wait until the extrinsic call is included on the chain + wait_for_finalization: whether to wait until the extrinsic call is finalized on the chain sign_with: the wallet's keypair to use for the signing. Options are "coldkey", "hotkey", "coldkeypub" + use_nonce: unique identifier for the transaction related with hot/coldkey. + period: The number of blocks during which the transaction will remain valid after it's + submitted. If the transaction is not included in a block within that number of blocks, it will expire + and be rejected. You can think of it as an expiration date for the transaction. + nonce_key: the type on nonce to use. Options are "hotkey" or "coldkey". + nonce_key: the type on nonce to use. Options are "hotkey", "coldkey", or "coldkeypub". + raise_error: raises a relevant exception rather than returning ``False`` if unsuccessful. Returns: (success, error message) + + Raises: + SubstrateRequestException: Substrate request exception. """ possible_keys = ("coldkey", "hotkey", "coldkeypub") if sign_with not in possible_keys: @@ -3331,14 +4750,22 @@

    Source code for bittensor.core.async_subtensor

    ) # We only wait here if we expect finalization. if not wait_for_finalization and not wait_for_inclusion: - return True, "" + message = "Not waiting for finalization or inclusion." + logging.debug(f"{message}. Extrinsic: {extrinsic}") + return True, message if await response.is_success: return True, "" + if raise_error: + raise ChainError.from_error(await response.error_message) + return False, format_error_message(await response.error_message) except SubstrateRequestException as e: + if raise_error: + raise + return False, format_error_message(e)

    @@ -3354,25 +4781,41 @@

    Source code for bittensor.core.async_subtensor

    amount: Optional[Balance] = None, wait_for_inclusion: bool = True, wait_for_finalization: bool = False, + safe_staking: bool = False, + allow_partial_stake: bool = False, + rate_tolerance: float = 0.005, + period: Optional[int] = None, ) -> bool: """ - Adds the specified amount of stake to a neuron identified by the hotkey ``SS58`` address. - Staking is a fundamental process in the Bittensor network that enables neurons to participate actively and earn - incentives. + Adds a stake from the specified wallet to the neuron identified by the SS58 address of its hotkey in specified + subnet. Staking is a fundamental process in the Bittensor network that enables neurons to participate actively + and earn incentives. - Args: - wallet (bittensor_wallet.Wallet): The wallet to be used for staking. - hotkey_ss58 (Optional[str]): The ``SS58`` address of the hotkey associated with the neuron. - netuid: subnet UID - amount (Balance): The amount of TAO to stake. - wait_for_inclusion (bool): Waits for the transaction to be included in a block. - wait_for_finalization (bool): Waits for the transaction to be finalized on the blockchain. + Arguments: + wallet: The wallet to be used for staking. + hotkey_ss58: The SS58 address of the hotkey associated with the neuron to which you intend to delegate your + stake. If not specified, the wallet's hotkey will be used. Defaults to ``None``. + netuid: The unique identifier of the subnet to which the neuron belongs. + amount: The amount of TAO to stake. + wait_for_inclusion: Waits for the transaction to be included in a block. Defaults to `True`. + wait_for_finalization: Waits for the transaction to be finalized on the blockchain. Defaults to `False`. + safe_staking: If true, enables price safety checks to protect against fluctuating prices. The stake will + only execute if the price change doesn't exceed the rate tolerance. Default is ``False``. + allow_partial_stake: If true and safe_staking is enabled, allows partial staking when the full amount would + exceed the price tolerance. If false, the entire stake fails if it would exceed the tolerance. + Default is ``False``. + rate_tolerance: The maximum allowed price change ratio when staking. For example, 0.005 = 0.5% maximum price + increase. Only used when safe_staking is True. Default is ``0.005``. + period: The number of blocks during which the transaction will remain valid after it's submitted. If the + transaction is not included in a block within that number of blocks, it will expire and be rejected. You + can think of it as an expiration date for the transaction. Defaults to ``None``. Returns: - bool: ``True`` if the staking is successful, False otherwise. + bool: ``True`` if the staking is successful, ``False`` otherwise. - This function enables neurons to increase their stake in the network, enhancing their influence and potential - rewards in line with Bittensor's consensus and reward mechanisms. + This function enables neurons to increase their stake in the network, enhancing their influence and potential. + When safe_staking is enabled, it provides protection against price fluctuations during the time stake is + executed and the time it is actually processed by the chain. """ amount = check_and_convert_to_balance(amount) return await add_stake_extrinsic( @@ -3383,6 +4826,63 @@

    Source code for bittensor.core.async_subtensor

    amount=amount, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + safe_staking=safe_staking, + allow_partial_stake=allow_partial_stake, + rate_tolerance=rate_tolerance, + period=period, + )

    + + +
    +[docs] + async def add_liquidity( + self, + wallet: "Wallet", + netuid: int, + liquidity: Balance, + price_low: Balance, + price_high: Balance, + hotkey: Optional[str] = None, + wait_for_inclusion: bool = True, + wait_for_finalization: bool = False, + period: Optional[int] = None, + ) -> tuple[bool, str]: + """ + Adds liquidity to the specified price range. + + Arguments: + wallet: The wallet used to sign the extrinsic (must be unlocked). + netuid: The UID of the target subnet for which the call is being initiated. + liquidity: The amount of liquidity to be added. + price_low: The lower bound of the price tick range. In TAO. + price_high: The upper bound of the price tick range. In TAO. + hotkey: The hotkey with staked TAO in Alpha. If not passed then the wallet hotkey is used. Defaults to + `None`. + wait_for_inclusion: Whether to wait for the extrinsic to be included in a block. Defaults to True. + wait_for_finalization: Whether to wait for finalization of the extrinsic. Defaults to False. + period: The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. + + Returns: + Tuple[bool, str]: + - True and a success message if the extrinsic is successfully submitted or processed. + - False and an error message if the submission fails or the wallet cannot be unlocked. + + Note: Adding is allowed even when user liquidity is enabled in specified subnet. Call ``toggle_user_liquidity`` + method to enable/disable user liquidity. + """ + return await add_liquidity_extrinsic( + subtensor=self, + wallet=wallet, + netuid=netuid, + liquidity=liquidity, + price_low=price_low, + price_high=price_high, + hotkey=hotkey, + wait_for_inclusion=wait_for_inclusion, + wait_for_finalization=wait_for_finalization, + period=period, )
    @@ -3401,19 +4901,19 @@

    Source code for bittensor.core.async_subtensor

    Adds stakes to multiple neurons identified by their hotkey SS58 addresses. This bulk operation allows for efficient staking across different neurons from a single wallet. - Args: - wallet (bittensor_wallet.Wallet): The wallet used for staking. - hotkey_ss58s (list[str]): List of ``SS58`` addresses of hotkeys to stake to. - netuids: list of subnet UIDs - amounts (list[Balance]): Corresponding amounts of TAO to stake for each hotkey. - wait_for_inclusion (bool): Waits for the transaction to be included in a block. - wait_for_finalization (bool): Waits for the transaction to be finalized on the blockchain. + Arguments: + wallet: The wallet used for staking. + hotkey_ss58s: List of ``SS58`` addresses of hotkeys to stake to. + netuids: list of subnet UIDs. + amounts: Corresponding amounts of TAO to stake for each hotkey. + wait_for_inclusion: Waits for the transaction to be included in a block. Defaults to `True`. + wait_for_finalization: Waits for the transaction to be finalized on the blockchain. Defaults to `False`. Returns: - bool: ``True`` if the staking is successful for all specified neurons, False otherwise. + bool: ``True`` if the staking is successful for all specified neurons, ``False`` otherwise. This function is essential for managing stakes across multiple neurons, reflecting the dynamic and collaborative - nature of the Bittensor network. + nature of the Bittensor network. """ return await add_stake_multiple_extrinsic( subtensor=self, @@ -3434,29 +4934,42 @@

    Source code for bittensor.core.async_subtensor

    netuid: int, wait_for_inclusion: bool = False, wait_for_finalization: bool = True, + period: Optional[int] = None, ) -> bool: """ Registers a neuron on the Bittensor network by recycling TAO. This method of registration involves recycling - TAO tokens, allowing them to be re-mined by performing work on the network. + TAO tokens, allowing them to be re-mined by performing work on the network. - Args: - wallet (bittensor_wallet.Wallet): The wallet associated with the neuron to be registered. - netuid (int): The unique identifier of the subnet. - wait_for_inclusion (bool, optional): Waits for the transaction to be included in a block. Defaults to - `False`. - wait_for_finalization (bool, optional): Waits for the transaction to be finalized on the blockchain. - Defaults to `True`. + Arguments: + wallet: The wallet associated with the neuron to be registered. + netuid: The unique identifier of the subnet. + wait_for_inclusion: Waits for the transaction to be included in a block. Defaults to + ``False``. + wait_for_finalization: Waits for the transaction to be finalized on the blockchain. + period: The number of blocks during which the transaction will remain valid after it's + submitted. If the transaction is not included in a block within that number of blocks, it will expire + and be rejected. You can think of it as an expiration date for the transaction. Returns: - bool: ``True`` if the registration is successful, False otherwise. + bool: `True` if the registration is successful, False otherwise. """ async with self: + if netuid == 0: + return await root_register_extrinsic( + subtensor=self, + wallet=wallet, + wait_for_inclusion=wait_for_inclusion, + wait_for_finalization=wait_for_finalization, + period=period, + ) + return await burned_register_extrinsic( subtensor=self, wallet=wallet, netuid=netuid, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + period=period, )

    @@ -3473,38 +4986,46 @@

    Source code for bittensor.core.async_subtensor

    wait_for_inclusion: bool = False, wait_for_finalization: bool = False, max_retries: int = 5, + period: Optional[int] = 16, ) -> tuple[bool, str]: """ - Commits a hash of the neuron's weights to the Bittensor blockchain using the provided wallet. - This action serves as a commitment or snapshot of the neuron's current weight distribution. + Commits a hash of the subnet validator's weight vector to the Bittensor blockchain using the provided wallet. + This action serves as a commitment or snapshot of the validator's current weight distribution. Arguments: - wallet (bittensor_wallet.Wallet): The wallet associated with the neuron committing the weights. - netuid (int): The unique identifier of the subnet. - salt (list[int]): list of randomly generated integers as salt to generated weighted hash. - uids (np.ndarray): NumPy array of neuron UIDs for which weights are being committed. - weights (np.ndarray): NumPy array of weight values corresponding to each UID. - version_key (int): Version key for compatibility with the network. Default is ``int representation of - Bittensor version.``. - wait_for_inclusion (bool): Waits for the transaction to be included in a block. Default is ``False``. - wait_for_finalization (bool): Waits for the transaction to be finalized on the blockchain. Default is - ``False``. - max_retries (int): The number of maximum attempts to commit weights. Default is ``5``. + wallet: The wallet associated with the subnet validator committing the weights. + netuid: The unique identifier of the subnet. + salt: list of randomly generated integers as salt to generated weighted hash. + uids: NumPy array of subnet miner neuron UIDs for which weights are being committed. + weights: of weight values corresponding toon_key + version_key: Integer representation of version key for compatibility with the network. + wait_for_inclusion: Waits for the transaction to be included in a block. Default is `False`. + wait_for_finalization: Waits for the transaction to be finalized on the blockchain. Default is + `False`. + max_retries: The number of maximum attempts to commit weights. Default is `5`. + period: The number of blocks during which the transaction will remain valid after it's + submitted. If the transaction is not included in a block within that number of blocks, it will expire + and be rejected. You can think of it as an expiration date for the transaction. Returns: - tuple[bool, str]: ``True`` if the weight commitment is successful, False otherwise. And `msg`, a string - value describing the success or potential error. + tuple[bool, str]: + `True` if the weight commitment is successful, False otherwise. + `msg` is a string value describing the success or potential error. - This function allows neurons to create a tamper-proof record of their weight distribution at a specific point - in time, enhancing transparency and accountability within the Bittensor network. + This function allows subnet validators to create a tamper-proof record of their weight vector at a specific + point in time, creating a foundation of transparency and accountability for the Bittensor network. + + Notes: + See also: <https://docs.learnbittensor.org/glossary#commit-reveal>, """ retries = 0 success = False message = "No attempt made. Perhaps it is too soon to commit weights!" logging.info( - f"Committing weights with params: netuid={netuid}, uids={uids}, weights={weights}, " - f"version_key={version_key}" + f"Committing weights with params: " + f"netuid=[blue]{netuid}[/blue], uids=[blue]{uids}[/blue], weights=[blue]{weights}[/blue], " + f"version_key=[blue]{version_key}[/blue]" ) # Generate the hash of the weights @@ -3526,17 +5047,92 @@

    Source code for bittensor.core.async_subtensor

    commit_hash=commit_hash, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + period=period, ) if success: break except Exception as e: logging.error(f"Error committing weights: {e}") - finally: retries += 1 return success, message

    +
    +[docs] + async def modify_liquidity( + self, + wallet: "Wallet", + netuid: int, + position_id: int, + liquidity_delta: Balance, + hotkey: Optional[str] = None, + wait_for_inclusion: bool = True, + wait_for_finalization: bool = False, + period: Optional[int] = None, + ) -> tuple[bool, str]: + """Modifies liquidity in liquidity position by adding or removing liquidity from it. + + Arguments: + wallet: The wallet used to sign the extrinsic (must be unlocked). + netuid: The UID of the target subnet for which the call is being initiated. + position_id: The id of the position record in the pool. + liquidity_delta: The amount of liquidity to be added or removed (add if positive or remove if negative). + hotkey: The hotkey with staked TAO in Alpha. If not passed then the wallet hotkey is used. Defaults to + `None`. + wait_for_inclusion: Whether to wait for the extrinsic to be included in a block. Defaults to True. + wait_for_finalization: Whether to wait for finalization of the extrinsic. Defaults to False. + period: The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. + + Returns: + Tuple[bool, str]: + - True and a success message if the extrinsic is successfully submitted or processed. + - False and an error message if the submission fails or the wallet cannot be unlocked. + + Example: + import bittensor as bt + + subtensor = bt.AsyncSubtensor(network="local") + await subtensor.initialize() + + my_wallet = bt.Wallet() + + # if `liquidity_delta` is negative + my_liquidity_delta = Balance.from_tao(100) * -1 + await subtensor.modify_liquidity( + wallet=my_wallet, + netuid=123, + position_id=2, + liquidity_delta=my_liquidity_delta + ) + + # if `liquidity_delta` is positive + my_liquidity_delta = Balance.from_tao(120) + await subtensor.modify_liquidity( + wallet=my_wallet, + netuid=123, + position_id=2, + liquidity_delta=my_liquidity_delta + ) + + Note: Modifying is allowed even when user liquidity is enabled in specified subnet. Call `toggle_user_liquidity` + to enable/disable user liquidity. + """ + return await modify_liquidity_extrinsic( + subtensor=self, + wallet=wallet, + netuid=netuid, + position_id=position_id, + liquidity_delta=liquidity_delta, + hotkey=hotkey, + wait_for_inclusion=wait_for_inclusion, + wait_for_finalization=wait_for_finalization, + period=period, + )
    + +
    [docs] async def move_stake( @@ -3549,22 +5145,26 @@

    Source code for bittensor.core.async_subtensor

    amount: Balance, wait_for_inclusion: bool = True, wait_for_finalization: bool = False, + period: Optional[int] = None, ) -> bool: """ Moves stake to a different hotkey and/or subnet. - Args: - wallet (bittensor.wallet): The wallet to move stake from. - origin_hotkey (str): The SS58 address of the source hotkey. - origin_netuid (int): The netuid of the source subnet. - destination_hotkey (str): The SS58 address of the destination hotkey. - destination_netuid (int): The netuid of the destination subnet. - amount (Balance): Amount of stake to move. - wait_for_inclusion (bool): Waits for the transaction to be included in a block. - wait_for_finalization (bool): Waits for the transaction to be finalized on the blockchain. + Arguments: + wallet: The wallet to move stake from. + origin_hotkey: The SS58 address of the source hotkey. + origin_netuid: The netuid of the source subnet. + destination_hotkey: The SS58 address of the destination hotkey. + destination_netuid: The netuid of the destination subnet. + amount: Amount of stake to move. + wait_for_inclusion: Waits for the transaction to be included in a block. + wait_for_finalization: Waits for the transaction to be finalized on the blockchain. + period: The number of blocks during which the transaction will remain valid after it's + submitted. If the transaction is not included in a block within that number of blocks, it will expire + and be rejected. You can think of it as an expiration date for the transaction. Returns: - success (bool): True if the stake movement was successful. + success: True if the stake movement was successful. """ amount = check_and_convert_to_balance(amount) return await move_stake_extrinsic( @@ -3577,6 +5177,7 @@

    Source code for bittensor.core.async_subtensor

    amount=amount, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + period=period, )

    @@ -3596,34 +5197,37 @@

    Source code for bittensor.core.async_subtensor

    num_processes: Optional[int] = None, update_interval: Optional[int] = None, log_verbose: bool = False, + period: Optional[int] = None, ): """ Registers a neuron on the Bittensor network using the provided wallet. Registration is a critical step for a neuron to become an active participant in the network, enabling it to - stake, set weights, and receive incentives. + stake, set weights, and receive incentives. - Args: - wallet (bittensor_wallet.Wallet): The wallet associated with the neuron to be registered. - netuid (int): The unique identifier of the subnet. - wait_for_inclusion (bool): Waits for the transaction to be included in a block. Defaults to `False`. - wait_for_finalization (bool): Waits for the transaction to be finalized on the blockchain. Defaults to - `True`. - max_allowed_attempts (int): Maximum number of attempts to register the wallet. - output_in_place (bool): If true, prints the progress of the proof of work to the console in-place. Meaning + Arguments: + wallet: The wallet associated with the neuron to be registered. + netuid: unique identifier of the subnet. + wait_for_inclusion: Waits for the transaction to be included in a block. Defaults to `False`. + wait_for_finalization: Waits for the transaction to be finalized on the blockchain. Defaults to + max_allowed_attempts: Maximum number of attempts to register the wallet. + output_in_place: If true, prints the progress of the proof of work to the console in-place. Meaning the progress is printed on the same lines. Defaults to `True`. - cuda (bool): If ``true``, the wallet should be registered using CUDA device(s). Defaults to `False`. - dev_id (Union[List[int], int]): The CUDA device id to use, or a list of device ids. Defaults to `0` (zero). - tpb (int): The number of threads per block (CUDA). Default to `256`. - num_processes (Optional[int]): The number of processes to use to register. Default to `None`. - update_interval (Optional[int]): The number of nonces to solve between updates. Default to `None`. - log_verbose (bool): If ``true``, the registration process will log more information. Default to `False`. + cuda: If `true`, the wallet should be registered using CUDA device(s). Defaults to `False`. + dev_id: The CUDA device id to use, or a list of device ids. Defaults to `0` (zero). + tpb: The number of threads per block (CUDA). Default to `256`. + num_processes: The number of processes to use to register. Default to `None`. + update_interval: The number of nonces to solve between updates. Default to `None`. + log_verbose: If `true`, the registration process will log more information. Default to `False`. + period: The number of blocks during which the transaction will remain valid after it's + submitted. If the transaction is not included in a block within that number of blocks, it will expire + and be rejected. You can think of it as an expiration date for the transaction. Returns: - bool: ``True`` if the registration is successful, False otherwise. + bool: `True` if the registration is successful, False otherwise. - This function facilitates the entry of new neurons into the network, supporting the decentralized - growth and scalability of the Bittensor ecosystem. + This function facilitates the entry of new neurons into the network, supporting the decentralized growth and + scalability of the Bittensor ecosystem. """ return await register_extrinsic( subtensor=self, @@ -3639,6 +5243,7 @@

    Source code for bittensor.core.async_subtensor

    dev_id=dev_id, output_in_place=output_in_place, log_verbose=log_verbose, + period=period, )

    @@ -3647,28 +5252,80 @@

    Source code for bittensor.core.async_subtensor

    async def register_subnet( self: "AsyncSubtensor", wallet: "Wallet", - wait_for_inclusion: bool = False, - wait_for_finalization: bool = True, - ) -> bool: - """ - Registers a new subnetwork on the Bittensor network. + wait_for_inclusion: bool = False, + wait_for_finalization: bool = True, + period: Optional[int] = None, + ) -> bool: + """ + Registers a new subnetwork on the Bittensor network. + + Arguments: + wallet: The wallet to be used for subnet registration. + wait_for_inclusion: If set, waits for the extrinsic to enter a block before returning `True`, + os `False` if the extrinsic fails to enter the block within the timeout. Default is `False`. + wait_for_finalization: If set, waits for the extrinsic to be finalized on the chain before returning + true, or returns false if the extrinsic fails to be finalized within the timeout. Default is `False`. + period: The number of blocks during which the transaction will remain valid after it's + submitted. If the transaction is not included in a block within that number of blocks, it will expire + and be rejected. You can think of it as an expiration date for the transaction. + + Returns: + bool: True if the subnet registration was successful, False otherwise. + """ + return await register_subnet_extrinsic( + subtensor=self, + wallet=wallet, + wait_for_inclusion=wait_for_inclusion, + wait_for_finalization=wait_for_finalization, + period=period, + )

    + + +
    +[docs] + async def remove_liquidity( + self, + wallet: "Wallet", + netuid: int, + position_id: int, + hotkey: Optional[str] = None, + wait_for_inclusion: bool = True, + wait_for_finalization: bool = False, + period: Optional[int] = None, + ) -> tuple[bool, str]: + """Remove liquidity and credit balances back to wallet's hotkey stake. - Args: - wallet (bittensor_wallet.Wallet): The wallet to be used for subnet registration. - wait_for_inclusion (bool): If set, waits for the extrinsic to enter a block before returning true, or returns - false if the extrinsic fails to enter the block within the timeout. Default is False. - wait_for_finalization (bool): If set, waits for the extrinsic to be finalized on the chain before returning - true, or returns false if the extrinsic fails to be finalized within the timeout. Default is True. + Arguments: + wallet: The wallet used to sign the extrinsic (must be unlocked). + netuid: The UID of the target subnet for which the call is being initiated. + position_id: The id of the position record in the pool. + hotkey: The hotkey with staked TAO in Alpha. If not passed then the wallet hotkey is used. Defaults to + `None`. + wait_for_inclusion: Whether to wait for the extrinsic to be included in a block. Defaults to True. + wait_for_finalization: Whether to wait for finalization of the extrinsic. Defaults to False. + period: The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: - bool: True if the subnet registration was successful, False otherwise. + Tuple[bool, str]: + - True and a success message if the extrinsic is successfully submitted or processed. + - False and an error message if the submission fails or the wallet cannot be unlocked. + Note: + - Adding is allowed even when user liquidity is enabled in specified subnet. Call `toggle_user_liquidity` + extrinsic to enable/disable user liquidity. + - To get the `position_id` use `get_liquidity_list` method. """ - return await register_subnet_extrinsic( + return await remove_liquidity_extrinsic( subtensor=self, wallet=wallet, + netuid=netuid, + position_id=position_id, + hotkey=hotkey, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + period=period, )
    @@ -3685,30 +5342,36 @@

    Source code for bittensor.core.async_subtensor

    wait_for_inclusion: bool = False, wait_for_finalization: bool = False, max_retries: int = 5, + period: Optional[int] = None, ) -> tuple[bool, str]: """ - Reveals the weights for a specific subnet on the Bittensor blockchain using the provided wallet. - This action serves as a revelation of the neuron's previously committed weight distribution. + Reveals the weight vector for a specific subnet on the Bittensor blockchain using the provided wallet. + This action serves as a revelation of the subnet validator's previously committed weight distribution as part + of the commit-reveal mechanism. - Args: - wallet (bittensor_wallet.Wallet): The wallet associated with the neuron revealing the weights. - netuid (int): The unique identifier of the subnet. - uids (np.ndarray): NumPy array of neuron UIDs for which weights are being revealed. - weights (np.ndarray): NumPy array of weight values corresponding to each UID. - salt (np.ndarray): NumPy array of salt values corresponding to the hash function. - version_key (int): Version key for compatibility with the network. Default is ``int representation of - Bittensor version``. - wait_for_inclusion (bool): Waits for the transaction to be included in a block. Default is ``False``. - wait_for_finalization (bool): Waits for the transaction to be finalized on the blockchain. Default is - ``False``. - max_retries (int): The number of maximum attempts to reveal weights. Default is ``5``. + Arguments: + wallet: The wallet associated with the subnet validator revealing the weights. + netuid: unique identifier of the subnet. + uids: NumPy array of subnet miner neuron UIDs for which weights are being revealed. + weights: NumPy array of weight values corresponding to each UID. + salt: NumPy array of salt values + version_key: Version key for compatibility with the network. Default is `int representation of + the Bittensor version`. + wait_for_inclusion: Waits for the transaction to be included in a block. Default is `False`. + wait_for_finalization: Waits for the transaction to be finalized on the blockchain. Default is + `False`. + max_retries: The number of maximum attempts to reveal weights. Default is `5`. + period: The number of blocks during which the transaction will remain valid after it's + submitted. If the transaction is not included in a block within that number of blocks, it will expire + and be rejected. You can think of it as an expiration date for the transaction. Returns: - tuple[bool, str]: ``True`` if the weight revelation is successful, False otherwise. And `msg`, a string + tuple[bool, str]: `True` if the weight revelation is successful, False otherwise. And `msg`, a string value describing the success or potential error. - This function allows neurons to reveal their previously committed weight distribution, ensuring transparency - and accountability within the Bittensor network. + This function allows subnet validators to reveal their previously committed weight vector. + + See also: <https://docs.learnbittensor.org/glossary#commit-reveal>, """ retries = 0 success = False @@ -3726,17 +5389,56 @@

    Source code for bittensor.core.async_subtensor

    version_key=version_key, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + period=period, ) if success: break except Exception as e: logging.error(f"Error revealing weights: {e}") - finally: retries += 1 return success, message

    +
    +[docs] + async def root_set_pending_childkey_cooldown( + self, + wallet: "Wallet", + cooldown: int, + wait_for_inclusion: bool = True, + wait_for_finalization: bool = True, + period: Optional[int] = None, + ) -> tuple[bool, str]: + """Sets the pending childkey cooldown. + + Arguments: + wallet: bittensor wallet instance. + cooldown: the number of blocks to setting pending childkey cooldown. + wait_for_inclusion: Waits for the transaction to be included in a block. Default is `False`. + wait_for_finalization: Waits for the transaction to be finalized on the blockchain. Default is + `False`. + period: The number of blocks during which the transaction will remain valid after it's + submitted. If the transaction is not included in a block within that number of blocks, it will expire + and be rejected. You can think of it as an expiration date for the transaction. + + Returns: + tuple[bool, str]: A tuple where the first element is a boolean indicating success or failure of the + operation, and the second element is a message providing additional information. + + Note: This operation can only be successfully performed if your wallet has root privileges. + """ + return await root_set_pending_childkey_cooldown_extrinsic( + subtensor=self, + wallet=wallet, + cooldown=cooldown, + wait_for_inclusion=wait_for_inclusion, + wait_for_finalization=wait_for_finalization, + period=period, + )
    + + + # TODO: remove `block_hash` argument
    [docs] async def root_register( @@ -3745,60 +5447,34 @@

    Source code for bittensor.core.async_subtensor

    block_hash: Optional[str] = None, wait_for_inclusion: bool = True, wait_for_finalization: bool = True, + period: Optional[int] = None, ) -> bool: """ Register neuron by recycling some TAO. Arguments: - wallet (bittensor_wallet.Wallet): Bittensor wallet instance. - block_hash (Optional[str]): The hash of the blockchain block for the query. - wait_for_inclusion (bool): Waits for the transaction to be included in a block. Default is ``False``. - wait_for_finalization (bool): Waits for the transaction to be finalized on the blockchain. Default is - ``False``. + wallet: Bittensor wallet instance. + block_hash: This argument will be removed in Bittensor v10 + wait_for_inclusion: Waits for the transaction to be included in a block. Default is `False`. + wait_for_finalization: Waits for the transaction to be finalized on the blockchain. Default is + `False`. + period: The number of blocks during which the transaction will remain valid after it's + submitted. If the transaction is not included in a block within that number of blocks, it will expire + and be rejected. You can think of it as an expiration date for the transaction. Returns: `True` if registration was successful, otherwise `False`. """ - netuid = 0 - logging.info( - f"Registering on netuid [blue]0[/blue] on network: [blue]{self.network}[/blue]" - ) - - # Check current recycle amount - logging.info("Fetching recycle amount & balance.") - block_hash = block_hash if block_hash else await self.get_block_hash() - - try: - recycle_call, balance = await asyncio.gather( - self.get_hyperparameter( - param_name="Burn", netuid=netuid, block_hash=block_hash - ), - self.get_balance(wallet.coldkeypub.ss58_address, block_hash=block_hash), - ) - except TypeError as e: - logging.error(f"Unable to retrieve current recycle. {e}") - return False - - current_recycle = Balance.from_rao(int(recycle_call)) - - # Check balance is sufficient - if balance < current_recycle: - logging.error( - f"[red]Insufficient balance {balance} to register neuron. " - f"Current recycle is {current_recycle} TAO[/red]." - ) - return False return await root_register_extrinsic( subtensor=self, wallet=wallet, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + period=period, )

    -
    -[docs] async def root_set_weights( self, wallet: "Wallet", @@ -3807,25 +5483,26 @@

    Source code for bittensor.core.async_subtensor

    version_key: int = 0, wait_for_inclusion: bool = True, wait_for_finalization: bool = True, + period: Optional[int] = None, ) -> bool: """ - Set weights for root network. + Set weights for the root network. Arguments: - wallet (bittensor_wallet.Wallet): bittensor wallet instance. - netuids (list[int]): The list of subnet uids. - weights (list[float]): The list of weights to be set. - version_key (int, optional): Version key for compatibility with the network. Default is ``0``. - wait_for_inclusion (bool, optional): Waits for the transaction to be included in a block. Defaults to - ``False``. - wait_for_finalization (bool, optional): Waits for the transaction to be finalized on the blockchain. - Defaults to ``False``. + wallet: bittensor wallet instance. + netuids: The list of subnet uids. + weights: The list of weights to be set. + version_key: Version key for compatibility with the network. Default is `0`. + wait_for_inclusion: Waits for the transaction to be included in a block. + wait_for_finalization: Waits for the transaction to be finalized on the blockchain. Defaults to `False`. + period: The number of blocks during which the transaction will remain valid after it's submitted. If the + transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: `True` if the setting of weights is successful, `False` otherwise. """ - netuids_ = np.array(netuids, dtype=np.int64) - weights_ = np.array(weights, dtype=np.float32) + netuids_, weights_ = convert_uids_and_weights(netuids, weights) logging.info(f"Setting weights in network: [blue]{self.network}[/blue]") # Run the set weights operation. return await set_root_weights_extrinsic( @@ -3836,9 +5513,154 @@

    Source code for bittensor.core.async_subtensor

    version_key=version_key, wait_for_finalization=wait_for_finalization, wait_for_inclusion=wait_for_inclusion, + period=period, + ) + +

    +[docs] + async def set_children( + self, + wallet: "Wallet", + hotkey: str, + netuid: int, + children: list[tuple[float, str]], + wait_for_inclusion: bool = True, + wait_for_finalization: bool = True, + raise_error: bool = False, + period: Optional[int] = None, + ) -> tuple[bool, str]: + """ + Allows a coldkey to set children-keys. + + Arguments: + wallet: bittensor wallet instance. + hotkey: The `SS58` address of the neuron's hotkey. + netuid: The netuid value. + children: A list of children with their proportions. + wait_for_inclusion: Waits for the transaction to be included in a block. + wait_for_finalization: Waits for the transaction to be finalized on the blockchain. + raise_error: Raises a relevant exception rather than returning `False` if unsuccessful. + period: The number of blocks during which the transaction will remain valid after it's + submitted. If the transaction is not included in a block within that number of blocks, it will expire + and be rejected. You can think of it as an expiration date for the transaction. + + Returns: + tuple[bool, str]: A tuple where the first element is a boolean indicating success or failure of the + operation, and the second element is a message providing additional information. + + Raises: + DuplicateChild: There are duplicates in the list of children. + InvalidChild: Child is the hotkey. + NonAssociatedColdKey: The coldkey does not own the hotkey or the child is the same as the hotkey. + NotEnoughStakeToSetChildkeys: Parent key doesn't have minimum own stake. + ProportionOverflow: The sum of the proportions does exceed uint64. + RegistrationNotPermittedOnRootSubnet: Attempting to register a child on the root network. + SubNetworkDoesNotExist: Attempting to register to a non-existent network. + TooManyChildren: Too many children in request. + TxRateLimitExceeded: Hotkey hit the rate limit. + bittensor_wallet.errors.KeyFileError: Failed to decode keyfile data. + bittensor_wallet.errors.PasswordError: Decryption failed or wrong password for decryption provided. + """ + return await set_children_extrinsic( + subtensor=self, + wallet=wallet, + hotkey=hotkey, + netuid=netuid, + children=children, + wait_for_inclusion=wait_for_inclusion, + wait_for_finalization=wait_for_finalization, + raise_error=raise_error, + period=period, )
    +
    +[docs] + async def set_delegate_take( + self, + wallet: "Wallet", + hotkey_ss58: str, + take: float, + wait_for_inclusion: bool = True, + wait_for_finalization: bool = True, + raise_error: bool = False, + period: Optional[int] = None, + ) -> tuple[bool, str]: + """ + Sets the delegate 'take' percentage for a neuron identified by its hotkey. + The 'take' represents the percentage of rewards that the delegate claims from its nominators' stakes. + + Arguments: + wallet: bittensor wallet instance. + hotkey_ss58: The ``SS58`` address of the neuron's hotkey. + take: Percentage reward for the delegate. + wait_for_inclusion: Waits for the transaction to be included in a block. + wait_for_finalization: Waits for the transaction to be finalized on_error: Raises a relevant exception + rather than returning ``False`` if unsuccessful. + raise_error: raises a relevant exception rather than returning ``False`` if unsuccessful. + period: The number of blocks during which the transaction will remain valid after it's + submitted. If the transaction is not included in a block within that number of blocks, it will expire + and be rejected. You can think of it as an expiration date for the transaction. + + Returns: + tuple[bool, str]: A tuple where the first element is a boolean indicating success or failure of the + operation, and the second element is a message providing additional information. + + Raises: + DelegateTakeTooHigh: Delegate take is too high. + DelegateTakeTooLow: Delegate take is too low. + DelegateTxRateLimitExceeded: A transactor exceeded the rate limit for delegate transaction. + HotKeyAccountNotExists: The hotkey does not exist. + NonAssociatedColdKey: Request to stake, unstake, or subscribe is made by a coldkey that is not associated + with the hotkey account. + bittensor_wallet.errors.PasswordError: Decryption failed or wrong password for decryption provided. + bittensor_wallet.errors.KeyFileError: Failed to decode keyfile data. + + The delegate take is a critical parameter in the network's incentive structure, influencing the distribution of + rewards among neurons and their nominators. + """ + + # u16 representation of the take + take_u16 = int(take * 0xFFFF) + + current_take = await self.get_delegate_take(hotkey_ss58) + current_take_u16 = int(current_take * 0xFFFF) + + if current_take_u16 == take_u16: + logging.info(":white_heavy_check_mark: [green]Already Set[/green]") + return True, "" + + logging.info(f"Updating {hotkey_ss58} take: current={current_take} new={take}") + + if current_take_u16 < take_u16: + success, error = await increase_take_extrinsic( + self, + wallet, + hotkey_ss58, + take_u16, + wait_for_finalization=wait_for_finalization, + wait_for_inclusion=wait_for_inclusion, + raise_error=raise_error, + period=period, + ) + else: + success, error = await decrease_take_extrinsic( + self, + wallet, + hotkey_ss58, + take_u16, + wait_for_finalization=wait_for_finalization, + wait_for_inclusion=wait_for_inclusion, + raise_error=raise_error, + period=period, + ) + + if success: + logging.info(":white_heavy_check_mark: [green]Take Updated[/green]") + + return success, error
    + +
    [docs] async def set_subnet_identity( @@ -3848,17 +5670,23 @@

    Source code for bittensor.core.async_subtensor

    subnet_identity: SubnetIdentity, wait_for_inclusion: bool = False, wait_for_finalization: bool = True, + period: Optional[int] = None, ) -> tuple[bool, str]: """ Sets the identity of a subnet for a specific wallet and network. Arguments: - wallet (Wallet): The wallet instance that will authorize the transaction. - netuid (int): The unique ID of the network on which the operation takes place. - subnet_identity (SubnetIdentity): The identity data of the subnet including attributes like name, GitHub + wallet: The wallet instance that will authorize the transaction. + netuid: The unique ID of the network on which the operation takes place. + subnet_identity: The identity data of the subnet including attributes like name, GitHub repository, contact, URL, discord, description, and any additional metadata. - wait_for_inclusion (bool): Indicates if the function should wait for the transaction to be included in the block. - wait_for_finalization (bool): Indicates if the function should wait for the transaction to reach finalization. + wait_for_inclusion: Indicates if the function should wait for the transaction to be included in the + block. + wait_for_finalization: Indicates if the function should wait for the transaction to reach + finalization. + period: The number of blocks during which the transaction will remain valid after it's + submitted. If the transaction is not included in a block within that number of blocks, it will expire + and be rejected. You can think of it as an expiration date for the transaction. Returns: tuple[bool, str]: A tuple where the first element is a boolean indicating success or failure of the @@ -3872,11 +5700,13 @@

    Source code for bittensor.core.async_subtensor

    github_repo=subnet_identity.github_repo, subnet_contact=subnet_identity.subnet_contact, subnet_url=subnet_identity.subnet_url, + logo_url=subnet_identity.logo_url, discord=subnet_identity.discord, description=subnet_identity.description, additional=subnet_identity.additional, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + period=period, )

    @@ -3892,32 +5722,43 @@

    Source code for bittensor.core.async_subtensor

    wait_for_inclusion: bool = False, wait_for_finalization: bool = False, max_retries: int = 5, + block_time: float = 12.0, + period: Optional[int] = 8, ): """ - Sets the inter-neuronal weights for the specified neuron. This process involves specifying the influence or - trust a neuron places on other neurons in the network, which is a fundamental aspect of Bittensor's - decentralized learning architecture. + Sets the weight vector for a neuron acting as a validator, specifying the weights assigned to subnet miners + based on their performance evaluation. + + This method allows subnet validators to submit their weight vectors, which rank the value of each subnet miner's + work. These weight vectors are used by the Yuma Consensus algorithm to compute emissions for both validators and + miners. Arguments: - wallet (bittensor_wallet.Wallet): The wallet associated with the neuron setting the weights. - netuid (int): The unique identifier of the subnet. - uids (Union[NDArray[np.int64], torch.LongTensor, list]): The list of neuron UIDs that the weights are being - set for. - weights (Union[NDArray[np.float32], torch.FloatTensor, list]): The corresponding weights to be set for each - UID. - version_key (int): Version key for compatibility with the network. Default is int representation of - Bittensor version. - wait_for_inclusion (bool): Waits for the transaction to be included in a block. Default is ``False``. - wait_for_finalization (bool): Waits for the transaction to be finalized on the blockchain. Default is - ``False``. - max_retries (int): The number of maximum attempts to set weights. Default is ``5``. + wallet: The wallet associated with the subnet validator setting the weights. + netuid: The unique identifier of the subnet. + uids: The list of subnet miner neuron UIDs that the weights are being set for. + weights: The corresponding weights to be set for each UID, representing the validator's evaluation of each + miner's performance. + version_key: Version key for compatibility with the network. Default is int representation of + the Bittensor version. + wait_for_inclusion: Waits for the transaction to be included in a block. Default is `False`. + wait_for_finalization: Waits for the transaction to be finalized on the blockchain. Default is + `False`. + max_retries: The number of maximum attempts to set weights. Default is `5`. + block_time: The number of seconds for block duration. Default is 12.0 seconds. + period: The number of blocks during which the transaction will remain valid after it's + submitted. If the transaction is not included in a block within that number of blocks, it will expire + and be rejected. You can think of it as an expiration date for the transaction. Default is 8. Returns: - tuple[bool, str]: ``True`` if the setting of weights is successful, False otherwise. And `msg`, a string + tuple[bool, str]: `True` if the setting of weights is successful, False otherwise. And `msg`, a string value describing the success or potential error. - This function is crucial in shaping the network's collective intelligence, where each neuron's learning and - contribution are influenced by the weights it sets towards others【81†source】. + This function is crucial in the Yuma Consensus mechanism, where each validator's weight vector contributes to + the overall weight matrix used to calculate emissions and maintain network consensus. + + Notes: + See <https://docs.learnbittensor.org/glossary#yuma-consensus> """ async def _blocks_weight_limit() -> bool: @@ -3929,6 +5770,7 @@

    Source code for bittensor.core.async_subtensor

    retries = 0 success = False + message = "No attempt made. Perhaps it is too soon to set weights!" if ( uid := await self.get_uid_for_hotkey_on_subnet( wallet.hotkey.ss58_address, netuid @@ -3939,9 +5781,9 @@

    Source code for bittensor.core.async_subtensor

    f"Hotkey {wallet.hotkey.ss58_address} not registered in subnet {netuid}", ) - if (await self.commit_reveal_enabled(netuid=netuid)) is True: + if await self.commit_reveal_enabled(netuid=netuid): # go with `commit reveal v3` extrinsic - message = "No attempt made. Perhaps it is too soon to commit weights!" + while ( retries < max_retries and success is False @@ -3959,12 +5801,14 @@

    Source code for bittensor.core.async_subtensor

    version_key=version_key, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + block_time=block_time, + period=period, ) retries += 1 return success, message else: # go with classic `set weights extrinsic` - message = "No attempt made. Perhaps it is too soon to set weights!" + while ( retries < max_retries and success is False @@ -3973,7 +5817,7 @@

    Source code for bittensor.core.async_subtensor

    try: logging.info( f"Setting weights for subnet #[blue]{netuid}[/blue]. " - f"Attempt [blue]{retries + 1} of {max_retries}[/blue]." + f"Attempt [blue]{retries + 1}[/blue] of [green]{max_retries}[/green]." ) success, message = await set_weights_extrinsic( subtensor=self, @@ -3984,10 +5828,10 @@

    Source code for bittensor.core.async_subtensor

    version_key=version_key, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + period=period, ) except Exception as e: logging.error(f"Error setting weights: {e}") - finally: retries += 1 return success, message

    @@ -4002,25 +5846,27 @@

    Source code for bittensor.core.async_subtensor

    wait_for_inclusion: bool = False, wait_for_finalization: bool = True, certificate: Optional[Certificate] = None, + period: Optional[int] = None, ) -> bool: """ Registers an ``Axon`` serving endpoint on the Bittensor network for a specific neuron. This function is used to - set up the Axon, a key component of a neuron that handles incoming queries and data processing tasks. + set up the Axon, a key component of a neuron that handles incoming queries and data processing tasks. - Args: - netuid (int): The unique identifier of the subnetwork. - axon (bittensor.core.axon.Axon): The Axon instance to be registered for serving. - wait_for_inclusion (bool): Waits for the transaction to be included in a block. Default is ``False``. - wait_for_finalization (bool): Waits for the transaction to be finalized on the blockchain. Default is - ``True``. - certificate (bittensor.utils.Certificate): Certificate to use for TLS. If ``None``, no TLS will be used. - Defaults to ``None``. + Arguments: + netuid: The unique identifier of the subnetwork. + axon: The Axon instance to be registered for serving. + wait_for_inclusion: Waits for the transaction to be included in a block. Default is `False`. + wait_for_finalization: Waits for the transaction to be finalized on the blockchain. Default is `True`. + certificate: Certificate to use for TLS. If `None`, no TLS will be used. Defaults to `None`. + period: The number of blocks during which the transaction will remain valid after it's submitted. If the + transaction is not included in a block within that number of blocks, it will expire and be rejected. You + can think of it as an expiration date for the transaction. Returns: - bool: ``True`` if the Axon serve registration is successful, False otherwise. + bool: `True` if the Axon serve registration is successful, False otherwise. By registering an Axon, the neuron becomes an active part of the network's distributed computing infrastructure, - contributing to the collective intelligence of Bittensor. + contributing to the collective intelligence of Bittensor. """ return await serve_axon_extrinsic( subtensor=self, @@ -4029,6 +5875,45 @@

    Source code for bittensor.core.async_subtensor

    wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, certificate=certificate, + period=period, + )

    + + +
    +[docs] + async def start_call( + self, + wallet: "Wallet", + netuid: int, + wait_for_inclusion: bool = True, + wait_for_finalization: bool = False, + period: Optional[int] = None, + ) -> tuple[bool, str]: + """ + Submits a start_call extrinsic to the blockchain, to trigger the start call process for a subnet (used to start + a new subnet's emission mechanism). + + Arguments: + wallet: The wallet used to sign the extrinsic (must be unlocked). + netuid: The UID of the target subnet for which the call is being initiated. + wait_for_inclusion: Whether to wait for the extrinsic to be included in a block. Defaults to `True`. + wait_for_finalization: Whether to wait for finalization of the extrinsic. Defaults to `False`. + period: The number of blocks during which the transaction will remain valid after it's submitted. If the + transaction is not included in a block within that number of blocks, it will expire and be rejected. You + can think of it as an expiration date for the transaction. + + Returns: + Tuple[bool, str]: + - True and a success message if the extrinsic is successfully submitted or processed. + - False and an error message if the submission fails or the wallet cannot be unlocked. + """ + return await start_call_extrinsic( + subtensor=self, + wallet=wallet, + netuid=netuid, + wait_for_inclusion=wait_for_inclusion, + wait_for_finalization=wait_for_finalization, + period=period, )
    @@ -4043,22 +5928,44 @@

    Source code for bittensor.core.async_subtensor

    amount: Balance, wait_for_inclusion: bool = True, wait_for_finalization: bool = False, + safe_staking: bool = False, + allow_partial_stake: bool = False, + rate_tolerance: float = 0.005, + period: Optional[int] = None, ) -> bool: """ Moves stake between subnets while keeping the same coldkey-hotkey pair ownership. Like subnet hopping - same owner, same hotkey, just changing which subnet the stake is in. - Args: - wallet (bittensor.wallet): The wallet to swap stake from. - hotkey_ss58 (str): The SS58 address of the hotkey whose stake is being swapped. - origin_netuid (int): The netuid from which stake is removed. - destination_netuid (int): The netuid to which stake is added. - amount (Union[Balance, float]): The amount to swap. - wait_for_inclusion (bool): Waits for the transaction to be included in a block. - wait_for_finalization (bool): Waits for the transaction to be finalized on the blockchain. + Arguments: + wallet: The wallet to swap stake from. + hotkey_ss58: The SS58 address of the hotkey whose stake is being swapped. + origin_netuid: The netuid from which stake is removed. + destination_netuid: The netuid to which stake is added. + amount: The amount to swap. + wait_for_inclusion: Waits for the transaction to be included in a block. + wait_for_finalization: Waits for the transaction to be finalized on the blockchain. + safe_staking: If true, enables price safety checks to protect against fluctuating prices. The swap will only + execute if the price ratio between subnets doesn't exceed the rate tolerance. Default is False. + allow_partial_stake: If true and safe_staking is enabled, allows partial stake swaps when the full amount + would exceed the price threshold. If false, the entire swap fails if it would exceed the threshold. + Default is False. + rate_tolerance: The maximum allowed increase in the price ratio between subnets + (origin_price/destination_price). For example, 0.005 = 0.5% maximum increase. Only used when + safe_staking is True. Default is 0.005. + period: The number of blocks during which the transaction will remain valid after it's submitted. If the + transaction is not included in a block within that number of blocks, it will expire and be rejected. You + can think of it as an expiration date for the transaction. Returns: - success (bool): True if the extrinsic was successful. + success: True if the extrinsic was successful. + + The price ratio for swap_stake in safe mode is calculated as: origin_subnet_price / destination_subnet_price + When safe_staking is enabled, the swap will only execute if: + - With allow_partial_stake=False: The entire swap amount can be executed without the price ratio increasing + more than rate_tolerance. + - With allow_partial_stake=True: A partial amount will be swapped up to the point where the price ratio + would increase by rate_tolerance. """ amount = check_and_convert_to_balance(amount) return await swap_stake_extrinsic( @@ -4070,49 +5977,51 @@

    Source code for bittensor.core.async_subtensor

    amount=amount, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + safe_staking=safe_staking, + allow_partial_stake=allow_partial_stake, + rate_tolerance=rate_tolerance, + period=period, )

    -
    -[docs] - async def transfer_stake( +
    +[docs] + async def toggle_user_liquidity( self, wallet: "Wallet", - destination_coldkey_ss58: str, - hotkey_ss58: str, - origin_netuid: int, - destination_netuid: int, - amount: Balance, + netuid: int, + enable: bool, wait_for_inclusion: bool = True, wait_for_finalization: bool = False, - ) -> bool: - """ - Transfers stake from one subnet to another while changing the coldkey owner. + period: Optional[int] = None, + ) -> tuple[bool, str]: + """Allow to toggle user liquidity for specified subnet. - Args: - wallet (bittensor.wallet): The wallet to transfer stake from. - destination_coldkey_ss58 (str): The destination coldkey SS58 address. - hotkey_ss58 (str): The hotkey SS58 address associated with the stake. - origin_netuid (int): The source subnet UID. - destination_netuid (int): The destination subnet UID. - amount (Balance): Amount to transfer. - wait_for_inclusion (bool): If true, waits for inclusion before returning. - wait_for_finalization (bool): If true, waits for finalization before returning. + Arguments: + wallet: The wallet used to sign the extrinsic (must be unlocked). + netuid: The UID of the target subnet for which the call is being initiated. + enable: Boolean indicating whether to enable user liquidity. + wait_for_inclusion: Whether to wait for the extrinsic to be included in a block. Defaults to True. + wait_for_finalization: Whether to wait for finalization of the extrinsic. Defaults to False. + period: The number of blocks during which the transaction will remain valid after it's submitted. If the + transaction is not included in a block within that number of blocks, it will expire and be rejected. You + can think of it as an expiration date for the transaction. Returns: - success (bool): True if the transfer was successful. + Tuple[bool, str]: + - True and a success message if the extrinsic is successfully submitted or processed. + - False and an error message if the submission fails or the wallet cannot be unlocked. + + Note: The call can be executed successfully by the subnet owner only. """ - amount = check_and_convert_to_balance(amount) - return await transfer_stake_extrinsic( + return await toggle_user_liquidity_extrinsic( subtensor=self, wallet=wallet, - destination_coldkey_ss58=destination_coldkey_ss58, - hotkey_ss58=hotkey_ss58, - origin_netuid=origin_netuid, - destination_netuid=destination_netuid, - amount=amount, + netuid=netuid, + enable=enable, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + period=period, )
    @@ -4127,20 +6036,22 @@

    Source code for bittensor.core.async_subtensor

    wait_for_inclusion: bool = True, wait_for_finalization: bool = False, keep_alive: bool = True, + period: Optional[int] = None, ) -> bool: """ Transfer token of amount to destination. Arguments: - wallet (bittensor_wallet.Wallet): Source wallet for the transfer. - dest (str): Destination address for the transfer. - amount (float): Amount of tokens to transfer. - transfer_all (bool): Flag to transfer all tokens. Default is ``False``. - wait_for_inclusion (bool): Waits for the transaction to be included in a block. Default is ``True``. - wait_for_finalization (bool): Waits for the transaction to be finalized on the blockchain. Default is - ``False``. - keep_alive (bool): Flag to keep the connection alive. Default is ``True``. - + wallet: Source wallet for the transfer. + dest: Destination address for the transfer. + amount: Number of tokens to transfer. + transfer_all: Flag to transfer all tokens. Default is `False`. + wait_for_inclusion: Waits for the transaction to be included in a block. Defaults to `True`. + wait_for_finalization: Waits for the transaction to be finalized on the blockchain. Defaults to `False`. + keep_alive: Flag to keep the connection alive. Default is `True`. + period: The number of blocks during which the transaction will remain valid after it's submitted. If the + transaction is not included in a block within that number of blocks, it will expire and be rejected. You + can think of it as an expiration date for the transaction. Returns: `True` if the transferring was successful, otherwise `False`. """ @@ -4154,6 +6065,55 @@

    Source code for bittensor.core.async_subtensor

    wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, keep_alive=keep_alive, + period=period, + )

    + + +
    +[docs] + async def transfer_stake( + self, + wallet: "Wallet", + destination_coldkey_ss58: str, + hotkey_ss58: str, + origin_netuid: int, + destination_netuid: int, + amount: Balance, + wait_for_inclusion: bool = True, + wait_for_finalization: bool = False, + period: Optional[int] = None, + ) -> bool: + """ + Transfers stake from one subnet to another while changing the coldkey owner. + + Arguments: + wallet: The wallet to transfer stake from. + destination_coldkey_ss58: The destination coldkey SS58 address. + hotkey_ss58: The hotkey SS58 address associated with the stake. + origin_netuid: The source subnet UID. + destination_netuid: The destination subnet UID. + amount: Amount to transfer. + wait_for_inclusion: If true, waits for inclusion before returning. + wait_for_finalization: If true, waits for finalization before returning. + period: The number of blocks during which the transaction will remain valid after it's submitted. If the + transaction is not included in a block within that number of blocks, it will expire and be rejected. You + can think of it as an expiration date for the transaction. + + Returns: + success: True if the transfer was successful. + """ + amount = check_and_convert_to_balance(amount) + return await transfer_stake_extrinsic( + subtensor=self, + wallet=wallet, + destination_coldkey_ss58=destination_coldkey_ss58, + hotkey_ss58=hotkey_ss58, + origin_netuid=origin_netuid, + destination_netuid=destination_netuid, + amount=amount, + wait_for_inclusion=wait_for_inclusion, + wait_for_finalization=wait_for_finalization, + period=period, )
    @@ -4167,25 +6127,41 @@

    Source code for bittensor.core.async_subtensor

    amount: Optional[Balance] = None, wait_for_inclusion: bool = True, wait_for_finalization: bool = False, + safe_staking: bool = False, + allow_partial_stake: bool = False, + rate_tolerance: float = 0.005, + period: Optional[int] = None, + unstake_all: bool = False, ) -> bool: """ Removes a specified amount of stake from a single hotkey account. This function is critical for adjusting - individual neuron stakes within the Bittensor network. + individual neuron stakes within the Bittensor network. - Args: - wallet (bittensor_wallet.wallet): The wallet associated with the neuron from which the stake is being + Arguments: + wallet: The wallet associated with the neuron from which the stake is being removed. - hotkey_ss58 (Optional[str]): The ``SS58`` address of the hotkey account to unstake from. - netuid (Optional[int]): Subnet unique ID. - amount (Balance): The amount of TAO to unstake. If not specified, unstakes all. - wait_for_inclusion (bool): Waits for the transaction to be included in a block. - wait_for_finalization (bool): Waits for the transaction to be finalized on the blockchain. + hotkey_ss58: The `SS58` address of the hotkey account to unstake from. + netuid: The unique identifier of the subnet. + amount: The amount of alpha to unstake. If not specified, unstakes all. + wait_for_inclusion: Waits for the transaction to be included in a block. Defaults to `True`. + wait_for_finalization: Waits for the transaction to be finalized on the blockchain. Defaults to `False`. + safe_staking: If true, enables price safety checks to protect against fluctuating prices. The unstake will + only execute if the price change doesn't exceed the rate tolerance. Default is False. + allow_partial_stake: If true and safe_staking is enabled, allows partial unstaking when + the full amount would exceed the price threshold. If false, the entire unstake fails if it would exceed + the threshold. Default is False. + rate_tolerance: The maximum allowed price change ratio when unstaking. For example, 0.005 = 0.5% maximum + price decrease. Only used when safe_staking is True. Default is 0.005. + period: The number of blocks during which the transaction will remain valid after it's submitted. If the + transaction is not included in a block within that number of blocks, it will expire and be rejected. You + can think of it as an expiration date for the transaction. + unstake_all: If `True`, unstakes all tokens and `amount` is ignored. Default is `False` Returns: - bool: ``True`` if the unstaking process is successful, False otherwise. + bool: `True` if the unstaking process is successful, False otherwise. This function supports flexible stake management, allowing neurons to adjust their network participation and - potential reward accruals. + potential reward accruals. """ amount = check_and_convert_to_balance(amount) return await unstake_extrinsic( @@ -4196,6 +6172,98 @@

    Source code for bittensor.core.async_subtensor

    amount=amount, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + safe_staking=safe_staking, + allow_partial_stake=allow_partial_stake, + rate_tolerance=rate_tolerance, + period=period, + unstake_all=unstake_all, + )

    + + +
    +[docs] + async def unstake_all( + self, + wallet: "Wallet", + hotkey: str, + netuid: int, + rate_tolerance: Optional[float] = 0.005, + wait_for_inclusion: bool = True, + wait_for_finalization: bool = False, + period: Optional[int] = None, + ) -> tuple[bool, str]: + """Unstakes all TAO/Alpha associated with a hotkey from the specified subnets on the Bittensor network. + + Arguments: + wallet: The wallet of the stake owner. + hotkey: The SS58 address of the hotkey to unstake from. + netuid: The unique identifier of the subnet. + rate_tolerance: The maximum allowed price change ratio when unstaking. For example, 0.005 = 0.5% maximum + price decrease. If not passed (None), then unstaking goes without price limit. Default is 0.005. + wait_for_inclusion: Waits for the transaction to be included in a block. Default is `True`. + wait_for_finalization: Waits for the transaction to be finalized on the blockchain. Default is `False`. + period: The number of blocks during which the transaction will remain valid after it's submitted. If the + transaction is not included in a block within that number of blocks, it will expire and be rejected. You + can think of it as an expiration date for the transaction. Default is `None`. + + Returns: + tuple[bool, str]: + A tuple containing: + - `True` and a success message if the unstake operation succeeded; + - `False` and an error message otherwise. + + Example: + # If you would like to unstake all stakes in all subnets safely, use default `rate_tolerance` or pass your + value: + import bittensor as bt + + subtensor = bt.AsyncSubtensor() + wallet = bt.Wallet("my_wallet") + netuid = 14 + hotkey = "5%SOME_HOTKEY_WHERE_IS_YOUR_STAKE_NOW%" + + wallet_stakes = await subtensor.get_stake_info_for_coldkey(coldkey_ss58=wallet.coldkey.ss58_address) + + for stake in wallet_stakes: + result = await subtensor.unstake_all( + wallet=wallet, + hotkey_ss58=stake.hotkey_ss58, + netuid=stake.netuid, + ) + print(result) + + # If you would like to unstake all stakes in all subnets unsafely, use `rate_tolerance=None`: + import bittensor as bt + + subtensor = bt.AsyncSubtensor() + wallet = bt.Wallet("my_wallet") + netuid = 14 + hotkey = "5%SOME_HOTKEY_WHERE_IS_YOUR_STAKE_NOW%" + + wallet_stakes = await subtensor.get_stake_info_for_coldkey(coldkey_ss58=wallet.coldkey.ss58_address) + + for stake in wallet_stakes: + result = await subtensor.unstake_all( + wallet=wallet, + hotkey_ss58=stake.hotkey_ss58, + netuid=stake.netuid, + rate_tolerance=None, + ) + print(result) + """ + if netuid != 0: + logging.debug( + f"Unstaking without Alpha price control from subnet [blue]#{netuid}[/blue]." + ) + return await unstake_all_extrinsic( + subtensor=self, + wallet=wallet, + hotkey=hotkey, + netuid=netuid, + rate_tolerance=rate_tolerance, + wait_for_inclusion=wait_for_inclusion, + wait_for_finalization=wait_for_finalization, + period=period, )
    @@ -4209,26 +6277,30 @@

    Source code for bittensor.core.async_subtensor

    amounts: Optional[list[Balance]] = None, wait_for_inclusion: bool = True, wait_for_finalization: bool = False, + period: Optional[int] = None, + unstake_all: bool = False, ) -> bool: """ Performs batch unstaking from multiple hotkey accounts, allowing a neuron to reduce its staked amounts - efficiently. This function is useful for managing the distribution of stakes across multiple neurons. + efficiently. This function is useful for managing the distribution of stakes across multiple neurons. - Args: - wallet (bittensor_wallet.Wallet): The wallet linked to the coldkey from which the stakes are being - withdrawn. - hotkey_ss58s (List[str]): A list of hotkey ``SS58`` addresses to unstake from. - netuids (list[int]): Subnets unique IDs. - amounts (List[Union[Balance, float]]): The amounts of TAO to unstake from each hotkey. If not provided, - unstakes all available stakes. - wait_for_inclusion (bool): Waits for the transaction to be included in a block. - wait_for_finalization (bool): Waits for the transaction to be finalized on the blockchain. + Arguments: + wallet: The wallet linked to the coldkey from which the stakes are being withdrawn. + hotkey_ss58s: A list of hotkey `SS58` addresses to unstake from. + netuids: Subnets unique IDs. + amounts: The amounts of TAO to unstake from each hotkey. If not provided, unstakes all. + wait_for_inclusion: Waits for the transaction to be included in a block. + wait_for_finalization: Waits for the transaction to be finalized on the blockchain. + period: The number of blocks during which the transaction will remain valid after it's submitted. If the + transaction is not included in a block within that number of blocks, it will expire and be rejected. You + can think of it as an expiration date for the transaction. + unstake_all: If true, unstakes all tokens. Default is `False`. If `True` amounts are ignored. Returns: - bool: ``True`` if the batch unstaking is successful, False otherwise. + bool: `True` if the batch unstaking is successful, False otherwise. This function allows for strategic reallocation or withdrawal of stakes, aligning with the dynamic stake - management aspect of the Bittensor network. + management aspect of the Bittensor network. """ return await unstake_multiple_extrinsic( subtensor=self, @@ -4238,6 +6310,8 @@

    Source code for bittensor.core.async_subtensor

    amounts=amounts, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + period=period, + unstake_all=unstake_all, )

    @@ -4251,9 +6325,8 @@

    Source code for bittensor.core.async_subtensor

    _mock: bool = False, log_verbose: bool = False, ) -> "AsyncSubtensor": - """ - Factory method to create an initialized AsyncSubtensor. Mainly useful for when you don't want to run - `await subtensor.initialize()` after instantiation. + """Factory method to create an initialized AsyncSubtensor. + Mainly useful for when you don't want to run `await subtensor.initialize()` after instantiation. """ sub = AsyncSubtensor( network=network, config=config, _mock=_mock, log_verbose=log_verbose diff --git a/static/python-api/html/_modules/bittensor/core/axon.html b/static/python-api/html/_modules/bittensor/core/axon.html index fb030b3ec8..549fcec444 100644 --- a/static/python-api/html/_modules/bittensor/core/axon.html +++ b/static/python-api/html/_modules/bittensor/core/axon.html @@ -160,25 +160,28 @@

  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -739,7 +742,11 @@

    Source code for bittensor.core.axon

             self.app = FastAPI()
             log_level = "trace" if logging.__trace_on__ else "critical"
             self.fast_config = uvicorn.Config(
    -            self.app, host="0.0.0.0", port=self._config.axon.port, log_level=log_level
    +            self.app,
    +            host="0.0.0.0",
    +            log_level=log_level,
    +            loop="none",
    +            port=self._config.axon.port,
             )
             self.fast_server = FastAPIThreadedServer(config=self.fast_config)
             self.router = APIRouter()
    @@ -858,9 +865,9 @@ 

    Source code for bittensor.core.axon

                 )
     
             param_class = first_param.annotation
    -        assert issubclass(
    -            param_class, Synapse
    -        ), "The first argument of forward_fn must inherit from bittensor.Synapse"
    +        assert issubclass(param_class, Synapse), (
    +            "The first argument of forward_fn must inherit from bittensor.Synapse"
    +        )
             request_name = param_class.__name__
     
             async def endpoint(*args, **kwargs):
    @@ -934,19 +941,19 @@ 

    Source code for bittensor.core.axon

                 blacklist_sig = Signature(
                     expected_params, return_annotation=Tuple[bool, str]
                 )
    -            assert (
    -                signature(blacklist_fn) == blacklist_sig
    -            ), f"The blacklist_fn function must have the signature: blacklist( synapse: {request_name} ) -> tuple[bool, str]"
    +            assert signature(blacklist_fn) == blacklist_sig, (
    +                f"The blacklist_fn function must have the signature: blacklist( synapse: {request_name} ) -> tuple[bool, str]"
    +            )
             if priority_fn:
                 priority_sig = Signature(expected_params, return_annotation=float)
    -            assert (
    -                signature(priority_fn) == priority_sig
    -            ), f"The priority_fn function must have the signature: priority( synapse: {request_name} ) -> float"
    +            assert signature(priority_fn) == priority_sig, (
    +                f"The priority_fn function must have the signature: priority( synapse: {request_name} ) -> float"
    +            )
             if verify_fn:
                 verify_sig = Signature(expected_params, return_annotation=None)
    -            assert (
    -                signature(verify_fn) == verify_sig
    -            ), f"The verify_fn function must have the signature: verify( synapse: {request_name} ) -> None"
    +            assert signature(verify_fn) == verify_sig, (
    +                f"The verify_fn function must have the signature: verify( synapse: {request_name} ) -> None"
    +            )
     
             # Store functions in appropriate attribute dictionaries
             self.forward_class_types[request_name] = param_class
    @@ -1116,9 +1123,9 @@ 

    Source code for bittensor.core.axon

             Raises:
                 AssertionError: If the axon or external ports are not in range [1024, 65535]
             """
    -        assert (
    -            1024 < config.axon.port < 65535
    -        ), "Axon port must be in range [1024, 65535]"
    +        assert 1024 < config.axon.port < 65535, (
    +            "Axon port must be in range [1024, 65535]"
    +        )
     
             assert config.axon.external_port is None or (
                 1024 < config.axon.external_port < 65535
    @@ -1360,7 +1367,9 @@ 

    Source code for bittensor.core.axon

                     ):
                         raise Exception("Nonce is too old, a newer one was last processed")
     
    -            if not keypair.verify(message, synapse.dendrite.signature):
    +            if synapse.dendrite.signature and not keypair.verify(
    +                message, synapse.dendrite.signature
    +            ):
                     raise Exception(
                         f"Signature mismatch with {message} and {synapse.dendrite.signature}"
                     )
    @@ -1664,7 +1673,7 @@ 

    Source code for bittensor.core.axon

             # Fills the local axon information into the synapse.
             synapse.axon.__dict__.update(
                 {
    -                "version": str(version_as_int),
    +                "version": int(version_as_int),
                     "uuid": str(self.axon.uuid),
                     "nonce": time.time_ns(),
                     "status_code": 100,
    @@ -1673,7 +1682,7 @@ 

    Source code for bittensor.core.axon

     
             # Fills the dendrite information into the synapse.
             synapse.dendrite.__dict__.update(
    -            {"port": str(request.client.port), "ip": str(request.client.host)}  # type: ignore
    +            {"port": int(request.client.port), "ip": str(request.client.host)}  # type: ignore
             )
     
             # Signs the synapse from the axon side using the wallet hotkey.
    diff --git a/static/python-api/html/_modules/bittensor/core/chain_data/axon_info.html b/static/python-api/html/_modules/bittensor/core/chain_data/axon_info.html
    index 4ec25310ea..a276f5bec1 100644
    --- a/static/python-api/html/_modules/bittensor/core/chain_data/axon_info.html
    +++ b/static/python-api/html/_modules/bittensor/core/chain_data/axon_info.html
    @@ -160,25 +160,28 @@
     
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    diff --git a/static/python-api/html/_modules/bittensor/core/chain_data/chain_identity.html b/static/python-api/html/_modules/bittensor/core/chain_data/chain_identity.html index c38c38c297..36b39e8216 100644 --- a/static/python-api/html/_modules/bittensor/core/chain_data/chain_identity.html +++ b/static/python-api/html/_modules/bittensor/core/chain_data/chain_identity.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    diff --git a/static/python-api/html/_modules/bittensor/core/chain_data/delegate_info.html b/static/python-api/html/_modules/bittensor/core/chain_data/delegate_info.html index dae86b3a39..bca9b26c6e 100644 --- a/static/python-api/html/_modules/bittensor/core/chain_data/delegate_info.html +++ b/static/python-api/html/_modules/bittensor/core/chain_data/delegate_info.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -335,7 +338,7 @@

    Source code for bittensor.core.chain_data.delegate_info

     from dataclasses import dataclass
    -from typing import Any, Optional
    +from typing import Optional
     
     from bittensor.core.chain_data.info_base import InfoBase
     from bittensor.core.chain_data.utils import decode_account_id
    @@ -343,30 +346,23 @@ 

    Source code for bittensor.core.chain_data.delegate_info

    from bittensor.utils.balance import Balance -
    -[docs] +
    +[docs] @dataclass -class DelegateInfo(InfoBase): - """ - Dataclass for delegate information. For a lighter version of this class, see ``DelegateInfoLite``. +class DelegateInfoBase(InfoBase): + """Base class containing common delegate information fields. - Args: - hotkey_ss58 (str): Hotkey of the delegate for which the information is being fetched. - total_stake (int): Total stake of the delegate. - nominators (list[tuple[str, int]]): List of nominators of the delegate and their stake. + Attributes: + hotkey_ss58 (str): Hotkey of delegate. + owner_ss58 (str): Coldkey of owner. take (float): Take of the delegate as a percentage. - owner_ss58 (str): Coldkey of the owner. - registrations (list[int]): List of subnets that the delegate is registered on. validator_permits (list[int]): List of subnets that the delegate is allowed to validate on. - return_per_1000 (int): Return per 1000 TAO, for the delegate over a day. - total_daily_return (int): Total daily return of the delegate. + registrations (list[int]): List of subnets that the delegate is registered on. + return_per_1000 (Balance): Return per 1000 tao of the delegate over a day. + total_daily_return (Balance): Total daily return of the delegate. """ hotkey_ss58: str # Hotkey of delegate - total_stake: Balance # Total stake of the delegate - nominators: list[ - tuple[str, Balance] - ] # List of nominators of the delegate and their stake owner_ss58: str # Coldkey of owner take: float # Take of the delegate as a percentage validator_permits: list[ @@ -374,37 +370,98 @@

    Source code for bittensor.core.chain_data.delegate_info

    ] # List of subnets that the delegate is allowed to validate on registrations: list[int] # list of subnets that the delegate is registered on return_per_1000: Balance # Return per 1000 tao of the delegate over a day - total_daily_return: Balance # Total daily return of the delegate + total_daily_return: Balance # Total daily return of the delegate
    + + + +
    +[docs] +@dataclass +class DelegateInfo(DelegateInfoBase): + """ + Dataclass for delegate information. + + Additional Attributes: + total_stake (dict[int, Balance]): Total stake of the delegate mapped by netuid. + nominators (dict[str, dict[int, Balance]]): Mapping of nominator SS58 addresses to their stakes per subnet. + """ + + total_stake: dict[int, Balance] # Total stake of the delegate by netuid and stake + nominators: dict[ + str, dict[int, Balance] + ] # Mapping of nominator addresses to their stakes per subnet @classmethod def _from_dict(cls, decoded: dict) -> Optional["DelegateInfo"]: - """Returns a DelegateInfo object from decoded chain data.""" - nominators = [ - (decode_account_id(x), Balance.from_rao(y)) - for x, y in decoded["nominators"] - ] - total_stake = sum((x[1] for x in nominators)) if nominators else Balance(0) - - return DelegateInfo( - hotkey_ss58=decode_account_id(decoded["delegate_ss58"]), + hotkey = decode_account_id(decoded.get("delegate_ss58")) + owner = decode_account_id(decoded.get("owner_ss58")) + + nominators = {} + total_stake_by_netuid = {} + + for raw_nominator, raw_stakes in decoded.get("nominators", []): + nominator_ss58 = decode_account_id(raw_nominator) + stakes = { + int(netuid): Balance.from_rao(stake_amt).set_unit(int(netuid)) + for (netuid, stake_amt) in raw_stakes + } + nominators[nominator_ss58] = stakes + + for netuid, stake in stakes.items(): + if netuid not in total_stake_by_netuid: + total_stake_by_netuid[netuid] = Balance(0).set_unit(netuid) + total_stake_by_netuid[netuid] += stake + + return cls( + hotkey_ss58=hotkey, + total_stake=total_stake_by_netuid, nominators=nominators, - owner_ss58=decode_account_id(decoded["owner_ss58"]), - registrations=decoded["registrations"], - return_per_1000=Balance.from_rao(decoded["return_per_1000"]), - take=u16_normalized_float(decoded["take"]), - total_daily_return=Balance.from_rao(decoded["total_daily_return"]), - total_stake=total_stake, - validator_permits=decoded["validator_permits"], - ) + owner_ss58=owner, + take=u16_normalized_float(decoded.get("take")), + validator_permits=list(decoded.get("validator_permits", [])), + registrations=list(decoded.get("registrations", [])), + return_per_1000=Balance.from_rao(decoded.get("return_per_1000")), + total_daily_return=Balance.from_rao(decoded.get("total_daily_return")), + )
    + + + +
    +[docs] +@dataclass +class DelegatedInfo(DelegateInfoBase): + """ + Dataclass for delegated information. This class represents a delegate's information + specific to a particular subnet. + + Additional Attributes: + netuid (int): Network ID of the subnet. + stake (Balance): Stake amount for this specific delegation. + """ + + netuid: int + stake: Balance @classmethod - def delegated_list_from_dicts( - cls, delegates: list[Any] - ) -> list[tuple["DelegateInfo", Balance]]: - return [ - (delegate, Balance.from_rao(int(balance)) if str(balance).isdigit() else Balance.from_tao(float(balance))) - for delegate, balance in delegate_dict - ]
    + def _from_dict( + cls, decoded: tuple[dict, tuple[int, int]] + ) -> Optional["DelegatedInfo"]: + delegate_info, (netuid, stake) = decoded + hotkey = decode_account_id(delegate_info.get("delegate_ss58")) + owner = decode_account_id(delegate_info.get("owner_ss58")) + return cls( + hotkey_ss58=hotkey, + owner_ss58=owner, + take=u16_normalized_float(delegate_info.get("take")), + validator_permits=list(delegate_info.get("validator_permits", [])), + registrations=list(delegate_info.get("registrations", [])), + return_per_1000=Balance.from_rao(delegate_info.get("return_per_1000")), + total_daily_return=Balance.from_rao( + delegate_info.get("total_daily_return") + ), + netuid=int(netuid), + stake=Balance.from_rao(int(stake)).set_unit(int(netuid)), + )
    diff --git a/static/python-api/html/_modules/bittensor/core/chain_data/delegate_info_lite.html b/static/python-api/html/_modules/bittensor/core/chain_data/delegate_info_lite.html index b8932b62c8..fddc22bb0d 100644 --- a/static/python-api/html/_modules/bittensor/core/chain_data/delegate_info_lite.html +++ b/static/python-api/html/_modules/bittensor/core/chain_data/delegate_info_lite.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    diff --git a/static/python-api/html/_modules/bittensor/core/chain_data/dynamic_info.html b/static/python-api/html/_modules/bittensor/core/chain_data/dynamic_info.html index 3e1848d5be..b6043dbceb 100644 --- a/static/python-api/html/_modules/bittensor/core/chain_data/dynamic_info.html +++ b/static/python-api/html/_modules/bittensor/core/chain_data/dynamic_info.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -365,7 +368,7 @@

    Source code for bittensor.core.chain_data.dynamic_info

    alpha_in: Balance alpha_out: Balance tao_in: Balance - price: Balance + price: Optional[Balance] k: float is_dynamic: bool alpha_out_emission: Balance @@ -412,29 +415,30 @@

    Source code for bittensor.core.chain_data.dynamic_info

    ).set_unit(0) subnet_volume = Balance.from_rao(decoded["subnet_volume"]).set_unit(netuid) - price = ( - Balance.from_tao(1.0) - if netuid == 0 - else Balance.from_tao(tao_in.tao / alpha_in.tao) - if alpha_in.tao > 0 - else Balance.from_tao(1) - ) # Root always has 1-1 price - - if decoded.get("subnet_identity"): + + if subnet_identity := decoded.get("subnet_identity"): + # we need to check it for keep backwards compatibility + logo_bytes = subnet_identity.get("logo_url") + si_logo_url = bytes(logo_bytes).decode() if logo_bytes else None + subnet_identity = SubnetIdentity( - subnet_name=bytes(decoded["subnet_identity"]["subnet_name"]).decode(), - github_repo=bytes(decoded["subnet_identity"]["github_repo"]).decode(), - subnet_contact=bytes( - decoded["subnet_identity"]["subnet_contact"] - ).decode(), - subnet_url=bytes(decoded["subnet_identity"]["subnet_url"]).decode(), - discord=bytes(decoded["subnet_identity"]["discord"]).decode(), - description=bytes(decoded["subnet_identity"]["description"]).decode(), - additional=bytes(decoded["subnet_identity"]["additional"]).decode(), + subnet_name=bytes(subnet_identity["subnet_name"]).decode(), + github_repo=bytes(subnet_identity["github_repo"]).decode(), + subnet_contact=bytes(subnet_identity["subnet_contact"]).decode(), + subnet_url=bytes(subnet_identity["subnet_url"]).decode(), + logo_url=si_logo_url, + discord=bytes(subnet_identity["discord"]).decode(), + description=bytes(subnet_identity["description"]).decode(), + additional=bytes(subnet_identity["additional"]).decode(), ) else: subnet_identity = None + price = decoded.get("price", None) + + if price and not isinstance(price, Balance): + raise ValueError(f"price must be a Balance object, got {type(price)}.") + return cls( netuid=netuid, owner_hotkey=owner_hotkey, @@ -450,7 +454,11 @@

    Source code for bittensor.core.chain_data.dynamic_info

    tao_in=tao_in, k=tao_in.rao * alpha_in.rao, is_dynamic=is_dynamic, - price=price, + price=( + price + if price is not None + else Balance.from_tao(tao_in.tao / alpha_in.tao).set_unit(netuid) + ), alpha_out_emission=alpha_out_emission, alpha_in_emission=alpha_in_emission, tao_in_emission=tao_in_emission, diff --git a/static/python-api/html/_modules/bittensor/core/chain_data/info_base.html b/static/python-api/html/_modules/bittensor/core/chain_data/info_base.html index 90604d376b..ea53d48ecc 100644 --- a/static/python-api/html/_modules/bittensor/core/chain_data/info_base.html +++ b/static/python-api/html/_modules/bittensor/core/chain_data/info_base.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -339,6 +342,8 @@

    Source code for bittensor.core.chain_data.info_base

    from bittensor.core.errors import SubstrateRequestException +# NOTE: once Python 3.10+ is required, we can use `typing.Self` instead of this for better ide integration and type hinting. +# This current generic does not play so nice with the inherited type hinting. T = TypeVar("T", bound="InfoBase") diff --git a/static/python-api/html/_modules/bittensor/core/chain_data/ip_info.html b/static/python-api/html/_modules/bittensor/core/chain_data/ip_info.html index 8cdefcfc40..59b01ecb00 100644 --- a/static/python-api/html/_modules/bittensor/core/chain_data/ip_info.html +++ b/static/python-api/html/_modules/bittensor/core/chain_data/ip_info.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    diff --git a/static/python-api/html/_modules/bittensor/core/chain_data/metagraph_info.html b/static/python-api/html/_modules/bittensor/core/chain_data/metagraph_info.html index 7c85ed8b13..9d4ad73509 100644 --- a/static/python-api/html/_modules/bittensor/core/chain_data/metagraph_info.html +++ b/static/python-api/html/_modules/bittensor/core/chain_data/metagraph_info.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -334,9 +337,12 @@

    Source code for bittensor.core.chain_data.metagraph_info

    -from dataclasses import dataclass
    +from enum import Enum
    +
    +from dataclasses import dataclass
     from typing import Optional, Union
     
    +from bittensor.core import settings
     from bittensor.core.chain_data.axon_info import AxonInfo
     from bittensor.core.chain_data.chain_identity import ChainIdentity
     from bittensor.core.chain_data.info_base import InfoBase
    @@ -346,9 +352,11 @@ 

    Source code for bittensor.core.chain_data.metagraph_info

    from bittensor.utils.balance import Balance, fixed_to_float -# to balance with unit (just shortcut) -def _tbwu(val: int, netuid: Optional[int] = 0) -> Balance: +# to balance with unit (shortcut) +def _tbwu(val: Optional[int], netuid: Optional[int] = 0) -> Optional[Balance]: """Returns a Balance object from a value and unit.""" + if val is None: + return None return Balance.from_rao(val, netuid) @@ -359,10 +367,12 @@

    Source code for bittensor.core.chain_data.metagraph_info

    [docs] -def process_nested(data: Union[tuple, dict], chr_transform): +def process_nested( + data: Union[tuple, dict], chr_transform +) -> Optional[Union[list, dict]]: """Processes nested data structures by applying a transformation function to their elements.""" if isinstance(data, (list, tuple)): - if len(data) > 0 and isinstance(data[0], dict): + if len(data) > 0: return [ {k: chr_transform(v) for k, v in item.items()} if item is not None @@ -371,7 +381,8 @@

    Source code for bittensor.core.chain_data.metagraph_info

    ] return {} elif isinstance(data, dict): - return {k: chr_transform(v) for k, v in data.items()}
    + return {k: chr_transform(v) for k, v in data.items()} + return None
    @@ -389,8 +400,8 @@

    Source code for bittensor.core.chain_data.metagraph_info

    network_registered_at: int # Keys for owner. - owner_hotkey: str # hotkey - owner_coldkey: str # coldkey + owner_hotkey: Optional[str] # hotkey + owner_coldkey: Optional[str] # coldkey # Tempo terms. block: int # block at call. @@ -479,6 +490,9 @@

    Source code for bittensor.core.chain_data.metagraph_info

    tuple[str, Balance] ] # List of dividend payout in alpha via subnet. + # List of validators + validators: list[str] + @classmethod def _from_dict(cls, decoded: dict) -> "MetagraphInfo": """Returns a MetagraphInfo object from decoded chain data.""" @@ -486,9 +500,20 @@

    Source code for bittensor.core.chain_data.metagraph_info

    _netuid = decoded["netuid"] # Name and symbol - decoded.update({"name": bytes(decoded.get("name")).decode()}) - decoded.update({"symbol": bytes(decoded.get("symbol")).decode()}) - for key in ["identities", "identity"]: + if name := decoded.get("name"): + decoded.update({"name": bytes(name).decode()}) + + if symbol := decoded.get("symbol"): + decoded.update({"symbol": bytes(symbol).decode()}) + + ii_list = [] + if decoded.get("identity") is not None: + ii_list.append("identity") + + if decoded.get("identities") is not None: + ii_list.append("identities") + + for key in ii_list: raw_data = decoded.get(key) processed = process_nested(raw_data, _chr_str) decoded.update({key: processed}) @@ -502,8 +527,16 @@

    Source code for bittensor.core.chain_data.metagraph_info

    identity=decoded["identity"], network_registered_at=decoded["network_registered_at"], # Keys for owner. - owner_hotkey=decoded["owner_hotkey"], - owner_coldkey=decoded["owner_coldkey"], + owner_hotkey=( + decode_account_id(decoded["owner_hotkey"][0]) + if decoded.get("owner_hotkey") is not None + else None + ), + owner_coldkey=( + decode_account_id(decoded["owner_coldkey"][0]) + if decoded.get("owner_coldkey") is not None + else None + ), # Tempo terms. block=decoded["block"], tempo=decoded["tempo"], @@ -520,15 +553,25 @@

    Source code for bittensor.core.chain_data.metagraph_info

    pending_alpha_emission=_tbwu(decoded["pending_alpha_emission"], _netuid), pending_root_emission=_tbwu(decoded["pending_root_emission"]), subnet_volume=_tbwu(decoded["subnet_volume"], _netuid), - moving_price=Balance.from_tao( - fixed_to_float(decoded.get("moving_price"), 32) + moving_price=( + Balance.from_tao(fixed_to_float(decoded.get("moving_price"), 32)) + if decoded.get("moving_price") is not None + else None ), # Hparams for epoch rho=decoded["rho"], kappa=decoded["kappa"], # Validator params - min_allowed_weights=u16tf(decoded["min_allowed_weights"]), - max_weights_limit=u16tf(decoded["max_weights_limit"]), + min_allowed_weights=( + u16tf(decoded["min_allowed_weights"]) + if decoded.get("min_allowed_weights") is not None + else None + ), + max_weights_limit=( + u16tf(decoded["max_weights_limit"]) + if decoded["max_weights_limit"] is not None + else None + ), weights_version=decoded["weights_version"], weights_rate_limit=decoded["weights_rate_limit"], activity_cutoff=decoded["activity_cutoff"], @@ -537,15 +580,31 @@

    Source code for bittensor.core.chain_data.metagraph_info

    num_uids=decoded["num_uids"], max_uids=decoded["max_uids"], burn=_tbwu(decoded["burn"]), - difficulty=u64tf(decoded["difficulty"]), + difficulty=( + u64tf(decoded["difficulty"]) + if decoded["difficulty"] is not None + else None + ), registration_allowed=decoded["registration_allowed"], pow_registration_allowed=decoded["pow_registration_allowed"], immunity_period=decoded["immunity_period"], - min_difficulty=u64tf(decoded["min_difficulty"]), - max_difficulty=u64tf(decoded["max_difficulty"]), + min_difficulty=( + u64tf(decoded["min_difficulty"]) + if decoded["min_difficulty"] is not None + else None + ), + max_difficulty=( + u64tf(decoded["max_difficulty"]) + if decoded["max_difficulty"] is not None + else None + ), min_burn=_tbwu(decoded["min_burn"]), max_burn=_tbwu(decoded["max_burn"]), - adjustment_alpha=u64tf(decoded["adjustment_alpha"]), + adjustment_alpha=( + u64tf(decoded["adjustment_alpha"]) + if decoded["adjustment_alpha"] is not None + else None + ), adjustment_interval=decoded["adjustment_interval"], target_regs_per_interval=decoded["target_regs_per_interval"], max_regs_per_block=decoded["max_regs_per_block"], @@ -555,37 +614,111 @@

    Source code for bittensor.core.chain_data.metagraph_info

    commit_reveal_period=decoded["commit_reveal_period"], # Bonds liquid_alpha_enabled=decoded["liquid_alpha_enabled"], - alpha_high=u16tf(decoded["alpha_high"]), - alpha_low=u16tf(decoded["alpha_low"]), - bonds_moving_avg=u64tf(decoded["bonds_moving_avg"]), + alpha_high=( + u16tf(decoded["alpha_high"]) + if decoded["alpha_high"] is not None + else None + ), + alpha_low=( + u16tf(decoded["alpha_low"]) + if decoded["alpha_low"] is not None + else None + ), + bonds_moving_avg=( + u64tf(decoded["bonds_moving_avg"]) + if decoded["bonds_moving_avg"] is not None + else None + ), # Metagraph info. - hotkeys=[decode_account_id(ck) for ck in decoded.get("hotkeys", [])], - coldkeys=[decode_account_id(hk) for hk in decoded.get("coldkeys", [])], + hotkeys=( + [decode_account_id(ck) for ck in decoded.get("hotkeys", [])] + if decoded.get("hotkeys") is not None + else None + ), + coldkeys=( + [decode_account_id(hk) for hk in decoded.get("coldkeys", [])] + if decoded.get("coldkeys") is not None + else None + ), identities=decoded["identities"], axons=decoded.get("axons", []), active=decoded["active"], validator_permit=decoded["validator_permit"], - pruning_score=[u16tf(ps) for ps in decoded.get("pruning_score", [])], + pruning_score=( + [u16tf(ps) for ps in decoded.get("pruning_score", [])] + if decoded.get("pruning_score") is not None + else None + ), last_update=decoded["last_update"], - emission=[_tbwu(em, _netuid) for em in decoded.get("emission", [])], - dividends=[u16tf(dv) for dv in decoded.get("dividends", [])], - incentives=[u16tf(ic) for ic in decoded.get("incentives", [])], - consensus=[u16tf(cs) for cs in decoded.get("consensus", [])], - trust=[u16tf(tr) for tr in decoded.get("trust", [])], - rank=[u16tf(rk) for rk in decoded.get("rank", [])], + emission=( + [_tbwu(em, _netuid) for em in decoded.get("emission", [])] + if decoded.get("emission") is not None + else None + ), + dividends=( + [u16tf(dv) for dv in decoded.get("dividends", [])] + if decoded.get("dividends") is not None + else None + ), + incentives=( + [u16tf(ic) for ic in decoded.get("incentives", [])] + if decoded.get("incentives") is not None + else None + ), + consensus=( + [u16tf(cs) for cs in decoded.get("consensus", [])] + if decoded.get("consensus") is not None + else None + ), + trust=( + [u16tf(tr) for tr in decoded.get("trust", [])] + if decoded.get("trust") is not None + else None + ), + rank=( + [u16tf(rk) for rk in decoded.get("rank", [])] + if decoded.get("rank") is not None + else None + ), block_at_registration=decoded["block_at_registration"], - alpha_stake=[_tbwu(ast, _netuid) for ast in decoded["alpha_stake"]], - tao_stake=[_tbwu(ts) for ts in decoded["tao_stake"]], - total_stake=[_tbwu(ts, _netuid) for ts in decoded["total_stake"]], + alpha_stake=( + [_tbwu(ast, _netuid) for ast in decoded["alpha_stake"]] + if decoded.get("alpha_stake") is not None + else None + ), + tao_stake=( + [ + _tbwu(ts) * settings.ROOT_TAO_STAKE_WEIGHT + for ts in decoded["tao_stake"] + ] + if decoded.get("tao_stake") is not None + else None + ), + total_stake=( + [_tbwu(ts, _netuid) for ts in decoded["total_stake"]] + if decoded.get("total_stake") is not None + else None + ), # Dividend break down - tao_dividends_per_hotkey=[ - (decode_account_id(alpha[0]), _tbwu(alpha[1])) - for alpha in decoded["tao_dividends_per_hotkey"] - ], - alpha_dividends_per_hotkey=[ - (decode_account_id(adphk[0]), _tbwu(adphk[1], _netuid)) - for adphk in decoded["alpha_dividends_per_hotkey"] - ], + tao_dividends_per_hotkey=( + [ + (decode_account_id(alpha[0]), _tbwu(alpha[1])) + for alpha in decoded["tao_dividends_per_hotkey"] + ] + if decoded.get("tao_dividends_per_hotkey") is not None + else None + ), + alpha_dividends_per_hotkey=( + [ + (decode_account_id(adphk[0]), _tbwu(adphk[1], _netuid)) + for adphk in decoded["alpha_dividends_per_hotkey"] + ] + if decoded.get("alpha_dividends_per_hotkey") is not None + else None + ), + validators=[v for v in decoded["validators"]] + if decoded.get("validators") is not None + else None, )
    @@ -653,6 +786,92 @@

    Source code for bittensor.core.chain_data.metagraph_info

    weights_rate_limit: int weights_version: int
    + + +
    +[docs] +class SelectiveMetagraphIndex(Enum): + Netuid = 0 + Name = 1 + Symbol = 2 + Identity = 3 + NetworkRegisteredAt = 4 + OwnerHotkey = 5 + OwnerColdkey = 6 + Block = 7 + Tempo = 8 + LastStep = 9 + BlocksSinceLastStep = 10 + SubnetEmission = 11 + AlphaIn = 12 + AlphaOut = 13 + TaoIn = 14 + AlphaOutEmission = 15 + AlphaInEmission = 16 + TaoInEmission = 17 + PendingAlphaEmission = 18 + PendingRootEmission = 19 + SubnetVolume = 20 + MovingPrice = 21 + Rho = 22 + Kappa = 23 + MinAllowedWeights = 24 + MaxWeightsLimit = 25 + WeightsVersion = 26 + WeightsRateLimit = 27 + ActivityCutoff = 28 + MaxValidators = 29 + NumUids = 30 + MaxUids = 31 + Burn = 32 + Difficulty = 33 + RegistrationAllowed = 34 + PowRegistrationAllowed = 35 + ImmunityPeriod = 36 + MinDifficulty = 37 + MaxDifficulty = 38 + MinBurn = 39 + MaxBurn = 40 + AdjustmentAlpha = 41 + AdjustmentInterval = 42 + TargetRegsPerInterval = 43 + MaxRegsPerBlock = 44 + ServingRateLimit = 45 + CommitRevealWeightsEnabled = 46 + CommitRevealPeriod = 47 + LiquidAlphaEnabled = 48 + AlphaHigh = 49 + AlphaLow = 50 + BondsMovingAvg = 51 + Hotkeys = 52 + Coldkeys = 53 + Identities = 54 + Axons = 55 + Active = 56 + ValidatorPermit = 57 + PruningScore = 58 + LastUpdate = 59 + Emission = 60 + Dividends = 61 + Incentives = 62 + Consensus = 63 + Trust = 64 + Rank = 65 + BlockAtRegistration = 66 + AlphaStake = 67 + TaoStake = 68 + TotalStake = 69 + TaoDividendsPerHotkey = 70 + AlphaDividendsPerHotkey = 71 + Validators = 72 + +
    +[docs] + @staticmethod + def all_indices() -> list[int]: + return [member.value for member in SelectiveMetagraphIndex]
    +
    +
    diff --git a/static/python-api/html/_modules/bittensor/core/chain_data/neuron_info.html b/static/python-api/html/_modules/bittensor/core/chain_data/neuron_info.html index 70da10b637..a3a875c0ee 100644 --- a/static/python-api/html/_modules/bittensor/core/chain_data/neuron_info.html +++ b/static/python-api/html/_modules/bittensor/core/chain_data/neuron_info.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    diff --git a/static/python-api/html/_modules/bittensor/core/chain_data/neuron_info_lite.html b/static/python-api/html/_modules/bittensor/core/chain_data/neuron_info_lite.html index f1915aa255..1a48696d7b 100644 --- a/static/python-api/html/_modules/bittensor/core/chain_data/neuron_info_lite.html +++ b/static/python-api/html/_modules/bittensor/core/chain_data/neuron_info_lite.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    diff --git a/static/python-api/html/_modules/bittensor/core/chain_data/prometheus_info.html b/static/python-api/html/_modules/bittensor/core/chain_data/prometheus_info.html index efa3d9a30f..c5b18481e2 100644 --- a/static/python-api/html/_modules/bittensor/core/chain_data/prometheus_info.html +++ b/static/python-api/html/_modules/bittensor/core/chain_data/prometheus_info.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    diff --git a/static/python-api/html/_modules/bittensor/core/chain_data/proposal_vote_data.html b/static/python-api/html/_modules/bittensor/core/chain_data/proposal_vote_data.html index 2e5cb11742..872ddceda5 100644 --- a/static/python-api/html/_modules/bittensor/core/chain_data/proposal_vote_data.html +++ b/static/python-api/html/_modules/bittensor/core/chain_data/proposal_vote_data.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -334,30 +337,38 @@

    Source code for bittensor.core.chain_data.proposal_vote_data

    -from bittensor.core.chain_data.utils import decode_account_id
    +from dataclasses import dataclass
    +
    +from bittensor.core.chain_data.info_base import InfoBase
    +from bittensor.core.chain_data.utils import decode_account_id
     
     
    -# Senate / Proposal data
     
    [docs] -class ProposalVoteData: +@dataclass +class ProposalVoteData(InfoBase): + """ + Senate / Proposal data + """ + index: int threshold: int ayes: list[str] nays: list[str] end: int - def __init__(self, proposal_dict: dict) -> None: - self.index = proposal_dict["index"] - self.threshold = proposal_dict["threshold"] - self.ayes = self.decode_ss58_tuples(proposal_dict["ayes"]) - self.nays = self.decode_ss58_tuples(proposal_dict["nays"]) - self.end = proposal_dict["end"] - - @staticmethod - def decode_ss58_tuples(line: tuple): - """Decodes a tuple of ss58 addresses formatted as bytes tuples.""" - return [decode_account_id(line[x][0]) for x in range(len(line))]
    +
    +[docs] + @classmethod + def from_dict(cls, proposal_dict: dict) -> "ProposalVoteData": + return cls( + ayes=[decode_account_id(key) for key in proposal_dict["ayes"]], + end=proposal_dict["end"], + index=proposal_dict["index"], + nays=[decode_account_id(key) for key in proposal_dict["nays"]], + threshold=proposal_dict["threshold"], + )
    +
    diff --git a/static/python-api/html/_modules/bittensor/core/chain_data/scheduled_coldkey_swap_info.html b/static/python-api/html/_modules/bittensor/core/chain_data/scheduled_coldkey_swap_info.html index 4f9326c8b0..f8dacd51bb 100644 --- a/static/python-api/html/_modules/bittensor/core/chain_data/scheduled_coldkey_swap_info.html +++ b/static/python-api/html/_modules/bittensor/core/chain_data/scheduled_coldkey_swap_info.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    diff --git a/static/python-api/html/_modules/bittensor/core/chain_data/stake_info.html b/static/python-api/html/_modules/bittensor/core/chain_data/stake_info.html index 8c56171bac..73aa5ad176 100644 --- a/static/python-api/html/_modules/bittensor/core/chain_data/stake_info.html +++ b/static/python-api/html/_modules/bittensor/core/chain_data/stake_info.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    diff --git a/static/python-api/html/_modules/bittensor/core/chain_data/subnet_hyperparameters.html b/static/python-api/html/_modules/bittensor/core/chain_data/subnet_hyperparameters.html index a118e1f5aa..58c486e43d 100644 --- a/static/python-api/html/_modules/bittensor/core/chain_data/subnet_hyperparameters.html +++ b/static/python-api/html/_modules/bittensor/core/chain_data/subnet_hyperparameters.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -335,7 +338,7 @@

    Source code for bittensor.core.chain_data.subnet_hyperparameters

     from dataclasses import dataclass
    -
    +from bittensor.utils.balance import fixed_to_float
     from bittensor.core.chain_data.info_base import InfoBase
     
     
    @@ -374,6 +377,12 @@ 

    Source code for bittensor.core.chain_data.subnet_hyperparameters

    alpha_high (int): High value of alpha. alpha_low (int): Low value of alpha. liquid_alpha_enabled (bool): Flag indicating if liquid alpha is enabled. + alpha_sigmoid_steepness (float): + yuma_version (int): Version of yuma. + subnet_is_active (bool): Indicates if subnet is active after START CALL. + transfers_enabled (bool): Flag indicating if transfers are enabled. + bonds_reset_enabled (bool): Flag indicating if bonds are reset enabled. + user_liquidity_enabled (bool): Flag indicating if user liquidity is enabled. """ rho: int @@ -403,6 +412,12 @@

    Source code for bittensor.core.chain_data.subnet_hyperparameters

    alpha_high: int alpha_low: int liquid_alpha_enabled: bool + alpha_sigmoid_steepness: float + yuma_version: int + subnet_is_active: bool + transfers_enabled: bool + bonds_reset_enabled: bool + user_liquidity_enabled: bool @classmethod def _from_dict(cls, decoded: dict) -> "SubnetHyperparameters": @@ -413,7 +428,11 @@

    Source code for bittensor.core.chain_data.subnet_hyperparameters

    adjustment_interval=decoded["adjustment_interval"], alpha_high=decoded["alpha_high"], alpha_low=decoded["alpha_low"], + alpha_sigmoid_steepness=fixed_to_float( + decoded["alpha_sigmoid_steepness"], frac_bits=32 + ), bonds_moving_avg=decoded["bonds_moving_avg"], + bonds_reset_enabled=decoded["bonds_reset_enabled"], commit_reveal_weights_enabled=decoded["commit_reveal_weights_enabled"], commit_reveal_period=decoded["commit_reveal_period"], difficulty=decoded["difficulty"], @@ -431,10 +450,14 @@

    Source code for bittensor.core.chain_data.subnet_hyperparameters

    registration_allowed=decoded["registration_allowed"], rho=decoded["rho"], serving_rate_limit=decoded["serving_rate_limit"], + subnet_is_active=decoded["subnet_is_active"], target_regs_per_interval=decoded["target_regs_per_interval"], tempo=decoded["tempo"], + transfers_enabled=decoded["transfers_enabled"], + user_liquidity_enabled=decoded["user_liquidity_enabled"], weights_rate_limit=decoded["weights_rate_limit"], weights_version=decoded["weights_version"], + yuma_version=decoded["yuma_version"], )
    diff --git a/static/python-api/html/_modules/bittensor/core/chain_data/subnet_identity.html b/static/python-api/html/_modules/bittensor/core/chain_data/subnet_identity.html index 345b6370c3..f16b251e71 100644 --- a/static/python-api/html/_modules/bittensor/core/chain_data/subnet_identity.html +++ b/static/python-api/html/_modules/bittensor/core/chain_data/subnet_identity.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -347,6 +350,7 @@

    Source code for bittensor.core.chain_data.subnet_identity

    github_repo: str subnet_contact: str subnet_url: str + logo_url: str discord: str description: str additional: str @@ -359,6 +363,7 @@

    Source code for bittensor.core.chain_data.subnet_identity

    github_repo=decoded["github_repo"], subnet_contact=decoded["subnet_contact"], subnet_url=decoded["subnet_url"], + logo_url=decoded["logo_url"], discord=decoded["discord"], description=decoded["description"], additional=decoded["additional"], diff --git a/static/python-api/html/_modules/bittensor/core/chain_data/subnet_info.html b/static/python-api/html/_modules/bittensor/core/chain_data/subnet_info.html index bec2415972..63ec5790c5 100644 --- a/static/python-api/html/_modules/bittensor/core/chain_data/subnet_info.html +++ b/static/python-api/html/_modules/bittensor/core/chain_data/subnet_info.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    diff --git a/static/python-api/html/_modules/bittensor/core/chain_data/subnet_state.html b/static/python-api/html/_modules/bittensor/core/chain_data/subnet_state.html index ed4b533243..ff6335edfb 100644 --- a/static/python-api/html/_modules/bittensor/core/chain_data/subnet_state.html +++ b/static/python-api/html/_modules/bittensor/core/chain_data/subnet_state.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    diff --git a/static/python-api/html/_modules/bittensor/core/chain_data/utils.html b/static/python-api/html/_modules/bittensor/core/chain_data/utils.html index 5642ae8a0b..4f6eb8e9b8 100644 --- a/static/python-api/html/_modules/bittensor/core/chain_data/utils.html +++ b/static/python-api/html/_modules/bittensor/core/chain_data/utils.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -337,15 +340,19 @@

    Source code for bittensor.core.chain_data.utils

    < """Chain data helper functions and data.""" from enum import Enum -from typing import Optional, Union +from typing import Optional, Union, TYPE_CHECKING from scalecodec.base import RuntimeConfiguration, ScaleBytes +from async_substrate_interface.types import ScaleObj from scalecodec.type_registry import load_type_registry_preset from scalecodec.utils.ss58 import ss58_encode from bittensor.core.settings import SS58_FORMAT from bittensor.utils.balance import Balance +if TYPE_CHECKING: + from async_substrate_interface.sync_substrate import QueryMapResult +
    [docs] @@ -486,9 +493,78 @@

    Source code for bittensor.core.chain_data.utils

    < [docs] def decode_metadata(metadata: dict) -> str: commitment = metadata["info"]["fields"][0][0] - bytes_tuple = commitment[next(iter(commitment.keys()))][0] + bytes_tuple_ = commitment[next(iter(commitment.keys()))] + bytes_tuple = bytes_tuple_[0] if len(bytes_tuple_) > 0 else bytes_tuple_ return bytes(bytes_tuple).decode()
    + + +
    +[docs] +def decode_block(data: bytes) -> int: + """ + Decode the block data from the given input if it is not None. + + Arguments: + data (bytes): The block data to decode. + + Returns: + int: The decoded block. + """ + return int(data.value) if isinstance(data, ScaleObj) else data
    + + + +
    +[docs] +def decode_revealed_commitment(encoded_data) -> tuple[int, str]: + """ + Decode the revealed commitment data from the given input if it is not None. + + Arguments: + encoded_data (tuple[bytes, int]): A tuple containing the revealed message and the block number. + + Returns: + tuple[int, str]: A tuple containing the revealed block number and decoded commitment message. + """ + + def scale_decode_offset(data: bytes) -> int: + """Decodes the scale offset from a given byte data sequence.""" + first_byte = data[0] + mode = first_byte & 0b11 + if mode == 0: + return 1 + elif mode == 1: + return 2 + else: + return 4 + + com_bytes, revealed_block = encoded_data + offset = scale_decode_offset(com_bytes) + + revealed_commitment = bytes(com_bytes[offset:]).decode("utf-8", errors="ignore") + return revealed_block, revealed_commitment
    + + + +
    +[docs] +def decode_revealed_commitment_with_hotkey( + encoded_data: "QueryMapResult", +) -> tuple[str, tuple[tuple[int, str], ...]]: + """ + Decode revealed commitment using a hotkey. + + Returns: + tuple[str, tuple[tuple[int, str], ...]]: A tuple containing the hotkey (ss58 address) and a tuple of block + numbers and their corresponding revealed commitments. + """ + key, data = encoded_data + + ss58_address = decode_account_id(next(iter(key))) + block_data = tuple(decode_revealed_commitment(p) for p in data.value) + return ss58_address, block_data
    +
    diff --git a/static/python-api/html/_modules/bittensor/core/chain_data/weight_commit_info.html b/static/python-api/html/_modules/bittensor/core/chain_data/weight_commit_info.html index 985cf9f507..d2e6295800 100644 --- a/static/python-api/html/_modules/bittensor/core/chain_data/weight_commit_info.html +++ b/static/python-api/html/_modules/bittensor/core/chain_data/weight_commit_info.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    diff --git a/static/python-api/html/_modules/bittensor/core/config.html b/static/python-api/html/_modules/bittensor/core/config.html index 13690507f0..af4f3664e1 100644 --- a/static/python-api/html/_modules/bittensor/core/config.html +++ b/static/python-api/html/_modules/bittensor/core/config.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -590,19 +593,13 @@

    Source code for bittensor.core.config

     T = TypeVar("T", bound="DefaultConfig")
     
     
    -
    -[docs] class DefaultConfig(Config): """A Config with a set of default values.""" -
    -[docs] @classmethod def default(cls: Type[T]) -> T: """Get default config.""" - raise NotImplementedError("Function default is not implemented.")
    -
    - + raise NotImplementedError("Function default is not implemented.")
    diff --git a/static/python-api/html/_modules/bittensor/core/dendrite.html b/static/python-api/html/_modules/bittensor/core/dendrite.html index 08d045f3f4..e9f546397e 100644 --- a/static/python-api/html/_modules/bittensor/core/dendrite.html +++ b/static/python-api/html/_modules/bittensor/core/dendrite.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -607,7 +610,7 @@

    Source code for bittensor.core.dendrite

             """
             error_id = str(uuid.uuid4())
             error_type = exception.__class__.__name__
    -        if isinstance(exception, (aiohttp.ClientConnectorError, asyncio.TimeoutError)):
    +        if isinstance(exception, (aiohttp.ClientOSError, asyncio.TimeoutError)):
                 logging.debug(f"{error_type}#{error_id}: {exception}")
             else:
                 logging.error(f"{error_type}#{error_id}: {exception}")
    @@ -1257,7 +1260,14 @@

    Source code for bittensor.core.dendrite

                 # ... some operations ...
                 del dendrite  # This will implicitly invoke the __del__ method and close the session.
             """
    -        self.close_session()
    + try: + self.close_session() + except RuntimeError: + if self._session: + logging.debug( + "A Dendrite session was unable to be closed during garbage-collection of the Dendrite object. This " + "usually indicates that you were not using the async context manager." + ) diff --git a/static/python-api/html/_modules/bittensor/core/errors.html b/static/python-api/html/_modules/bittensor/core/errors.html index c8e4a9ab43..8e4092ca5e 100644 --- a/static/python-api/html/_modules/bittensor/core/errors.html +++ b/static/python-api/html/_modules/bittensor/core/errors.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -353,6 +356,21 @@

    Source code for bittensor.core.errors

     ExtrinsicNotFound = ExtrinsicNotFound
     
     
    +class _ChainErrorMeta(type):
    +    _exceptions: dict[str, Exception] = {}
    +
    +    def __new__(mcs, name, bases, attrs):
    +        cls = super().__new__(mcs, name, bases, attrs)
    +
    +        mcs._exceptions.setdefault(cls.__name__, cls)
    +
    +        return cls
    +
    +    @classmethod
    +    def get_exception_class(mcs, exception_name):
    +        return mcs._exceptions[exception_name]
    +
    +
     
    [docs] class MaxSuccessException(Exception): @@ -369,8 +387,22 @@

    Source code for bittensor.core.errors

     
     
    [docs] -class ChainError(SubstrateRequestException): - """Base error for any chain related errors."""
    +class ChainError(SubstrateRequestException, metaclass=_ChainErrorMeta): + """Base error for any chain related errors.""" + +
    +[docs] + @classmethod + def from_error(cls, error): + try: + error_cls = _ChainErrorMeta.get_exception_class( + error["name"], + ) + except KeyError: + return cls(error) + else: + return error_cls(" ".join(error["docs"]))
    +
    @@ -388,80 +420,216 @@

    Source code for bittensor.core.errors

     
     
     
    -
    -[docs] -class ChainQueryError(ChainError): - """Error for any chain query related errors."""
    +
    +[docs] +class DelegateTakeTooHigh(ChainTransactionError): + """ + Delegate take is too high. + """
    -
    -[docs] -class StakeError(ChainTransactionError): - """Error raised when a stake transaction fails."""
    +
    +[docs] +class DelegateTakeTooLow(ChainTransactionError): + """ + Delegate take is too low. + """
    -
    -[docs] -class UnstakeError(ChainTransactionError): - """Error raised when an unstake transaction fails."""
    +
    +[docs] +class DuplicateChild(ChainTransactionError): + """ + Duplicate child when setting children. + """
    + + + +
    +[docs] +class HotKeyAccountNotExists(ChainTransactionError): + """ + The hotkey does not exist. + """
    [docs] class IdentityError(ChainTransactionError): - """Error raised when an identity transaction fails."""
    + """ + Error raised when an identity transaction fails. + """
    + + + +
    +[docs] +class InvalidChild(ChainTransactionError): + """ + Attempting to set an invalid child for a hotkey on a network. + """
    + + + +
    +[docs] +class MetadataError(ChainTransactionError): + """ + Error raised when metadata commitment transaction fails. + """
    [docs] class NominationError(ChainTransactionError): - """Error raised when a nomination transaction fails."""
    + """ + Error raised when a nomination transaction fails. + """
    -
    -[docs] -class TakeError(ChainTransactionError): - """Error raised when an increase / decrease take transaction fails."""
    +
    +[docs] +class NonAssociatedColdKey(ChainTransactionError): + """ + Request to stake, unstake or subscribe is made by a coldkey that is not associated with the hotkey account. + """
    -
    -[docs] -class TransferError(ChainTransactionError): - """Error raised when a transfer transaction fails."""
    +
    +[docs] +class NotEnoughStakeToSetChildkeys(ChainTransactionError): + """ + The parent hotkey doesn't have enough own stake to set childkeys. + """
    + + + +
    +[docs] +class NotRegisteredError(ChainTransactionError): + """ + Error raised when a neuron is not registered, and the transaction requires it to be. + """
    + + + +
    +[docs] +class ProportionOverflow(ChainTransactionError): + """ + Proportion overflow when setting children. + """
    [docs] class RegistrationError(ChainTransactionError): - """Error raised when a neuron registration transaction fails."""
    + """ + Error raised when a neuron registration transaction fails. + """
    -
    -[docs] -class NotRegisteredError(ChainTransactionError): - """Error raised when a neuron is not registered, and the transaction requires it to be."""
    +
    +[docs] +class RegistrationNotPermittedOnRootSubnet(ChainTransactionError): + """ + Operation is not permitted on the root subnet. + """
    + + + +
    +[docs] +class StakeError(ChainTransactionError): + """ + Error raised when a stake transaction fails. + """
    [docs] class NotDelegateError(StakeError): - """Error raised when a hotkey you are trying to stake to is not a delegate."""
    + """ + Error raised when a hotkey you are trying to stake to is not a delegate. + """ -
    -[docs] -class MetadataError(ChainTransactionError): - """Error raised when metadata commitment transaction fails."""
    +class SubNetworkDoesNotExist(ChainTransactionError): + """ + The subnet does not exist. + """ + + +
    +[docs] +class TakeError(ChainTransactionError): + """ + Error raised when an increase / decrease take transaction fails. + """
    + + + +
    +[docs] +class TransferError(ChainTransactionError): + """ + Error raised when a transfer transaction fails. + """
    + + + +
    +[docs] +class TooManyChildren(ChainTransactionError): + """ + Too many children MAX 5. + """
    + + + +
    +[docs] +class TxRateLimitExceeded(ChainTransactionError): + """ + Default transaction rate limit exceeded. + """
    + + + +
    +[docs] +class DelegateTxRateLimitExceeded(TxRateLimitExceeded): + """ + A transactor exceeded the rate limit for delegate transaction. + """
    + + + +
    +[docs] +class UnstakeError(ChainTransactionError): + """ + Error raised when an unstake transaction fails. + """
    + + + +
    +[docs] +class ChainQueryError(ChainError): + """ + Error for any chain query related errors. + """
    diff --git a/static/python-api/html/_modules/bittensor/core/extrinsics/asyncex/commit_reveal.html b/static/python-api/html/_modules/bittensor/core/extrinsics/asyncex/children.html similarity index 55% rename from static/python-api/html/_modules/bittensor/core/extrinsics/asyncex/commit_reveal.html rename to static/python-api/html/_modules/bittensor/core/extrinsics/asyncex/children.html index c77f652ac8..8748b08682 100644 --- a/static/python-api/html/_modules/bittensor/core/extrinsics/asyncex/commit_reveal.html +++ b/static/python-api/html/_modules/bittensor/core/extrinsics/asyncex/children.html @@ -7,7 +7,7 @@ - bittensor.core.extrinsics.asyncex.commit_reveal — Bittensor SDK Docs documentation + bittensor.core.extrinsics.asyncex.children — Bittensor SDK Docs documentation @@ -44,7 +44,7 @@ - + @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -263,7 +266,7 @@ -
  • -

    Source code for bittensor.core.extrinsics.asyncex.commit_reveal

    -"""This module provides async functionality for commit reveal in the Bittensor network."""
    -
    -from typing import Optional, Union, TYPE_CHECKING
    -
    -import numpy as np
    -from bittensor_commit_reveal import get_encrypted_commit
    -from numpy.typing import NDArray
    -
    -from bittensor.core.settings import version_as_int
    -from bittensor.utils.btlogging import logging
    -from bittensor.utils.weight_utils import convert_weights_and_uids_for_emit
    +  

    Source code for bittensor.core.extrinsics.asyncex.children

    +from typing import TYPE_CHECKING, Optional
    +from bittensor.utils import float_to_u64, unlock_key
     
     if TYPE_CHECKING:
         from bittensor_wallet import Wallet
         from bittensor.core.async_subtensor import AsyncSubtensor
    -    from bittensor.utils.registration import torch
     
     
    -async def _do_commit_reveal_v3(
    +
    +[docs] +async def set_children_extrinsic( subtensor: "AsyncSubtensor", wallet: "Wallet", + hotkey: str, netuid: int, - commit: bytes, - reveal_round: int, - wait_for_inclusion: bool = False, + children: list[tuple[float, str]], + wait_for_inclusion: bool = True, wait_for_finalization: bool = False, -) -> tuple[bool, Optional[str]]: + raise_error: bool = False, + period: Optional[int] = None, +): """ - Executes the commit-reveal phase 3 for a given netuid and commit, and optionally waits for extrinsic inclusion or - finalization. + Allows a coldkey to set children-keys. Arguments: - subtensor: An instance of the AsyncSubtensor class. - wallet: Wallet An instance of the Wallet class containing the user's keypair. - netuid: int The network unique identifier. - commit bytes The commit data in bytes format. - reveal_round: int The round number for the reveal phase. - wait_for_inclusion: bool, optional Flag indicating whether to wait for the extrinsic to be included in a block. - wait_for_finalization: bool, optional Flag indicating whether to wait for the extrinsic to be finalized. + subtensor: bittensor subtensor. + wallet: bittensor wallet instance. + hotkey: The ``SS58`` address of the neuron's hotkey. + netuid: The netuid value. + children: A list of children with their proportions. + wait_for_inclusion: Waits for the transaction to be included in a block. + wait_for_finalization: Waits for the transaction to be finalized on the blockchain. + raise_error: Raises a relevant exception rather than returning `False` if unsuccessful. + period: The number of blocks during which the transaction will remain valid after it's submitted. If the + transaction is not included in a block within that number of blocks, it will expire and be rejected. You can + think of it as an expiration date for the transaction. Returns: - A tuple where the first element is a boolean indicating success or failure, and the second element is an - optional string containing error message if any. + tuple[bool, str]: A tuple where the first element is a boolean indicating success or failure of the operation, + and the second element is a message providing additional information. + + Raises: + DuplicateChild: There are duplicates in the list of children. + InvalidChild: Child is the hotkey. + NonAssociatedColdKey: The coldkey does not own the hotkey or the child is the same as the hotkey. + NotEnoughStakeToSetChildkeys: Parent key doesn't have minimum own stake. + ProportionOverflow: The sum of the proportions does exceed uint64. + RegistrationNotPermittedOnRootSubnet: Attempting to register a child on the root network. + SubNetworkDoesNotExist: Attempting to register to a non-existent network. + TooManyChildren: Too many children in request. + TxRateLimitExceeded: Hotkey hit the rate limit. + bittensor_wallet.errors.KeyFileError: Failed to decode keyfile data. + bittensor_wallet.errors.PasswordError: Decryption failed or wrong password for decryption provided. """ - logging.info( - f"Committing weights hash [blue]{commit.hex()}[/blue] for subnet #[blue]{netuid}[/blue] with " - f"reveal round [blue]{reveal_round}[/blue]..." - ) - - call = await subtensor.substrate.compose_call( - call_module="SubtensorModule", - call_function="commit_crv3_weights", - call_params={ - "netuid": netuid, - "commit": commit, - "reveal_round": reveal_round, - }, - ) - return await subtensor.sign_and_send_extrinsic( - call, wallet, wait_for_inclusion, wait_for_finalization, sign_with="hotkey" - ) - - -
    -[docs] -async def commit_reveal_v3_extrinsic( + unlock = unlock_key(wallet, raise_error=raise_error) + + if not unlock.success: + return False, unlock.message + + async with subtensor.substrate as substrate: + call = await substrate.compose_call( + call_module="SubtensorModule", + call_function="set_children", + call_params={ + "children": [ + ( + float_to_u64(proportion), + child_hotkey, + ) + for proportion, child_hotkey in children + ], + "hotkey": hotkey, + "netuid": netuid, + }, + ) + + success, message = await subtensor.sign_and_send_extrinsic( + call=call, + wallet=wallet, + wait_for_inclusion=wait_for_inclusion, + wait_for_finalization=wait_for_finalization, + raise_error=raise_error, + period=period, + ) + + if not wait_for_finalization and not wait_for_inclusion: + return True, message + + if success: + return True, "Success with `set_children_extrinsic` response." + + return True, message
    + + + +
    +[docs] +async def root_set_pending_childkey_cooldown_extrinsic( subtensor: "AsyncSubtensor", wallet: "Wallet", - netuid: int, - uids: Union[NDArray[np.int64], "torch.LongTensor", list], - weights: Union[NDArray[np.float32], "torch.FloatTensor", list], - version_key: int = version_as_int, - wait_for_inclusion: bool = False, + cooldown: int, + wait_for_inclusion: bool = True, wait_for_finalization: bool = False, + period: Optional[int] = None, ) -> tuple[bool, str]: """ - Commits and reveals weights for given subtensor and wallet with provided uids and weights. + Allows a coldkey to set children-keys. + """ + unlock = unlock_key(wallet) - Arguments: - subtensor: The AsyncSubtensor instance. - wallet: The wallet to use for committing and revealing. - netuid: The id of the network. - uids: The uids to commit. - weights: The weights associated with the uids. - version_key: The version key to use for committing and revealing. Default is version_as_int. - wait_for_inclusion: Whether to wait for the inclusion of the transaction. Default is False. - wait_for_finalization: Whether to wait for the finalization of the transaction. Default is False. + if not unlock.success: + return False, unlock.message - Returns: - tuple[bool, str]: A tuple where the first element is a boolean indicating success or failure, and the second - element is a message associated with the result - """ - try: - # Convert uids and weights - if isinstance(uids, list): - uids = np.array(uids, dtype=np.int64) - if isinstance(weights, list): - weights = np.array(weights, dtype=np.float32) - - # Reformat and normalize. - uids, weights = convert_weights_and_uids_for_emit(uids, weights) - - current_block = await subtensor.substrate.get_block(None) - subnet_hyperparameters = await subtensor.get_subnet_hyperparameters( - netuid, block_hash=current_block["header"]["hash"] + async with subtensor.substrate as substrate: + call = await substrate.compose_call( + call_module="SubtensorModule", + call_function="set_pending_childkey_cooldown", + call_params={"cooldown": cooldown}, ) - tempo = subnet_hyperparameters.tempo - subnet_reveal_period_epochs = subnet_hyperparameters.commit_reveal_period - - # Encrypt `commit_hash` with t-lock and `get reveal_round` - commit_for_reveal, reveal_round = get_encrypted_commit( - uids=uids, - weights=weights, - version_key=version_key, - tempo=tempo, - current_block=current_block["header"]["number"], - netuid=netuid, - subnet_reveal_period_epochs=subnet_reveal_period_epochs, + + sudo_call = await substrate.compose_call( + call_module="Sudo", + call_function="sudo", + call_params={"call": call}, ) - success, message = await _do_commit_reveal_v3( - subtensor=subtensor, + success, message = await subtensor.sign_and_send_extrinsic( + call=sudo_call, wallet=wallet, - netuid=netuid, - commit=commit_for_reveal, - reveal_round=reveal_round, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + period=period, ) - if success is not True: - logging.error(message) - return False, message + if not wait_for_finalization and not wait_for_inclusion: + return True, message - logging.success( - f"[green]Finalized![/green] Weights committed with reveal round [blue]{reveal_round}[/blue]." - ) - return True, f"reveal_round:{reveal_round}" + if success: + return ( + True, + "Success with `root_set_pending_childkey_cooldown_extrinsic` response.", + ) - except Exception as e: - logging.error(f":cross_mark: [red]Failed. Error:[/red] {e}") - return False, str(e)
    + return True, message
    diff --git a/static/python-api/html/_modules/bittensor/core/extrinsics/asyncex/liquidity.html b/static/python-api/html/_modules/bittensor/core/extrinsics/asyncex/liquidity.html new file mode 100644 index 0000000000..fc6b9a551e --- /dev/null +++ b/static/python-api/html/_modules/bittensor/core/extrinsics/asyncex/liquidity.html @@ -0,0 +1,657 @@ + + + + + + + + + + bittensor.core.extrinsics.asyncex.liquidity — Bittensor SDK Docs documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + +
    + +
    + + + + + +
    +
    + + + + + + + + +
    + + + +
    + +
    +
    + +
    +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + + +
    +

    + +
    +
    + +
    +
    +
    + + + + +
    + +

    Source code for bittensor.core.extrinsics.asyncex.liquidity

    +from typing import Optional, TYPE_CHECKING
    +
    +from bittensor.utils import unlock_key
    +from bittensor.utils.balance import Balance
    +from bittensor.utils.btlogging import logging
    +from bittensor.utils.liquidity import price_to_tick
    +
    +if TYPE_CHECKING:
    +    from bittensor_wallet import Wallet
    +    from bittensor.core.async_subtensor import AsyncSubtensor
    +
    +
    +
    +[docs] +async def add_liquidity_extrinsic( + subtensor: "AsyncSubtensor", + wallet: "Wallet", + netuid: int, + liquidity: Balance, + price_low: Balance, + price_high: Balance, + hotkey: Optional[str] = None, + wait_for_inclusion: bool = True, + wait_for_finalization: bool = False, + period: Optional[int] = None, +) -> tuple[bool, str]: + """ + Adds liquidity to the specified price range. + + Arguments: + subtensor: The Subtensor client instance used for blockchain interaction. + wallet: The wallet used to sign the extrinsic (must be unlocked). + netuid: The UID of the target subnet for which the call is being initiated. + liquidity: The amount of liquidity to be added. + price_low: The lower bound of the price tick range. + price_high: The upper bound of the price tick range. + hotkey: The hotkey with staked TAO in Alpha. If not passed then the wallet hotkey is used. Defaults to `None`. + wait_for_inclusion: Whether to wait for the extrinsic to be included in a block. Defaults to True. + wait_for_finalization: Whether to wait for finalization of the extrinsic. Defaults to False. + period: The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. + + Returns: + Tuple[bool, str]: + - True and a success message if the extrinsic is successfully submitted or processed. + - False and an error message if the submission fails or the wallet cannot be unlocked. + + Note: Adding is allowed even when user liquidity is enabled in specified subnet. Call + `toggle_user_liquidity_extrinsic` to enable/disable user liquidity. + """ + if not (unlock := unlock_key(wallet)).success: + logging.error(unlock.message) + return False, unlock.message + + tick_low = price_to_tick(price_low.tao) + tick_high = price_to_tick(price_high.tao) + + call = await subtensor.substrate.compose_call( + call_module="Swap", + call_function="add_liquidity", + call_params={ + "hotkey": hotkey or wallet.hotkey.ss58_address, + "netuid": netuid, + "tick_low": tick_low, + "tick_high": tick_high, + "liquidity": liquidity.rao, + }, + ) + + return await subtensor.sign_and_send_extrinsic( + call=call, + wallet=wallet, + wait_for_inclusion=wait_for_inclusion, + wait_for_finalization=wait_for_finalization, + use_nonce=True, + period=period, + )
    + + + +
    +[docs] +async def modify_liquidity_extrinsic( + subtensor: "AsyncSubtensor", + wallet: "Wallet", + netuid: int, + position_id: int, + liquidity_delta: Balance, + hotkey: Optional[str] = None, + wait_for_inclusion: bool = True, + wait_for_finalization: bool = False, + period: Optional[int] = None, +) -> tuple[bool, str]: + """Modifies liquidity in liquidity position by adding or removing liquidity from it. + + Arguments: + subtensor: The Subtensor client instance used for blockchain interaction. + wallet: The wallet used to sign the extrinsic (must be unlocked). + netuid: The UID of the target subnet for which the call is being initiated. + position_id: The id of the position record in the pool. + liquidity_delta: The amount of liquidity to be added or removed (add if positive or remove if negative). + hotkey: The hotkey with staked TAO in Alpha. If not passed then the wallet hotkey is used. Defaults to `None`. + wait_for_inclusion: Whether to wait for the extrinsic to be included in a block. Defaults to True. + wait_for_finalization: Whether to wait for finalization of the extrinsic. Defaults to False. + period: The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. + + Returns: + Tuple[bool, str]: + - True and a success message if the extrinsic is successfully submitted or processed. + - False and an error message if the submission fails or the wallet cannot be unlocked. + + Note: Modifying is allowed even when user liquidity is enabled in specified subnet. + Call `toggle_user_liquidity_extrinsic` to enable/disable user liquidity. + """ + if not (unlock := unlock_key(wallet)).success: + logging.error(unlock.message) + return False, unlock.message + + call = await subtensor.substrate.compose_call( + call_module="Swap", + call_function="modify_position", + call_params={ + "hotkey": hotkey or wallet.hotkey.ss58_address, + "netuid": netuid, + "position_id": position_id, + "liquidity_delta": liquidity_delta.rao, + }, + ) + + return await subtensor.sign_and_send_extrinsic( + call=call, + wallet=wallet, + wait_for_inclusion=wait_for_inclusion, + wait_for_finalization=wait_for_finalization, + use_nonce=True, + period=period, + )
    + + + +
    +[docs] +async def remove_liquidity_extrinsic( + subtensor: "AsyncSubtensor", + wallet: "Wallet", + netuid: int, + position_id: int, + hotkey: Optional[str] = None, + wait_for_inclusion: bool = True, + wait_for_finalization: bool = False, + period: Optional[int] = None, +) -> tuple[bool, str]: + """Remove liquidity and credit balances back to wallet's hotkey stake. + + Arguments: + subtensor: The Subtensor client instance used for blockchain interaction. + wallet: The wallet used to sign the extrinsic (must be unlocked). + netuid: The UID of the target subnet for which the call is being initiated. + position_id: The id of the position record in the pool. + hotkey: The hotkey with staked TAO in Alpha. If not passed then the wallet hotkey is used. Defaults to `None`. + wait_for_inclusion: Whether to wait for the extrinsic to be included in a block. Defaults to True. + wait_for_finalization: Whether to wait for finalization of the extrinsic. Defaults to False. + period: The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. + + Returns: + Tuple[bool, str]: + - True and a success message if the extrinsic is successfully submitted or processed. + - False and an error message if the submission fails or the wallet cannot be unlocked. + + Note: Adding is allowed even when user liquidity is enabled in specified subnet. + Call `toggle_user_liquidity_extrinsic` to enable/disable user liquidity. + """ + if not (unlock := unlock_key(wallet)).success: + logging.error(unlock.message) + return False, unlock.message + + call = await subtensor.substrate.compose_call( + call_module="Swap", + call_function="remove_liquidity", + call_params={ + "hotkey": hotkey or wallet.hotkey.ss58_address, + "netuid": netuid, + "position_id": position_id, + }, + ) + + return await subtensor.sign_and_send_extrinsic( + call=call, + wallet=wallet, + wait_for_inclusion=wait_for_inclusion, + wait_for_finalization=wait_for_finalization, + use_nonce=True, + period=period, + )
    + + + +
    +[docs] +async def toggle_user_liquidity_extrinsic( + subtensor: "AsyncSubtensor", + wallet: "Wallet", + netuid: int, + enable: bool, + wait_for_inclusion: bool = True, + wait_for_finalization: bool = False, + period: Optional[int] = None, +) -> tuple[bool, str]: + """Allow to toggle user liquidity for specified subnet. + + Arguments: + subtensor: The Subtensor client instance used for blockchain interaction. + wallet: The wallet used to sign the extrinsic (must be unlocked). + netuid: The UID of the target subnet for which the call is being initiated. + enable: Boolean indicating whether to enable user liquidity. + wait_for_inclusion: Whether to wait for the extrinsic to be included in a block. Defaults to True. + wait_for_finalization: Whether to wait for finalization of the extrinsic. Defaults to False. + period: The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. + + Returns: + Tuple[bool, str]: + - True and a success message if the extrinsic is successfully submitted or processed. + - False and an error message if the submission fails or the wallet cannot be unlocked. + """ + if not (unlock := unlock_key(wallet)).success: + logging.error(unlock.message) + return False, unlock.message + + call = await subtensor.substrate.compose_call( + call_module="Swap", + call_function="toggle_user_liquidity", + call_params={"netuid": netuid, "enable": enable}, + ) + + return await subtensor.sign_and_send_extrinsic( + call=call, + wallet=wallet, + wait_for_inclusion=wait_for_inclusion, + wait_for_finalization=wait_for_finalization, + period=period, + )
    + +
    + +
    + + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + + +
    + + +
    +
    +
    + + + + + +
    +
    + + \ No newline at end of file diff --git a/static/python-api/html/_modules/bittensor/core/extrinsics/asyncex/move_stake.html b/static/python-api/html/_modules/bittensor/core/extrinsics/asyncex/move_stake.html index 171b5353e1..64ba07a0e1 100644 --- a/static/python-api/html/_modules/bittensor/core/extrinsics/asyncex/move_stake.html +++ b/static/python-api/html/_modules/bittensor/core/extrinsics/asyncex/move_stake.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -335,7 +338,7 @@

    Source code for bittensor.core.extrinsics.asyncex.move_stake

     import asyncio
    -from typing import TYPE_CHECKING
    +from typing import TYPE_CHECKING, Optional
     
     from bittensor.utils.balance import Balance
     from bittensor.utils.btlogging import logging
    @@ -354,6 +357,7 @@ 

    Source code for bittensor.core.extrinsics.asyncex.move_stake

    origin_netuid: int, destination_netuid: int, ) -> tuple[Balance, Balance]: + """Gets the current stake balances for both origin and destination addresses in their respective subnets.""" block_hash = await subtensor.substrate.get_chain_head() stake_in_origin, stake_in_destination = await asyncio.gather( subtensor.get_stake( @@ -384,6 +388,7 @@

    Source code for bittensor.core.extrinsics.asyncex.move_stake

    amount: Balance, wait_for_inclusion: bool = True, wait_for_finalization: bool = False, + period: Optional[int] = None, ) -> bool: """ Transfers stake from one coldkey to another in the Bittensor network. @@ -398,6 +403,9 @@

    Source code for bittensor.core.extrinsics.asyncex.move_stake

    amount (Balance): The amount of stake to transfer as a `Balance` object. wait_for_inclusion (bool): If True, waits for transaction inclusion in a block. Defaults to `True`. wait_for_finalization (bool): If True, waits for transaction finalization. Defaults to `False`. + period (Optional[int]): The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: bool: True if the transfer was successful, False otherwise. @@ -415,7 +423,7 @@

    Source code for bittensor.core.extrinsics.asyncex.move_stake

    # Check sufficient stake stake_in_origin, stake_in_destination = await _get_stake_in_origin_and_dest( - subtensor, + subtensor=subtensor, origin_hotkey_ss58=hotkey_ss58, destination_hotkey_ss58=hotkey_ss58, origin_coldkey_ss58=wallet.coldkeypub.ss58_address, @@ -454,6 +462,7 @@

    Source code for bittensor.core.extrinsics.asyncex.move_stake

    wallet=wallet, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + period=period, ) if success: @@ -464,7 +473,7 @@

    Source code for bittensor.core.extrinsics.asyncex.move_stake

    # Get updated stakes origin_stake, dest_stake = await _get_stake_in_origin_and_dest( - subtensor, + subtensor=subtensor, origin_hotkey_ss58=hotkey_ss58, destination_hotkey_ss58=hotkey_ss58, origin_coldkey_ss58=wallet.coldkeypub.ss58_address, @@ -501,6 +510,10 @@

    Source code for bittensor.core.extrinsics.asyncex.move_stake

    amount: Balance, wait_for_inclusion: bool = True, wait_for_finalization: bool = False, + safe_staking: bool = False, + allow_partial_stake: bool = False, + rate_tolerance: float = 0.005, + period: Optional[int] = None, ) -> bool: """ Swaps stake from one subnet to another for a given hotkey in the Bittensor network. @@ -514,6 +527,12 @@

    Source code for bittensor.core.extrinsics.asyncex.move_stake

    amount (Balance): The amount of stake to swap as a `Balance` object. wait_for_inclusion (bool): If True, waits for transaction inclusion in a block. Defaults to True. wait_for_finalization (bool): If True, waits for transaction finalization. Defaults to False. + safe_staking (bool): If true, enables price safety checks to protect against price impact. + allow_partial_stake (bool): If true, allows partial stake swaps when the full amount would exceed the price tolerance. + rate_tolerance (float): Maximum allowed increase in a price ratio (0.005 = 0.5%). + period (Optional[int]): The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: bool: True if the swap was successful, False otherwise. @@ -530,7 +549,7 @@

    Source code for bittensor.core.extrinsics.asyncex.move_stake

    # Check sufficient stake stake_in_origin, stake_in_destination = await _get_stake_in_origin_and_dest( - subtensor, + subtensor=subtensor, origin_hotkey_ss58=hotkey_ss58, destination_hotkey_ss58=hotkey_ss58, origin_coldkey_ss58=wallet.coldkeypub.ss58_address, @@ -546,20 +565,47 @@

    Source code for bittensor.core.extrinsics.asyncex.move_stake

    return False try: - logging.info( - f"Swapping stake for hotkey [blue]{hotkey_ss58}[/blue]\n" - f"Amount: [green]{amount}[/green] from netuid [yellow]{origin_netuid}[/yellow] to netuid " - f"[yellow]{destination_netuid}[/yellow]" - ) + call_params = { + "hotkey": hotkey_ss58, + "origin_netuid": origin_netuid, + "destination_netuid": destination_netuid, + "alpha_amount": amount.rao, + } + + if safe_staking: + origin_pool, destination_pool = await asyncio.gather( + subtensor.subnet(netuid=origin_netuid), + subtensor.subnet(netuid=destination_netuid), + ) + swap_rate_ratio = origin_pool.price.rao / destination_pool.price.rao + swap_rate_ratio_with_tolerance = swap_rate_ratio * (1 + rate_tolerance) + + logging.info( + f"Swapping stake with safety for hotkey [blue]{hotkey_ss58}[/blue]\n" + f"Amount: [green]{amount}[/green] from netuid [green]{origin_netuid}[/green] to netuid " + f"[green]{destination_netuid}[/green]\n" + f"Current price ratio: [green]{swap_rate_ratio:.4f}[/green], " + f"Ratio with tolerance: [green]{swap_rate_ratio_with_tolerance:.4f}[/green]" + ) + call_params.update( + { + "limit_price": swap_rate_ratio_with_tolerance, + "allow_partial": allow_partial_stake, + } + ) + call_function = "swap_stake_limit" + else: + logging.info( + f"Swapping stake for hotkey [blue]{hotkey_ss58}[/blue]\n" + f"Amount: [green]{amount}[/green] from netuid [green]{origin_netuid}[/green] to netuid " + f"[green]{destination_netuid}[/green]" + ) + call_function = "swap_stake" + call = await subtensor.substrate.compose_call( call_module="SubtensorModule", - call_function="swap_stake", - call_params={ - "hotkey": hotkey_ss58, - "origin_netuid": origin_netuid, - "destination_netuid": destination_netuid, - "alpha_amount": amount.rao, - }, + call_function=call_function, + call_params=call_params, ) success, err_msg = await subtensor.sign_and_send_extrinsic( @@ -567,6 +613,7 @@

    Source code for bittensor.core.extrinsics.asyncex.move_stake

    wallet=wallet, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + period=period, ) if success: @@ -594,7 +641,12 @@

    Source code for bittensor.core.extrinsics.asyncex.move_stake

    return True else: - logging.error(f":cross_mark: [red]Failed[/red]: {err_msg}") + if safe_staking and "Custom error: 8" in err_msg: + logging.error( + ":cross_mark: [red]Failed[/red]: Price ratio exceeded tolerance limit. Either increase price tolerance or enable partial staking." + ) + else: + logging.error(f":cross_mark: [red]Failed[/red]: {err_msg}") return False except Exception as e: @@ -615,6 +667,7 @@

    Source code for bittensor.core.extrinsics.asyncex.move_stake

    amount: Balance, wait_for_inclusion: bool = True, wait_for_finalization: bool = False, + period: Optional[int] = None, ) -> bool: """ Moves stake from one hotkey to another within subnets in the Bittensor network. @@ -629,6 +682,9 @@

    Source code for bittensor.core.extrinsics.asyncex.move_stake

    amount (Balance): The amount of stake to move as a `Balance` object. wait_for_inclusion (bool): If True, waits for transaction inclusion in a block. Defaults to True. wait_for_finalization (bool): If True, waits for transaction finalization. Defaults to False. + period (Optional[int]): The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: bool: True if the move was successful, False otherwise. @@ -637,7 +693,7 @@

    Source code for bittensor.core.extrinsics.asyncex.move_stake

    # Check sufficient stake stake_in_origin, stake_in_destination = await _get_stake_in_origin_and_dest( - subtensor, + subtensor=subtensor, origin_hotkey_ss58=origin_hotkey, destination_hotkey_ss58=destination_hotkey, origin_coldkey_ss58=wallet.coldkeypub.ss58_address, @@ -675,6 +731,7 @@

    Source code for bittensor.core.extrinsics.asyncex.move_stake

    wallet=wallet, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + period=period, ) if success: @@ -685,7 +742,7 @@

    Source code for bittensor.core.extrinsics.asyncex.move_stake

    # Get updated stakes origin_stake, dest_stake = await _get_stake_in_origin_and_dest( - subtensor, + subtensor=subtensor, origin_hotkey_ss58=origin_hotkey, destination_hotkey_ss58=destination_hotkey, origin_coldkey_ss58=wallet.coldkeypub.ss58_address, diff --git a/static/python-api/html/_modules/bittensor/core/extrinsics/asyncex/registration.html b/static/python-api/html/_modules/bittensor/core/extrinsics/asyncex/registration.html index 2de198ec38..65198c9336 100644 --- a/static/python-api/html/_modules/bittensor/core/extrinsics/asyncex/registration.html +++ b/static/python-api/html/_modules/bittensor/core/extrinsics/asyncex/registration.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -346,7 +349,7 @@

    Source code for bittensor.core.extrinsics.asyncex.registration

    import asyncio from typing import Optional, Union, TYPE_CHECKING -from bittensor.utils import unlock_key, format_error_message +from bittensor.utils import unlock_key from bittensor.utils.btlogging import logging from bittensor.utils.registration import log_no_torch_error, create_pow_async, torch @@ -362,6 +365,7 @@

    Source code for bittensor.core.extrinsics.asyncex.registration

    wallet: "Wallet", wait_for_inclusion: bool = False, wait_for_finalization: bool = True, + period: Optional[int] = None, ) -> tuple[bool, str]: """ Performs a burned register extrinsic call to the Subtensor chain. @@ -374,6 +378,9 @@

    Source code for bittensor.core.extrinsics.asyncex.registration

    wallet (bittensor_wallet.Wallet): The wallet to be registered. wait_for_inclusion (bool): Whether to wait for the transaction to be included in a block. Default is False. wait_for_finalization (bool): Whether to wait for the transaction to be finalized. Default is True. + period (Optional[int]): The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: Tuple[bool, Optional[str]]: A tuple containing a boolean indicating success or failure, and an optional error @@ -394,6 +401,7 @@

    Source code for bittensor.core.extrinsics.asyncex.registration

    wallet=wallet, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + period=period, ) @@ -405,6 +413,7 @@

    Source code for bittensor.core.extrinsics.asyncex.registration

    netuid: int, wait_for_inclusion: bool = False, wait_for_finalization: bool = True, + period: Optional[int] = None, ) -> bool: """Registers the wallet to chain by recycling TAO. @@ -416,6 +425,9 @@

    Source code for bittensor.core.extrinsics.asyncex.registration

    returns ``False`` if the extrinsic fails to enter the block within the timeout. wait_for_finalization (bool): If set, waits for the extrinsic to be finalized on the chain before returning ``True``, or returns ``False`` if the extrinsic fails to be finalized within the timeout. + period (Optional[int]): The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: success (bool): Flag is ``True`` if extrinsic was finalized or included in the block. If we did not wait for @@ -436,7 +448,7 @@

    Source code for bittensor.core.extrinsics.asyncex.registration

    f":satellite: [magenta]Checking Account on subnet[/magenta] [blue]{netuid}[/blue][magenta] ...[/magenta]" ) - # We could do this as_completed because we don't actually need old_balance and recycle + # We could do this as_completed because we don't need old_balance and recycle # if neuron is null, but the complexity isn't worth it considering the small performance # gains we'd hypothetically receive in this situation neuron, old_balance, recycle_amount = await asyncio.gather( @@ -464,6 +476,7 @@

    Source code for bittensor.core.extrinsics.asyncex.registration

    wallet=wallet, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + period=period, ) if not success: @@ -501,6 +514,7 @@

    Source code for bittensor.core.extrinsics.asyncex.registration

    pow_result: "POWSolution", wait_for_inclusion: bool = False, wait_for_finalization: bool = True, + period: Optional[int] = None, ) -> tuple[bool, Optional[str]]: """Sends a (POW) register extrinsic to the chain. @@ -511,6 +525,9 @@

    Source code for bittensor.core.extrinsics.asyncex.registration

    pow_result (POWSolution): The PoW result to register. wait_for_inclusion (bool): If ``True``, waits for the extrinsic to be included in a block. Default to `False`. wait_for_finalization (bool): If ``True``, waits for the extrinsic to be finalized. Default to `True`. + period (Optional[int]): The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: success (bool): ``True`` if the extrinsic was included in a block. @@ -535,6 +552,7 @@

    Source code for bittensor.core.extrinsics.asyncex.registration

    wallet=wallet, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + period=period, ) @@ -554,6 +572,7 @@

    Source code for bittensor.core.extrinsics.asyncex.registration

    num_processes: Optional[int] = None, update_interval: Optional[int] = None, log_verbose: bool = False, + period: Optional[int] = None, ) -> bool: """Registers the wallet to the chain. @@ -574,6 +593,9 @@

    Source code for bittensor.core.extrinsics.asyncex.registration

    num_processes: The number of processes to use to register. update_interval: The number of nonces to solve between updates. log_verbose: If `True`, the registration process will log more information. + period (Optional[int]): The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: `True` if extrinsic was finalized or included in the block. If we did not wait for finalization/inclusion, the @@ -662,7 +684,7 @@

    Source code for bittensor.core.extrinsics.asyncex.registration

    # pow successful, proceed to submit pow to chain for registration else: logging.info(":satellite: [magenta]Submitting POW...[/magenta]") - # check if pow result is still valid + # check if a pow result is still valid while not await pow_result.is_stale_async(subtensor=subtensor): result: tuple[bool, Optional[str]] = await _do_pow_register( subtensor=subtensor, @@ -671,6 +693,7 @@

    Source code for bittensor.core.extrinsics.asyncex.registration

    pow_result=pow_result, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + period=period, ) success, err_msg = result @@ -730,6 +753,7 @@

    Source code for bittensor.core.extrinsics.asyncex.registration

    wallet: "Wallet", wait_for_inclusion: bool = False, wait_for_finalization: bool = True, + period: Optional[int] = None, ) -> bool: """ Registers a new subnetwork on the Bittensor blockchain asynchronously. @@ -739,6 +763,9 @@

    Source code for bittensor.core.extrinsics.asyncex.registration

    wallet (Wallet): The wallet to be used for subnet registration. wait_for_inclusion (bool): If set, waits for the extrinsic to enter a block before returning true. wait_for_finalization (bool): If set, waits for the extrinsic to be finalized on the chain before returning true. + period (Optional[int]): The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: bool: True if the subnet registration was successful, False otherwise. @@ -761,29 +788,25 @@

    Source code for bittensor.core.extrinsics.asyncex.registration

    }, ) - extrinsic = await subtensor.substrate.create_signed_extrinsic( - call=call, keypair=wallet.coldkey - ) - - response = await subtensor.substrate.submit_extrinsic( - extrinsic, + success, message = await subtensor.sign_and_send_extrinsic( + call=call, + wallet=wallet, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + period=period, ) if not wait_for_finalization and not wait_for_inclusion: return True - if not await response.is_success: - logging.error( - f"Failed to register subnet: {format_error_message(await response.error_message)}" + if success: + logging.success( + ":white_heavy_check_mark: [green]Successfully registered subnet[/green]" ) - return False + return True - logging.success( - ":white_heavy_check_mark: [green]Successfully registered subnet[/green]" - ) - return True
    + logging.error(f"Failed to register subnet: {message}") + return False
    @@ -797,11 +820,13 @@

    Source code for bittensor.core.extrinsics.asyncex.registration

    github_repo: str, subnet_contact: str, subnet_url: str, + logo_url: str, discord: str, description: str, additional: str, wait_for_inclusion: bool = False, wait_for_finalization: bool = True, + period: Optional[int] = None, ) -> tuple[bool, str]: """ Set the identity information for a given subnet. @@ -814,11 +839,15 @@

    Source code for bittensor.core.extrinsics.asyncex.registration

    github_repo (str): URL of the GitHub repository related to the subnet. subnet_contact (str): Subnet's contact information, e.g., email or contact link. subnet_url (str): The URL of the subnet's primary web portal. + logo_url (str): The URL of the logo's primary web portal. discord (str): Discord server or contact for the subnet. description (str): A textual description of the subnet. additional (str): Any additional metadata or information related to the subnet. wait_for_inclusion (bool): Whether to wait for the extrinsic inclusion in a block (default: False). wait_for_finalization (bool): Whether to wait for the extrinsic finalization in a block (default: True). + period (Optional[int]): The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: tuple[bool, str]: A tuple where the first element indicates success or failure (True/False), and the second @@ -839,33 +868,34 @@

    Source code for bittensor.core.extrinsics.asyncex.registration

    "github_repo": github_repo, "subnet_contact": subnet_contact, "subnet_url": subnet_url, + "logo_url": logo_url, "discord": discord, "description": description, "additional": additional, }, ) - response = await subtensor.substrate.submit_extrinsic( + success, message = await subtensor.sign_and_send_extrinsic( call=call, wallet=wallet, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + period=period, ) if not wait_for_finalization and not wait_for_inclusion: - return True, f"Identities for subnet {netuid} are sent to the chain." + return True, message - if await response.is_success: + if success: logging.success( f":white_heavy_check_mark: [green]Identities for subnet[/green] [blue]{netuid}[/blue] [green]are set.[/green]" ) return True, f"Identities for subnet {netuid} are set." - else: - error_message = await response.error_message - logging.error( - f":cross_mark: Failed to set identity for subnet [blue]{netuid}[/blue]: {error_message}" - ) - return False, f"Failed to set identity for subnet {netuid}: {error_message}"
    + + logging.error( + f":cross_mark: Failed to set identity for subnet [blue]{netuid}[/blue]: {message}" + ) + return False, f"Failed to set identity for subnet {netuid}: {message}"
    diff --git a/static/python-api/html/_modules/bittensor/core/extrinsics/asyncex/root.html b/static/python-api/html/_modules/bittensor/core/extrinsics/asyncex/root.html index 63087eca55..9cc9e60cbf 100644 --- a/static/python-api/html/_modules/bittensor/core/extrinsics/asyncex/root.html +++ b/static/python-api/html/_modules/bittensor/core/extrinsics/asyncex/root.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -335,21 +338,23 @@

    Source code for bittensor.core.extrinsics.asyncex.root

     import asyncio
    -from typing import Union, TYPE_CHECKING
    +from typing import Optional, Union, TYPE_CHECKING
     
    -from bittensor_wallet import Wallet
     import numpy as np
     from numpy.typing import NDArray
     
     from bittensor.core.errors import SubstrateRequestException
     from bittensor.utils import u16_normalized_float, format_error_message, unlock_key
    +from bittensor.utils.balance import Balance
     from bittensor.utils.btlogging import logging
     from bittensor.utils.weight_utils import (
         normalize_max_weight,
         convert_weights_and_uids_for_emit,
    +    convert_uids_and_weights,
     )
     
     if TYPE_CHECKING:
    +    from bittensor_wallet import Wallet
         from bittensor.core.async_subtensor import AsyncSubtensor
     
     
    @@ -384,8 +389,9 @@ 

    Source code for bittensor.core.extrinsics.asyncex.root

    wallet: "Wallet", wait_for_inclusion: bool = True, wait_for_finalization: bool = True, + period: Optional[int] = None, ) -> bool: - """Registers the wallet to root network. + """Registers the wallet to the root network. Arguments: subtensor (bittensor.core.async_subtensor.AsyncSubtensor): The AsyncSubtensor object @@ -394,12 +400,42 @@

    Source code for bittensor.core.extrinsics.asyncex.root

    `False` if the extrinsic fails to enter the block within the timeout. wait_for_finalization (bool): If set, waits for the extrinsic to be finalized on the chain before returning `True`, or returns `False` if the extrinsic fails to be finalized within the timeout. + period (Optional[int]): The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: `True` if extrinsic was finalized or included in the block. If we did not wait for finalization/inclusion, the response is `True`. """ netuid = 0 + logging.info( + f"Registering on netuid [blue]{netuid}[/blue] on network: [blue]{subtensor.network}[/blue]" + ) + + logging.info("Fetching recycle amount & balance.") + block_hash = await subtensor.get_block_hash() + recycle_call, balance = await asyncio.gather( + subtensor.get_hyperparameter( + param_name="Burn", + netuid=netuid, + block_hash=block_hash, + ), + subtensor.get_balance( + wallet.coldkeypub.ss58_address, + block_hash=block_hash, + ), + ) + + current_recycle = Balance.from_rao(int(recycle_call)) + + if balance < current_recycle: + logging.error( + f"[red]Insufficient balance {balance} to register neuron. " + f"Current recycle is {current_recycle} TAO[/red]." + ) + return False + if not (unlock := unlock_key(wallet)).success: logging.error(unlock.message) return False @@ -422,15 +458,16 @@

    Source code for bittensor.core.extrinsics.asyncex.root

    call_function="root_register", call_params={"hotkey": wallet.hotkey.ss58_address}, ) - success, err_msg = await subtensor.sign_and_send_extrinsic( - call, + success, message = await subtensor.sign_and_send_extrinsic( + call=call, wallet=wallet, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + period=period, ) if not success: - logging.error(f":cross_mark: [red]Failed error:[/red] {err_msg}") + logging.error(f":cross_mark: [red]Failed error:[/red] {message}") await asyncio.sleep(0.5) return False @@ -462,7 +499,7 @@

    Source code for bittensor.core.extrinsics.asyncex.root

    version_key: int = 0, wait_for_inclusion: bool = False, wait_for_finalization: bool = False, - period: int = 5, + period: Optional[int] = 8, ) -> tuple[bool, str]: """ Sets the root weights on the Subnet for the given wallet hotkey account. @@ -482,7 +519,9 @@

    Source code for bittensor.core.extrinsics.asyncex.root

    False. wait_for_finalization (bool, optional): If True, waits for the extrinsic to be finalized on the chain. Defaults to False. - period (int, optional): The period in seconds to wait for extrinsic inclusion or finalization. Defaults to 5. + period (Optional[int]): The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: tuple: Returns a tuple containing a boolean indicating success and a message describing the result of the @@ -500,34 +539,25 @@

    Source code for bittensor.core.extrinsics.asyncex.root

    }, ) - next_nonce = await subtensor.substrate.get_account_next_index( - wallet.hotkey.ss58_address - ) - - # Period dictates how long the extrinsic will stay as part of waiting pool - extrinsic = await subtensor.substrate.create_signed_extrinsic( + success, message = await subtensor.sign_and_send_extrinsic( call=call, - keypair=wallet.coldkey, - era={"period": period}, - nonce=next_nonce, - ) - response = await subtensor.substrate.submit_extrinsic( - extrinsic=extrinsic, + wallet=wallet, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + use_nonce=True, + period=period, ) + # We only wait here if we expect finalization. if not wait_for_finalization and not wait_for_inclusion: - return True, "Not waiting for finalization or inclusion." + return True, message - if await response.is_success: + if success: return True, "Successfully set weights." - return False, format_error_message(await response.error_message) + return False, message -
    -[docs] async def set_root_weights_extrinsic( subtensor: "AsyncSubtensor", wallet: "Wallet", @@ -536,20 +566,24 @@

    Source code for bittensor.core.extrinsics.asyncex.root

    version_key: int = 0, wait_for_inclusion: bool = False, wait_for_finalization: bool = False, + period: Optional[int] = None, ) -> bool: - """Sets the given weights and values on chain for wallet hotkey account. + """Sets the given weights and values on a chain for a wallet hotkey account. Arguments: subtensor (bittensor.core.async_subtensor.AsyncSubtensor): The AsyncSubtensor object wallet (bittensor_wallet.Wallet): Bittensor wallet object. netuids (Union[NDArray[np.int64], list[int]]): The `netuid` of the subnet to set weights for. - weights (Union[NDArray[np.float32], list[float]]): Weights to set. These must be `float` s and must correspond + weights (Union[NDArray[np.float32], list[Float]]): Weights to set. These must be `Float`s and must correspond to the passed `netuid` s. version_key (int): The version key of the validator. wait_for_inclusion (bool): If set, waits for the extrinsic to enter a block before returning `True`, or returns `False` if the extrinsic fails to enter the block within the timeout. wait_for_finalization (bool): If set, waits for the extrinsic to be finalized on the chain before returning ` True`, or returns `False` if the extrinsic fails to be finalized within the timeout. + period (Optional[int]): The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: `True` if extrinsic was finalized or included in the block. If we did not wait for finalization/inclusion, the @@ -567,13 +601,10 @@

    Source code for bittensor.core.extrinsics.asyncex.root

    logging.error(unlock.message) return False - # First convert types. - if isinstance(netuids, list): - netuids = np.array(netuids, dtype=np.int64) - if isinstance(weights, list): - weights = np.array(weights, dtype=np.float32) + # Convert types. + netuids, weights = convert_uids_and_weights(netuids, weights) - logging.debug("Fetching weight limits") + logging.debug("[magenta]Fetching weight limits ...[/magenta]") min_allowed_weights, max_weight_limit = await _get_limits(subtensor) # Get non zero values. @@ -587,7 +618,7 @@

    Source code for bittensor.core.extrinsics.asyncex.root

    ) # Normalize the weights to max value. - logging.info("Normalizing weights") + logging.info("[magenta]Normalizing weights ...[/magenta]") formatted_weights = normalize_max_weight(x=weights, limit=max_weight_limit) logging.info( f"Raw weights -> Normalized weights: [blue]{weights}[/blue] -> [green]{formatted_weights}[/green]" @@ -605,11 +636,9 @@

    Source code for bittensor.core.extrinsics.asyncex.root

    version_key=version_key, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + period=period, ) - if not wait_for_finalization and not wait_for_inclusion: - return True - if success is True: logging.info(":white_heavy_check_mark: [green]Finalized[/green]") return True @@ -621,8 +650,7 @@

    Source code for bittensor.core.extrinsics.asyncex.root

    except SubstrateRequestException as e: fmt_err = format_error_message(e) logging.error(f":cross_mark: [red]Failed error:[/red] {fmt_err}") - return False
    - + return False
    diff --git a/static/python-api/html/_modules/bittensor/core/extrinsics/asyncex/serving.html b/static/python-api/html/_modules/bittensor/core/extrinsics/asyncex/serving.html index 81e33eee7b..cd3e348572 100644 --- a/static/python-api/html/_modules/bittensor/core/extrinsics/asyncex/serving.html +++ b/static/python-api/html/_modules/bittensor/core/extrinsics/asyncex/serving.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -335,18 +338,17 @@

    Source code for bittensor.core.extrinsics.asyncex.serving

     import asyncio
    -from typing import Optional, TYPE_CHECKING
    +from typing import Optional, Union, TYPE_CHECKING
     
     from bittensor.core.errors import MetadataError
     from bittensor.core.settings import version_as_int
    +from bittensor.core.types import AxonServeCallParams
     from bittensor.utils import (
    -    format_error_message,
         networking as net,
         unlock_key,
         Certificate,
     )
     from bittensor.utils.btlogging import logging
    -from bittensor.core.types import AxonServeCallParams
     
     if TYPE_CHECKING:
         from bittensor.core.axon import Axon
    @@ -354,15 +356,14 @@ 

    Source code for bittensor.core.extrinsics.asyncex.serving

    from bittensor_wallet import Wallet -
    -[docs] async def do_serve_axon( subtensor: "AsyncSubtensor", wallet: "Wallet", call_params: "AxonServeCallParams", wait_for_inclusion: bool = False, wait_for_finalization: bool = True, -) -> tuple[bool, Optional[dict]]: + period: Optional[int] = None, +) -> tuple[bool, str]: """ Internal method to submit a serve axon transaction to the Bittensor blockchain. This method creates and submits a transaction, enabling a neuron's ``Axon`` to serve requests on the network. @@ -373,9 +374,12 @@

    Source code for bittensor.core.extrinsics.asyncex.serving

    call_params (bittensor.core.types.AxonServeCallParams): Parameters required for the serve axon call. wait_for_inclusion (bool): Waits for the transaction to be included in a block. wait_for_finalization (bool): Waits for the transaction to be finalized on the blockchain. + period (Optional[int]): The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: - tuple[bool, Optional[str]]: A tuple containing a success flag and an optional error message. + tuple[bool, str]: A tuple containing a success flag and an optional error message. This function is crucial for initializing and announcing a neuron's ``Axon`` service on the network, enhancing the decentralized computation capabilities of Bittensor. @@ -391,22 +395,15 @@

    Source code for bittensor.core.extrinsics.asyncex.serving

    call_function=call_function, call_params=call_params.dict(), ) - extrinsic = await subtensor.substrate.create_signed_extrinsic( - call=call, keypair=wallet.hotkey - ) - response = await subtensor.substrate.submit_extrinsic( - extrinsic=extrinsic, + success, message = await subtensor.sign_and_send_extrinsic( + call=call, + wallet=wallet, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + sign_with="hotkey", + period=period, ) - if wait_for_inclusion or wait_for_finalization: - if await response.is_success: - return True, None - - return False, await response.error_message - - return True, None
    - + return success, message
    @@ -423,6 +420,7 @@

    Source code for bittensor.core.extrinsics.asyncex.serving

    wait_for_inclusion: bool = False, wait_for_finalization=True, certificate: Optional[Certificate] = None, + period: Optional[int] = None, ) -> bool: """Subscribes a Bittensor endpoint to the subtensor chain. @@ -441,6 +439,9 @@

    Source code for bittensor.core.extrinsics.asyncex.serving

    ``True``, or returns ``False`` if the extrinsic fails to be finalized within the timeout. certificate (bittensor.utils.Certificate): Certificate to use for TLS. If ``None``, no TLS will be used. Defaults to ``None``. + period (Optional[int]): The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: success (bool): Flag is ``True`` if extrinsic was finalized or included in the block. If we did not wait for @@ -473,32 +474,32 @@

    Source code for bittensor.core.extrinsics.asyncex.serving

    neuron_up_to_date = not neuron.is_null and params == neuron if neuron_up_to_date: logging.debug( - f"Axon already served on: AxonInfo({wallet.hotkey.ss58_address},{ip}:{port}) " + f"Axon already served on: [blue]AxonInfo({wallet.hotkey.ss58_address}, {ip}:{port})[/blue]" ) return True logging.debug( - f"Serving axon with: AxonInfo({wallet.hotkey.ss58_address},{ip}:{port}) -> {subtensor.network}:{netuid}" + f"Serving axon with: [blue]AxonInfo({wallet.hotkey.ss58_address}, {ip}:{port})[/blue] -> " + f"[green]{subtensor.network}:{netuid}[/green]" ) - success, error_message = await do_serve_axon( + success, message = await do_serve_axon( subtensor=subtensor, wallet=wallet, call_params=params, wait_for_finalization=wait_for_finalization, wait_for_inclusion=wait_for_inclusion, + period=period, ) - if wait_for_inclusion or wait_for_finalization: - if success is True: - logging.debug( - f"Axon served with: AxonInfo({wallet.hotkey.ss58_address},{ip}:{port}) on {subtensor.network}:{netuid} " - ) - return True - else: - logging.error(f"Failed: {format_error_message(error_message)}") - return False - else: - return True
    + if success: + logging.debug( + f"Axon served with: [blue]AxonInfo({wallet.hotkey.ss58_address}, {ip}:{port})[/blue] on " + f"[green]{subtensor.network}:{netuid}[/green]" + ) + return True + + logging.error(f"Failed: {message}") + return False
    @@ -511,6 +512,7 @@

    Source code for bittensor.core.extrinsics.asyncex.serving

    wait_for_inclusion: bool = False, wait_for_finalization: bool = True, certificate: Optional[Certificate] = None, + period: Optional[int] = None, ) -> bool: """Serves the axon to the network. @@ -524,6 +526,9 @@

    Source code for bittensor.core.extrinsics.asyncex.serving

    ``True``, or returns ``False`` if the extrinsic fails to be finalized within the timeout. certificate (bittensor.utils.Certificate): Certificate to use for TLS. If ``None``, no TLS will be used. Defaults to ``None``. + period (Optional[int]): The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: success (bool): Flag is ``True`` if extrinsic was finalized or included in the block. If we did not wait for @@ -561,21 +566,22 @@

    Source code for bittensor.core.extrinsics.asyncex.serving

    wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, certificate=certificate, + period=period, ) return serve_success
    -
    -[docs] async def publish_metadata( subtensor: "AsyncSubtensor", wallet: "Wallet", netuid: int, data_type: str, - data: bytes, + data: Union[bytes, dict], wait_for_inclusion: bool = False, wait_for_finalization: bool = True, + period: Optional[int] = None, + reset_bonds: bool = False, ) -> bool: """ Publishes metadata on the Bittensor network using the specified wallet and network identifier. @@ -587,18 +593,22 @@

    Source code for bittensor.core.extrinsics.asyncex.serving

    data_type (str): The data type of the information being submitted. It should be one of the following: ``'Sha256'``, ``'Blake256'``, ``'Keccak256'``, or ``'Raw0-128'``. This specifies the format or hashing algorithm used for the data. - data (str): The actual metadata content to be published. This should be formatted or hashed according to the - ``type`` specified. (Note: max ``str`` length is 128 bytes) + data (Union[bytes, dict]): The actual metadata content to be published. This should be formatted or hashed + according to the ``type`` specified. (Note: max ``str`` length is 128 bytes for ``'Raw0-128'``.) wait_for_inclusion (bool, optional): If ``True``, the function will wait for the extrinsic to be included in a block before returning. Defaults to ``False``. wait_for_finalization (bool, optional): If ``True``, the function will wait for the extrinsic to be finalized on the chain before returning. Defaults to ``True``. + period (Optional[int]): The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. + reset_bonds (bool): If `True`, the function will reset the bonds for the neuron. Defaults to `False`. Returns: bool: ``True`` if the metadata was successfully published (and finalized if specified). ``False`` otherwise. Raises: - MetadataError: If there is an error in submitting the extrinsic or if the response from the blockchain indicates + MetadataError: If there is an error in submitting the extrinsic, or if the response from the blockchain indicates failure. """ @@ -606,36 +616,34 @@

    Source code for bittensor.core.extrinsics.asyncex.serving

    logging.error(unlock.message) return False + fields = [{f"{data_type}": data}] + if reset_bonds: + fields.append({"ResetBondsFlag": b""}) + async with subtensor.substrate as substrate: call = await substrate.compose_call( call_module="Commitments", call_function="set_commitment", call_params={ "netuid": netuid, - "info": {"fields": [[{f"{data_type}": data}]]}, + "info": {"fields": [fields]}, }, ) - extrinsic = await substrate.create_signed_extrinsic( - call=call, keypair=wallet.hotkey - ) - response = await substrate.submit_extrinsic( - extrinsic=extrinsic, + success, message = await subtensor.sign_and_send_extrinsic( + call=call, + wallet=wallet, + sign_with="hotkey", wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + period=period, ) - # We only wait here if we expect finalization. - if not wait_for_finalization and not wait_for_inclusion: - return True - if await response.is_success: + if success: return True - raise MetadataError(format_error_message(await response.error_message))
    - + raise MetadataError(message) -
    -[docs] async def get_metadata( subtensor: "AsyncSubtensor", netuid: int, @@ -643,7 +651,7 @@

    Source code for bittensor.core.extrinsics.asyncex.serving

    block: Optional[int] = None, block_hash: Optional[str] = None, reuse_block: bool = False, -) -> str: +) -> Union[str, dict]: """Fetches metadata from the blockchain for a given hotkey and netuid.""" async with subtensor.substrate: block_hash = await subtensor.determine_block_hash( @@ -656,8 +664,26 @@

    Source code for bittensor.core.extrinsics.asyncex.serving

    block_hash=block_hash, reuse_block_hash=reuse_block, ) - return commit_data
    + return commit_data + +async def get_last_bonds_reset( + subtensor: "AsyncSubtensor", + netuid: int, + hotkey: str, + block: Optional[int] = None, + block_hash: Optional[str] = None, + reuse_block: bool = False, +) -> bytes: + """Fetches the last bonds reset triggered at commitment from the blockchain for a given hotkey and netuid.""" + block_hash = await subtensor.determine_block_hash(block, block_hash, reuse_block) + block = await subtensor.substrate.query( + module="Commitments", + storage_function="LastBondsReset", + params=[netuid, hotkey], + block_hash=block_hash, + ) + return block
    diff --git a/static/python-api/html/_modules/bittensor/core/extrinsics/asyncex/staking.html b/static/python-api/html/_modules/bittensor/core/extrinsics/asyncex/staking.html index 44717818ee..c01111371d 100644 --- a/static/python-api/html/_modules/bittensor/core/extrinsics/asyncex/staking.html +++ b/static/python-api/html/_modules/bittensor/core/extrinsics/asyncex/staking.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -337,11 +340,12 @@

    Source code for bittensor.core.extrinsics.asyncex.staking

    import asyncio from typing import Optional, Sequence, TYPE_CHECKING -from bittensor.core.errors import StakeError, NotRegisteredError -from bittensor.utils import unlock_key +from async_substrate_interface.errors import SubstrateRequestException + +from bittensor.core.extrinsics.utils import get_old_stakes +from bittensor.utils import unlock_key, format_error_message from bittensor.utils.balance import Balance from bittensor.utils.btlogging import logging -from bittensor.core.extrinsics.utils import get_old_stakes if TYPE_CHECKING: from bittensor_wallet import Wallet @@ -359,25 +363,40 @@

    Source code for bittensor.core.extrinsics.asyncex.staking

    amount: Optional[Balance] = None, wait_for_inclusion: bool = True, wait_for_finalization: bool = False, + safe_staking: bool = False, + allow_partial_stake: bool = False, + rate_tolerance: float = 0.005, + period: Optional[int] = None, ) -> bool: """ - Adds the specified amount of stake to passed hotkey `uid`. + Adds a stake from the specified wallet to the neuron identified by the SS58 address of its hotkey in specified subnet. + Staking is a fundamental process in the Bittensor network that enables neurons to participate actively and earn incentives. Arguments: - subtensor: the initialized SubtensorInterface object to use + subtensor: Subtensor instance with the connection to the chain. wallet: Bittensor wallet object. old_balance: the balance prior to the staking - hotkey_ss58: The `ss58` address of the hotkey account to stake to defaults to the wallet's hotkey. - netuid: The netuid of the stake to be added - amount: Amount to stake as Bittensor balance, `None` if staking all. + hotkey_ss58: The `ss58` address of the hotkey account to stake to default to the wallet's hotkey. If not + specified, the wallet's hotkey will be used. Defaults to ``None``. + netuid: The unique identifier of the subnet to which the neuron belongs. + amount: Amount to stake as Bittensor balance in TAO always, `None` if staking all. Defaults is ``None``. wait_for_inclusion: If set, waits for the extrinsic to enter a block before returning `True`, or returns - `False` if the extrinsic fails to enter the block within the timeout. + `False` if the extrinsic fails to enter the block within the timeout. Defaults to ``True``. wait_for_finalization: If set, waits for the extrinsic to be finalized on the chain before returning `True`, - or returns `False` if the extrinsic fails to be finalized within the timeout. + or returns `False` if the extrinsic fails to be finalized within the timeout. Defaults to ``False``. + safe_staking: If True, enables price safety checks. Default is ``False``. + allow_partial_stake: If True, allows partial unstaking if price tolerance exceeded. Default is ``False``. + rate_tolerance: Maximum allowed price increase percentage (0.005 = 0.5%). Default is ``0.005``. + period: The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Defaults to ``None``. Returns: success: Flag is `True` if extrinsic was finalized or included in the block. If we did not wait for finalization/inclusion, the response is `True`. + + Raises: + SubstrateRequestException: Raised if the extrinsic fails to be included in the block within the timeout. """ # Decrypt keys, @@ -417,7 +436,6 @@

    Source code for bittensor.core.extrinsics.asyncex.staking

    ) else: staking_balance = amount - staking_balance.set_unit(netuid) # Leave existential balance to keep key alive. if staking_balance > old_balance - existential_deposit: @@ -435,28 +453,61 @@

    Source code for bittensor.core.extrinsics.asyncex.staking

    return False try: - logging.info( - f":satellite: [magenta]Staking to:[/magenta] " - f"[blue]netuid: {netuid}, amount: {staking_balance} " - f"on {subtensor.network}[/blue] [magenta]...[/magenta]" - ) + call_params = { + "hotkey": hotkey_ss58, + "netuid": netuid, + "amount_staked": staking_balance.rao, + } + + if safe_staking: + pool = await subtensor.subnet(netuid=netuid) + base_price = pool.price.tao + + if pool.netuid == 0: + price_with_tolerance = base_price + else: + price_with_tolerance = base_price * (1 + rate_tolerance) + + logging.info( + f":satellite: [magenta]Safe Staking to:[/magenta] " + f"[blue]netuid: [green]{netuid}[/green], amount: [green]{staking_balance}[/green], " + f"tolerance percentage: [green]{rate_tolerance * 100}%[/green], " + f"price limit: [green]{price_with_tolerance}[/green], " + f"original price: [green]{base_price}[/green], " + f"with partial stake: [green]{allow_partial_stake}[/green] " + f"on [blue]{subtensor.network}[/blue][/magenta]...[/magenta]" + ) + + limit_price = Balance.from_tao(price_with_tolerance).rao + call_params.update( + { + "limit_price": limit_price, + "allow_partial": allow_partial_stake, + } + ) + call_function = "add_stake_limit" + else: + logging.info( + f":satellite: [magenta]Staking to:[/magenta] " + f"[blue]netuid: [green]{netuid}[/green], amount: [green]{staking_balance}[/green] " + f"on [blue]{subtensor.network}[/blue][magenta]...[/magenta]" + ) + call_function = "add_stake" + call = await subtensor.substrate.compose_call( call_module="SubtensorModule", - call_function="add_stake", - call_params={ - "hotkey": hotkey_ss58, - "amount_staked": staking_balance.rao, - "netuid": netuid, - }, + call_function=call_function, + call_params=call_params, ) staking_response, err_msg = await subtensor.sign_and_send_extrinsic( - call, - wallet, - wait_for_inclusion, - wait_for_finalization, + call=call, + wallet=wallet, + wait_for_inclusion=wait_for_inclusion, + wait_for_finalization=wait_for_finalization, nonce_key="coldkeypub", sign_with="coldkey", use_nonce=True, + period=period, ) if staking_response is True: # If we successfully staked. # We only wait here if we expect finalization. @@ -466,8 +517,8 @@

    Source code for bittensor.core.extrinsics.asyncex.staking

    logging.success(":white_heavy_check_mark: [green]Finalized[/green]") logging.info( - f":satellite: [magenta]Checking Balance on:[/magenta] [blue]{subtensor.network}[/blue] " - "[magenta]...[/magenta]" + f":satellite: [magenta]Checking Balance on:[/magenta] " + f"[blue]{subtensor.network}[/blue] [magenta]...[/magenta]" ) new_block_hash = await subtensor.substrate.get_chain_head() new_balance, new_stake = await asyncio.gather( @@ -490,18 +541,18 @@

    Source code for bittensor.core.extrinsics.asyncex.staking

    ) return True else: - logging.error(f":cross_mark: [red]Failed: {err_msg}.[/red]") + if safe_staking and "Custom error: 8" in err_msg: + logging.error( + ":cross_mark: [red]Failed[/red]: Price exceeded tolerance limit. Either increase price tolerance or enable partial staking." + ) + else: + logging.error(f":cross_mark: [red]Failed: {err_msg}.[/red]") return False - except NotRegisteredError: + except SubstrateRequestException as error: logging.error( - ":cross_mark: [red]Hotkey: {} is not registered.[/red]".format( - wallet.hotkey_str - ) + f":cross_mark: [red]Add Stake Error: {format_error_message(error)}[/red]" ) - return False - except StakeError as e: - logging.error(f":cross_mark: [red]Stake Error: {e}[/red]") return False
    @@ -517,8 +568,9 @@

    Source code for bittensor.core.extrinsics.asyncex.staking

    amounts: Optional[list[Balance]] = None, wait_for_inclusion: bool = True, wait_for_finalization: bool = False, + period: Optional[int] = None, ) -> bool: - """Adds stake to each ``hotkey_ss58`` in the list, using each amount, from a common coldkey. + """Adds a stake to each ``hotkey_ss58`` in the list, using each amount, from a common coldkey. Arguments: subtensor: The initialized SubtensorInterface object. @@ -531,6 +583,9 @@

    Source code for bittensor.core.extrinsics.asyncex.staking

    if the extrinsic fails to enter the block within the timeout. wait_for_finalization: If set, waits for the extrinsic to be finalized on the chain before returning `True`, or returns `False` if the extrinsic fails to be finalized within the timeout. + period: The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: success: `True` if extrinsic was finalized or included in the block. `True` if any wallet was staked. If we did @@ -642,33 +697,20 @@

    Source code for bittensor.core.extrinsics.asyncex.staking

    "netuid": netuid, }, ) - staking_response, err_msg = await subtensor.sign_and_send_extrinsic( - call, - wallet, - wait_for_inclusion, - wait_for_finalization, + success, message = await subtensor.sign_and_send_extrinsic( + call=call, + wallet=wallet, + wait_for_inclusion=wait_for_inclusion, + wait_for_finalization=wait_for_finalization, nonce_key="coldkeypub", sign_with="coldkey", use_nonce=True, + period=period, ) - if staking_response is True: # If we successfully staked. + if success is True: # If we successfully staked. # We only wait here if we expect finalization. - if idx < len(hotkey_ss58s) - 1: - # Wait for tx rate limit. - tx_query = await subtensor.substrate.query( - module="SubtensorModule", storage_function="TxRateLimit" - ) - tx_rate_limit_blocks: int = getattr(tx_query, "value", 0) - if tx_rate_limit_blocks > 0: - logging.error( - f":hourglass: [yellow]Waiting for tx rate limit: [white]{tx_rate_limit_blocks}[/white] " - f"blocks[/yellow]" - ) - # 12 seconds per block - await asyncio.sleep(tx_rate_limit_blocks * 12) - if not wait_for_finalization and not wait_for_inclusion: old_balance -= staking_balance successful_stakes += 1 @@ -706,17 +748,14 @@

    Source code for bittensor.core.extrinsics.asyncex.staking

    break else: - logging.error(f":cross_mark: [red]Failed: {err_msg}.[/red]") + logging.error(f":cross_mark: [red]Failed: {message}.[/red]") continue - except NotRegisteredError: + except SubstrateRequestException as error: logging.error( - f":cross_mark: [red]Hotkey: {hotkey_ss58} is not registered.[/red]" + f":cross_mark: [red]Add Stake Multiple error: {format_error_message(error)}[/red]" ) continue - except StakeError as e: - logging.error(f":cross_mark: [red]Stake Error: {e}[/red]") - continue if successful_stakes != 0: logging.info( diff --git a/static/python-api/html/_modules/bittensor/core/extrinsics/asyncex/start_call.html b/static/python-api/html/_modules/bittensor/core/extrinsics/asyncex/start_call.html new file mode 100644 index 0000000000..8a0398b7e0 --- /dev/null +++ b/static/python-api/html/_modules/bittensor/core/extrinsics/asyncex/start_call.html @@ -0,0 +1,474 @@ + + + + + + + + + + bittensor.core.extrinsics.asyncex.start_call — Bittensor SDK Docs documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + +
    + +
    + + + + + +
    +
    + + + + + + + + +
    + + + +
    + +
    +
    + +
    +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + + +
    +

    + +
    +
    + +
    +
    +
    + + + + +
    + +

    Source code for bittensor.core.extrinsics.asyncex.start_call

    +from typing import TYPE_CHECKING, Optional
    +
    +from bittensor.utils import unlock_key
    +from bittensor.utils.btlogging import logging
    +
    +if TYPE_CHECKING:
    +    from bittensor_wallet import Wallet
    +    from bittensor.core.async_subtensor import AsyncSubtensor
    +
    +
    +
    +[docs] +async def start_call_extrinsic( + subtensor: "AsyncSubtensor", + wallet: "Wallet", + netuid: int, + wait_for_inclusion: bool = True, + wait_for_finalization: bool = False, + period: Optional[int] = None, +) -> tuple[bool, str]: + """ + Submits a start_call extrinsic to the blockchain, to trigger the start call process for a subnet (used to start a + new subnet's emission mechanism). + + Args: + subtensor (Subtensor): The Subtensor client instance used for blockchain interaction. + wallet (Wallet): The wallet used to sign the extrinsic (must be unlocked). + netuid (int): The UID of the target subnet for which the call is being initiated. + wait_for_inclusion (bool, optional): Whether to wait for the extrinsic to be included in a block. Defaults to True. + wait_for_finalization (bool, optional): Whether to wait for finalization of the extrinsic. Defaults to False. + period: The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. + + Returns: + Tuple[bool, str]: + - True and a success message if the extrinsic is successfully submitted or processed. + - False and an error message if the submission fails or the wallet cannot be unlocked. + """ + if not (unlock := unlock_key(wallet)).success: + logging.error(unlock.message) + return False, unlock.message + + async with subtensor.substrate as substrate: + start_call = await substrate.compose_call( + call_module="SubtensorModule", + call_function="start_call", + call_params={"netuid": netuid}, + ) + + success, message = await subtensor.sign_and_send_extrinsic( + call=start_call, + wallet=wallet, + wait_for_inclusion=wait_for_inclusion, + wait_for_finalization=wait_for_finalization, + period=period, + ) + + if not wait_for_finalization and not wait_for_inclusion: + return True, message + + if success: + return True, "Success with `start_call` response." + + return True, message
    + +
    + +
    + + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + + +
    + + +
    +
    +
    + + + + + +
    +
    + + \ No newline at end of file diff --git a/static/python-api/html/_modules/bittensor/core/extrinsics/asyncex/transfer.html b/static/python-api/html/_modules/bittensor/core/extrinsics/asyncex/transfer.html index 6a4796ccea..c7d9d3ebf3 100644 --- a/static/python-api/html/_modules/bittensor/core/extrinsics/asyncex/transfer.html +++ b/static/python-api/html/_modules/bittensor/core/extrinsics/asyncex/transfer.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -335,11 +338,10 @@

    Source code for bittensor.core.extrinsics.asyncex.transfer

     import asyncio
    -from typing import TYPE_CHECKING
    +from typing import TYPE_CHECKING, Optional
     
     from bittensor.core.settings import NETWORK_EXPLORER_MAP
     from bittensor.utils import (
    -    format_error_message,
         get_explorer_url_for_network,
         is_valid_bittensor_address_or_public_key,
         unlock_key,
    @@ -359,6 +361,7 @@ 

    Source code for bittensor.core.extrinsics.asyncex.transfer

    amount: "Balance", wait_for_inclusion: bool = True, wait_for_finalization: bool = False, + period: Optional[int] = None, ) -> tuple[bool, str, str]: """ Makes transfer from wallet to destination public key address. @@ -370,35 +373,39 @@

    Source code for bittensor.core.extrinsics.asyncex.transfer

    amount (bittensor.utils.balance.Balance): Amount to stake as Bittensor balance. wait_for_inclusion (bool): If set, waits for the extrinsic to enter a block before returning `True`, or returns `False` if the extrinsic fails to enter the block within the timeout. - wait_for_finalization (bool): If set, waits for the extrinsic to be finalized on the chain before returning + wait_for_finalization (bool): If set, waits for the extrinsic to be finalized on the chain before returning `True`, or returns `False` if the extrinsic fails to be finalized within the timeout. + period (Optional[int]): The number of blocks during which the transaction will remain valid after it's submitted. + If the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: success, block hash, formatted error message """ call = await subtensor.substrate.compose_call( call_module="Balances", - call_function="transfer_allow_death", + call_function="transfer_keep_alive", call_params={"dest": destination, "value": amount.rao}, ) - extrinsic = await subtensor.substrate.create_signed_extrinsic( - call=call, keypair=wallet.coldkey - ) - response = await subtensor.substrate.submit_extrinsic( - extrinsic=extrinsic, + + success, message = await subtensor.sign_and_send_extrinsic( + call=call, + wallet=wallet, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + period=period, ) + # We only wait here if we expect finalization. if not wait_for_finalization and not wait_for_inclusion: - return True, "", "Success, extrinsic submitted without waiting." + return True, "", message # Otherwise continue with finalization. - if await response.is_success: - block_hash_ = response.block_hash + if success: + block_hash_ = await subtensor.get_block_hash() return True, block_hash_, "Success with response." - return False, "", format_error_message(await response.error_message) + return False, "", message
    @@ -412,6 +419,7 @@

    Source code for bittensor.core.extrinsics.asyncex.transfer

    wait_for_inclusion: bool = True, wait_for_finalization: bool = False, keep_alive: bool = True, + period: Optional[int] = None, ) -> bool: """Transfers funds from this wallet to the destination public key address. @@ -423,9 +431,12 @@

    Source code for bittensor.core.extrinsics.asyncex.transfer

    transfer_all (bool): Whether to transfer all funds from this wallet to the destination address. wait_for_inclusion (bool): If set, waits for the extrinsic to enter a block before returning `True`, or returns `False` if the extrinsic fails to enter the block within the timeout. - wait_for_finalization (bool): If set, waits for the extrinsic to be finalized on the chain before returning + wait_for_finalization (bool): If set, waits for the extrinsic to be finalized on the chain before returning `True`, or returns `False` if the extrinsic fails to be finalized within the timeout. keep_alive (bool): If set, keeps the account alive by keeping the balance above the existential deposit. + period (Optional[int]): The number of blocks during which the transaction will remain valid after it's submitted. + If the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: success (bool): Flag is `True` if extrinsic was finalized or included in the block. If we did not wait for @@ -438,6 +449,7 @@

    Source code for bittensor.core.extrinsics.asyncex.transfer

    f":cross_mark: [red]Invalid destination SS58 address[/red]: {destination}" ) return False + logging.info(f"Initiating transfer on network: {subtensor.network}") # Unlock wallet coldkey. if not (unlock := unlock_key(wallet)).success: @@ -486,6 +498,7 @@

    Source code for bittensor.core.extrinsics.asyncex.transfer

    amount=amount, wait_for_finalization=wait_for_finalization, wait_for_inclusion=wait_for_inclusion, + period=period, ) if success: @@ -511,9 +524,9 @@

    Source code for bittensor.core.extrinsics.asyncex.transfer

    f"Balance: [blue]{account_balance}[/blue] :arrow_right: [green]{new_balance}[/green]" ) return True - else: - logging.error(f":cross_mark: [red]Failed[/red]: {err_msg}") - return False
    + + logging.error(f":cross_mark: [red]Failed[/red]: {err_msg}") + return False
    diff --git a/static/python-api/html/_modules/bittensor/core/extrinsics/asyncex/unstaking.html b/static/python-api/html/_modules/bittensor/core/extrinsics/asyncex/unstaking.html index 7b9811675c..e4ee774af8 100644 --- a/static/python-api/html/_modules/bittensor/core/extrinsics/asyncex/unstaking.html +++ b/static/python-api/html/_modules/bittensor/core/extrinsics/asyncex/unstaking.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -337,11 +340,12 @@

    Source code for bittensor.core.extrinsics.asyncex.unstaking

    import asyncio from typing import Optional, TYPE_CHECKING -from bittensor.core.errors import StakeError, NotRegisteredError -from bittensor.utils import unlock_key +from async_substrate_interface.errors import SubstrateRequestException + +from bittensor.core.extrinsics.utils import get_old_stakes +from bittensor.utils import unlock_key, format_error_message from bittensor.utils.balance import Balance from bittensor.utils.btlogging import logging -from bittensor.core.extrinsics.utils import get_old_stakes if TYPE_CHECKING: from bittensor_wallet import Wallet @@ -358,25 +362,41 @@

    Source code for bittensor.core.extrinsics.asyncex.unstaking

    amount: Optional[Balance] = None, wait_for_inclusion: bool = True, wait_for_finalization: bool = False, + safe_staking: bool = False, + allow_partial_stake: bool = False, + rate_tolerance: float = 0.005, + period: Optional[int] = None, + unstake_all: bool = False, ) -> bool: """Removes stake into the wallet coldkey from the specified hotkey ``uid``. Args: - subtensor (bittensor.core.async_subtensor.AsyncSubtensor): AsyncSubtensor instance. - wallet (bittensor_wallet.Wallet): Bittensor wallet object. - hotkey_ss58 (Optional[str]): The ``ss58`` address of the hotkey to unstake from. By default, the wallet hotkey - is used. - netuid (Optional[int]): The subnet uid to unstake from. - amount (Union[Balance, float]): Amount to stake as Bittensor balance, or ``float`` interpreted as Tao. - wait_for_inclusion (bool): If set, waits for the extrinsic to enter a block before returning ``True``, or - returns ``False`` if the extrinsic fails to enter the block within the timeout. - wait_for_finalization (bool): If set, waits for the extrinsic to be finalized on the chain before returning - ``True``, or returns ``False`` if the extrinsic fails to be finalized within the timeout. + subtensor: AsyncSubtensor instance. + wallet: Bittensor wallet object. + hotkey_ss58: The ``ss58`` address of the hotkey to unstake from. By default, the wallet hotkey is used. + netuid: The subnet uid to unstake from. + amount: Amount to stake as Bittensor balance, or ``float`` interpreted as Tao. + wait_for_inclusion: If set, waits for the extrinsic to enter a block before returning ``True``, or returns + ``False`` if the extrinsic fails to enter the block within the timeout. + wait_for_finalization: If set, waits for the extrinsic to be finalized on the chain before returning ``True``, + or returns ``False`` if the extrinsic fails to be finalized within the timeout. + safe_staking: If true, enables price safety checks + allow_partial_stake: If true, allows partial unstaking if price tolerance exceeded + rate_tolerance: Maximum allowed price decrease percentage (0.005 = 0.5%) + period: The number of blocks during which the transaction will remain valid after it's submitted. If the + transaction is not included in a block within that number of blocks, it will expire and be rejected. You can + think of it as an expiration date for the transaction. + unstake_all: If true, unstakes all tokens. Default is ``False``. Returns: - success (bool): Flag is ``True`` if extrinsic was finalized or included in the block. If we did not wait for - finalization / inclusion, the response is ``True``. + tuple[bool, str]: + A tuple containing: + - `True` and a success message if the unstake operation succeeded; + - `False` and an error message otherwise. """ + if amount and unstake_all: + raise ValueError("Cannot specify both `amount` and `unstake_all`.") + # Decrypt keys, if not (unlock := unlock_key(wallet)).success: logging.error(unlock.message) @@ -421,31 +441,63 @@

    Source code for bittensor.core.extrinsics.asyncex.unstaking

    return False try: - logging.info( - f"Unstaking [blue]{unstaking_balance}[/blue] from hotkey: [magenta]{hotkey_ss58}[/magenta] on netuid: " - f"[blue]{netuid}[/blue]" - ) + call_params = { + "hotkey": hotkey_ss58, + "netuid": netuid, + "amount_unstaked": unstaking_balance.rao, + } + if safe_staking: + pool = await subtensor.subnet(netuid=netuid) + base_price = pool.price.tao + + if pool.netuid == 0: + price_with_tolerance = base_price + else: + price_with_tolerance = base_price * (1 - rate_tolerance) + + logging.info( + f":satellite: [magenta]Safe Unstaking from:[/magenta] " + f"netuid: [green]{netuid}[/green], amount: [green]{unstaking_balance}[/green], " + f"tolerance percentage: [green]{rate_tolerance * 100}%[/green], " + f"price limit: [green]{price_with_tolerance}[/green], " + f"original price: [green]{base_price}[/green], " + f"with partial unstake: [green]{allow_partial_stake}[/green] " + f"on [blue]{subtensor.network}[/blue][magenta]...[/magenta]" + ) + + limit_price = Balance.from_tao(price_with_tolerance).rao + call_params.update( + { + "limit_price": limit_price, + "allow_partial": allow_partial_stake, + } + ) + call_function = "remove_stake_limit" + else: + logging.info( + f":satellite: [magenta]Unstaking from:[/magenta] " + f"netuid: [green]{netuid}[/green], amount: [green]{unstaking_balance}[/green] " + f"on [blue]{subtensor.network}[/blue][magenta]...[/magenta]" + ) + call_function = "remove_stake" call = await subtensor.substrate.compose_call( call_module="SubtensorModule", - call_function="remove_stake", - call_params={ - "hotkey": hotkey_ss58, - "amount_unstaked": unstaking_balance.rao, - "netuid": netuid, - }, + call_function=call_function, + call_params=call_params, ) - staking_response, err_msg = await subtensor.sign_and_send_extrinsic( - call, - wallet, - wait_for_inclusion, - wait_for_finalization, + success, message = await subtensor.sign_and_send_extrinsic( + call=call, + wallet=wallet, + wait_for_inclusion=wait_for_inclusion, + wait_for_finalization=wait_for_finalization, nonce_key="coldkeypub", sign_with="coldkey", use_nonce=True, + period=period, ) - if staking_response is True: # If we successfully unstaked. + if success is True: # If we successfully unstaked. # We only wait here if we expect finalization. if not wait_for_finalization and not wait_for_inclusion: return True @@ -476,20 +528,90 @@

    Source code for bittensor.core.extrinsics.asyncex.unstaking

    ) return True else: - logging.error(f":cross_mark: [red]Failed: {err_msg}.[/red]") + if safe_staking and "Custom error: 8" in message: + logging.error( + ":cross_mark: [red]Failed[/red]: Price exceeded tolerance limit. Either increase price tolerance or enable partial staking." + ) + else: + logging.error(f":cross_mark: [red]Failed: {message}.[/red]") return False - except NotRegisteredError: + except SubstrateRequestException as error: logging.error( - f":cross_mark: [red]Hotkey: {wallet.hotkey_str} is not registered.[/red]" + f":cross_mark: [red]Unstake filed with error: {format_error_message(error)}[/red]" ) - return False - except StakeError as e: - logging.error(f":cross_mark: [red]Stake Error: {e}[/red]") return False
    +
    +[docs] +async def unstake_all_extrinsic( + subtensor: "AsyncSubtensor", + wallet: "Wallet", + hotkey: str, + netuid: int, + rate_tolerance: Optional[float] = 0.005, + wait_for_inclusion: bool = True, + wait_for_finalization: bool = False, + period: Optional[int] = None, +) -> tuple[bool, str]: + """Unstakes all TAO/Alpha associated with a hotkey from the specified subnets on the Bittensor network. + + Arguments: + subtensor: Subtensor instance. + wallet: The wallet of the stake owner. + hotkey: The SS58 address of the hotkey to unstake from. + netuid: The unique identifier of the subnet. + rate_tolerance: The maximum allowed price change ratio when unstaking. For example, 0.005 = 0.5% maximum + price decrease. If not passed (None), then unstaking goes without price limit. Default is `0.005`. + wait_for_inclusion: Waits for the transaction to be included in a block. Default is `True`. + wait_for_finalization: Waits for the transaction to be finalized on the blockchain. Default is `False`. + period: The number of blocks during which the transaction will remain valid after it's submitted. If the + transaction is not included in a block within that number of blocks, it will expire and be rejected. You can + think of it as an expiration date for the transaction. Default is `None`. + + Returns: + tuple[bool, str]: + A tuple containing: + - `True` and a success message if the unstake operation succeeded; + - `False` and an error message otherwise. + """ + if not (unlock := unlock_key(wallet)).success: + logging.error(unlock.message) + return False, unlock.message + + call_params = { + "hotkey": hotkey, + "netuid": netuid, + "limit_price": None, + } + + if rate_tolerance: + current_price = (await subtensor.subnet(netuid=netuid)).price + limit_price = current_price * (1 - rate_tolerance) + call_params.update({"limit_price": limit_price}) + + async with subtensor.substrate as substrate: + call = await substrate.compose_call( + call_module="SubtensorModule", + call_function="remove_stake_full_limit", + call_params=call_params, + ) + + return await subtensor.sign_and_send_extrinsic( + call=call, + wallet=wallet, + wait_for_inclusion=wait_for_inclusion, + wait_for_finalization=wait_for_finalization, + nonce_key="coldkeypub", + sign_with="coldkey", + use_nonce=True, + period=period, + )
    + + +
    [docs] async def unstake_multiple_extrinsic( @@ -500,24 +622,35 @@

    Source code for bittensor.core.extrinsics.asyncex.unstaking

    amounts: Optional[list[Balance]] = None, wait_for_inclusion: bool = True, wait_for_finalization: bool = False, + period: Optional[int] = None, + unstake_all: bool = False, ) -> bool: """Removes stake from each ``hotkey_ss58`` in the list, using each amount, to a common coldkey. Args: - subtensor (bittensor.core.subtensor.Subtensor): Subtensor instance. - wallet (bittensor_wallet.Wallet): The wallet with the coldkey to unstake to. - hotkey_ss58s (List[str]): List of hotkeys to unstake from. - netuids (List[int]): List of netuids to unstake from. - amounts (List[Union[Balance, float]]): List of amounts to unstake. If ``None``, unstake all. - wait_for_inclusion (bool): If set, waits for the extrinsic to enter a block before returning ``True``, or + subtensor: Subtensor instance. + wallet: The wallet with the coldkey to unstake to. + hotkey_ss58s: List of hotkeys to unstake from. + netuids: List of netuids to unstake from. + amounts: List of amounts to unstake. If ``None``, unstake all. + wait_for_inclusion: If set, waits for the extrinsic to enter a block before returning ``True``, or returns ``False`` if the extrinsic fails to enter the block within the timeout. - wait_for_finalization (bool): If set, waits for the extrinsic to be finalized on the chain before returning + wait_for_finalization: If set, waits for the extrinsic to be finalized on the chain before returning ``True``, or returns ``False`` if the extrinsic fails to be finalized within the timeout. + period: The number of blocks during which the transaction will remain valid after it's submitted. If the + transaction is not included in a block within that number of blocks, it will expire and be rejected. You can + think of it as an expiration date for the transaction. + unstake_all: If true, unstakes all tokens. Default is ``False``. Returns: - success (bool): Flag is ``True`` if extrinsic was finalized or included in the block. Flag is ``True`` if any - wallet was unstaked. If we did not wait for finalization / inclusion, the response is ``True``. + tuple[bool, str]: + A tuple containing: + - `True` and a success message if the unstake operation succeeded; + - `False` and an error message otherwise. """ + if amounts and unstake_all: + raise ValueError("Cannot specify both `amounts` and `unstake_all`.") + if not isinstance(hotkey_ss58s, list) or not all( isinstance(hotkey_ss58, str) for hotkey_ss58 in hotkey_ss58s ): @@ -574,7 +707,7 @@

    Source code for bittensor.core.extrinsics.asyncex.unstaking

    for idx, (hotkey_ss58, amount, old_stake, netuid) in enumerate( zip(hotkey_ss58s, amounts, old_stakes, netuids) ): - # Covert to bittensor.Balance + # Convert to bittensor.Balance if amount is None: # Unstake it all. unstaking_balance = old_stake @@ -610,30 +743,19 @@

    Source code for bittensor.core.extrinsics.asyncex.unstaking

    ) staking_response, err_msg = await subtensor.sign_and_send_extrinsic( - call, - wallet, - wait_for_inclusion, - wait_for_finalization, + call=call, + wallet=wallet, + wait_for_inclusion=wait_for_inclusion, + wait_for_finalization=wait_for_finalization, nonce_key="coldkeypub", sign_with="coldkey", use_nonce=True, + period=period, ) if staking_response is True: # If we successfully unstaked. # We only wait here if we expect finalization. - if idx < len(hotkey_ss58s) - 1: - # Wait for tx rate limit. - tx_rate_limit_blocks = await subtensor.tx_rate_limit() - if tx_rate_limit_blocks > 0: - logging.info( - f":hourglass: [yellow]Waiting for tx rate limit: " - f"[white]{tx_rate_limit_blocks}[/white] blocks[/yellow]" - ) - await asyncio.sleep( - tx_rate_limit_blocks * 12 - ) # 12 seconds per block - if not wait_for_finalization and not wait_for_inclusion: successful_unstakes += 1 continue @@ -659,14 +781,11 @@

    Source code for bittensor.core.extrinsics.asyncex.unstaking

    logging.error(f":cross_mark: [red]Failed: {err_msg}.[/red]") continue - except NotRegisteredError: + except SubstrateRequestException as error: logging.error( - f":cross_mark: [red]Hotkey[/red] [blue]{hotkey_ss58}[/blue] [red]is not registered.[/red]" + f":cross_mark: [red]Multiple unstake filed with error: {format_error_message(error)}[/red]" ) - continue - except StakeError as e: - logging.error(f":cross_mark: [red]Stake Error: {e}[/red]") - continue + return False if successful_unstakes != 0: logging.info( diff --git a/static/python-api/html/_modules/bittensor/core/extrinsics/asyncex/weights.html b/static/python-api/html/_modules/bittensor/core/extrinsics/asyncex/weights.html index 2ab2f21a78..add2a594fc 100644 --- a/static/python-api/html/_modules/bittensor/core/extrinsics/asyncex/weights.html +++ b/static/python-api/html/_modules/bittensor/core/extrinsics/asyncex/weights.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -341,10 +344,9 @@

    Source code for bittensor.core.extrinsics.asyncex.weights

    import numpy as np from numpy.typing import NDArray -import bittensor.utils.weight_utils as weight_utils from bittensor.core.settings import version_as_int -from bittensor.utils import format_error_message from bittensor.utils.btlogging import logging +from bittensor.utils.weight_utils import convert_and_normalize_weights_and_uids if TYPE_CHECKING: from bittensor_wallet import Wallet @@ -359,22 +361,27 @@

    Source code for bittensor.core.extrinsics.asyncex.weights

    commit_hash: str, wait_for_inclusion: bool = False, wait_for_finalization: bool = False, -) -> tuple[bool, Optional[str]]: + period: Optional[int] = None, +) -> tuple[bool, str]: """ Internal method to send a transaction to the Bittensor blockchain, committing the hash of a neuron's weights. This method constructs and submits the transaction, handling retries and blockchain communication. Args: - subtensor (bittensor.core.async_subtensor.AsyncSubtensor): The subtensor instance used for blockchain - interaction. + subtensor (bittensor.core.async_subtensor.AsyncSubtensor): The subtensor instance used for blockchain interaction. wallet (bittensor_wallet.Wallet): The wallet associated with the neuron committing the weights. netuid (int): The unique identifier of the subnet. commit_hash (str): The hash of the neuron's weights to be committed. wait_for_inclusion (bool): Waits for the transaction to be included in a block. wait_for_finalization (bool): Waits for the transaction to be finalized on the blockchain. + period (Optional[int]): The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: - tuple[bool, Optional[str]]: A tuple containing a success flag and an optional error message. + tuple[bool, str]: + `True` if the weight commitment is successful, `False` otherwise. + `msg` is a string value describing the success or potential error. This method ensures that the weight commitment is securely recorded on the Bittensor blockchain, providing a verifiable record of the neuron's weight distribution at a specific point in time. @@ -388,11 +395,12 @@

    Source code for bittensor.core.extrinsics.asyncex.weights

    }, ) return await subtensor.sign_and_send_extrinsic( - call, - wallet, - wait_for_inclusion, - wait_for_finalization, + call=call, + wallet=wallet, + wait_for_inclusion=wait_for_inclusion, + wait_for_finalization=wait_for_finalization, use_nonce=True, + period=period, nonce_key="hotkey", sign_with="hotkey", ) @@ -407,6 +415,7 @@

    Source code for bittensor.core.extrinsics.asyncex.weights

    commit_hash: str, wait_for_inclusion: bool = False, wait_for_finalization: bool = False, + period: Optional[int] = None, ) -> tuple[bool, str]: """ Commits a hash of the neuron's weights to the Bittensor blockchain using the provided wallet. @@ -420,15 +429,18 @@

    Source code for bittensor.core.extrinsics.asyncex.weights

    commit_hash (str): The hash of the neuron's weights to be committed. wait_for_inclusion (bool): Waits for the transaction to be included in a block. wait_for_finalization (bool): Waits for the transaction to be finalized on the blockchain. + period (Optional[int]): The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: - tuple[bool, str]: ``True`` if the weight commitment is successful, False otherwise. And `msg`, a string - value describing the success or potential error. + tuple[bool, str]: + `True` if the weight commitment is successful, `False` otherwise. + `msg` is a string value describing the success or potential error. This function provides a user-friendly interface for committing weights to the Bittensor blockchain, ensuring proper error handling and user interaction when required. """ - success, error_message = await _do_commit_weights( subtensor=subtensor, wallet=wallet, @@ -436,6 +448,7 @@

    Source code for bittensor.core.extrinsics.asyncex.weights

    commit_hash=commit_hash, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + period=period, ) if success: @@ -458,7 +471,8 @@

    Source code for bittensor.core.extrinsics.asyncex.weights

    version_key: int, wait_for_inclusion: bool = False, wait_for_finalization: bool = False, -) -> tuple[bool, Optional[dict]]: + period: Optional[int] = None, +) -> tuple[bool, str]: """ Internal method to send a transaction to the Bittensor blockchain, revealing the weights for a specific subnet. This method constructs and submits the transaction, handling retries and blockchain communication. @@ -474,14 +488,18 @@

    Source code for bittensor.core.extrinsics.asyncex.weights

    version_key (int): Version key for compatibility with the network. wait_for_inclusion (bool): Waits for the transaction to be included in a block. wait_for_finalization (bool): Waits for the transaction to be finalized on the blockchain. + period (Optional[int]): The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: - tuple[bool, Optional[str]]: A tuple containing a success flag and an optional error message. + tuple[bool, str]: + `True` if the weight commitment is successful, `False` otherwise. + `msg` is a string value describing the success or potential error. This method ensures that the weight revelation is securely recorded on the Bittensor blockchain, providing transparency and accountability for the neuron's weight distribution. """ - call = await subtensor.substrate.compose_call( call_module="SubtensorModule", call_function="reveal_weights", @@ -494,11 +512,12 @@

    Source code for bittensor.core.extrinsics.asyncex.weights

    }, ) return await subtensor.sign_and_send_extrinsic( - call, - wallet, - wait_for_inclusion, - wait_for_finalization, + call=call, + wallet=wallet, + wait_for_inclusion=wait_for_inclusion, + wait_for_finalization=wait_for_finalization, sign_with="hotkey", + period=period, nonce_key="hotkey", use_nonce=True, ) @@ -516,14 +535,14 @@

    Source code for bittensor.core.extrinsics.asyncex.weights

    version_key: int, wait_for_inclusion: bool = False, wait_for_finalization: bool = False, + period: Optional[int] = None, ) -> tuple[bool, str]: """ Reveals the weights for a specific subnet on the Bittensor blockchain using the provided wallet. This function is a wrapper around the `_do_reveal_weights` method. Args: - subtensor (bittensor.core.async_subtensor.AsyncSubtensor): The subtensor instance used for blockchain - interaction. + subtensor (bittensor.core.async_subtensor.AsyncSubtensor): The subtensor instance used for blockchain interaction. wallet (bittensor_wallet.Wallet): The wallet associated with the neuron revealing the weights. netuid (int): The unique identifier of the subnet. uids (list[int]): List of neuron UIDs for which weights are being revealed. @@ -532,15 +551,18 @@

    Source code for bittensor.core.extrinsics.asyncex.weights

    version_key (int): Version key for compatibility with the network. wait_for_inclusion (bool): Waits for the transaction to be included in a block. wait_for_finalization (bool): Waits for the transaction to be finalized on the blockchain. + period (Optional[int]): The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: - tuple[bool, str]: ``True`` if the weight revelation is successful, False otherwise. And `msg`, a string value - describing the success or potential error. + tuple[bool, str]: + `True` if the weight commitment is successful, `False` otherwise. + `msg` is a string value describing the success or potential error. This function provides a user-friendly interface for revealing weights on the Bittensor blockchain, ensuring proper error handling and user interaction when required. """ - success, error_message = await _do_reveal_weights( subtensor=subtensor, wallet=wallet, @@ -551,6 +573,7 @@

    Source code for bittensor.core.extrinsics.asyncex.weights

    version_key=version_key, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + period=period, ) if success: @@ -558,7 +581,6 @@

    Source code for bittensor.core.extrinsics.asyncex.weights

    logging.info(success_message) return True, success_message - error_message = format_error_message(error_message) logging.error(f"Failed to reveal weights: {error_message}") return False, error_message
    @@ -573,12 +595,11 @@

    Source code for bittensor.core.extrinsics.asyncex.weights

    version_key: int = version_as_int, wait_for_inclusion: bool = False, wait_for_finalization: bool = False, - period: int = 5, -) -> tuple[bool, Optional[str]]: # (success, error_message) + period: Optional[int] = None, +) -> tuple[bool, str]: # (success, error_message) """ - Internal method to send a transaction to the Bittensor blockchain, setting weights - for specified neurons. This method constructs and submits the transaction, handling - retries and blockchain communication. + Internal method to send a transaction to the Bittensor blockchain, setting weights for specified neurons. This + method constructs and submits the transaction, handling retries and blockchain communication. Args: subtensor (subtensor.core.async_subtensor.AsyncSubtensor): Async Subtensor instance. @@ -589,15 +610,18 @@

    Source code for bittensor.core.extrinsics.asyncex.weights

    version_key (int, optional): Version key for compatibility with the network. wait_for_inclusion (bool, optional): Waits for the transaction to be included in a block. wait_for_finalization (bool, optional): Waits for the transaction to be finalized on the blockchain. - period (int, optional): The period in seconds to wait for extrinsic inclusion or finalization. Defaults to 5. + period (Optional[int]): The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: - Tuple[bool, Optional[str]]: A tuple containing a success flag and an optional error message. + tuple[bool, str]: + `True` if the weight commitment is successful, `False` otherwise. + `msg` is a string value describing the success or potential error. This method is vital for the dynamic weighting mechanism in Bittensor, where neurons adjust their trust in other neurons based on observed performance and contributions. """ - call = await subtensor.substrate.compose_call( call_module="SubtensorModule", call_function="set_weights", @@ -608,17 +632,25 @@

    Source code for bittensor.core.extrinsics.asyncex.weights

    "version_key": version_key, }, ) - return await subtensor.sign_and_send_extrinsic( - call, - wallet, - wait_for_inclusion, - wait_for_finalization, + success, message = await subtensor.sign_and_send_extrinsic( + call=call, + wallet=wallet, + wait_for_inclusion=wait_for_inclusion, + wait_for_finalization=wait_for_finalization, period=period, use_nonce=True, nonce_key="hotkey", sign_with="hotkey", ) + # We only wait here if we expect finalization. + if not wait_for_finalization and not wait_for_inclusion: + return True, "Not waiting for finalization or inclusion." + + if success: + return success, "Successfully set weights." + return success, message +
    [docs] @@ -631,8 +663,9 @@

    Source code for bittensor.core.extrinsics.asyncex.weights

    version_key: int = 0, wait_for_inclusion: bool = False, wait_for_finalization: bool = False, + period: Optional[int] = 8, ) -> tuple[bool, str]: - """Sets the given weights and values on chain for wallet hotkey account. + """Sets the given weights and values on chain for a given wallet hotkey account. Args: subtensor (bittensor.core.async_subtensor.AsyncSubtensor): Bittensor subtensor object. @@ -646,27 +679,24 @@

    Source code for bittensor.core.extrinsics.asyncex.weights

    returns ``False`` if the extrinsic fails to enter the block within the timeout. wait_for_finalization (bool): If set, waits for the extrinsic to be finalized on the chain before returning ``True``, or returns ``False`` if the extrinsic fails to be finalized within the timeout. + period (Optional[int]): The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: - success (bool): Flag is ``True`` if extrinsic was finalized or included in the block. If we did not wait for - finalization / inclusion, the response is ``True``. + tuple[bool, str]: + `True` if the weight commitment is successful, `False` otherwise. + `msg` is a string value describing the success or potential error. """ - # First convert types. - if isinstance(uids, list): - uids = np.array(uids, dtype=np.int64) - if isinstance(weights, list): - weights = np.array(weights, dtype=np.float32) - - # Reformat and normalize. - weight_uids, weight_vals = weight_utils.convert_weights_and_uids_for_emit( - uids, weights - ) + weight_uids, weight_vals = convert_and_normalize_weights_and_uids(uids, weights) logging.info( - ":satellite: [magenta]Setting weights on [/magenta][blue]{subtensor.network}[/blue] [magenta]...[/magenta]" + f":satellite: [magenta]Setting weights on [/magenta]" + f"[blue]{subtensor.network}[/blue] " + f"[magenta]...[/magenta]" ) try: - success, error_message = await _do_set_weights( + success, message = await _do_set_weights( subtensor=subtensor, wallet=wallet, netuid=netuid, @@ -675,18 +705,19 @@

    Source code for bittensor.core.extrinsics.asyncex.weights

    version_key=version_key, wait_for_finalization=wait_for_finalization, wait_for_inclusion=wait_for_inclusion, + period=period, ) if not wait_for_finalization and not wait_for_inclusion: - return True, "Not waiting for finalization or inclusion." + return True, message if success is True: message = "Successfully set weights and Finalized." logging.success(f":white_heavy_check_mark: [green]{message}[/green]") return True, message - logging.error(f"[red]Failed[/red] set weights. Error: {error_message}") - return False, error_message + logging.error(f"[red]Failed[/red] set weights. Error: {message}") + return False, message except Exception as error: logging.error(f":cross_mark: [red]Failed[/red] set weights. Error: {error}") diff --git a/static/python-api/html/_modules/bittensor/core/extrinsics/commit_reveal.html b/static/python-api/html/_modules/bittensor/core/extrinsics/children.html similarity index 56% rename from static/python-api/html/_modules/bittensor/core/extrinsics/commit_reveal.html rename to static/python-api/html/_modules/bittensor/core/extrinsics/children.html index 79a881fbb0..3250ed58ba 100644 --- a/static/python-api/html/_modules/bittensor/core/extrinsics/commit_reveal.html +++ b/static/python-api/html/_modules/bittensor/core/extrinsics/children.html @@ -7,7 +7,7 @@ - bittensor.core.extrinsics.commit_reveal — Bittensor SDK Docs documentation + bittensor.core.extrinsics.children — Bittensor SDK Docs documentation @@ -44,7 +44,7 @@ - + @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -263,7 +266,7 @@ -
  • -

    Source code for bittensor.core.extrinsics.commit_reveal

    -"""This module provides sync functionality for commit reveal in the Bittensor network."""
    -
    -from typing import Union, TYPE_CHECKING, Optional
    -
    -from bittensor_commit_reveal import get_encrypted_commit
    -import numpy as np
    -from numpy.typing import NDArray
    -
    -from bittensor.core.settings import version_as_int
    -from bittensor.utils.btlogging import logging
    -from bittensor.utils.weight_utils import convert_weights_and_uids_for_emit
    +  

    Source code for bittensor.core.extrinsics.children

    +from typing import TYPE_CHECKING, Optional
    +from bittensor.utils import float_to_u64, unlock_key
     
     if TYPE_CHECKING:
         from bittensor_wallet import Wallet
         from bittensor.core.subtensor import Subtensor
    -    from bittensor.utils.registration import torch
     
     
    -def _do_commit_reveal_v3(
    +
    +[docs] +def set_children_extrinsic( subtensor: "Subtensor", wallet: "Wallet", + hotkey: str, netuid: int, - commit: bytes, - reveal_round: int, - wait_for_inclusion: bool = False, + children: list[tuple[float, str]], + wait_for_inclusion: bool = True, wait_for_finalization: bool = False, -) -> tuple[bool, Optional[str]]: + raise_error: bool = False, + period: Optional[int] = None, +): """ - Executes the commit-reveal phase 3 for a given netuid and commit, and optionally waits for extrinsic inclusion or - finalization. + Allows a coldkey to set children-keys. Arguments: - subtensor: An instance of the Subtensor class. - wallet: Wallet An instance of the Wallet class containing the user's keypair. - netuid: int The network unique identifier. - commit bytes The commit data in bytes format. - reveal_round: int The round number for the reveal phase. - wait_for_inclusion: bool, optional Flag indicating whether to wait for the extrinsic to be included in a block. - wait_for_finalization: bool, optional Flag indicating whether to wait for the extrinsic to be finalized. + subtensor: bittensor subtensor. + wallet: bittensor wallet instance. + hotkey: The ``SS58`` address of the neuron's hotkey. + netuid: The netuid value. + children: A list of children with their proportions. + wait_for_inclusion: Waits for the transaction to be included in a block. + wait_for_finalization: Waits for the transaction to be finalized on the blockchain. + raise_error: Raises a relevant exception rather than returning `False` if unsuccessful. + period: The number of blocks during which the transaction will remain valid after it's submitted. If the + transaction is not included in a block within that number of blocks, it will expire and be rejected. You can + think of it as an expiration date for the transaction. Returns: - A tuple where the first element is a boolean indicating success or failure, and the second element is an - optional string containing error message if any. + tuple[bool, str]: A tuple where the first element is a boolean indicating success or failure of the operation, + and the second element is a message providing additional information. + + Raises: + DuplicateChild: There are duplicates in the list of children. + InvalidChild: Child is the hotkey. + NonAssociatedColdKey: The coldkey does not own the hotkey or the child is the same as the hotkey. + NotEnoughStakeToSetChildkeys: Parent key doesn't have minimum own stake. + ProportionOverflow: The sum of the proportions does exceed uint64. + RegistrationNotPermittedOnRootSubnet: Attempting to register a child on the root network. + SubNetworkDoesNotExist: Attempting to register to a non-existent network. + TooManyChildren: Too many children in request. + TxRateLimitExceeded: Hotkey hit the rate limit. + bittensor_wallet.errors.KeyFileError: Failed to decode keyfile data. + bittensor_wallet.errors.PasswordError: Decryption failed or wrong password for decryption provided. """ - logging.info( - f"Committing weights hash [blue]{commit.hex()}[/blue] for subnet #[blue]{netuid}[/blue] with " - f"reveal round [blue]{reveal_round}[/blue]..." - ) + unlock = unlock_key(wallet, raise_error=raise_error) + + if not unlock.success: + return False, unlock.message call = subtensor.substrate.compose_call( call_module="SubtensorModule", - call_function="commit_crv3_weights", + call_function="set_children", call_params={ + "children": [ + ( + float_to_u64(proportion), + child_hotkey, + ) + for proportion, child_hotkey in children + ], + "hotkey": hotkey, "netuid": netuid, - "commit": commit, - "reveal_round": reveal_round, }, ) - return subtensor.sign_and_send_extrinsic( - call, wallet, wait_for_inclusion, wait_for_finalization, sign_with="hotkey" + + success, message = subtensor.sign_and_send_extrinsic( + call=call, + wallet=wallet, + wait_for_inclusion=wait_for_inclusion, + wait_for_finalization=wait_for_finalization, + raise_error=raise_error, + period=period, ) + if not wait_for_finalization and not wait_for_inclusion: + return True, message + + if success: + return True, "Success with `set_children_extrinsic` response." + + return True, message
    -
    -[docs] -def commit_reveal_v3_extrinsic( + + +
    +[docs] +def root_set_pending_childkey_cooldown_extrinsic( subtensor: "Subtensor", wallet: "Wallet", - netuid: int, - uids: Union[NDArray[np.int64], "torch.LongTensor", list], - weights: Union[NDArray[np.float32], "torch.FloatTensor", list], - version_key: int = version_as_int, - wait_for_inclusion: bool = False, + cooldown: int, + wait_for_inclusion: bool = True, wait_for_finalization: bool = False, + period: Optional[int] = None, ) -> tuple[bool, str]: """ - Commits and reveals weights for given subtensor and wallet with provided uids and weights. + Allows a coldkey to set children-keys. + """ + unlock = unlock_key(wallet) - Arguments: - subtensor: The Subtensor instance. - wallet: The wallet to use for committing and revealing. - netuid: The id of the network. - uids: The uids to commit. - weights: The weights associated with the uids. - version_key: The version key to use for committing and revealing. Default is version_as_int. - wait_for_inclusion: Whether to wait for the inclusion of the transaction. Default is False. - wait_for_finalization: Whether to wait for the finalization of the transaction. Default is False. + if not unlock.success: + return False, unlock.message - Returns: - tuple[bool, str]: A tuple where the first element is a boolean indicating success or failure, and the second - element is a message associated with the result - """ - try: - # Convert uids and weights - if isinstance(uids, list): - uids = np.array(uids, dtype=np.int64) - if isinstance(weights, list): - weights = np.array(weights, dtype=np.float32) - - # Reformat and normalize. - uids, weights = convert_weights_and_uids_for_emit(uids, weights) - - current_block = subtensor.get_current_block() - subnet_hyperparameters = subtensor.get_subnet_hyperparameters( - netuid, block=current_block - ) - tempo = subnet_hyperparameters.tempo - subnet_reveal_period_epochs = subnet_hyperparameters.commit_reveal_period - - # Encrypt `commit_hash` with t-lock and `get reveal_round` - commit_for_reveal, reveal_round = get_encrypted_commit( - uids=uids, - weights=weights, - version_key=version_key, - tempo=tempo, - current_block=current_block, - netuid=netuid, - subnet_reveal_period_epochs=subnet_reveal_period_epochs, - ) + call = subtensor.substrate.compose_call( + call_module="SubtensorModule", + call_function="set_pending_childkey_cooldown", + call_params={"cooldown": cooldown}, + ) - success, message = _do_commit_reveal_v3( - subtensor=subtensor, - wallet=wallet, - netuid=netuid, - commit=commit_for_reveal, - reveal_round=reveal_round, - wait_for_inclusion=wait_for_inclusion, - wait_for_finalization=wait_for_finalization, - ) + sudo_call = subtensor.substrate.compose_call( + call_module="Sudo", + call_function="sudo", + call_params={"call": call}, + ) + + success, message = subtensor.sign_and_send_extrinsic( + call=sudo_call, + wallet=wallet, + wait_for_inclusion=wait_for_inclusion, + wait_for_finalization=wait_for_finalization, + period=period, + ) - if success is not True: - logging.error(message) - return False, message + if not wait_for_finalization and not wait_for_inclusion: + return True, message - logging.success( - f"[green]Finalized![/green] Weights committed with reveal round [blue]{reveal_round}[/blue]." + if success: + return ( + True, + "Success with `root_set_pending_childkey_cooldown_extrinsic` response.", ) - return True, f"reveal_round:{reveal_round}" - except Exception as e: - logging.error(f":cross_mark: [red]Failed. Error:[/red] {e}") - return False, str(e)
    + return True, message
    diff --git a/static/python-api/html/_modules/bittensor/core/extrinsics/commit_weights.html b/static/python-api/html/_modules/bittensor/core/extrinsics/liquidity.html similarity index 51% rename from static/python-api/html/_modules/bittensor/core/extrinsics/commit_weights.html rename to static/python-api/html/_modules/bittensor/core/extrinsics/liquidity.html index df7fc93900..2a89fa168f 100644 --- a/static/python-api/html/_modules/bittensor/core/extrinsics/commit_weights.html +++ b/static/python-api/html/_modules/bittensor/core/extrinsics/liquidity.html @@ -7,7 +7,7 @@ - bittensor.core.extrinsics.commit_weights — Bittensor SDK Docs documentation + bittensor.core.extrinsics.liquidity — Bittensor SDK Docs documentation @@ -44,7 +44,7 @@ - + @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -263,7 +266,7 @@ -
  • -

    Source code for bittensor.core.extrinsics.commit_weights

    -"""Module sync commit weights and reveal weights extrinsic."""
    -
    -from typing import TYPE_CHECKING, Optional
    +  

    Source code for bittensor.core.extrinsics.liquidity

    +from typing import Optional, TYPE_CHECKING
     
    -from bittensor.utils import format_error_message
    +from bittensor.utils import unlock_key
    +from bittensor.utils.balance import Balance
     from bittensor.utils.btlogging import logging
    +from bittensor.utils.liquidity import price_to_tick
     
     if TYPE_CHECKING:
         from bittensor_wallet import Wallet
         from bittensor.core.subtensor import Subtensor
     
     
    -def _do_commit_weights(
    +
    +[docs] +def add_liquidity_extrinsic( subtensor: "Subtensor", wallet: "Wallet", netuid: int, - commit_hash: str, - wait_for_inclusion: bool = False, + liquidity: Balance, + price_low: Balance, + price_high: Balance, + hotkey: Optional[str] = None, + wait_for_inclusion: bool = True, wait_for_finalization: bool = False, -) -> tuple[bool, Optional[str]]: + period: Optional[int] = None, +) -> tuple[bool, str]: """ - Internal method to send a transaction to the Bittensor blockchain, committing the hash of a neuron's weights. - This method constructs and submits the transaction, handling retries and blockchain communication. - - Args: - subtensor (bittensor.core.subtensor.Subtensor): The subtensor instance used for blockchain interaction. - wallet (bittensor_wallet.Wallet): The wallet associated with the neuron committing the weights. - netuid (int): The unique identifier of the subnet. - commit_hash (str): The hash of the neuron's weights to be committed. - wait_for_inclusion (bool): Waits for the transaction to be included in a block. - wait_for_finalization (bool): Waits for the transaction to be finalized on the blockchain. + Adds liquidity to the specified price range. + + Arguments: + subtensor: The Subtensor client instance used for blockchain interaction. + wallet: The wallet used to sign the extrinsic (must be unlocked). + netuid: The UID of the target subnet for which the call is being initiated. + liquidity: The amount of liquidity to be added. + price_low: The lower bound of the price tick range. + price_high: The upper bound of the price tick range. + hotkey: The hotkey with staked TAO in Alpha. If not passed then the wallet hotkey is used. Defaults to `None`. + wait_for_inclusion: Whether to wait for the extrinsic to be included in a block. Defaults to True. + wait_for_finalization: Whether to wait for finalization of the extrinsic. Defaults to False. + period: The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: - tuple[bool, Optional[str]]: A tuple containing a success flag and an optional error message. + Tuple[bool, str]: + - True and a success message if the extrinsic is successfully submitted or processed. + - False and an error message if the submission fails or the wallet cannot be unlocked. - This method ensures that the weight commitment is securely recorded on the Bittensor blockchain, providing a - verifiable record of the neuron's weight distribution at a specific point in time. + Note: Adding is allowed even when user liquidity is enabled in specified subnet. Call + `toggle_user_liquidity_extrinsic` to enable/disable user liquidity. """ + if not (unlock := unlock_key(wallet)).success: + logging.error(unlock.message) + return False, unlock.message + + tick_low = price_to_tick(price_low.tao) + tick_high = price_to_tick(price_high.tao) + call = subtensor.substrate.compose_call( - call_module="SubtensorModule", - call_function="commit_weights", + call_module="Swap", + call_function="add_liquidity", call_params={ + "hotkey": hotkey or wallet.hotkey.ss58_address, "netuid": netuid, - "commit_hash": commit_hash, + "tick_low": tick_low, + "tick_high": tick_high, + "liquidity": liquidity.rao, }, ) + return subtensor.sign_and_send_extrinsic( - call, - wallet, - wait_for_inclusion, - wait_for_finalization, + call=call, + wallet=wallet, + wait_for_inclusion=wait_for_inclusion, + wait_for_finalization=wait_for_finalization, use_nonce=True, - sign_with="hotkey", - nonce_key="hotkey", - ) + period=period, + )
    + -
    -[docs] -def commit_weights_extrinsic( +
    +[docs] +def modify_liquidity_extrinsic( subtensor: "Subtensor", wallet: "Wallet", netuid: int, - commit_hash: str, - wait_for_inclusion: bool = False, + position_id: int, + liquidity_delta: Balance, + hotkey: Optional[str] = None, + wait_for_inclusion: bool = True, wait_for_finalization: bool = False, + period: Optional[int] = None, ) -> tuple[bool, str]: - """ - Commits a hash of the neuron's weights to the Bittensor blockchain using the provided wallet. - This function is a wrapper around the `do_commit_weights` method. - - Args: - subtensor (bittensor.core.subtensor.Subtensor): The subtensor instance used for blockchain interaction. - wallet (bittensor_wallet.Wallet): The wallet associated with the neuron committing the weights. - netuid (int): The unique identifier of the subnet. - commit_hash (str): The hash of the neuron's weights to be committed. - wait_for_inclusion (bool): Waits for the transaction to be included in a block. - wait_for_finalization (bool): Waits for the transaction to be finalized on the blockchain. + """Modifies liquidity in liquidity position by adding or removing liquidity from it. + + Arguments: + subtensor: The Subtensor client instance used for blockchain interaction. + wallet: The wallet used to sign the extrinsic (must be unlocked). + netuid: The UID of the target subnet for which the call is being initiated. + position_id: The id of the position record in the pool. + liquidity_delta: The amount of liquidity to be added or removed (add if positive or remove if negative). + hotkey: The hotkey with staked TAO in Alpha. If not passed then the wallet hotkey is used. Defaults to `None`. + wait_for_inclusion: Whether to wait for the extrinsic to be included in a block. Defaults to True. + wait_for_finalization: Whether to wait for finalization of the extrinsic. Defaults to False. + period: The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: - tuple[bool, str]: ``True`` if the weight commitment is successful, False otherwise. And `msg`, a string - value describing the success or potential error. + Tuple[bool, str]: + - True and a success message if the extrinsic is successfully submitted or processed. + - False and an error message if the submission fails or the wallet cannot be unlocked. - This function provides a user-friendly interface for committing weights to the Bittensor blockchain, ensuring proper - error handling and user interaction when required. + Note: Modifying is allowed even when user liquidity is enabled in specified subnet. Call + `toggle_user_liquidity_extrinsic` to enable/disable user liquidity. """ + if not (unlock := unlock_key(wallet)).success: + logging.error(unlock.message) + return False, unlock.message - success, error_message = _do_commit_weights( - subtensor=subtensor, + call = subtensor.substrate.compose_call( + call_module="Swap", + call_function="modify_position", + call_params={ + "hotkey": hotkey or wallet.hotkey.ss58_address, + "netuid": netuid, + "position_id": position_id, + "liquidity_delta": liquidity_delta.rao, + }, + ) + + return subtensor.sign_and_send_extrinsic( + call=call, wallet=wallet, - netuid=netuid, - commit_hash=commit_hash, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, - ) - - if success: - success_message = "Successfully committed weights." - logging.info(success_message) - return True, success_message - - logging.error(f"Failed to commit weights: {error_message}") - return False, error_message
    + use_nonce=True, + period=period, + )
    -def _do_reveal_weights( +
    +[docs] +def remove_liquidity_extrinsic( subtensor: "Subtensor", wallet: "Wallet", netuid: int, - uids: list[int], - values: list[int], - salt: list[int], - version_key: int, - wait_for_inclusion: bool = False, + position_id: int, + hotkey: Optional[str] = None, + wait_for_inclusion: bool = True, wait_for_finalization: bool = False, -) -> tuple[bool, Optional[dict]]: - """ - Internal method to send a transaction to the Bittensor blockchain, revealing the weights for a specific subnet. - This method constructs and submits the transaction, handling retries and blockchain communication. - - Args: - subtensor (bittensor.core.subtensor.Subtensor): The subtensor instance used for blockchain interaction. - wallet (bittensor_wallet.Wallet): The wallet associated with the neuron revealing the weights. - netuid (int): The unique identifier of the subnet. - uids (list[int]): List of neuron UIDs for which weights are being revealed. - values (list[int]): List of weight values corresponding to each UID. - salt (list[int]): List of salt values corresponding to the hash function. - version_key (int): Version key for compatibility with the network. - wait_for_inclusion (bool): Waits for the transaction to be included in a block. - wait_for_finalization (bool): Waits for the transaction to be finalized on the blockchain. + period: Optional[int] = None, +) -> tuple[bool, str]: + """Remove liquidity and credit balances back to wallet's hotkey stake. + + Arguments: + subtensor: The Subtensor client instance used for blockchain interaction. + wallet: The wallet used to sign the extrinsic (must be unlocked). + netuid: The UID of the target subnet for which the call is being initiated. + position_id: The id of the position record in the pool. + hotkey: The hotkey with staked TAO in Alpha. If not passed then the wallet hotkey is used. Defaults to `None`. + wait_for_inclusion: Whether to wait for the extrinsic to be included in a block. Defaults to True. + wait_for_finalization: Whether to wait for finalization of the extrinsic. Defaults to False. + period: The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: - tuple[bool, Optional[str]]: A tuple containing a success flag and an optional error message. + Tuple[bool, str]: + - True and a success message if the extrinsic is successfully submitted or processed. + - False and an error message if the submission fails or the wallet cannot be unlocked. - This method ensures that the weight revelation is securely recorded on the Bittensor blockchain, providing - transparency and accountability for the neuron's weight distribution. + Note: Adding is allowed even when user liquidity is enabled in specified subnet. + Call `toggle_user_liquidity_extrinsic` to enable/disable user liquidity. """ + if not (unlock := unlock_key(wallet)).success: + logging.error(unlock.message) + return False, unlock.message call = subtensor.substrate.compose_call( - call_module="SubtensorModule", - call_function="reveal_weights", + call_module="Swap", + call_function="remove_liquidity", call_params={ + "hotkey": hotkey or wallet.hotkey.ss58_address, "netuid": netuid, - "uids": uids, - "values": values, - "salt": salt, - "version_key": version_key, + "position_id": position_id, }, ) + return subtensor.sign_and_send_extrinsic( - call, - wallet, - wait_for_inclusion, - wait_for_finalization, + call=call, + wallet=wallet, + wait_for_inclusion=wait_for_inclusion, + wait_for_finalization=wait_for_finalization, use_nonce=True, - sign_with="hotkey", - nonce_key="hotkey", - ) + period=period, + )
    -
    -[docs] -def reveal_weights_extrinsic( + +
    +[docs] +def toggle_user_liquidity_extrinsic( subtensor: "Subtensor", wallet: "Wallet", netuid: int, - uids: list[int], - weights: list[int], - salt: list[int], - version_key: int, - wait_for_inclusion: bool = False, + enable: bool, + wait_for_inclusion: bool = True, wait_for_finalization: bool = False, + period: Optional[int] = None, ) -> tuple[bool, str]: - """ - Reveals the weights for a specific subnet on the Bittensor blockchain using the provided wallet. - This function is a wrapper around the `_do_reveal_weights` method. - - Args: - subtensor (bittensor.core.subtensor.Subtensor): The subtensor instance used for blockchain interaction. - wallet (bittensor_wallet.Wallet): The wallet associated with the neuron revealing the weights. - netuid (int): The unique identifier of the subnet. - uids (list[int]): List of neuron UIDs for which weights are being revealed. - weights (list[int]): List of weight values corresponding to each UID. - salt (list[int]): List of salt values corresponding to the hash function. - version_key (int): Version key for compatibility with the network. - wait_for_inclusion (bool): Waits for the transaction to be included in a block. - wait_for_finalization (bool): Waits for the transaction to be finalized on the blockchain. + """Allow to toggle user liquidity for specified subnet. + + Arguments: + subtensor: The Subtensor client instance used for blockchain interaction. + wallet: The wallet used to sign the extrinsic (must be unlocked). + netuid: The UID of the target subnet for which the call is being initiated. + enable: Boolean indicating whether to enable user liquidity. + wait_for_inclusion: Whether to wait for the extrinsic to be included in a block. Defaults to True. + wait_for_finalization: Whether to wait for finalization of the extrinsic. Defaults to False. + period: The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: - tuple[bool, str]: ``True`` if the weight revelation is successful, False otherwise. And `msg`, a string value - describing the success or potential error. - - This function provides a user-friendly interface for revealing weights on the Bittensor blockchain, ensuring proper - error handling and user interaction when required. + Tuple[bool, str]: + - True and a success message if the extrinsic is successfully submitted or processed. + - False and an error message if the submission fails or the wallet cannot be unlocked. """ + if not (unlock := unlock_key(wallet)).success: + logging.error(unlock.message) + return False, unlock.message + + call = subtensor.substrate.compose_call( + call_module="Swap", + call_function="toggle_user_liquidity", + call_params={"netuid": netuid, "enable": enable}, + ) - success, error_message = _do_reveal_weights( - subtensor=subtensor, + return subtensor.sign_and_send_extrinsic( + call=call, wallet=wallet, - netuid=netuid, - uids=uids, - values=weights, - salt=salt, - version_key=version_key, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, - ) - - if success: - success_message = "Successfully revealed weights." - logging.info(success_message) - return True, success_message - - error_message = format_error_message(error_message) - logging.error(f"Failed to reveal weights: {error_message}") - return False, error_message
    + period=period, + )
    diff --git a/static/python-api/html/_modules/bittensor/core/extrinsics/move_stake.html b/static/python-api/html/_modules/bittensor/core/extrinsics/move_stake.html index 8ab343a83a..fc91335ae3 100644 --- a/static/python-api/html/_modules/bittensor/core/extrinsics/move_stake.html +++ b/static/python-api/html/_modules/bittensor/core/extrinsics/move_stake.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -353,6 +356,7 @@

    Source code for bittensor.core.extrinsics.move_stake

    origin_netuid: int, destination_netuid: int, ) -> tuple[Balance, Balance]: + """Gets the current stake balances for both origin and destination addresses in their respective subnets.""" block = subtensor.get_current_block() stake_in_origin = subtensor.get_stake( coldkey_ss58=origin_coldkey_ss58, @@ -381,6 +385,7 @@

    Source code for bittensor.core.extrinsics.move_stake

    amount: Optional[Balance] = None, wait_for_inclusion: bool = True, wait_for_finalization: bool = False, + period: Optional[int] = None, ) -> bool: """ Transfers stake from one subnet to another while changing the coldkey owner. @@ -395,6 +400,9 @@

    Source code for bittensor.core.extrinsics.move_stake

    amount (Union[Balance, float, int]): Amount to transfer. wait_for_inclusion (bool): If true, waits for inclusion before returning. wait_for_finalization (bool): If true, waits for finalization before returning. + period (Optional[int]): The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: success (bool): True if the transfer was successful. @@ -451,6 +459,7 @@

    Source code for bittensor.core.extrinsics.move_stake

    wallet=wallet, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + period=period, ) if success: @@ -498,6 +507,10 @@

    Source code for bittensor.core.extrinsics.move_stake

    amount: Optional[Balance] = None, wait_for_inclusion: bool = True, wait_for_finalization: bool = False, + safe_staking: bool = False, + allow_partial_stake: bool = False, + rate_tolerance: float = 0.005, + period: Optional[int] = None, ) -> bool: """ Moves stake between subnets while keeping the same coldkey-hotkey pair ownership. @@ -511,6 +524,12 @@

    Source code for bittensor.core.extrinsics.move_stake

    amount (Union[Balance, float]): Amount to swap. wait_for_inclusion (bool): If true, waits for inclusion before returning. wait_for_finalization (bool): If true, waits for finalization before returning. + safe_staking (bool): If true, enables price safety checks to protect against price impact. + allow_partial_stake (bool): If true, allows partial stake swaps when the full amount would exceed the price tolerance. + rate_tolerance (float): Maximum allowed increase in a price ratio (0.005 = 0.5%). + period (Optional[int]): The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: success (bool): True if the swap was successful. @@ -528,7 +547,7 @@

    Source code for bittensor.core.extrinsics.move_stake

    # Check sufficient stake stake_in_origin, stake_in_destination = _get_stake_in_origin_and_dest( - subtensor, + subtensor=subtensor, origin_hotkey_ss58=hotkey_ss58, destination_hotkey_ss58=hotkey_ss58, origin_netuid=origin_netuid, @@ -544,20 +563,45 @@

    Source code for bittensor.core.extrinsics.move_stake

    return False try: - logging.info( - f"Swapping stake for hotkey [blue]{hotkey_ss58}[/blue]\n" - f"Amount: [green]{amount}[/green] from netuid [yellow]{origin_netuid}[/yellow] to netuid " - f"[yellow]{destination_netuid}[/yellow]" - ) + call_params = { + "hotkey": hotkey_ss58, + "origin_netuid": origin_netuid, + "destination_netuid": destination_netuid, + "alpha_amount": amount.rao, + } + + if safe_staking: + origin_pool = subtensor.subnet(netuid=origin_netuid) + destination_pool = subtensor.subnet(netuid=destination_netuid) + swap_rate_ratio = origin_pool.price.rao / destination_pool.price.rao + swap_rate_ratio_with_tolerance = swap_rate_ratio * (1 + rate_tolerance) + + logging.info( + f"Swapping stake with safety for hotkey [blue]{hotkey_ss58}[/blue]\n" + f"Amount: [green]{amount}[/green] from netuid [green]{origin_netuid}[/green] to netuid " + f"[green]{destination_netuid}[/green]\n" + f"Current price ratio: [green]{swap_rate_ratio:.4f}[/green], " + f"Ratio with tolerance: [green]{swap_rate_ratio_with_tolerance:.4f}[/green]" + ) + call_params.update( + { + "limit_price": swap_rate_ratio_with_tolerance, + "allow_partial": allow_partial_stake, + } + ) + call_function = "swap_stake_limit" + else: + logging.info( + f"Swapping stake for hotkey [blue]{hotkey_ss58}[/blue]\n" + f"Amount: [green]{amount}[/green] from netuid [green]{origin_netuid}[/green] to netuid " + f"[green]{destination_netuid}[/green]" + ) + call_function = "swap_stake" + call = subtensor.substrate.compose_call( call_module="SubtensorModule", - call_function="swap_stake", - call_params={ - "hotkey": hotkey_ss58, - "origin_netuid": origin_netuid, - "destination_netuid": destination_netuid, - "alpha_amount": amount.rao, - }, + call_function=call_function, + call_params=call_params, ) success, err_msg = subtensor.sign_and_send_extrinsic( @@ -565,6 +609,7 @@

    Source code for bittensor.core.extrinsics.move_stake

    wallet=wallet, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + period=period, ) if success: @@ -575,7 +620,7 @@

    Source code for bittensor.core.extrinsics.move_stake

    # Get updated stakes origin_stake, dest_stake = _get_stake_in_origin_and_dest( - subtensor, + subtensor=subtensor, origin_hotkey_ss58=hotkey_ss58, destination_hotkey_ss58=hotkey_ss58, origin_netuid=origin_netuid, @@ -592,7 +637,12 @@

    Source code for bittensor.core.extrinsics.move_stake

    return True else: - logging.error(f":cross_mark: [red]Failed[/red]: {err_msg}") + if safe_staking and "Custom error: 8" in err_msg: + logging.error( + ":cross_mark: [red]Failed[/red]: Price ratio exceeded tolerance limit. Either increase price tolerance or enable partial staking." + ) + else: + logging.error(f":cross_mark: [red]Failed[/red]: {err_msg}") return False except Exception as e: @@ -613,6 +663,7 @@

    Source code for bittensor.core.extrinsics.move_stake

    amount: Optional[Balance] = None, wait_for_inclusion: bool = True, wait_for_finalization: bool = False, + period: Optional[int] = None, ) -> bool: """ Moves stake to a different hotkey and/or subnet while keeping the same coldkey owner. @@ -627,6 +678,9 @@

    Source code for bittensor.core.extrinsics.move_stake

    amount (Union[Balance, float]): Amount to move. wait_for_inclusion (bool): If true, waits for inclusion before returning. wait_for_finalization (bool): If true, waits for finalization before returning. + period (Optional[int]): The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: success (bool): True if the move was successful. @@ -636,7 +690,7 @@

    Source code for bittensor.core.extrinsics.move_stake

    # Check sufficient stake stake_in_origin, stake_in_destination = _get_stake_in_origin_and_dest( - subtensor, + subtensor=subtensor, origin_hotkey_ss58=origin_hotkey, destination_hotkey_ss58=destination_hotkey, origin_netuid=origin_netuid, @@ -672,6 +726,7 @@

    Source code for bittensor.core.extrinsics.move_stake

    wallet=wallet, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + period=period, ) if success: @@ -682,7 +737,7 @@

    Source code for bittensor.core.extrinsics.move_stake

    # Get updated stakes origin_stake, dest_stake = _get_stake_in_origin_and_dest( - subtensor, + subtensor=subtensor, origin_hotkey_ss58=origin_hotkey, destination_hotkey_ss58=destination_hotkey, origin_netuid=origin_netuid, diff --git a/static/python-api/html/_modules/bittensor/core/extrinsics/registration.html b/static/python-api/html/_modules/bittensor/core/extrinsics/registration.html index 3a8c69ee14..81dc4a9c41 100644 --- a/static/python-api/html/_modules/bittensor/core/extrinsics/registration.html +++ b/static/python-api/html/_modules/bittensor/core/extrinsics/registration.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -361,6 +364,7 @@

    Source code for bittensor.core.extrinsics.registration

    wallet: "Wallet", wait_for_inclusion: bool = False, wait_for_finalization: bool = True, + period: Optional[int] = None, ) -> tuple[bool, str]: """ Performs a burned register extrinsic call to the Subtensor chain. @@ -373,6 +377,9 @@

    Source code for bittensor.core.extrinsics.registration

    wallet (bittensor_wallet.Wallet): The wallet to be registered. wait_for_inclusion (bool): Whether to wait for the transaction to be included in a block. Default is False. wait_for_finalization (bool): Whether to wait for the transaction to be finalized. Default is True. + period (Optional[int]): The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: Tuple[bool, Optional[str]]: A tuple containing a boolean indicating success or failure, and an optional error @@ -393,6 +400,7 @@

    Source code for bittensor.core.extrinsics.registration

    wallet=wallet, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + period=period, ) @@ -404,6 +412,7 @@

    Source code for bittensor.core.extrinsics.registration

    netuid: int, wait_for_inclusion: bool = False, wait_for_finalization: bool = True, + period: Optional[int] = None, ) -> bool: """Registers the wallet to chain by recycling TAO. @@ -415,6 +424,9 @@

    Source code for bittensor.core.extrinsics.registration

    returns ``False`` if the extrinsic fails to enter the block within the timeout. wait_for_finalization (bool): If set, waits for the extrinsic to be finalized on the chain before returning ``True``, or returns ``False`` if the extrinsic fails to be finalized within the timeout. + period (Optional[int]): The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: success (bool): Flag is ``True`` if extrinsic was finalized or included in the block. If we did not wait for @@ -458,6 +470,7 @@

    Source code for bittensor.core.extrinsics.registration

    wallet=wallet, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + period=period, ) if not success: @@ -493,6 +506,7 @@

    Source code for bittensor.core.extrinsics.registration

    pow_result: "POWSolution", wait_for_inclusion: bool = False, wait_for_finalization: bool = True, + period: Optional[int] = None, ) -> tuple[bool, Optional[str]]: """Sends a (POW) register extrinsic to the chain. @@ -503,6 +517,9 @@

    Source code for bittensor.core.extrinsics.registration

    pow_result (POWSolution): The PoW result to register. wait_for_inclusion (bool): If ``True``, waits for the extrinsic to be included in a block. Default to `False`. wait_for_finalization (bool): If ``True``, waits for the extrinsic to be finalized. Default to `True`. + period (Optional[int]): The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: success (bool): ``True`` if the extrinsic was included in a block. @@ -527,6 +544,7 @@

    Source code for bittensor.core.extrinsics.registration

    wallet=wallet, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + period=period, ) @@ -537,6 +555,7 @@

    Source code for bittensor.core.extrinsics.registration

    wallet: "Wallet", wait_for_inclusion: bool = False, wait_for_finalization: bool = True, + period: Optional[int] = None, ) -> bool: """ Registers a new subnetwork on the Bittensor blockchain. @@ -546,6 +565,9 @@

    Source code for bittensor.core.extrinsics.registration

    wallet (Wallet): The wallet to be used for subnet registration. wait_for_inclusion (bool): If set, waits for the extrinsic to enter a block before returning true. wait_for_finalization (bool): If set, waits for the extrinsic to be finalized on the chain before returning true. + period (Optional[int]): The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: bool: True if the subnet registration was successful, False otherwise. @@ -573,16 +595,20 @@

    Source code for bittensor.core.extrinsics.registration

    wallet=wallet, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + period=period, ) + if not wait_for_finalization and not wait_for_inclusion: + return True + if success: logging.success( ":white_heavy_check_mark: [green]Successfully registered subnet[/green]" ) return True - else: - logging.error(f"Failed to register subnet: {message}") - return False
    + + logging.error(f"Failed to register subnet: {message}") + return False
    @@ -602,6 +628,7 @@

    Source code for bittensor.core.extrinsics.registration

    num_processes: Optional[int] = None, update_interval: Optional[int] = None, log_verbose: bool = False, + period: Optional[int] = None, ) -> bool: """Registers the wallet to the chain. @@ -621,6 +648,9 @@

    Source code for bittensor.core.extrinsics.registration

    num_processes: The number of processes to use to register. update_interval: The number of nonces to solve between updates. log_verbose: If `True`, the registration process will log more information. + period (Optional[int]): The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: `True` if extrinsic was finalized or included in the block. If we did not wait for finalization/inclusion, the @@ -710,7 +740,7 @@

    Source code for bittensor.core.extrinsics.registration

    # pow successful, proceed to submit pow to chain for registration else: logging.info(":satellite: [magenta]Submitting POW...[/magenta]") - # check if pow result is still valid + # check if a pow result is still valid while not pow_result.is_stale(subtensor=subtensor): result: tuple[bool, Optional[str]] = _do_pow_register( subtensor=subtensor, @@ -719,6 +749,7 @@

    Source code for bittensor.core.extrinsics.registration

    pow_result=pow_result, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + period=period, ) success, err_msg = result @@ -781,11 +812,13 @@

    Source code for bittensor.core.extrinsics.registration

    github_repo: str, subnet_contact: str, subnet_url: str, + logo_url: str, discord: str, description: str, additional: str, wait_for_inclusion: bool = False, wait_for_finalization: bool = True, + period: Optional[int] = None, ) -> tuple[bool, str]: """ Set the identity information for a given subnet. @@ -798,11 +831,15 @@

    Source code for bittensor.core.extrinsics.registration

    github_repo (str): URL of the GitHub repository related to the subnet. subnet_contact (str): Subnet's contact information, e.g., email or contact link. subnet_url (str): The URL of the subnet's primary web portal. + logo_url (str): The URL of the logo's primary web portal. discord (str): Discord server or contact for the subnet. description (str): A textual description of the subnet. additional (str): Any additional metadata or information related to the subnet. wait_for_inclusion (bool): Whether to wait for the extrinsic inclusion in a block (default: False). wait_for_finalization (bool): Whether to wait for the extrinsic finalization in a block (default: True). + period (Optional[int]): The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: tuple[bool, str]: A tuple where the first element indicates success or failure (True/False), and the second @@ -823,6 +860,7 @@

    Source code for bittensor.core.extrinsics.registration

    "github_repo": github_repo, "subnet_contact": subnet_contact, "subnet_url": subnet_url, + "logo_url": logo_url, "discord": discord, "description": description, "additional": additional, @@ -834,6 +872,7 @@

    Source code for bittensor.core.extrinsics.registration

    wallet=wallet, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + period=period, ) if not wait_for_finalization and not wait_for_inclusion: diff --git a/static/python-api/html/_modules/bittensor/core/extrinsics/root.html b/static/python-api/html/_modules/bittensor/core/extrinsics/root.html index 975f6ddc3a..69c90a66a3 100644 --- a/static/python-api/html/_modules/bittensor/core/extrinsics/root.html +++ b/static/python-api/html/_modules/bittensor/core/extrinsics/root.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -335,7 +338,7 @@

    Source code for bittensor.core.extrinsics.root

     import time
    -from typing import Union, TYPE_CHECKING
    +from typing import Optional, Union, TYPE_CHECKING
     
     import numpy as np
     from numpy.typing import NDArray
    @@ -347,10 +350,12 @@ 

    Source code for bittensor.core.extrinsics.root

    unlock_key, torch, ) +from bittensor.utils.balance import Balance from bittensor.utils.btlogging import logging from bittensor.utils.weight_utils import ( normalize_max_weight, convert_weights_and_uids_for_emit, + convert_uids_and_weights, ) if TYPE_CHECKING: @@ -387,8 +392,9 @@

    Source code for bittensor.core.extrinsics.root

    wallet: "Wallet", wait_for_inclusion: bool = False, wait_for_finalization: bool = True, + period: Optional[int] = None, ) -> bool: - """Registers the wallet to root network. + """Registers the wallet to the root network. Arguments: subtensor (bittensor.core.subtensor.Subtensor): The Subtensor object @@ -397,12 +403,39 @@

    Source code for bittensor.core.extrinsics.root

    `False` if the extrinsic fails to enter the block within the timeout. wait_for_finalization (bool): If set, waits for the extrinsic to be finalized on the chain before returning `True`, or returns `False` if the extrinsic fails to be finalized within the timeout. + period (Optional[int]): The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: `True` if extrinsic was finalized or included in the block. If we did not wait for finalization/inclusion, the response is `True`. """ netuid = 0 + logging.info( + f"Registering on netuid [blue]{netuid}[/blue] on network: [blue]{subtensor.network}[/blue]" + ) + + logging.info("Fetching recycle amount & balance.") + block = subtensor.get_current_block() + recycle_call = subtensor.get_hyperparameter( + param_name="Burn", + netuid=netuid, + block=block, + ) + balance = subtensor.get_balance( + address=wallet.coldkeypub.ss58_address, + block=block, + ) + + current_recycle = Balance.from_rao(int(recycle_call)) + + if balance < current_recycle: + logging.error( + f"[red]Insufficient balance {balance} to register neuron. " + f"Current recycle is {current_recycle} TAO[/red]." + ) + return False if not (unlock := unlock_key(wallet)).success: logging.error(unlock.message) @@ -427,10 +460,11 @@

    Source code for bittensor.core.extrinsics.root

    call_params={"hotkey": wallet.hotkey.ss58_address}, ) success, err_msg = subtensor.sign_and_send_extrinsic( - call, + call=call, wallet=wallet, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + period=period, ) if not success: @@ -466,7 +500,7 @@

    Source code for bittensor.core.extrinsics.root

    version_key: int = 0, wait_for_inclusion: bool = False, wait_for_finalization: bool = False, - period: int = 5, + period: Optional[int] = 8, ) -> tuple[bool, str]: """ Sets the root weights on the Subnet for the given wallet hotkey account. @@ -486,7 +520,9 @@

    Source code for bittensor.core.extrinsics.root

    False. wait_for_finalization (bool, optional): If True, waits for the extrinsic to be finalized on the chain. Defaults to False. - period (int, optional): The period in seconds to wait for extrinsic inclusion or finalization. Defaults to 5. + period (Optional[int]): The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: tuple: Returns a tuple containing a boolean indicating success and a message describing the result of the @@ -504,32 +540,25 @@

    Source code for bittensor.core.extrinsics.root

    }, ) - next_nonce = subtensor.substrate.get_account_next_index(wallet.hotkey.ss58_address) - - # Period dictates how long the extrinsic will stay as part of waiting pool - extrinsic = subtensor.substrate.create_signed_extrinsic( + success, message = subtensor.sign_and_send_extrinsic( call=call, - keypair=wallet.coldkey, - era={"period": period}, - nonce=next_nonce, - ) - response = subtensor.substrate.submit_extrinsic( - extrinsic=extrinsic, + wallet=wallet, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + use_nonce=True, + period=period, ) + # We only wait here if we expect finalization. if not wait_for_finalization and not wait_for_inclusion: return True, "Not waiting for finalization or inclusion." - if response.is_success: + if success: return True, "Successfully set weights." - return False, format_error_message(response.error_message) + return False, message -

    -[docs] def set_root_weights_extrinsic( subtensor: "Subtensor", wallet: "Wallet", @@ -538,20 +567,24 @@

    Source code for bittensor.core.extrinsics.root

    version_key: int = 0, wait_for_inclusion: bool = False, wait_for_finalization: bool = False, + period: Optional[int] = None, ) -> bool: - """Sets the given weights and values on chain for wallet hotkey account. + """Sets the given weights and values on chain for a given wallet hotkey account. Arguments: subtensor (bittensor.core.subtensor.Subtensor): The Subtensor object wallet (bittensor_wallet.Wallet): Bittensor wallet object. netuids (Union[NDArray[np.int64], list[int]]): The `netuid` of the subnet to set weights for. - weights (Union[NDArray[np.float32], list[float]]): Weights to set. These must be `float` s and must correspond + weights (Union[NDArray[np.float32], list[float]]): Weights to set. These must be floats and must correspond to the passed `netuid` s. version_key (int): The version key of the validator. wait_for_inclusion (bool): If set, waits for the extrinsic to enter a block before returning `True`, or returns `False` if the extrinsic fails to enter the block within the timeout. wait_for_finalization (bool): If set, waits for the extrinsic to be finalized on the chain before returning True`, or returns `False` if the extrinsic fails to be finalized within the timeout. + period (Optional[int]): The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: `True` if extrinsic was finalized or included in the block. If we did not wait for finalization/inclusion, the @@ -569,13 +602,10 @@

    Source code for bittensor.core.extrinsics.root

    logging.error(unlock.message) return False - # First convert types. - if isinstance(netuids, list): - netuids = np.array(netuids, dtype=np.int64) - if isinstance(weights, list): - weights = np.array(weights, dtype=np.float32) + # Convert types. + netuids, weights = convert_uids_and_weights(netuids, weights) - logging.debug("Fetching weight limits") + logging.debug("[magenta]Fetching weight limits ...[/magenta]") min_allowed_weights, max_weight_limit = _get_limits(subtensor) # Get non zero values. @@ -589,7 +619,7 @@

    Source code for bittensor.core.extrinsics.root

    ) # Normalize the weights to max value. - logging.info("Normalizing weights") + logging.info("[magenta]Normalizing weights ...[/magenta]") formatted_weights = normalize_max_weight(x=weights, limit=max_weight_limit) logging.info( f"Raw weights -> Normalized weights: [blue]{weights}[/blue] -> [green]{formatted_weights}[/green]" @@ -599,7 +629,7 @@

    Source code for bittensor.core.extrinsics.root

    logging.info(":satellite: [magenta]Setting root weights...[magenta]") weight_uids, weight_vals = convert_weights_and_uids_for_emit(netuids, weights) - success, error_message = _do_set_root_weights( + success, message = _do_set_root_weights( subtensor=subtensor, wallet=wallet, netuids=weight_uids, @@ -607,24 +637,20 @@

    Source code for bittensor.core.extrinsics.root

    version_key=version_key, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + period=period, ) - if not wait_for_finalization and not wait_for_inclusion: - return True - if success is True: logging.info(":white_heavy_check_mark: [green]Finalized[/green]") return True - else: - fmt_err = error_message - logging.error(f":cross_mark: [red]Failed error:[/red] {fmt_err}") - return False + + logging.error(f":cross_mark: [red]Failed error:[/red] {message}") + return False except SubstrateRequestException as e: fmt_err = format_error_message(e) logging.error(f":cross_mark: [red]Failed error:[/red] {fmt_err}") - return False

    - + return False
    diff --git a/static/python-api/html/_modules/bittensor/core/extrinsics/serving.html b/static/python-api/html/_modules/bittensor/core/extrinsics/serving.html index c1050a77aa..dbd3e02d72 100644 --- a/static/python-api/html/_modules/bittensor/core/extrinsics/serving.html +++ b/static/python-api/html/_modules/bittensor/core/extrinsics/serving.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -334,18 +337,17 @@

    Source code for bittensor.core.extrinsics.serving

    -from typing import Optional, TYPE_CHECKING
    +from typing import Optional, Union, TYPE_CHECKING
     
     from bittensor.core.errors import MetadataError
     from bittensor.core.settings import version_as_int
    +from bittensor.core.types import AxonServeCallParams
     from bittensor.utils import (
    -    format_error_message,
         networking as net,
         unlock_key,
         Certificate,
     )
     from bittensor.utils.btlogging import logging
    -from bittensor.core.types import AxonServeCallParams
     
     if TYPE_CHECKING:
         from bittensor_wallet import Wallet
    @@ -353,15 +355,14 @@ 

    Source code for bittensor.core.extrinsics.serving

    from bittensor.core.subtensor import Subtensor -
    -[docs] def do_serve_axon( subtensor: "Subtensor", wallet: "Wallet", call_params: "AxonServeCallParams", wait_for_inclusion: bool = False, wait_for_finalization: bool = True, -) -> tuple[bool, Optional[dict]]: + period: Optional[int] = None, +) -> tuple[bool, str]: """ Internal method to submit a serve axon transaction to the Bittensor blockchain. This method creates and submits a transaction, enabling a neuron's ``Axon`` to serve requests on the network. @@ -372,6 +373,9 @@

    Source code for bittensor.core.extrinsics.serving

    call_params (bittensor.core.types.AxonServeCallParams): Parameters required for the serve axon call. wait_for_inclusion (bool): Waits for the transaction to be included in a block. wait_for_finalization (bool): Waits for the transaction to be finalized on the blockchain. + period (Optional[int]): The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: tuple[bool, Optional[str]]: A tuple containing a success flag and an optional error message. @@ -389,22 +393,16 @@

    Source code for bittensor.core.extrinsics.serving

    call_function=call_function, call_params=call_params.dict(), ) - extrinsic = subtensor.substrate.create_signed_extrinsic( - call=call, keypair=wallet.hotkey - ) - response = subtensor.substrate.submit_extrinsic( - extrinsic=extrinsic, + + success, message = subtensor.sign_and_send_extrinsic( + call=call, + wallet=wallet, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + sign_with="hotkey", + period=period, ) - if wait_for_inclusion or wait_for_finalization: - if response.is_success: - return True, None - - return False, response.error_message - - return True, None
    - + return success, message
    @@ -421,6 +419,7 @@

    Source code for bittensor.core.extrinsics.serving

    wait_for_inclusion: bool = False, wait_for_finalization=True, certificate: Optional[Certificate] = None, + period: Optional[int] = None, ) -> bool: """Subscribes a Bittensor endpoint to the subtensor chain. @@ -439,6 +438,9 @@

    Source code for bittensor.core.extrinsics.serving

    ``True``, or returns ``False`` if the extrinsic fails to be finalized within the timeout. certificate (bittensor.utils.Certificate): Certificate to use for TLS. If ``None``, no TLS will be used. Defaults to ``None``. + period (Optional[int]): The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: success (bool): Flag is ``True`` if extrinsic was finalized or included in the block. If we did not wait for @@ -471,32 +473,32 @@

    Source code for bittensor.core.extrinsics.serving

    neuron_up_to_date = not neuron.is_null and params == neuron if neuron_up_to_date: logging.debug( - f"Axon already served on: AxonInfo({wallet.hotkey.ss58_address},{ip}:{port}) " + f"Axon already served on: [blue]AxonInfo({wallet.hotkey.ss58_address}, {ip}:{port})[/blue]" ) return True logging.debug( - f"Serving axon with: AxonInfo({wallet.hotkey.ss58_address},{ip}:{port}) -> {subtensor.network}:{netuid}" + f"Serving axon with: [blue]AxonInfo({wallet.hotkey.ss58_address}, {ip}:{port})[/blue] -> " + f"[green]{subtensor.network}:{netuid}[/green]" ) - success, error_message = do_serve_axon( + success, message = do_serve_axon( subtensor=subtensor, wallet=wallet, call_params=params, wait_for_finalization=wait_for_finalization, wait_for_inclusion=wait_for_inclusion, + period=period, ) - if wait_for_inclusion or wait_for_finalization: - if success is True: - logging.debug( - f"Axon served with: AxonInfo({wallet.hotkey.ss58_address},{ip}:{port}) on {subtensor.network}:{netuid} " - ) - return True - else: - logging.error(f"Failed: {format_error_message(error_message)}") - return False - else: - return True
    + if success: + logging.debug( + f"Axon served with: [blue]AxonInfo({wallet.hotkey.ss58_address}, {ip}:{port})[/blue] on " + f"[green]{subtensor.network}:{netuid}[/green]" + ) + return True + + logging.error(f"Failed: {message}") + return False
    @@ -509,6 +511,7 @@

    Source code for bittensor.core.extrinsics.serving

    wait_for_inclusion: bool = False, wait_for_finalization: bool = True, certificate: Optional["Certificate"] = None, + period: Optional[int] = None, ) -> bool: """Serves the axon to the network. @@ -522,6 +525,9 @@

    Source code for bittensor.core.extrinsics.serving

    ``True``, or returns ``False`` if the extrinsic fails to be finalized within the timeout. certificate (bittensor.utils.Certificate): Certificate to use for TLS. If ``None``, no TLS will be used. Defaults to ``None``. + period (Optional[int]): The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: success (bool): Flag is ``True`` if extrinsic was finalized or included in the block. If we did not wait for @@ -557,21 +563,22 @@

    Source code for bittensor.core.extrinsics.serving

    wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, certificate=certificate, + period=period, ) return serve_success
    -
    -[docs] def publish_metadata( subtensor: "Subtensor", wallet: "Wallet", netuid: int, data_type: str, - data: bytes, + data: Union[bytes, dict], wait_for_inclusion: bool = False, wait_for_finalization: bool = True, + period: Optional[int] = None, + reset_bonds: bool = False, ) -> bool: """ Publishes metadata on the Bittensor network using the specified wallet and network identifier. @@ -583,18 +590,22 @@

    Source code for bittensor.core.extrinsics.serving

    data_type (str): The data type of the information being submitted. It should be one of the following: ``'Sha256'``, ``'Blake256'``, ``'Keccak256'``, or ``'Raw0-128'``. This specifies the format or hashing algorithm used for the data. - data (str): The actual metadata content to be published. This should be formatted or hashed according to the - ``type`` specified. (Note: max ``str`` length is 128 bytes) + data (Union[bytes, dict]): The actual metadata content to be published. This should be formatted or hashed + according to the ``type`` specified. (Note: max ``str`` length is 128 bytes for ``'Raw0-128'``.) wait_for_inclusion (bool, optional): If ``True``, the function will wait for the extrinsic to be included in a block before returning. Defaults to ``False``. wait_for_finalization (bool, optional): If ``True``, the function will wait for the extrinsic to be finalized on the chain before returning. Defaults to ``True``. + period (Optional[int]): The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. + reset_bonds (bool): If `True`, the function will reset the bonds for the neuron. Defaults to `False`. Returns: bool: ``True`` if the metadata was successfully published (and finalized if specified). ``False`` otherwise. Raises: - MetadataError: If there is an error in submitting the extrinsic or if the response from the blockchain indicates + MetadataError: If there is an error in submitting the extrinsic, or if the response from the blockchain indicates failure. """ @@ -602,35 +613,33 @@

    Source code for bittensor.core.extrinsics.serving

    logging.error(unlock.message) return False + fields = [{f"{data_type}": data}] + if reset_bonds: + fields.append({"ResetBondsFlag": b""}) + call = subtensor.substrate.compose_call( call_module="Commitments", call_function="set_commitment", call_params={ "netuid": netuid, - "info": {"fields": [[{f"{data_type}": data}]]}, + "info": {"fields": [fields]}, }, ) - extrinsic = subtensor.substrate.create_signed_extrinsic( - call=call, keypair=wallet.hotkey - ) - response = subtensor.substrate.submit_extrinsic( - extrinsic=extrinsic, + success, message = subtensor.sign_and_send_extrinsic( + call=call, + wallet=wallet, + sign_with="hotkey", wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + period=period, ) - # We only wait here if we expect finalization. - if not wait_for_finalization and not wait_for_inclusion: - return True - if response.is_success: + if success: return True - raise MetadataError(format_error_message(response.error_message))
    - + raise MetadataError(message) -
    -[docs] def get_metadata( subtensor: "Subtensor", netuid: int, hotkey: str, block: Optional[int] = None ) -> bytes: @@ -641,8 +650,30 @@

    Source code for bittensor.core.extrinsics.serving

    params=[netuid, hotkey], block_hash=subtensor.determine_block_hash(block), ) - return commit_data
    + return commit_data + +def get_last_bonds_reset( + subtensor: "Subtensor", netuid: int, hotkey: str, block: Optional[int] = None +) -> bytes: + """ + Fetches the last bonds reset triggered at commitment from the blockchain for a given hotkey and netuid. + + Args: + subtensor (bittensor.core.subtensor.Subtensor): Subtensor instance object. + netuid (int): The network uid to fetch from. + hotkey (str): The hotkey of the neuron for which to fetch the last bonds reset. + block (Optional[int]): The block number to query. If ``None``, the latest block is used. + + Returns: + bytes: The last bonds reset data for the specified hotkey and netuid. + """ + return subtensor.substrate.query( + module="Commitments", + storage_function="LastBondsReset", + params=[netuid, hotkey], + block_hash=subtensor.determine_block_hash(block), + )
    diff --git a/static/python-api/html/_modules/bittensor/core/extrinsics/set_weights.html b/static/python-api/html/_modules/bittensor/core/extrinsics/set_weights.html deleted file mode 100644 index 716cdbcb54..0000000000 --- a/static/python-api/html/_modules/bittensor/core/extrinsics/set_weights.html +++ /dev/null @@ -1,561 +0,0 @@ - - - - - - - - - - bittensor.core.extrinsics.set_weights — Bittensor SDK Docs documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - -
    - -
    - - - - - -
    -
    - - - - - - - - -
    - - - -
    - -
    -
    - -
    -
    - -
    - -
    - -
    - - -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - - - -
    -

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

    Source code for bittensor.core.extrinsics.set_weights

    -"""Module sync setting weights extrinsic."""
    -
    -from typing import Union, TYPE_CHECKING, Optional
    -
    -import numpy as np
    -from numpy.typing import NDArray
    -
    -from bittensor.core.settings import version_as_int
    -from bittensor.utils import format_error_message, weight_utils
    -from bittensor.utils.btlogging import logging
    -
    -if TYPE_CHECKING:
    -    from bittensor.core.subtensor import Subtensor
    -    from bittensor_wallet import Wallet
    -    from bittensor.utils.registration import torch
    -
    -
    -def _do_set_weights(
    -    subtensor: "Subtensor",
    -    wallet: "Wallet",
    -    netuid: int,
    -    uids: list[int],
    -    vals: list[int],
    -    version_key: int = version_as_int,
    -    wait_for_inclusion: bool = False,
    -    wait_for_finalization: bool = False,
    -    period: int = 5,
    -) -> tuple[bool, Optional[str]]:  # (success, error_message)
    -    """
    -    Internal method to send a transaction to the Bittensor blockchain, setting weights
    -    for specified neurons. This method constructs and submits the transaction, handling
    -    retries and blockchain communication.
    -
    -    Args:
    -        subtensor (subtensor.core.subtensor.Subtensor): Subtensor instance.
    -        wallet (bittensor_wallet.Wallet): The wallet associated with the neuron setting the weights.
    -        uids (List[int]): List of neuron UIDs for which weights are being set.
    -        vals (List[int]): List of weight values corresponding to each UID.
    -        netuid (int): Unique identifier for the network.
    -        version_key (int, optional): Version key for compatibility with the network.
    -        wait_for_inclusion (bool, optional): Waits for the transaction to be included in a block.
    -        wait_for_finalization (bool, optional): Waits for the transaction to be finalized on the blockchain.
    -        period (int, optional): The period in seconds to wait for extrinsic inclusion or finalization. Defaults to 5.
    -
    -    Returns:
    -        Tuple[bool, Optional[str]]: A tuple containing a success flag and an optional error message.
    -
    -    This method is vital for the dynamic weighting mechanism in Bittensor, where neurons adjust their
    -        trust in other neurons based on observed performance and contributions.
    -    """
    -
    -    call = subtensor.substrate.compose_call(
    -        call_module="SubtensorModule",
    -        call_function="set_weights",
    -        call_params={
    -            "dests": uids,
    -            "weights": vals,
    -            "netuid": netuid,
    -            "version_key": version_key,
    -        },
    -    )
    -    next_nonce = subtensor.substrate.get_account_next_index(wallet.hotkey.ss58_address)
    -    # Period dictates how long the extrinsic will stay as part of waiting pool
    -    extrinsic = subtensor.substrate.create_signed_extrinsic(
    -        call=call,
    -        keypair=wallet.hotkey,
    -        era={"period": period},
    -        nonce=next_nonce,
    -    )
    -    response = subtensor.substrate.submit_extrinsic(
    -        extrinsic=extrinsic,
    -        wait_for_inclusion=wait_for_inclusion,
    -        wait_for_finalization=wait_for_finalization,
    -    )
    -    # We only wait here if we expect finalization.
    -    if not wait_for_finalization and not wait_for_inclusion:
    -        return True, "Not waiting for finalization or inclusion."
    -
    -    if response.is_success:
    -        return True, "Successfully set weights."
    -
    -    return False, format_error_message(response.error_message)
    -
    -
    -
    -[docs] -def set_weights_extrinsic( - subtensor: "Subtensor", - wallet: "Wallet", - netuid: int, - uids: Union[NDArray[np.int64], "torch.LongTensor", list], - weights: Union[NDArray[np.float32], "torch.FloatTensor", list], - version_key: int = 0, - wait_for_inclusion: bool = False, - wait_for_finalization: bool = False, -) -> tuple[bool, str]: - """Sets the given weights and values on chain for wallet hotkey account. - - Args: - subtensor (bittensor.core.async_subtensor.AsyncSubtensor): Bittensor subtensor object. - wallet (bittensor_wallet.Wallet): Bittensor wallet object. - netuid (int): The ``netuid`` of the subnet to set weights for. - uids (Union[NDArray[np.int64], torch.LongTensor, list]): The ``uint64`` uids of destination neurons. - weights (Union[NDArray[np.float32], torch.FloatTensor, list]): The weights to set. These must be ``float`` s - and correspond to the passed ``uid`` s. - version_key (int): The version key of the validator. - wait_for_inclusion (bool): If set, waits for the extrinsic to enter a block before returning ``True``, or - returns ``False`` if the extrinsic fails to enter the block within the timeout. - wait_for_finalization (bool): If set, waits for the extrinsic to be finalized on the chain before returning - ``True``, or returns ``False`` if the extrinsic fails to be finalized within the timeout. - - Returns: - success (bool): Flag is ``True`` if extrinsic was finalized or included in the block. If we did not wait for - finalization / inclusion, the response is ``True``. - """ - # First convert types. - if isinstance(uids, list): - uids = np.array(uids, dtype=np.int64) - if isinstance(weights, list): - weights = np.array(weights, dtype=np.float32) - - # Reformat and normalize. - weight_uids, weight_vals = weight_utils.convert_weights_and_uids_for_emit( - uids, weights - ) - - logging.info( - ":satellite: [magenta]Setting weights on [/magenta][blue]{subtensor.network}[/blue] [magenta]...[/magenta]" - ) - try: - success, error_message = _do_set_weights( - subtensor=subtensor, - wallet=wallet, - netuid=netuid, - uids=weight_uids, - vals=weight_vals, - version_key=version_key, - wait_for_finalization=wait_for_finalization, - wait_for_inclusion=wait_for_inclusion, - ) - - if not wait_for_finalization and not wait_for_inclusion: - return True, "Not waiting for finalization or inclusion." - - if success is True: - message = "Successfully set weights and Finalized." - logging.success(f":white_heavy_check_mark: [green]{message}[/green]") - return True, message - - logging.error(f"[red]Failed[/red] set weights. Error: {error_message}") - return False, error_message - - except Exception as error: - logging.error(f":cross_mark: [red]Failed[/red] set weights. Error: {error}") - return False, str(error)
    - -
    - -
    - - - - - - -
    - -
    -
    -
    - -
    - - - - -
    -
    - - -
    - - -
    -
    -
    - - - - - -
    -
    - - \ No newline at end of file diff --git a/static/python-api/html/_modules/bittensor/core/extrinsics/staking.html b/static/python-api/html/_modules/bittensor/core/extrinsics/staking.html index baa7e90ab3..a51a0637dd 100644 --- a/static/python-api/html/_modules/bittensor/core/extrinsics/staking.html +++ b/static/python-api/html/_modules/bittensor/core/extrinsics/staking.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -334,12 +337,12 @@

    Source code for bittensor.core.extrinsics.staking

    -import time
    -from typing import Optional, TYPE_CHECKING, Sequence
    +from typing import Optional, TYPE_CHECKING, Sequence
    +
    +from async_substrate_interface.errors import SubstrateRequestException
     
    -from bittensor.core.errors import StakeError, NotRegisteredError
     from bittensor.core.extrinsics.utils import get_old_stakes
    -from bittensor.utils import unlock_key
    +from bittensor.utils import unlock_key, format_error_message
     from bittensor.utils.balance import Balance
     from bittensor.utils.btlogging import logging
     
    @@ -358,24 +361,39 @@ 

    Source code for bittensor.core.extrinsics.staking

    amount: Optional[Balance] = None, wait_for_inclusion: bool = True, wait_for_finalization: bool = False, + safe_staking: bool = False, + allow_partial_stake: bool = False, + rate_tolerance: float = 0.005, + period: Optional[int] = None, ) -> bool: """ - Adds the specified amount of stake to passed hotkey `uid`. + Adds a stake from the specified wallet to the neuron identified by the SS58 address of its hotkey in specified subnet. + Staking is a fundamental process in the Bittensor network that enables neurons to participate actively and earn incentives. Arguments: - subtensor: the Subtensor object to use + subtensor: Subtensor instance with the connection to the chain. wallet: Bittensor wallet object. - hotkey_ss58: The `ss58` address of the hotkey account to stake to defaults to the wallet's hotkey. - netuid (Optional[int]): Subnet unique ID. - amount: Amount to stake as Bittensor balance, `None` if staking all. + hotkey_ss58: The `ss58` address of the hotkey account to stake to default to the wallet's hotkey. If not + specified, the wallet's hotkey will be used. Defaults to ``None``. + netuid: The unique identifier of the subnet to which the neuron belongs. + amount: Amount to stake as Bittensor balance in TAO always, `None` if staking all. Defaults is ``None``. wait_for_inclusion: If set, waits for the extrinsic to enter a block before returning `True`, or returns - `False` if the extrinsic fails to enter the block within the timeout. + `False` if the extrinsic fails to enter the block within the timeout. Defaults to ``True``. wait_for_finalization: If set, waits for the extrinsic to be finalized on the chain before returning `True`, - or returns `False` if the extrinsic fails to be finalized within the timeout. + or returns `False` if the extrinsic fails to be finalized within the timeout. Defaults to ``False``. + safe_staking: If True, enables price safety checks. Default is ``False``. + allow_partial_stake: If True, allows partial unstaking if price tolerance exceeded. Default is ``False``. + rate_tolerance: Maximum allowed price increase percentage (0.005 = 0.5%). Default is ``0.005``. + period: The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Defaults to ``None``. Returns: success: Flag is `True` if extrinsic was finalized or included in the block. If we did not wait for finalization/inclusion, the response is `True`. + + Raises: + SubstrateRequestException: Raised if the extrinsic fails to be included in the block within the timeout. """ # Decrypt keys, @@ -412,14 +430,11 @@

    Source code for bittensor.core.extrinsics.staking

    ) else: staking_balance = amount - staking_balance.set_unit(netuid) # Leave existential balance to keep key alive. if staking_balance > old_balance - existential_deposit: # If we are staking all, we need to leave at least the existential deposit. staking_balance = old_balance - existential_deposit - else: - staking_balance = staking_balance # Check enough to stake. if staking_balance > old_balance: @@ -430,30 +445,64 @@

    Source code for bittensor.core.extrinsics.staking

    return False try: - logging.info( - f":satellite: [magenta]Staking to:[/magenta] " - f"[blue]netuid: {netuid}, amount: {staking_balance} " - f"on {subtensor.network}[/blue] [magenta]...[/magenta]" - ) + call_params = { + "hotkey": hotkey_ss58, + "netuid": netuid, + "amount_staked": staking_balance.rao, + } + + if safe_staking: + pool = subtensor.subnet(netuid=netuid) + base_price = pool.price.tao + + if pool.netuid == 0: + price_with_tolerance = base_price + else: + price_with_tolerance = base_price * (1 + rate_tolerance) + + logging.info( + f":satellite: [magenta]Safe Staking to:[/magenta] " + f"[blue]netuid: [green]{netuid}[/green], amount: [green]{staking_balance}[/green], " + f"tolerance percentage: [green]{rate_tolerance * 100}%[/green], " + f"price limit: [green]{price_with_tolerance}[/green], " + f"original price: [green]{base_price}[/green], " + f"with partial stake: [green]{allow_partial_stake}[/green] " + f"on [blue]{subtensor.network}[/blue][/magenta]...[/magenta]" + ) + + limit_price = Balance.from_tao(price_with_tolerance).rao + call_params.update( + { + "limit_price": limit_price, + "allow_partial": allow_partial_stake, + } + ) + call_function = "add_stake_limit" + else: + logging.info( + f":satellite: [magenta]Staking to:[/magenta] " + f"[blue]netuid: [green]{netuid}[/green], amount: [green]{staking_balance}[/green] " + f"on [blue]{subtensor.network}[/blue][magenta]...[/magenta]" + ) + call_function = "add_stake" + call = subtensor.substrate.compose_call( call_module="SubtensorModule", - call_function="add_stake", - call_params={ - "hotkey": hotkey_ss58, - "amount_staked": staking_balance.rao, - "netuid": netuid, - }, + call_function=call_function, + call_params=call_params, ) - staking_response, err_msg = subtensor.sign_and_send_extrinsic( - call, - wallet, - wait_for_inclusion, - wait_for_finalization, + + success, message = subtensor.sign_and_send_extrinsic( + call=call, + wallet=wallet, + wait_for_inclusion=wait_for_inclusion, + wait_for_finalization=wait_for_finalization, use_nonce=True, sign_with="coldkey", nonce_key="coldkeypub", + period=period, ) - if staking_response is True: # If we successfully staked. + if success is True: # If we successfully staked. # We only wait here if we expect finalization. if not wait_for_finalization and not wait_for_inclusion: return True @@ -461,8 +510,8 @@

    Source code for bittensor.core.extrinsics.staking

    logging.success(":white_heavy_check_mark: [green]Finalized[/green]") logging.info( - f":satellite: [magenta]Checking Balance on:[/magenta] [blue]{subtensor.network}[/blue] " - "[magenta]...[/magenta]" + f":satellite: [magenta]Checking Balance on:[/magenta] " + f"[blue]{subtensor.network}[/blue] [magenta]...[/magenta]" ) new_block = subtensor.get_current_block() new_balance = subtensor.get_balance( @@ -482,19 +531,18 @@

    Source code for bittensor.core.extrinsics.staking

    ) return True else: - logging.error(":cross_mark: [red]Failed[/red]: Error unknown.") + if safe_staking and "Custom error: 8" in message: + logging.error( + ":cross_mark: [red]Failed[/red]: Price exceeded tolerance limit. Either increase price tolerance or enable partial staking." + ) + else: + logging.error(f":cross_mark: [red]Failed: {message}.[/red]") return False - # TODO I don't think these are used. Maybe should just catch SubstrateRequestException? - except NotRegisteredError: + except SubstrateRequestException as error: logging.error( - ":cross_mark: [red]Hotkey: {} is not registered.[/red]".format( - wallet.hotkey_str - ) + f":cross_mark: [red]Add Stake Error: {format_error_message(error)}[/red]" ) - return False - except StakeError as e: - logging.error(f":cross_mark: [red]Stake Error: {e}[/red]") return False
    @@ -509,6 +557,7 @@

    Source code for bittensor.core.extrinsics.staking

    amounts: Optional[list[Balance]] = None, wait_for_inclusion: bool = True, wait_for_finalization: bool = False, + period: Optional[int] = None, ) -> bool: """Adds stake to each ``hotkey_ss58`` in the list, using each amount, from a common coldkey. @@ -516,11 +565,15 @@

    Source code for bittensor.core.extrinsics.staking

    subtensor: The initialized SubtensorInterface object. wallet: Bittensor wallet object for the coldkey. hotkey_ss58s: List of hotkeys to stake to. + netuids: List of netuids to stake to. amounts: List of amounts to stake. If `None`, stake all to the first hotkey. wait_for_inclusion: If set, waits for the extrinsic to enter a block before returning `True`, or returns `False` if the extrinsic fails to enter the block within the timeout. wait_for_finalization: If set, waits for the extrinsic to be finalized on the chain before returning `True`, or returns `False` if the extrinsic fails to be finalized within the timeout. + period: The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: success: `True` if extrinsic was finalized or included in the block. `True` if any wallet was staked. If we did @@ -574,7 +627,7 @@

    Source code for bittensor.core.extrinsics.staking

    total_staking_rao = sum( [amount.rao if amount is not None else 0 for amount in new_amounts] ) - old_balance = inital_balance = subtensor.get_balance( + old_balance = initial_balance = subtensor.get_balance( wallet.coldkeypub.ss58_address, block=block ) if total_staking_rao == 0: @@ -626,33 +679,20 @@

    Source code for bittensor.core.extrinsics.staking

    "netuid": netuid, }, ) - staking_response, err_msg = subtensor.sign_and_send_extrinsic( - call, - wallet, - wait_for_inclusion, - wait_for_finalization, + success, message = subtensor.sign_and_send_extrinsic( + call=call, + wallet=wallet, + wait_for_inclusion=wait_for_inclusion, + wait_for_finalization=wait_for_finalization, use_nonce=True, nonce_key="coldkeypub", sign_with="coldkey", + period=period, ) - if staking_response is True: # If we successfully staked. + if success is True: # If we successfully staked. # We only wait here if we expect finalization. - if idx < len(hotkey_ss58s) - 1: - # Wait for tx rate limit. - tx_query = subtensor.substrate.query( - module="SubtensorModule", storage_function="TxRateLimit" - ) - tx_rate_limit_blocks: int = getattr(tx_query, "value", 0) - if tx_rate_limit_blocks > 0: - logging.error( - f":hourglass: [yellow]Waiting for tx rate limit: [white]{tx_rate_limit_blocks}[/white] " - f"blocks[/yellow]" - ) - # 12 seconds per block - time.sleep(tx_rate_limit_blocks * 12) - if not wait_for_finalization and not wait_for_inclusion: old_balance -= staking_balance successful_stakes += 1 @@ -687,17 +727,14 @@

    Source code for bittensor.core.extrinsics.staking

    break else: - logging.error(f":cross_mark: [red]Failed[/red]: {err_msg}") + logging.error(f":cross_mark: [red]Failed[/red]: {message}") continue - except NotRegisteredError: + except SubstrateRequestException as error: logging.error( - f":cross_mark: [red]Hotkey: {hotkey_ss58} is not registered.[/red]" + f":cross_mark: [red]Add Stake Multiple error: {format_error_message(error)}[/red]" ) continue - except StakeError as e: - logging.error(f":cross_mark: [red]Stake Error: {e}[/red]") - continue if successful_stakes != 0: logging.info( @@ -706,7 +743,7 @@

    Source code for bittensor.core.extrinsics.staking

    ) new_balance = subtensor.get_balance(wallet.coldkeypub.ss58_address) logging.info( - f"Balance: [blue]{inital_balance}[/blue] :arrow_right: [green]{new_balance}[/green]" + f"Balance: [blue]{initial_balance}[/blue] :arrow_right: [green]{new_balance}[/green]" ) return True diff --git a/static/python-api/html/_modules/bittensor/utils/substrate_utils/hasher.html b/static/python-api/html/_modules/bittensor/core/extrinsics/start_call.html similarity index 64% rename from static/python-api/html/_modules/bittensor/utils/substrate_utils/hasher.html rename to static/python-api/html/_modules/bittensor/core/extrinsics/start_call.html index d5c14c5599..94b1d06be0 100644 --- a/static/python-api/html/_modules/bittensor/utils/substrate_utils/hasher.html +++ b/static/python-api/html/_modules/bittensor/core/extrinsics/start_call.html @@ -7,7 +7,7 @@ - bittensor.utils.substrate_utils.hasher — Bittensor SDK Docs documentation + bittensor.core.extrinsics.start_call — Bittensor SDK Docs documentation @@ -44,7 +44,7 @@ - + @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -263,7 +266,7 @@ -
  • -

    Source code for bittensor.utils.substrate_utils.hasher

    -"""Helper functions used to calculate keys for Substrate storage items"""
    -
    -from hashlib import blake2b
    -
    -import xxhash
    -
    -
    -
    -[docs] -def blake2_256(data): - """ - Helper function to calculate a 32 bytes Blake2b hash for provided data, used as key for Substrate storage items - """ - return blake2b(data, digest_size=32).digest()
    - - - -
    -[docs] -def blake2_128(data): - """ - Helper function to calculate a 16 bytes Blake2b hash for provided data, used as key for Substrate storage items - """ - return blake2b(data, digest_size=16).digest()
    - - - -
    -[docs] -def blake2_128_concat(data): - """ - Helper function to calculate a 16 bytes Blake2b hash for provided data, concatenated with data, used as key - for Substrate storage items - """ - return blake2b(data, digest_size=16).digest() + data
    - - - -
    -[docs] -def xxh128(data): - """ - Helper function to calculate a 2 concatenated xxh64 hash for provided data, used as key for several Substrate - """ - storage_key1 = bytearray(xxhash.xxh64(data, seed=0).digest()) - storage_key1.reverse() - - storage_key2 = bytearray(xxhash.xxh64(data, seed=1).digest()) - storage_key2.reverse() - - return storage_key1 + storage_key2
    - - - -
    -[docs] -def two_x64_concat(data): +

    Source code for bittensor.core.extrinsics.start_call

    +from typing import TYPE_CHECKING, Optional
    +
    +from bittensor.utils import unlock_key
    +from bittensor.utils.btlogging import logging
    +
    +if TYPE_CHECKING:
    +    from bittensor_wallet import Wallet
    +    from bittensor.core.subtensor import Subtensor
    +
    +
    +
    +[docs] +def start_call_extrinsic( + subtensor: "Subtensor", + wallet: "Wallet", + netuid: int, + wait_for_inclusion: bool = True, + wait_for_finalization: bool = False, + period: Optional[int] = None, +) -> tuple[bool, str]: """ - Helper function to calculate a xxh64 hash with concatenated data for provided data, - used as key for several Substrate + Submits a start_call extrinsic to the blockchain, to trigger the start call process for a subnet (used to start a + new subnet's emission mechanism). + + Args: + subtensor (Subtensor): The Subtensor client instance used for blockchain interaction. + wallet (Wallet): The wallet used to sign the extrinsic (must be unlocked). + netuid (int): The UID of the target subnet for which the call is being initiated. + wait_for_inclusion (bool, optional): Whether to wait for the extrinsic to be included in a block. Defaults to True. + wait_for_finalization (bool, optional): Whether to wait for finalization of the extrinsic. Defaults to False. + period: The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. + + Returns: + Tuple[bool, str]: + - True and a success message if the extrinsic is successfully submitted or processed. + - False and an error message if the submission fails or the wallet cannot be unlocked. """ - storage_key = bytearray(xxhash.xxh64(data, seed=0).digest()) - storage_key.reverse() - - return storage_key + data
    - - - -
    -[docs] -def xxh64(data): - storage_key = bytearray(xxhash.xxh64(data, seed=0).digest()) - storage_key.reverse() - - return storage_key
    - - - -
    -[docs] -def identity(data): - return data
    + if not (unlock := unlock_key(wallet)).success: + logging.error(unlock.message) + return False, unlock.message + + start_call = subtensor.substrate.compose_call( + call_module="SubtensorModule", + call_function="start_call", + call_params={"netuid": netuid}, + ) + + success, message = subtensor.sign_and_send_extrinsic( + call=start_call, + wallet=wallet, + wait_for_inclusion=wait_for_inclusion, + wait_for_finalization=wait_for_finalization, + period=period, + ) + + if not wait_for_finalization and not wait_for_inclusion: + return True, message + + if success: + return True, "Success with `start_call` response." + + return True, message
    diff --git a/static/python-api/html/_modules/bittensor/core/extrinsics/transfer.html b/static/python-api/html/_modules/bittensor/core/extrinsics/transfer.html index 6525f2c427..9bcd073322 100644 --- a/static/python-api/html/_modules/bittensor/core/extrinsics/transfer.html +++ b/static/python-api/html/_modules/bittensor/core/extrinsics/transfer.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -334,16 +337,15 @@

    Source code for bittensor.core.extrinsics.transfer

    -from typing import TYPE_CHECKING
    +from typing import TYPE_CHECKING, Optional
     
     from bittensor.core.settings import NETWORK_EXPLORER_MAP
    -from bittensor.utils.balance import Balance
     from bittensor.utils import (
         is_valid_bittensor_address_or_public_key,
         unlock_key,
         get_explorer_url_for_network,
    -    format_error_message,
     )
    +from bittensor.utils.balance import Balance
     from bittensor.utils.btlogging import logging
     
     if TYPE_CHECKING:
    @@ -358,6 +360,7 @@ 

    Source code for bittensor.core.extrinsics.transfer

    amount: Balance, wait_for_inclusion: bool = True, wait_for_finalization: bool = False, + period: Optional[int] = None, ) -> tuple[bool, str, str]: """ Makes transfer from wallet to destination public key address. @@ -369,35 +372,39 @@

    Source code for bittensor.core.extrinsics.transfer

    amount (bittensor.utils.balance.Balance): Amount to stake as Bittensor balance. wait_for_inclusion (bool): If set, waits for the extrinsic to enter a block before returning `True`, or returns `False` if the extrinsic fails to enter the block within the timeout. - wait_for_finalization (bool): If set, waits for the extrinsic to be finalized on the chain before returning + wait_for_finalization (bool): If set, waits for the extrinsic to be finalized on the chain before returning `True`, or returns `False` if the extrinsic fails to be finalized within the timeout. + period (Optional[int]): The number of blocks during which the transaction will remain valid after it's submitted. + If the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: success, block hash, formatted error message """ call = subtensor.substrate.compose_call( call_module="Balances", - call_function="transfer_allow_death", + call_function="transfer_keep_alive", call_params={"dest": destination, "value": amount.rao}, ) - extrinsic = subtensor.substrate.create_signed_extrinsic( - call=call, keypair=wallet.coldkey - ) - response = subtensor.substrate.submit_extrinsic( - extrinsic=extrinsic, + + success, message = subtensor.sign_and_send_extrinsic( + call=call, + wallet=wallet, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + period=period, ) + # We only wait here if we expect finalization. if not wait_for_finalization and not wait_for_inclusion: - return True, "", "Success, extrinsic submitted without waiting." + return True, "", message # Otherwise continue with finalization. - if response.is_success: - block_hash_ = response.block_hash + if success: + block_hash_ = subtensor.get_block_hash() return True, block_hash_, "Success with response." - return False, "", format_error_message(response.error_message) + return False, "", message
    @@ -411,6 +418,7 @@

    Source code for bittensor.core.extrinsics.transfer

    wait_for_inclusion: bool = True, wait_for_finalization: bool = False, keep_alive: bool = True, + period: Optional[int] = None, ) -> bool: """Transfers funds from this wallet to the destination public key address. @@ -422,21 +430,24 @@

    Source code for bittensor.core.extrinsics.transfer

    transfer_all (bool): Whether to transfer all funds from this wallet to the destination address. wait_for_inclusion (bool): If set, waits for the extrinsic to enter a block before returning `True`, or returns `False` if the extrinsic fails to enter the block within the timeout. - wait_for_finalization (bool): If set, waits for the extrinsic to be finalized on the chain before returning + wait_for_finalization (bool): If set, waits for the extrinsic to be finalized on the chain before returning `True`, or returns `False` if the extrinsic fails to be finalized within the timeout. keep_alive (bool): If set, keeps the account alive by keeping the balance above the existential deposit. + period (Optional[int]): The number of blocks during which the transaction will remain valid after it's submitted. + If the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: success (bool): Flag is `True` if extrinsic was finalized or included in the block. If we did not wait for finalization / inclusion, the response is `True`, regardless of its inclusion. """ - destination = dest # Validate destination address. - if not is_valid_bittensor_address_or_public_key(destination): + if not is_valid_bittensor_address_or_public_key(dest): logging.error( - f":cross_mark: [red]Invalid destination SS58 address[/red]: {destination}" + f":cross_mark: [red]Invalid destination SS58 address[/red]: {dest}" ) return False + logging.info(f"Initiating transfer on network: {subtensor.network}") # Unlock wallet coldkey. if not (unlock := unlock_key(wallet)).success: @@ -457,7 +468,7 @@

    Source code for bittensor.core.extrinsics.transfer

    else: existential_deposit = subtensor.get_existential_deposit(block=block) - fee = subtensor.get_transfer_fee(wallet=wallet, dest=destination, value=amount) + fee = subtensor.get_transfer_fee(wallet=wallet, dest=dest, value=amount) # Check if we have enough balance. if transfer_all is True: @@ -473,14 +484,15 @@

    Source code for bittensor.core.extrinsics.transfer

    logging.error(f"\t\tFor fee:\t[blue]{fee}[/blue]") return False - logging.info(":satellite: [magenta]Transferring...</magenta") + logging.info(":satellite: [magenta]Transferring...[/magenta]") success, block_hash, err_msg = _do_transfer( subtensor=subtensor, wallet=wallet, - destination=destination, + destination=dest, amount=amount, wait_for_finalization=wait_for_finalization, wait_for_inclusion=wait_for_inclusion, + period=period, ) if success: @@ -506,9 +518,9 @@

    Source code for bittensor.core.extrinsics.transfer

    f"Balance: [blue]{account_balance}[/blue] :arrow_right: [green]{new_balance}[/green]" ) return True - else: - logging.error(f":cross_mark: [red]Failed[/red]: {err_msg}") - return False
    + + logging.error(f":cross_mark: [red]Failed[/red]: {err_msg}") + return False
    diff --git a/static/python-api/html/_modules/bittensor/core/extrinsics/unstaking.html b/static/python-api/html/_modules/bittensor/core/extrinsics/unstaking.html index 43417c4dc8..fe0c5f75e3 100644 --- a/static/python-api/html/_modules/bittensor/core/extrinsics/unstaking.html +++ b/static/python-api/html/_modules/bittensor/core/extrinsics/unstaking.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -334,12 +337,12 @@

    Source code for bittensor.core.extrinsics.unstaking

    -import time
    -from typing import Optional, TYPE_CHECKING
    +from typing import Optional, TYPE_CHECKING
    +
    +from async_substrate_interface.errors import SubstrateRequestException
     
    -from bittensor.core.errors import StakeError, NotRegisteredError
     from bittensor.core.extrinsics.utils import get_old_stakes
    -from bittensor.utils import unlock_key
    +from bittensor.utils import unlock_key, format_error_message
     from bittensor.utils.balance import Balance
     from bittensor.utils.btlogging import logging
     
    @@ -358,25 +361,41 @@ 

    Source code for bittensor.core.extrinsics.unstaking

    amount: Optional[Balance] = None, wait_for_inclusion: bool = True, wait_for_finalization: bool = False, + safe_staking: bool = False, + allow_partial_stake: bool = False, + rate_tolerance: float = 0.005, + period: Optional[int] = None, + unstake_all: bool = False, ) -> bool: """Removes stake into the wallet coldkey from the specified hotkey ``uid``. Args: - subtensor (bittensor.core.subtensor.Subtensor): Subtensor instance. - wallet (bittensor_wallet.Wallet): Bittensor wallet object. - hotkey_ss58 (Optional[str]): The ``ss58`` address of the hotkey to unstake from. By default, the wallet hotkey - is used. - netuid (Optional[int]): Subnet unique id. - amount (Union[Balance]): Amount to stake as Bittensor balance. - wait_for_inclusion (bool): If set, waits for the extrinsic to enter a block before returning ``True``, or - returns ``False`` if the extrinsic fails to enter the block within the timeout. - wait_for_finalization (bool): If set, waits for the extrinsic to be finalized on the chain before returning - ``True``, or returns ``False`` if the extrinsic fails to be finalized within the timeout. + subtensor: Subtensor instance. + wallet: Bittensor wallet object. + hotkey_ss58: The ``ss58`` address of the hotkey to unstake from. By default, the wallet hotkey is used. + netuid: Subnet unique id. + amount: Amount to stake as Bittensor balance. + wait_for_inclusion: If set, waits for the extrinsic to enter a block before returning ``True``, or returns + ``False`` if the extrinsic fails to enter the block within the timeout. + wait_for_finalization: If set, waits for the extrinsic to be finalized on the chain before returning ``True``, + or returns ``False`` if the extrinsic fails to be finalized within the timeout. + safe_staking: If true, enables price safety checks. + allow_partial_stake: If true, allows partial unstaking if price tolerance exceeded + rate_tolerance: Maximum allowed price decrease percentage (0.005 = 0.5%) + period: The number of blocks during which the transaction will remain valid after it's submitted. If the + transaction is not included in a block within that number of blocks, it will expire and be rejected. You can + think of it as an expiration date for the transaction. + unstake_all: If true, unstakes all tokens. Default is ``False``. Returns: - success (bool): Flag is ``True`` if extrinsic was finalized or included in the block. If we did not wait for - finalization / inclusion, the response is ``True``. + tuple[bool, str]: + A tuple containing: + - `True` and a success message if the unstake operation succeeded; + - `False` and an error message otherwise. """ + if amount and unstake_all: + raise ValueError("Cannot specify both `amount` and `unstake_all`.") + # Decrypt keys, if not (unlock := unlock_key(wallet)).success: logging.error(unlock.message) @@ -397,6 +416,7 @@

    Source code for bittensor.core.extrinsics.unstaking

    block=block, ) + # Covert to bittensor.Balance if amount is None: # Unstake it all. logging.warning( @@ -418,29 +438,65 @@

    Source code for bittensor.core.extrinsics.unstaking

    return False try: - logging.info( - f"Unstaking [blue]{unstaking_balance}[/blue] from [magenta]{hotkey_ss58}[/magenta] on [blue]{netuid}[/blue]" - ) + call_params = { + "hotkey": hotkey_ss58, + "netuid": netuid, + "amount_unstaked": unstaking_balance.rao, + } + + if safe_staking: + pool = subtensor.subnet(netuid=netuid) + base_price = pool.price.tao + + if pool.netuid == 0: + price_with_tolerance = base_price + else: + price_with_tolerance = base_price * (1 - rate_tolerance) + + logging.info( + f":satellite: [magenta]Safe Unstaking from:[/magenta] " + f"netuid: [green]{netuid}[/green], amount: [green]{unstaking_balance}[/green], " + f"tolerance percentage: [green]{rate_tolerance * 100}%[/green], " + f"price limit: [green]{price_with_tolerance}[/green], " + f"original price: [green]{base_price}[/green], " + f"with partial unstake: [green]{allow_partial_stake}[/green] " + f"on [blue]{subtensor.network}[/blue][magenta]...[/magenta]" + ) + + limit_price = Balance.from_tao(price_with_tolerance).rao + call_params.update( + { + "limit_price": limit_price, + "allow_partial": allow_partial_stake, + } + ) + call_function = "remove_stake_limit" + else: + logging.info( + f":satellite: [magenta]Unstaking from:[/magenta] " + f"netuid: [green]{netuid}[/green], amount: [green]{unstaking_balance}[/green] " + f"on [blue]{subtensor.network}[/blue][magenta]...[/magenta]" + ) + call_function = "remove_stake" + call = subtensor.substrate.compose_call( call_module="SubtensorModule", - call_function="remove_stake", - call_params={ - "hotkey": hotkey_ss58, - "amount_unstaked": unstaking_balance.rao, - "netuid": netuid, - }, + call_function=call_function, + call_params=call_params, ) - staking_response, err_msg = subtensor.sign_and_send_extrinsic( - call, - wallet, - wait_for_inclusion, - wait_for_finalization, + + success, message = subtensor.sign_and_send_extrinsic( + call=call, + wallet=wallet, + wait_for_inclusion=wait_for_inclusion, + wait_for_finalization=wait_for_finalization, nonce_key="coldkeypub", sign_with="coldkey", use_nonce=True, + period=period, ) - if staking_response is True: # If we successfully unstaked. + if success: # If we successfully unstaked. # We only wait here if we expect finalization. if not wait_for_finalization and not wait_for_inclusion: return True @@ -469,20 +525,91 @@

    Source code for bittensor.core.extrinsics.unstaking

    ) return True else: - logging.error(f":cross_mark: [red]Failed: {err_msg}.[/red]") + if safe_staking and "Custom error: 8" in message: + logging.error( + ":cross_mark: [red]Failed[/red]: Price exceeded tolerance limit. Either increase price tolerance or enable partial staking." + ) + else: + logging.error(f":cross_mark: [red]Failed: {message}.[/red]") return False - except NotRegisteredError: + except SubstrateRequestException as error: logging.error( - f":cross_mark: [red]Hotkey: {wallet.hotkey_str} is not registered.[/red]" + f":cross_mark: [red]Unstake filed with error: {format_error_message(error)}[/red]" ) - return False - except StakeError as e: - logging.error(f":cross_mark: [red]Stake Error: {e}[/red]") return False
    +
    +[docs] +def unstake_all_extrinsic( + subtensor: "Subtensor", + wallet: "Wallet", + hotkey: str, + netuid: int, + rate_tolerance: Optional[float] = 0.005, + wait_for_inclusion: bool = True, + wait_for_finalization: bool = False, + period: Optional[int] = None, +) -> tuple[bool, str]: + """Unstakes all TAO/Alpha associated with a hotkey from the specified subnets on the Bittensor network. + + Arguments: + subtensor: Subtensor instance. + wallet: The wallet of the stake owner. + hotkey: The SS58 address of the hotkey to unstake from. + netuid: The unique identifier of the subnet. + rate_tolerance: The maximum allowed price change ratio when unstaking. For example, 0.005 = 0.5% maximum + price decrease. If not passed (None), then unstaking goes without price limit. Default is `0.005`. + wait_for_inclusion: Waits for the transaction to be included in a block. Default is `True`. + wait_for_finalization: Waits for the transaction to be finalized on the blockchain. Default is `False`. + period: The number of blocks during which the transaction will remain valid after it's submitted. If the + transaction is not included in a block within that number of blocks, it will expire and be rejected. You can + think of it as an expiration date for the transaction. Default is `None`. + + Returns: + tuple[bool, str]: + A tuple containing: + - `True` and a success message if the unstake operation succeeded; + - `False` and an error message otherwise. + """ + if not (unlock := unlock_key(wallet)).success: + logging.error(unlock.message) + return False, unlock.message + + call_params = { + "hotkey": hotkey, + "netuid": netuid, + "limit_price": None, + } + + if rate_tolerance: + current_price = subtensor.subnet(netuid=netuid).price + limit_price = current_price * (1 - rate_tolerance) + call_params.update({"limit_price": limit_price}) + + call = subtensor.substrate.compose_call( + call_module="SubtensorModule", + call_function="remove_stake_full_limit", + call_params=call_params, + ) + + success, message = subtensor.sign_and_send_extrinsic( + call=call, + wallet=wallet, + wait_for_inclusion=wait_for_inclusion, + wait_for_finalization=wait_for_finalization, + nonce_key="coldkeypub", + sign_with="coldkey", + use_nonce=True, + period=period, + ) + + return success, message
    + + +
    [docs] def unstake_multiple_extrinsic( @@ -493,24 +620,34 @@

    Source code for bittensor.core.extrinsics.unstaking

    amounts: Optional[list[Balance]] = None, wait_for_inclusion: bool = True, wait_for_finalization: bool = False, + period: Optional[int] = None, + unstake_all: bool = False, ) -> bool: """Removes stake from each ``hotkey_ss58`` in the list, using each amount, to a common coldkey. Args: - subtensor (bittensor.core.subtensor.Subtensor): Subtensor instance. - wallet (bittensor_wallet.Wallet): The wallet with the coldkey to unstake to. - hotkey_ss58s (List[str]): List of hotkeys to unstake from. - netuids (List[int]): List of subnets unique IDs to unstake from. - amounts (List[Balance]): List of amounts to unstake. If ``None``, unstake all. - wait_for_inclusion (bool): If set, waits for the extrinsic to enter a block before returning ``True``, or + subtensor: Subtensor instance. + wallet: The wallet with the coldkey to unstake to. + hotkey_ss58s: List of hotkeys to unstake from. + netuids: List of subnets unique IDs to unstake from. + amounts: List of amounts to unstake. If ``None``, unstake all. + wait_for_inclusion: If set, waits for the extrinsic to enter a block before returning ``True``, or returns ``False`` if the extrinsic fails to enter the block within the timeout. - wait_for_finalization (bool): If set, waits for the extrinsic to be finalized on the chain before returning - ``True``, or returns ``False`` if the extrinsic fails to be finalized within the timeout. + wait_for_finalization: If set, waits for the extrinsic to be finalized on the chain before returning ``True``, + or returns ``False`` if the extrinsic fails to be finalized within the timeout. + period: The number of blocks during which the transaction will remain valid after it's submitted. If the + transaction is not included in a block within that number of blocks, it will expire and be rejected. You can + think of it as an expiration date for the transaction. + unstake_all: If true, unstakes all tokens. Default is ``False``. Returns: - success (bool): Flag is ``True`` if extrinsic was finalized or included in the block. Flag is ``True`` if any - wallet was unstaked. If we did not wait for finalization / inclusion, the response is ``True``. + tuple[bool, str]: + A tuple containing: + - `True` and a success message if the unstake operation succeeded; + - `False` and an error message otherwise. """ + if amounts and unstake_all: + raise ValueError("Cannot specify both `amounts` and `unstake_all`.") if not isinstance(hotkey_ss58s, list) or not all( isinstance(hotkey_ss58, str) for hotkey_ss58 in hotkey_ss58s @@ -561,7 +698,7 @@

    Source code for bittensor.core.extrinsics.unstaking

    for idx, (hotkey_ss58, amount, old_stake, netuid) in enumerate( zip(hotkey_ss58s, amounts, old_stakes, netuids) ): - # Covert to bittensor.Balance + # Convert to bittensor.Balance if amount is None: # Unstake it all. unstaking_balance = old_stake @@ -595,28 +732,19 @@

    Source code for bittensor.core.extrinsics.unstaking

    }, ) staking_response, err_msg = subtensor.sign_and_send_extrinsic( - call, - wallet, - wait_for_inclusion, - wait_for_finalization, + call=call, + wallet=wallet, + wait_for_inclusion=wait_for_inclusion, + wait_for_finalization=wait_for_finalization, nonce_key="coldkeypub", sign_with="coldkey", use_nonce=True, + period=period, ) if staking_response is True: # If we successfully unstaked. # We only wait here if we expect finalization. - if idx < len(hotkey_ss58s) - 1: - # Wait for tx rate limit. - tx_rate_limit_blocks = subtensor.tx_rate_limit() - if tx_rate_limit_blocks > 0: - logging.info( - f":hourglass: [yellow]Waiting for tx rate limit: " - f"[white]{tx_rate_limit_blocks}[/white] blocks[/yellow]" - ) - time.sleep(tx_rate_limit_blocks * 12) # 12 seconds per block - if not wait_for_finalization and not wait_for_inclusion: successful_unstakes += 1 continue @@ -641,14 +769,11 @@

    Source code for bittensor.core.extrinsics.unstaking

    logging.error(f":cross_mark: [red]Failed: {err_msg}.[/red]") continue - except NotRegisteredError: + except SubstrateRequestException as error: logging.error( - f":cross_mark: [red]Hotkey[/red] [blue]{hotkey_ss58}[/blue] [red]is not registered.[/red]" + f":cross_mark: [red]Multiple unstake filed with error: {format_error_message(error)}[/red]" ) - continue - except StakeError as e: - logging.error(":cross_mark: [red]Stake Error: {}[/red]".format(e)) - continue + return False if successful_unstakes != 0: logging.info( diff --git a/static/python-api/html/_modules/bittensor/core/extrinsics/utils.html b/static/python-api/html/_modules/bittensor/core/extrinsics/utils.html index d3a2eaa722..1e780bbdff 100644 --- a/static/python-api/html/_modules/bittensor/core/extrinsics/utils.html +++ b/static/python-api/html/_modules/bittensor/core/extrinsics/utils.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -338,98 +341,11 @@

    Source code for bittensor.core.extrinsics.utils

    < from typing import TYPE_CHECKING -from async_substrate_interface.errors import SubstrateRequestException - -from bittensor.utils import format_error_message from bittensor.utils.balance import Balance -from bittensor.utils.btlogging import logging if TYPE_CHECKING: from bittensor_wallet import Wallet - from bittensor.core.async_subtensor import AsyncSubtensor - from async_substrate_interface import ( - AsyncExtrinsicReceipt, - ExtrinsicReceipt, - ) - from bittensor.core.subtensor import Subtensor from bittensor.core.chain_data import StakeInfo - from scalecodec.types import GenericExtrinsic - - -def submit_extrinsic( - subtensor: "Subtensor", - extrinsic: "GenericExtrinsic", - wait_for_inclusion: bool, - wait_for_finalization: bool, -) -> "ExtrinsicReceipt": - """ - Submits an extrinsic to the substrate blockchain and handles potential exceptions. - - This function attempts to submit an extrinsic to the substrate blockchain with specified options - for waiting for inclusion in a block and/or finalization. If an exception occurs during submission, - it logs the error and re-raises the exception. - - Args: - subtensor: The Subtensor instance used to interact with the blockchain. - extrinsic (scalecodec.types.GenericExtrinsic): The extrinsic to be submitted to the blockchain. - wait_for_inclusion (bool): Whether to wait for the extrinsic to be included in a block. - wait_for_finalization (bool): Whether to wait for the extrinsic to be finalized on the blockchain. - - Returns: - response: The response from the substrate after submitting the extrinsic. - - Raises: - SubstrateRequestException: If the submission of the extrinsic fails, the error is logged and re-raised. - """ - try: - return subtensor.substrate.submit_extrinsic( - extrinsic, - wait_for_inclusion=wait_for_inclusion, - wait_for_finalization=wait_for_finalization, - ) - except SubstrateRequestException as e: - logging.error(format_error_message(e.args[0])) - # Re-raise the exception for retrying of the extrinsic call. If we remove the retry logic, - # the raise will need to be removed. - raise - - -async def async_submit_extrinsic( - subtensor: "AsyncSubtensor", - extrinsic: "GenericExtrinsic", - wait_for_inclusion: bool, - wait_for_finalization: bool, -) -> "AsyncExtrinsicReceipt": - """ - Submits an extrinsic to the substrate blockchain and handles potential exceptions. - - This function attempts to submit an extrinsic to the substrate blockchain with specified options - for waiting for inclusion in a block and/or finalization. If an exception occurs during submission, - it logs the error and re-raises the exception. - - Args: - subtensor: The AsyncSubtensor instance used to interact with the blockchain. - extrinsic: The extrinsic to be submitted to the blockchain. - wait_for_inclusion: Whether to wait for the extrinsic to be included in a block. - wait_for_finalization: Whether to wait for the extrinsic to be finalized on the blockchain. - - Returns: - response: The response from the substrate after submitting the extrinsic. - - Raises: - SubstrateRequestException: If the submission of the extrinsic fails, the error is logged and re-raised. - """ - try: - return await subtensor.substrate.submit_extrinsic( - extrinsic, - wait_for_inclusion=wait_for_inclusion, - wait_for_finalization=wait_for_finalization, - ) - except SubstrateRequestException as e: - logging.error(format_error_message(e.args[0])) - # Re-raise the exception for retrying of the extrinsic call. If we remove the retry logic, - # the raise will need to be removed. - raise
    @@ -439,19 +355,19 @@

    Source code for bittensor.core.extrinsics.utils

    < hotkey_ss58s: list[str], netuids: list[int], all_stakes: list["StakeInfo"], -) -> list[Balance]: +) -> list["Balance"]: """ Retrieve the previous staking balances for a wallet's hotkeys across given netuids. - This function searches through the provided staking data to find the stake amounts - for the specified hotkeys and netuids associated with the wallet's coldkey. If no match - is found for a particular hotkey and netuid combination, a default balance of zero is returned. + This function searches through the provided staking data to find the stake amounts for the specified hotkeys and + netuids associated with the wallet's coldkey. If no match is found for a particular hotkey and netuid combination, + a default balance of zero is returned. Args: - wallet (Wallet): The wallet containing the coldkey to compare with stake data. - hotkey_ss58s (list[str]): List of hotkey SS58 addresses for which stakes are retrieved. - netuids (list[int]): List of network unique identifiers (netuids) corresponding to the hotkeys. - all_stakes (list[StakeInfo]): A collection of all staking information to search through. + wallet: The wallet containing the coldkey to compare with stake data. + hotkey_ss58s: List of hotkey SS58 addresses for which stakes are retrieved. + netuids: List of network unique identifiers (netuids) corresponding to the hotkeys. + all_stakes: A collection of all staking information to search through. Returns: list[Balance]: A list of Balances, each representing the stake for a given hotkey and netuid. diff --git a/static/python-api/html/_modules/bittensor/core/metagraph.html b/static/python-api/html/_modules/bittensor/core/metagraph.html index 8b43abd6c9..e71c36055c 100644 --- a/static/python-api/html/_modules/bittensor/core/metagraph.html +++ b/static/python-api/html/_modules/bittensor/core/metagraph.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -334,7 +337,9 @@

    Source code for bittensor.core.metagraph

    -import copy
    +import asyncio
    +import contextlib
    +import copy
     import os
     import pickle
     import typing
    @@ -346,6 +351,7 @@ 

    Source code for bittensor.core.metagraph

     import numpy as np
     from async_substrate_interface.errors import SubstrateRequestException
     from numpy.typing import NDArray
    +from packaging import version
     
     from bittensor.core import settings
     from bittensor.core.chain_data import (
    @@ -378,7 +384,6 @@ 

    Source code for bittensor.core.metagraph

     
     
     Tensor = Union["torch.nn.Parameter", NDArray]
    -ROOT_TAO_STAKES_WEIGHT = 0.18
     
     
     METAGRAPH_STATE_DICT_NDARRAY_KEYS = [
    @@ -485,6 +490,30 @@ 

    Source code for bittensor.core.metagraph

     
     
     
    +
    +[docs] +def safe_globals(): + """ + Context manager to load torch files for version 2.6+ + """ + if version.parse(torch.__version__).release < version.parse("2.6").release: + return contextlib.nullcontext() + + np_core = ( + np._core if version.parse(np.__version__) >= version.parse("2.0.0") else np.core + ) + allow_list = [ + np_core.multiarray._reconstruct, + np.ndarray, + np.dtype, + type(np.dtype(np.uint32)), + np.dtypes.Float32DType, + bytes, + ] + return torch.serialization.safe_globals(allow_list)
    + + +
    [docs] class MetagraphMixin(ABC): @@ -1123,14 +1152,6 @@

    Source code for bittensor.core.metagraph

                 [neuron.validator_trust for neuron in self.neurons],
                 dtype=self._dtype_registry["float32"],
             )
    -        self.total_stake = self._create_tensor(
    -            [neuron.total_stake.tao for neuron in self.neurons],
    -            dtype=self._dtype_registry["float32"],
    -        )
    -        self.stake = self._create_tensor(
    -            [neuron.stake.tao for neuron in self.neurons],
    -            dtype=self._dtype_registry["float32"],
    -        )
             self.axons = [n.axon_info for n in self.neurons]
     
     
    @@ -1496,7 +1517,8 @@

    Source code for bittensor.core.metagraph

             """
     
             graph_file = latest_block_path(dir_path)
    -        state_dict = torch.load(graph_file)
    +        with safe_globals():
    +            state_dict = torch.load(graph_file)
             self.n = torch.nn.Parameter(state_dict["n"], requires_grad=False)
             self.block = torch.nn.Parameter(state_dict["block"], requires_grad=False)
             self.uids = torch.nn.Parameter(state_dict["uids"], requires_grad=False)
    @@ -1634,7 +1656,8 @@ 

    Source code for bittensor.core.metagraph

                 try:
                     import torch as real_torch
     
    -                state_dict = real_torch.load(graph_filename)
    +                with safe_globals():
    +                    state_dict = real_torch.load(graph_filename)
                     for key in METAGRAPH_STATE_DICT_NDARRAY_KEYS:
                         state_dict[key] = state_dict[key].detach().numpy()
                     del real_torch
    @@ -1782,13 +1805,13 @@ 

    Source code for bittensor.core.metagraph

     
             # If not a 'lite' version, compute and set weights and bonds for each neuron
             if not lite:
    -            await self._set_weights_and_bonds(subtensor=subtensor)
    +            await self._set_weights_and_bonds(subtensor=subtensor, block=block)
     
             # Fills in the stake associated attributes of a class instance from a chain response.
    -        await self._get_all_stakes_from_chain()
    +        await self._get_all_stakes_from_chain(block=block)
     
             # apply MetagraphInfo data to instance
    -        await self._apply_metagraph_info()
    + await self._apply_metagraph_info(block=block)
    async def _initialize_subtensor( @@ -1862,9 +1885,7 @@

    Source code for bittensor.core.metagraph

                 self.neurons = await subtensor.neurons(block=block, netuid=self.netuid)
             self.lite = lite
     
    -    async def _set_weights_and_bonds(
    -        self, subtensor: Optional["AsyncSubtensor"] = None
    -    ):
    +    async def _set_weights_and_bonds(self, subtensor: "AsyncSubtensor", block: int):
             """
             Computes and sets the weights and bonds for each neuron in the metagraph. This method is responsible for
             processing the raw weight and bond data obtained from the network and converting it into a structured format
    @@ -1885,6 +1906,7 @@ 

    Source code for bittensor.core.metagraph

                     [neuron.weights for neuron in self.neurons],
                     "weights",
                     subtensor,
    +                block=block,
                 )
             else:
                 self.weights = self._process_weights_or_bonds(
    @@ -1895,7 +1917,7 @@ 

    Source code for bittensor.core.metagraph

                 )
     
         async def _process_root_weights(
    -        self, data: list, attribute: str, subtensor: "AsyncSubtensor"
    +        self, data: list, attribute: str, subtensor: "AsyncSubtensor", block: int
         ) -> Union[NDArray, "torch.nn.Parameter"]:
             """
             Specifically processes the root weights data for the metagraph. This method is similar to :func:`_process_weights_or_bonds`
    @@ -1916,8 +1938,10 @@ 

    Source code for bittensor.core.metagraph

                     self.root_weights = self._process_root_weights(raw_root_weights_data, "weights", subtensor)
             """
             data_array = []
    -        n_subnets = await subtensor.get_total_subnets() or 0
    -        subnets = await subtensor.get_subnets()
    +        n_subnets_, subnets = await asyncio.gather(
    +            subtensor.get_total_subnets(block=block), subtensor.get_subnets(block=block)
    +        )
    +        n_subnets = n_subnets_ or 0
             for item in data:
                 if len(item) == 0:
                     if use_torch():
    @@ -1952,13 +1976,14 @@ 

    Source code for bittensor.core.metagraph

                 )
             return tensor_param
     
    -    async def _get_all_stakes_from_chain(self):
    +    async def _get_all_stakes_from_chain(self, block: int):
             """Fills in the stake associated attributes of a class instance from a chain response."""
             try:
                 result = await self.subtensor.query_runtime_api(
                     runtime_api="SubnetInfoRuntimeApi",
                     method="get_subnet_state",
                     params=[self.netuid],
    +                block=block,
                 )
     
                 if result is None:
    @@ -1983,7 +2008,10 @@ 

    Source code for bittensor.core.metagraph

                     dtype=self._dtype_registry["float32"],
                 )
                 self.tao_stake = self._create_tensor(
    -                [b.tao * ROOT_TAO_STAKES_WEIGHT for b in subnet_state.tao_stake],
    +                [
    +                    b.tao * settings.ROOT_TAO_STAKE_WEIGHT
    +                    for b in subnet_state.tao_stake
    +                ],
                     dtype=self._dtype_registry["float32"],
                 )
                 self.total_stake = self.stake = self._create_tensor(
    @@ -1994,9 +2022,11 @@ 

    Source code for bittensor.core.metagraph

             except (SubstrateRequestException, AttributeError) as e:
                 logging.debug(e)
     
    -    async def _apply_metagraph_info(self):
    +    async def _apply_metagraph_info(self, block: int):
             """Retrieves metagraph information for a specific subnet and applies it using a mixin."""
    -        metagraph_info = await self.subtensor.get_metagraph_info(self.netuid)
    +        metagraph_info = await self.subtensor.get_metagraph_info(
    +            self.netuid, block=block
    +        )
             if metagraph_info:
                 self._apply_metagraph_info_mixin(metagraph_info=metagraph_info)
    @@ -2014,7 +2044,7 @@

    Source code for bittensor.core.metagraph

             subtensor: Optional["Subtensor"] = None,
         ):
             super().__init__(netuid, network, lite, sync, subtensor)
    -        if sync:
    +        if self.should_sync:
                 self.sync()
     
     
    @@ -2098,13 +2128,13 @@

    Source code for bittensor.core.metagraph

     
             # If not a 'lite' version, compute and set weights and bonds for each neuron
             if not lite:
    -            self._set_weights_and_bonds(subtensor=subtensor)
    +            self._set_weights_and_bonds(subtensor=subtensor, block=block)
     
             # Fills in the stake associated attributes of a class instance from a chain response.
    -        self._get_all_stakes_from_chain()
    +        self._get_all_stakes_from_chain(block=block)
     
             # apply MetagraphInfo data to instance
    -        self._apply_metagraph_info()
    + self._apply_metagraph_info(block=block)
    def _initialize_subtensor(self, subtensor: "Subtensor") -> "Subtensor": @@ -2175,7 +2205,7 @@

    Source code for bittensor.core.metagraph

                 self.neurons = subtensor.neurons(block=block, netuid=self.netuid)
             self.lite = lite
     
    -    def _set_weights_and_bonds(self, subtensor: Optional["Subtensor"] = None):
    +    def _set_weights_and_bonds(self, block: int, subtensor: "Subtensor"):
             """
             Computes and sets the weights and bonds for each neuron in the metagraph. This method is responsible for
             processing the raw weight and bond data obtained from the network and converting it into a structured format
    @@ -2192,9 +2222,7 @@ 

    Source code for bittensor.core.metagraph

             """
             if self.netuid == 0:
                 self.weights = self._process_root_weights(
    -                [neuron.weights for neuron in self.neurons],
    -                "weights",
    -                subtensor,
    +                [neuron.weights for neuron in self.neurons], "weights", subtensor, block
                 )
             else:
                 self.weights = self._process_weights_or_bonds(
    @@ -2205,7 +2233,7 @@ 

    Source code for bittensor.core.metagraph

                 )
     
         def _process_root_weights(
    -        self, data: list, attribute: str, subtensor: "Subtensor"
    +        self, data: list, attribute: str, subtensor: "Subtensor", block: int
         ) -> Union[NDArray, "torch.nn.Parameter"]:
             """
             Specifically processes the root weights data for the metagraph. This method is similar to :func:`_process_weights_or_bonds`
    @@ -2226,8 +2254,8 @@ 

    Source code for bittensor.core.metagraph

                     self.root_weights = self._process_root_weights(raw_root_weights_data, "weights", subtensor)
             """
             data_array = []
    -        n_subnets = subtensor.get_total_subnets() or 0
    -        subnets = subtensor.get_subnets()
    +        n_subnets = subtensor.get_total_subnets(block=block) or 0
    +        subnets = subtensor.get_subnets(block=block)
             for item in data:
                 if len(item) == 0:
                     if use_torch():
    @@ -2262,13 +2290,14 @@ 

    Source code for bittensor.core.metagraph

                 )
             return tensor_param
     
    -    def _get_all_stakes_from_chain(self):
    +    def _get_all_stakes_from_chain(self, block: int):
             """Fills in the stake associated attributes of a class instance from a chain response."""
             try:
                 result = self.subtensor.query_runtime_api(
                     runtime_api="SubnetInfoRuntimeApi",
                     method="get_subnet_state",
                     params=[self.netuid],
    +                block=block,
                 )
     
                 if result is None:
    @@ -2293,7 +2322,10 @@ 

    Source code for bittensor.core.metagraph

                     dtype=self._dtype_registry["float32"],
                 )
                 self.tao_stake = self._create_tensor(
    -                [b.tao * ROOT_TAO_STAKES_WEIGHT for b in subnet_state.tao_stake],
    +                [
    +                    b.tao * settings.ROOT_TAO_STAKE_WEIGHT
    +                    for b in subnet_state.tao_stake
    +                ],
                     dtype=self._dtype_registry["float32"],
                 )
                 self.total_stake = self.stake = self._create_tensor(
    @@ -2304,9 +2336,9 @@ 

    Source code for bittensor.core.metagraph

             except (SubstrateRequestException, AttributeError) as e:
                 logging.debug(e)
     
    -    def _apply_metagraph_info(self):
    +    def _apply_metagraph_info(self, block: int):
             """Retrieves metagraph information for a specific subnet and applies it using a mixin."""
    -        metagraph_info = self.subtensor.get_metagraph_info(self.netuid)
    +        metagraph_info = self.subtensor.get_metagraph_info(self.netuid, block=block)
             if metagraph_info:
                 self._apply_metagraph_info_mixin(metagraph_info=metagraph_info)
    diff --git a/static/python-api/html/_modules/bittensor/core/stream.html b/static/python-api/html/_modules/bittensor/core/stream.html index b1cab7a2f3..bc9cbcc756 100644 --- a/static/python-api/html/_modules/bittensor/core/stream.html +++ b/static/python-api/html/_modules/bittensor/core/stream.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    diff --git a/static/python-api/html/_modules/bittensor/core/subtensor.html b/static/python-api/html/_modules/bittensor/core/subtensor.html index 29add7f42f..a140bf372f 100644 --- a/static/python-api/html/_modules/bittensor/core/subtensor.html +++ b/static/python-api/html/_modules/bittensor/core/subtensor.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -335,40 +338,60 @@

    Source code for bittensor.core.subtensor

     import copy
    +from datetime import datetime, timezone
     from functools import lru_cache
     from typing import TYPE_CHECKING, Any, Iterable, Optional, Union, cast
     
     import numpy as np
    -import requests
     import scalecodec
     from async_substrate_interface.errors import SubstrateRequestException
    -from async_substrate_interface.types import ScaleObj
    +from async_substrate_interface.substrate_addons import RetrySyncSubstrate
     from async_substrate_interface.sync_substrate import SubstrateInterface
    -from async_substrate_interface.utils import json
    +from async_substrate_interface.types import ScaleObj
    +from bittensor_drand import get_encrypted_commitment
     from numpy.typing import NDArray
     
     from bittensor.core.async_subtensor import ProposalVoteData
     from bittensor.core.axon import Axon
     from bittensor.core.chain_data import (
    +    DelegatedInfo,
         DelegateInfo,
         DynamicInfo,
         MetagraphInfo,
         NeuronInfo,
         NeuronInfoLite,
    +    SelectiveMetagraphIndex,
         StakeInfo,
    +    SubnetInfo,
    +    SubnetIdentity,
         SubnetHyperparameters,
         WeightCommitInfo,
    -    SubnetIdentity,
    -    SubnetInfo,
         decode_account_id,
     )
    -from bittensor.core.chain_data.utils import decode_metadata
    +from bittensor.core.chain_data.chain_identity import ChainIdentity
    +from bittensor.core.chain_data.utils import (
    +    decode_block,
    +    decode_metadata,
    +    decode_revealed_commitment,
    +    decode_revealed_commitment_with_hotkey,
    +)
     from bittensor.core.config import Config
    +from bittensor.core.errors import ChainError
    +from bittensor.core.extrinsics.children import (
    +    set_children_extrinsic,
    +    root_set_pending_childkey_cooldown_extrinsic,
    +)
     from bittensor.core.extrinsics.commit_reveal import commit_reveal_v3_extrinsic
     from bittensor.core.extrinsics.commit_weights import (
         commit_weights_extrinsic,
         reveal_weights_extrinsic,
     )
    +from bittensor.core.extrinsics.liquidity import (
    +    add_liquidity_extrinsic,
    +    modify_liquidity_extrinsic,
    +    remove_liquidity_extrinsic,
    +    toggle_user_liquidity_extrinsic,
    +)
     from bittensor.core.extrinsics.move_stake import (
         transfer_stake_extrinsic,
         swap_stake_extrinsic,
    @@ -385,6 +408,7 @@ 

    Source code for bittensor.core.subtensor

         set_root_weights_extrinsic,
     )
     from bittensor.core.extrinsics.serving import (
    +    get_last_bonds_reset,
         publish_metadata,
         get_metadata,
         serve_axon_extrinsic,
    @@ -394,8 +418,14 @@ 

    Source code for bittensor.core.subtensor

         add_stake_extrinsic,
         add_stake_multiple_extrinsic,
     )
    +from bittensor.core.extrinsics.start_call import start_call_extrinsic
    +from bittensor.core.extrinsics.take import (
    +    decrease_take_extrinsic,
    +    increase_take_extrinsic,
    +)
     from bittensor.core.extrinsics.transfer import transfer_extrinsic
     from bittensor.core.extrinsics.unstaking import (
    +    unstake_all_extrinsic,
         unstake_extrinsic,
         unstake_multiple_extrinsic,
     )
    @@ -404,16 +434,15 @@ 

    Source code for bittensor.core.subtensor

         version_as_int,
         SS58_FORMAT,
         TYPE_REGISTRY,
    -    DELEGATES_DETAILS_URL,
     )
     from bittensor.core.types import ParamWithTypes, SubtensorMixin
     from bittensor.utils import (
    -    torch,
    -    format_error_message,
    +    Certificate,
         decode_hex_identity_dict,
    +    format_error_message,
    +    is_valid_ss58_address,
    +    torch,
         u16_normalized_float,
    -    _decode_hex_identity_dict,
    -    Certificate,
         u64_normalized_float,
     )
     from bittensor.utils.balance import (
    @@ -423,8 +452,18 @@ 

    Source code for bittensor.core.subtensor

         check_and_convert_to_balance,
     )
     from bittensor.utils.btlogging import logging
    -from bittensor.utils.delegates_details import DelegatesDetails
    -from bittensor.utils.weight_utils import generate_weight_hash
    +from bittensor.utils.liquidity import (
    +    calculate_fees,
    +    get_fees,
    +    tick_to_price,
    +    price_to_tick,
    +    LiquidityPosition,
    +)
    +from bittensor.utils.weight_utils import (
    +    generate_weight_hash,
    +    convert_uids_and_weights,
    +    U16_MAX,
    +)
     
     if TYPE_CHECKING:
         from bittensor_wallet import Wallet
    @@ -435,23 +474,32 @@ 

    Source code for bittensor.core.subtensor

     
    [docs] class Subtensor(SubtensorMixin): - """Thin layer for interacting with Substrate Interface. Mostly a collection of frequently-used calls.""" + """Thin layer for interacting with Substrate Interface. Mostly a collection of frequently used calls.""" def __init__( self, network: Optional[str] = None, - config: Optional["Config"] = None, - _mock: bool = False, + config: Optional[Config] = None, log_verbose: bool = False, + fallback_endpoints: Optional[list[str]] = None, + retry_forever: bool = False, + _mock: bool = False, + archive_endpoints: Optional[list[str]] = None, ): """ Initializes an instance of the Subtensor class. Arguments: - network (str): The network name or type to connect to. - config (Optional[Config]): Configuration object for the AsyncSubtensor instance. + network: The network name or type to connect to. + config: Configuration object for the AsyncSubtensor instance. + log_verbose: Enables or disables verbose logging. + fallback_endpoints: List of fallback endpoints to use if default or provided network is not available. + Defaults to `None`. + retry_forever: Whether to retry forever on connection errors. Defaults to `False`. _mock: Whether this is a mock instance. Mainly just for use in testing. - log_verbose (bool): Enables or disables verbose logging. + archive_endpoints: Similar to fallback_endpoints, but specifically only archive nodes. Will be used in cases + where you are requesting a block that is too old for your current (presumably lite) node. Defaults to + `None` Raises: Any exceptions raised during the setup, configuration, or connection process. @@ -460,7 +508,6 @@

    Source code for bittensor.core.subtensor

                 config = self.config()
             self._config = copy.deepcopy(config)
             self.chain_endpoint, self.network = self.setup_config(network, self._config)
    -        self._mock = _mock
     
             self.log_verbose = log_verbose
             self._check_and_log_network_settings()
    @@ -469,13 +516,11 @@ 

    Source code for bittensor.core.subtensor

                 f"Connecting to network: [blue]{self.network}[/blue], "
                 f"chain_endpoint: [blue]{self.chain_endpoint}[/blue]> ..."
             )
    -        self.substrate = SubstrateInterface(
    -            url=self.chain_endpoint,
    -            ss58_format=SS58_FORMAT,
    -            type_registry=TYPE_REGISTRY,
    -            use_remote_preset=True,
    -            chain_name="Bittensor",
    +        self.substrate = self._get_substrate(
    +            fallback_endpoints=fallback_endpoints,
    +            retry_forever=retry_forever,
                 _mock=_mock,
    +            archive_endpoints=archive_endpoints,
             )
             if self.log_verbose:
                 logging.info(
    @@ -491,12 +536,52 @@ 

    Source code for bittensor.core.subtensor

     
    [docs] def close(self): - """ - Closes the websocket connection - """ + """Closes the websocket connection.""" self.substrate.close()
    + def _get_substrate( + self, + fallback_endpoints: Optional[list[str]] = None, + retry_forever: bool = False, + _mock: bool = False, + archive_endpoints: Optional[list[str]] = None, + ) -> Union[SubstrateInterface, RetrySyncSubstrate]: + """Creates the Substrate instance based on provided arguments. + + Arguments: + fallback_endpoints: List of fallback chains endpoints to use if main network isn't available. Defaults to + `None`. + retry_forever: Whether to retry forever on connection errors. Defaults to `False`. + _mock: Whether this is a mock instance. Mainly just for use in testing. + archive_endpoints: Similar to fallback_endpoints, but specifically only archive nodes. Will be used in cases + where you are requesting a block that is too old for your current (presumably lite) node. Defaults to + `None` + + Returns: + the instance of the SubstrateInterface or RetrySyncSubstrate class. + """ + if fallback_endpoints or retry_forever or archive_endpoints: + return RetrySyncSubstrate( + url=self.chain_endpoint, + ss58_format=SS58_FORMAT, + type_registry=TYPE_REGISTRY, + use_remote_preset=True, + chain_name="Bittensor", + fallback_chains=fallback_endpoints, + retry_forever=retry_forever, + _mock=_mock, + archive_nodes=archive_endpoints, + ) + return SubstrateInterface( + url=self.chain_endpoint, + ss58_format=SS58_FORMAT, + type_registry=TYPE_REGISTRY, + use_remote_preset=True, + chain_name="Bittensor", + _mock=_mock, + ) + # Subtensor queries ===========================================================================================
    @@ -731,13 +816,37 @@

    Source code for bittensor.core.subtensor

                 Optional[DynamicInfo]: A list of DynamicInfo objects, each containing detailed information about a subnet.
     
             """
    -        block_hash = self.determine_block_hash(block)
    +        block_hash = self.determine_block_hash(block=block)
             query = self.substrate.runtime_call(
    -            "SubnetInfoRuntimeApi",
    -            "get_all_dynamic_info",
    +            api="SubnetInfoRuntimeApi",
    +            method="get_all_dynamic_info",
                 block_hash=block_hash,
             )
    -        return DynamicInfo.list_from_dicts(query.decode())
    + subnet_prices = self.get_subnet_prices() + decoded = query.decode() + for sn in decoded: + sn.update({"price": subnet_prices.get(sn["netuid"], Balance.from_tao(0))}) + return DynamicInfo.list_from_dicts(decoded)
    + + +
    +[docs] + def blocks_since_last_step( + self, netuid: int, block: Optional[int] = None + ) -> Optional[int]: + """Returns number of blocks since the last epoch of the subnet. + + Arguments: + netuid (int): The unique identifier of the subnetwork. + block: the block number for this query. + + Returns: + block number of the last step in the subnet. + """ + query = self.query_subtensor( + name="BlocksSinceLastStep", block=block, params=[netuid] + ) + return query.value if query is not None and hasattr(query, "value") else query
    @@ -755,7 +864,7 @@

    Source code for bittensor.core.subtensor

                     exist.
             """
             call = self.get_hyperparameter(param_name="LastUpdate", netuid=netuid)
    -        return None if call is None else (self.get_current_block() - int(call[uid]))
    + return None if not call else (self.get_current_block() - int(call[uid]))
    @@ -794,9 +903,9 @@

    Source code for bittensor.core.subtensor

             return b_map
    -
    -[docs] - def commit(self, wallet, netuid: int, data: str) -> bool: + def commit( + self, wallet, netuid: int, data: str, period: Optional[int] = None + ) -> bool: """ Commits arbitrary data to the Bittensor network by publishing metadata. @@ -804,6 +913,12 @@

    Source code for bittensor.core.subtensor

                 wallet (bittensor_wallet.Wallet): The wallet associated with the neuron committing the data.
                 netuid (int): The unique identifier of the subnetwork.
                 data (str): The data to be committed to the network.
    +            period (Optional[int]): The number of blocks during which the transaction will remain valid after it's
    +                submitted. If the transaction is not included in a block within that number of blocks, it will expire
    +                and be rejected. You can think of it as an expiration date for the transaction.
    +
    +        Returns:
    +            bool: `True` if the commitment was successful, `False` otherwise.
             """
             return publish_metadata(
                 subtensor=self,
    @@ -811,8 +926,8 @@ 

    Source code for bittensor.core.subtensor

                 netuid=netuid,
                 data_type=f"Raw{len(data)}",
                 data=data.encode(),
    -        )
    - + period=period, + ) # add explicit alias set_commitment = commit @@ -823,7 +938,7 @@

    Source code for bittensor.core.subtensor

             self, netuid: int, block: Optional[int] = None
         ) -> Optional[bool]:
             """
    -        Check if commit-reveal mechanism is enabled for a given network at a specific block.
    +        Check if the commit-reveal mechanism is enabled for a given network at a specific block.
     
             Arguments:
                 netuid: The network identifier for which to check the commit-reveal mechanism.
    @@ -887,6 +1002,7 @@ 

    Source code for bittensor.core.subtensor

             return_val = (
                 False
                 if result is None
    +            # not the default key (0x0)
                 else result != "5C4hrfjw9DjXZTzV3MwzrrAr9P1MJhSrvWGWqi1eSuyUpnhM"
             )
             return return_val
    @@ -916,22 +1032,27 @@

    Source code for bittensor.core.subtensor

             )
             if not result:
                 return []
    -        else:
    -            return SubnetInfo.list_from_dicts(result)
    + + subnets_prices = self.get_subnet_prices() + + for subnet in result: + subnet.update({"price": subnets_prices.get(subnet["netuid"], 0)}) + + return SubnetInfo.list_from_dicts(result)
    [docs] def get_balance(self, address: str, block: Optional[int] = None) -> Balance: """ - Retrieves the balance for given coldkey. + Retrieves the balance for given coldkey. Always in TAO. Arguments: - address (str): coldkey address. + address: coldkey address. block (Optional[int]): The blockchain block number for the query. Returns: - Balance object. + Balance object in TAO. """ balance = self.substrate.query( module="System", @@ -1030,8 +1151,6 @@

    Source code for bittensor.core.subtensor

                 return self.get_block_hash(block=block)
    -
    -[docs] def encode_params( self, call_definition: dict[str, list["ParamWithTypes"]], @@ -1050,8 +1169,7 @@

    Source code for bittensor.core.subtensor

     
                     param_data += scale_obj.encode(params[param["name"]])
     
    -        return param_data.to_hex()
    - + return param_data.to_hex()
    [docs] @@ -1084,6 +1202,41 @@

    Source code for bittensor.core.subtensor

             return getattr(result, "value", result)
    +
    +[docs] + def get_parents( + self, hotkey: str, netuid: int, block: Optional[int] = None + ) -> list[tuple[float, str]]: + """ + This method retrieves the parent of a given hotkey and netuid. It queries the SubtensorModule's ParentKeys + storage function to get the children and formats them before returning as a tuple. + + Arguments: + hotkey: The child hotkey SS58. + netuid: The netuid. + block: The block number for which the children are to be retrieved. + + Returns: + A list of formatted parents [(proportion, parent)] + """ + parents = self.substrate.query( + module="SubtensorModule", + storage_function="ParentKeys", + params=[hotkey, netuid], + block_hash=self.determine_block_hash(block), + ) + if parents: + formatted_parents = [] + for proportion, parent in parents.value: + # Convert U64 to int + formatted_child = decode_account_id(parent[0]) + normalized_proportion = u64_normalized_float(proportion) + formatted_parents.append((normalized_proportion, formatted_child)) + return formatted_parents + + return []
    + +
    [docs] def get_children( @@ -1123,6 +1276,50 @@

    Source code for bittensor.core.subtensor

                 return False, [], format_error_message(e)
    +
    +[docs] + def get_children_pending( + self, + hotkey: str, + netuid: int, + block: Optional[int] = None, + ) -> tuple[ + list[tuple[float, str]], + int, + ]: + """ + This method retrieves the pending children of a given hotkey and netuid. + It queries the SubtensorModule's PendingChildKeys storage function. + + Arguments: + hotkey (str): The hotkey value. + netuid (int): The netuid value. + block (Optional[int]): The block number for which the children are to be retrieved. + + Returns: + list[tuple[float, str]]: A list of children with their proportions. + int: The cool-down block number. + """ + + children, cooldown = self.substrate.query( + module="SubtensorModule", + storage_function="PendingChildKeys", + params=[netuid, hotkey], + block_hash=self.determine_block_hash(block), + ).value + + return ( + [ + ( + u64_normalized_float(proportion), + decode_account_id(child[0]), + ) + for proportion, child in children + ], + cooldown, + )
    + +
    [docs] def get_commitment(self, netuid: int, uid: int, block: Optional[int] = None) -> str: @@ -1155,6 +1352,36 @@

    Source code for bittensor.core.subtensor

                 return ""
    +
    +[docs] + def get_last_commitment_bonds_reset_block( + self, netuid: int, uid: int + ) -> Optional[int]: + """ + Retrieves the last block number when the bonds reset were triggered by publish_metadata for a specific neuron. + + Arguments: + netuid (int): The unique identifier of the subnetwork. + uid (int): The unique identifier of the neuron. + + Returns: + Optional[int]: The block number when the bonds were last reset, or None if not found. + """ + + metagraph = self.metagraph(netuid) + try: + hotkey = metagraph.hotkeys[uid] + except IndexError: + logging.error( + "Your uid is not in the hotkeys. Please double-check your UID." + ) + return None + block = get_last_bonds_reset(self, netuid, hotkey) + if block is None: + return None + return decode_block(block)
    + +
    [docs] def get_all_commitments( @@ -1168,12 +1395,115 @@

    Source code for bittensor.core.subtensor

             )
             result = {}
             for id_, value in query:
    -            result[decode_account_id(id_[0])] = decode_account_id(value)
    +            result[decode_account_id(id_[0])] = decode_metadata(value)
    +        return result
    + + +
    +[docs] + def get_revealed_commitment_by_hotkey( + self, + netuid: int, + hotkey_ss58_address: str, + block: Optional[int] = None, + ) -> Optional[tuple[tuple[int, str], ...]]: + """Returns hotkey related revealed commitment for a given netuid. + + Arguments: + netuid (int): The unique identifier of the subnetwork. + hotkey_ss58_address (str): The ss58 address of the committee member. + block (Optional[int]): The block number to retrieve the commitment from. Default is ``None``. + + Returns: + result (tuple[int, str): A tuple of reveal block and commitment message. + """ + if not is_valid_ss58_address(address=hotkey_ss58_address): + raise ValueError(f"Invalid ss58 address {hotkey_ss58_address} provided.") + + query = self.query_module( + module="Commitments", + name="RevealedCommitments", + params=[netuid, hotkey_ss58_address], + block=block, + ) + if query is None: + return None + return tuple(decode_revealed_commitment(pair) for pair in query)
    + + +
    +[docs] + def get_revealed_commitment( + self, + netuid: int, + uid: int, + block: Optional[int] = None, + ) -> Optional[tuple[tuple[int, str], ...]]: + """Returns uid related revealed commitment for a given netuid. + + Arguments: + netuid (int): The unique identifier of the subnetwork. + uid (int): The neuron uid to retrieve the commitment from. + block (Optional[int]): The block number to retrieve the commitment from. Default is ``None``. + + Returns: + result (Optional[tuple[int, str]]: A tuple of reveal block and commitment message. + + Example of result: + ( (12, "Alice message 1"), (152, "Alice message 2") ) + ( (12, "Bob message 1"), (147, "Bob message 2") ) + """ + try: + meta_info = self.get_metagraph_info(netuid, block=block) + if meta_info: + hotkey_ss58_address = meta_info.hotkeys[uid] + else: + raise ValueError(f"Subnet with netuid {netuid} does not exist.") + except IndexError: + raise ValueError(f"Subnet {netuid} does not have a neuron with uid {uid}.") + + return self.get_revealed_commitment_by_hotkey( + netuid=netuid, hotkey_ss58_address=hotkey_ss58_address, block=block + )
    + + +
    +[docs] + def get_all_revealed_commitments( + self, netuid: int, block: Optional[int] = None + ) -> dict[str, tuple[tuple[int, str], ...]]: + """Returns all revealed commitments for a given netuid. + + Arguments: + netuid (int): The unique identifier of the subnetwork. + block (Optional[int]): The block number to retrieve the commitment from. Default is ``None``. + + Returns: + result (dict): A dictionary of all revealed commitments in view + {ss58_address: (reveal block, commitment message)}. + + Example of result: + { + "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY": ( (12, "Alice message 1"), (152, "Alice message 2") ), + "5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty": ( (12, "Bob message 1"), (147, "Bob message 2") ), + } + """ + query = self.query_map( + module="Commitments", + name="RevealedCommitments", + params=[netuid], + block=block, + ) + + result = {} + for pair in query: + hotkey_ss58_address, commitment_message = ( + decode_revealed_commitment_with_hotkey(pair) + ) + result[hotkey_ss58_address] = commitment_message return result
    -
    -[docs] def get_current_weight_commit_info( self, netuid: int, block: Optional[int] = None ) -> list: @@ -1196,8 +1526,7 @@

    Source code for bittensor.core.subtensor

             )
     
             commits = result.records[0][1] if result.records else []
    -        return [WeightCommitInfo.from_vec_u8(commit) for commit in commits]
    - + return [WeightCommitInfo.from_vec_u8(commit) for commit in commits]
    [docs] @@ -1236,69 +1565,34 @@

    Source code for bittensor.core.subtensor

     [docs]
         def get_delegate_identities(
             self, block: Optional[int] = None
    -    ) -> dict[str, "DelegatesDetails"]:
    +    ) -> dict[str, ChainIdentity]:
             """
    -        Fetches delegates identities from the chain and GitHub. Preference is given to chain data, and missing info is
    -            filled-in by the info from GitHub. At some point, we want to totally move away from fetching this info from
    -            GitHub, but chain data is still limited in that regard.
    +        Fetches delegates identities from the chain.
     
             Arguments:
                 block (Optional[int]): The blockchain block number for the query.
     
             Returns:
    -            Dict {ss58: DelegatesDetails, ...}
    +            Dict {ss58: ChainIdentity, ...}
     
             """
    -        block_hash = self.determine_block_hash(block)
    -        response = requests.get(DELEGATES_DETAILS_URL)
    -        identities_info = self.substrate.query_map(
    -            module="Registry", storage_function="IdentityOf", block_hash=block_hash
    -        )
    -
    -        all_delegates_details = {}
    -        for ss58_address, identity in identities_info:
    -            all_delegates_details.update(
    -                {
    -                    decode_account_id(
    -                        ss58_address[0]
    -                    ): DelegatesDetails.from_chain_data(
    -                        decode_hex_identity_dict(identity.value["info"])
    -                    )
    -                }
    -            )
    -        if response.ok:
    -            all_delegates: dict[str, Any] = json.loads(response.content)
    -
    -            for delegate_hotkey, delegate_details in all_delegates.items():
    -                delegate_info = all_delegates_details.setdefault(
    -                    delegate_hotkey,
    -                    DelegatesDetails(
    -                        display=delegate_details.get("name", ""),
    -                        web=delegate_details.get("url", ""),
    -                        additional=delegate_details.get("description", ""),
    -                        pgp_fingerprint=delegate_details.get("fingerprint", ""),
    -                    ),
    -                )
    -                delegate_info.display = delegate_info.display or delegate_details.get(
    -                    "name", ""
    -                )
    -                delegate_info.web = delegate_info.web or delegate_details.get("url", "")
    -                delegate_info.additional = (
    -                    delegate_info.additional or delegate_details.get("description", "")
    -                )
    -                delegate_info.pgp_fingerprint = (
    -                    delegate_info.pgp_fingerprint
    -                    or delegate_details.get("fingerprint", "")
    -                )
    +        identities = self.substrate.query_map(
    +            module="SubtensorModule",
    +            storage_function="IdentitiesV2",
    +            block_hash=self.determine_block_hash(block),
    +        )
     
    -        return all_delegates_details
    + return { + decode_account_id(ss58_address[0]): ChainIdentity.from_dict( + decode_hex_identity_dict(identity.value), + ) + for ss58_address, identity in identities + }
    [docs] - def get_delegate_take( - self, hotkey_ss58: str, block: Optional[int] = None - ) -> Optional[float]: + def get_delegate_take(self, hotkey_ss58: str, block: Optional[int] = None) -> float: """ Retrieves the delegate 'take' percentage for a neuron identified by its hotkey. The 'take' represents the percentage of rewards that the delegate claims from its nominators' stakes. @@ -1308,7 +1602,7 @@

    Source code for bittensor.core.subtensor

                 block (Optional[int]): The blockchain block number for the query.
     
             Returns:
    -            Optional[float]: The delegate take percentage, None if not available.
    +            float: The delegate take percentage.
     
             The delegate take is a critical parameter in the network's incentive structure, influencing the distribution of
                 rewards among neurons and their nominators.
    @@ -1318,11 +1612,8 @@ 

    Source code for bittensor.core.subtensor

                 block=block,
                 params=[hotkey_ss58],
             )
    -        return (
    -            None
    -            if result is None
    -            else u16_normalized_float(getattr(result, "value", 0))
    -        )
    + + return u16_normalized_float(result.value) # type: ignore
    @@ -1355,7 +1646,7 @@

    Source code for bittensor.core.subtensor

             if not result:
                 return []
     
    -        return DelegateInfo.delegated_list_from_dicts(result)
    + return DelegatedInfo.list_from_dicts(result)
    @@ -1386,7 +1677,7 @@

    Source code for bittensor.core.subtensor

     [docs]
         def get_existential_deposit(self, block: Optional[int] = None) -> Optional[Balance]:
             """
    -        Retrieves the existential deposit amount for the Bittensor blockchain.
    +        Retrieves the existential deposit amount for the Bittensor blockchain. Always in TAO.
             The existential deposit is the minimum amount of TAO required for an account to exist on the blockchain.
             Accounts with balances below this threshold can be reaped to conserve network resources.
     
    @@ -1394,7 +1685,7 @@ 

    Source code for bittensor.core.subtensor

                 block (Optional[int]): The blockchain block number for the query.
     
             Returns:
    -            The existential deposit amount.
    +            The existential deposit amount. Always in TAO.
     
             The existential deposit is a fundamental economic parameter in the Bittensor network, ensuring efficient use of
                 storage and preventing the proliferation of dust accounts.
    @@ -1446,13 +1737,9 @@ 

    Source code for bittensor.core.subtensor

         def get_minimum_required_stake(self) -> Balance:
             """
             Returns the minimum required stake for nominators in the Subtensor network.
    -        This method retries the substrate call up to three times with exponential backoff in case of failures.
     
             Returns:
    -            Balance: The minimum required stake as a Balance object.
    -
    -        Raises:
    -            Exception: If the substrate call fails after the maximum number of retries.
    +            The minimum required stake as a Balance object in TAO.
             """
             result = self.substrate.query(
                 module="SubtensorModule", storage_function="NominatorMinRequiredStake"
    @@ -1464,29 +1751,66 @@ 

    Source code for bittensor.core.subtensor

     
    [docs] def get_metagraph_info( - self, netuid: int, block: Optional[int] = None + self, + netuid: int, + field_indices: Optional[Union[list[SelectiveMetagraphIndex], list[int]]] = None, + block: Optional[int] = None, ) -> Optional[MetagraphInfo]: """ - Retrieves the MetagraphInfo dataclass from the node for a single subnet (netuid) + Retrieves full or partial metagraph information for the specified subnet (netuid). Arguments: - netuid: The NetUID of the subnet. - block: the block number at which to retrieve the hyperparameter. Do not specify if using block_hash or - reuse_block + netuid: The NetUID of the subnet to query. + field_indices: An optional list of SelectiveMetagraphIndex or int values specifying which fields to retrieve. + If not provided, all available fields will be returned. + block: The block number at which to query the data. If not specified, the current block or one determined + via reuse_block or block_hash will be used. Returns: - MetagraphInfo dataclass + Optional[MetagraphInfo]: A MetagraphInfo object containing the requested subnet data, or None if the subnet + with the given netuid does not exist. + + Example: + meta_info = subtensor.get_metagraph_info(netuid=2) + + partial_meta_info = subtensor.get_metagraph_info( + netuid=2, + field_indices=[SelectiveMetagraphIndex.Name, SelectiveMetagraphIndex.OwnerHotkeys] + ) """ block_hash = self.determine_block_hash(block) - query = self.substrate.runtime_call( - "SubnetInfoRuntimeApi", - "get_metagraph", - params=[netuid], - block_hash=block_hash, - ) + + if field_indices: + if isinstance(field_indices, list) and all( + isinstance(f, (SelectiveMetagraphIndex, int)) for f in field_indices + ): + indexes = [ + f.value if isinstance(f, SelectiveMetagraphIndex) else f + for f in field_indices + ] + else: + raise ValueError( + "`field_indices` must be a list of SelectiveMetagraphIndex enums or ints." + ) + + query = self.substrate.runtime_call( + "SubnetInfoRuntimeApi", + "get_selective_metagraph", + params=[netuid, indexes if 0 in indexes else [0] + indexes], + block_hash=block_hash, + ) + else: + query = self.substrate.runtime_call( + "SubnetInfoRuntimeApi", + "get_metagraph", + params=[netuid], + block_hash=block_hash, + ) + if query.value is None: logging.error(f"Subnet {netuid} does not exist.") return None + return MetagraphInfo.from_dict(query.value)
    @@ -1578,39 +1902,222 @@

    Source code for bittensor.core.subtensor

             return None
    -
    -[docs] - def get_neuron_for_pubkey_and_subnet( - self, hotkey_ss58: str, netuid: int, block: Optional[int] = None - ) -> Optional["NeuronInfo"]: +
    +[docs] + def get_all_neuron_certificates( + self, netuid: int, block: Optional[int] = None + ) -> dict[str, Certificate]: """ - Retrieves information about a neuron based on its public key (hotkey SS58 address) and the specific subnet UID - (netuid). This function provides detailed neuron information for a particular subnet within the Bittensor - network. + Retrieves the TLS certificates for neurons within a specified subnet (netuid) of the Bittensor network. Arguments: - hotkey_ss58 (str): The ``SS58`` address of the neuron's hotkey. - netuid (int): The unique identifier of the subnet. - block (Optional[int]): The blockchain block number for the query. + netuid: The unique identifier of the subnet. + block: The blockchain block number for the query. Returns: - Optional[bittensor.core.chain_data.neuron_info.NeuronInfo]: Detailed information about the neuron if found, - ``None`` otherwise. + {ss58: Certificate} for the key/Certificate pairs on the subnet - This function is crucial for accessing specific neuron data and understanding its status, stake, and other - attributes within a particular subnet of the Bittensor ecosystem. + This function is used for certificate discovery for setting up mutual tls communication between neurons. """ - block_hash = self.determine_block_hash(block) - uid = self.substrate.query( + query_certificates = self.query_map( module="SubtensorModule", - storage_function="Uids", - params=[netuid, hotkey_ss58], - block_hash=block_hash, + name="NeuronCertificates", + params=[netuid], + block=block, ) - if uid is None: - return NeuronInfo.get_null_neuron() + output = {} + for key, item in query_certificates: + output[decode_account_id(key)] = Certificate(item.value) + return output
    - result = self.query_runtime_api( + +
    +[docs] + def get_liquidity_list( + self, + wallet: "Wallet", + netuid: int, + block: Optional[int] = None, + ) -> Optional[list[LiquidityPosition]]: + """ + Retrieves all liquidity positions for the given wallet on a specified subnet (netuid). + Calculates associated fee rewards based on current global and tick-level fee data. + + Args: + wallet: Wallet instance to fetch positions for. + netuid: Subnet unique id. + block: The blockchain block number for the query. + + Returns: + List of liquidity positions, or None if subnet does not exist. + """ + if not self.subnet_exists(netuid=netuid): + logging.debug(f"Subnet {netuid} does not exist.") + return None + + if not self.is_subnet_active(netuid=netuid): + logging.debug(f"Subnet {netuid} is not active.") + return None + + query = self.substrate.query + block_hash = self.determine_block_hash(block) + + # Fetch global fees and current price + fee_global_tao_query = query( + module="Swap", + storage_function="FeeGlobalTao", + params=[netuid], + block_hash=block_hash, + ) + fee_global_alpha_query = query( + module="Swap", + storage_function="FeeGlobalAlpha", + params=[netuid], + block_hash=block_hash, + ) + sqrt_price_query = query( + module="Swap", + storage_function="AlphaSqrtPrice", + params=[netuid], + block_hash=block_hash, + ) + fee_global_tao = fixed_to_float(fee_global_tao_query) + fee_global_alpha = fixed_to_float(fee_global_alpha_query) + sqrt_price = fixed_to_float(sqrt_price_query) + current_tick = price_to_tick(sqrt_price**2) + + # Fetch positions + positions_response = self.query_map( + module="Swap", + name="Positions", + block=block, + params=[netuid, wallet.coldkeypub.ss58_address], + ) + + positions = [] + for _, p in positions_response: + position = p.value + + tick_low_idx = position["tick_low"][0] + tick_high_idx = position["tick_high"][0] + + tick_low = query( + module="Swap", + storage_function="Ticks", + params=[netuid, tick_low_idx], + block_hash=block_hash, + ) + tick_high = query( + module="Swap", + storage_function="Ticks", + params=[netuid, tick_high_idx], + block_hash=block_hash, + ) + + # Calculate fees above/below range for both tokens + tao_below = get_fees( + current_tick=current_tick, + tick=tick_low, + tick_index=tick_low_idx, + quote=True, + global_fees_tao=fee_global_tao, + global_fees_alpha=fee_global_alpha, + above=False, + ) + tao_above = get_fees( + current_tick=current_tick, + tick=tick_high, + tick_index=tick_high_idx, + quote=True, + global_fees_tao=fee_global_tao, + global_fees_alpha=fee_global_alpha, + above=True, + ) + alpha_below = get_fees( + current_tick=current_tick, + tick=tick_low, + tick_index=tick_low_idx, + quote=False, + global_fees_tao=fee_global_tao, + global_fees_alpha=fee_global_alpha, + above=False, + ) + alpha_above = get_fees( + current_tick=current_tick, + tick=tick_high, + tick_index=tick_high_idx, + quote=False, + global_fees_tao=fee_global_tao, + global_fees_alpha=fee_global_alpha, + above=True, + ) + + # Calculate fees earned by position + fees_tao, fees_alpha = calculate_fees( + position=position, + global_fees_tao=fee_global_tao, + global_fees_alpha=fee_global_alpha, + tao_fees_below_low=tao_below, + tao_fees_above_high=tao_above, + alpha_fees_below_low=alpha_below, + alpha_fees_above_high=alpha_above, + netuid=netuid, + ) + + positions.append( + LiquidityPosition( + **{ + "id": position.get("id")[0], + "price_low": Balance.from_tao( + tick_to_price(position.get("tick_low")[0]) + ), + "price_high": Balance.from_tao( + tick_to_price(position.get("tick_high")[0]) + ), + "liquidity": Balance.from_rao(position.get("liquidity")), + "fees_tao": fees_tao, + "fees_alpha": fees_alpha, + "netuid": position.get("netuid"), + } + ) + ) + + return positions
    + + +
    +[docs] + def get_neuron_for_pubkey_and_subnet( + self, hotkey_ss58: str, netuid: int, block: Optional[int] = None + ) -> Optional["NeuronInfo"]: + """ + Retrieves information about a neuron based on its public key (hotkey SS58 address) and the specific subnet UID + (netuid). This function provides detailed neuron information for a particular subnet within the Bittensor + network. + + Arguments: + hotkey_ss58 (str): The ``SS58`` address of the neuron's hotkey. + netuid (int): The unique identifier of the subnet. + block (Optional[int]): The blockchain block number for the query. + + Returns: + Optional[bittensor.core.chain_data.neuron_info.NeuronInfo]: Detailed information about the neuron if found, + ``None`` otherwise. + + This function is crucial for accessing specific neuron data and understanding its status, stake, and other + attributes within a particular subnet of the Bittensor ecosystem. + """ + block_hash = self.determine_block_hash(block) + uid = self.substrate.query( + module="SubtensorModule", + storage_function="Uids", + params=[netuid, hotkey_ss58], + block_hash=block_hash, + ) + if uid is None: + return NeuronInfo.get_null_neuron() + + result = self.query_runtime_api( runtime_api="NeuronInfoRuntimeApi", method="get_neuron", params=[netuid, uid.value], @@ -1623,6 +2130,65 @@

    Source code for bittensor.core.subtensor

             return NeuronInfo.from_dict(result)
    +
    +[docs] + def get_next_epoch_start_block( + self, netuid: int, block: Optional[int] = None + ) -> Optional[int]: + """ + Calculates the first block number of the next epoch for the given subnet. + + If `block` is not provided, the current chain block will be used. Epochs are + determined based on the subnet's tempo (i.e., blocks per epoch). The result + is the block number at which the next epoch will begin. + + Args: + netuid (int): The unique identifier of the subnet. + block (Optional[int], optional): The reference block to calculate from. + If None, uses the current chain block height. + + Returns: + int: The block number at which the next epoch will start. + """ + block = block or self.block + blocks_since_last_step = self.blocks_since_last_step(netuid=netuid, block=block) + tempo = self.tempo(netuid=netuid, block=block) + + if block and blocks_since_last_step is not None and tempo: + return block - blocks_since_last_step + tempo + 1 + return None
    + + +
    +[docs] + def get_owned_hotkeys( + self, + coldkey_ss58: str, + block: Optional[int] = None, + reuse_block: bool = False, + ) -> list[str]: + """ + Retrieves all hotkeys owned by a specific coldkey address. + + Args: + coldkey_ss58 (str): The SS58 address of the coldkey to query. + block (int): The blockchain block number for the query. + reuse_block (bool): Whether to reuse the last-used blockchain block hash. + + Returns: + list[str]: A list of hotkey SS58 addresses owned by the coldkey. + """ + block_hash = self.determine_block_hash(block) + owned_hotkeys = self.substrate.query( + module="SubtensorModule", + storage_function="OwnedHotkeys", + params=[coldkey_ss58], + block_hash=block_hash, + reuse_block_hash=reuse_block, + ) + return [decode_account_id(hotkey[0]) for hotkey in owned_hotkeys or []]
    + +
    [docs] def get_stake( @@ -1633,16 +2199,19 @@

    Source code for bittensor.core.subtensor

             block: Optional[int] = None,
         ) -> Balance:
             """
    -        Returns the stake under a coldkey - hotkey pairing.
    +        Returns the amount of Alpha staked by a specific coldkey to a specific hotkey within a given subnet.
    +        This function retrieves the delegated stake balance, referred to as the 'Alpha' value.
     
             Args:
    -            hotkey_ss58 (str): The SS58 address of the hotkey.
    -            coldkey_ss58 (str): The SS58 address of the coldkey.
    -            netuid (int): The subnet ID
    -            block (Optional[int]): The block number at which to query the stake information.
    +            coldkey_ss58: The SS58 address of the coldkey that delegated the stake. This address owns the stake.
    +            hotkey_ss58: The ss58 address of the hotkey which the stake is on.
    +            netuid: The unique identifier of the subnet to query.
    +            block: The specific block number at which to retrieve the stake information. If None, the current stake at
    +                the latest block is returned. Defaults to ``None``.
     
             Returns:
    -            Balance: The stake under the coldkey - hotkey pairing.
    +            An object representing the amount of Alpha (TAO ONLY if the subnet's netuid is 0) currently staked from the
    +                specified coldkey to the specified hotkey within the given subnet.
             """
             alpha_shares_query = self.query_module(
                 module="SubtensorModule",
    @@ -1679,6 +2248,195 @@ 

    Source code for bittensor.core.subtensor

             return Balance.from_rao(int(stake)).set_unit(netuid=netuid)
    + # TODO: remove unused parameters in SDK.v10 +
    +[docs] + def get_stake_add_fee( + self, + amount: Balance, + netuid: int, + coldkey_ss58: str, + hotkey_ss58: str, + block: Optional[int] = None, + ) -> Balance: + """ + Calculates the fee for adding new stake to a hotkey. + + Args: + amount: Amount of stake to add in TAO + netuid: Netuid of subnet + coldkey_ss58: SS58 address of coldkey + hotkey_ss58: SS58 address of hotkey + block: Block number at which to perform the calculation + + Returns: + The calculated stake fee as a Balance object + """ + return self.get_stake_operations_fee(amount=amount, netuid=netuid, block=block)
    + + +
    +[docs] + def get_subnet_info( + self, netuid: int, block: Optional[int] = None + ) -> Optional["SubnetInfo"]: + """ + Retrieves detailed information about subnet within the Bittensor network. + This function provides comprehensive data on subnet, including its characteristics and operational parameters. + + Arguments: + netuid: The unique identifier of the subnet. + block: The blockchain block number for the query. + + Returns: + SubnetInfo: A SubnetInfo objects, each containing detailed information about a subnet. + + Gaining insights into the subnet's details assists in understanding the network's composition, the roles of + different subnets, and their unique features. + """ + result = self.query_runtime_api( + runtime_api="SubnetInfoRuntimeApi", + method="get_subnet_info_v2", + params=[netuid], + block=block, + ) + if not result: + return None + return SubnetInfo.from_dict(result)
    + + +
    +[docs] + def get_subnet_price( + self, + netuid: int, + block: Optional[int] = None, + ) -> Balance: + """Gets the current Alpha price in TAO for all subnets. + + Arguments: + netuid: The unique identifier of the subnet. + block: The blockchain block number for the query. + + Returns: + The current Alpha price in TAO units for the specified subnet. + """ + # SN0 price is always 1 TAO + if netuid == 0: + return Balance.from_tao(1) + + block_hash = self.determine_block_hash(block=block) + current_sqrt_price = self.substrate.query( + module="Swap", + storage_function="AlphaSqrtPrice", + params=[netuid], + block_hash=block_hash, + ) + + current_sqrt_price = fixed_to_float(current_sqrt_price) + current_price = current_sqrt_price * current_sqrt_price + return Balance.from_rao(int(current_price * 1e9))
    + + +
    +[docs] + def get_subnet_prices( + self, + block: Optional[int] = None, + ) -> dict[int, Balance]: + """Gets the current Alpha price in TAO for a specified subnet. + + Args: + block: The blockchain block number for the query. Default to `None`. + + Returns: + dict: + - subnet unique ID + - The current Alpha price in TAO units for the specified subnet. + """ + block_hash = self.determine_block_hash(block=block) + + current_sqrt_prices = self.substrate.query_map( + module="Swap", + storage_function="AlphaSqrtPrice", + block_hash=block_hash, + page_size=129, # total number of subnets + ) + + prices = {} + for id_, current_sqrt_price in current_sqrt_prices: + current_sqrt_price = fixed_to_float(current_sqrt_price) + current_price = current_sqrt_price * current_sqrt_price + current_price_in_tao = Balance.from_rao(int(current_price * 1e9)) + prices.update({id_: current_price_in_tao}) + + # SN0 price is always 1 TAO + prices.update({0: Balance.from_tao(1)}) + return prices
    + + + # TODO: remove unused parameters in SDK.v10 +
    +[docs] + def get_unstake_fee( + self, + amount: Balance, + netuid: int, + coldkey_ss58: str, + hotkey_ss58: str, + block: Optional[int] = None, + ) -> Balance: + """ + Calculates the fee for unstaking from a hotkey. + + Args: + amount: Amount of stake to unstake in TAO + netuid: Netuid of subnet + coldkey_ss58: SS58 address of coldkey + hotkey_ss58: SS58 address of hotkey + block: Block number at which to perform the calculation + + Returns: + The calculated stake fee as a Balance object + """ + return self.get_stake_operations_fee(amount=amount, netuid=netuid, block=block)
    + + + # TODO: remove unused parameters in SDK.v10 +
    +[docs] + def get_stake_movement_fee( + self, + amount: Balance, + origin_netuid: int, + origin_hotkey_ss58: str, + origin_coldkey_ss58: str, + destination_netuid: int, + destination_hotkey_ss58: str, + destination_coldkey_ss58: str, + block: Optional[int] = None, + ) -> Balance: + """ + Calculates the fee for moving stake between hotkeys/subnets/coldkeys. + + Args: + amount: Amount of stake to move in TAO + origin_netuid: Netuid of origin subnet + origin_hotkey_ss58: SS58 address of origin hotkey + origin_coldkey_ss58: SS58 address of origin coldkey + destination_netuid: Netuid of destination subnet + destination_hotkey_ss58: SS58 address of destination hotkey + destination_coldkey_ss58: SS58 address of destination coldkey + block: Block number at which to perform the calculation + + Returns: + The calculated stake fee as a Balance object + """ + return self.get_stake_operations_fee( + amount=amount, netuid=origin_netuid, block=block + )
    + +
    [docs] def get_stake_for_coldkey_and_hotkey( @@ -1719,8 +2477,6 @@

    Source code for bittensor.core.subtensor

             }
    -
    -[docs] def get_stake_for_coldkey( self, coldkey_ss58: str, block: Optional[int] = None ) -> list["StakeInfo"]: @@ -1744,8 +2500,7 @@

    Source code for bittensor.core.subtensor

             if result is None:
                 return []
             stakes = StakeInfo.list_from_dicts(result)  # type: ignore
    -        return [stake for stake in stakes if stake.stake > 0]
    - + return [stake for stake in stakes if stake.stake > 0] get_stake_info_for_coldkey = get_stake_for_coldkey @@ -1774,6 +2529,31 @@

    Source code for bittensor.core.subtensor

     
         get_hotkey_stake = get_stake_for_hotkey
     
    +    def get_stake_operations_fee(
    +        self,
    +        amount: Balance,
    +        netuid: int,
    +        block: Optional[int] = None,
    +    ):
    +        """Returns fee for any stake operation in specified subnet.
    +
    +        Args:
    +            amount: Amount of stake to add in Alpha/TAO.
    +            netuid: Netuid of subnet.
    +            block: Block number at which to perform the calculation.
    +
    +        Returns:
    +            The calculated stake fee as a Balance object.
    +        """
    +        block_hash = self.determine_block_hash(block=block)
    +        result = self.substrate.query(
    +            module="Swap",
    +            storage_function="FeeRate",
    +            params=[netuid],
    +            block_hash=block_hash,
    +        )
    +        return amount * (result.value / U16_MAX)
    +
     
    [docs] def get_subnet_burn_cost(self, block: Optional[int] = None) -> Optional[Balance]: @@ -1824,7 +2604,7 @@

    Source code for bittensor.core.subtensor

             """
             result = self.query_runtime_api(
                 runtime_api="SubnetInfoRuntimeApi",
    -            method="get_subnet_hyperparams",
    +            method="get_subnet_hyperparams_v2",
                 params=[netuid],
                 block=block,
             )
    @@ -1849,8 +2629,6 @@ 

    Source code for bittensor.core.subtensor

             )
    -
    -[docs] def get_subnets(self, block: Optional[int] = None) -> list[int]: """ Retrieves the list of all subnet unique identifiers (netuids) currently present in the Bittensor network. @@ -1874,8 +2652,7 @@

    Source code for bittensor.core.subtensor

                 for netuid, exists in result:
                     if exists:
                         subnets.append(netuid)
    -        return subnets
    - + return subnets
    [docs] @@ -1926,7 +2703,7 @@

    Source code for bittensor.core.subtensor

             value = check_and_convert_to_balance(value)
             call = self.substrate.compose_call(
                 call_module="Balances",
    -            call_function="transfer_allow_death",
    +            call_function="transfer_keep_alive",
                 call_params={"dest": dest, "value": value.rao},
             )
     
    @@ -1966,10 +2743,11 @@ 

    Source code for bittensor.core.subtensor

                 params=[proposal_hash],
                 block_hash=self.determine_block_hash(block),
             )
    +
             if vote_data is None:
                 return None
    -        else:
    -            return ProposalVoteData(vote_data)
    + + return ProposalVoteData.from_dict(vote_data)
    @@ -2080,6 +2858,13 @@

    Source code for bittensor.core.subtensor

             return None if call is None else int(call)
    +
    +[docs] + def is_fast_blocks(self): + """Returns True if the node is running with fast blocks. False if not.""" + return self.query_constant("SubtensorModule", "DurationOfStartCall").value == 10
    + +
    [docs] def is_hotkey_delegate(self, hotkey_ss58: str, block: Optional[int] = None) -> bool: @@ -2170,6 +2955,28 @@

    Source code for bittensor.core.subtensor

             )
    +
    +[docs] + def is_subnet_active(self, netuid: int, block: Optional[int] = None) -> bool: + """Verify if subnet with provided netuid is active. + + Args: + netuid (int): The unique identifier of the subnet. + block (Optional[int]): The blockchain block number for the query. + + Returns: + True if subnet is active, False otherwise. + + This means whether the `start_call` was initiated or not. + """ + query = self.query_subtensor( + name="FirstEmissionBlockNumber", + block=block, + params=[netuid], + ) + return True if query and query.value > 0 else False
    + +
    [docs] def last_drand_round(self) -> Optional[int]: @@ -2349,7 +3156,9 @@

    Source code for bittensor.core.subtensor

     
     
    [docs] - def query_identity(self, coldkey_ss58: str, block: Optional[int] = None) -> dict: + def query_identity( + self, coldkey_ss58: str, block: Optional[int] = None + ) -> Optional[ChainIdentity]: """ Queries the identity of a neuron on the Bittensor blockchain using the given key. This function retrieves detailed identity information about a specific neuron, which is a crucial aspect of the network's @@ -2370,18 +3179,25 @@

    Source code for bittensor.core.subtensor

                 See the `Bittensor CLI documentation <https://docs.bittensor.com/reference/btcli>`_ for supported identity
                     parameters.
             """
    -        identity_info = self.substrate.query(
    -            module="SubtensorModule",
    -            storage_function="IdentitiesV2",
    -            params=[coldkey_ss58],
    -            block_hash=self.determine_block_hash(block),
    +        identity_info = cast(
    +            dict,
    +            self.substrate.query(
    +                module="SubtensorModule",
    +                storage_function="IdentitiesV2",
    +                params=[coldkey_ss58],
    +                block_hash=self.determine_block_hash(block),
    +            ),
             )
    +
             if not identity_info:
    -            return {}
    +            return None
    +
             try:
    -            return _decode_hex_identity_dict(identity_info)
    +            return ChainIdentity.from_dict(
    +                decode_hex_identity_dict(identity_info),
    +            )
             except TypeError:
    -            return {}
    + return None
    @@ -2405,6 +3221,53 @@

    Source code for bittensor.core.subtensor

             return None if call is None else Balance.from_rao(int(call))
    +
    +[docs] + def set_reveal_commitment( + self, + wallet, + netuid: int, + data: str, + blocks_until_reveal: int = 360, + block_time: Union[int, float] = 12, + period: Optional[int] = None, + ) -> tuple[bool, int]: + """ + Commits arbitrary data to the Bittensor network by publishing metadata. + + Arguments: + wallet (bittensor_wallet.Wallet): The wallet associated with the neuron committing the data. + netuid (int): The unique identifier of the subnetwork. + data (str): The data to be committed to the network. + blocks_until_reveal (int): The number of blocks from now after which the data will be revealed. Defaults to + `360`. Then number of blocks in one epoch. + block_time (Union[int, float]): The number of seconds between each block. Defaults to `12`. + period (Optional[int]): The number of blocks during which the transaction will remain valid after it's + submitted. If the transaction is not included in a block within that number of blocks, it will expire + and be rejected. You can think of it as an expiration date for the transaction. + Returns: + bool: `True` if the commitment was successful, `False` otherwise. + + Note: A commitment can be set once per subnet epoch and is reset at the next epoch in the chain automatically. + """ + + encrypted, reveal_round = get_encrypted_commitment( + data, blocks_until_reveal, block_time + ) + + # increase reveal_round in return + 1 because we want to fetch data from the chain after that round was revealed + # and stored. + data_ = {"encrypted": encrypted, "reveal_round": reveal_round} + return publish_metadata( + subtensor=self, + wallet=wallet, + netuid=netuid, + data_type="TimelockEncrypted", + data=data_, + period=period, + ), reveal_round
    + +
    [docs] def subnet(self, netuid: int, block: Optional[int] = None) -> Optional[DynamicInfo]: @@ -2419,16 +3282,22 @@

    Source code for bittensor.core.subtensor

                 Optional[DynamicInfo]: A DynamicInfo object, containing detailed information about a subnet.
     
             """
    -        block_hash = self.determine_block_hash(block)
    +        block_hash = self.determine_block_hash(block=block)
     
             query = self.substrate.runtime_call(
    -            "SubnetInfoRuntimeApi",
    -            "get_dynamic_info",
    +            api="SubnetInfoRuntimeApi",
    +            method="get_dynamic_info",
                 params=[netuid],
                 block_hash=block_hash,
             )
    -        subnet = DynamicInfo.from_dict(query.decode())  # type: ignore
    -        return subnet
    + + if isinstance(decoded := query.decode(), dict): + try: + price = self.get_subnet_price(netuid=netuid, block=block) + except SubstrateRequestException: + price = None + return DynamicInfo.from_dict({**decoded, "price": price}) + return None
    @@ -2523,22 +3392,26 @@

    Source code for bittensor.core.subtensor

             waits for the next block.
     
             Args:
    -            block (Optional[int]): The block number to wait for. If None, waits for next block.
    +            block (Optional[int]): The block number to wait for. If None, waits for the next block.
     
             Returns:
                 bool: True if the target block was reached, False if timeout occurred.
     
             Example:
    -            >>> subtensor.wait_for_block() # Waits for next block
    -            >>> subtensor.wait_for_block(block=1234) # Waits for specific block
    +            import bittensor as bt
    +            subtensor = bt.Subtensor()
    +
    +            subtensor.wait_for_block() # Waits for the next block
    +            subtensor.wait_for_block(block=1234) # Waits for a specific block
             """
     
             def handler(block_data: dict):
                 logging.debug(
    -                f'reached block {block_data["header"]["number"]}. Waiting for block {target_block}'
    +                f"reached block {block_data['header']['number']}. Waiting for block {target_block}"
                 )
                 if block_data["header"]["number"] >= target_block:
                     return True
    +            return None
     
             current_block = self.substrate.get_block()
             current_block_hash = current_block.get("header", {}).get("hash")
    @@ -2547,7 +3420,7 @@ 

    Source code for bittensor.core.subtensor

             else:
                 target_block = current_block["header"]["number"] + 1
     
    -        self.substrate._get_block_handler(
    +        self.substrate.get_block_handler(
                 current_block_hash, header_only=True, subscription_handler=handler
             )
             return True
    @@ -2606,6 +3479,68 @@

    Source code for bittensor.core.subtensor

             return None if call is None else int(call)
    +
    +[docs] + def get_timestamp(self, block: Optional[int] = None) -> datetime: + """ + Retrieves the datetime timestamp for a given block + + Arguments: + block: The blockchain block number for the query. + + Returns: + datetime object for the timestamp of the block + """ + unix = cast(ScaleObj, self.query_module("Timestamp", "Now", block=block)).value + return datetime.fromtimestamp(unix / 1000, tz=timezone.utc)
    + + +
    +[docs] + def get_subnet_owner_hotkey( + self, netuid: int, block: Optional[int] = None + ) -> Optional[str]: + """ + Retrieves the hotkey of the subnet owner for a given network UID. + + This function queries the subtensor network to fetch the hotkey of the owner of a subnet specified by its + netuid. If no data is found or the query fails, the function returns None. + + Arguments: + netuid: The network UID of the subnet to fetch the owner's hotkey for. + block: The specific block number to query the data from. + + Returns: + The hotkey of the subnet owner if available; None otherwise. + """ + return self.query_subtensor( + name="SubnetOwnerHotkey", params=[netuid], block=block + )
    + + +
    +[docs] + def get_subnet_validator_permits( + self, netuid: int, block: Optional[int] = None + ) -> Optional[list[bool]]: + """ + Retrieves the list of validator permits for a given subnet as boolean values. + + Arguments: + netuid: The unique identifier of the subnetwork. + block: The blockchain block number for the query. + + Returns: + A list of boolean values representing validator permits, or None if not available. + """ + query = self.query_subtensor( + name="ValidatorPermit", + params=[netuid], + block=block, + ) + return query.value if query is not None and hasattr(query, "value") else query
    + + # Extrinsics helper ================================================================================================
    @@ -2620,6 +3555,7 @@

    Source code for bittensor.core.subtensor

             use_nonce: bool = False,
             period: Optional[int] = None,
             nonce_key: str = "hotkey",
    +        raise_error: bool = False,
         ) -> tuple[bool, str]:
             """
             Helper method to sign and submit an extrinsic call to chain.
    @@ -2629,10 +3565,19 @@ 

    Source code for bittensor.core.subtensor

                 wallet (bittensor_wallet.Wallet): the wallet whose coldkey will be used to sign the extrinsic
                 wait_for_inclusion (bool): whether to wait until the extrinsic call is included on the chain
                 wait_for_finalization (bool): whether to wait until the extrinsic call is finalized on the chain
    -            sign_with: the wallet's keypair to use for the signing. Options are "coldkey", "hotkey", "coldkeypub"
    +            sign_with (str): the wallet's keypair to use for the signing. Options are "coldkey", "hotkey", "coldkeypub"
    +            use_nonce (bool): unique identifier for the transaction related with hot/coldkey.
    +            period (Optional[int]): The number of blocks during which the transaction will remain valid after it's
    +                submitted. If the transaction is not included in a block within that number of blocks, it will expire
    +                and be rejected. You can think of it as an expiration date for the transaction.
    +            nonce_key: the type on nonce to use. Options are "hotkey" or "coldkey".
    +            raise_error: raises the relevant exception rather than returning `False` if unsuccessful.
     
             Returns:
                 (success, error message)
    +
    +        Raises:
    +            SubstrateRequestException: Substrate request exception.
             """
             possible_keys = ("coldkey", "hotkey", "coldkeypub")
             if sign_with not in possible_keys:
    @@ -2663,14 +3608,22 @@ 

    Source code for bittensor.core.subtensor

                 )
                 # We only wait here if we expect finalization.
                 if not wait_for_finalization and not wait_for_inclusion:
    -                return True, ""
    +                message = "Not waiting for finalization or inclusion."
    +                logging.debug(f"{message}. Extrinsic: {extrinsic}")
    +                return True, message
     
                 if response.is_success:
                     return True, ""
     
    +            if raise_error:
    +                raise ChainError.from_error(response.error_message)
    +
                 return False, format_error_message(response.error_message)
     
             except SubstrateRequestException as e:
    +            if raise_error:
    +                raise
    +
                 return False, format_error_message(e)
    @@ -2681,40 +3634,114 @@

    Source code for bittensor.core.subtensor

         def add_stake(
             self,
             wallet: "Wallet",
    -        hotkey_ss58: Optional[str] = None,
    -        netuid: Optional[int] = None,
    -        amount: Optional[Balance] = None,
    +        hotkey_ss58: Optional[str] = None,
    +        netuid: Optional[int] = None,
    +        amount: Optional[Balance] = None,
    +        wait_for_inclusion: bool = True,
    +        wait_for_finalization: bool = False,
    +        safe_staking: bool = False,
    +        allow_partial_stake: bool = False,
    +        rate_tolerance: float = 0.005,
    +        period: Optional[int] = None,
    +    ) -> bool:
    +        """
    +        Adds a stake from the specified wallet to the neuron identified by the SS58 address of its hotkey in specified
    +            subnet. Staking is a fundamental process in the Bittensor network that enables neurons to participate
    +            actively and earn incentives.
    +
    +        Args:
    +            wallet: The wallet to be used for staking.
    +            hotkey_ss58: The SS58 address of the hotkey associated with the neuron to which you intend to delegate your
    +                stake. If not specified, the wallet's hotkey will be used. Defaults to ``None``.
    +            netuid: The unique identifier of the subnet to which the neuron belongs.
    +            amount: The amount of TAO to stake.
    +            wait_for_inclusion: Waits for the transaction to be included in a block. Defaults to ``True``.
    +            wait_for_finalization: Waits for the transaction to be finalized on the blockchain. Defaults to ``False``.
    +            safe_staking: If true, enables price safety checks to protect against fluctuating prices. The stake will
    +                only execute if the price change doesn't exceed the rate tolerance. Default is ``False``.
    +            allow_partial_stake: If true and safe_staking is enabled, allows partial staking when the full amount would
    +                exceed the price tolerance. If false, the entire stake fails if it would exceed the tolerance.
    +                Default is ``False``.
    +            rate_tolerance: The maximum allowed price change ratio when staking. For example,
    +                0.005 = 0.5% maximum price increase. Only used when safe_staking is True. Default is ``0.005``.
    +            period: The number of blocks during which the transaction will remain valid after it's submitted. If the
    +                transaction is not included in a block within that number of blocks, it will expire and be rejected. You
    +                can think of it as an expiration date for the transaction. Defaults to ``None``.
    +
    +        Returns:
    +            bool: True if the staking is successful, False otherwise.
    +
    +        This function enables neurons to increase their stake in the network, enhancing their influence and potential
    +            rewards in line with Bittensor's consensus and reward mechanisms.
    +            When safe_staking is enabled, it provides protection against price fluctuations during the time stake is
    +            executed and the time it is actually processed by the chain.
    +        """
    +        amount = check_and_convert_to_balance(amount)
    +        return add_stake_extrinsic(
    +            subtensor=self,
    +            wallet=wallet,
    +            hotkey_ss58=hotkey_ss58,
    +            netuid=netuid,
    +            amount=amount,
    +            wait_for_inclusion=wait_for_inclusion,
    +            wait_for_finalization=wait_for_finalization,
    +            safe_staking=safe_staking,
    +            allow_partial_stake=allow_partial_stake,
    +            rate_tolerance=rate_tolerance,
    +            period=period,
    +        )
    + + +
    +[docs] + def add_liquidity( + self, + wallet: "Wallet", + netuid: int, + liquidity: Balance, + price_low: Balance, + price_high: Balance, + hotkey: Optional[str] = None, wait_for_inclusion: bool = True, wait_for_finalization: bool = False, - ) -> bool: + period: Optional[int] = None, + ) -> tuple[bool, str]: """ - Adds the specified amount of stake to a neuron identified by the hotkey ``SS58`` address. - Staking is a fundamental process in the Bittensor network that enables neurons to participate actively and earn - incentives. + Adds liquidity to the specified price range. - Args: - wallet (bittensor_wallet.Wallet): The wallet to be used for staking. - hotkey_ss58 (Optional[str]): The ``SS58`` address of the hotkey associated with the neuron. - netuid (Optional[int]): The unique identifier of the subnet to which the neuron belongs. - amount (Balance): The amount of TAO to stake. - wait_for_inclusion (bool): Waits for the transaction to be included in a block. - wait_for_finalization (bool): Waits for the transaction to be finalized on the blockchain. + Arguments: + wallet: The wallet used to sign the extrinsic (must be unlocked). + netuid: The UID of the target subnet for which the call is being initiated. + liquidity: The amount of liquidity to be added. + price_low: The lower bound of the price tick range. In TAO. + price_high: The upper bound of the price tick range. In TAO. + hotkey: The hotkey with staked TAO in Alpha. If not passed then the wallet hotkey is used. Defaults to + `None`. + wait_for_inclusion: Whether to wait for the extrinsic to be included in a block. Defaults to True. + wait_for_finalization: Whether to wait for finalization of the extrinsic. Defaults to False. + period: The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. Returns: - bool: ``True`` if the staking is successful, False otherwise. + Tuple[bool, str]: + - True and a success message if the extrinsic is successfully submitted or processed. + - False and an error message if the submission fails or the wallet cannot be unlocked. - This function enables neurons to increase their stake in the network, enhancing their influence and potential - rewards in line with Bittensor's consensus and reward mechanisms. + Note: Adding is allowed even when user liquidity is enabled in specified subnet. Call `toggle_user_liquidity` + method to enable/disable user liquidity. """ - amount = check_and_convert_to_balance(amount) - return add_stake_extrinsic( + return add_liquidity_extrinsic( subtensor=self, wallet=wallet, - hotkey_ss58=hotkey_ss58, netuid=netuid, - amount=amount, + liquidity=liquidity, + price_low=price_low, + price_high=price_high, + hotkey=hotkey, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + period=period, )
    @@ -2728,6 +3755,7 @@

    Source code for bittensor.core.subtensor

             amounts: Optional[list[Balance]] = None,
             wait_for_inclusion: bool = True,
             wait_for_finalization: bool = False,
    +        period: Optional[int] = None,
         ) -> bool:
             """
             Adds stakes to multiple neurons identified by their hotkey SS58 addresses.
    @@ -2740,6 +3768,9 @@ 

    Source code for bittensor.core.subtensor

                 amounts (list[Balance]): Corresponding amounts of TAO to stake for each hotkey.
                 wait_for_inclusion (bool): Waits for the transaction to be included in a block.
                 wait_for_finalization (bool): Waits for the transaction to be finalized on the blockchain.
    +            period (Optional[int]): The number of blocks during which the transaction will remain valid after it's
    +                submitted. If the transaction is not included in a block within that number of blocks, it will expire
    +                and be rejected. You can think of it as an expiration date for the transaction.
     
             Returns:
                 bool: ``True`` if the staking is successful for all specified neurons, False otherwise.
    @@ -2755,6 +3786,7 @@ 

    Source code for bittensor.core.subtensor

                 amounts=amounts,
                 wait_for_inclusion=wait_for_inclusion,
                 wait_for_finalization=wait_for_finalization,
    +            period=period,
             )
    @@ -2766,6 +3798,7 @@

    Source code for bittensor.core.subtensor

             netuid: int,
             wait_for_inclusion: bool = False,
             wait_for_finalization: bool = True,
    +        period: Optional[int] = None,
         ) -> bool:
             """
             Registers a neuron on the Bittensor network by recycling TAO. This method of registration involves recycling
    @@ -2778,16 +3811,30 @@ 

    Source code for bittensor.core.subtensor

                     `False`.
                 wait_for_finalization (bool, optional): Waits for the transaction to be finalized on the blockchain.
                     Defaults to `True`.
    +            period (Optional[int]): The number of blocks during which the transaction will remain valid after it's
    +                submitted. If the transaction is not included in a block within that number of blocks, it will expire
    +                and be rejected. You can think of it as an expiration date for the transaction.
     
             Returns:
                 bool: ``True`` if the registration is successful, False otherwise.
             """
    +
    +        if netuid == 0:
    +            return root_register_extrinsic(
    +                subtensor=self,
    +                wallet=wallet,
    +                wait_for_inclusion=wait_for_inclusion,
    +                wait_for_finalization=wait_for_finalization,
    +                period=period,
    +            )
    +
             return burned_register_extrinsic(
                 subtensor=self,
                 wallet=wallet,
                 netuid=netuid,
                 wait_for_inclusion=wait_for_inclusion,
                 wait_for_finalization=wait_for_finalization,
    +            period=period,
             )
    @@ -2804,6 +3851,7 @@

    Source code for bittensor.core.subtensor

             wait_for_inclusion: bool = False,
             wait_for_finalization: bool = False,
             max_retries: int = 5,
    +        period: Optional[int] = 16,
         ) -> tuple[bool, str]:
             """
             Commits a hash of the neuron's weights to the Bittensor blockchain using the provided wallet.
    @@ -2816,15 +3864,19 @@ 

    Source code for bittensor.core.subtensor

                 uids (np.ndarray): NumPy array of neuron UIDs for which weights are being committed.
                 weights (np.ndarray): NumPy array of weight values corresponding to each UID.
                 version_key (int): Version key for compatibility with the network. Default is ``int representation of
    -                Bittensor version.``.
    +                a Bittensor version.``.
                 wait_for_inclusion (bool): Waits for the transaction to be included in a block. Default is ``False``.
                 wait_for_finalization (bool): Waits for the transaction to be finalized on the blockchain. Default is
                     ``False``.
                 max_retries (int): The number of maximum attempts to commit weights. Default is ``5``.
    +            period (Optional[int]): The number of blocks during which the transaction will remain valid after it's
    +                submitted. If the transaction is not included in a block within that number of blocks, it will expire
    +                and be rejected. You can think of it as an expiration date for the transaction.
     
             Returns:
    -            tuple[bool, str]: ``True`` if the weight commitment is successful, False otherwise. And `msg`, a string
    -                value describing the success or potential error.
    +            tuple[bool, str]:
    +                `True` if the weight commitment is successful, False otherwise.
    +                `msg` is a string value describing the success or potential error.
     
             This function allows neurons to create a tamper-proof record of their weight distribution at a specific point
                 in time, enhancing transparency and accountability within the Bittensor network.
    @@ -2834,8 +3886,9 @@ 

    Source code for bittensor.core.subtensor

             message = "No attempt made. Perhaps it is too soon to commit weights!"
     
             logging.info(
    -            f"Committing weights with params: netuid={netuid}, uids={uids}, weights={weights}, "
    -            f"version_key={version_key}"
    +            f"Committing weights with params: "
    +            f"netuid=[blue]{netuid}[/blue], uids=[blue]{uids}[/blue], weights=[blue]{weights}[/blue], "
    +            f"version_key=[blue]{version_key}[/blue]"
             )
     
             # Generate the hash of the weights
    @@ -2857,17 +3910,92 @@ 

    Source code for bittensor.core.subtensor

                         commit_hash=commit_hash,
                         wait_for_inclusion=wait_for_inclusion,
                         wait_for_finalization=wait_for_finalization,
    +                    period=period,
                     )
                     if success:
                         break
                 except Exception as e:
                     logging.error(f"Error committing weights: {e}")
    -            finally:
                     retries += 1
     
             return success, message
    +
    +[docs] + def modify_liquidity( + self, + wallet: "Wallet", + netuid: int, + position_id: int, + liquidity_delta: Balance, + hotkey: Optional[str] = None, + wait_for_inclusion: bool = True, + wait_for_finalization: bool = False, + period: Optional[int] = None, + ) -> tuple[bool, str]: + """Modifies liquidity in liquidity position by adding or removing liquidity from it. + + Arguments: + wallet: The wallet used to sign the extrinsic (must be unlocked). + netuid: The UID of the target subnet for which the call is being initiated. + position_id: The id of the position record in the pool. + liquidity_delta: The amount of liquidity to be added or removed (add if positive or remove if negative). + hotkey: The hotkey with staked TAO in Alpha. If not passed then the wallet hotkey is used. Defaults to + `None`. + wait_for_inclusion: Whether to wait for the extrinsic to be included in a block. Defaults to True. + wait_for_finalization: Whether to wait for finalization of the extrinsic. Defaults to False. + period: The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. + + Returns: + Tuple[bool, str]: + - True and a success message if the extrinsic is successfully submitted or processed. + - False and an error message if the submission fails or the wallet cannot be unlocked. + + Example: + import bittensor as bt + + subtensor = bt.subtensor(network="local") + my_wallet = bt.Wallet() + + # if `liquidity_delta` is negative + my_liquidity_delta = Balance.from_tao(100) * -1 + + subtensor.modify_liquidity( + wallet=my_wallet, + netuid=123, + position_id=2, + liquidity_delta=my_liquidity_delta + ) + + # if `liquidity_delta` is positive + my_liquidity_delta = Balance.from_tao(120) + + subtensor.modify_liquidity( + wallet=my_wallet, + netuid=123, + position_id=2, + liquidity_delta=my_liquidity_delta + ) + + Note: Modifying is allowed even when user liquidity is enabled in specified subnet. Call `toggle_user_liquidity` + to enable/disable user liquidity. + """ + return modify_liquidity_extrinsic( + subtensor=self, + wallet=wallet, + netuid=netuid, + position_id=position_id, + liquidity_delta=liquidity_delta, + hotkey=hotkey, + wait_for_inclusion=wait_for_inclusion, + wait_for_finalization=wait_for_finalization, + period=period, + )
    + +
    [docs] def move_stake( @@ -2880,6 +4008,7 @@

    Source code for bittensor.core.subtensor

             amount: Balance,
             wait_for_inclusion: bool = True,
             wait_for_finalization: bool = False,
    +        period: Optional[int] = None,
         ) -> bool:
             """
             Moves stake to a different hotkey and/or subnet.
    @@ -2893,6 +4022,9 @@ 

    Source code for bittensor.core.subtensor

                 amount (Balance): Amount of stake to move.
                 wait_for_inclusion (bool): Waits for the transaction to be included in a block.
                 wait_for_finalization (bool): Waits for the transaction to be finalized on the blockchain.
    +            period (Optional[int]): The number of blocks during which the transaction will remain valid after it's
    +                submitted. If the transaction is not included in a block within that number of blocks, it will expire
    +                and be rejected. You can think of it as an expiration date for the transaction.
     
             Returns:
                 success (bool): True if the stake movement was successful.
    @@ -2908,6 +4040,7 @@ 

    Source code for bittensor.core.subtensor

                 amount=amount,
                 wait_for_inclusion=wait_for_inclusion,
                 wait_for_finalization=wait_for_finalization,
    +            period=period,
             )
    @@ -2927,6 +4060,7 @@

    Source code for bittensor.core.subtensor

             num_processes: Optional[int] = None,
             update_interval: Optional[int] = None,
             log_verbose: bool = False,
    +        period: Optional[int] = None,
         ) -> bool:
             """
             Registers a neuron on the Bittensor network using the provided wallet.
    @@ -2949,6 +4083,9 @@ 

    Source code for bittensor.core.subtensor

                 num_processes (Optional[int]): The number of processes to use to register. Default to `None`.
                 update_interval (Optional[int]): The number of nonces to solve between updates.  Default to `None`.
                 log_verbose (bool): If ``true``, the registration process will log more information.  Default to `False`.
    +            period (Optional[int]): The number of blocks during which the transaction will remain valid after it's
    +                submitted. If the transaction is not included in a block within that number of blocks, it will expire
    +                and be rejected. You can think of it as an expiration date for the transaction.
     
             Returns:
                 bool: ``True`` if the registration is successful, False otherwise.
    @@ -2970,6 +4107,7 @@ 

    Source code for bittensor.core.subtensor

                 dev_id=dev_id,
                 output_in_place=output_in_place,
                 log_verbose=log_verbose,
    +            period=period,
             )
    @@ -2980,16 +4118,20 @@

    Source code for bittensor.core.subtensor

             wallet: "Wallet",
             wait_for_inclusion: bool = False,
             wait_for_finalization: bool = True,
    +        period: Optional[int] = None,
         ) -> bool:
             """
             Registers a new subnetwork on the Bittensor network.
     
             Args:
                 wallet (bittensor_wallet.Wallet): The wallet to be used for subnet registration.
    -            wait_for_inclusion (bool): If set, waits for the extrinsic to enter a block before returning true, or returns
    -                false if the extrinsic fails to enter the block within the timeout. Default is False.
    +            wait_for_inclusion (bool): If set, waits for the extrinsic to enter a block before returning `True`, or
    +                returns `False` if the extrinsic fails to enter the block within the timeout. Default is `False`.
                 wait_for_finalization (bool): If set, waits for the extrinsic to be finalized on the chain before returning
    -                true, or returns false if the extrinsic fails to be finalized within the timeout. Default is True.
    +                `True`, or returns `False` if the extrinsic fails to be finalized within the timeout. Default is `True`.
    +            period (Optional[int]): The number of blocks during which the transaction will remain valid after it's
    +                submitted. If the transaction is not included in a block within that number of blocks, it will expire
    +                and be rejected. You can think of it as an expiration date for the transaction.
     
             Returns:
                 bool: True if the subnet registration was successful, False otherwise.
    @@ -2999,6 +4141,55 @@ 

    Source code for bittensor.core.subtensor

                 wallet=wallet,
                 wait_for_inclusion=wait_for_inclusion,
                 wait_for_finalization=wait_for_finalization,
    +            period=period,
    +        )
    + + +
    +[docs] + def remove_liquidity( + self, + wallet: "Wallet", + netuid: int, + position_id: int, + hotkey: Optional[str] = None, + wait_for_inclusion: bool = True, + wait_for_finalization: bool = False, + period: Optional[int] = None, + ) -> tuple[bool, str]: + """Remove liquidity and credit balances back to wallet's hotkey stake. + + Arguments: + wallet: The wallet used to sign the extrinsic (must be unlocked). + netuid: The UID of the target subnet for which the call is being initiated. + position_id: The id of the position record in the pool. + hotkey: The hotkey with staked TAO in Alpha. If not passed then the wallet hotkey is used. Defaults to + `None`. + wait_for_inclusion: Whether to wait for the extrinsic to be included in a block. Defaults to True. + wait_for_finalization: Whether to wait for finalization of the extrinsic. Defaults to False. + period: The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. + + Returns: + Tuple[bool, str]: + - True and a success message if the extrinsic is successfully submitted or processed. + - False and an error message if the submission fails or the wallet cannot be unlocked. + + Note: + - Adding is allowed even when user liquidity is enabled in specified subnet. Call `toggle_user_liquidity` + extrinsic to enable/disable user liquidity. + - To get the `position_id` use `get_liquidity_list` method. + """ + return remove_liquidity_extrinsic( + subtensor=self, + wallet=wallet, + netuid=netuid, + position_id=position_id, + hotkey=hotkey, + wait_for_inclusion=wait_for_inclusion, + wait_for_finalization=wait_for_finalization, + period=period, )
    @@ -3015,6 +4206,7 @@

    Source code for bittensor.core.subtensor

             wait_for_inclusion: bool = False,
             wait_for_finalization: bool = False,
             max_retries: int = 5,
    +        period: Optional[int] = 16,
         ) -> tuple[bool, str]:
             """
             Reveals the weights for a specific subnet on the Bittensor blockchain using the provided wallet.
    @@ -3027,11 +4219,14 @@ 

    Source code for bittensor.core.subtensor

                 weights (np.ndarray): NumPy array of weight values corresponding to each UID.
                 salt (np.ndarray): NumPy array of salt values corresponding to the hash function.
                 version_key (int): Version key for compatibility with the network. Default is ``int representation of
    -                Bittensor version``.
    +                the Bittensor version``.
                 wait_for_inclusion (bool): Waits for the transaction to be included in a block. Default is ``False``.
                 wait_for_finalization (bool): Waits for the transaction to be finalized on the blockchain. Default is
                     ``False``.
                 max_retries (int): The number of maximum attempts to reveal weights. Default is ``5``.
    +            period (Optional[int]): The number of blocks during which the transaction will remain valid after it's
    +                submitted. If the transaction is not included in a block within that number of blocks, it will expire
    +                and be rejected. You can think of it as an expiration date for the transaction.
     
             Returns:
                 tuple[bool, str]: ``True`` if the weight revelation is successful, False otherwise. And `msg`, a string
    @@ -3056,12 +4251,12 @@ 

    Source code for bittensor.core.subtensor

                         version_key=version_key,
                         wait_for_inclusion=wait_for_inclusion,
                         wait_for_finalization=wait_for_finalization,
    +                    period=period,
                     )
                     if success:
                         break
                 except Exception as e:
                     logging.error(f"Error revealing weights: {e}")
    -            finally:
                     retries += 1
     
             return success, message
    @@ -3074,6 +4269,7 @@

    Source code for bittensor.core.subtensor

             wallet: "Wallet",
             wait_for_inclusion: bool = False,
             wait_for_finalization: bool = True,
    +        period: Optional[int] = None,
         ) -> bool:
             """
             Register neuron by recycling some TAO.
    @@ -3083,47 +4279,61 @@ 

    Source code for bittensor.core.subtensor

                 wait_for_inclusion (bool): Waits for the transaction to be included in a block. Default is ``False``.
                 wait_for_finalization (bool): Waits for the transaction to be finalized on the blockchain. Default is
                     ``False``.
    +            period (Optional[int]): The number of blocks during which the transaction will remain valid after it's
    +                submitted. If the transaction is not included in a block within that number of blocks, it will expire
    +                and be rejected. You can think of it as an expiration date for the transaction.
     
             Returns:
                 `True` if registration was successful, otherwise `False`.
             """
    -        logging.info(
    -            f"Registering on netuid [blue]0[/blue] on network: [blue]{self.network}[/blue]"
    -        )
     
    -        # Check current recycle amount
    -        logging.info("Fetching recycle amount & balance.")
    -        block = self.get_current_block()
    +        return root_register_extrinsic(
    +            subtensor=self,
    +            wallet=wallet,
    +            wait_for_inclusion=wait_for_inclusion,
    +            wait_for_finalization=wait_for_finalization,
    +            period=period,
    +        )
    + - try: - recycle_call = cast( - int, self.get_hyperparameter(param_name="Burn", netuid=0, block=block) - ) - balance = self.get_balance(wallet.coldkeypub.ss58_address, block=block) - except TypeError as e: - logging.error(f"Unable to retrieve current recycle. {e}") - return False +
    +[docs] + def root_set_pending_childkey_cooldown( + self, + wallet: "Wallet", + cooldown: int, + wait_for_inclusion: bool = True, + wait_for_finalization: bool = True, + period: Optional[int] = None, + ) -> tuple[bool, str]: + """Sets the pending childkey cooldown. - current_recycle = Balance.from_rao(int(recycle_call)) + Arguments: + wallet: bittensor wallet instance. + cooldown: the number of blocks to setting pending childkey cooldown. + wait_for_inclusion (bool): Waits for the transaction to be included in a block. Default is ``False``. + wait_for_finalization (bool): Waits for the transaction to be finalized on the blockchain. Default is + ``False``. + period (Optional[int]): The number of blocks during which the transaction will remain valid after it's + submitted. If the transaction is not included in a block within that number of blocks, it will expire + and be rejected. You can think of it as an expiration date for the transaction. - # Check balance is sufficient - if balance < current_recycle: - logging.error( - f"[red]Insufficient balance {balance} to register neuron. " - f"Current recycle is {current_recycle} TAO[/red]." - ) - return False + Returns: + tuple[bool, str]: A tuple where the first element is a boolean indicating success or failure of the + operation, and the second element is a message providing additional information. - return root_register_extrinsic( + Note: This operation can only be successfully performed if your wallet has root privileges. + """ + return root_set_pending_childkey_cooldown_extrinsic( subtensor=self, wallet=wallet, + cooldown=cooldown, wait_for_inclusion=wait_for_inclusion, wait_for_finalization=wait_for_finalization, + period=period, )
    -
    -[docs] def root_set_weights( self, wallet: "Wallet", @@ -3132,9 +4342,10 @@

    Source code for bittensor.core.subtensor

             version_key: int = 0,
             wait_for_inclusion: bool = False,
             wait_for_finalization: bool = False,
    +        period: Optional[int] = None,
         ) -> bool:
             """
    -        Set weights for root network.
    +        Set weights for the root network.
     
             Arguments:
                 wallet (bittensor_wallet.Wallet): bittensor wallet instance.
    @@ -3145,12 +4356,14 @@ 

    Source code for bittensor.core.subtensor

                     ``False``.
                 wait_for_finalization (bool, optional): Waits for the transaction to be finalized on the blockchain.
                     Defaults to ``False``.
    +            period (Optional[int]): The number of blocks during which the transaction will remain valid after it's
    +                submitted. If the transaction is not included in a block within that number of blocks, it will expire
    +                and be rejected. You can think of it as an expiration date for the transaction.
     
             Returns:
                 `True` if the setting of weights is successful, `False` otherwise.
             """
    -        netuids_ = np.array(netuids, dtype=np.int64)
    -        weights_ = np.array(weights, dtype=np.float32)
    +        netuids_, weights_ = convert_uids_and_weights(netuids, weights)
             logging.info(f"Setting weights in network: [blue]{self.network}[/blue]")
             return set_root_weights_extrinsic(
                 subtensor=self,
    @@ -3160,9 +4373,141 @@ 

    Source code for bittensor.core.subtensor

                 version_key=version_key,
                 wait_for_finalization=wait_for_finalization,
                 wait_for_inclusion=wait_for_inclusion,
    +            period=period,
    +        )
    +
    +
    +[docs] + def set_children( + self, + wallet: "Wallet", + hotkey: str, + netuid: int, + children: list[tuple[float, str]], + wait_for_inclusion: bool = True, + wait_for_finalization: bool = True, + raise_error: bool = False, + period: Optional[int] = None, + ) -> tuple[bool, str]: + """ + Allows a coldkey to set children-keys. + + Arguments: + wallet: bittensor wallet instance. + hotkey: The ``SS58`` address of the neuron's hotkey. + netuid: The netuid value. + children: A list of children with their proportions. + wait_for_inclusion: Waits for the transaction to be included in a block. + wait_for_finalization: Waits for the transaction to be finalized on the blockchain. + raise_error: Raises a relevant exception rather than returning `False` if unsuccessful. + period: The number of blocks during which the transaction will remain valid after it's + submitted. If the transaction is not included in a block within that number of blocks, it will expire + and be rejected. You can think of it as an expiration date for the transaction. + + Returns: + tuple[bool, str]: A tuple where the first element is a boolean indicating success or failure of the + operation, and the second element is a message providing additional information. + + """ + return set_children_extrinsic( + subtensor=self, + wallet=wallet, + hotkey=hotkey, + netuid=netuid, + children=children, + wait_for_inclusion=wait_for_inclusion, + wait_for_finalization=wait_for_finalization, + raise_error=raise_error, + period=period, )
    +
    +[docs] + def set_delegate_take( + self, + wallet: "Wallet", + hotkey_ss58: str, + take: float, + wait_for_inclusion: bool = True, + wait_for_finalization: bool = True, + raise_error: bool = False, + period: Optional[int] = None, + ) -> tuple[bool, str]: + """ + Sets the delegate 'take' percentage for a neuron identified by its hotkey. + The 'take' represents the percentage of rewards that the delegate claims from its nominators' stakes. + + Arguments: + wallet (bittensor_wallet.Wallet): bittensor wallet instance. + hotkey_ss58 (str): The ``SS58`` address of the neuron's hotkey. + take (float): Percentage reward for the delegate. + wait_for_inclusion (bool): Waits for the transaction to be included in a block. + wait_for_finalization (bool): Waits for the transaction to be finalized on the blockchain. + raise_error: Raises a relevant exception rather than returning `False` if unsuccessful. + period (Optional[int]): The number of blocks during which the transaction will remain valid after it's + submitted. If the transaction is not included in a block within that number of blocks, it will expire + and be rejected. You can think of it as an expiration date for the transaction. + + Returns: + tuple[bool, str]: A tuple where the first element is a boolean indicating success or failure of the + operation, and the second element is a message providing additional information. + + Raises: + DelegateTakeTooHigh: Delegate take is too high. + DelegateTakeTooLow: Delegate take is too low. + DelegateTxRateLimitExceeded: A transactor exceeded the rate limit for delegate transaction. + HotKeyAccountNotExists: The hotkey does not exist. + NonAssociatedColdKey: Request to stake, unstake, or subscribe is made by a coldkey that is not associated + with the hotkey account. + bittensor_wallet.errors.PasswordError: Decryption failed or wrong password for decryption provided. + bittensor_wallet.errors.KeyFileError: Failed to decode keyfile data. + + The delegate take is a critical parameter in the network's incentive structure, influencing the distribution of + rewards among neurons and their nominators. + """ + + # u16 representation of the take + take_u16 = int(take * 0xFFFF) + + current_take = self.get_delegate_take(hotkey_ss58) + current_take_u16 = int(current_take * 0xFFFF) + + if current_take_u16 == take_u16: + logging.info(":white_heavy_check_mark: [green]Already Set[/green]") + return True, "" + + logging.info(f"Updating {hotkey_ss58} take: current={current_take} new={take}") + + if current_take_u16 < take_u16: + success, error = increase_take_extrinsic( + self, + wallet, + hotkey_ss58, + take_u16, + wait_for_finalization=wait_for_finalization, + wait_for_inclusion=wait_for_inclusion, + raise_error=raise_error, + period=period, + ) + else: + success, error = decrease_take_extrinsic( + self, + wallet, + hotkey_ss58, + take_u16, + wait_for_finalization=wait_for_finalization, + wait_for_inclusion=wait_for_inclusion, + raise_error=raise_error, + period=period, + ) + + if success: + logging.info(":white_heavy_check_mark: [green]Take Updated[/green]") + + return success, error
    + +
    [docs] def set_subnet_identity( @@ -3172,6 +4517,7 @@

    Source code for bittensor.core.subtensor

             subnet_identity: SubnetIdentity,
             wait_for_inclusion: bool = False,
             wait_for_finalization: bool = True,
    +        period: Optional[int] = None,
         ) -> tuple[bool, str]:
             """
             Sets the identity of a subnet for a specific wallet and network.
    @@ -3181,8 +4527,13 @@ 

    Source code for bittensor.core.subtensor

                 netuid (int): The unique ID of the network on which the operation takes place.
                 subnet_identity (SubnetIdentity): The identity data of the subnet including attributes like name, GitHub
                     repository, contact, URL, discord, description, and any additional metadata.
    -            wait_for_inclusion (bool): Indicates if the function should wait for the transaction to be included in the block.
    -            wait_for_finalization (bool): Indicates if the function should wait for the transaction to reach finalization.
    +            wait_for_inclusion (bool): Indicates if the function should wait for the transaction to be included in the
    +                block.
    +            wait_for_finalization (bool): Indicates if the function should wait for the transaction to reach
    +                finalization.
    +            period (Optional[int]): The number of blocks during which the transaction will remain valid after it's
    +                submitted. If the transaction is not included in a block within that number of blocks, it will expire
    +                and be rejected. You can think of it as an expiration date for the transaction.
     
             Returns:
                 tuple[bool, str]: A tuple where the first element is a boolean indicating success or failure of the
    @@ -3196,11 +4547,13 @@ 

    Source code for bittensor.core.subtensor

                 github_repo=subnet_identity.github_repo,
                 subnet_contact=subnet_identity.subnet_contact,
                 subnet_url=subnet_identity.subnet_url,
    +            logo_url=subnet_identity.logo_url,
                 discord=subnet_identity.discord,
                 description=subnet_identity.description,
                 additional=subnet_identity.additional,
                 wait_for_inclusion=wait_for_inclusion,
                 wait_for_finalization=wait_for_finalization,
    +            period=period,
             )
    @@ -3216,32 +4569,36 @@

    Source code for bittensor.core.subtensor

             wait_for_inclusion: bool = False,
             wait_for_finalization: bool = False,
             max_retries: int = 5,
    +        block_time: float = 12.0,
    +        period: Optional[int] = 8,
         ) -> tuple[bool, str]:
             """
    -        Sets the inter-neuronal weights for the specified neuron. This process involves specifying the influence or
    +        Sets the interneuronal weights for the specified neuron. This process involves specifying the influence or
                 trust a neuron places on other neurons in the network, which is a fundamental aspect of Bittensor's
                 decentralized learning architecture.
     
             Arguments:
    -            wallet (bittensor_wallet.Wallet): The wallet associated with the neuron setting the weights.
    -            netuid (int): The unique identifier of the subnet.
    -            uids (Union[NDArray[np.int64], torch.LongTensor, list]): The list of neuron UIDs that the weights are being
    -                set for.
    -            weights (Union[NDArray[np.float32], torch.FloatTensor, list]): The corresponding weights to be set for each
    -                UID.
    -            version_key (int): Version key for compatibility with the network.  Default is int representation of
    -                Bittensor version.
    -            wait_for_inclusion (bool): Waits for the transaction to be included in a block. Default is ``False``.
    -            wait_for_finalization (bool): Waits for the transaction to be finalized on the blockchain. Default is
    -                ``False``.
    -            max_retries (int): The number of maximum attempts to set weights. Default is ``5``.
    +            wallet: The wallet associated with the neuron setting the weights.
    +            netuid: The unique identifier of the subnet.
    +            uids: The list of neuron UIDs that the weights are being set for.
    +            weights: The corresponding weights to be set for each UID.
    +            version_key: Version key for compatibility with the network.  Default is int representation of a Bittensor
    +                version.
    +            wait_for_inclusion: Waits for the transaction to be included in a block. Default is ``False``.
    +            wait_for_finalization: Waits for the transaction to be finalized on the blockchain. Default is ``False``.
    +            max_retries: The number of maximum attempts to set weights. Default is ``5``.
    +            block_time: The number of seconds for block duration. Default is 12.0 seconds.
    +            period (Optional[int]): The number of blocks during which the transaction will remain valid after it's
    +                submitted. If the transaction is not included in a block within that number of blocks, it will expire
    +                and be rejected. You can think of it as an expiration date for the transaction. Default is 8.
     
             Returns:
    -            tuple[bool, str]: ``True`` if the setting of weights is successful, False otherwise. And `msg`, a string
    -                value describing the success or potential error.
    +            tuple:
    +                `True` if the setting of weights is successful, `False` otherwise.
    +                `msg` is a string value describing the success or potential error.
     
             This function is crucial in shaping the network's collective intelligence, where each neuron's learning and
    -            contribution are influenced by the weights it sets towards others【81†source】.
    +            contribution are influenced by the weights it sets towards others.
             """
     
             def _blocks_weight_limit() -> bool:
    @@ -3260,12 +4617,13 @@ 

    Source code for bittensor.core.subtensor

                     f"Hotkey {wallet.hotkey.ss58_address} not registered in subnet {netuid}",
                 )
     
    -        if self.commit_reveal_enabled(netuid=netuid) is True:
    +        if self.commit_reveal_enabled(netuid=netuid):
                 # go with `commit reveal v3` extrinsic
     
                 while retries < max_retries and success is False and _blocks_weight_limit():
                     logging.info(
    -                    f"Committing weights for subnet #{netuid}. Attempt {retries + 1} of {max_retries}."
    +                    f"Committing weights for subnet [blue]{netuid}[/blue]. "
    +                    f"Attempt [blue]{retries + 1}[blue] of [green]{max_retries}[/green]."
                     )
                     success, message = commit_reveal_v3_extrinsic(
                         subtensor=self,
    @@ -3276,17 +4634,19 @@ 

    Source code for bittensor.core.subtensor

                         version_key=version_key,
                         wait_for_inclusion=wait_for_inclusion,
                         wait_for_finalization=wait_for_finalization,
    +                    block_time=block_time,
    +                    period=period,
                     )
                     retries += 1
                 return success, message
             else:
    -            # go with classic `set weights extrinsic`
    +            # go with classic `set_weights_extrinsic`
     
                 while retries < max_retries and success is False and _blocks_weight_limit():
                     try:
                         logging.info(
    -                        f"Setting weights for subnet #[blue]{netuid}[/blue]. "
    -                        f"Attempt [blue]{retries + 1} of {max_retries}[/blue]."
    +                        f"Setting weights for subnet [blue]{netuid}[/blue]. "
    +                        f"Attempt [blue]{retries + 1}[/blue] of [green]{max_retries}[/green]."
                         )
                         success, message = set_weights_extrinsic(
                             subtensor=self,
    @@ -3297,10 +4657,10 @@ 

    Source code for bittensor.core.subtensor

                             version_key=version_key,
                             wait_for_inclusion=wait_for_inclusion,
                             wait_for_finalization=wait_for_finalization,
    +                        period=period,
                         )
                     except Exception as e:
                         logging.error(f"Error setting weights: {e}")
    -                finally:
                         retries += 1
     
                 return success, message
    @@ -3315,6 +4675,7 @@

    Source code for bittensor.core.subtensor

             wait_for_inclusion: bool = False,
             wait_for_finalization: bool = True,
             certificate: Optional[Certificate] = None,
    +        period: Optional[int] = None,
         ) -> bool:
             """
             Registers an ``Axon`` serving endpoint on the Bittensor network for a specific neuron. This function is used to
    @@ -3328,6 +4689,9 @@ 

    Source code for bittensor.core.subtensor

                     ``True``.
                 certificate (bittensor.utils.Certificate): Certificate to use for TLS. If ``None``, no TLS will be used.
                     Defaults to ``None``.
    +            period (Optional[int]): The number of blocks during which the transaction will remain valid after it's
    +                submitted. If the transaction is not included in a block within that number of blocks, it will expire
    +                and be rejected. You can think of it as an expiration date for the transaction.
     
             Returns:
                 bool: ``True`` if the Axon serve registration is successful, False otherwise.
    @@ -3342,6 +4706,47 @@ 

    Source code for bittensor.core.subtensor

                 wait_for_inclusion=wait_for_inclusion,
                 wait_for_finalization=wait_for_finalization,
                 certificate=certificate,
    +            period=period,
    +        )
    + + +
    +[docs] + def start_call( + self, + wallet: "Wallet", + netuid: int, + wait_for_inclusion: bool = True, + wait_for_finalization: bool = False, + period: Optional[int] = None, + ) -> tuple[bool, str]: + """ + Submits a start_call extrinsic to the blockchain, to trigger the start call process for a subnet (used to start + a new subnet's emission mechanism). + + Args: + wallet (Wallet): The wallet used to sign the extrinsic (must be unlocked). + netuid (int): The UID of the target subnet for which the call is being initiated. + wait_for_inclusion (bool, optional): Whether to wait for the extrinsic to be included in a block. + Defaults to `True`. + wait_for_finalization (bool, optional): Whether to wait for finalization of the extrinsic. + Defaults to `False`. + period (Optional[int]): The number of blocks during which the transaction will remain valid after it's + submitted. If the transaction is not included in a block within that number of blocks, it will expire + and be rejected. You can think of it as an expiration date for the transaction. + + Returns: + Tuple[bool, str]: + - True and a success message if the extrinsic is successfully submitted or processed. + - False and an error message if the submission fails or the wallet cannot be unlocked. + """ + return start_call_extrinsic( + subtensor=self, + wallet=wallet, + netuid=netuid, + wait_for_inclusion=wait_for_inclusion, + wait_for_finalization=wait_for_finalization, + period=period, )
    @@ -3356,6 +4761,10 @@

    Source code for bittensor.core.subtensor

             amount: Balance,
             wait_for_inclusion: bool = True,
             wait_for_finalization: bool = False,
    +        safe_staking: bool = False,
    +        allow_partial_stake: bool = False,
    +        rate_tolerance: float = 0.005,
    +        period: Optional[int] = None,
         ) -> bool:
             """
             Moves stake between subnets while keeping the same coldkey-hotkey pair ownership.
    @@ -3369,9 +4778,28 @@ 

    Source code for bittensor.core.subtensor

                 amount (Union[Balance, float]): The amount to swap.
                 wait_for_inclusion (bool): Waits for the transaction to be included in a block.
                 wait_for_finalization (bool): Waits for the transaction to be finalized on the blockchain.
    +            safe_staking (bool): If true, enables price safety checks to protect against fluctuating prices. The swap
    +                will only execute if the price ratio between subnets doesn't exceed the rate tolerance.
    +                Default is False.
    +            allow_partial_stake (bool): If true and safe_staking is enabled, allows partial stake swaps when
    +                the full amount would exceed the price tolerance. If false, the entire swap fails if it would
    +                exceed the tolerance. Default is False.
    +            rate_tolerance (float): The maximum allowed increase in the price ratio between subnets
    +                (origin_price/destination_price). For example, 0.005 = 0.5% maximum increase. Only used
    +                when safe_staking is True. Default is 0.005.
    +            period (Optional[int]): The number of blocks during which the transaction will remain valid after it's
    +                submitted. If the transaction is not included in a block within that number of blocks, it will expire
    +                and be rejected. You can think of it as an expiration date for the transaction.
     
             Returns:
                 success (bool): True if the extrinsic was successful.
    +
    +        The price ratio for swap_stake in safe mode is calculated as: origin_subnet_price / destination_subnet_price
    +        When safe_staking is enabled, the swap will only execute if:
    +            - With allow_partial_stake=False: The entire swap amount can be executed without the price ratio
    +            increasing more than rate_tolerance
    +            - With allow_partial_stake=True: A partial amount will be swapped up to the point where the
    +            price ratio would increase by rate_tolerance
             """
             amount = check_and_convert_to_balance(amount)
             return swap_stake_extrinsic(
    @@ -3383,6 +4811,51 @@ 

    Source code for bittensor.core.subtensor

                 amount=amount,
                 wait_for_inclusion=wait_for_inclusion,
                 wait_for_finalization=wait_for_finalization,
    +            safe_staking=safe_staking,
    +            allow_partial_stake=allow_partial_stake,
    +            rate_tolerance=rate_tolerance,
    +            period=period,
    +        )
    + + +
    +[docs] + def toggle_user_liquidity( + self, + wallet: "Wallet", + netuid: int, + enable: bool, + wait_for_inclusion: bool = True, + wait_for_finalization: bool = False, + period: Optional[int] = None, + ) -> tuple[bool, str]: + """Allow to toggle user liquidity for specified subnet. + + Arguments: + wallet: The wallet used to sign the extrinsic (must be unlocked). + netuid: The UID of the target subnet for which the call is being initiated. + enable: Boolean indicating whether to enable user liquidity. + wait_for_inclusion: Whether to wait for the extrinsic to be included in a block. Defaults to True. + wait_for_finalization: Whether to wait for finalization of the extrinsic. Defaults to False. + period: The number of blocks during which the transaction will remain valid after it's submitted. If + the transaction is not included in a block within that number of blocks, it will expire and be rejected. + You can think of it as an expiration date for the transaction. + + Returns: + Tuple[bool, str]: + - True and a success message if the extrinsic is successfully submitted or processed. + - False and an error message if the submission fails or the wallet cannot be unlocked. + + Note: The call can be executed successfully by the subnet owner only. + """ + return toggle_user_liquidity_extrinsic( + subtensor=self, + wallet=wallet, + netuid=netuid, + enable=enable, + wait_for_inclusion=wait_for_inclusion, + wait_for_finalization=wait_for_finalization, + period=period, )
    @@ -3397,6 +4870,7 @@

    Source code for bittensor.core.subtensor

             wait_for_finalization: bool = False,
             transfer_all: bool = False,
             keep_alive: bool = True,
    +        period: Optional[int] = None,
         ) -> bool:
             """
             Transfer token of amount to destination.
    @@ -3404,12 +4878,15 @@ 

    Source code for bittensor.core.subtensor

             Arguments:
                 wallet (bittensor_wallet.Wallet): Source wallet for the transfer.
                 dest (str): Destination address for the transfer.
    -            amount (float): Amount of tokens to transfer.
    +            amount (float): Amount of tao to transfer.
                 transfer_all (bool): Flag to transfer all tokens. Default is ``False``.
                 wait_for_inclusion (bool): Waits for the transaction to be included in a block.  Default is ``True``.
                 wait_for_finalization (bool): Waits for the transaction to be finalized on the blockchain.  Default is
                     ``False``.
                 keep_alive (bool): Flag to keep the connection alive. Default is ``True``.
    +            period (Optional[int]): The number of blocks during which the transaction will remain valid after it's
    +                submitted. If the transaction is not included in a block within that number of blocks, it will expire
    +                and be rejected. You can think of it as an expiration date for the transaction.
     
             Returns:
                 `True` if the transferring was successful, otherwise `False`.
    @@ -3424,6 +4901,7 @@ 

    Source code for bittensor.core.subtensor

                 wait_for_inclusion=wait_for_inclusion,
                 wait_for_finalization=wait_for_finalization,
                 keep_alive=keep_alive,
    +            period=period,
             )
    @@ -3439,6 +4917,7 @@

    Source code for bittensor.core.subtensor

             amount: Balance,
             wait_for_inclusion: bool = True,
             wait_for_finalization: bool = False,
    +        period: Optional[int] = None,
         ) -> bool:
             """
             Transfers stake from one subnet to another while changing the coldkey owner.
    @@ -3452,6 +4931,9 @@ 

    Source code for bittensor.core.subtensor

                 amount (Union[Balance, float, int]): Amount to transfer.
                 wait_for_inclusion (bool): If true, waits for inclusion before returning.
                 wait_for_finalization (bool): If true, waits for finalization before returning.
    +            period (Optional[int]): The number of blocks during which the transaction will remain valid after it's
    +                submitted. If the transaction is not included in a block within that number of blocks, it will expire
    +                and be rejected. You can think of it as an expiration date for the transaction.
     
             Returns:
                 success (bool): True if the transfer was successful.
    @@ -3467,6 +4949,7 @@ 

    Source code for bittensor.core.subtensor

                 amount=amount,
                 wait_for_inclusion=wait_for_inclusion,
                 wait_for_finalization=wait_for_finalization,
    +            period=period,
             )
    @@ -3480,25 +4963,41 @@

    Source code for bittensor.core.subtensor

             amount: Optional[Balance] = None,
             wait_for_inclusion: bool = True,
             wait_for_finalization: bool = False,
    +        safe_staking: bool = False,
    +        allow_partial_stake: bool = False,
    +        rate_tolerance: float = 0.005,
    +        period: Optional[int] = None,
    +        unstake_all: bool = False,
         ) -> bool:
             """
             Removes a specified amount of stake from a single hotkey account. This function is critical for adjusting
                 individual neuron stakes within the Bittensor network.
     
             Args:
    -            wallet (bittensor_wallet.wallet): The wallet associated with the neuron from which the stake is being
    -                removed.
    -            hotkey_ss58 (Optional[str]): The ``SS58`` address of the hotkey account to unstake from.
    -            netuid (Optional[int]): The unique identifier of the subnet.
    -            amount (Balance): The amount of TAO to unstake. If not specified, unstakes all.
    -            wait_for_inclusion (bool): Waits for the transaction to be included in a block.
    -            wait_for_finalization (bool): Waits for the transaction to be finalized on the blockchain.
    +            wallet: The wallet associated with the neuron from which the stake is being removed.
    +            hotkey_ss58: The ``SS58`` address of the hotkey account to unstake from.
    +            netuid: The unique identifier of the subnet.
    +            amount: The amount of alpha to unstake. If not specified, unstakes all. Alpha amount.
    +            wait_for_inclusion: Waits for the transaction to be included in a block.
    +            wait_for_finalization: Waits for the transaction to be finalized on the blockchain.
    +            safe_staking: If true, enables price safety checks to protect against fluctuating prices. The unstake
    +                will only execute if the price change doesn't exceed the rate tolerance. Default is False.
    +            allow_partial_stake (bool): If true and safe_staking is enabled, allows partial unstaking when
    +                the full amount would exceed the price tolerance. If false, the entire unstake fails if it would
    +                exceed the tolerance. Default is False.
    +            rate_tolerance (float): The maximum allowed price change ratio when unstaking. For example,
    +                0.005 = 0.5% maximum price decrease. Only used when safe_staking is True. Default is 0.005.
    +            period (Optional[int]): The number of blocks during which the transaction will remain valid after it's
    +                submitted. If the transaction is not included in a block within that number of blocks, it will expire
    +                and be rejected. You can think of it as an expiration date for the transaction.
    +            unstake_all: If `True`, unstakes all tokens, and `amount` is ignored. Default is `False`.
     
             Returns:
                 bool: ``True`` if the unstaking process is successful, False otherwise.
     
             This function supports flexible stake management, allowing neurons to adjust their network participation and
    -            potential reward accruals.
    +            potential reward accruals. When safe_staking is enabled, it provides protection against price fluctuations
    +            during the time unstake is executed and the time it is actually processed by the chain.
             """
             amount = check_and_convert_to_balance(amount)
             return unstake_extrinsic(
    @@ -3509,6 +5008,97 @@ 

    Source code for bittensor.core.subtensor

                 amount=amount,
                 wait_for_inclusion=wait_for_inclusion,
                 wait_for_finalization=wait_for_finalization,
    +            safe_staking=safe_staking,
    +            allow_partial_stake=allow_partial_stake,
    +            rate_tolerance=rate_tolerance,
    +            period=period,
    +            unstake_all=unstake_all,
    +        )
    + + +
    +[docs] + def unstake_all( + self, + wallet: "Wallet", + hotkey: str, + netuid: int, + rate_tolerance: Optional[float] = 0.005, + wait_for_inclusion: bool = True, + wait_for_finalization: bool = False, + period: Optional[int] = None, + ) -> tuple[bool, str]: + """Unstakes all TAO/Alpha associated with a hotkey from the specified subnets on the Bittensor network. + + Arguments: + wallet: The wallet of the stake owner. + hotkey: The SS58 address of the hotkey to unstake from. + netuid: The unique identifier of the subnet. + rate_tolerance: The maximum allowed price change ratio when unstaking. For example, 0.005 = 0.5% maximum + price decrease. If not passed (None), then unstaking goes without price limit. Default is 0.005. + wait_for_inclusion: Waits for the transaction to be included in a block. Default is `True`. + wait_for_finalization: Waits for the transaction to be finalized on the blockchain. Default is `False`. + period: The number of blocks during which the transaction will remain valid after it's submitted. If the + transaction is not included in a block within that number of blocks, it will expire and be rejected. You + can think of it as an expiration date for the transaction. Default is `None`. + + Returns: + tuple[bool, str]: + A tuple containing: + - `True` and a success message if the unstake operation succeeded; + - `False` and an error message otherwise. + + Example: + # If you would like to unstake all stakes in all subnets safely: + import bittensor as bt + + subtensor = bt.Subtensor() + wallet = bt.Wallet("my_wallet") + netuid = 14 + hotkey = "5%SOME_HOTKEY%" + + wallet_stakes = subtensor.get_stake_info_for_coldkey(coldkey_ss58=wallet.coldkey.ss58_address) + + for stake in wallet_stakes: + result = subtensor.unstake_all( + wallet=wallet, + hotkey_ss58=stake.hotkey_ss58, + netuid=stake.netuid, + ) + print(result) + + # If you would like to unstake all stakes in all subnets unsafely, use `rate_tolerance=None`: + import bittensor as bt + + subtensor = bt.AsyncSubtensor() + wallet = bt.Wallet("my_wallet") + netuid = 14 + hotkey = "5%SOME_HOTKEY_WHERE_IS_YOUR_STAKE_NOW%" + + wallet_stakes = await subtensor.get_stake_info_for_coldkey(coldkey_ss58=wallet.coldkey.ss58_address) + + for stake in wallet_stakes: + result = await subtensor.unstake_all( + wallet=wallet, + hotkey_ss58=stake.hotkey_ss58, + netuid=stake.netuid, + rate_tolerance=None, + ) + print(result) + """ + if netuid != 0: + logging.debug( + f"Unstaking without Alpha price control from subnet [blue]#{netuid}[/blue]." + ) + return unstake_all_extrinsic( + subtensor=self, + wallet=wallet, + hotkey=hotkey, + netuid=netuid, + rate_tolerance=rate_tolerance, + wait_for_inclusion=wait_for_inclusion, + wait_for_finalization=wait_for_finalization, + period=period, )
    @@ -3522,13 +5112,15 @@

    Source code for bittensor.core.subtensor

             amounts: Optional[list[Balance]] = None,
             wait_for_inclusion: bool = True,
             wait_for_finalization: bool = False,
    +        period: Optional[int] = None,
    +        unstake_all: bool = False,
         ) -> bool:
             """
             Performs batch unstaking from multiple hotkey accounts, allowing a neuron to reduce its staked amounts
                 efficiently. This function is useful for managing the distribution of stakes across multiple neurons.
     
             Args:
    -            wallet (bittensor_wallet.Wallet): The wallet linked to the coldkey from which the stakes are being
    +            wallet: The wallet linked to the coldkey from which the stakes are being
                     withdrawn.
                 hotkey_ss58s (List[str]): A list of hotkey ``SS58`` addresses to unstake from.
                 netuids (List[int]): The list of subnet uids.
    @@ -3536,6 +5128,10 @@ 

    Source code for bittensor.core.subtensor

                     unstakes all available stakes.
                 wait_for_inclusion (bool): Waits for the transaction to be included in a block.
                 wait_for_finalization (bool): Waits for the transaction to be finalized on the blockchain.
    +            period (Optional[int]): The number of blocks during which the transaction will remain valid after it's
    +                submitted. If the transaction is not included in a block within that number of blocks, it will expire
    +                and be rejected. You can think of it as an expiration date for the transaction.
    +            unstake_all: If `True`, unstakes all tokens, and `amounts` is ignored. Default is `False`.
     
             Returns:
                 bool: ``True`` if the batch unstaking is successful, False otherwise.
    @@ -3551,6 +5147,8 @@ 

    Source code for bittensor.core.subtensor

                 amounts=amounts,
                 wait_for_inclusion=wait_for_inclusion,
                 wait_for_finalization=wait_for_finalization,
    +            period=period,
    +            unstake_all=unstake_all,
             )
    diff --git a/static/python-api/html/_modules/bittensor/core/synapse.html b/static/python-api/html/_modules/bittensor/core/synapse.html index 64a8f3c1cf..9992a90db6 100644 --- a/static/python-api/html/_modules/bittensor/core/synapse.html +++ b/static/python-api/html/_modules/bittensor/core/synapse.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    diff --git a/static/python-api/html/_modules/bittensor/core/tensor.html b/static/python-api/html/_modules/bittensor/core/tensor.html index 5765c15565..74ebaa6330 100644 --- a/static/python-api/html/_modules/bittensor/core/tensor.html +++ b/static/python-api/html/_modules/bittensor/core/tensor.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    diff --git a/static/python-api/html/_modules/bittensor/core/threadpool.html b/static/python-api/html/_modules/bittensor/core/threadpool.html index 4306349ca0..2623e4bc45 100644 --- a/static/python-api/html/_modules/bittensor/core/threadpool.html +++ b/static/python-api/html/_modules/bittensor/core/threadpool.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -568,7 +571,7 @@

    Source code for bittensor.core.threadpool

                     raise RuntimeError("cannot schedule new futures after shutdown")
                 if _shutdown:
                     raise RuntimeError(
    -                    "cannot schedule new futures after " "interpreter shutdown"
    +                    "cannot schedule new futures after interpreter shutdown"
                     )
     
                 priority = kwargs.get("priority", random.randint(0, 1000000))
    @@ -619,7 +622,7 @@ 

    Source code for bittensor.core.threadpool

         def _initializer_failed(self):
             with self._shutdown_lock:
                 self._broken = (
    -                "A thread initializer failed, the thread pool " "is not usable anymore"
    +                "A thread initializer failed, the thread pool is not usable anymore"
                 )
                 # Drain work queue and mark pending futures failed
                 while True:
    diff --git a/static/python-api/html/_modules/bittensor/core/types.html b/static/python-api/html/_modules/bittensor/core/types.html
    index adda42570c..27efa8b51e 100644
    --- a/static/python-api/html/_modules/bittensor/core/types.html
    +++ b/static/python-api/html/_modules/bittensor/core/types.html
    @@ -160,25 +160,28 @@
     
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -473,8 +476,8 @@

    Source code for bittensor.core.types

             """
             prefix_str = "" if prefix is None else f"{prefix}."
             try:
    -            default_network = settings.DEFAULT_NETWORK
    -            default_chain_endpoint = settings.FINNEY_ENTRYPOINT
    +            default_network = settings.DEFAULTS.subtensor.network
    +            default_chain_endpoint = settings.DEFAULTS.subtensor.chain_endpoint
     
                 parser.add_argument(
                     f"--{prefix_str}subtensor.network",
    @@ -583,8 +586,6 @@ 

    Source code for bittensor.core.types

             )
    -
    -[docs] def dict(self) -> dict: """ Returns a dict representation of this object. If `self.certificate` is `None`, @@ -605,7 +606,6 @@

    Source code for bittensor.core.types

             if self.certificate is not None:
                 d["certificate"] = self.certificate
             return d
    -
    @@ -622,12 +622,9 @@

    Source code for bittensor.core.types

     
     
     
    -
    -[docs] class ParamWithTypes(TypedDict): name: str # Name of the parameter. - type: str # ScaleType string of the parameter.
    - + type: str # ScaleType string of the parameter.
    diff --git a/static/python-api/html/_modules/bittensor/utils.html b/static/python-api/html/_modules/bittensor/utils.html index 7879c9fe79..466ed122df 100644 --- a/static/python-api/html/_modules/bittensor/utils.html +++ b/static/python-api/html/_modules/bittensor/utils.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -335,6 +338,7 @@

    Source code for bittensor.utils

     import ast
    +import decimal
     import hashlib
     from collections import namedtuple
     from typing import Any, Literal, Union, Optional, TYPE_CHECKING
    @@ -357,6 +361,8 @@ 

    Source code for bittensor.utils

     if TYPE_CHECKING:
         from bittensor_wallet import Wallet
     
    +BT_DOCS_LINK = "https://docs.bittensor.com"
    +
     
     # redundant aliases
     logging = logging
    @@ -389,8 +395,9 @@ 

    Source code for bittensor.utils

     
     
     
    -def _decode_hex_identity_dict(info_dictionary: dict[str, Any]) -> dict[str, Any]:
    -    # TODO why does this exist alongside `decode_hex_identity_dict`?
    +
    +[docs] +def decode_hex_identity_dict(info_dictionary: dict[str, Any]) -> dict[str, Any]: """Decodes a dictionary of hexadecimal identities.""" decoded_info = {} for k, v in info_dictionary.items(): @@ -406,7 +413,8 @@

    Source code for bittensor.utils

                     print(f"Could not decode: {k}: {item}")
             else:
                 decoded_info[k] = item
    -    return decoded_info
    +    return decoded_info
    +
    @@ -523,6 +531,20 @@

    Source code for bittensor.utils

     
     
     
    +
    +[docs] +def float_to_u64(value: float) -> int: + """Converts a float to a u64 int""" + + value = decimal.Decimal(str(value)) + + if not (0 <= value <= 1): + raise ValueError("Input value must be between 0 and 1") + + return int(value * U64_MAX)
    + + +
    [docs] def get_hash(content, encoding="utf-8"): @@ -570,6 +592,7 @@

    Source code for bittensor.utils

                     pass
             if new_error_message is None:
                 return_val = " ".join(error_message.args)
    +
                 return f"Subtensor returned: {return_val}"
             else:
                 error_message = new_error_message
    @@ -587,7 +610,9 @@ 

    Source code for bittensor.utils

     
                 # subtensor custom error marker
                 if err_data.startswith("Custom error:"):
    -                err_description = f"{err_data} | Please consult https://docs.bittensor.com/subtensor-nodes/subtensor-error-messages"
    +                err_description = (
    +                    f"{err_data} | Please consult {BT_DOCS_LINK}/errors/custom"
    +                )
                 else:
                     err_description = err_data
     
    @@ -599,7 +624,20 @@ 

    Source code for bittensor.utils

                 err_type = error_message.get("type", err_type)
                 err_name = error_message.get("name", err_name)
                 err_docs = error_message.get("docs", [err_description])
    -            err_description = err_docs[0] if err_docs else err_description
    +            err_description = " ".join(err_docs)
    +            err_description += (
    +                f" | Please consult {BT_DOCS_LINK}/errors/subtensor#{err_name.lower()}"
    +            )
    +
    +        elif error_message.get("code") and error_message.get("message"):
    +            err_type = error_message.get("code", err_name)
    +            err_name = "Custom type"
    +            err_description = error_message.get("message", err_description)
    +
    +        else:
    +            logging.error(
    +                f"String representation of real error_message: {str(error_message)}"
    +            )
     
         return f"Subtensor returned `{err_name}({err_type})` error. This means: `{err_description}`."
    @@ -686,64 +724,6 @@

    Source code for bittensor.utils

     
     
     
    -
    -[docs] -def decode_hex_identity_dict(info_dictionary) -> dict[str, Any]: - """ - Decodes hex-encoded strings in a dictionary. - - This function traverses the given dictionary, identifies hex-encoded strings, and decodes them into readable - strings. It handles nested dictionaries and lists within the dictionary. - - Args: - info_dictionary (dict): The dictionary containing hex-encoded strings to decode. - - Returns: - dict: The dictionary with decoded strings. - - Examples: - input_dict = { - ... "name": {"value": "0x6a6f686e"}, - ... "additional": [ - ... [{"data": "0x64617461"}] - ... ] - ... } - decode_hex_identity_dict(input_dict) - {'name': 'john', 'additional': [('data', 'data')]} - """ - - def get_decoded(data: str) -> Optional[str]: - """Decodes a hex-encoded string.""" - try: - return bytes.fromhex(data[2:]).decode() - except UnicodeDecodeError: - print(f"Could not decode: {key}: {item}") - - for key, value in info_dictionary.items(): - if isinstance(value, dict): - item = list(value.values())[0] - if isinstance(item, str) and item.startswith("0x"): - try: - info_dictionary[key] = get_decoded(item) - except UnicodeDecodeError: - print(f"Could not decode: {key}: {item}") - else: - info_dictionary[key] = item - if key == "additional": - additional = [] - for item in value: - additional.append( - tuple( - get_decoded(data=next(iter(sub_item.values()))) - for sub_item in item - ) - ) - info_dictionary[key] = additional - - return info_dictionary
    - - -
    [docs] def validate_chain_endpoint(endpoint_url: str) -> tuple[bool, str]: @@ -763,13 +743,25 @@

    Source code for bittensor.utils

     
     
    [docs] -def unlock_key(wallet: "Wallet", unlock_type="coldkey") -> "UnlockStatus": +def unlock_key( + wallet: "Wallet", + unlock_type="coldkey", + raise_error=False, +) -> "UnlockStatus": """ Attempts to decrypt a wallet's coldkey or hotkey + Args: wallet: a Wallet object unlock_type: the key type, 'coldkey' or 'hotkey' - Returns: UnlockStatus for success status of unlock, with error message if unsuccessful + raise_error: if False, will return (False, error msg), if True will raise the otherwise-caught exception. + + Returns: + UnlockStatus for success status of unlock, with error message if unsuccessful + + Raises: + bittensor_wallet.errors.PasswordError: incorrect password + bittensor_wallet.errors.KeyFileError: keyfile is corrupt, non-writable, or non-readable, or non-existent """ if unlock_type == "coldkey": unlocker = "unlock_coldkey" @@ -783,9 +775,15 @@

    Source code for bittensor.utils

             getattr(wallet, unlocker)()
             return UnlockStatus(True, "")
         except PasswordError:
    +        if raise_error:
    +            raise
    +
             err_msg = f"The password used to decrypt your {unlock_type.capitalize()} keyfile is invalid."
             return UnlockStatus(False, err_msg)
         except KeyFileError:
    +        if raise_error:
    +            raise
    +
             err_msg = f"{unlock_type.capitalize()} keyfile is corrupt, non-writable, or non-readable, or non-existent."
             return UnlockStatus(False, err_msg)
    diff --git a/static/python-api/html/_modules/bittensor/utils/axon_utils.html b/static/python-api/html/_modules/bittensor/utils/axon_utils.html index 18b0df1386..e2bdf4d676 100644 --- a/static/python-api/html/_modules/bittensor/utils/axon_utils.html +++ b/static/python-api/html/_modules/bittensor/utils/axon_utils.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    diff --git a/static/python-api/html/_modules/bittensor/utils/balance.html b/static/python-api/html/_modules/bittensor/utils/balance.html index d687df67d5..d2cfac227a 100644 --- a/static/python-api/html/_modules/bittensor/utils/balance.html +++ b/static/python-api/html/_modules/bittensor/utils/balance.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -342,6 +345,35 @@

    Source code for bittensor.utils.balance

     from bittensor.core import settings
     
     
    +def _check_currencies(self, other):
    +    """Checks that Balance objects have the same netuids to perform arithmetic operations.
    +
    +    A warning is raised if the netuids differ.
    +
    +    Example:
    +        >>> balance1 = Balance.from_rao(1000).set_unit(12)
    +        >>> balance2 = Balance.from_rao(500).set_unit(12)
    +        >>> balance1 + balance2  # No warning
    +
    +        >>> balance3 = Balance.from_rao(200).set_unit(15)
    +        >>> balance1 + balance3  # Raises DeprecationWarning
    +
    +    In this example:
    +        - `from_rao` creates a Balance instance from the amount in rao (smallest unit).
    +        - `set_unit(12)` sets the unit to correspond to subnet 12 (i.e., Alpha from netuid 12).
    +    """
    +    if self.netuid != other.netuid:
    +        warnings.simplefilter("default", DeprecationWarning)
    +        warnings.warn(
    +            "Balance objects must have the same netuid (Alpha currency) to perform arithmetic operations.\n"
    +            f"First balance is `{self}`.  Second balance is `{other}`.\n\n"
    +            "To create a Balance instance with the correct netuid, use:\n"
    +            "Balance.from_rao(1000).set_unit(12)  # 1000 rao in subnet 12",
    +            category=DeprecationWarning,
    +            stacklevel=2,
    +        )
    +
    +
     
    [docs] class Balance: @@ -361,6 +393,7 @@

    Source code for bittensor.utils.balance

         rao_unit: str = settings.RAO_SYMBOL  # This is the rao unit
         rao: int
         tao: float
    +    netuid: int = 0
     
         def __init__(self, balance: Union[int, float]):
             """
    @@ -376,7 +409,9 @@ 

    Source code for bittensor.utils.balance

                 # Assume tao value for the float
                 self.rao = int(balance * pow(10, 9))
             else:
    -            raise TypeError("balance must be an int (rao) or a float (tao)")
    +            raise TypeError(
    +                f"Balance must be an int (rao) or a float (tao), not  `{type(balance)}`."
    +            )
     
         @property
         def tao(self):
    @@ -391,8 +426,13 @@ 

    Source code for bittensor.utils.balance

             return self.tao
     
         def __str__(self):
    -        """Returns the Balance object as a string in the format "symbolvalue", where the value is in tao."""
    -        return f"{self.unit}{float(self.tao):,.9f}"
    +        """
    +        Returns the Balance object as a string in the format "symbolvalue", where the value is in tao.
    +        """
    +        if self.unit == UNITS[0]:
    +            return f"{self.unit}{float(self.tao):,.9f}"
    +        else:
    +            return f"\u200e{float(self.tao):,.9f}{self.unit}\u200e"
     
         def __rich__(self):
             int_tao, fract_tao = format(float(self.tao), "f").split(".")
    @@ -411,7 +451,8 @@ 

    Source code for bittensor.utils.balance

             if other is None:
                 return False
     
    -        if hasattr(other, "rao"):
    +        if isinstance(other, Balance):
    +            _check_currencies(self, other)
                 return self.rao == other.rao
             else:
                 try:
    @@ -425,7 +466,8 @@ 

    Source code for bittensor.utils.balance

             return not self == other
     
         def __gt__(self, other: Union[int, float, "Balance"]):
    -        if hasattr(other, "rao"):
    +        if isinstance(other, Balance):
    +            _check_currencies(self, other)
                 return self.rao > other.rao
             else:
                 try:
    @@ -436,7 +478,8 @@ 

    Source code for bittensor.utils.balance

                     raise NotImplementedError("Unsupported type")
     
         def __lt__(self, other: Union[int, float, "Balance"]):
    -        if hasattr(other, "rao"):
    +        if isinstance(other, Balance):
    +            _check_currencies(self, other)
                 return self.rao < other.rao
             else:
                 try:
    @@ -448,94 +491,112 @@ 

    Source code for bittensor.utils.balance

     
         def __le__(self, other: Union[int, float, "Balance"]):
             try:
    +            if isinstance(other, Balance):
    +                _check_currencies(self, other)
                 return self < other or self == other
             except TypeError:
                 raise NotImplementedError("Unsupported type")
     
         def __ge__(self, other: Union[int, float, "Balance"]):
             try:
    +            if isinstance(other, Balance):
    +                _check_currencies(self, other)
                 return self > other or self == other
             except TypeError:
                 raise NotImplementedError("Unsupported type")
     
         def __add__(self, other: Union[int, float, "Balance"]):
    -        if hasattr(other, "rao"):
    -            return Balance.from_rao(int(self.rao + other.rao))
    +        if isinstance(other, Balance):
    +            _check_currencies(self, other)
    +            return Balance.from_rao(int(self.rao + other.rao)).set_unit(self.netuid)
             else:
                 try:
                     # Attempt to cast to int from rao
    -                return Balance.from_rao(int(self.rao + other))
    +                return Balance.from_rao(int(self.rao + other)).set_unit(self.netuid)
                 except (ValueError, TypeError):
                     raise NotImplementedError("Unsupported type")
     
         def __radd__(self, other: Union[int, float, "Balance"]):
             try:
    +            if isinstance(other, Balance):
    +                _check_currencies(self, other)
                 return self + other
             except TypeError:
                 raise NotImplementedError("Unsupported type")
     
         def __sub__(self, other: Union[int, float, "Balance"]):
             try:
    +            if isinstance(other, Balance):
    +                _check_currencies(self, other)
                 return self + -other
             except TypeError:
                 raise NotImplementedError("Unsupported type")
     
         def __rsub__(self, other: Union[int, float, "Balance"]):
             try:
    +            if isinstance(other, Balance):
    +                _check_currencies(self, other)
                 return -self + other
             except TypeError:
                 raise NotImplementedError("Unsupported type")
     
         def __mul__(self, other: Union[int, float, "Balance"]):
    -        if hasattr(other, "rao"):
    -            return Balance.from_rao(int(self.rao * other.rao))
    +        if isinstance(other, Balance):
    +            _check_currencies(self, other)
    +            return Balance.from_rao(int(self.rao * other.rao)).set_unit(self.netuid)
             else:
                 try:
                     # Attempt to cast to int from rao
    -                return Balance.from_rao(int(self.rao * other))
    +                return Balance.from_rao(int(self.rao * other)).set_unit(self.netuid)
                 except (ValueError, TypeError):
                     raise NotImplementedError("Unsupported type")
     
         def __rmul__(self, other: Union[int, float, "Balance"]):
    +        if isinstance(other, Balance):
    +            _check_currencies(self, other)
             return self * other
     
         def __truediv__(self, other: Union[int, float, "Balance"]):
    -        if hasattr(other, "rao"):
    -            return Balance.from_rao(int(self.rao / other.rao))
    +        if isinstance(other, Balance):
    +            _check_currencies(self, other)
    +            return Balance.from_rao(int(self.rao / other.rao)).set_unit(self.netuid)
             else:
                 try:
                     # Attempt to cast to int from rao
    -                return Balance.from_rao(int(self.rao / other))
    +                return Balance.from_rao(int(self.rao / other)).set_unit(self.netuid)
                 except (ValueError, TypeError):
                     raise NotImplementedError("Unsupported type")
     
         def __rtruediv__(self, other: Union[int, float, "Balance"]):
    -        if hasattr(other, "rao"):
    -            return Balance.from_rao(int(other.rao / self.rao))
    +        if isinstance(other, Balance):
    +            _check_currencies(self, other)
    +            return Balance.from_rao(int(other.rao / self.rao)).set_unit(self.netuid)
             else:
                 try:
                     # Attempt to cast to int from rao
    -                return Balance.from_rao(int(other / self.rao))
    +                return Balance.from_rao(int(other / self.rao)).set_unit(self.netuid)
                 except (ValueError, TypeError):
                     raise NotImplementedError("Unsupported type")
     
         def __floordiv__(self, other: Union[int, float, "Balance"]):
    -        if hasattr(other, "rao"):
    -            return Balance.from_rao(int(self.tao // other.tao))
    +        if isinstance(other, Balance):
    +            _check_currencies(self, other)
    +            return Balance.from_rao(int(self.tao // other.tao)).set_unit(self.netuid)
             else:
                 try:
                     # Attempt to cast to int from rao
    -                return Balance.from_rao(int(self.rao // other))
    +                return Balance.from_rao(int(self.rao // other)).set_unit(self.netuid)
                 except (ValueError, TypeError):
                     raise NotImplementedError("Unsupported type")
     
         def __rfloordiv__(self, other: Union[int, float, "Balance"]):
    -        if hasattr(other, "rao"):
    -            return Balance.from_rao(int(other.rao // self.rao))
    +        if isinstance(other, Balance):
    +            _check_currencies(self, other)
    +            return Balance.from_rao(int(other.rao // self.rao)).set_unit(self.netuid)
             else:
                 try:
                     # Attempt to cast to int from rao
    -                return Balance.from_rao(int(other // self.rao))
    +                return Balance.from_rao(int(other // self.rao)).set_unit(self.netuid)
                 except (ValueError, TypeError):
                     raise NotImplementedError("Unsupported type")
     
    @@ -543,18 +604,18 @@ 

    Source code for bittensor.utils.balance

             return bool(self.rao)
     
         def __neg__(self):
    -        return Balance.from_rao(-self.rao)
    +        return Balance.from_rao(-self.rao).set_unit(self.netuid)
     
         def __pos__(self):
    -        return Balance.from_rao(self.rao)
    +        return Balance.from_rao(self.rao).set_unit(self.netuid)
     
         def __abs__(self):
    -        return Balance.from_rao(abs(self.rao))
    +        return Balance.from_rao(abs(self.rao)).set_unit(self.netuid)
     
     
    [docs] @staticmethod - def from_float(amount: float, netuid: int = 0): + def from_float(amount: float, netuid: int = 0) -> "Balance": """ Given tao, return :func:`Balance` object with rao(``int``) and tao(``float``), where rao = int(tao*pow(10,9)) Args: @@ -571,7 +632,7 @@

    Source code for bittensor.utils.balance

     
    [docs] @staticmethod - def from_tao(amount: float, netuid: int = 0): + def from_tao(amount: float, netuid: int = 0) -> "Balance": """ Given tao, return Balance object with rao(``int``) and tao(``float``), where rao = int(tao*pow(10,9)) @@ -589,7 +650,7 @@

    Source code for bittensor.utils.balance

     
    [docs] @staticmethod - def from_rao(amount: int, netuid: int = 0): + def from_rao(amount: int, netuid: int = 0) -> "Balance": """ Given rao, return Balance object with rao(``int``) and tao(``float``), where rao = int(tao*pow(10,9)) @@ -606,14 +667,14 @@

    Source code for bittensor.utils.balance

     
    [docs] @staticmethod - def get_unit(netuid: int): - base = len(units) + def get_unit(netuid: int) -> str: + base = len(UNITS) if netuid < base: - return units[netuid] + return UNITS[netuid] else: result = "" while netuid > 0: - result = units[netuid % base] + result + result = UNITS[netuid % base] + result netuid //= base return result
    @@ -621,6 +682,7 @@

    Source code for bittensor.utils.balance

     
    [docs] def set_unit(self, netuid: int): + self.netuid = netuid self.unit = Balance.get_unit(netuid) self.rao_unit = Balance.get_unit(netuid) return self
    @@ -663,497 +725,472 @@

    Source code for bittensor.utils.balance

     
     
     
    -units = [
    -    # Greek Alphabet (0-24)
    -    "\u03c4",  # τ (tau, 0)
    -    "\u03b1",  # α (alpha, 1)
    -    "\u03b2",  # β (beta, 2)
    -    "\u03b3",  # γ (gamma, 3)
    -    "\u03b4",  # δ (delta, 4)
    -    "\u03b5",  # ε (epsilon, 5)
    -    "\u03b6",  # ζ (zeta, 6)
    -    "\u03b7",  # η (eta, 7)
    -    "\u03b8",  # θ (theta, 8)
    -    "\u03b9",  # ι (iota, 9)
    -    "\u03ba",  # κ (kappa, 10)
    -    "\u03bb",  # λ (lambda, 11)
    -    "\u03bc",  # μ (mu, 12)
    -    "\u03bd",  # ν (nu, 13)
    -    "\u03be",  # ξ (xi, 14)
    -    "\u03bf",  # ο (omicron, 15)
    -    "\u03c0",  # π (pi, 16)
    -    "\u03c1",  # ρ (rho, 17)
    -    "\u03c3",  # σ (sigma, 18)
    -    "t",  # t (tau, 19)
    -    "\u03c5",  # υ (upsilon, 20)
    -    "\u03c6",  # φ (phi, 21)
    -    "\u03c7",  # χ (chi, 22)
    -    "\u03c8",  # ψ (psi, 23)
    -    "\u03c9",  # ω (omega, 24)
    -    # Hebrew Alphabet (25-51)
    -    "\u05d0",  # א (aleph, 25)
    -    "\u05d1",  # ב (bet, 26)
    -    "\u05d2",  # ג (gimel, 27)
    -    "\u05d3",  # ד (dalet, 28)
    -    "\u05d4",  # ה (he, 29)
    -    "\u05d5",  # ו (vav, 30)
    -    "\u05d6",  # ז (zayin, 31)
    -    "\u05d7",  # ח (het, 32)
    -    "\u05d8",  # ט (tet, 33)
    -    "\u05d9",  # י (yod, 34)
    -    "\u05da",  # ך (final kaf, 35)
    -    "\u05db",  # כ (kaf, 36)
    -    "\u05dc",  # ל (lamed, 37)
    -    "\u05dd",  # ם (final mem, 38)
    -    "\u05de",  # מ (mem, 39)
    -    "\u05df",  # ן (final nun, 40)
    -    "\u05e0",  # נ (nun, 41)
    -    "\u05e1",  # ס (samekh, 42)
    -    "\u05e2",  # ע (ayin, 43)
    -    "\u05e3",  # ף (final pe, 44)
    -    "\u05e4",  # פ (pe, 45)
    -    "\u05e5",  # ץ (final tsadi, 46)
    -    "\u05e6",  # צ (tsadi, 47)
    -    "\u05e7",  # ק (qof, 48)
    -    "\u05e8",  # ר (resh, 49)
    -    "\u05e9",  # ש (shin, 50)
    -    "\u05ea",  # ת (tav, 51)
    -    # Arabic Alphabet (52-81)
    -    "\u0627",  # ا (alif, 52)
    -    "\u0628",  # ب (ba, 53)
    -    "\u062a",  # ت (ta, 54)
    -    "\u062b",  # ث (tha, 55)
    -    "\u062c",  # ج (jeem, 56)
    -    "\u062d",  # ح (ha, 57)
    -    "\u062e",  # خ (kha, 58)
    -    "\u062f",  # د (dal, 59)
    -    "\u0630",  # ذ (dhal, 60)
    -    "\u0631",  # ر (ra, 61)
    -    "\u0632",  # ز (zay, 62)
    -    "\u0633",  # س (seen, 63)
    -    "\u0634",  # ش (sheen, 64)
    -    "\u0635",  # ص (sad, 65)
    -    "\u0636",  # ض (dad, 66)
    -    "\u0637",  # ط (ta, 67)
    -    "\u0638",  # ظ (dha, 68)
    -    "\u0639",  # ع (ain, 69)
    -    "\u063a",  # غ (ghain, 70)
    -    "\u0641",  # ف (fa, 71)
    -    "\u0642",  # ق (qaf, 72)
    -    "\u0643",  # ك (kaf, 73)
    -    "\u0644",  # ل (lam, 74)
    -    "\u0645",  # م (meem, 75)
    -    "\u0646",  # ن (noon, 76)
    -    "\u0647",  # ه (ha, 77)
    -    "\u0648",  # و (waw, 78)
    -    "\u064a",  # ي (ya, 79)
    -    "\u0649",  # ى (alef maksura, 80)
    -    "\u064a",  # ي (ya, 81)
    -    # Runic Alphabet (82-90)
    -    "\u16a0",  # ᚠ (fehu, 82)
    -    "\u16a2",  # ᚢ (uruz, 83)
    -    "\u16a6",  # ᚦ (thurisaz, 84)
    -    "\u16a8",  # ᚨ (ansuz, 85)
    -    "\u16b1",  # ᚱ (raidho, 86)
    -    "\u16b3",  # ᚲ (kaunan, 87)
    -    "\u16c7",  # ᛇ (eihwaz, 88)
    -    "\u16c9",  # ᛉ (algiz, 89)
    -    "\u16d2",  # ᛒ (berkanan, 90)
    -    # Ogham Alphabet (91-97)
    -    "\u1680",  #   (Space, 91)
    -    "\u1681",  # ᚁ (Beith, 92)
    -    "\u1682",  # ᚂ (Luis, 93)
    -    "\u1683",  # ᚃ (Fearn, 94)
    -    "\u1684",  # ᚄ (Sail, 95)
    -    "\u1685",  # ᚅ (Nion, 96)
    -    "\u169b",  # ᚛ (Forfeda, 97)
    -    # Georgian Alphabet (98-103)
    -    "\u10d0",  # ა (ani, 98)
    -    "\u10d1",  # ბ (bani, 99)
    -    "\u10d2",  # გ (gani, 100)
    -    "\u10d3",  # დ (doni, 101)
    -    "\u10d4",  # ე (eni, 102)
    -    "\u10d5",  # ვ (vini, 103)
    -    # Armenian Alphabet (104-110)
    -    "\u0531",  # Ա (Ayp, 104)
    -    "\u0532",  # Բ (Ben, 105)
    -    "\u0533",  # Գ (Gim, 106)
    -    "\u0534",  # Դ (Da, 107)
    -    "\u0535",  # Ե (Ech, 108)
    -    "\u0536",  # Զ (Za, 109)
    -    "\u055e",  # ՞ (Question mark, 110)
    -    # Cyrillic Alphabet (111-116)
    -    "\u0400",  # Ѐ (Ie with grave, 111)
    -    "\u0401",  # Ё (Io, 112)
    -    "\u0402",  # Ђ (Dje, 113)
    -    "\u0403",  # Ѓ (Gje, 114)
    -    "\u0404",  # Є (Ukrainian Ie, 115)
    -    "\u0405",  # Ѕ (Dze, 116)
    -    # Coptic Alphabet (117-122)
    -    "\u2c80",  # Ⲁ (Alfa, 117)
    -    "\u2c81",  # ⲁ (Small Alfa, 118)
    -    "\u2c82",  # Ⲃ (Vida, 119)
    -    "\u2c83",  # ⲃ (Small Vida, 120)
    -    "\u2c84",  # Ⲅ (Gamma, 121)
    -    "\u2c85",  # ⲅ (Small Gamma, 122)
    -    # Brahmi Script (123-127)
    -    "\U00011000",  # 𑀀 (A, 123)
    -    "\U00011001",  # 𑀁 (Aa, 124)
    -    "\U00011002",  # 𑀂 (I, 125)
    -    "\U00011003",  # 𑀃 (Ii, 126)
    -    "\U00011005",  # 𑀅 (U, 127)
    -    # Tifinagh Alphabet (128-133)
    -    "\u2d30",  # ⴰ (Ya, 128)
    -    "\u2d31",  # ⴱ (Yab, 129)
    -    "\u2d32",  # ⴲ (Yabh, 130)
    -    "\u2d33",  # ⴳ (Yag, 131)
    -    "\u2d34",  # ⴴ (Yagh, 132)
    -    "\u2d35",  # ⴵ (Yaj, 133)
    -    # Glagolitic Alphabet (134-166)
    -    "\u2c00",  # Ⰰ (Az, 134)
    -    "\u2c01",  # Ⰱ (Buky, 135)
    -    "\u2c02",  # Ⰲ (Vede, 136)
    -    "\u2c03",  # Ⰳ (Glagoli, 137)
    -    "\u2c04",  # Ⰴ (Dobro, 138)
    -    "\u2c05",  # Ⰵ (Yest, 139)
    -    "\u2c06",  # Ⰶ (Zhivete, 140)
    -    "\u2c07",  # Ⰷ (Zemlja, 141)
    -    "\u2c08",  # Ⰸ (Izhe, 142)
    -    "\u2c09",  # Ⰹ (Initial Izhe, 143)
    -    "\u2c0a",  # Ⰺ (I, 144)
    -    "\u2c0b",  # Ⰻ (Djerv, 145)
    -    "\u2c0c",  # Ⰼ (Kako, 146)
    -    "\u2c0d",  # Ⰽ (Ljudije, 147)
    -    "\u2c0e",  # Ⰾ (Myse, 148)
    -    "\u2c0f",  # Ⰿ (Nash, 149)
    -    "\u2c10",  # Ⱀ (On, 150)
    -    "\u2c11",  # Ⱁ (Pokoj, 151)
    -    "\u2c12",  # Ⱂ (Rtsy, 152)
    -    "\u2c13",  # Ⱃ (Slovo, 153)
    -    "\u2c14",  # Ⱄ (Tvrido, 154)
    -    "\u2c15",  # Ⱅ (Uku, 155)
    -    "\u2c16",  # Ⱆ (Fert, 156)
    -    "\u2c17",  # Ⱇ (Xrivi, 157)
    -    "\u2c18",  # Ⱈ (Ot, 158)
    -    "\u2c19",  # Ⱉ (Cy, 159)
    -    "\u2c1a",  # Ⱊ (Shcha, 160)
    -    "\u2c1b",  # Ⱋ (Er, 161)
    -    "\u2c1c",  # Ⱌ (Yeru, 162)
    -    "\u2c1d",  # Ⱍ (Small Yer, 163)
    -    "\u2c1e",  # Ⱎ (Yo, 164)
    -    "\u2c1f",  # Ⱏ (Yu, 165)
    -    "\u2c20",  # Ⱐ (Ja, 166)
    -    # Thai Alphabet (167-210)
    -    "\u0e01",  # ก (Ko Kai, 167)
    -    "\u0e02",  # ข (Kho Khai, 168)
    -    "\u0e03",  # ฃ (Kho Khuat, 169)
    -    "\u0e04",  # ค (Kho Khon, 170)
    -    "\u0e05",  # ฅ (Kho Rakhang, 171)
    -    "\u0e06",  # ฆ (Kho Khwai, 172)
    -    "\u0e07",  # ง (Ngo Ngu, 173)
    -    "\u0e08",  # จ (Cho Chan, 174)
    -    "\u0e09",  # ฉ (Cho Ching, 175)
    -    "\u0e0a",  # ช (Cho Chang, 176)
    -    "\u0e0b",  # ซ (So So, 177)
    -    "\u0e0c",  # ฌ (Cho Choe, 178)
    -    "\u0e0d",  # ญ (Yo Ying, 179)
    -    "\u0e0e",  # ฎ (Do Chada, 180)
    -    "\u0e0f",  # ฏ (To Patak, 181)
    -    "\u0e10",  # ฐ (Tho Than, 182)
    -    "\u0e11",  # ฑ (Tho Nangmontho, 183)
    -    "\u0e12",  # ฒ (Tho Phuthao, 184)
    -    "\u0e13",  # ณ (No Nen, 185)
    -    "\u0e14",  # ด (Do Dek, 186)
    -    "\u0e15",  # ต (To Tao, 187)
    -    "\u0e16",  # ถ (Tho Thung, 188)
    -    "\u0e17",  # ท (Tho Thahan, 189)
    -    "\u0e18",  # ธ (Tho Thong, 190)
    -    "\u0e19",  # น (No Nu, 191)
    -    "\u0e1a",  # บ (Bo Baimai, 192)
    -    "\u0e1b",  # ป (Po Pla, 193)
    -    "\u0e1c",  # ผ (Pho Phung, 194)
    -    "\u0e1d",  # ฝ (Fo Fa, 195)
    -    "\u0e1e",  # พ (Pho Phan, 196)
    -    "\u0e1f",  # ฟ (Fo Fan, 197)
    -    "\u0e20",  # ภ (Pho Samphao, 198)
    -    "\u0e21",  # ม (Mo Ma, 199)
    -    "\u0e22",  # ย (Yo Yak, 200)
    -    "\u0e23",  # ร (Ro Rua, 201)
    -    "\u0e25",  # ล (Lo Ling, 202)
    -    "\u0e27",  # ว (Wo Waen, 203)
    -    "\u0e28",  # ศ (So Sala, 204)
    -    "\u0e29",  # ษ (So Rusi, 205)
    -    "\u0e2a",  # ส (So Sua, 206)
    -    "\u0e2b",  # ห (Ho Hip, 207)
    -    "\u0e2c",  # ฬ (Lo Chula, 208)
    -    "\u0e2d",  # อ (O Ang, 209)
    -    "\u0e2e",  # ฮ (Ho Nokhuk, 210)
    -    # Hangul Consonants (211-224)
    -    "\u1100",  # ㄱ (Giyeok, 211)
    -    "\u1101",  # ㄴ (Nieun, 212)
    -    "\u1102",  # ㄷ (Digeut, 213)
    -    "\u1103",  # ㄹ (Rieul, 214)
    -    "\u1104",  # ㅁ (Mieum, 215)
    -    "\u1105",  # ㅂ (Bieup, 216)
    -    "\u1106",  # ㅅ (Siot, 217)
    -    "\u1107",  # ㅇ (Ieung, 218)
    -    "\u1108",  # ㅈ (Jieut, 219)
    -    "\u1109",  # ㅊ (Chieut, 220)
    -    "\u110a",  # ㅋ (Kieuk, 221)
    -    "\u110b",  # ㅌ (Tieut, 222)
    -    "\u110c",  # ㅍ (Pieup, 223)
    -    "\u110d",  # ㅎ (Hieut, 224)
    -    # Hangul Vowels (225-245)
    -    "\u1161",  # ㅏ (A, 225)
    -    "\u1162",  # ㅐ (Ae, 226)
    -    "\u1163",  # ㅑ (Ya, 227)
    -    "\u1164",  # ㅒ (Yae, 228)
    -    "\u1165",  # ㅓ (Eo, 229)
    -    "\u1166",  # ㅔ (E, 230)
    -    "\u1167",  # ㅕ (Yeo, 231)
    -    "\u1168",  # ㅖ (Ye, 232)
    -    "\u1169",  # ㅗ (O, 233)
    -    "\u116a",  # ㅘ (Wa, 234)
    -    "\u116b",  # ㅙ (Wae, 235)
    -    "\u116c",  # ㅚ (Oe, 236)
    -    "\u116d",  # ㅛ (Yo, 237)
    -    "\u116e",  # ㅜ (U, 238)
    -    "\u116f",  # ㅝ (Weo, 239)
    -    "\u1170",  # ㅞ (We, 240)
    -    "\u1171",  # ㅟ (Wi, 241)
    -    "\u1172",  # ㅠ (Yu, 242)
    -    "\u1173",  # ㅡ (Eu, 243)
    -    "\u1174",  # ㅢ (Ui, 244)
    -    "\u1175",  # ㅣ (I, 245)
    -    # Ethiopic Alphabet (246-274)
    -    "\u12a0",  # አ (Glottal A, 246)
    -    "\u12a1",  # ኡ (Glottal U, 247)
    -    "\u12a2",  # ኢ (Glottal I, 248)
    -    "\u12a3",  # ኣ (Glottal Aa, 249)
    -    "\u12a4",  # ኤ (Glottal E, 250)
    -    "\u12a5",  # እ (Glottal Ie, 251)
    -    "\u12a6",  # ኦ (Glottal O, 252)
    -    "\u12a7",  # ኧ (Glottal Wa, 253)
    -    "\u12c8",  # ወ (Wa, 254)
    -    "\u12c9",  # ዉ (Wu, 255)
    -    "\u12ca",  # ዊ (Wi, 256)
    -    "\u12cb",  # ዋ (Waa, 257)
    -    "\u12cc",  # ዌ (We, 258)
    -    "\u12cd",  # ው (Wye, 259)
    -    "\u12ce",  # ዎ (Wo, 260)
    -    "\u12b0",  # ኰ (Ko, 261)
    -    "\u12b1",  # ኱ (Ku, 262)
    -    "\u12b2",  # ኲ (Ki, 263)
    -    "\u12b3",  # ኳ (Kua, 264)
    -    "\u12b4",  # ኴ (Ke, 265)
    -    "\u12b5",  # ኵ (Kwe, 266)
    -    "\u12b6",  # ኶ (Ko, 267)
    -    "\u12a0",  # ጐ (Go, 268)
    -    "\u12a1",  # ጑ (Gu, 269)
    -    "\u12a2",  # ጒ (Gi, 270)
    -    "\u12a3",  # መ (Gua, 271)
    -    "\u12a4",  # ጔ (Ge, 272)
    -    "\u12a5",  # ጕ (Gwe, 273)
    -    "\u12a6",  # ጖ (Go, 274)
    -    # Devanagari Alphabet (275-318)
    -    "\u0905",  # अ (A, 275)
    -    "\u0906",  # आ (Aa, 276)
    -    "\u0907",  # इ (I, 277)
    -    "\u0908",  # ई (Ii, 278)
    -    "\u0909",  # उ (U, 279)
    -    "\u090a",  # ऊ (Uu, 280)
    -    "\u090b",  # ऋ (R, 281)
    -    "\u090f",  # ए (E, 282)
    -    "\u0910",  # ऐ (Ai, 283)
    -    "\u0913",  # ओ (O, 284)
    -    "\u0914",  # औ (Au, 285)
    -    "\u0915",  # क (Ka, 286)
    -    "\u0916",  # ख (Kha, 287)
    -    "\u0917",  # ग (Ga, 288)
    -    "\u0918",  # घ (Gha, 289)
    -    "\u0919",  # ङ (Nga, 290)
    -    "\u091a",  # च (Cha, 291)
    -    "\u091b",  # छ (Chha, 292)
    -    "\u091c",  # ज (Ja, 293)
    -    "\u091d",  # झ (Jha, 294)
    -    "\u091e",  # ञ (Nya, 295)
    -    "\u091f",  # ट (Ta, 296)
    -    "\u0920",  # ठ (Tha, 297)
    -    "\u0921",  # ड (Da, 298)
    -    "\u0922",  # ढ (Dha, 299)
    -    "\u0923",  # ण (Na, 300)
    -    "\u0924",  # त (Ta, 301)
    -    "\u0925",  # थ (Tha, 302)
    -    "\u0926",  # द (Da, 303)
    -    "\u0927",  # ध (Dha, 304)
    -    "\u0928",  # न (Na, 305)
    -    "\u092a",  # प (Pa, 306)
    -    "\u092b",  # फ (Pha, 307)
    -    "\u092c",  # ब (Ba, 308)
    -    "\u092d",  # भ (Bha, 309)
    -    "\u092e",  # म (Ma, 310)
    -    "\u092f",  # य (Ya, 311)
    -    "\u0930",  # र (Ra, 312)
    -    "\u0932",  # ल (La, 313)
    -    "\u0935",  # व (Va, 314)
    -    "\u0936",  # श (Sha, 315)
    -    "\u0937",  # ष (Ssa, 316)
    -    "\u0938",  # स (Sa, 317)
    -    "\u0939",  # ह (Ha, 318)
    -    # Katakana Alphabet (319-364)
    -    "\u30a2",  # ア (A, 319)
    -    "\u30a4",  # イ (I, 320)
    -    "\u30a6",  # ウ (U, 321)
    -    "\u30a8",  # エ (E, 322)
    -    "\u30aa",  # オ (O, 323)
    -    "\u30ab",  # カ (Ka, 324)
    -    "\u30ad",  # キ (Ki, 325)
    -    "\u30af",  # ク (Ku, 326)
    -    "\u30b1",  # ケ (Ke, 327)
    -    "\u30b3",  # コ (Ko, 328)
    -    "\u30b5",  # サ (Sa, 329)
    -    "\u30b7",  # シ (Shi, 330)
    -    "\u30b9",  # ス (Su, 331)
    -    "\u30bb",  # セ (Se, 332)
    -    "\u30bd",  # ソ (So, 333)
    -    "\u30bf",  # タ (Ta, 334)
    -    "\u30c1",  # チ (Chi, 335)
    -    "\u30c4",  # ツ (Tsu, 336)
    -    "\u30c6",  # テ (Te, 337)
    -    "\u30c8",  # ト (To, 338)
    -    "\u30ca",  # ナ (Na, 339)
    -    "\u30cb",  # ニ (Ni, 340)
    -    "\u30cc",  # ヌ (Nu, 341)
    -    "\u30cd",  # ネ (Ne, 342)
    -    "\u30ce",  # ノ (No, 343)
    -    "\u30cf",  # ハ (Ha, 344)
    -    "\u30d2",  # ヒ (Hi, 345)
    -    "\u30d5",  # フ (Fu, 346)
    -    "\u30d8",  # ヘ (He, 347)
    -    "\u30db",  # ホ (Ho, 348)
    -    "\u30de",  # マ (Ma, 349)
    -    "\u30df",  # ミ (Mi, 350)
    -    "\u30e0",  # ム (Mu, 351)
    -    "\u30e1",  # メ (Me, 352)
    -    "\u30e2",  # モ (Mo, 353)
    -    "\u30e4",  # ヤ (Ya, 354)
    -    "\u30e6",  # ユ (Yu, 355)
    -    "\u30e8",  # ヨ (Yo, 356)
    -    "\u30e9",  # ラ (Ra, 357)
    -    "\u30ea",  # リ (Ri, 358)
    -    "\u30eb",  # ル (Ru, 359)
    -    "\u30ec",  # レ (Re, 360)
    -    "\u30ed",  # ロ (Ro, 361)
    -    "\u30ef",  # ワ (Wa, 362)
    -    "\u30f2",  # ヲ (Wo, 363)
    -    "\u30f3",  # ン (N, 364)
    -    # Tifinagh Alphabet (365-400)
    -    "\u2d30",  # ⴰ (Ya, 365)
    -    "\u2d31",  # ⴱ (Yab, 366)
    -    "\u2d32",  # ⴲ (Yabh, 367)
    -    "\u2d33",  # ⴳ (Yag, 368)
    -    "\u2d34",  # ⴴ (Yagh, 369)
    -    "\u2d35",  # ⴵ (Yaj, 370)
    -    "\u2d36",  # ⴶ (Yach, 371)
    -    "\u2d37",  # ⴷ (Yad, 372)
    -    "\u2d38",  # ⴸ (Yadh, 373)
    -    "\u2d39",  # ⴹ (Yadh, emphatic, 374)
    -    "\u2d3a",  # ⴺ (Yaz, 375)
    -    "\u2d3b",  # ⴻ (Yazh, 376)
    -    "\u2d3c",  # ⴼ (Yaf, 377)
    -    "\u2d3d",  # ⴽ (Yak, 378)
    -    "\u2d3e",  # ⴾ (Yak, variant, 379)
    -    "\u2d3f",  # ⴿ (Yaq, 380)
    -    "\u2d40",  # ⵀ (Yah, 381)
    -    "\u2d41",  # ⵁ (Yahh, 382)
    -    "\u2d42",  # ⵂ (Yahl, 383)
    -    "\u2d43",  # ⵃ (Yahm, 384)
    -    "\u2d44",  # ⵄ (Yayn, 385)
    -    "\u2d45",  # ⵅ (Yakh, 386)
    -    "\u2d46",  # ⵆ (Yakl, 387)
    -    "\u2d47",  # ⵇ (Yahq, 388)
    -    "\u2d48",  # ⵈ (Yash, 389)
    -    "\u2d49",  # ⵉ (Yi, 390)
    -    "\u2d4a",  # ⵊ (Yij, 391)
    -    "\u2d4b",  # ⵋ (Yizh, 392)
    -    "\u2d4c",  # ⵌ (Yink, 393)
    -    "\u2d4d",  # ⵍ (Yal, 394)
    -    "\u2d4e",  # ⵎ (Yam, 395)
    -    "\u2d4f",  # ⵏ (Yan, 396)
    -    "\u2d50",  # ⵐ (Yang, 397)
    -    "\u2d51",  # ⵑ (Yany, 398)
    -    "\u2d52",  # ⵒ (Yap, 399)
    -    "\u2d53",  # ⵓ (Yu, 400)
    -    # Sinhala Alphabet (401-444)
    -    "\u0d85",  # අ (A, 401)
    -    "\u0d86",  # ආ (Aa, 402)
    -    "\u0d87",  # ඉ (I, 403)
    -    "\u0d88",  # ඊ (Ii, 404)
    -    "\u0d89",  # උ (U, 405)
    -    "\u0d8a",  # ඌ (Uu, 406)
    -    "\u0d8b",  # ඍ (R, 407)
    -    "\u0d8c",  # ඎ (Rr, 408)
    -    "\u0d8f",  # ඏ (L, 409)
    -    "\u0d90",  # ඐ (Ll, 410)
    -    "\u0d91",  # එ (E, 411)
    -    "\u0d92",  # ඒ (Ee, 412)
    -    "\u0d93",  # ඓ (Ai, 413)
    -    "\u0d94",  # ඔ (O, 414)
    -    "\u0d95",  # ඕ (Oo, 415)
    -    "\u0d96",  # ඖ (Au, 416)
    -    "\u0d9a",  # ක (Ka, 417)
    -    "\u0d9b",  # ඛ (Kha, 418)
    -    "\u0d9c",  # ග (Ga, 419)
    -    "\u0d9d",  # ඝ (Gha, 420)
    -    "\u0d9e",  # ඞ (Nga, 421)
    -    "\u0d9f",  # ච (Cha, 422)
    -    "\u0da0",  # ඡ (Chha, 423)
    -    "\u0da1",  # ජ (Ja, 424)
    -    "\u0da2",  # ඣ (Jha, 425)
    -    "\u0da3",  # ඤ (Nya, 426)
    -    "\u0da4",  # ට (Ta, 427)
    -    "\u0da5",  # ඥ (Tha, 428)
    -    "\u0da6",  # ඦ (Da, 429)
    -    "\u0da7",  # ට (Dha, 430)
    -    "\u0da8",  # ඨ (Na, 431)
    -    "\u0daa",  # ඪ (Pa, 432)
    -    "\u0dab",  # ණ (Pha, 433)
    -    "\u0dac",  # ඬ (Ba, 434)
    -    "\u0dad",  # ත (Bha, 435)
    -    "\u0dae",  # ථ (Ma, 436)
    -    "\u0daf",  # ද (Ya, 437)
    -    "\u0db0",  # ධ (Ra, 438)
    -    "\u0db1",  # ඲ (La, 439)
    -    "\u0db2",  # ඳ (Va, 440)
    -    "\u0db3",  # ප (Sha, 441)
    -    "\u0db4",  # ඵ (Ssa, 442)
    -    "\u0db5",  # බ (Sa, 443)
    -    "\u0db6",  # භ (Ha, 444)
    +# lowercase is added for backwards compatibility to not break API
    +units = UNITS = [
    +    chr(
    +        0x03C4
    +    ),  # τ Note: the subnet symbol for sn 0 is b"\xce\xa4" / Τ / Tau — however the currency/balance is τ (Tao)
    +    b"\xce\xb1".decode(),  # α (Alpha, 1)
    +    b"\xce\xb2".decode(),  # β (Beta, 2)
    +    b"\xce\xb3".decode(),  # γ (Gamma, 3)
    +    b"\xce\xb4".decode(),  # δ (Delta, 4)
    +    b"\xce\xb5".decode(),  # ε (Epsilon, 5)
    +    b"\xce\xb6".decode(),  # ζ (Zeta, 6)
    +    b"\xce\xb7".decode(),  # η (Eta, 7)
    +    b"\xce\xb8".decode(),  # θ (Theta, 8)
    +    b"\xce\xb9".decode(),  # ι (Iota, 9)
    +    b"\xce\xba".decode(),  # κ (Kappa, 10)
    +    b"\xce\xbb".decode(),  # λ (Lambda, 11)
    +    b"\xce\xbc".decode(),  # μ (Mu, 12)
    +    b"\xce\xbd".decode(),  # ν (Nu, 13)
    +    b"\xce\xbe".decode(),  # ξ (Xi, 14)
    +    b"\xce\xbf".decode(),  # ο (Omicron, 15)
    +    b"\xcf\x80".decode(),  # π (Pi, 16)
    +    b"\xcf\x81".decode(),  # ρ (Rho, 17)
    +    b"\xcf\x83".decode(),  # σ (Sigma, 18)
    +    "t",  # t (Tau, 19)
    +    b"\xcf\x85".decode(),  # υ (Upsilon, 20)
    +    b"\xcf\x86".decode(),  # φ (Phi, 21)
    +    b"\xcf\x87".decode(),  # χ (Chi, 22)
    +    b"\xcf\x88".decode(),  # ψ (Psi, 23)
    +    b"\xcf\x89".decode(),  # ω (Omega, 24)
    +    b"\xd7\x90".decode(),  # א (Aleph, 25)
    +    b"\xd7\x91".decode(),  # ב (Bet, 26)
    +    b"\xd7\x92".decode(),  # ג (Gimel, 27)
    +    b"\xd7\x93".decode(),  # ד (Dalet, 28)
    +    b"\xd7\x94".decode(),  # ה (He, 29)
    +    b"\xd7\x95".decode(),  # ו (Vav, 30)
    +    b"\xd7\x96".decode(),  # ז (Zayin, 31)
    +    b"\xd7\x97".decode(),  # ח (Het, 32)
    +    b"\xd7\x98".decode(),  # ט (Tet, 33)
    +    b"\xd7\x99".decode(),  # י (Yod, 34)
    +    b"\xd7\x9a".decode(),  # ך (Final Kaf, 35)
    +    b"\xd7\x9b".decode(),  # כ (Kaf, 36)
    +    b"\xd7\x9c".decode(),  # ל (Lamed, 37)
    +    b"\xd7\x9d".decode(),  # ם (Final Mem, 38)
    +    b"\xd7\x9e".decode(),  # מ (Mem, 39)
    +    b"\xd7\x9f".decode(),  # ן (Final Nun, 40)
    +    b"\xd7\xa0".decode(),  # נ (Nun, 41)
    +    b"\xd7\xa1".decode(),  # ס (Samekh, 42)
    +    b"\xd7\xa2".decode(),  # ע (Ayin, 43)
    +    b"\xd7\xa3".decode(),  # ף (Final Pe, 44)
    +    b"\xd7\xa4".decode(),  # פ (Pe, 45)
    +    b"\xd7\xa5".decode(),  # ץ (Final Tsadi, 46)
    +    b"\xd7\xa6".decode(),  # צ (Tsadi, 47)
    +    b"\xd7\xa7".decode(),  # ק (Qof, 48)
    +    b"\xd7\xa8".decode(),  # ר (Resh, 49)
    +    b"\xd7\xa9".decode(),  # ש (Shin, 50)
    +    b"\xd7\xaa".decode(),  # ת (Tav, 51)
    +    b"\xd8\xa7".decode(),  # ا (Alif, 52)
    +    b"\xd8\xa8".decode(),  # ب (Ba, 53)
    +    b"\xd8\xaa".decode(),  # ت (Ta, 54)
    +    b"\xd8\xab".decode(),  # ث (Tha, 55)
    +    b"\xd8\xac".decode(),  # ج (Jim, 56)
    +    b"\xd8\xad".decode(),  # ح (Ha, 57)
    +    b"\xd8\xae".decode(),  # خ (Kha, 58)
    +    b"\xd8\xaf".decode(),  # د (Dal, 59)
    +    b"\xd8\xb0".decode(),  # ذ (Dhal, 60)
    +    b"\xd8\xb1".decode(),  # ر (Ra, 61)
    +    b"\xd8\xb2".decode(),  # ز (Zay, 62)
    +    b"\xd8\xb3".decode(),  # س (Sin, 63)
    +    b"\xd8\xb4".decode(),  # ش (Shin, 64)
    +    b"\xd8\xb5".decode(),  # ص (Sad, 65)
    +    b"\xd8\xb6".decode(),  # ض (Dad, 66)
    +    b"\xd8\xb7".decode(),  # ط (Ta, 67)
    +    b"\xd8\xb8".decode(),  # ظ (Dha, 68)
    +    b"\xd8\xb9".decode(),  # ع (Ain, 69)
    +    b"\xd8\xba".decode(),  # غ (Ghayn, 70)
    +    b"\xd9\x81".decode(),  # ف (Fa, 71)
    +    b"\xd9\x82".decode(),  # ق (Qaf, 72)
    +    b"\xd9\x83".decode(),  # ك (Kaf, 73)
    +    b"\xd9\x84".decode(),  # ل (Lam, 74)
    +    b"\xd9\x85".decode(),  # م (Mim, 75)
    +    b"\xd9\x86".decode(),  # ن (Nun, 76)
    +    b"\xd9\x87".decode(),  # ه (Ha, 77)
    +    b"\xd9\x88".decode(),  # و (Waw, 78)
    +    b"\xd9\x8a".decode(),  # ي (Ya, 79)
    +    b"\xd9\x89".decode(),  # ى (Alef Maksura, 80)
    +    b"\xe1\x9a\xa0".decode(),  # ᚠ (Fehu, wealth, 81)
    +    b"\xe1\x9a\xa2".decode(),  # ᚢ (Uruz, strength, 82)
    +    b"\xe1\x9a\xa6".decode(),  # ᚦ (Thurisaz, giant, 83)
    +    b"\xe1\x9a\xa8".decode(),  # ᚨ (Ansuz, god, 84)
    +    b"\xe1\x9a\xb1".decode(),  # ᚱ (Raidho, ride, 85)
    +    b"\xe1\x9a\xb3".decode(),  # ᚲ (Kaunan, ulcer, 86)
    +    b"\xd0\xab".decode(),  # Ы (Cyrillic Yeru, 87)
    +    b"\xe1\x9b\x89".decode(),  # ᛉ (Algiz, protection, 88)
    +    b"\xe1\x9b\x92".decode(),  # ᛒ (Berkanan, birch, 89)
    +    b"\xe1\x9a\x80".decode(),  #   (Space, 90)
    +    b"\xe1\x9a\x81".decode(),  # ᚁ (Beith, birch, 91)
    +    b"\xe1\x9a\x82".decode(),  # ᚂ (Luis, rowan, 92)
    +    b"\xe1\x9a\x83".decode(),  # ᚃ (Fearn, alder, 93)
    +    b"\xe1\x9a\x84".decode(),  # ᚄ (Sail, willow, 94)
    +    b"\xe1\x9a\x85".decode(),  # ᚅ (Nion, ash, 95)
    +    b"\xe1\x9a\x9b".decode(),  # ᚛ (Forfeda, 96)
    +    b"\xe1\x83\x90".decode(),  # ა (Ani, 97)
    +    b"\xe1\x83\x91".decode(),  # ბ (Bani, 98)
    +    b"\xe1\x83\x92".decode(),  # გ (Gani, 99)
    +    b"\xe1\x83\x93".decode(),  # დ (Doni, 100)
    +    b"\xe1\x83\x94".decode(),  # ე (Eni, 101)
    +    b"\xe1\x83\x95".decode(),  # ვ (Vini, 102)
    +    b"\xd4\xb1".decode(),  # Ա (Ayp, 103)
    +    b"\xd4\xb2".decode(),  # Բ (Ben, 104)
    +    b"\xd4\xb3".decode(),  # Գ (Gim, 105)
    +    b"\xd4\xb4".decode(),  # Դ (Da, 106)
    +    b"\xd4\xb5".decode(),  # Ե (Ech, 107)
    +    b"\xd4\xb6".decode(),  # Զ (Za, 108)
    +    b"\xd5\x9e".decode(),  # ՞ (Question mark, 109)
    +    b"\xd0\x80".decode(),  # Ѐ (Ie with grave, 110)
    +    b"\xd0\x81".decode(),  # Ё (Io, 111)
    +    b"\xd0\x82".decode(),  # Ђ (Dje, 112)
    +    b"\xd0\x83".decode(),  # Ѓ (Gje, 113)
    +    b"\xd0\x84".decode(),  # Є (Ukrainian Ie, 114)
    +    b"\xd0\x85".decode(),  # Ѕ (Dze, 115)
    +    b"\xd1\x8a".decode(),  # Ъ (Hard sign, 116)
    +    b"\xe2\xb2\x80".decode(),  # Ⲁ (Alfa, 117)
    +    b"\xe2\xb2\x81".decode(),  # ⲁ (Small Alfa, 118)
    +    b"\xe2\xb2\x82".decode(),  # Ⲃ (Vida, 119)
    +    b"\xe2\xb2\x83".decode(),  # ⲃ (Small Vida, 120)
    +    b"\xe2\xb2\x84".decode(),  # Ⲅ (Gamma, 121)
    +    b"\xe2\xb2\x85".decode(),  # ⲅ (Small Gamma, 122)
    +    b"\xf0\x91\x80\x80".decode(),  # 𑀀 (A, 123)
    +    b"\xf0\x91\x80\x81".decode(),  # 𑀁 (Aa, 124)
    +    b"\xf0\x91\x80\x82".decode(),  # 𑀂 (I, 125)
    +    b"\xf0\x91\x80\x83".decode(),  # 𑀃 (Ii, 126)
    +    b"\xf0\x91\x80\x85".decode(),  # 𑀅 (U, 127)
    +    b"\xe0\xb6\xb1".decode(),  # ඲ (La, 128)
    +    b"\xe0\xb6\xb2".decode(),  # ඳ (Va, 129)
    +    b"\xe0\xb6\xb3".decode(),  # ප (Sha, 130)
    +    b"\xe0\xb6\xb4".decode(),  # ඵ (Ssa, 131)
    +    b"\xe0\xb6\xb5".decode(),  # බ (Sa, 132)
    +    b"\xe0\xb6\xb6".decode(),  # භ (Ha, 133)
    +    b"\xe2\xb0\x80".decode(),  # Ⰰ (Az, 134)
    +    b"\xe2\xb0\x81".decode(),  # Ⰱ (Buky, 135)
    +    b"\xe2\xb0\x82".decode(),  # Ⰲ (Vede, 136)
    +    b"\xe2\xb0\x83".decode(),  # Ⰳ (Glagoli, 137)
    +    b"\xe2\xb0\x84".decode(),  # Ⰴ (Dobro, 138)
    +    b"\xe2\xb0\x85".decode(),  # Ⰵ (Yest, 139)
    +    b"\xe2\xb0\x86".decode(),  # Ⰶ (Zhivete, 140)
    +    b"\xe2\xb0\x87".decode(),  # Ⰷ (Zemlja, 141)
    +    b"\xe2\xb0\x88".decode(),  # Ⰸ (Izhe, 142)
    +    b"\xe2\xb0\x89".decode(),  # Ⰹ (Initial Izhe, 143)
    +    b"\xe2\xb0\x8a".decode(),  # Ⰺ (I, 144)
    +    b"\xe2\xb0\x8b".decode(),  # Ⰻ (Djerv, 145)
    +    b"\xe2\xb0\x8c".decode(),  # Ⰼ (Kako, 146)
    +    b"\xe2\xb0\x8d".decode(),  # Ⰽ (Ljudije, 147)
    +    b"\xe2\xb0\x8e".decode(),  # Ⰾ (Myse, 148)
    +    b"\xe2\xb0\x8f".decode(),  # Ⰿ (Nash, 149)
    +    b"\xe2\xb0\x90".decode(),  # Ⱀ (On, 150)
    +    b"\xe2\xb0\x91".decode(),  # Ⱁ (Pokoj, 151)
    +    b"\xe2\xb0\x92".decode(),  # Ⱂ (Rtsy, 152)
    +    b"\xe2\xb0\x93".decode(),  # Ⱃ (Slovo, 153)
    +    b"\xe2\xb0\x94".decode(),  # Ⱄ (Tvrido, 154)
    +    b"\xe2\xb0\x95".decode(),  # Ⱅ (Uku, 155)
    +    b"\xe2\xb0\x96".decode(),  # Ⱆ (Fert, 156)
    +    b"\xe2\xb0\x97".decode(),  # Ⱇ (Xrivi, 157)
    +    b"\xe2\xb0\x98".decode(),  # Ⱈ (Ot, 158)
    +    b"\xe2\xb0\x99".decode(),  # Ⱉ (Cy, 159)
    +    b"\xe2\xb0\x9a".decode(),  # Ⱊ (Shcha, 160)
    +    b"\xe2\xb0\x9b".decode(),  # Ⱋ (Er, 161)
    +    b"\xe2\xb0\x9c".decode(),  # Ⱌ (Yeru, 162)
    +    b"\xe2\xb0\x9d".decode(),  # Ⱍ (Small Yer, 163)
    +    b"\xe2\xb0\x9e".decode(),  # Ⱎ (Yo, 164)
    +    b"\xe2\xb0\x9f".decode(),  # Ⱏ (Yu, 165)
    +    b"\xe2\xb0\xa0".decode(),  # Ⱐ (Ja, 166)
    +    b"\xe0\xb8\x81".decode(),  # ก (Ko Kai, 167)
    +    b"\xe0\xb8\x82".decode(),  # ข (Kho Khai, 168)
    +    b"\xe0\xb8\x83".decode(),  # ฃ (Kho Khuat, 169)
    +    b"\xe0\xb8\x84".decode(),  # ค (Kho Khon, 170)
    +    b"\xe0\xb8\x85".decode(),  # ฅ (Kho Rakhang, 171)
    +    b"\xe0\xb8\x86".decode(),  # ฆ (Kho Khwai, 172)
    +    b"\xe0\xb8\x87".decode(),  # ง (Ngo Ngu, 173)
    +    b"\xe0\xb8\x88".decode(),  # จ (Cho Chan, 174)
    +    b"\xe0\xb8\x89".decode(),  # ฉ (Cho Ching, 175)
    +    b"\xe0\xb8\x8a".decode(),  # ช (Cho Chang, 176)
    +    b"\xe0\xb8\x8b".decode(),  # ซ (So So, 177)
    +    b"\xe0\xb8\x8c".decode(),  # ฌ (Cho Choe, 178)
    +    b"\xe0\xb8\x8d".decode(),  # ญ (Yo Ying, 179)
    +    b"\xe0\xb8\x8e".decode(),  # ฎ (Do Chada, 180)
    +    b"\xe0\xb8\x8f".decode(),  # ฏ (To Patak, 181)
    +    b"\xe0\xb8\x90".decode(),  # ฐ (Tho Than, 182)
    +    b"\xe0\xb8\x91".decode(),  # ฑ (Tho Nangmontho, 183)
    +    b"\xe0\xb8\x92".decode(),  # ฒ (Tho Phuthao, 184)
    +    b"\xe0\xb8\x93".decode(),  # ณ (No Nen, 185)
    +    b"\xe0\xb8\x94".decode(),  # ด (Do Dek, 186)
    +    b"\xe0\xb8\x95".decode(),  # ต (To Tao, 187)
    +    b"\xe0\xb8\x96".decode(),  # ถ (Tho Thung, 188)
    +    b"\xe0\xb8\x97".decode(),  # ท (Tho Thahan, 189)
    +    b"\xe0\xb8\x98".decode(),  # ธ (Tho Thong, 190)
    +    b"\xe0\xb8\x99".decode(),  # น (No Nu, 191)
    +    b"\xe0\xb8\x9a".decode(),  # บ (Bo Baimai, 192)
    +    b"\xe0\xb8\x9b".decode(),  # ป (Po Pla, 193)
    +    b"\xe0\xb8\x9c".decode(),  # ผ (Pho Phung, 194)
    +    b"\xe0\xb8\x9d".decode(),  # ฝ (Fo Fa, 195)
    +    b"\xe0\xb8\x9e".decode(),  # พ (Pho Phan, 196)
    +    b"\xe0\xb8\x9f".decode(),  # ฟ (Fo Fan, 197)
    +    b"\xe0\xb8\xa0".decode(),  # ภ (Pho Samphao, 198)
    +    b"\xe0\xb8\xa1".decode(),  # ม (Mo Ma, 199)
    +    b"\xe0\xb8\xa2".decode(),  # ย (Yo Yak, 200)
    +    b"\xe0\xb8\xa3".decode(),  # ร (Ro Rua, 201)
    +    b"\xe0\xb8\xa5".decode(),  # ล (Lo Ling, 202)
    +    b"\xe0\xb8\xa7".decode(),  # ว (Wo Waen, 203)
    +    b"\xe0\xb8\xa8".decode(),  # ศ (So Sala, 204)
    +    b"\xe0\xb8\xa9".decode(),  # ษ (So Rusi, 205)
    +    b"\xe0\xb8\xaa".decode(),  # ส (So Sua, 206)
    +    b"\xe0\xb8\xab".decode(),  # ห (Ho Hip, 207)
    +    b"\xe0\xb8\xac".decode(),  # ฬ (Lo Chula, 208)
    +    b"\xe0\xb8\xad".decode(),  # อ (O Ang, 209)
    +    b"\xe0\xb8\xae".decode(),  # ฮ (Ho Nokhuk, 210)
    +    b"\xe1\x84\x80".decode(),  # ㄱ (Giyeok, 211)
    +    b"\xe1\x84\x81".decode(),  # ㄴ (Nieun, 212)
    +    b"\xe1\x84\x82".decode(),  # ㄷ (Digeut, 213)
    +    b"\xe1\x84\x83".decode(),  # ㄹ (Rieul, 214)
    +    b"\xe1\x84\x84".decode(),  # ㅁ (Mieum, 215)
    +    b"\xe1\x84\x85".decode(),  # ㅂ (Bieup, 216)
    +    b"\xe1\x84\x86".decode(),  # ㅅ (Siot, 217)
    +    b"\xe1\x84\x87".decode(),  # ㅇ (Ieung, 218)
    +    b"\xe1\x84\x88".decode(),  # ㅈ (Jieut, 219)
    +    b"\xe1\x84\x89".decode(),  # ㅊ (Chieut, 220)
    +    b"\xe1\x84\x8a".decode(),  # ㅋ (Kieuk, 221)
    +    b"\xe1\x84\x8b".decode(),  # ㅌ (Tieut, 222)
    +    b"\xe1\x84\x8c".decode(),  # ㅍ (Pieup, 223)
    +    b"\xe1\x84\x8d".decode(),  # ㅎ (Hieut, 224)
    +    b"\xe1\x85\xa1".decode(),  # ㅏ (A, 225)
    +    b"\xe1\x85\xa2".decode(),  # ㅐ (Ae, 226)
    +    b"\xe1\x85\xa3".decode(),  # ㅑ (Ya, 227)
    +    b"\xe1\x85\xa4".decode(),  # ㅒ (Yae, 228)
    +    b"\xe1\x85\xa5".decode(),  # ㅓ (Eo, 229)
    +    b"\xe1\x85\xa6".decode(),  # ㅔ (E, 230)
    +    b"\xe1\x85\xa7".decode(),  # ㅕ (Yeo, 231)
    +    b"\xe1\x85\xa8".decode(),  # ㅖ (Ye, 232)
    +    b"\xe1\x85\xa9".decode(),  # ㅗ (O, 233)
    +    b"\xe1\x85\xaa".decode(),  # ㅘ (Wa, 234)
    +    b"\xe1\x85\xab".decode(),  # ㅙ (Wae, 235)
    +    b"\xe1\x85\xac".decode(),  # ㅚ (Oe, 236)
    +    b"\xe1\x85\xad".decode(),  # ㅛ (Yo, 237)
    +    b"\xe1\x85\xae".decode(),  # ㅜ (U, 238)
    +    b"\xe1\x85\xaf".decode(),  # ㅝ (Weo, 239)
    +    b"\xe1\x85\xb0".decode(),  # ㅞ (We, 240)
    +    b"\xe1\x85\xb1".decode(),  # ㅟ (Wi, 241)
    +    b"\xe1\x85\xb2".decode(),  # ㅠ (Yu, 242)
    +    b"\xe1\x85\xb3".decode(),  # ㅡ (Eu, 243)
    +    b"\xe1\x85\xb4".decode(),  # ㅢ (Ui, 244)
    +    b"\xe1\x85\xb5".decode(),  # ㅣ (I, 245)
    +    b"\xe1\x8a\xa0".decode(),  # አ (Glottal A, 246)
    +    b"\xe1\x8a\xa1".decode(),  # ኡ (Glottal U, 247)
    +    b"\xe1\x8a\xa2".decode(),  # ኢ (Glottal I, 248)
    +    b"\xe1\x8a\xa3".decode(),  # ኣ (Glottal Aa, 249)
    +    b"\xe1\x8a\xa4".decode(),  # ኤ (Glottal E, 250)
    +    b"\xe1\x8a\xa5".decode(),  # እ (Glottal Ie, 251)
    +    b"\xe1\x8a\xa6".decode(),  # ኦ (Glottal O, 252)
    +    b"\xe1\x8a\xa7".decode(),  # ኧ (Glottal Wa, 253)
    +    b"\xe1\x8b\x88".decode(),  # ወ (Wa, 254)
    +    b"\xe1\x8b\x89".decode(),  # ዉ (Wu, 255)
    +    b"\xe1\x8b\x8a".decode(),  # ዊ (Wi, 256)
    +    b"\xe1\x8b\x8b".decode(),  # ዋ (Waa, 257)
    +    b"\xe1\x8b\x8c".decode(),  # ዌ (We, 258)
    +    b"\xe1\x8b\x8d".decode(),  # ው (Wye, 259)
    +    b"\xe1\x8b\x8e".decode(),  # ዎ (Wo, 260)
    +    b"\xe1\x8a\xb0".decode(),  # ኰ (Ko, 261)
    +    b"\xe1\x8a\xb1".decode(),  # ኱ (Ku, 262)
    +    b"\xe1\x8a\xb2".decode(),  # ኲ (Ki, 263)
    +    b"\xe1\x8a\xb3".decode(),  # ኳ (Kua, 264)
    +    b"\xe1\x8a\xb4".decode(),  # ኴ (Ke, 265)
    +    b"\xe1\x8a\xb5".decode(),  # ኵ (Kwe, 266)
    +    b"\xe1\x8a\xb6".decode(),  # ኶ (Ko, 267)
    +    b"\xe1\x8a\x90".decode(),  # ጐ (Go, 268)
    +    b"\xe1\x8a\x91".decode(),  # ጑ (Gu, 269)
    +    b"\xe1\x8a\x92".decode(),  # ጒ (Gi, 270)
    +    b"\xe1\x8a\x93".decode(),  # መ (Gua, 271)
    +    b"\xe1\x8a\x94".decode(),  # ጔ (Ge, 272)
    +    b"\xe1\x8a\x95".decode(),  # ጕ (Gwe, 273)
    +    b"\xe1\x8a\x96".decode(),  # ጖ (Go, 274)
    +    b"\xe0\xa4\x85".decode(),  # अ (A, 275)
    +    b"\xe0\xa4\x86".decode(),  # आ (Aa, 276)
    +    b"\xe0\xa4\x87".decode(),  # इ (I, 277)
    +    b"\xe0\xa4\x88".decode(),  # ई (Ii, 278)
    +    b"\xe0\xa4\x89".decode(),  # उ (U, 279)
    +    b"\xe0\xa4\x8a".decode(),  # ऊ (Uu, 280)
    +    b"\xe0\xa4\x8b".decode(),  # ऋ (R, 281)
    +    b"\xe0\xa4\x8f".decode(),  # ए (E, 282)
    +    b"\xe0\xa4\x90".decode(),  # ऐ (Ai, 283)
    +    b"\xe0\xa4\x93".decode(),  # ओ (O, 284)
    +    b"\xe0\xa4\x94".decode(),  # औ (Au, 285)
    +    b"\xe0\xa4\x95".decode(),  # क (Ka, 286)
    +    b"\xe0\xa4\x96".decode(),  # ख (Kha, 287)
    +    b"\xe0\xa4\x97".decode(),  # ग (Ga, 288)
    +    b"\xe0\xa4\x98".decode(),  # घ (Gha, 289)
    +    b"\xe0\xa4\x99".decode(),  # ङ (Nga, 290)
    +    b"\xe0\xa4\x9a".decode(),  # च (Cha, 291)
    +    b"\xe0\xa4\x9b".decode(),  # छ (Chha, 292)
    +    b"\xe0\xa4\x9c".decode(),  # ज (Ja, 293)
    +    b"\xe0\xa4\x9d".decode(),  # झ (Jha, 294)
    +    b"\xe0\xa4\x9e".decode(),  # ञ (Nya, 295)
    +    b"\xe0\xa4\x9f".decode(),  # ट (Ta, 296)
    +    b"\xe0\xa4\xa0".decode(),  # ठ (Tha, 297)
    +    b"\xe0\xa4\xa1".decode(),  # ड (Da, 298)
    +    b"\xe0\xa4\xa2".decode(),  # ढ (Dha, 299)
    +    b"\xe0\xa4\xa3".decode(),  # ण (Na, 300)
    +    b"\xe0\xa4\xa4".decode(),  # त (Ta, 301)
    +    b"\xe0\xa4\xa5".decode(),  # थ (Tha, 302)
    +    b"\xe0\xa4\xa6".decode(),  # द (Da, 303)
    +    b"\xe0\xa4\xa7".decode(),  # ध (Dha, 304)
    +    b"\xe0\xa4\xa8".decode(),  # न (Na, 305)
    +    b"\xe0\xa4\xaa".decode(),  # प (Pa, 306)
    +    b"\xe0\xa4\xab".decode(),  # फ (Pha, 307)
    +    b"\xe0\xa4\xac".decode(),  # ब (Ba, 308)
    +    b"\xe0\xa4\xad".decode(),  # भ (Bha, 309)
    +    b"\xe0\xa4\xae".decode(),  # म (Ma, 310)
    +    b"\xe0\xa4\xaf".decode(),  # य (Ya, 311)
    +    b"\xe0\xa4\xb0".decode(),  # र (Ra, 312)
    +    b"\xe0\xa4\xb2".decode(),  # ल (La, 313)
    +    b"\xe0\xa4\xb5".decode(),  # व (Va, 314)
    +    b"\xe0\xa4\xb6".decode(),  # श (Sha, 315)
    +    b"\xe0\xa4\xb7".decode(),  # ष (Ssa, 316)
    +    b"\xe0\xa4\xb8".decode(),  # स (Sa, 317)
    +    b"\xe0\xa4\xb9".decode(),  # ह (Ha, 318)
    +    b"\xe3\x82\xa2".decode(),  # ア (A, 319)
    +    b"\xe3\x82\xa4".decode(),  # イ (I, 320)
    +    b"\xe3\x82\xa6".decode(),  # ウ (U, 321)
    +    b"\xe3\x82\xa8".decode(),  # エ (E, 322)
    +    b"\xe3\x82\xaa".decode(),  # オ (O, 323)
    +    b"\xe3\x82\xab".decode(),  # カ (Ka, 324)
    +    b"\xe3\x82\xad".decode(),  # キ (Ki, 325)
    +    b"\xe3\x82\xaf".decode(),  # ク (Ku, 326)
    +    b"\xe3\x82\xb1".decode(),  # ケ (Ke, 327)
    +    b"\xe3\x82\xb3".decode(),  # コ (Ko, 328)
    +    b"\xe3\x82\xb5".decode(),  # サ (Sa, 329)
    +    b"\xe3\x82\xb7".decode(),  # シ (Shi, 330)
    +    b"\xe3\x82\xb9".decode(),  # ス (Su, 331)
    +    b"\xe3\x82\xbb".decode(),  # セ (Se, 332)
    +    b"\xe3\x82\xbd".decode(),  # ソ (So, 333)
    +    b"\xe3\x82\xbf".decode(),  # タ (Ta, 334)
    +    b"\xe3\x83\x81".decode(),  # チ (Chi, 335)
    +    b"\xe3\x83\x84".decode(),  # ツ (Tsu, 336)
    +    b"\xe3\x83\x86".decode(),  # テ (Te, 337)
    +    b"\xe3\x83\x88".decode(),  # ト (To, 338)
    +    b"\xe3\x83\x8a".decode(),  # ナ (Na, 339)
    +    b"\xe3\x83\x8b".decode(),  # ニ (Ni, 340)
    +    b"\xe3\x83\x8c".decode(),  # ヌ (Nu, 341)
    +    b"\xe3\x83\x8d".decode(),  # ネ (Ne, 342)
    +    b"\xe3\x83\x8e".decode(),  # ノ (No, 343)
    +    b"\xe3\x83\x8f".decode(),  # ハ (Ha, 344)
    +    b"\xe3\x83\x92".decode(),  # ヒ (Hi, 345)
    +    b"\xe3\x83\x95".decode(),  # フ (Fu, 346)
    +    b"\xe3\x83\x98".decode(),  # ヘ (He, 347)
    +    b"\xe3\x83\x9b".decode(),  # ホ (Ho, 348)
    +    b"\xe3\x83\x9e".decode(),  # マ (Ma, 349)
    +    b"\xe3\x83\x9f".decode(),  # ミ (Mi, 350)
    +    b"\xe3\x83\xa0".decode(),  # ム (Mu, 351)
    +    b"\xe3\x83\xa1".decode(),  # メ (Me, 352)
    +    b"\xe3\x83\xa2".decode(),  # モ (Mo, 353)
    +    b"\xe3\x83\xa4".decode(),  # ヤ (Ya, 354)
    +    b"\xe3\x83\xa6".decode(),  # ユ (Yu, 355)
    +    b"\xe3\x83\xa8".decode(),  # ヨ (Yo, 356)
    +    b"\xe3\x83\xa9".decode(),  # ラ (Ra, 357)
    +    b"\xe3\x83\xaa".decode(),  # リ (Ri, 358)
    +    b"\xe3\x83\xab".decode(),  # ル (Ru, 359)
    +    b"\xe3\x83\xac".decode(),  # レ (Re, 360)
    +    b"\xe3\x83\xad".decode(),  # ロ (Ro, 361)
    +    b"\xe3\x83\xaf".decode(),  # ワ (Wa, 362)
    +    b"\xe3\x83\xb2".decode(),  # ヲ (Wo, 363)
    +    b"\xe3\x83\xb3".decode(),  # ン (N, 364)
    +    b"\xe2\xb4\xb0".decode(),  # ⴰ (Ya, 365)
    +    b"\xe2\xb4\xb1".decode(),  # ⴱ (Yab, 366)
    +    b"\xe2\xb4\xb2".decode(),  # ⴲ (Yabh, 367)
    +    b"\xe2\xb4\xb3".decode(),  # ⴳ (Yag, 368)
    +    b"\xe2\xb4\xb4".decode(),  # ⴴ (Yagh, 369)
    +    b"\xe2\xb4\xb5".decode(),  # ⴵ (Yaj, 370)
    +    b"\xe2\xb4\xb6".decode(),  # ⴶ (Yach, 371)
    +    b"\xe2\xb4\xb7".decode(),  # ⴷ (Yad, 372)
    +    b"\xe2\xb4\xb8".decode(),  # ⴸ (Yadh, 373)
    +    b"\xe2\xb4\xb9".decode(),  # ⴹ (Yadh, emphatic, 374)
    +    b"\xe2\xb4\xba".decode(),  # ⴺ (Yaz, 375)
    +    b"\xe2\xb4\xbb".decode(),  # ⴻ (Yazh, 376)
    +    b"\xe2\xb4\xbc".decode(),  # ⴼ (Yaf, 377)
    +    b"\xe2\xb4\xbd".decode(),  # ⴽ (Yak, 378)
    +    b"\xe2\xb4\xbe".decode(),  # ⴾ (Yak, variant, 379)
    +    b"\xe2\xb4\xbf".decode(),  # ⴿ (Yaq, 380)
    +    b"\xe2\xb5\x80".decode(),  # ⵀ (Yah, 381)
    +    b"\xe2\xb5\x81".decode(),  # ⵁ (Yahh, 382)
    +    b"\xe2\xb5\x82".decode(),  # ⵂ (Yahl, 383)
    +    b"\xe2\xb5\x83".decode(),  # ⵃ (Yahm, 384)
    +    b"\xe2\xb5\x84".decode(),  # ⵄ (Yayn, 385)
    +    b"\xe2\xb5\x85".decode(),  # ⵅ (Yakh, 386)
    +    b"\xe2\xb5\x86".decode(),  # ⵆ (Yakl, 387)
    +    b"\xe2\xb5\x87".decode(),  # ⵇ (Yahq, 388)
    +    b"\xe2\xb5\x88".decode(),  # ⵈ (Yash, 389)
    +    b"\xe2\xb5\x89".decode(),  # ⵉ (Yi, 390)
    +    b"\xe2\xb5\x8a".decode(),  # ⵊ (Yij, 391)
    +    b"\xe2\xb5\x8b".decode(),  # ⵋ (Yizh, 392)
    +    b"\xe2\xb5\x8c".decode(),  # ⵌ (Yink, 393)
    +    b"\xe2\xb5\x8d".decode(),  # ⵍ (Yal, 394)
    +    b"\xe2\xb5\x8e".decode(),  # ⵎ (Yam, 395)
    +    b"\xe2\xb5\x8f".decode(),  # ⵏ (Yan, 396)
    +    b"\xe2\xb5\x90".decode(),  # ⵐ (Yang, 397)
    +    b"\xe2\xb5\x91".decode(),  # ⵑ (Yany, 398)
    +    b"\xe2\xb5\x92".decode(),  # ⵒ (Yap, 399)
    +    b"\xe2\xb5\x93".decode(),  # ⵓ (Yu, 400)
    +    b"\xe0\xb6\x85".decode(),  # අ (A, 401)
    +    b"\xe0\xb6\x86".decode(),  # ආ (Aa, 402)
    +    b"\xe0\xb6\x87".decode(),  # ඉ (I, 403)
    +    b"\xe0\xb6\x88".decode(),  # ඊ (Ii, 404)
    +    b"\xe0\xb6\x89".decode(),  # උ (U, 405)
    +    b"\xe0\xb6\x8a".decode(),  # ඌ (Uu, 406)
    +    b"\xe0\xb6\x8b".decode(),  # ඍ (R, 407)
    +    b"\xe0\xb6\x8c".decode(),  # ඎ (Rr, 408)
    +    b"\xe0\xb6\x8f".decode(),  # ඏ (L, 409)
    +    b"\xe0\xb6\x90".decode(),  # ඐ (Ll, 410)
    +    b"\xe0\xb6\x91".decode(),  # එ (E, 411)
    +    b"\xe0\xb6\x92".decode(),  # ඒ (Ee, 412)
    +    b"\xe0\xb6\x93".decode(),  # ඓ (Ai, 413)
    +    b"\xe0\xb6\x94".decode(),  # ඔ (O, 414)
    +    b"\xe0\xb6\x95".decode(),  # ඕ (Oo, 415)
    +    b"\xe0\xb6\x96".decode(),  # ඖ (Au, 416)
    +    b"\xe0\xb6\x9a".decode(),  # ක (Ka, 417)
    +    b"\xe0\xb6\x9b".decode(),  # ඛ (Kha, 418)
    +    b"\xe0\xb6\x9c".decode(),  # ග (Ga, 419)
    +    b"\xe0\xb6\x9d".decode(),  # ඝ (Gha, 420)
    +    b"\xe0\xb6\x9e".decode(),  # ඞ (Nga, 421)
    +    b"\xe0\xb6\x9f".decode(),  # ච (Cha, 422)
    +    b"\xe0\xb6\xa0".decode(),  # ඡ (Chha, 423)
    +    b"\xe0\xb6\xa1".decode(),  # ජ (Ja, 424)
    +    b"\xe0\xb6\xa2".decode(),  # ඣ (Jha, 425)
    +    b"\xe0\xb6\xa3".decode(),  # ඤ (Nya, 426)
    +    b"\xe0\xb6\xa4".decode(),  # ට (Ta, 427)
    +    b"\xe0\xb6\xa5".decode(),  # ඥ (Tha, 428)
    +    b"\xe0\xb6\xa6".decode(),  # ඦ (Da, 429)
    +    b"\xe0\xb6\xa7".decode(),  # ට (Dha, 430)
    +    b"\xe0\xb6\xa8".decode(),  # ඨ (Na, 431)
    +    b"\xe0\xb6\xaa".decode(),  # ඪ (Pa, 432)
    +    b"\xe0\xb6\xab".decode(),  # ණ (Pha, 433)
    +    b"\xe0\xb6\xac".decode(),  # ඬ (Ba, 434)
    +    b"\xe0\xb6\xad".decode(),  # ත (Bha, 435)
    +    b"\xe0\xb6\xae".decode(),  # ථ (Ma, 436)
    +    b"\xe0\xb6\xaf".decode(),  # ද (Ya, 437)
    +    b"\xe0\xb6\xb0".decode(),  # ධ (Ra, 438)
     ]
     
     
     
    [docs] -def tao(amount: float) -> Balance: +def tao(amount: float, netuid: int = 0) -> Balance: """ Helper function to create a Balance object from a float (Tao) """ - return Balance.from_tao(amount)
    + return Balance.from_tao(amount).set_unit(netuid)
    [docs] -def rao(amount: int) -> Balance: +def rao(amount: int, netuid: int = 0) -> Balance: """ Helper function to create a Balance object from an int (Rao) """ - return Balance.from_rao(amount)
    + return Balance.from_rao(amount).set_unit(netuid)
    -
    -[docs] def check_and_convert_to_balance( amount: Union[float, int, Optional[Balance]], ) -> Balance: @@ -1170,8 +1207,7 @@

    Source code for bittensor.utils.balance

                 stacklevel=2,
             )
             amount = tao(amount)
    -    return amount
    - + return amount
    diff --git a/static/python-api/html/_modules/bittensor/utils/btlogging/console.html b/static/python-api/html/_modules/bittensor/utils/btlogging/console.html index 748ddfc528..7e3cd55f12 100644 --- a/static/python-api/html/_modules/bittensor/utils/btlogging/console.html +++ b/static/python-api/html/_modules/bittensor/utils/btlogging/console.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    diff --git a/static/python-api/html/_modules/bittensor/utils/btlogging/format.html b/static/python-api/html/_modules/bittensor/utils/btlogging/format.html index abe4ad5f8e..5f3bbce5db 100644 --- a/static/python-api/html/_modules/bittensor/utils/btlogging/format.html +++ b/static/python-api/html/_modules/bittensor/utils/btlogging/format.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    diff --git a/static/python-api/html/_modules/bittensor/utils/btlogging/helpers.html b/static/python-api/html/_modules/bittensor/utils/btlogging/helpers.html index bcb9667e45..8641948541 100644 --- a/static/python-api/html/_modules/bittensor/utils/btlogging/helpers.html +++ b/static/python-api/html/_modules/bittensor/utils/btlogging/helpers.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    diff --git a/static/python-api/html/_modules/bittensor/utils/btlogging/loggingmachine.html b/static/python-api/html/_modules/bittensor/utils/btlogging/loggingmachine.html index 52d51ca360..8c3ea19eba 100644 --- a/static/python-api/html/_modules/bittensor/utils/btlogging/loggingmachine.html +++ b/static/python-api/html/_modules/bittensor/utils/btlogging/loggingmachine.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -352,6 +355,7 @@

    Source code for bittensor.utils.btlogging.loggingmachine

    from statemachine import State, StateMachine +from bittensor.core.settings import READ_ONLY from bittensor.core.config import Config from bittensor.utils.btlogging.console import BittensorConsole from .defines import ( @@ -1062,9 +1066,12 @@

    Source code for bittensor.utils.btlogging.loggingmachine

    default_logging_info = os.getenv("BT_LOGGING_INFO") or False default_logging_trace = os.getenv("BT_LOGGING_TRACE") or False default_logging_record_log = os.getenv("BT_LOGGING_RECORD_LOG") or False - default_logging_logging_dir = os.getenv( - "BT_LOGGING_LOGGING_DIR" - ) or os.path.join("~", ".bittensor", "miners") + default_logging_logging_dir = ( + None + if READ_ONLY + else os.getenv("BT_LOGGING_LOGGING_DIR") + or os.path.join("~", ".bittensor", "miners") + ) parser.add_argument( "--" + prefix_str + "logging.debug", action="store_true", diff --git a/static/python-api/html/_modules/bittensor/utils/easy_imports.html b/static/python-api/html/_modules/bittensor/utils/easy_imports.html deleted file mode 100644 index d336f1dad4..0000000000 --- a/static/python-api/html/_modules/bittensor/utils/easy_imports.html +++ /dev/null @@ -1,605 +0,0 @@ - - - - - - - - - - bittensor.utils.easy_imports — Bittensor SDK Docs documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - -
    - -
    - - - - - -
    -
    - - - - - - - - -
    - - - -
    - -
    -
    - -
    -
    - -
    - -
    - -
    - - -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - - - -
    -

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

    Source code for bittensor.utils.easy_imports

    -"""
    -The Bittensor Compatibility Module is designed to ensure seamless integration and functionality with legacy versions of
    -the Bittensor framework, specifically up to and including version 7.3.0. This module addresses changes and deprecated
    -features in recent versions, allowing users to maintain compatibility with older systems and projects.
    -"""
    -
    -import importlib
    -import sys
    -
    -from bittensor_wallet import Keypair  # noqa: F401
    -from bittensor_wallet.errors import KeyFileError  # noqa: F401
    -from bittensor_wallet.keyfile import (  # noqa: F401
    -    serialized_keypair_to_keyfile_data,
    -    deserialize_keypair_from_keyfile_data,
    -    validate_password,
    -    ask_password_to_encrypt,
    -    keyfile_data_is_encrypted_nacl,
    -    keyfile_data_is_encrypted_ansible,
    -    keyfile_data_is_encrypted_legacy,
    -    keyfile_data_is_encrypted,
    -    keyfile_data_encryption_method,
    -    legacy_encrypt_keyfile_data,
    -    encrypt_keyfile_data,
    -    get_coldkey_password_from_environment,
    -    decrypt_keyfile_data,
    -    Keyfile,
    -)
    -from bittensor_wallet.wallet import display_mnemonic_msg, Wallet  # noqa: F401
    -
    -from bittensor.core import settings
    -from bittensor.core.async_subtensor import AsyncSubtensor
    -from bittensor.core.axon import Axon
    -from bittensor.core.chain_data import (  # noqa: F401
    -    AxonInfo,
    -    ChainIdentity,
    -    DelegateInfo,
    -    DelegateInfoLite,
    -    DynamicInfo,
    -    IPInfo,
    -    MetagraphInfo,
    -    MetagraphInfoEmissions,
    -    MetagraphInfoParams,
    -    MetagraphInfoPool,
    -    NeuronInfo,
    -    NeuronInfoLite,
    -    PrometheusInfo,
    -    ProposalCallData,
    -    ProposalVoteData,
    -    ScheduledColdkeySwapInfo,
    -    StakeInfo,
    -    SubnetHyperparameters,
    -    SubnetIdentity,
    -    SubnetInfo,
    -    SubnetState,
    -    WeightCommitInfo,
    -)
    -from bittensor.core.config import (  # noqa: F401
    -    InvalidConfigFile,
    -    DefaultConfig,
    -    Config,
    -    T,
    -)
    -from bittensor.core.dendrite import Dendrite  # noqa: F401
    -from bittensor.core.errors import (  # noqa: F401
    -    BlacklistedException,
    -    ChainConnectionError,
    -    ChainError,
    -    ChainQueryError,
    -    ChainTransactionError,
    -    IdentityError,
    -    InternalServerError,
    -    InvalidRequestNameError,
    -    MetadataError,
    -    NominationError,
    -    NotDelegateError,
    -    NotRegisteredError,
    -    NotVerifiedException,
    -    PostProcessException,
    -    PriorityException,
    -    RegistrationError,
    -    RunException,
    -    StakeError,
    -    SynapseDendriteNoneException,
    -    SynapseParsingError,
    -    TransferError,
    -    UnknownSynapseError,
    -    UnstakeError,
    -)
    -from bittensor.core.metagraph import Metagraph
    -from bittensor.core.settings import BLOCKTIME
    -from bittensor.core.stream import StreamingSynapse  # noqa: F401
    -from bittensor.core.subtensor import Subtensor
    -from bittensor.core.synapse import TerminalInfo, Synapse  # noqa: F401
    -from bittensor.core.tensor import Tensor  # noqa: F401
    -from bittensor.core.threadpool import (  # noqa: F401
    -    PriorityThreadPoolExecutor as PriorityThreadPoolExecutor,
    -)
    -from bittensor.utils import (  # noqa: F401
    -    ss58_to_vec_u8,
    -    version_checking,
    -    strtobool,
    -    get_explorer_url_for_network,
    -    ss58_address_to_bytes,
    -    u16_normalized_float,
    -    u64_normalized_float,
    -    get_hash,
    -)
    -from bittensor.utils.balance import Balance as Balance  # noqa: F401
    -from bittensor.utils.balance import tao, rao
    -from bittensor.utils.btlogging import logging
    -from bittensor.utils.mock.subtensor_mock import MockSubtensor as MockSubtensor  # noqa: F401
    -from bittensor.utils.subnets import SubnetsAPI  # noqa: F401
    -
    -tao = tao
    -rao = rao
    -
    -# Backwards compatibility with previous bittensor versions.
    -async_subtensor = AsyncSubtensor
    -axon = Axon
    -config = Config
    -dendrite = Dendrite
    -keyfile = Keyfile
    -metagraph = Metagraph
    -wallet = Wallet
    -subtensor = Subtensor
    -synapse = Synapse
    -
    -__blocktime__ = BLOCKTIME
    -__network_explorer_map__ = settings.NETWORK_EXPLORER_MAP
    -__pipaddress__ = settings.PIPADDRESS
    -__ss58_format__ = settings.SS58_FORMAT
    -__type_registry__ = settings.TYPE_REGISTRY
    -__ss58_address_length__ = settings.SS58_ADDRESS_LENGTH
    -
    -__networks__ = settings.NETWORKS
    -
    -__finney_entrypoint__ = settings.FINNEY_ENTRYPOINT
    -__finney_test_entrypoint__ = settings.FINNEY_TEST_ENTRYPOINT
    -__archive_entrypoint__ = settings.ARCHIVE_ENTRYPOINT
    -__local_entrypoint__ = settings.LOCAL_ENTRYPOINT
    -
    -__tao_symbol__ = settings.TAO_SYMBOL
    -__rao_symbol__ = settings.RAO_SYMBOL
    -
    -# Makes the `bittensor.utils.mock` subpackage available as `bittensor.mock` for backwards compatibility.
    -mock_subpackage = importlib.import_module("bittensor.utils.mock")
    -sys.modules["bittensor.mock"] = mock_subpackage
    -
    -# Makes the `bittensor.core.extrinsics` subpackage available as `bittensor.extrinsics` for backwards compatibility.
    -extrinsics_subpackage = importlib.import_module("bittensor.core.extrinsics")
    -sys.modules["bittensor.extrinsics"] = extrinsics_subpackage
    -
    -
    -# Logging helpers.
    -
    -[docs] -def trace(on: bool = True): - """ - Enables or disables trace logging. - Args: - on (bool): If True, enables trace logging. If False, disables trace logging. - """ - logging.set_trace(on)
    - - - -
    -[docs] -def debug(on: bool = True): - """ - Enables or disables debug logging. - Args: - on (bool): If True, enables debug logging. If False, disables debug logging. - """ - logging.set_debug(on)
    - - - -
    -[docs] -def warning(on: bool = True): - """ - Enables or disables warning logging. - Args: - on (bool): If True, enables warning logging. If False, disables warning logging and sets default (WARNING) level. - """ - logging.set_warning(on)
    - - - -
    -[docs] -def info(on: bool = True): - """ - Enables or disables info logging. - Args: - on (bool): If True, enables info logging. If False, disables info logging and sets default (WARNING) level. - """ - logging.set_info(on)
    - -
    - -
    - - - - - - -
    - -
    -
    -
    - -
    - - - - -
    -
    - - -
    - - -
    -
    -
    - - - - - -
    -
    - - \ No newline at end of file diff --git a/static/python-api/html/_modules/bittensor/utils/formatting.html b/static/python-api/html/_modules/bittensor/utils/formatting.html index 13a6280c87..6d72f3ec49 100644 --- a/static/python-api/html/_modules/bittensor/utils/formatting.html +++ b/static/python-api/html/_modules/bittensor/utils/formatting.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    diff --git a/static/python-api/html/_modules/bittensor/utils/liquidity.html b/static/python-api/html/_modules/bittensor/utils/liquidity.html new file mode 100644 index 0000000000..acdb762152 --- /dev/null +++ b/static/python-api/html/_modules/bittensor/utils/liquidity.html @@ -0,0 +1,587 @@ + + + + + + + + + + bittensor.utils.liquidity — Bittensor SDK Docs documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + +
    + +
    + + + + + +
    +
    + + + + + + + + +
    + + + +
    + +
    +
    + +
    +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + + +
    +

    + +
    +
    + +
    +
    +
    + + + + +
    + +

    Source code for bittensor.utils.liquidity

    +"""
    +This module provides utilities for managing liquidity positions and price conversions in the Bittensor network. The
    +module handles conversions between TAO and Alpha tokens while maintaining precise calculations for liquidity
    +provisioning and fee distribution.
    +"""
    +
    +import math
    +from typing import Any
    +from dataclasses import dataclass
    +
    +from bittensor.utils.balance import Balance, fixed_to_float
    +
    +# These three constants are unchangeable at the level of Uniswap math
    +MIN_TICK = -887272
    +MAX_TICK = 887272
    +PRICE_STEP = 1.0001
    +
    +
    +
    +[docs] +@dataclass +class LiquidityPosition: + id: int + price_low: Balance # RAO + price_high: Balance # RAO + liquidity: Balance # TAO + ALPHA (sqrt by TAO balance * Alpha Balance -> math under the hood) + fees_tao: Balance # RAO + fees_alpha: Balance # RAO + netuid: int + +
    +[docs] + def to_token_amounts( + self, current_subnet_price: Balance + ) -> tuple[Balance, Balance]: + """Convert a position to token amounts. + + Arguments: + current_subnet_price: current subnet price in Alpha. + + Returns: + tuple[int, int]: + Amount of Alpha in liquidity + Amount of TAO in liquidity + + Liquidity is a combination of TAO and Alpha depending on the price of the subnet at the moment. + """ + sqrt_price_low = math.sqrt(self.price_low) + sqrt_price_high = math.sqrt(self.price_high) + sqrt_current_subnet_price = math.sqrt(current_subnet_price) + + if sqrt_current_subnet_price < sqrt_price_low: + amount_alpha = self.liquidity * (1 / sqrt_price_low - 1 / sqrt_price_high) + amount_tao = 0 + elif sqrt_current_subnet_price > sqrt_price_high: + amount_alpha = 0 + amount_tao = self.liquidity * (sqrt_price_high - sqrt_price_low) + else: + amount_alpha = self.liquidity * ( + 1 / sqrt_current_subnet_price - 1 / sqrt_price_high + ) + amount_tao = self.liquidity * (sqrt_current_subnet_price - sqrt_price_low) + return Balance.from_rao(int(amount_alpha), self.netuid), Balance.from_rao( + int(amount_tao) + )
    +
    + + + +
    +[docs] +def price_to_tick(price: float) -> int: + """Converts a float price to the nearest Uniswap V3 tick index.""" + if price <= 0: + raise ValueError(f"Price must be positive, got `{price}`.") + + tick = int(math.log(price) / math.log(PRICE_STEP)) + + if not (MIN_TICK <= tick <= MAX_TICK): + raise ValueError( + f"Resulting tick {tick} is out of allowed range ({MIN_TICK} to {MAX_TICK})" + ) + return tick
    + + + +
    +[docs] +def tick_to_price(tick: int) -> float: + """Convert an integer Uniswap V3 tick index to float price.""" + if not (MIN_TICK <= tick <= MAX_TICK): + raise ValueError("Tick is out of allowed range") + return PRICE_STEP**tick
    + + + +
    +[docs] +def get_fees( + current_tick: int, + tick: dict, + tick_index: int, + quote: bool, + global_fees_tao: float, + global_fees_alpha: float, + above: bool, +) -> float: + """Returns the liquidity fee.""" + tick_fee_key = "fees_out_tao" if quote else "fees_out_alpha" + tick_fee_value = fixed_to_float(tick.get(tick_fee_key)) + global_fee_value = global_fees_tao if quote else global_fees_alpha + + if above: + return ( + global_fee_value - tick_fee_value + if tick_index <= current_tick + else tick_fee_value + ) + return ( + tick_fee_value + if tick_index <= current_tick + else global_fee_value - tick_fee_value + )
    + + + +
    +[docs] +def get_fees_in_range( + quote: bool, + global_fees_tao: float, + global_fees_alpha: float, + fees_below_low: float, + fees_above_high: float, +) -> float: + """Returns the liquidity fee value in a range.""" + global_fees = global_fees_tao if quote else global_fees_alpha + return global_fees - fees_below_low - fees_above_high
    + + + +# Calculate fees for a position +
    +[docs] +def calculate_fees( + position: dict[str, Any], + global_fees_tao: float, + global_fees_alpha: float, + tao_fees_below_low: float, + tao_fees_above_high: float, + alpha_fees_below_low: float, + alpha_fees_above_high: float, + netuid: int, +) -> tuple[Balance, Balance]: + fee_tao_agg = get_fees_in_range( + quote=True, + global_fees_tao=global_fees_tao, + global_fees_alpha=global_fees_alpha, + fees_below_low=tao_fees_below_low, + fees_above_high=tao_fees_above_high, + ) + + fee_alpha_agg = get_fees_in_range( + quote=False, + global_fees_tao=global_fees_tao, + global_fees_alpha=global_fees_alpha, + fees_below_low=alpha_fees_below_low, + fees_above_high=alpha_fees_above_high, + ) + + fee_tao = fee_tao_agg - fixed_to_float(position["fees_tao"]) + fee_alpha = fee_alpha_agg - fixed_to_float(position["fees_alpha"]) + liquidity_frac = position["liquidity"] + + fee_tao = liquidity_frac * fee_tao + fee_alpha = liquidity_frac * fee_alpha + + return Balance.from_rao(int(fee_tao)), Balance.from_rao(int(fee_alpha), netuid)
    + +
    + +
    + + + + + + +
    + +
    +
    +
    + +
    + + + + +
    +
    + + +
    + + +
    +
    +
    + + + + + +
    +
    + + \ No newline at end of file diff --git a/static/python-api/html/_modules/bittensor/utils/mock/subtensor_mock.html b/static/python-api/html/_modules/bittensor/utils/mock/subtensor_mock.html deleted file mode 100644 index 3a35845d1d..0000000000 --- a/static/python-api/html/_modules/bittensor/utils/mock/subtensor_mock.html +++ /dev/null @@ -1,1464 +0,0 @@ - - - - - - - - - - bittensor.utils.mock.subtensor_mock — Bittensor SDK Docs documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - -
    - -
    - - - - - -
    -
    - - - - - - - - -
    - - - -
    - -
    -
    - -
    -
    - -
    - -
    - -
    - - -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - - - -
    -

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

    Source code for bittensor.utils.mock.subtensor_mock

    -from collections.abc import Mapping
    -from dataclasses import dataclass
    -from hashlib import sha256
    -from types import SimpleNamespace
    -from typing import Any, Optional, Union, TypedDict
    -from unittest.mock import MagicMock, patch
    -
    -from async_substrate_interface import SubstrateInterface
    -from bittensor_wallet import Wallet
    -
    -import bittensor.core.subtensor as subtensor_module
    -from bittensor.core.chain_data import (
    -    NeuronInfo,
    -    NeuronInfoLite,
    -    PrometheusInfo,
    -    AxonInfo,
    -)
    -from bittensor.core.errors import ChainQueryError
    -from bittensor.core.subtensor import Subtensor
    -from bittensor.core.types import AxonServeCallParams, PrometheusServeCallParams
    -from bittensor.utils import RAOPERTAO, u16_normalized_float
    -from bittensor.utils.balance import Balance
    -
    -# Mock Testing Constant
    -__GLOBAL_MOCK_STATE__ = {}
    -
    -
    -BlockNumber = int
    -
    -
    -
    -[docs] -class InfoDict(Mapping): -
    -[docs] - @classmethod - def default(cls): - raise NotImplementedError
    - - - def __getitem__(self, key): - return getattr(self, key) - - def __setitem__(self, key, value): - return setattr(self, key, value) - - def __iter__(self): - return iter(self.__dict__) - - def __len__(self): - return len(self.__dict__)
    - - - -
    -[docs] -@dataclass -class AxonInfoDict(InfoDict): - block: int - version: int - ip: int # integer representation of ip address - port: int - ip_type: int - protocol: int - placeholder1: int # placeholder for future use - placeholder2: int - -
    -[docs] - @classmethod - def default(cls): - return cls( - block=0, - version=0, - ip=0, - port=0, - ip_type=0, - protocol=0, - placeholder1=0, - placeholder2=0, - )
    -
    - - - -
    -[docs] -@dataclass -class PrometheusInfoDict(InfoDict): - block: int - version: int - ip: int # integer representation of ip address - port: int - ip_type: int - -
    -[docs] - @classmethod - def default(cls): - return cls(block=0, version=0, ip=0, port=0, ip_type=0)
    -
    - - - -
    -[docs] -@dataclass -class MockSubtensorValue: - value: Optional[Any]
    - - - -
    -[docs] -class MockMapResult: - records: Optional[list[tuple[MockSubtensorValue, MockSubtensorValue]]] - - def __init__( - self, - records: Optional[ - list[tuple[Union[Any, MockSubtensorValue], Union[Any, MockSubtensorValue]]] - ] = None, - ): - _records = [ - ( - ( - MockSubtensorValue(value=record[0]), - MockSubtensorValue(value=record[1]), - ) - # Make sure record is a tuple of MockSubtensorValue (dict with value attr) - if not ( - isinstance(record, tuple) - and all( - isinstance(item, dict) and hasattr(item, "value") - for item in record - ) - ) - else record - ) - for record in records - ] - - self.records = _records - - def __iter__(self): - return iter(self.records)
    - - - -
    -[docs] -class MockSystemState(TypedDict): - Account: dict[str, dict[int, int]] # address -> block -> balance
    - - - -
    -[docs] -class MockSubtensorState(TypedDict): - Rho: dict[int, dict[BlockNumber, int]] # netuid -> block -> rho - Kappa: dict[int, dict[BlockNumber, int]] # netuid -> block -> kappa - Difficulty: dict[int, dict[BlockNumber, int]] # netuid -> block -> difficulty - ImmunityPeriod: dict[ - int, dict[BlockNumber, int] - ] # netuid -> block -> immunity_period - ValidatorBatchSize: dict[ - int, dict[BlockNumber, int] - ] # netuid -> block -> validator_batch_size - Active: dict[int, dict[BlockNumber, bool]] # (netuid, uid), block -> active - Stake: dict[str, dict[str, dict[int, int]]] # (hotkey, coldkey) -> block -> stake - - Delegates: dict[str, dict[int, float]] # address -> block -> delegate_take - - NetworksAdded: dict[int, dict[BlockNumber, bool]] # netuid -> block -> added
    - - - -
    -[docs] -class MockChainState(TypedDict): - System: MockSystemState - SubtensorModule: MockSubtensorState
    - - - -
    -[docs] -class ReusableCoroutine: - def __init__(self, coroutine): - self.coroutine = coroutine - - def __await__(self): - return self.reset().__await__() - -
    -[docs] - def reset(self): - return self.coroutine()
    -
    - - - -async def _async_block(): - return 1 - - -
    -[docs] -class MockSubtensor(Subtensor): - """ - A Mock Subtensor class for running tests. - This should mock only methods that make queries to the chain. - e.g. We mock `Subtensor.query_subtensor` instead of all query methods. - - This class will also store a local (mock) state of the chain. - """ - - chain_state: MockChainState - block_number: int - -
    -[docs] - @classmethod - def reset(cls) -> None: - __GLOBAL_MOCK_STATE__.clear() - - _ = cls()
    - - -
    -[docs] - def setup(self) -> None: - if not hasattr(self, "chain_state") or getattr(self, "chain_state") is None: - self.chain_state = { - "System": {"Account": {}}, - "Balances": {"ExistentialDeposit": {0: 500}}, - "SubtensorModule": { - "NetworksAdded": {}, - "Rho": {}, - "Kappa": {}, - "Difficulty": {}, - "ImmunityPeriod": {}, - "ValidatorBatchSize": {}, - "ValidatorSequenceLength": {}, - "ValidatorEpochsPerReset": {}, - "ValidatorEpochLength": {}, - "MaxAllowedValidators": {}, - "MinAllowedWeights": {}, - "MaxWeightLimit": {}, - "SynergyScalingLawPower": {}, - "ScalingLawPower": {}, - "SubnetworkN": {}, - "MaxAllowedUids": {}, - "NetworkModality": {}, - "BlocksSinceLastStep": {}, - "Tempo": {}, - "NetworkConnect": {}, - "EmissionValues": {}, - "Burn": {}, - "Active": {}, - "Uids": {}, - "Keys": {}, - "Owner": {}, - "IsNetworkMember": {}, - "LastUpdate": {}, - "Rank": {}, - "Emission": {}, - "Incentive": {}, - "Consensus": {}, - "Trust": {}, - "ValidatorTrust": {}, - "Dividends": {}, - "PruningScores": {}, - "ValidatorPermit": {}, - "Weights": {}, - "Bonds": {}, - "Stake": {}, - "TotalStake": {0: 0}, - "TotalIssuance": {0: 0}, - "TotalHotkeyStake": {}, - "TotalColdkeyStake": {}, - "TxRateLimit": {0: 0}, # No limit - "Delegates": {}, - "Axons": {}, - "Prometheus": {}, - "SubnetOwner": {}, - "Commits": {}, - "AdjustmentAlpha": {}, - "BondsMovingAverage": {}, - }, - } - - self.block_number = 0 - - self.network = "mock" - self.chain_endpoint = "ws://mock_endpoint.bt" - self.substrate = MagicMock(autospec=SubstrateInterface)
    - - - def __init__(self, *args, **kwargs) -> None: - mock_substrate_interface = MagicMock(autospec=SubstrateInterface) - with patch.object( - subtensor_module, - "SubstrateInterface", - return_value=mock_substrate_interface, - ): - super().__init__() - self.__dict__ = __GLOBAL_MOCK_STATE__ - - if not hasattr(self, "chain_state") or getattr(self, "chain_state") is None: - self.setup() - -
    -[docs] - def get_block_hash(self, block: Optional[int] = None) -> str: - return "0x" + sha256(str(block).encode()).hexdigest()[:64]
    - - -
    -[docs] - def create_subnet(self, netuid: int) -> None: - subtensor_state = self.chain_state["SubtensorModule"] - if netuid not in subtensor_state["NetworksAdded"]: - # Per Subnet - subtensor_state["Rho"][netuid] = {} - subtensor_state["Rho"][netuid][0] = 10 - subtensor_state["Kappa"][netuid] = {} - subtensor_state["Kappa"][netuid][0] = 32_767 - subtensor_state["Difficulty"][netuid] = {} - subtensor_state["Difficulty"][netuid][0] = 10_000_000 - subtensor_state["ImmunityPeriod"][netuid] = {} - subtensor_state["ImmunityPeriod"][netuid][0] = 4096 - subtensor_state["ValidatorBatchSize"][netuid] = {} - subtensor_state["ValidatorBatchSize"][netuid][0] = 32 - subtensor_state["ValidatorSequenceLength"][netuid] = {} - subtensor_state["ValidatorSequenceLength"][netuid][0] = 256 - subtensor_state["ValidatorEpochsPerReset"][netuid] = {} - subtensor_state["ValidatorEpochsPerReset"][netuid][0] = 60 - subtensor_state["ValidatorEpochLength"][netuid] = {} - subtensor_state["ValidatorEpochLength"][netuid][0] = 100 - subtensor_state["MaxAllowedValidators"][netuid] = {} - subtensor_state["MaxAllowedValidators"][netuid][0] = 128 - subtensor_state["MinAllowedWeights"][netuid] = {} - subtensor_state["MinAllowedWeights"][netuid][0] = 1024 - subtensor_state["MaxWeightLimit"][netuid] = {} - subtensor_state["MaxWeightLimit"][netuid][0] = 1_000 - subtensor_state["SynergyScalingLawPower"][netuid] = {} - subtensor_state["SynergyScalingLawPower"][netuid][0] = 50 - subtensor_state["ScalingLawPower"][netuid] = {} - subtensor_state["ScalingLawPower"][netuid][0] = 50 - subtensor_state["SubnetworkN"][netuid] = {} - subtensor_state["SubnetworkN"][netuid][0] = 0 - subtensor_state["MaxAllowedUids"][netuid] = {} - subtensor_state["MaxAllowedUids"][netuid][0] = 4096 - subtensor_state["NetworkModality"][netuid] = {} - subtensor_state["NetworkModality"][netuid][0] = 0 - subtensor_state["BlocksSinceLastStep"][netuid] = {} - subtensor_state["BlocksSinceLastStep"][netuid][0] = 0 - subtensor_state["Tempo"][netuid] = {} - subtensor_state["Tempo"][netuid][0] = 99 - - # subtensor_state['NetworkConnect'][netuid] = {} - # subtensor_state['NetworkConnect'][netuid][0] = {} - subtensor_state["EmissionValues"][netuid] = {} - subtensor_state["EmissionValues"][netuid][0] = 0 - subtensor_state["Burn"][netuid] = {} - subtensor_state["Burn"][netuid][0] = 0 - subtensor_state["Commits"][netuid] = {} - - # Per-UID/Hotkey - - subtensor_state["Uids"][netuid] = {} - subtensor_state["Keys"][netuid] = {} - subtensor_state["Owner"][netuid] = {} - - subtensor_state["LastUpdate"][netuid] = {} - subtensor_state["Active"][netuid] = {} - subtensor_state["Rank"][netuid] = {} - subtensor_state["Emission"][netuid] = {} - subtensor_state["Incentive"][netuid] = {} - subtensor_state["Consensus"][netuid] = {} - subtensor_state["Trust"][netuid] = {} - subtensor_state["ValidatorTrust"][netuid] = {} - subtensor_state["Dividends"][netuid] = {} - subtensor_state["PruningScores"][netuid] = {} - subtensor_state["PruningScores"][netuid][0] = {} - subtensor_state["ValidatorPermit"][netuid] = {} - - subtensor_state["Weights"][netuid] = {} - subtensor_state["Bonds"][netuid] = {} - - subtensor_state["Axons"][netuid] = {} - subtensor_state["Prometheus"][netuid] = {} - - subtensor_state["NetworksAdded"][netuid] = {} - subtensor_state["NetworksAdded"][netuid][0] = True - - subtensor_state["AdjustmentAlpha"][netuid] = {} - subtensor_state["AdjustmentAlpha"][netuid][0] = 1000 - - subtensor_state["BondsMovingAverage"][netuid] = {} - subtensor_state["BondsMovingAverage"][netuid][0] = 1000 - else: - raise Exception("Subnet already exists")
    - - -
    -[docs] - def set_difficulty(self, netuid: int, difficulty: int) -> None: - subtensor_state = self.chain_state["SubtensorModule"] - if netuid not in subtensor_state["NetworksAdded"]: - raise Exception("Subnet does not exist") - - subtensor_state["Difficulty"][netuid][self.block_number] = difficulty
    - - - @staticmethod - def _convert_to_balance(balance: Union["Balance", float, int]) -> "Balance": - if isinstance(balance, float): - balance = Balance.from_tao(balance) - - if isinstance(balance, int): - balance = Balance.from_rao(balance) - - return balance - -
    -[docs] - def force_set_balance( - self, ss58_address: str, balance: Union["Balance", float, int] = Balance(0) - ) -> tuple[bool, Optional[str]]: - """ - Returns: - tuple[bool, Optional[str]]: (success, err_msg) - """ - balance = self._convert_to_balance(balance) - - if ss58_address not in self.chain_state["System"]["Account"]: - self.chain_state["System"]["Account"][ss58_address] = { - "data": {"free": {0: 0}} - } - - old_balance = self.get_balance(ss58_address, self.block_number) - diff = balance.rao - old_balance.rao - - # Update total issuance - self.chain_state["SubtensorModule"]["TotalIssuance"][self.block_number] = ( - self._get_most_recent_storage( - self.chain_state["SubtensorModule"]["TotalIssuance"] - ) - + diff - ) - - self.chain_state["System"]["Account"][ss58_address] = { - "data": {"free": {self.block_number: balance.rao}} - } - - return True, None
    - - - # Alias for force_set_balance - sudo_force_set_balance = force_set_balance - -
    -[docs] - def do_block_step(self) -> None: - self.block_number += 1 - - # Doesn't do epoch - subtensor_state = self.chain_state["SubtensorModule"] - for subnet in subtensor_state["NetworksAdded"]: - subtensor_state["BlocksSinceLastStep"][subnet][self.block_number] = ( - self._get_most_recent_storage( - subtensor_state["BlocksSinceLastStep"][subnet] - ) - + 1 - )
    - - - def _handle_type_default(self, name: str, params: list[object]) -> object: - defaults_mapping = { - "TotalStake": 0, - "TotalHotkeyStake": 0, - "TotalColdkeyStake": 0, - "Stake": 0, - } - - return defaults_mapping.get(name, None) - -
    -[docs] - def commit(self, wallet: "Wallet", netuid: int, data: str) -> None: - uid = self.get_uid_for_hotkey_on_subnet( - hotkey_ss58=wallet.hotkey.ss58_address, - netuid=netuid, - ) - if uid is None: - raise Exception("Neuron not found") - subtensor_state = self.chain_state["SubtensorModule"] - subtensor_state["Commits"][netuid].setdefault(self.block_number, {})[uid] = data
    - - -
    -[docs] - def get_commitment(self, netuid: int, uid: int, block: Optional[int] = None) -> str: - if block and self.block_number < block: - raise Exception("Cannot query block in the future") - block = block or self.block_number - - subtensor_state = self.chain_state["SubtensorModule"] - return subtensor_state["Commits"][netuid][block][uid]
    - - -
    -[docs] - def query_subtensor( - self, - name: str, - block: Optional[int] = None, - params: Optional[list[object]] = None, - ) -> MockSubtensorValue: - if params is None: - params = [] - if block: - if self.block_number < block: - raise Exception("Cannot query block in the future") - - else: - block = self.block_number - - state = self.chain_state["SubtensorModule"][name] - if state is not None: - # Use prefix - if len(params) > 0: - while state is not None and len(params) > 0: - state = state.get(params.pop(0), None) - if state is None: - return SimpleNamespace( - value=self._handle_type_default(name, params) - ) - - # Use block - state_at_block = state.get(block, None) - while state_at_block is None and block > 0: - block -= 1 - state_at_block = state.get(block, None) - if state_at_block is not None: - return SimpleNamespace(value=state_at_block) - - return SimpleNamespace(value=self._handle_type_default(name, params)) - else: - return SimpleNamespace(value=self._handle_type_default(name, params))
    - - -
    -[docs] - def query_map_subtensor( - self, - name: str, - block: Optional[int] = None, - params: Optional[list[object]] = None, - ) -> Optional[MockMapResult]: - """ - Note: Double map requires one param - """ - if params is None: - params = [] - if block: - if self.block_number < block: - raise Exception("Cannot query block in the future") - - else: - block = self.block_number - - state = self.chain_state["SubtensorModule"][name] - if state is not None: - # Use prefix - if len(params) > 0: - while state is not None and len(params) > 0: - state = state.get(params.pop(0), None) - if state is None: - return MockMapResult([]) - - # Check if single map or double map - if len(state.keys()) == 0: - return MockMapResult([]) - - inner = list(state.values())[0] - # Should have at least one key - if len(inner.keys()) == 0: - raise Exception("Invalid state") - - # Check if double map - if isinstance(list(inner.values())[0], dict): - # is double map - raise ChainQueryError("Double map requires one param") - - # Iterate over each key and add value to list, max at block - records = [] - for key in state: - result = self._get_most_recent_storage(state[key], block) - if result is None: - continue # Skip if no result for this key at `block` or earlier - - records.append((key, result)) - - return MockMapResult(records) - else: - return MockMapResult([])
    - - -
    -[docs] - def query_constant( - self, module_name: str, constant_name: str, block: Optional[int] = None - ) -> Optional[object]: - if block: - if self.block_number < block: - raise Exception("Cannot query block in the future") - - else: - block = self.block_number - - state: Optional[dict] = self.chain_state.get(module_name, None) - if state is not None: - if constant_name in state: - state = state[constant_name] - else: - return None - - # Use block - state_at_block = self._get_most_recent_storage(state, block) - if state_at_block is not None: - return SimpleNamespace(value=state_at_block) - - return state_at_block["data"]["free"] # Can be None - else: - return None
    - - -
    -[docs] - def get_current_block(self) -> int: - return self.block_number
    - - - # ==== Balance RPC methods ==== - -
    -[docs] - def get_balance(self, address: str, block: int = None) -> "Balance": - if block: - if self.block_number < block: - raise Exception("Cannot query block in the future") - - else: - block = self.block_number - - state = self.chain_state["System"]["Account"] - if state is not None: - if address in state: - state = state[address] - else: - return Balance(0) - - # Use block - balance_state = state["data"]["free"] - state_at_block = self._get_most_recent_storage( - balance_state, block - ) # Can be None - if state_at_block is not None: - bal_as_int = state_at_block - return Balance.from_rao(bal_as_int) - else: - return Balance(0) - else: - return Balance(0)
    - - - # ==== Neuron RPC methods ==== - -
    -[docs] - def neuron_for_uid( - self, uid: int, netuid: int, block: Optional[int] = None - ) -> Optional[NeuronInfo]: - if uid is None: - return NeuronInfo.get_null_neuron() - - if block: - if self.block_number < block: - raise Exception("Cannot query block in the future") - - else: - block = self.block_number - - if netuid not in self.chain_state["SubtensorModule"]["NetworksAdded"]: - return None - - neuron_info = self._neuron_subnet_exists(uid, netuid, block) - if neuron_info is None: - return None - - else: - return neuron_info
    - - -
    -[docs] - def neurons(self, netuid: int, block: Optional[int] = None) -> list[NeuronInfo]: - if netuid not in self.chain_state["SubtensorModule"]["NetworksAdded"]: - raise Exception("Subnet does not exist") - - neurons = [] - subnet_n = self._get_most_recent_storage( - self.chain_state["SubtensorModule"]["SubnetworkN"][netuid], block - ) - for uid in range(subnet_n): - neuron_info = self.neuron_for_uid(uid, netuid, block) - if neuron_info is not None: - neurons.append(neuron_info) - - return neurons
    - - - @staticmethod - def _get_most_recent_storage( - storage: dict[BlockNumber, Any], block_number: Optional[int] = None - ) -> Any: - if block_number is None: - items = list(storage.items()) - items.sort(key=lambda x: x[0], reverse=True) - if len(items) == 0: - return None - - return items[0][1] - - else: - while block_number >= 0: - if block_number in storage: - return storage[block_number] - - block_number -= 1 - - return None - - def _get_axon_info( - self, netuid: int, hotkey: str, block: Optional[int] = None - ) -> AxonInfoDict: - # Axons [netuid][hotkey][block_number] - subtensor_state = self.chain_state["SubtensorModule"] - if netuid not in subtensor_state["Axons"]: - return AxonInfoDict.default() - - if hotkey not in subtensor_state["Axons"][netuid]: - return AxonInfoDict.default() - - result = self._get_most_recent_storage( - subtensor_state["Axons"][netuid][hotkey], block - ) - if not result: - return AxonInfoDict.default() - - return result - - def _get_prometheus_info( - self, netuid: int, hotkey: str, block: Optional[int] = None - ) -> PrometheusInfoDict: - subtensor_state = self.chain_state["SubtensorModule"] - if netuid not in subtensor_state["Prometheus"]: - return PrometheusInfoDict.default() - - if hotkey not in subtensor_state["Prometheus"][netuid]: - return PrometheusInfoDict.default() - - result = self._get_most_recent_storage( - subtensor_state["Prometheus"][netuid][hotkey], block - ) - if not result: - return PrometheusInfoDict.default() - - return result - - def _neuron_subnet_exists( - self, uid: int, netuid: int, block: Optional[int] = None - ) -> Optional[NeuronInfo]: - subtensor_state = self.chain_state["SubtensorModule"] - if netuid not in subtensor_state["NetworksAdded"]: - return None - - if self._get_most_recent_storage(subtensor_state["SubnetworkN"][netuid]) <= uid: - return None - - hotkey = self._get_most_recent_storage(subtensor_state["Keys"][netuid][uid]) - if hotkey is None: - return None - - axon_info_ = self._get_axon_info(netuid, hotkey, block) - - prometheus_info = self._get_prometheus_info(netuid, hotkey, block) - - coldkey = self._get_most_recent_storage(subtensor_state["Owner"][hotkey], block) - active = self._get_most_recent_storage( - subtensor_state["Active"][netuid][uid], block - ) - rank = self._get_most_recent_storage( - subtensor_state["Rank"][netuid][uid], block - ) - emission = self._get_most_recent_storage( - subtensor_state["Emission"][netuid][uid], block - ) - incentive = self._get_most_recent_storage( - subtensor_state["Incentive"][netuid][uid], block - ) - consensus = self._get_most_recent_storage( - subtensor_state["Consensus"][netuid][uid], block - ) - trust = self._get_most_recent_storage( - subtensor_state["Trust"][netuid][uid], block - ) - validator_trust = self._get_most_recent_storage( - subtensor_state["ValidatorTrust"][netuid][uid], block - ) - dividends = self._get_most_recent_storage( - subtensor_state["Dividends"][netuid][uid], block - ) - pruning_score = self._get_most_recent_storage( - subtensor_state["PruningScores"][netuid][uid], block - ) - last_update = self._get_most_recent_storage( - subtensor_state["LastUpdate"][netuid][uid], block - ) - validator_permit = self._get_most_recent_storage( - subtensor_state["ValidatorPermit"][netuid][uid], block - ) - - weights = self._get_most_recent_storage( - subtensor_state["Weights"][netuid][uid], block - ) - bonds = self._get_most_recent_storage( - subtensor_state["Bonds"][netuid][uid], block - ) - - stake_dict = { - coldkey: Balance.from_rao( - self._get_most_recent_storage( - subtensor_state["Stake"][hotkey][coldkey], block - ) - ) - for coldkey in subtensor_state["Stake"][hotkey] - } - - stake = sum(stake_dict.values()) - - weights = [[int(weight[0]), int(weight[1])] for weight in weights] - bonds = [[int(bond[0]), int(bond[1])] for bond in bonds] - rank = u16_normalized_float(rank) - emission = emission / RAOPERTAO - incentive = u16_normalized_float(incentive) - consensus = u16_normalized_float(consensus) - trust = u16_normalized_float(trust) - validator_trust = u16_normalized_float(validator_trust) - dividends = u16_normalized_float(dividends) - prometheus_info = PrometheusInfo.from_dict(prometheus_info) - axon_info_ = AxonInfo.from_neuron_info( - {"hotkey": hotkey, "coldkey": coldkey, "axon_info": axon_info_} - ) - - neuron_info = NeuronInfo( - hotkey=hotkey, - coldkey=coldkey, - uid=uid, - netuid=netuid, - active=active, - rank=rank, - emission=emission, - incentive=incentive, - consensus=consensus, - trust=trust, - validator_trust=validator_trust, - dividends=dividends, - pruning_score=pruning_score, - last_update=last_update, - validator_permit=validator_permit, - stake=stake, - stake_dict=stake_dict, - total_stake=stake, - prometheus_info=prometheus_info, - axon_info=axon_info_, - weights=weights, - bonds=bonds, - is_null=False, - ) - - return neuron_info - -
    -[docs] - def neurons_lite( - self, netuid: int, block: Optional[int] = None - ) -> list[NeuronInfoLite]: - if netuid not in self.chain_state["SubtensorModule"]["NetworksAdded"]: - raise Exception("Subnet does not exist") - - neurons = [] - subnet_n = self._get_most_recent_storage( - self.chain_state["SubtensorModule"]["SubnetworkN"][netuid] - ) - for uid in range(subnet_n): - neuron_info = self.neuron_for_uid_lite(uid, netuid, block) - if neuron_info is not None: - neurons.append(neuron_info) - - return neurons
    - - -
    -[docs] - def neuron_for_uid_lite( - self, uid: int, netuid: int, block: Optional[int] = None - ) -> Optional[NeuronInfoLite]: - if uid is None: - return NeuronInfoLite.get_null_neuron() - - if block: - if self.block_number < block: - raise Exception("Cannot query block in the future") - - else: - block = self.block_number - - if netuid not in self.chain_state["SubtensorModule"]["NetworksAdded"]: - return None - - neuron_info = self._neuron_subnet_exists(uid, netuid, block) - if neuron_info is None: - # TODO Why does this return None here but a null neuron earlier? - return None - - else: - return NeuronInfoLite( - hotkey=neuron_info.hotkey, - coldkey=neuron_info.coldkey, - uid=neuron_info.uid, - netuid=neuron_info.netuid, - active=neuron_info.active, - stake=neuron_info.stake, - stake_dict=neuron_info.stake_dict, - total_stake=neuron_info.total_stake, - rank=neuron_info.rank, - emission=neuron_info.emission, - incentive=neuron_info.incentive, - consensus=neuron_info.consensus, - trust=neuron_info.trust, - validator_trust=neuron_info.validator_trust, - dividends=neuron_info.dividends, - last_update=neuron_info.last_update, - validator_permit=neuron_info.validator_permit, - prometheus_info=neuron_info.prometheus_info, - axon_info=neuron_info.axon_info, - pruning_score=neuron_info.pruning_score, - is_null=neuron_info.is_null, - )
    - - -
    -[docs] - def get_transfer_fee( - self, wallet: "Wallet", dest: str, value: Union["Balance", float, int] - ) -> "Balance": - return Balance(700)
    - - -
    -[docs] - def do_transfer( - self, - wallet: "Wallet", - dest: str, - transfer_balance: "Balance", - wait_for_inclusion: bool = True, - wait_for_finalization: bool = False, - ) -> tuple[bool, Optional[str], Optional[str]]: - bal = self.get_balance(wallet.coldkeypub.ss58_address) - dest_bal = self.get_balance(dest) - transfer_fee = self.get_transfer_fee(wallet, dest, transfer_balance) - - existential_deposit = self.get_existential_deposit() - - if bal < transfer_balance + existential_deposit + transfer_fee: - raise Exception("Insufficient balance") - - # Remove from the free balance - self.chain_state["System"]["Account"][wallet.coldkeypub.ss58_address]["data"][ - "free" - ][self.block_number] = (bal - transfer_balance - transfer_fee).rao - - # Add to the free balance - if dest not in self.chain_state["System"]["Account"]: - self.chain_state["System"]["Account"][dest] = {"data": {"free": {}}} - - self.chain_state["System"]["Account"][dest]["data"]["free"][ - self.block_number - ] = (dest_bal + transfer_balance).rao - - return True, None, None
    - - -
    -[docs] - @staticmethod - def min_required_stake(): - """ - As the minimum required stake may change, this method allows us to dynamically - update the amount in the mock without updating the tests - """ - # valid minimum threshold as of 2024/05/01 - return 100_000_000 # RAO
    - - -
    -[docs] - def do_serve_prometheus( - self, - wallet: "Wallet", - call_params: "PrometheusServeCallParams", - wait_for_inclusion: bool = False, - wait_for_finalization: bool = True, - ) -> tuple[bool, Optional[str]]: - return True, None
    - - -
    -[docs] - def do_set_weights( - self, - wallet: "Wallet", - netuid: int, - uids: int, - vals: list[int], - version_key: int, - wait_for_inclusion: bool = False, - wait_for_finalization: bool = True, - ) -> tuple[bool, Optional[str]]: - return True, None
    - - -
    -[docs] - def do_serve_axon( - self, - wallet: "Wallet", - call_params: "AxonServeCallParams", - wait_for_inclusion: bool = False, - wait_for_finalization: bool = True, - ) -> tuple[bool, Optional[str]]: - return True, None
    -
    - -
    - -
    - - - - - - -
    - -
    -
    -
    - -
    - - - - -
    -
    - - -
    - - -
    -
    -
    - - - - - -
    -
    - - \ No newline at end of file diff --git a/static/python-api/html/_modules/bittensor/utils/networking.html b/static/python-api/html/_modules/bittensor/utils/networking.html index b3a2fcb6b8..49eca351b3 100644 --- a/static/python-api/html/_modules/bittensor/utils/networking.html +++ b/static/python-api/html/_modules/bittensor/utils/networking.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    diff --git a/static/python-api/html/_modules/bittensor/utils/registration/async_pow.html b/static/python-api/html/_modules/bittensor/utils/registration/async_pow.html index 47b078349a..94b9a2f8da 100644 --- a/static/python-api/html/_modules/bittensor/utils/registration/async_pow.html +++ b/static/python-api/html/_modules/bittensor/utils/registration/async_pow.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    diff --git a/static/python-api/html/_modules/bittensor/utils/registration/pow.html b/static/python-api/html/_modules/bittensor/utils/registration/pow.html index c0c06e9d84..0d35991eaa 100644 --- a/static/python-api/html/_modules/bittensor/utils/registration/pow.html +++ b/static/python-api/html/_modules/bittensor/utils/registration/pow.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -353,8 +356,6 @@

    Source code for bittensor.utils.registration.pow

    import numpy from Crypto.Hash import keccak -from rich import console as rich_console, status as rich_status -from rich.console import Console from bittensor.utils.btlogging import logging from bittensor.utils.formatting import get_human_readable, millify @@ -897,16 +898,61 @@

    Source code for bittensor.utils.registration.pow

    +
    +[docs] +class Status: + def __init__(self, status: str): + self._status = status + +
    +[docs] + def start(self): + pass
    + + +
    +[docs] + def stop(self): + pass
    + + +
    +[docs] + def update(self, status: str): + self._status = status
    +
    + + + +
    +[docs] +class Console: +
    +[docs] + @staticmethod + def status(status: str): + return Status(status)
    + + +
    +[docs] + @staticmethod + def log(text: str): + print(text)
    +
    + + +
    [docs] class RegistrationStatisticsLogger: """Logs statistics for a registration.""" - status: Optional[rich_status.Status] + status: Optional["Status"] def __init__( self, - console: Optional[rich_console.Console] = None, + console: Optional["Console"] = None, output_in_place: bool = True, ) -> None: if console is None: diff --git a/static/python-api/html/_modules/bittensor/utils/registration/register_cuda.html b/static/python-api/html/_modules/bittensor/utils/registration/register_cuda.html index 3403610975..92ce9defa0 100644 --- a/static/python-api/html/_modules/bittensor/utils/registration/register_cuda.html +++ b/static/python-api/html/_modules/bittensor/utils/registration/register_cuda.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    diff --git a/static/python-api/html/_modules/bittensor/utils/subnets.html b/static/python-api/html/_modules/bittensor/utils/subnets.html index 6f155be11f..773056ede4 100644 --- a/static/python-api/html/_modules/bittensor/utils/subnets.html +++ b/static/python-api/html/_modules/bittensor/utils/subnets.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    diff --git a/static/python-api/html/_modules/bittensor/utils/substrate_utils/storage.html b/static/python-api/html/_modules/bittensor/utils/substrate_utils/storage.html deleted file mode 100644 index 472097f8bc..0000000000 --- a/static/python-api/html/_modules/bittensor/utils/substrate_utils/storage.html +++ /dev/null @@ -1,703 +0,0 @@ - - - - - - - - - - bittensor.utils.substrate_utils.storage — Bittensor SDK Docs documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - -
    - -
    - - - - - -
    -
    - - - - - - - - -
    - - - -
    - -
    -
    - -
    -
    - -
    - -
    - -
    - - -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - - - -
    -

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

    Source code for bittensor.utils.substrate_utils.storage

    -import binascii
    -from typing import Any, Optional
    -
    -from scalecodec import ScaleBytes, GenericMetadataVersioned, ss58_decode
    -from scalecodec.base import ScaleDecoder, RuntimeConfigurationObject, ScaleType
    -
    -from bittensor.core.errors import StorageFunctionNotFound
    -from bittensor.utils.substrate_utils.hasher import (
    -    blake2_256,
    -    two_x64_concat,
    -    xxh128,
    -    blake2_128,
    -    blake2_128_concat,
    -    identity,
    -)
    -
    -
    -
    -[docs] -class StorageKey: - """ - A StorageKey instance is a representation of a single state entry. - - Substrate uses a simple key-value data store implemented as a database-backed, modified Merkle tree. - All of Substrate's higher-level storage abstractions are built on top of this simple key-value store. - """ - - def __init__( - self, - pallet: Optional[str], - storage_function: Optional[str], - params: Optional[list], - data: Optional[bytes], - value_scale_type: Optional[str], - metadata: GenericMetadataVersioned, - runtime_config: RuntimeConfigurationObject, - ): - self.pallet = pallet - self.storage_function = storage_function - self.params = params - self.params_encoded = [] - self.data = data - self.metadata = metadata - self.runtime_config = runtime_config - self.value_scale_type = value_scale_type - self.metadata_storage_function = None - -
    -[docs] - @classmethod - def create_from_data( - cls, - data: bytes, - runtime_config: RuntimeConfigurationObject, - metadata: GenericMetadataVersioned, - value_scale_type: str = None, - pallet: str = None, - storage_function: str = None, - ) -> "StorageKey": - """ - Create a StorageKey instance providing raw storage key bytes - - Args: - data: bytes representation of the storage key - runtime_config: RuntimeConfigurationObject - metadata: GenericMetadataVersioned - value_scale_type: type string of to decode result data - pallet: name of pallet - storage_function: name of storage function - - Returns: - StorageKey - """ - if not value_scale_type and pallet and storage_function: - metadata_pallet = metadata.get_metadata_pallet(pallet) - - if not metadata_pallet: - raise StorageFunctionNotFound(f'Pallet "{pallet}" not found') - - storage_item = metadata_pallet.get_storage_function(storage_function) - - if not storage_item: - raise StorageFunctionNotFound( - f'Storage function "{pallet}.{storage_function}" not found' - ) - - # Process specific type of storage function - value_scale_type = storage_item.get_value_type_string() - - return cls( - pallet=None, - storage_function=None, - params=None, - data=data, - metadata=metadata, - value_scale_type=value_scale_type, - runtime_config=runtime_config, - )
    - - -
    -[docs] - @classmethod - def create_from_storage_function( - cls, - pallet: str, - storage_function: str, - params: list, - runtime_config: RuntimeConfigurationObject, - metadata: GenericMetadataVersioned, - ) -> "StorageKey": - """ - Create a StorageKey instance providing storage function details - - Args: - pallet: name of pallet - storage_function: name of storage function - params: Optional list of parameters in case of a Mapped storage function - runtime_config: RuntimeConfigurationObject - metadata: GenericMetadataVersioned - - Returns: - StorageKey - """ - storage_key_obj = cls( - pallet=pallet, - storage_function=storage_function, - params=params, - data=None, - runtime_config=runtime_config, - metadata=metadata, - value_scale_type=None, - ) - - storage_key_obj.generate() - - return storage_key_obj
    - - -
    -[docs] - def convert_storage_parameter(self, scale_type: str, value: Any): - if type(value) is bytes: - value = f"0x{value.hex()}" - - if scale_type == "AccountId": - if value[0:2] != "0x": - return "0x{}".format( - ss58_decode(value, self.runtime_config.ss58_format) - ) - - return value
    - - -
    -[docs] - def to_hex(self) -> Optional[str]: - """ - Returns a Hex-string representation of current StorageKey data - - Returns: - Hex string - """ - if self.data: - return f"0x{self.data.hex()}"
    - - -
    -[docs] - def generate(self) -> bytes: - """ - Generate a storage key for current specified pallet/function/params - """ - - # Search storage call in metadata - metadata_pallet = self.metadata.get_metadata_pallet(self.pallet) - - if not metadata_pallet: - raise StorageFunctionNotFound(f'Pallet "{self.pallet}" not found') - - self.metadata_storage_function = metadata_pallet.get_storage_function( - self.storage_function - ) - - if not self.metadata_storage_function: - raise StorageFunctionNotFound( - f'Storage function "{self.pallet}.{self.storage_function}" not found' - ) - - # Process specific type of storage function - self.value_scale_type = self.metadata_storage_function.get_value_type_string() - param_types = self.metadata_storage_function.get_params_type_string() - - hashers = self.metadata_storage_function.get_param_hashers() - - storage_hash = xxh128( - metadata_pallet.value["storage"]["prefix"].encode() - ) + xxh128(self.storage_function.encode()) - - # Encode parameters - self.params_encoded = [] - if self.params: - for idx, param in enumerate(self.params): - if type(param) is ScaleBytes: - # Already encoded - self.params_encoded.append(param) - else: - param = self.convert_storage_parameter(param_types[idx], param) - param_obj = self.runtime_config.create_scale_object( - type_string=param_types[idx] - ) - self.params_encoded.append(param_obj.encode(param)) - - for idx, param in enumerate(self.params_encoded): - # Get hasher associated with param - try: - param_hasher = hashers[idx] - except IndexError: - raise ValueError(f"No hasher found for param #{idx + 1}") - - params_key = bytes() - - # Convert param to bytes - if type(param) is str: - params_key += binascii.unhexlify(param) - elif type(param) is ScaleBytes: - params_key += param.data - elif isinstance(param, ScaleDecoder): - params_key += param.data.data - - if not param_hasher: - param_hasher = "Twox128" - - if param_hasher == "Blake2_256": - storage_hash += blake2_256(params_key) - - elif param_hasher == "Blake2_128": - storage_hash += blake2_128(params_key) - - elif param_hasher == "Blake2_128Concat": - storage_hash += blake2_128_concat(params_key) - - elif param_hasher == "Twox128": - storage_hash += xxh128(params_key) - - elif param_hasher == "Twox64Concat": - storage_hash += two_x64_concat(params_key) - - elif param_hasher == "Identity": - storage_hash += identity(params_key) - - else: - raise ValueError('Unknown storage hasher "{}"'.format(param_hasher)) - - self.data = storage_hash - - return self.data
    - - -
    -[docs] - def decode_scale_value(self, data: Optional[ScaleBytes] = None) -> ScaleType: - result_found = False - - if data is not None: - change_scale_type = self.value_scale_type - result_found = True - elif self.metadata_storage_function.value["modifier"] == "Default": - # Fallback to default value of storage function if no result - change_scale_type = self.value_scale_type - data = ScaleBytes( - self.metadata_storage_function.value_object["default"].value_object - ) - else: - # No result is interpreted as an Option<...> result - change_scale_type = f"Option<{self.value_scale_type}>" - data = ScaleBytes( - self.metadata_storage_function.value_object["default"].value_object - ) - - # Decode SCALE result data - updated_obj = self.runtime_config.create_scale_object( - type_string=change_scale_type, data=data, metadata=self.metadata - ) - updated_obj.decode() - updated_obj.meta_info = {"result_found": result_found} - - return updated_obj
    - - - def __repr__(self): - if self.pallet and self.storage_function: - return f"<StorageKey(pallet={self.pallet}, storage_function={self.storage_function}, params={self.params})>" - elif self.data: - return f"<StorageKey(data=0x{self.data.hex()})>" - else: - return repr(self)
    - -
    - -
    - - - - - - -
    - -
    -
    -
    - -
    - - - - -
    -
    - - -
    - - -
    -
    -
    - - - - - -
    -
    - - \ No newline at end of file diff --git a/static/python-api/html/_modules/bittensor/utils/version.html b/static/python-api/html/_modules/bittensor/utils/version.html deleted file mode 100644 index 7094680dd4..0000000000 --- a/static/python-api/html/_modules/bittensor/utils/version.html +++ /dev/null @@ -1,534 +0,0 @@ - - - - - - - - - - bittensor.utils.version — Bittensor SDK Docs documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - -
    - -
    - - - - - -
    -
    - - - - - - - - -
    - - - -
    - -
    -
    - -
    -
    - -
    - -
    - -
    - - -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - - - -
    -

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

    Source code for bittensor.utils.version

    -import time
    -from pathlib import Path
    -from typing import Optional
    -
    -import requests
    -from packaging.version import Version
    -
    -from bittensor.core.settings import __version__, PIPADDRESS
    -from bittensor.utils.btlogging import logging
    -
    -VERSION_CHECK_THRESHOLD = 86400
    -
    -
    -
    -[docs] -class VersionCheckError(Exception): - """Exception raised for errors in the version check process."""
    - - - -def _get_version_file_path() -> Path: - return Path.home() / ".bittensor" / ".last_known_version" - - -def _get_version_from_file(version_file: Path) -> Optional[str]: - try: - mtime = version_file.stat().st_mtime - logging.debug(f"Found version file, last modified: {mtime}") - diff = time.time() - mtime - - if diff >= VERSION_CHECK_THRESHOLD: - logging.debug("Version file expired") - return None - - return version_file.read_text() - except FileNotFoundError: - logging.debug("No bittensor version file found") - return None - except OSError: - logging.exception("Failed to read version file") - return None - - -def _get_version_from_pypi(timeout: int = 15) -> str: - logging.debug(f"Checking latest Bittensor version at: {PIPADDRESS}") - try: - response = requests.get(PIPADDRESS, timeout=timeout) - latest_version = response.json()["info"]["version"] - return latest_version - except requests.exceptions.RequestException: - logging.exception("Failed to get latest version from pypi") - raise - - -
    -[docs] -def get_and_save_latest_version(timeout: int = 15) -> str: - """ - Retrieves and saves the latest version of Bittensor. - - Args: - timeout (int): The timeout for the request to PyPI in seconds. Default is ``15``. - - Returns: - str: The latest version of Bittensor. - """ - version_file = _get_version_file_path() - - if last_known_version := _get_version_from_file(version_file): - return last_known_version - - latest_version = _get_version_from_pypi(timeout) - - try: - version_file.write_text(latest_version) - except OSError: - logging.exception("Failed to save latest version to file") - - return latest_version
    - - - -
    -[docs] -def check_version(timeout: int = 15): - """ - Check if the current version of Bittensor is up-to-date with the latest version on PyPi. - Raises a VersionCheckError if the version check fails. - - Args: - timeout (int): The timeout for the request to PyPI in seconds. Default is ``15``. - """ - - try: - latest_version = get_and_save_latest_version(timeout) - - if Version(latest_version) > Version(__version__): - print( - f"\u001b[33mBittensor Version: Current {__version__}/Latest {latest_version}\n" - f"Please update to the latest version at your earliest convenience. " - "Run the following command to upgrade:\n\n\u001b[0mpython -m pip install --upgrade bittensor" - ) - pass - except Exception as e: - raise VersionCheckError("Version check failed") from e
    - - - -
    -[docs] -def version_checking(timeout: int = 15): - """Deprecated, kept for backwards compatibility. Use check_version() instead. - - Args: - timeout (int): The timeout for calling :func:``check_version`` function. Default is ``15``. - """ - - from warnings import warn - - warn( - "version_checking() is deprecated, please use check_version() instead", - DeprecationWarning, - ) - - try: - check_version(timeout) - except VersionCheckError: - logging.exception("Version check failed")
    - -
    - -
    - - - - - - -
    - -
    -
    -
    - -
    - - - - -
    -
    - - -
    - - -
    -
    -
    - - - - - -
    -
    - - \ No newline at end of file diff --git a/static/python-api/html/_modules/bittensor/utils/weight_utils.html b/static/python-api/html/_modules/bittensor/utils/weight_utils.html index f49527e09b..71f5a0b596 100644 --- a/static/python-api/html/_modules/bittensor/utils/weight_utils.html +++ b/static/python-api/html/_modules/bittensor/utils/weight_utils.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -598,7 +601,6 @@

    Source code for bittensor.utils.weight_utils

        """
     
         logging.debug("process_weights_for_netuid()")
    -    logging.debug(f"weights: {weights}")
         logging.debug(f"netuid {netuid}")
         logging.debug(f"subtensor: {subtensor}")
         logging.debug(f"metagraph: {metagraph}")
    @@ -607,6 +609,51 @@ 

    Source code for bittensor.utils.weight_utils

    if metagraph is None:
             metagraph = subtensor.metagraph(netuid)
     
    +    return process_weights(
    +        uids=uids,
    +        weights=weights,
    +        num_neurons=metagraph.n,
    +        min_allowed_weights=subtensor.min_allowed_weights(netuid=netuid),
    +        max_weight_limit=subtensor.max_weight_limit(netuid=netuid),
    +        exclude_quantile=exclude_quantile,
    +    )
    + + + +
    +[docs] +def process_weights( + uids: Union[NDArray[np.int64], "torch.Tensor"], + weights: Union[NDArray[np.float32], "torch.Tensor"], + num_neurons: int, + min_allowed_weights: Optional[int], + max_weight_limit: Optional[float], + exclude_quantile: int = 0, +) -> Union[ + tuple["torch.Tensor", "torch.FloatTensor"], + tuple[NDArray[np.int64], NDArray[np.float32]], +]: + """ + Processes weight tensors for a given weights and UID arrays and hyperparams, applying constraints + and normalization based on the subtensor and metagraph data. This function can handle both NumPy arrays and PyTorch + tensors. + + Args: + uids (Union[NDArray[np.int64], "torch.Tensor"]): Array of unique identifiers of the neurons. + weights (Union[NDArray[np.float32], "torch.Tensor"]): Array of weights associated with the user IDs. + num_neurons (int): The number of neurons in the network. + min_allowed_weights (Optional[int]): Subnet hyperparam Minimum number of allowed weights. + max_weight_limit (Optional[float]): Subnet hyperparam Maximum weight limit. + exclude_quantile (int): Quantile threshold for excluding lower weights. Defaults to ``0``. + + Returns: + Union[tuple["torch.Tensor", "torch.FloatTensor"], tuple[NDArray[np.int64], NDArray[np.float32]]]: tuple + containing the array of user IDs and the corresponding normalized weights. The data type of the return + matches the type of the input weights (NumPy or PyTorch). + """ + logging.debug("process_weights()") + logging.debug(f"weights: {weights}") + # Cast weights to floats. if use_torch(): if not isinstance(weights, torch.FloatTensor): @@ -618,8 +665,6 @@

    Source code for bittensor.utils.weight_utils

    # Network configuration parameters from an subtensor.
         # These parameters determine the range of acceptable weights for each neuron.
         quantile = exclude_quantile / U16_MAX
    -    min_allowed_weights = subtensor.min_allowed_weights(netuid=netuid)
    -    max_weight_limit = subtensor.max_weight_limit(netuid=netuid)
         logging.debug(f"quantile: {quantile}")
         logging.debug(f"min_allowed_weights: {min_allowed_weights}")
         logging.debug(f"max_weight_limit: {max_weight_limit}")
    @@ -633,12 +678,12 @@ 

    Source code for bittensor.utils.weight_utils

    non_zero_weight_uids = uids[non_zero_weight_idx]
         non_zero_weights = weights[non_zero_weight_idx]
         nzw_size = non_zero_weights.numel() if use_torch() else non_zero_weights.size
    -    if nzw_size == 0 or metagraph.n < min_allowed_weights:
    +    if nzw_size == 0 or num_neurons < min_allowed_weights:
             logging.warning("No non-zero weights returning all ones.")
             final_weights = (
    -            torch.ones((metagraph.n)).to(metagraph.n) / metagraph.n
    +            torch.ones(num_neurons).to(num_neurons) / num_neurons
                 if use_torch()
    -            else np.ones((metagraph.n), dtype=np.int64) / metagraph.n
    +            else np.ones(num_neurons, dtype=np.int64) / num_neurons
             )
             logging.debug(f"final_weights: {final_weights}")
             final_weights_count = (
    @@ -656,11 +701,11 @@ 

    Source code for bittensor.utils.weight_utils

    logging.warning(
                 "No non-zero weights less then min allowed weight, returning all ones."
             )
    -        # ( const ): Should this be np.zeros( ( metagraph.n ) ) to reset everyone to build up weight?
    +        # ( const ): Should this be np.zeros( ( num_neurons ) ) to reset everyone to build up weight?
             weights = (
    -            torch.ones((metagraph.n)).to(metagraph.n) * 1e-5
    +            torch.ones(num_neurons).to(num_neurons) * 1e-5
                 if use_torch()
    -            else np.ones((metagraph.n), dtype=np.int64) * 1e-5
    +            else np.ones(num_neurons, dtype=np.int64) * 1e-5
             )  # creating minimum even non-zero weights
             weights[non_zero_weight_idx] += non_zero_weights
             logging.debug(f"final_weights: {weights}")
    @@ -758,6 +803,51 @@ 

    Source code for bittensor.utils.weight_utils

    return commit_hash
    + + +
    +[docs] +def convert_uids_and_weights( + uids: Union[NDArray[np.int64], list], + weights: Union[NDArray[np.float32], list], +) -> tuple[np.ndarray, np.ndarray]: + """Converts netuids and weights to numpy arrays if they are not already. + + Arguments: + uids (Union[NDArray[np.int64], list]): The uint64 uids of destination neurons. + weights (Union[NDArray[np.float32], list]): The weights to set. These must be floated. + + Returns: + tuple[ndarray, ndarray]: Bytes converted netuids and weights. + """ + if isinstance(uids, list): + uids = np.array(uids, dtype=np.int64) + if isinstance(weights, list): + weights = np.array(weights, dtype=np.float32) + return uids, weights
    + + + +
    +[docs] +def convert_and_normalize_weights_and_uids( + uids: Union[NDArray[np.int64], "torch.LongTensor", list], + weights: Union[NDArray[np.float32], "torch.FloatTensor", list], +) -> tuple[list[int], list[int]]: + """Converts weights and uids to numpy arrays if they are not already. + + Arguments: + uids (Union[NDArray[np.int64], torch.LongTensor, list]): The ``uint64`` uids of destination neurons. + weights (Union[NDArray[np.float32], torch.FloatTensor, list]): The weights to set. These must be ``float`` s + and correspond to the passed ``uid`` s. + + Returns: + weight_uids, weight_vals: Bytes converted weights and uids + """ + + # Reformat and normalize and return + return convert_weights_and_uids_for_emit(*convert_uids_and_weights(uids, weights))
    +
    diff --git a/static/python-api/html/_modules/index.html b/static/python-api/html/_modules/index.html index 67d8bb7fa7..bb4934ee3f 100644 --- a/static/python-api/html/_modules/index.html +++ b/static/python-api/html/_modules/index.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -361,23 +364,25 @@

    All modules for which code is available

  • bittensor.core.config
  • bittensor.core.dendrite
  • bittensor.core.errors
  • -
  • bittensor.core.extrinsics.asyncex.commit_reveal
  • +
  • bittensor.core.extrinsics.asyncex.children
  • +
  • bittensor.core.extrinsics.asyncex.liquidity
  • bittensor.core.extrinsics.asyncex.move_stake
  • bittensor.core.extrinsics.asyncex.registration
  • bittensor.core.extrinsics.asyncex.root
  • bittensor.core.extrinsics.asyncex.serving
  • bittensor.core.extrinsics.asyncex.staking
  • +
  • bittensor.core.extrinsics.asyncex.start_call
  • bittensor.core.extrinsics.asyncex.transfer
  • bittensor.core.extrinsics.asyncex.unstaking
  • bittensor.core.extrinsics.asyncex.weights
  • -
  • bittensor.core.extrinsics.commit_reveal
  • -
  • bittensor.core.extrinsics.commit_weights
  • +
  • bittensor.core.extrinsics.children
  • +
  • bittensor.core.extrinsics.liquidity
  • bittensor.core.extrinsics.move_stake
  • bittensor.core.extrinsics.registration
  • bittensor.core.extrinsics.root
  • bittensor.core.extrinsics.serving
  • -
  • bittensor.core.extrinsics.set_weights
  • bittensor.core.extrinsics.staking
  • +
  • bittensor.core.extrinsics.start_call
  • bittensor.core.extrinsics.transfer
  • bittensor.core.extrinsics.unstaking
  • bittensor.core.extrinsics.utils
  • @@ -395,20 +400,15 @@

    All modules for which code is available

  • bittensor.utils.btlogging.format
  • bittensor.utils.btlogging.helpers
  • bittensor.utils.btlogging.loggingmachine
  • -
  • bittensor.utils.easy_imports
  • bittensor.utils.formatting
  • -
  • bittensor.utils.mock.subtensor_mock
  • +
  • bittensor.utils.liquidity
  • bittensor.utils.networking
  • bittensor.utils.registration.async_pow
  • bittensor.utils.registration.pow
  • bittensor.utils.registration.register_cuda
  • bittensor.utils.subnets
  • -
  • bittensor.utils.substrate_utils.hasher
  • -
  • bittensor.utils.substrate_utils.storage
  • -
  • bittensor.utils.version
  • bittensor.utils.weight_utils
  • builtins
  • -
  • rich.console
  • scalecodec.utils.ss58
  • diff --git a/static/python-api/html/_modules/rich/console.html b/static/python-api/html/_modules/rich/console.html deleted file mode 100644 index 09f222b224..0000000000 --- a/static/python-api/html/_modules/rich/console.html +++ /dev/null @@ -1,3075 +0,0 @@ - - - - - - - - - - rich.console — Bittensor SDK Docs documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - -
    - -
    - - - - - -
    -
    - - - - - - - - -
    - - - -
    - -
    -
    - -
    -
    - -
    - -
    - -
    - - -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - - - -
    -

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

    Source code for rich.console

    -import inspect
    -import os
    -import sys
    -import threading
    -import zlib
    -from abc import ABC, abstractmethod
    -from dataclasses import dataclass, field
    -from datetime import datetime
    -from functools import wraps
    -from getpass import getpass
    -from html import escape
    -from inspect import isclass
    -from itertools import islice
    -from math import ceil
    -from time import monotonic
    -from types import FrameType, ModuleType, TracebackType
    -from typing import (
    -    IO,
    -    TYPE_CHECKING,
    -    Any,
    -    Callable,
    -    Dict,
    -    Iterable,
    -    List,
    -    Mapping,
    -    NamedTuple,
    -    Optional,
    -    TextIO,
    -    Tuple,
    -    Type,
    -    Union,
    -    cast,
    -)
    -
    -from rich._null_file import NULL_FILE
    -
    -if sys.version_info >= (3, 8):
    -    from typing import Literal, Protocol, runtime_checkable
    -else:
    -    from typing_extensions import (
    -        Literal,
    -        Protocol,
    -        runtime_checkable,
    -    )  # pragma: no cover
    -
    -from . import errors, themes
    -from ._emoji_replace import _emoji_replace
    -from ._export_format import CONSOLE_HTML_FORMAT, CONSOLE_SVG_FORMAT
    -from ._fileno import get_fileno
    -from ._log_render import FormatTimeCallable, LogRender
    -from .align import Align, AlignMethod
    -from .color import ColorSystem, blend_rgb
    -from .control import Control
    -from .emoji import EmojiVariant
    -from .highlighter import NullHighlighter, ReprHighlighter
    -from .markup import render as render_markup
    -from .measure import Measurement, measure_renderables
    -from .pager import Pager, SystemPager
    -from .pretty import Pretty, is_expandable
    -from .protocol import rich_cast
    -from .region import Region
    -from .scope import render_scope
    -from .screen import Screen
    -from .segment import Segment
    -from .style import Style, StyleType
    -from .styled import Styled
    -from .terminal_theme import DEFAULT_TERMINAL_THEME, SVG_EXPORT_THEME, TerminalTheme
    -from .text import Text, TextType
    -from .theme import Theme, ThemeStack
    -
    -if TYPE_CHECKING:
    -    from ._windows import WindowsConsoleFeatures
    -    from .live import Live
    -    from .status import Status
    -
    -JUPYTER_DEFAULT_COLUMNS = 115
    -JUPYTER_DEFAULT_LINES = 100
    -WINDOWS = sys.platform == "win32"
    -
    -HighlighterType = Callable[[Union[str, "Text"]], "Text"]
    -JustifyMethod = Literal["default", "left", "center", "right", "full"]
    -OverflowMethod = Literal["fold", "crop", "ellipsis", "ignore"]
    -
    -
    -class NoChange:
    -    pass
    -
    -
    -NO_CHANGE = NoChange()
    -
    -try:
    -    _STDIN_FILENO = sys.__stdin__.fileno()  # type: ignore[union-attr]
    -except Exception:
    -    _STDIN_FILENO = 0
    -try:
    -    _STDOUT_FILENO = sys.__stdout__.fileno()  # type: ignore[union-attr]
    -except Exception:
    -    _STDOUT_FILENO = 1
    -try:
    -    _STDERR_FILENO = sys.__stderr__.fileno()  # type: ignore[union-attr]
    -except Exception:
    -    _STDERR_FILENO = 2
    -
    -_STD_STREAMS = (_STDIN_FILENO, _STDOUT_FILENO, _STDERR_FILENO)
    -_STD_STREAMS_OUTPUT = (_STDOUT_FILENO, _STDERR_FILENO)
    -
    -
    -_TERM_COLORS = {
    -    "kitty": ColorSystem.EIGHT_BIT,
    -    "256color": ColorSystem.EIGHT_BIT,
    -    "16color": ColorSystem.STANDARD,
    -}
    -
    -
    -class ConsoleDimensions(NamedTuple):
    -    """Size of the terminal."""
    -
    -    width: int
    -    """The width of the console in 'cells'."""
    -    height: int
    -    """The height of the console in lines."""
    -
    -
    -@dataclass
    -class ConsoleOptions:
    -    """Options for __rich_console__ method."""
    -
    -    size: ConsoleDimensions
    -    """Size of console."""
    -    legacy_windows: bool
    -    """legacy_windows: flag for legacy windows."""
    -    min_width: int
    -    """Minimum width of renderable."""
    -    max_width: int
    -    """Maximum width of renderable."""
    -    is_terminal: bool
    -    """True if the target is a terminal, otherwise False."""
    -    encoding: str
    -    """Encoding of terminal."""
    -    max_height: int
    -    """Height of container (starts as terminal)"""
    -    justify: Optional[JustifyMethod] = None
    -    """Justify value override for renderable."""
    -    overflow: Optional[OverflowMethod] = None
    -    """Overflow value override for renderable."""
    -    no_wrap: Optional[bool] = False
    -    """Disable wrapping for text."""
    -    highlight: Optional[bool] = None
    -    """Highlight override for render_str."""
    -    markup: Optional[bool] = None
    -    """Enable markup when rendering strings."""
    -    height: Optional[int] = None
    -
    -    @property
    -    def ascii_only(self) -> bool:
    -        """Check if renderables should use ascii only."""
    -        return not self.encoding.startswith("utf")
    -
    -    def copy(self) -> "ConsoleOptions":
    -        """Return a copy of the options.
    -
    -        Returns:
    -            ConsoleOptions: a copy of self.
    -        """
    -        options: ConsoleOptions = ConsoleOptions.__new__(ConsoleOptions)
    -        options.__dict__ = self.__dict__.copy()
    -        return options
    -
    -    def update(
    -        self,
    -        *,
    -        width: Union[int, NoChange] = NO_CHANGE,
    -        min_width: Union[int, NoChange] = NO_CHANGE,
    -        max_width: Union[int, NoChange] = NO_CHANGE,
    -        justify: Union[Optional[JustifyMethod], NoChange] = NO_CHANGE,
    -        overflow: Union[Optional[OverflowMethod], NoChange] = NO_CHANGE,
    -        no_wrap: Union[Optional[bool], NoChange] = NO_CHANGE,
    -        highlight: Union[Optional[bool], NoChange] = NO_CHANGE,
    -        markup: Union[Optional[bool], NoChange] = NO_CHANGE,
    -        height: Union[Optional[int], NoChange] = NO_CHANGE,
    -    ) -> "ConsoleOptions":
    -        """Update values, return a copy."""
    -        options = self.copy()
    -        if not isinstance(width, NoChange):
    -            options.min_width = options.max_width = max(0, width)
    -        if not isinstance(min_width, NoChange):
    -            options.min_width = min_width
    -        if not isinstance(max_width, NoChange):
    -            options.max_width = max_width
    -        if not isinstance(justify, NoChange):
    -            options.justify = justify
    -        if not isinstance(overflow, NoChange):
    -            options.overflow = overflow
    -        if not isinstance(no_wrap, NoChange):
    -            options.no_wrap = no_wrap
    -        if not isinstance(highlight, NoChange):
    -            options.highlight = highlight
    -        if not isinstance(markup, NoChange):
    -            options.markup = markup
    -        if not isinstance(height, NoChange):
    -            if height is not None:
    -                options.max_height = height
    -            options.height = None if height is None else max(0, height)
    -        return options
    -
    -    def update_width(self, width: int) -> "ConsoleOptions":
    -        """Update just the width, return a copy.
    -
    -        Args:
    -            width (int): New width (sets both min_width and max_width)
    -
    -        Returns:
    -            ~ConsoleOptions: New console options instance.
    -        """
    -        options = self.copy()
    -        options.min_width = options.max_width = max(0, width)
    -        return options
    -
    -    def update_height(self, height: int) -> "ConsoleOptions":
    -        """Update the height, and return a copy.
    -
    -        Args:
    -            height (int): New height
    -
    -        Returns:
    -            ~ConsoleOptions: New Console options instance.
    -        """
    -        options = self.copy()
    -        options.max_height = options.height = height
    -        return options
    -
    -    def reset_height(self) -> "ConsoleOptions":
    -        """Return a copy of the options with height set to ``None``.
    -
    -        Returns:
    -            ~ConsoleOptions: New console options instance.
    -        """
    -        options = self.copy()
    -        options.height = None
    -        return options
    -
    -    def update_dimensions(self, width: int, height: int) -> "ConsoleOptions":
    -        """Update the width and height, and return a copy.
    -
    -        Args:
    -            width (int): New width (sets both min_width and max_width).
    -            height (int): New height.
    -
    -        Returns:
    -            ~ConsoleOptions: New console options instance.
    -        """
    -        options = self.copy()
    -        options.min_width = options.max_width = max(0, width)
    -        options.height = options.max_height = height
    -        return options
    -
    -
    -@runtime_checkable
    -class RichCast(Protocol):
    -    """An object that may be 'cast' to a console renderable."""
    -
    -    def __rich__(
    -        self,
    -    ) -> Union["ConsoleRenderable", "RichCast", str]:  # pragma: no cover
    -        ...
    -
    -
    -@runtime_checkable
    -class ConsoleRenderable(Protocol):
    -    """An object that supports the console protocol."""
    -
    -    def __rich_console__(
    -        self, console: "Console", options: "ConsoleOptions"
    -    ) -> "RenderResult":  # pragma: no cover
    -        ...
    -
    -
    -# A type that may be rendered by Console.
    -RenderableType = Union[ConsoleRenderable, RichCast, str]
    -"""A string or any object that may be rendered by Rich."""
    -
    -# The result of calling a __rich_console__ method.
    -RenderResult = Iterable[Union[RenderableType, Segment]]
    -
    -_null_highlighter = NullHighlighter()
    -
    -
    -class CaptureError(Exception):
    -    """An error in the Capture context manager."""
    -
    -
    -class NewLine:
    -    """A renderable to generate new line(s)"""
    -
    -    def __init__(self, count: int = 1) -> None:
    -        self.count = count
    -
    -    def __rich_console__(
    -        self, console: "Console", options: "ConsoleOptions"
    -    ) -> Iterable[Segment]:
    -        yield Segment("\n" * self.count)
    -
    -
    -class ScreenUpdate:
    -    """Render a list of lines at a given offset."""
    -
    -    def __init__(self, lines: List[List[Segment]], x: int, y: int) -> None:
    -        self._lines = lines
    -        self.x = x
    -        self.y = y
    -
    -    def __rich_console__(
    -        self, console: "Console", options: ConsoleOptions
    -    ) -> RenderResult:
    -        x = self.x
    -        move_to = Control.move_to
    -        for offset, line in enumerate(self._lines, self.y):
    -            yield move_to(x, offset)
    -            yield from line
    -
    -
    -class Capture:
    -    """Context manager to capture the result of printing to the console.
    -    See :meth:`~rich.console.Console.capture` for how to use.
    -
    -    Args:
    -        console (Console): A console instance to capture output.
    -    """
    -
    -    def __init__(self, console: "Console") -> None:
    -        self._console = console
    -        self._result: Optional[str] = None
    -
    -    def __enter__(self) -> "Capture":
    -        self._console.begin_capture()
    -        return self
    -
    -    def __exit__(
    -        self,
    -        exc_type: Optional[Type[BaseException]],
    -        exc_val: Optional[BaseException],
    -        exc_tb: Optional[TracebackType],
    -    ) -> None:
    -        self._result = self._console.end_capture()
    -
    -    def get(self) -> str:
    -        """Get the result of the capture."""
    -        if self._result is None:
    -            raise CaptureError(
    -                "Capture result is not available until context manager exits."
    -            )
    -        return self._result
    -
    -
    -class ThemeContext:
    -    """A context manager to use a temporary theme. See :meth:`~rich.console.Console.use_theme` for usage."""
    -
    -    def __init__(self, console: "Console", theme: Theme, inherit: bool = True) -> None:
    -        self.console = console
    -        self.theme = theme
    -        self.inherit = inherit
    -
    -    def __enter__(self) -> "ThemeContext":
    -        self.console.push_theme(self.theme)
    -        return self
    -
    -    def __exit__(
    -        self,
    -        exc_type: Optional[Type[BaseException]],
    -        exc_val: Optional[BaseException],
    -        exc_tb: Optional[TracebackType],
    -    ) -> None:
    -        self.console.pop_theme()
    -
    -
    -class PagerContext:
    -    """A context manager that 'pages' content. See :meth:`~rich.console.Console.pager` for usage."""
    -
    -    def __init__(
    -        self,
    -        console: "Console",
    -        pager: Optional[Pager] = None,
    -        styles: bool = False,
    -        links: bool = False,
    -    ) -> None:
    -        self._console = console
    -        self.pager = SystemPager() if pager is None else pager
    -        self.styles = styles
    -        self.links = links
    -
    -    def __enter__(self) -> "PagerContext":
    -        self._console._enter_buffer()
    -        return self
    -
    -    def __exit__(
    -        self,
    -        exc_type: Optional[Type[BaseException]],
    -        exc_val: Optional[BaseException],
    -        exc_tb: Optional[TracebackType],
    -    ) -> None:
    -        if exc_type is None:
    -            with self._console._lock:
    -                buffer: List[Segment] = self._console._buffer[:]
    -                del self._console._buffer[:]
    -                segments: Iterable[Segment] = buffer
    -                if not self.styles:
    -                    segments = Segment.strip_styles(segments)
    -                elif not self.links:
    -                    segments = Segment.strip_links(segments)
    -                content = self._console._render_buffer(segments)
    -            self.pager.show(content)
    -        self._console._exit_buffer()
    -
    -
    -class ScreenContext:
    -    """A context manager that enables an alternative screen. See :meth:`~rich.console.Console.screen` for usage."""
    -
    -    def __init__(
    -        self, console: "Console", hide_cursor: bool, style: StyleType = ""
    -    ) -> None:
    -        self.console = console
    -        self.hide_cursor = hide_cursor
    -        self.screen = Screen(style=style)
    -        self._changed = False
    -
    -    def update(
    -        self, *renderables: RenderableType, style: Optional[StyleType] = None
    -    ) -> None:
    -        """Update the screen.
    -
    -        Args:
    -            renderable (RenderableType, optional): Optional renderable to replace current renderable,
    -                or None for no change. Defaults to None.
    -            style: (Style, optional): Replacement style, or None for no change. Defaults to None.
    -        """
    -        if renderables:
    -            self.screen.renderable = (
    -                Group(*renderables) if len(renderables) > 1 else renderables[0]
    -            )
    -        if style is not None:
    -            self.screen.style = style
    -        self.console.print(self.screen, end="")
    -
    -    def __enter__(self) -> "ScreenContext":
    -        self._changed = self.console.set_alt_screen(True)
    -        if self._changed and self.hide_cursor:
    -            self.console.show_cursor(False)
    -        return self
    -
    -    def __exit__(
    -        self,
    -        exc_type: Optional[Type[BaseException]],
    -        exc_val: Optional[BaseException],
    -        exc_tb: Optional[TracebackType],
    -    ) -> None:
    -        if self._changed:
    -            self.console.set_alt_screen(False)
    -            if self.hide_cursor:
    -                self.console.show_cursor(True)
    -
    -
    -class Group:
    -    """Takes a group of renderables and returns a renderable object that renders the group.
    -
    -    Args:
    -        renderables (Iterable[RenderableType]): An iterable of renderable objects.
    -        fit (bool, optional): Fit dimension of group to contents, or fill available space. Defaults to True.
    -    """
    -
    -    def __init__(self, *renderables: "RenderableType", fit: bool = True) -> None:
    -        self._renderables = renderables
    -        self.fit = fit
    -        self._render: Optional[List[RenderableType]] = None
    -
    -    @property
    -    def renderables(self) -> List["RenderableType"]:
    -        if self._render is None:
    -            self._render = list(self._renderables)
    -        return self._render
    -
    -    def __rich_measure__(
    -        self, console: "Console", options: "ConsoleOptions"
    -    ) -> "Measurement":
    -        if self.fit:
    -            return measure_renderables(console, options, self.renderables)
    -        else:
    -            return Measurement(options.max_width, options.max_width)
    -
    -    def __rich_console__(
    -        self, console: "Console", options: "ConsoleOptions"
    -    ) -> RenderResult:
    -        yield from self.renderables
    -
    -
    -def group(fit: bool = True) -> Callable[..., Callable[..., Group]]:
    -    """A decorator that turns an iterable of renderables in to a group.
    -
    -    Args:
    -        fit (bool, optional): Fit dimension of group to contents, or fill available space. Defaults to True.
    -    """
    -
    -    def decorator(
    -        method: Callable[..., Iterable[RenderableType]]
    -    ) -> Callable[..., Group]:
    -        """Convert a method that returns an iterable of renderables in to a Group."""
    -
    -        @wraps(method)
    -        def _replace(*args: Any, **kwargs: Any) -> Group:
    -            renderables = method(*args, **kwargs)
    -            return Group(*renderables, fit=fit)
    -
    -        return _replace
    -
    -    return decorator
    -
    -
    -def _is_jupyter() -> bool:  # pragma: no cover
    -    """Check if we're running in a Jupyter notebook."""
    -    try:
    -        get_ipython  # type: ignore[name-defined]
    -    except NameError:
    -        return False
    -    ipython = get_ipython()  # type: ignore[name-defined]
    -    shell = ipython.__class__.__name__
    -    if (
    -        "google.colab" in str(ipython.__class__)
    -        or os.getenv("DATABRICKS_RUNTIME_VERSION")
    -        or shell == "ZMQInteractiveShell"
    -    ):
    -        return True  # Jupyter notebook or qtconsole
    -    elif shell == "TerminalInteractiveShell":
    -        return False  # Terminal running IPython
    -    else:
    -        return False  # Other type (?)
    -
    -
    -COLOR_SYSTEMS = {
    -    "standard": ColorSystem.STANDARD,
    -    "256": ColorSystem.EIGHT_BIT,
    -    "truecolor": ColorSystem.TRUECOLOR,
    -    "windows": ColorSystem.WINDOWS,
    -}
    -
    -_COLOR_SYSTEMS_NAMES = {system: name for name, system in COLOR_SYSTEMS.items()}
    -
    -
    -@dataclass
    -class ConsoleThreadLocals(threading.local):
    -    """Thread local values for Console context."""
    -
    -    theme_stack: ThemeStack
    -    buffer: List[Segment] = field(default_factory=list)
    -    buffer_index: int = 0
    -
    -
    -class RenderHook(ABC):
    -    """Provides hooks in to the render process."""
    -
    -    @abstractmethod
    -    def process_renderables(
    -        self, renderables: List[ConsoleRenderable]
    -    ) -> List[ConsoleRenderable]:
    -        """Called with a list of objects to render.
    -
    -        This method can return a new list of renderables, or modify and return the same list.
    -
    -        Args:
    -            renderables (List[ConsoleRenderable]): A number of renderable objects.
    -
    -        Returns:
    -            List[ConsoleRenderable]: A replacement list of renderables.
    -        """
    -
    -
    -_windows_console_features: Optional["WindowsConsoleFeatures"] = None
    -
    -
    -def get_windows_console_features() -> "WindowsConsoleFeatures":  # pragma: no cover
    -    global _windows_console_features
    -    if _windows_console_features is not None:
    -        return _windows_console_features
    -    from ._windows import get_windows_console_features
    -
    -    _windows_console_features = get_windows_console_features()
    -    return _windows_console_features
    -
    -
    -def detect_legacy_windows() -> bool:
    -    """Detect legacy Windows."""
    -    return WINDOWS and not get_windows_console_features().vt
    -
    -
    -
    -[docs] -class Console: - """A high level console interface. - - Args: - color_system (str, optional): The color system supported by your terminal, - either ``"standard"``, ``"256"`` or ``"truecolor"``. Leave as ``"auto"`` to autodetect. - force_terminal (Optional[bool], optional): Enable/disable terminal control codes, or None to auto-detect terminal. Defaults to None. - force_jupyter (Optional[bool], optional): Enable/disable Jupyter rendering, or None to auto-detect Jupyter. Defaults to None. - force_interactive (Optional[bool], optional): Enable/disable interactive mode, or None to auto detect. Defaults to None. - soft_wrap (Optional[bool], optional): Set soft wrap default on print method. Defaults to False. - theme (Theme, optional): An optional style theme object, or ``None`` for default theme. - stderr (bool, optional): Use stderr rather than stdout if ``file`` is not specified. Defaults to False. - file (IO, optional): A file object where the console should write to. Defaults to stdout. - quiet (bool, Optional): Boolean to suppress all output. Defaults to False. - width (int, optional): The width of the terminal. Leave as default to auto-detect width. - height (int, optional): The height of the terminal. Leave as default to auto-detect height. - style (StyleType, optional): Style to apply to all output, or None for no style. Defaults to None. - no_color (Optional[bool], optional): Enabled no color mode, or None to auto detect. Defaults to None. - tab_size (int, optional): Number of spaces used to replace a tab character. Defaults to 8. - record (bool, optional): Boolean to enable recording of terminal output, - required to call :meth:`export_html`, :meth:`export_svg`, and :meth:`export_text`. Defaults to False. - markup (bool, optional): Boolean to enable :ref:`console_markup`. Defaults to True. - emoji (bool, optional): Enable emoji code. Defaults to True. - emoji_variant (str, optional): Optional emoji variant, either "text" or "emoji". Defaults to None. - highlight (bool, optional): Enable automatic highlighting. Defaults to True. - log_time (bool, optional): Boolean to enable logging of time by :meth:`log` methods. Defaults to True. - log_path (bool, optional): Boolean to enable the logging of the caller by :meth:`log`. Defaults to True. - log_time_format (Union[str, TimeFormatterCallable], optional): If ``log_time`` is enabled, either string for strftime or callable that formats the time. Defaults to "[%X] ". - highlighter (HighlighterType, optional): Default highlighter. - legacy_windows (bool, optional): Enable legacy Windows mode, or ``None`` to auto detect. Defaults to ``None``. - safe_box (bool, optional): Restrict box options that don't render on legacy Windows. - get_datetime (Callable[[], datetime], optional): Callable that gets the current time as a datetime.datetime object (used by Console.log), - or None for datetime.now. - get_time (Callable[[], time], optional): Callable that gets the current time in seconds, default uses time.monotonic. - """ - - _environ: Mapping[str, str] = os.environ - - def __init__( - self, - *, - color_system: Optional[ - Literal["auto", "standard", "256", "truecolor", "windows"] - ] = "auto", - force_terminal: Optional[bool] = None, - force_jupyter: Optional[bool] = None, - force_interactive: Optional[bool] = None, - soft_wrap: bool = False, - theme: Optional[Theme] = None, - stderr: bool = False, - file: Optional[IO[str]] = None, - quiet: bool = False, - width: Optional[int] = None, - height: Optional[int] = None, - style: Optional[StyleType] = None, - no_color: Optional[bool] = None, - tab_size: int = 8, - record: bool = False, - markup: bool = True, - emoji: bool = True, - emoji_variant: Optional[EmojiVariant] = None, - highlight: bool = True, - log_time: bool = True, - log_path: bool = True, - log_time_format: Union[str, FormatTimeCallable] = "[%X]", - highlighter: Optional["HighlighterType"] = ReprHighlighter(), - legacy_windows: Optional[bool] = None, - safe_box: bool = True, - get_datetime: Optional[Callable[[], datetime]] = None, - get_time: Optional[Callable[[], float]] = None, - _environ: Optional[Mapping[str, str]] = None, - ): - # Copy of os.environ allows us to replace it for testing - if _environ is not None: - self._environ = _environ - - self.is_jupyter = _is_jupyter() if force_jupyter is None else force_jupyter - if self.is_jupyter: - if width is None: - jupyter_columns = self._environ.get("JUPYTER_COLUMNS") - if jupyter_columns is not None and jupyter_columns.isdigit(): - width = int(jupyter_columns) - else: - width = JUPYTER_DEFAULT_COLUMNS - if height is None: - jupyter_lines = self._environ.get("JUPYTER_LINES") - if jupyter_lines is not None and jupyter_lines.isdigit(): - height = int(jupyter_lines) - else: - height = JUPYTER_DEFAULT_LINES - - self.tab_size = tab_size - self.record = record - self._markup = markup - self._emoji = emoji - self._emoji_variant: Optional[EmojiVariant] = emoji_variant - self._highlight = highlight - self.legacy_windows: bool = ( - (detect_legacy_windows() and not self.is_jupyter) - if legacy_windows is None - else legacy_windows - ) - - if width is None: - columns = self._environ.get("COLUMNS") - if columns is not None and columns.isdigit(): - width = int(columns) - self.legacy_windows - if height is None: - lines = self._environ.get("LINES") - if lines is not None and lines.isdigit(): - height = int(lines) - - self.soft_wrap = soft_wrap - self._width = width - self._height = height - - self._color_system: Optional[ColorSystem] - - self._force_terminal = None - if force_terminal is not None: - self._force_terminal = force_terminal - - self._file = file - self.quiet = quiet - self.stderr = stderr - - if color_system is None: - self._color_system = None - elif color_system == "auto": - self._color_system = self._detect_color_system() - else: - self._color_system = COLOR_SYSTEMS[color_system] - - self._lock = threading.RLock() - self._log_render = LogRender( - show_time=log_time, - show_path=log_path, - time_format=log_time_format, - ) - self.highlighter: HighlighterType = highlighter or _null_highlighter - self.safe_box = safe_box - self.get_datetime = get_datetime or datetime.now - self.get_time = get_time or monotonic - self.style = style - self.no_color = ( - no_color if no_color is not None else "NO_COLOR" in self._environ - ) - self.is_interactive = ( - (self.is_terminal and not self.is_dumb_terminal) - if force_interactive is None - else force_interactive - ) - - self._record_buffer_lock = threading.RLock() - self._thread_locals = ConsoleThreadLocals( - theme_stack=ThemeStack(themes.DEFAULT if theme is None else theme) - ) - self._record_buffer: List[Segment] = [] - self._render_hooks: List[RenderHook] = [] - self._live: Optional["Live"] = None - self._is_alt_screen = False - - def __repr__(self) -> str: - return f"<console width={self.width} {self._color_system!s}>" - - @property - def file(self) -> IO[str]: - """Get the file object to write to.""" - file = self._file or (sys.stderr if self.stderr else sys.stdout) - file = getattr(file, "rich_proxied_file", file) - if file is None: - file = NULL_FILE - return file - - @file.setter - def file(self, new_file: IO[str]) -> None: - """Set a new file object.""" - self._file = new_file - - @property - def _buffer(self) -> List[Segment]: - """Get a thread local buffer.""" - return self._thread_locals.buffer - - @property - def _buffer_index(self) -> int: - """Get a thread local buffer.""" - return self._thread_locals.buffer_index - - @_buffer_index.setter - def _buffer_index(self, value: int) -> None: - self._thread_locals.buffer_index = value - - @property - def _theme_stack(self) -> ThemeStack: - """Get the thread local theme stack.""" - return self._thread_locals.theme_stack - - def _detect_color_system(self) -> Optional[ColorSystem]: - """Detect color system from env vars.""" - if self.is_jupyter: - return ColorSystem.TRUECOLOR - if not self.is_terminal or self.is_dumb_terminal: - return None - if WINDOWS: # pragma: no cover - if self.legacy_windows: # pragma: no cover - return ColorSystem.WINDOWS - windows_console_features = get_windows_console_features() - return ( - ColorSystem.TRUECOLOR - if windows_console_features.truecolor - else ColorSystem.EIGHT_BIT - ) - else: - color_term = self._environ.get("COLORTERM", "").strip().lower() - if color_term in ("truecolor", "24bit"): - return ColorSystem.TRUECOLOR - term = self._environ.get("TERM", "").strip().lower() - _term_name, _hyphen, colors = term.rpartition("-") - color_system = _TERM_COLORS.get(colors, ColorSystem.STANDARD) - return color_system - - def _enter_buffer(self) -> None: - """Enter in to a buffer context, and buffer all output.""" - self._buffer_index += 1 - - def _exit_buffer(self) -> None: - """Leave buffer context, and render content if required.""" - self._buffer_index -= 1 - self._check_buffer() - - def set_live(self, live: "Live") -> None: - """Set Live instance. Used by Live context manager. - - Args: - live (Live): Live instance using this Console. - - Raises: - errors.LiveError: If this Console has a Live context currently active. - """ - with self._lock: - if self._live is not None: - raise errors.LiveError("Only one live display may be active at once") - self._live = live - - def clear_live(self) -> None: - """Clear the Live instance.""" - with self._lock: - self._live = None - - def push_render_hook(self, hook: RenderHook) -> None: - """Add a new render hook to the stack. - - Args: - hook (RenderHook): Render hook instance. - """ - with self._lock: - self._render_hooks.append(hook) - - def pop_render_hook(self) -> None: - """Pop the last renderhook from the stack.""" - with self._lock: - self._render_hooks.pop() - - def __enter__(self) -> "Console": - """Own context manager to enter buffer context.""" - self._enter_buffer() - return self - - def __exit__(self, exc_type: Any, exc_value: Any, traceback: Any) -> None: - """Exit buffer context.""" - self._exit_buffer() - - def begin_capture(self) -> None: - """Begin capturing console output. Call :meth:`end_capture` to exit capture mode and return output.""" - self._enter_buffer() - - def end_capture(self) -> str: - """End capture mode and return captured string. - - Returns: - str: Console output. - """ - render_result = self._render_buffer(self._buffer) - del self._buffer[:] - self._exit_buffer() - return render_result - - def push_theme(self, theme: Theme, *, inherit: bool = True) -> None: - """Push a new theme on to the top of the stack, replacing the styles from the previous theme. - Generally speaking, you should call :meth:`~rich.console.Console.use_theme` to get a context manager, rather - than calling this method directly. - - Args: - theme (Theme): A theme instance. - inherit (bool, optional): Inherit existing styles. Defaults to True. - """ - self._theme_stack.push_theme(theme, inherit=inherit) - - def pop_theme(self) -> None: - """Remove theme from top of stack, restoring previous theme.""" - self._theme_stack.pop_theme() - - def use_theme(self, theme: Theme, *, inherit: bool = True) -> ThemeContext: - """Use a different theme for the duration of the context manager. - - Args: - theme (Theme): Theme instance to user. - inherit (bool, optional): Inherit existing console styles. Defaults to True. - - Returns: - ThemeContext: [description] - """ - return ThemeContext(self, theme, inherit) - - @property - def color_system(self) -> Optional[str]: - """Get color system string. - - Returns: - Optional[str]: "standard", "256" or "truecolor". - """ - - if self._color_system is not None: - return _COLOR_SYSTEMS_NAMES[self._color_system] - else: - return None - - @property - def encoding(self) -> str: - """Get the encoding of the console file, e.g. ``"utf-8"``. - - Returns: - str: A standard encoding string. - """ - return (getattr(self.file, "encoding", "utf-8") or "utf-8").lower() - - @property - def is_terminal(self) -> bool: - """Check if the console is writing to a terminal. - - Returns: - bool: True if the console writing to a device capable of - understanding terminal codes, otherwise False. - """ - if self._force_terminal is not None: - return self._force_terminal - - if hasattr(sys.stdin, "__module__") and sys.stdin.__module__.startswith( - "idlelib" - ): - # Return False for Idle which claims to be a tty but can't handle ansi codes - return False - - if self.is_jupyter: - # return False for Jupyter, which may have FORCE_COLOR set - return False - - # If FORCE_COLOR env var has any value at all, we assume a terminal. - force_color = self._environ.get("FORCE_COLOR") - if force_color is not None: - self._force_terminal = True - return True - - isatty: Optional[Callable[[], bool]] = getattr(self.file, "isatty", None) - try: - return False if isatty is None else isatty() - except ValueError: - # in some situation (at the end of a pytest run for example) isatty() can raise - # ValueError: I/O operation on closed file - # return False because we aren't in a terminal anymore - return False - - @property - def is_dumb_terminal(self) -> bool: - """Detect dumb terminal. - - Returns: - bool: True if writing to a dumb terminal, otherwise False. - - """ - _term = self._environ.get("TERM", "") - is_dumb = _term.lower() in ("dumb", "unknown") - return self.is_terminal and is_dumb - - @property - def options(self) -> ConsoleOptions: - """Get default console options.""" - return ConsoleOptions( - max_height=self.size.height, - size=self.size, - legacy_windows=self.legacy_windows, - min_width=1, - max_width=self.width, - encoding=self.encoding, - is_terminal=self.is_terminal, - ) - - @property - def size(self) -> ConsoleDimensions: - """Get the size of the console. - - Returns: - ConsoleDimensions: A named tuple containing the dimensions. - """ - - if self._width is not None and self._height is not None: - return ConsoleDimensions(self._width - self.legacy_windows, self._height) - - if self.is_dumb_terminal: - return ConsoleDimensions(80, 25) - - width: Optional[int] = None - height: Optional[int] = None - - streams = _STD_STREAMS_OUTPUT if WINDOWS else _STD_STREAMS - for file_descriptor in streams: - try: - width, height = os.get_terminal_size(file_descriptor) - except (AttributeError, ValueError, OSError): # Probably not a terminal - pass - else: - break - - columns = self._environ.get("COLUMNS") - if columns is not None and columns.isdigit(): - width = int(columns) - lines = self._environ.get("LINES") - if lines is not None and lines.isdigit(): - height = int(lines) - - # get_terminal_size can report 0, 0 if run from pseudo-terminal - width = width or 80 - height = height or 25 - return ConsoleDimensions( - width - self.legacy_windows if self._width is None else self._width, - height if self._height is None else self._height, - ) - - @size.setter - def size(self, new_size: Tuple[int, int]) -> None: - """Set a new size for the terminal. - - Args: - new_size (Tuple[int, int]): New width and height. - """ - width, height = new_size - self._width = width - self._height = height - - @property - def width(self) -> int: - """Get the width of the console. - - Returns: - int: The width (in characters) of the console. - """ - return self.size.width - - @width.setter - def width(self, width: int) -> None: - """Set width. - - Args: - width (int): New width. - """ - self._width = width - - @property - def height(self) -> int: - """Get the height of the console. - - Returns: - int: The height (in lines) of the console. - """ - return self.size.height - - @height.setter - def height(self, height: int) -> None: - """Set height. - - Args: - height (int): new height. - """ - self._height = height - - def bell(self) -> None: - """Play a 'bell' sound (if supported by the terminal).""" - self.control(Control.bell()) - - def capture(self) -> Capture: - """A context manager to *capture* the result of print() or log() in a string, - rather than writing it to the console. - - Example: - >>> from rich.console import Console - >>> console = Console() - >>> with console.capture() as capture: - ... console.print("[bold magenta]Hello World[/]") - >>> print(capture.get()) - - Returns: - Capture: Context manager with disables writing to the terminal. - """ - capture = Capture(self) - return capture - - def pager( - self, pager: Optional[Pager] = None, styles: bool = False, links: bool = False - ) -> PagerContext: - """A context manager to display anything printed within a "pager". The pager application - is defined by the system and will typically support at least pressing a key to scroll. - - Args: - pager (Pager, optional): A pager object, or None to use :class:`~rich.pager.SystemPager`. Defaults to None. - styles (bool, optional): Show styles in pager. Defaults to False. - links (bool, optional): Show links in pager. Defaults to False. - - Example: - >>> from rich.console import Console - >>> from rich.__main__ import make_test_card - >>> console = Console() - >>> with console.pager(): - console.print(make_test_card()) - - Returns: - PagerContext: A context manager. - """ - return PagerContext(self, pager=pager, styles=styles, links=links) - - def line(self, count: int = 1) -> None: - """Write new line(s). - - Args: - count (int, optional): Number of new lines. Defaults to 1. - """ - - assert count >= 0, "count must be >= 0" - self.print(NewLine(count)) - - def clear(self, home: bool = True) -> None: - """Clear the screen. - - Args: - home (bool, optional): Also move the cursor to 'home' position. Defaults to True. - """ - if home: - self.control(Control.clear(), Control.home()) - else: - self.control(Control.clear()) - -
    -[docs] - def status( - self, - status: RenderableType, - *, - spinner: str = "dots", - spinner_style: StyleType = "status.spinner", - speed: float = 1.0, - refresh_per_second: float = 12.5, - ) -> "Status": - """Display a status and spinner. - - Args: - status (RenderableType): A status renderable (str or Text typically). - spinner (str, optional): Name of spinner animation (see python -m rich.spinner). Defaults to "dots". - spinner_style (StyleType, optional): Style of spinner. Defaults to "status.spinner". - speed (float, optional): Speed factor for spinner animation. Defaults to 1.0. - refresh_per_second (float, optional): Number of refreshes per second. Defaults to 12.5. - - Returns: - Status: A Status object that may be used as a context manager. - """ - from .status import Status - - status_renderable = Status( - status, - console=self, - spinner=spinner, - spinner_style=spinner_style, - speed=speed, - refresh_per_second=refresh_per_second, - ) - return status_renderable
    - - - def show_cursor(self, show: bool = True) -> bool: - """Show or hide the cursor. - - Args: - show (bool, optional): Set visibility of the cursor. - """ - if self.is_terminal: - self.control(Control.show_cursor(show)) - return True - return False - - def set_alt_screen(self, enable: bool = True) -> bool: - """Enables alternative screen mode. - - Note, if you enable this mode, you should ensure that is disabled before - the application exits. See :meth:`~rich.Console.screen` for a context manager - that handles this for you. - - Args: - enable (bool, optional): Enable (True) or disable (False) alternate screen. Defaults to True. - - Returns: - bool: True if the control codes were written. - - """ - changed = False - if self.is_terminal and not self.legacy_windows: - self.control(Control.alt_screen(enable)) - changed = True - self._is_alt_screen = enable - return changed - - @property - def is_alt_screen(self) -> bool: - """Check if the alt screen was enabled. - - Returns: - bool: True if the alt screen was enabled, otherwise False. - """ - return self._is_alt_screen - - def set_window_title(self, title: str) -> bool: - """Set the title of the console terminal window. - - Warning: There is no means within Rich of "resetting" the window title to its - previous value, meaning the title you set will persist even after your application - exits. - - ``fish`` shell resets the window title before and after each command by default, - negating this issue. Windows Terminal and command prompt will also reset the title for you. - Most other shells and terminals, however, do not do this. - - Some terminals may require configuration changes before you can set the title. - Some terminals may not support setting the title at all. - - Other software (including the terminal itself, the shell, custom prompts, plugins, etc.) - may also set the terminal window title. This could result in whatever value you write - using this method being overwritten. - - Args: - title (str): The new title of the terminal window. - - Returns: - bool: True if the control code to change the terminal title was - written, otherwise False. Note that a return value of True - does not guarantee that the window title has actually changed, - since the feature may be unsupported/disabled in some terminals. - """ - if self.is_terminal: - self.control(Control.title(title)) - return True - return False - - def screen( - self, hide_cursor: bool = True, style: Optional[StyleType] = None - ) -> "ScreenContext": - """Context manager to enable and disable 'alternative screen' mode. - - Args: - hide_cursor (bool, optional): Also hide the cursor. Defaults to False. - style (Style, optional): Optional style for screen. Defaults to None. - - Returns: - ~ScreenContext: Context which enables alternate screen on enter, and disables it on exit. - """ - return ScreenContext(self, hide_cursor=hide_cursor, style=style or "") - - def measure( - self, renderable: RenderableType, *, options: Optional[ConsoleOptions] = None - ) -> Measurement: - """Measure a renderable. Returns a :class:`~rich.measure.Measurement` object which contains - information regarding the number of characters required to print the renderable. - - Args: - renderable (RenderableType): Any renderable or string. - options (Optional[ConsoleOptions], optional): Options to use when measuring, or None - to use default options. Defaults to None. - - Returns: - Measurement: A measurement of the renderable. - """ - measurement = Measurement.get(self, options or self.options, renderable) - return measurement - - def render( - self, renderable: RenderableType, options: Optional[ConsoleOptions] = None - ) -> Iterable[Segment]: - """Render an object in to an iterable of `Segment` instances. - - This method contains the logic for rendering objects with the console protocol. - You are unlikely to need to use it directly, unless you are extending the library. - - Args: - renderable (RenderableType): An object supporting the console protocol, or - an object that may be converted to a string. - options (ConsoleOptions, optional): An options object, or None to use self.options. Defaults to None. - - Returns: - Iterable[Segment]: An iterable of segments that may be rendered. - """ - - _options = options or self.options - if _options.max_width < 1: - # No space to render anything. This prevents potential recursion errors. - return - render_iterable: RenderResult - - renderable = rich_cast(renderable) - if hasattr(renderable, "__rich_console__") and not isclass(renderable): - render_iterable = renderable.__rich_console__(self, _options) - elif isinstance(renderable, str): - text_renderable = self.render_str( - renderable, highlight=_options.highlight, markup=_options.markup - ) - render_iterable = text_renderable.__rich_console__(self, _options) - else: - raise errors.NotRenderableError( - f"Unable to render {renderable!r}; " - "A str, Segment or object with __rich_console__ method is required" - ) - - try: - iter_render = iter(render_iterable) - except TypeError: - raise errors.NotRenderableError( - f"object {render_iterable!r} is not renderable" - ) - _Segment = Segment - _options = _options.reset_height() - for render_output in iter_render: - if isinstance(render_output, _Segment): - yield render_output - else: - yield from self.render(render_output, _options) - - def render_lines( - self, - renderable: RenderableType, - options: Optional[ConsoleOptions] = None, - *, - style: Optional[Style] = None, - pad: bool = True, - new_lines: bool = False, - ) -> List[List[Segment]]: - """Render objects in to a list of lines. - - The output of render_lines is useful when further formatting of rendered console text - is required, such as the Panel class which draws a border around any renderable object. - - Args: - renderable (RenderableType): Any object renderable in the console. - options (Optional[ConsoleOptions], optional): Console options, or None to use self.options. Default to ``None``. - style (Style, optional): Optional style to apply to renderables. Defaults to ``None``. - pad (bool, optional): Pad lines shorter than render width. Defaults to ``True``. - new_lines (bool, optional): Include "\n" characters at end of lines. - - Returns: - List[List[Segment]]: A list of lines, where a line is a list of Segment objects. - """ - with self._lock: - render_options = options or self.options - _rendered = self.render(renderable, render_options) - if style: - _rendered = Segment.apply_style(_rendered, style) - - render_height = render_options.height - if render_height is not None: - render_height = max(0, render_height) - - lines = list( - islice( - Segment.split_and_crop_lines( - _rendered, - render_options.max_width, - include_new_lines=new_lines, - pad=pad, - style=style, - ), - None, - render_height, - ) - ) - if render_options.height is not None: - extra_lines = render_options.height - len(lines) - if extra_lines > 0: - pad_line = [ - ( - [ - Segment(" " * render_options.max_width, style), - Segment("\n"), - ] - if new_lines - else [Segment(" " * render_options.max_width, style)] - ) - ] - lines.extend(pad_line * extra_lines) - - return lines - - def render_str( - self, - text: str, - *, - style: Union[str, Style] = "", - justify: Optional[JustifyMethod] = None, - overflow: Optional[OverflowMethod] = None, - emoji: Optional[bool] = None, - markup: Optional[bool] = None, - highlight: Optional[bool] = None, - highlighter: Optional[HighlighterType] = None, - ) -> "Text": - """Convert a string to a Text instance. This is called automatically if - you print or log a string. - - Args: - text (str): Text to render. - style (Union[str, Style], optional): Style to apply to rendered text. - justify (str, optional): Justify method: "default", "left", "center", "full", or "right". Defaults to ``None``. - overflow (str, optional): Overflow method: "crop", "fold", or "ellipsis". Defaults to ``None``. - emoji (Optional[bool], optional): Enable emoji, or ``None`` to use Console default. - markup (Optional[bool], optional): Enable markup, or ``None`` to use Console default. - highlight (Optional[bool], optional): Enable highlighting, or ``None`` to use Console default. - highlighter (HighlighterType, optional): Optional highlighter to apply. - Returns: - ConsoleRenderable: Renderable object. - - """ - emoji_enabled = emoji or (emoji is None and self._emoji) - markup_enabled = markup or (markup is None and self._markup) - highlight_enabled = highlight or (highlight is None and self._highlight) - - if markup_enabled: - rich_text = render_markup( - text, - style=style, - emoji=emoji_enabled, - emoji_variant=self._emoji_variant, - ) - rich_text.justify = justify - rich_text.overflow = overflow - else: - rich_text = Text( - ( - _emoji_replace(text, default_variant=self._emoji_variant) - if emoji_enabled - else text - ), - justify=justify, - overflow=overflow, - style=style, - ) - - _highlighter = (highlighter or self.highlighter) if highlight_enabled else None - if _highlighter is not None: - highlight_text = _highlighter(str(rich_text)) - highlight_text.copy_styles(rich_text) - return highlight_text - - return rich_text - - def get_style( - self, name: Union[str, Style], *, default: Optional[Union[Style, str]] = None - ) -> Style: - """Get a Style instance by its theme name or parse a definition. - - Args: - name (str): The name of a style or a style definition. - - Returns: - Style: A Style object. - - Raises: - MissingStyle: If no style could be parsed from name. - - """ - if isinstance(name, Style): - return name - - try: - style = self._theme_stack.get(name) - if style is None: - style = Style.parse(name) - return style.copy() if style.link else style - except errors.StyleSyntaxError as error: - if default is not None: - return self.get_style(default) - raise errors.MissingStyle( - f"Failed to get style {name!r}; {error}" - ) from None - - def _collect_renderables( - self, - objects: Iterable[Any], - sep: str, - end: str, - *, - justify: Optional[JustifyMethod] = None, - emoji: Optional[bool] = None, - markup: Optional[bool] = None, - highlight: Optional[bool] = None, - ) -> List[ConsoleRenderable]: - """Combine a number of renderables and text into one renderable. - - Args: - objects (Iterable[Any]): Anything that Rich can render. - sep (str): String to write between print data. - end (str): String to write at end of print data. - justify (str, optional): One of "left", "right", "center", or "full". Defaults to ``None``. - emoji (Optional[bool], optional): Enable emoji code, or ``None`` to use console default. - markup (Optional[bool], optional): Enable markup, or ``None`` to use console default. - highlight (Optional[bool], optional): Enable automatic highlighting, or ``None`` to use console default. - - Returns: - List[ConsoleRenderable]: A list of things to render. - """ - renderables: List[ConsoleRenderable] = [] - _append = renderables.append - text: List[Text] = [] - append_text = text.append - - append = _append - if justify in ("left", "center", "right"): - - def align_append(renderable: RenderableType) -> None: - _append(Align(renderable, cast(AlignMethod, justify))) - - append = align_append - - _highlighter: HighlighterType = _null_highlighter - if highlight or (highlight is None and self._highlight): - _highlighter = self.highlighter - - def check_text() -> None: - if text: - sep_text = Text(sep, justify=justify, end=end) - append(sep_text.join(text)) - text.clear() - - for renderable in objects: - renderable = rich_cast(renderable) - if isinstance(renderable, str): - append_text( - self.render_str( - renderable, - emoji=emoji, - markup=markup, - highlight=highlight, - highlighter=_highlighter, - ) - ) - elif isinstance(renderable, Text): - append_text(renderable) - elif isinstance(renderable, ConsoleRenderable): - check_text() - append(renderable) - elif is_expandable(renderable): - check_text() - append(Pretty(renderable, highlighter=_highlighter)) - else: - append_text(_highlighter(str(renderable))) - - check_text() - - if self.style is not None: - style = self.get_style(self.style) - renderables = [Styled(renderable, style) for renderable in renderables] - - return renderables - - def rule( - self, - title: TextType = "", - *, - characters: str = "─", - style: Union[str, Style] = "rule.line", - align: AlignMethod = "center", - ) -> None: - """Draw a line with optional centered title. - - Args: - title (str, optional): Text to render over the rule. Defaults to "". - characters (str, optional): Character(s) to form the line. Defaults to "─". - style (str, optional): Style of line. Defaults to "rule.line". - align (str, optional): How to align the title, one of "left", "center", or "right". Defaults to "center". - """ - from .rule import Rule - - rule = Rule(title=title, characters=characters, style=style, align=align) - self.print(rule) - - def control(self, *control: Control) -> None: - """Insert non-printing control codes. - - Args: - control_codes (str): Control codes, such as those that may move the cursor. - """ - if not self.is_dumb_terminal: - with self: - self._buffer.extend(_control.segment for _control in control) - - def out( - self, - *objects: Any, - sep: str = " ", - end: str = "\n", - style: Optional[Union[str, Style]] = None, - highlight: Optional[bool] = None, - ) -> None: - """Output to the terminal. This is a low-level way of writing to the terminal which unlike - :meth:`~rich.console.Console.print` won't pretty print, wrap text, or apply markup, but will - optionally apply highlighting and a basic style. - - Args: - sep (str, optional): String to write between print data. Defaults to " ". - end (str, optional): String to write at end of print data. Defaults to "\\\\n". - style (Union[str, Style], optional): A style to apply to output. Defaults to None. - highlight (Optional[bool], optional): Enable automatic highlighting, or ``None`` to use - console default. Defaults to ``None``. - """ - raw_output: str = sep.join(str(_object) for _object in objects) - self.print( - raw_output, - style=style, - highlight=highlight, - emoji=False, - markup=False, - no_wrap=True, - overflow="ignore", - crop=False, - end=end, - ) - - def print( - self, - *objects: Any, - sep: str = " ", - end: str = "\n", - style: Optional[Union[str, Style]] = None, - justify: Optional[JustifyMethod] = None, - overflow: Optional[OverflowMethod] = None, - no_wrap: Optional[bool] = None, - emoji: Optional[bool] = None, - markup: Optional[bool] = None, - highlight: Optional[bool] = None, - width: Optional[int] = None, - height: Optional[int] = None, - crop: bool = True, - soft_wrap: Optional[bool] = None, - new_line_start: bool = False, - ) -> None: - """Print to the console. - - Args: - objects (positional args): Objects to log to the terminal. - sep (str, optional): String to write between print data. Defaults to " ". - end (str, optional): String to write at end of print data. Defaults to "\\\\n". - style (Union[str, Style], optional): A style to apply to output. Defaults to None. - justify (str, optional): Justify method: "default", "left", "right", "center", or "full". Defaults to ``None``. - overflow (str, optional): Overflow method: "ignore", "crop", "fold", or "ellipsis". Defaults to None. - no_wrap (Optional[bool], optional): Disable word wrapping. Defaults to None. - emoji (Optional[bool], optional): Enable emoji code, or ``None`` to use console default. Defaults to ``None``. - markup (Optional[bool], optional): Enable markup, or ``None`` to use console default. Defaults to ``None``. - highlight (Optional[bool], optional): Enable automatic highlighting, or ``None`` to use console default. Defaults to ``None``. - width (Optional[int], optional): Width of output, or ``None`` to auto-detect. Defaults to ``None``. - crop (Optional[bool], optional): Crop output to width of terminal. Defaults to True. - soft_wrap (bool, optional): Enable soft wrap mode which disables word wrapping and cropping of text or ``None`` for - Console default. Defaults to ``None``. - new_line_start (bool, False): Insert a new line at the start if the output contains more than one line. Defaults to ``False``. - """ - if not objects: - objects = (NewLine(),) - - if soft_wrap is None: - soft_wrap = self.soft_wrap - if soft_wrap: - if no_wrap is None: - no_wrap = True - if overflow is None: - overflow = "ignore" - crop = False - render_hooks = self._render_hooks[:] - with self: - renderables = self._collect_renderables( - objects, - sep, - end, - justify=justify, - emoji=emoji, - markup=markup, - highlight=highlight, - ) - for hook in render_hooks: - renderables = hook.process_renderables(renderables) - render_options = self.options.update( - justify=justify, - overflow=overflow, - width=min(width, self.width) if width is not None else NO_CHANGE, - height=height, - no_wrap=no_wrap, - markup=markup, - highlight=highlight, - ) - - new_segments: List[Segment] = [] - extend = new_segments.extend - render = self.render - if style is None: - for renderable in renderables: - extend(render(renderable, render_options)) - else: - for renderable in renderables: - extend( - Segment.apply_style( - render(renderable, render_options), self.get_style(style) - ) - ) - if new_line_start: - if ( - len("".join(segment.text for segment in new_segments).splitlines()) - > 1 - ): - new_segments.insert(0, Segment.line()) - if crop: - buffer_extend = self._buffer.extend - for line in Segment.split_and_crop_lines( - new_segments, self.width, pad=False - ): - buffer_extend(line) - else: - self._buffer.extend(new_segments) - - def print_json( - self, - json: Optional[str] = None, - *, - data: Any = None, - indent: Union[None, int, str] = 2, - highlight: bool = True, - skip_keys: bool = False, - ensure_ascii: bool = False, - check_circular: bool = True, - allow_nan: bool = True, - default: Optional[Callable[[Any], Any]] = None, - sort_keys: bool = False, - ) -> None: - """Pretty prints JSON. Output will be valid JSON. - - Args: - json (Optional[str]): A string containing JSON. - data (Any): If json is not supplied, then encode this data. - indent (Union[None, int, str], optional): Number of spaces to indent. Defaults to 2. - highlight (bool, optional): Enable highlighting of output: Defaults to True. - skip_keys (bool, optional): Skip keys not of a basic type. Defaults to False. - ensure_ascii (bool, optional): Escape all non-ascii characters. Defaults to False. - check_circular (bool, optional): Check for circular references. Defaults to True. - allow_nan (bool, optional): Allow NaN and Infinity values. Defaults to True. - default (Callable, optional): A callable that converts values that can not be encoded - in to something that can be JSON encoded. Defaults to None. - sort_keys (bool, optional): Sort dictionary keys. Defaults to False. - """ - from rich.json import JSON - - if json is None: - json_renderable = JSON.from_data( - data, - indent=indent, - highlight=highlight, - skip_keys=skip_keys, - ensure_ascii=ensure_ascii, - check_circular=check_circular, - allow_nan=allow_nan, - default=default, - sort_keys=sort_keys, - ) - else: - if not isinstance(json, str): - raise TypeError( - f"json must be str. Did you mean print_json(data={json!r}) ?" - ) - json_renderable = JSON( - json, - indent=indent, - highlight=highlight, - skip_keys=skip_keys, - ensure_ascii=ensure_ascii, - check_circular=check_circular, - allow_nan=allow_nan, - default=default, - sort_keys=sort_keys, - ) - self.print(json_renderable, soft_wrap=True) - - def update_screen( - self, - renderable: RenderableType, - *, - region: Optional[Region] = None, - options: Optional[ConsoleOptions] = None, - ) -> None: - """Update the screen at a given offset. - - Args: - renderable (RenderableType): A Rich renderable. - region (Region, optional): Region of screen to update, or None for entire screen. Defaults to None. - x (int, optional): x offset. Defaults to 0. - y (int, optional): y offset. Defaults to 0. - - Raises: - errors.NoAltScreen: If the Console isn't in alt screen mode. - - """ - if not self.is_alt_screen: - raise errors.NoAltScreen("Alt screen must be enabled to call update_screen") - render_options = options or self.options - if region is None: - x = y = 0 - render_options = render_options.update_dimensions( - render_options.max_width, render_options.height or self.height - ) - else: - x, y, width, height = region - render_options = render_options.update_dimensions(width, height) - - lines = self.render_lines(renderable, options=render_options) - self.update_screen_lines(lines, x, y) - - def update_screen_lines( - self, lines: List[List[Segment]], x: int = 0, y: int = 0 - ) -> None: - """Update lines of the screen at a given offset. - - Args: - lines (List[List[Segment]]): Rendered lines (as produced by :meth:`~rich.Console.render_lines`). - x (int, optional): x offset (column no). Defaults to 0. - y (int, optional): y offset (column no). Defaults to 0. - - Raises: - errors.NoAltScreen: If the Console isn't in alt screen mode. - """ - if not self.is_alt_screen: - raise errors.NoAltScreen("Alt screen must be enabled to call update_screen") - screen_update = ScreenUpdate(lines, x, y) - segments = self.render(screen_update) - self._buffer.extend(segments) - self._check_buffer() - - def print_exception( - self, - *, - width: Optional[int] = 100, - extra_lines: int = 3, - theme: Optional[str] = None, - word_wrap: bool = False, - show_locals: bool = False, - suppress: Iterable[Union[str, ModuleType]] = (), - max_frames: int = 100, - ) -> None: - """Prints a rich render of the last exception and traceback. - - Args: - width (Optional[int], optional): Number of characters used to render code. Defaults to 100. - extra_lines (int, optional): Additional lines of code to render. Defaults to 3. - theme (str, optional): Override pygments theme used in traceback - word_wrap (bool, optional): Enable word wrapping of long lines. Defaults to False. - show_locals (bool, optional): Enable display of local variables. Defaults to False. - suppress (Iterable[Union[str, ModuleType]]): Optional sequence of modules or paths to exclude from traceback. - max_frames (int): Maximum number of frames to show in a traceback, 0 for no maximum. Defaults to 100. - """ - from .traceback import Traceback - - traceback = Traceback( - width=width, - extra_lines=extra_lines, - theme=theme, - word_wrap=word_wrap, - show_locals=show_locals, - suppress=suppress, - max_frames=max_frames, - ) - self.print(traceback) - - @staticmethod - def _caller_frame_info( - offset: int, - currentframe: Callable[[], Optional[FrameType]] = inspect.currentframe, - ) -> Tuple[str, int, Dict[str, Any]]: - """Get caller frame information. - - Args: - offset (int): the caller offset within the current frame stack. - currentframe (Callable[[], Optional[FrameType]], optional): the callable to use to - retrieve the current frame. Defaults to ``inspect.currentframe``. - - Returns: - Tuple[str, int, Dict[str, Any]]: A tuple containing the filename, the line number and - the dictionary of local variables associated with the caller frame. - - Raises: - RuntimeError: If the stack offset is invalid. - """ - # Ignore the frame of this local helper - offset += 1 - - frame = currentframe() - if frame is not None: - # Use the faster currentframe where implemented - while offset and frame is not None: - frame = frame.f_back - offset -= 1 - assert frame is not None - return frame.f_code.co_filename, frame.f_lineno, frame.f_locals - else: - # Fallback to the slower stack - frame_info = inspect.stack()[offset] - return frame_info.filename, frame_info.lineno, frame_info.frame.f_locals - -
    -[docs] - def log( - self, - *objects: Any, - sep: str = " ", - end: str = "\n", - style: Optional[Union[str, Style]] = None, - justify: Optional[JustifyMethod] = None, - emoji: Optional[bool] = None, - markup: Optional[bool] = None, - highlight: Optional[bool] = None, - log_locals: bool = False, - _stack_offset: int = 1, - ) -> None: - """Log rich content to the terminal. - - Args: - objects (positional args): Objects to log to the terminal. - sep (str, optional): String to write between print data. Defaults to " ". - end (str, optional): String to write at end of print data. Defaults to "\\\\n". - style (Union[str, Style], optional): A style to apply to output. Defaults to None. - justify (str, optional): One of "left", "right", "center", or "full". Defaults to ``None``. - emoji (Optional[bool], optional): Enable emoji code, or ``None`` to use console default. Defaults to None. - markup (Optional[bool], optional): Enable markup, or ``None`` to use console default. Defaults to None. - highlight (Optional[bool], optional): Enable automatic highlighting, or ``None`` to use console default. Defaults to None. - log_locals (bool, optional): Boolean to enable logging of locals where ``log()`` - was called. Defaults to False. - _stack_offset (int, optional): Offset of caller from end of call stack. Defaults to 1. - """ - if not objects: - objects = (NewLine(),) - - render_hooks = self._render_hooks[:] - - with self: - renderables = self._collect_renderables( - objects, - sep, - end, - justify=justify, - emoji=emoji, - markup=markup, - highlight=highlight, - ) - if style is not None: - renderables = [Styled(renderable, style) for renderable in renderables] - - filename, line_no, locals = self._caller_frame_info(_stack_offset) - link_path = None if filename.startswith("<") else os.path.abspath(filename) - path = filename.rpartition(os.sep)[-1] - if log_locals: - locals_map = { - key: value - for key, value in locals.items() - if not key.startswith("__") - } - renderables.append(render_scope(locals_map, title="[i]locals")) - - renderables = [ - self._log_render( - self, - renderables, - log_time=self.get_datetime(), - path=path, - line_no=line_no, - link_path=link_path, - ) - ] - for hook in render_hooks: - renderables = hook.process_renderables(renderables) - new_segments: List[Segment] = [] - extend = new_segments.extend - render = self.render - render_options = self.options - for renderable in renderables: - extend(render(renderable, render_options)) - buffer_extend = self._buffer.extend - for line in Segment.split_and_crop_lines( - new_segments, self.width, pad=False - ): - buffer_extend(line)
    - - - def on_broken_pipe(self) -> None: - """This function is called when a `BrokenPipeError` is raised. - - This can occur when piping Textual output in Linux and macOS. - The default implementation is to exit the app, but you could implement - this method in a subclass to change the behavior. - - See https://docs.python.org/3/library/signal.html#note-on-sigpipe for details. - """ - self.quiet = True - devnull = os.open(os.devnull, os.O_WRONLY) - os.dup2(devnull, sys.stdout.fileno()) - raise SystemExit(1) - - def _check_buffer(self) -> None: - """Check if the buffer may be rendered. Render it if it can (e.g. Console.quiet is False) - Rendering is supported on Windows, Unix and Jupyter environments. For - legacy Windows consoles, the win32 API is called directly. - This method will also record what it renders if recording is enabled via Console.record. - """ - if self.quiet: - del self._buffer[:] - return - - try: - self._write_buffer() - except BrokenPipeError: - self.on_broken_pipe() - - def _write_buffer(self) -> None: - """Write the buffer to the output file.""" - - with self._lock: - if self.record and not self._buffer_index: - with self._record_buffer_lock: - self._record_buffer.extend(self._buffer[:]) - - if self._buffer_index == 0: - if self.is_jupyter: # pragma: no cover - from .jupyter import display - - display(self._buffer, self._render_buffer(self._buffer[:])) - del self._buffer[:] - else: - if WINDOWS: - use_legacy_windows_render = False - if self.legacy_windows: - fileno = get_fileno(self.file) - if fileno is not None: - use_legacy_windows_render = ( - fileno in _STD_STREAMS_OUTPUT - ) - - if use_legacy_windows_render: - from rich._win32_console import LegacyWindowsTerm - from rich._windows_renderer import legacy_windows_render - - buffer = self._buffer[:] - if self.no_color and self._color_system: - buffer = list(Segment.remove_color(buffer)) - - legacy_windows_render(buffer, LegacyWindowsTerm(self.file)) - else: - # Either a non-std stream on legacy Windows, or modern Windows. - text = self._render_buffer(self._buffer[:]) - # https://bugs.python.org/issue37871 - # https://github.com/python/cpython/issues/82052 - # We need to avoid writing more than 32Kb in a single write, due to the above bug - write = self.file.write - # Worse case scenario, every character is 4 bytes of utf-8 - MAX_WRITE = 32 * 1024 // 4 - try: - if len(text) <= MAX_WRITE: - write(text) - else: - batch: List[str] = [] - batch_append = batch.append - size = 0 - for line in text.splitlines(True): - if size + len(line) > MAX_WRITE and batch: - write("".join(batch)) - batch.clear() - size = 0 - batch_append(line) - size += len(line) - if batch: - write("".join(batch)) - batch.clear() - except UnicodeEncodeError as error: - error.reason = f"{error.reason}\n*** You may need to add PYTHONIOENCODING=utf-8 to your environment ***" - raise - else: - text = self._render_buffer(self._buffer[:]) - try: - self.file.write(text) - except UnicodeEncodeError as error: - error.reason = f"{error.reason}\n*** You may need to add PYTHONIOENCODING=utf-8 to your environment ***" - raise - - self.file.flush() - del self._buffer[:] - - def _render_buffer(self, buffer: Iterable[Segment]) -> str: - """Render buffered output, and clear buffer.""" - output: List[str] = [] - append = output.append - color_system = self._color_system - legacy_windows = self.legacy_windows - not_terminal = not self.is_terminal - if self.no_color and color_system: - buffer = Segment.remove_color(buffer) - for text, style, control in buffer: - if style: - append( - style.render( - text, - color_system=color_system, - legacy_windows=legacy_windows, - ) - ) - elif not (not_terminal and control): - append(text) - - rendered = "".join(output) - return rendered - - def input( - self, - prompt: TextType = "", - *, - markup: bool = True, - emoji: bool = True, - password: bool = False, - stream: Optional[TextIO] = None, - ) -> str: - """Displays a prompt and waits for input from the user. The prompt may contain color / style. - - It works in the same way as Python's builtin :func:`input` function and provides elaborate line editing and history features if Python's builtin :mod:`readline` module is previously loaded. - - Args: - prompt (Union[str, Text]): Text to render in the prompt. - markup (bool, optional): Enable console markup (requires a str prompt). Defaults to True. - emoji (bool, optional): Enable emoji (requires a str prompt). Defaults to True. - password: (bool, optional): Hide typed text. Defaults to False. - stream: (TextIO, optional): Optional file to read input from (rather than stdin). Defaults to None. - - Returns: - str: Text read from stdin. - """ - if prompt: - self.print(prompt, markup=markup, emoji=emoji, end="") - if password: - result = getpass("", stream=stream) - else: - if stream: - result = stream.readline() - else: - result = input() - return result - - def export_text(self, *, clear: bool = True, styles: bool = False) -> str: - """Generate text from console contents (requires record=True argument in constructor). - - Args: - clear (bool, optional): Clear record buffer after exporting. Defaults to ``True``. - styles (bool, optional): If ``True``, ansi escape codes will be included. ``False`` for plain text. - Defaults to ``False``. - - Returns: - str: String containing console contents. - - """ - assert ( - self.record - ), "To export console contents set record=True in the constructor or instance" - - with self._record_buffer_lock: - if styles: - text = "".join( - (style.render(text) if style else text) - for text, style, _ in self._record_buffer - ) - else: - text = "".join( - segment.text - for segment in self._record_buffer - if not segment.control - ) - if clear: - del self._record_buffer[:] - return text - - def save_text(self, path: str, *, clear: bool = True, styles: bool = False) -> None: - """Generate text from console and save to a given location (requires record=True argument in constructor). - - Args: - path (str): Path to write text files. - clear (bool, optional): Clear record buffer after exporting. Defaults to ``True``. - styles (bool, optional): If ``True``, ansi style codes will be included. ``False`` for plain text. - Defaults to ``False``. - - """ - text = self.export_text(clear=clear, styles=styles) - with open(path, "w", encoding="utf-8") as write_file: - write_file.write(text) - - def export_html( - self, - *, - theme: Optional[TerminalTheme] = None, - clear: bool = True, - code_format: Optional[str] = None, - inline_styles: bool = False, - ) -> str: - """Generate HTML from console contents (requires record=True argument in constructor). - - Args: - theme (TerminalTheme, optional): TerminalTheme object containing console colors. - clear (bool, optional): Clear record buffer after exporting. Defaults to ``True``. - code_format (str, optional): Format string to render HTML. In addition to '{foreground}', - '{background}', and '{code}', should contain '{stylesheet}' if inline_styles is ``False``. - inline_styles (bool, optional): If ``True`` styles will be inlined in to spans, which makes files - larger but easier to cut and paste markup. If ``False``, styles will be embedded in a style tag. - Defaults to False. - - Returns: - str: String containing console contents as HTML. - """ - assert ( - self.record - ), "To export console contents set record=True in the constructor or instance" - fragments: List[str] = [] - append = fragments.append - _theme = theme or DEFAULT_TERMINAL_THEME - stylesheet = "" - - render_code_format = CONSOLE_HTML_FORMAT if code_format is None else code_format - - with self._record_buffer_lock: - if inline_styles: - for text, style, _ in Segment.filter_control( - Segment.simplify(self._record_buffer) - ): - text = escape(text) - if style: - rule = style.get_html_style(_theme) - if style.link: - text = f'<a href="{style.link}">{text}</a>' - text = f'<span style="{rule}">{text}</span>' if rule else text - append(text) - else: - styles: Dict[str, int] = {} - for text, style, _ in Segment.filter_control( - Segment.simplify(self._record_buffer) - ): - text = escape(text) - if style: - rule = style.get_html_style(_theme) - style_number = styles.setdefault(rule, len(styles) + 1) - if style.link: - text = f'<a class="r{style_number}" href="{style.link}">{text}</a>' - else: - text = f'<span class="r{style_number}">{text}</span>' - append(text) - stylesheet_rules: List[str] = [] - stylesheet_append = stylesheet_rules.append - for style_rule, style_number in styles.items(): - if style_rule: - stylesheet_append(f".r{style_number} {{{style_rule}}}") - stylesheet = "\n".join(stylesheet_rules) - - rendered_code = render_code_format.format( - code="".join(fragments), - stylesheet=stylesheet, - foreground=_theme.foreground_color.hex, - background=_theme.background_color.hex, - ) - if clear: - del self._record_buffer[:] - return rendered_code - - def save_html( - self, - path: str, - *, - theme: Optional[TerminalTheme] = None, - clear: bool = True, - code_format: str = CONSOLE_HTML_FORMAT, - inline_styles: bool = False, - ) -> None: - """Generate HTML from console contents and write to a file (requires record=True argument in constructor). - - Args: - path (str): Path to write html file. - theme (TerminalTheme, optional): TerminalTheme object containing console colors. - clear (bool, optional): Clear record buffer after exporting. Defaults to ``True``. - code_format (str, optional): Format string to render HTML. In addition to '{foreground}', - '{background}', and '{code}', should contain '{stylesheet}' if inline_styles is ``False``. - inline_styles (bool, optional): If ``True`` styles will be inlined in to spans, which makes files - larger but easier to cut and paste markup. If ``False``, styles will be embedded in a style tag. - Defaults to False. - - """ - html = self.export_html( - theme=theme, - clear=clear, - code_format=code_format, - inline_styles=inline_styles, - ) - with open(path, "w", encoding="utf-8") as write_file: - write_file.write(html) - - def export_svg( - self, - *, - title: str = "Rich", - theme: Optional[TerminalTheme] = None, - clear: bool = True, - code_format: str = CONSOLE_SVG_FORMAT, - font_aspect_ratio: float = 0.61, - unique_id: Optional[str] = None, - ) -> str: - """ - Generate an SVG from the console contents (requires record=True in Console constructor). - - Args: - title (str, optional): The title of the tab in the output image - theme (TerminalTheme, optional): The ``TerminalTheme`` object to use to style the terminal - clear (bool, optional): Clear record buffer after exporting. Defaults to ``True`` - code_format (str, optional): Format string used to generate the SVG. Rich will inject a number of variables - into the string in order to form the final SVG output. The default template used and the variables - injected by Rich can be found by inspecting the ``console.CONSOLE_SVG_FORMAT`` variable. - font_aspect_ratio (float, optional): The width to height ratio of the font used in the ``code_format`` - string. Defaults to 0.61, which is the width to height ratio of Fira Code (the default font). - If you aren't specifying a different font inside ``code_format``, you probably don't need this. - unique_id (str, optional): unique id that is used as the prefix for various elements (CSS styles, node - ids). If not set, this defaults to a computed value based on the recorded content. - """ - - from rich.cells import cell_len - - style_cache: Dict[Style, str] = {} - - def get_svg_style(style: Style) -> str: - """Convert a Style to CSS rules for SVG.""" - if style in style_cache: - return style_cache[style] - css_rules = [] - color = ( - _theme.foreground_color - if (style.color is None or style.color.is_default) - else style.color.get_truecolor(_theme) - ) - bgcolor = ( - _theme.background_color - if (style.bgcolor is None or style.bgcolor.is_default) - else style.bgcolor.get_truecolor(_theme) - ) - if style.reverse: - color, bgcolor = bgcolor, color - if style.dim: - color = blend_rgb(color, bgcolor, 0.4) - css_rules.append(f"fill: {color.hex}") - if style.bold: - css_rules.append("font-weight: bold") - if style.italic: - css_rules.append("font-style: italic;") - if style.underline: - css_rules.append("text-decoration: underline;") - if style.strike: - css_rules.append("text-decoration: line-through;") - - css = ";".join(css_rules) - style_cache[style] = css - return css - - _theme = theme or SVG_EXPORT_THEME - - width = self.width - char_height = 20 - char_width = char_height * font_aspect_ratio - line_height = char_height * 1.22 - - margin_top = 1 - margin_right = 1 - margin_bottom = 1 - margin_left = 1 - - padding_top = 40 - padding_right = 8 - padding_bottom = 8 - padding_left = 8 - - padding_width = padding_left + padding_right - padding_height = padding_top + padding_bottom - margin_width = margin_left + margin_right - margin_height = margin_top + margin_bottom - - text_backgrounds: List[str] = [] - text_group: List[str] = [] - classes: Dict[str, int] = {} - style_no = 1 - - def escape_text(text: str) -> str: - """HTML escape text and replace spaces with nbsp.""" - return escape(text).replace(" ", "&#160;") - - def make_tag( - name: str, content: Optional[str] = None, **attribs: object - ) -> str: - """Make a tag from name, content, and attributes.""" - - def stringify(value: object) -> str: - if isinstance(value, (float)): - return format(value, "g") - return str(value) - - tag_attribs = " ".join( - f'{k.lstrip("_").replace("_", "-")}="{stringify(v)}"' - for k, v in attribs.items() - ) - return ( - f"<{name} {tag_attribs}>{content}</{name}>" - if content - else f"<{name} {tag_attribs}/>" - ) - - with self._record_buffer_lock: - segments = list(Segment.filter_control(self._record_buffer)) - if clear: - self._record_buffer.clear() - - if unique_id is None: - unique_id = "terminal-" + str( - zlib.adler32( - ("".join(repr(segment) for segment in segments)).encode( - "utf-8", - "ignore", - ) - + title.encode("utf-8", "ignore") - ) - ) - y = 0 - for y, line in enumerate(Segment.split_and_crop_lines(segments, length=width)): - x = 0 - for text, style, _control in line: - style = style or Style() - rules = get_svg_style(style) - if rules not in classes: - classes[rules] = style_no - style_no += 1 - class_name = f"r{classes[rules]}" - - if style.reverse: - has_background = True - background = ( - _theme.foreground_color.hex - if style.color is None - else style.color.get_truecolor(_theme).hex - ) - else: - bgcolor = style.bgcolor - has_background = bgcolor is not None and not bgcolor.is_default - background = ( - _theme.background_color.hex - if style.bgcolor is None - else style.bgcolor.get_truecolor(_theme).hex - ) - - text_length = cell_len(text) - if has_background: - text_backgrounds.append( - make_tag( - "rect", - fill=background, - x=x * char_width, - y=y * line_height + 1.5, - width=char_width * text_length, - height=line_height + 0.25, - shape_rendering="crispEdges", - ) - ) - - if text != " " * len(text): - text_group.append( - make_tag( - "text", - escape_text(text), - _class=f"{unique_id}-{class_name}", - x=x * char_width, - y=y * line_height + char_height, - textLength=char_width * len(text), - clip_path=f"url(#{unique_id}-line-{y})", - ) - ) - x += cell_len(text) - - line_offsets = [line_no * line_height + 1.5 for line_no in range(y)] - lines = "\n".join( - f"""<clipPath id="{unique_id}-line-{line_no}"> - {make_tag("rect", x=0, y=offset, width=char_width * width, height=line_height + 0.25)} - </clipPath>""" - for line_no, offset in enumerate(line_offsets) - ) - - styles = "\n".join( - f".{unique_id}-r{rule_no} {{ {css} }}" for css, rule_no in classes.items() - ) - backgrounds = "".join(text_backgrounds) - matrix = "".join(text_group) - - terminal_width = ceil(width * char_width + padding_width) - terminal_height = (y + 1) * line_height + padding_height - chrome = make_tag( - "rect", - fill=_theme.background_color.hex, - stroke="rgba(255,255,255,0.35)", - stroke_width="1", - x=margin_left, - y=margin_top, - width=terminal_width, - height=terminal_height, - rx=8, - ) - - title_color = _theme.foreground_color.hex - if title: - chrome += make_tag( - "text", - escape_text(title), - _class=f"{unique_id}-title", - fill=title_color, - text_anchor="middle", - x=terminal_width // 2, - y=margin_top + char_height + 6, - ) - chrome += f""" - <g transform="translate(26,22)"> - <circle cx="0" cy="0" r="7" fill="#ff5f57"/> - <circle cx="22" cy="0" r="7" fill="#febc2e"/> - <circle cx="44" cy="0" r="7" fill="#28c840"/> - </g> - """ - - svg = code_format.format( - unique_id=unique_id, - char_width=char_width, - char_height=char_height, - line_height=line_height, - terminal_width=char_width * width - 1, - terminal_height=(y + 1) * line_height - 1, - width=terminal_width + margin_width, - height=terminal_height + margin_height, - terminal_x=margin_left + padding_left, - terminal_y=margin_top + padding_top, - styles=styles, - chrome=chrome, - backgrounds=backgrounds, - matrix=matrix, - lines=lines, - ) - return svg - - def save_svg( - self, - path: str, - *, - title: str = "Rich", - theme: Optional[TerminalTheme] = None, - clear: bool = True, - code_format: str = CONSOLE_SVG_FORMAT, - font_aspect_ratio: float = 0.61, - unique_id: Optional[str] = None, - ) -> None: - """Generate an SVG file from the console contents (requires record=True in Console constructor). - - Args: - path (str): The path to write the SVG to. - title (str, optional): The title of the tab in the output image - theme (TerminalTheme, optional): The ``TerminalTheme`` object to use to style the terminal - clear (bool, optional): Clear record buffer after exporting. Defaults to ``True`` - code_format (str, optional): Format string used to generate the SVG. Rich will inject a number of variables - into the string in order to form the final SVG output. The default template used and the variables - injected by Rich can be found by inspecting the ``console.CONSOLE_SVG_FORMAT`` variable. - font_aspect_ratio (float, optional): The width to height ratio of the font used in the ``code_format`` - string. Defaults to 0.61, which is the width to height ratio of Fira Code (the default font). - If you aren't specifying a different font inside ``code_format``, you probably don't need this. - unique_id (str, optional): unique id that is used as the prefix for various elements (CSS styles, node - ids). If not set, this defaults to a computed value based on the recorded content. - """ - svg = self.export_svg( - title=title, - theme=theme, - clear=clear, - code_format=code_format, - font_aspect_ratio=font_aspect_ratio, - unique_id=unique_id, - ) - with open(path, "w", encoding="utf-8") as write_file: - write_file.write(svg)
    - - - -def _svg_hash(svg_main_code: str) -> str: - """Returns a unique hash for the given SVG main code. - - Args: - svg_main_code (str): The content we're going to inject in the SVG envelope. - - Returns: - str: a hash of the given content - """ - return str(zlib.adler32(svg_main_code.encode())) - - -if __name__ == "__main__": # pragma: no cover - console = Console(record=True) - - console.log( - "JSONRPC [i]request[/i]", - 5, - 1.3, - True, - False, - None, - { - "jsonrpc": "2.0", - "method": "subtract", - "params": {"minuend": 42, "subtrahend": 23}, - "id": 3, - }, - ) - - console.log("Hello, World!", "{'a': 1}", repr(console)) - - console.print( - { - "name": None, - "empty": [], - "quiz": { - "sport": { - "answered": True, - "q1": { - "question": "Which one is correct team name in NBA?", - "options": [ - "New York Bulls", - "Los Angeles Kings", - "Golden State Warriors", - "Huston Rocket", - ], - "answer": "Huston Rocket", - }, - }, - "maths": { - "answered": False, - "q1": { - "question": "5 + 7 = ?", - "options": [10, 11, 12, 13], - "answer": 12, - }, - "q2": { - "question": "12 - 8 = ?", - "options": [1, 2, 3, 4], - "answer": 4, - }, - }, - }, - } - ) -
    - -
    - - - - - - -
    - -
    -
    -
    - -
    - - - - -
    -
    - - -
    - - -
    -
    -
    - - - - - -
    -
    - - \ No newline at end of file diff --git a/static/python-api/html/_modules/scalecodec/utils/ss58.html b/static/python-api/html/_modules/scalecodec/utils/ss58.html index d973b1c817..80f4b1ca1d 100644 --- a/static/python-api/html/_modules/scalecodec/utils/ss58.html +++ b/static/python-api/html/_modules/scalecodec/utils/ss58.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    diff --git a/static/python-api/html/autoapi/bittensor/core/async_subtensor/index.html b/static/python-api/html/autoapi/bittensor/core/async_subtensor/index.html index b557092f24..6393c0f0ed 100644 --- a/static/python-api/html/autoapi/bittensor/core/async_subtensor/index.html +++ b/static/python-api/html/autoapi/bittensor/core/async_subtensor/index.html @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -401,67 +404,113 @@

    Contents

  • Functions
  • Module Contents
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -622,19 +625,16 @@

    Module Contents
    Returns:

    An instance of the axon class configured as per the provided arguments.

    -
    Return type:
    -

    bittensor.core.axon.Axon

    -

    Note

    @@ -666,14 +666,14 @@

    Module Contents
    Parameters:
    @@ -684,8 +684,8 @@

    Module Contents
    Parameters:
      -
    • parser (argparse.ArgumentParser) – Argument parser to which the arguments will be added.

    • -
    • prefix (Optional[str]) – Prefix to add to the argument names. Defaults to None.

    • +
    • parser (argparse.ArgumentParser) – Argument parser to which the arguments will be added.

    • +
    • prefix (Optional[str]) – Prefix to add to the argument names.

    @@ -716,17 +716,13 @@

    Module Contents
    Parameters:
      -
    • forward_fn (Callable) – Function to be called when the API endpoint is accessed. It should have at least one -argument.

    • -
    • blacklist_fn (Optional[Callable]) – Function to filter out undesired requests. It should take the same -arguments as forward_fn() and return a boolean value. Defaults to None, meaning no blacklist -filter will be used.

    • -
    • priority_fn (Optional[Callable]) – Function to rank requests based on their priority. It should take the same -arguments as forward_fn() and return a numerical value representing the request’s priority. -Defaults to None, meaning no priority sorting will be applied.

    • -
    • verify_fn (Optional[Callable]) – Function to verify requests. It should take the same arguments as -forward_fn() and return a boolean value. If None, self.default_verify() function will be -used.

    • +
    • forward_fn (Callable) – Function to be called when the API endpoint is accessed. It should have at least one argument.

    • +
    • blacklist_fn (Optional[Callable]) – Function to filter out undesired requests. It should take the same arguments as +forward_fn() and return a boolean value.

    • +
    • priority_fn (Optional[Callable]) – Function to rank requests based on their priority. It should take the same arguments as +forward_fn() and return a numerical value representing the request’s priority.

    • +
    • verify_fn (Optional[Callable]) – Function to verify requests. It should take the same arguments as forward_fn() and return a +boolean value. If None, self.default_verify() function will be used.

    Return type:
    @@ -741,26 +737,26 @@

    Module Contents
    Raises:
      -
    • AssertionError – If forward_fn() does not have the signature: forward( synapse: YourSynapse ) -> synapse.

    • -
    • AssertionError – If blacklist_fn() does not have the signature: blacklist( synapse: YourSynapse ) -> bool.

    • -
    • AssertionError – If priority_fn() does not have the signature: priority( synapse: YourSynapse ) -> float.

    • -
    • AssertionError – If verify_fn() does not have the signature: verify( synapse: YourSynapse ) -> None.

    • +
    • AssertionError – If forward_fn() does not have the signature: forward( synapse: YourSynapse ) -> synapse.

    • +
    • AssertionError – If blacklist_fn() does not have the signature: blacklist( synapse: YourSynapse ) -> bool.

    • +
    • AssertionError – If priority_fn() does not have the signature: priority( synapse: YourSynapse ) -> float.

    • +
    • AssertionError – If verify_fn() does not have the signature: verify( synapse: YourSynapse ) -> None.

    Returns:

    Returns the instance of the AxonServer class for potential method chaining.

    -
    Return type:
    -

    self

    -
    -
    Parameters:
    -
      +
      Parameters:
      +
      • forward_fn (Callable)

      • blacklist_fn (Optional[Callable])

      • priority_fn (Optional[Callable])

      • verify_fn (Optional[Callable])

      +
      Return type:
      +

      Axon

      +

      Example Usage:

      def forward_custom(synapse: MyCustomSynapse) -> MyCustomSynapse:
      @@ -792,7 +788,7 @@ 

      Module Contents
      -blacklist_fns: dict[str, Callable | None]#
      +blacklist_fns: dict[str, Callable | None]#
      @@ -804,7 +800,7 @@

      Module Contents

      config (bittensor.core.config.Config) – The config object holding axon settings.

    Raises:
    -

    AssertionError – If the axon or external ports are not in range [1024, 65535]

    +

    AssertionError – If the axon or external ports are not in range [1024, 65535]

    @@ -828,11 +824,11 @@

    Module Contentsasync default_verify(synapse)[source]#

    This method is used to verify the authenticity of a received message using a digital signature.

    It ensures that the message was not tampered with and was sent by the expected sender.

    -

    The default_verify() method in the Bittensor framework is a critical security function within the -Axon server. It is designed to authenticate incoming messages by verifying their digital -signatures. This verification ensures the integrity of the message and confirms that it was -indeed sent by the claimed sender. The method plays a pivotal role in maintaining the trustworthiness -and reliability of the communication within the Bittensor network.

    +

    The default_verify() method in the Bittensor framework is a critical security function within the Axon +server. It is designed to authenticate incoming messages by verifying their digital signatures. This +verification ensures the integrity of the message and confirms that it was indeed sent by the claimed sender. +The method plays a pivotal role in maintaining the trustworthiness and reliability of the communication within +the Bittensor network.

    Key Features
    Security Assurance

    The default_verify method is crucial for ensuring the security of the Bittensor network. By verifying @@ -865,9 +861,9 @@

    Module ContentsRaises:
      -
    • Exception – If the receiver_hotkey doesn’t match with self.receiver_hotkey.

    • -
    • Exception – If the nonce is not larger than the previous nonce for the same endpoint key.

    • -
    • Exception – If the signature verification fails.

    • +
    • Exception – If the receiver_hotkey doesn’t match with self.receiver_hotkey.

    • +
    • Exception – If the nonce is not larger than the previous nonce for the same endpoint key.

    • +
    • Exception – If the signature verification fails.

    @@ -882,12 +878,12 @@

    Module Contents
    -external_ip: str#
    +external_ip: str#

    -external_port: int#
    +external_port: int#
    @@ -902,12 +898,12 @@

    Module Contents
    -forward_class_types: dict[str, list[inspect.Signature]]#
    +forward_class_types: dict[str, list[inspect.Signature]]#

    -forward_fns: dict[str, Callable | None]#
    +forward_fns: dict[str, Callable | None]#
    @@ -934,7 +930,7 @@

    Module Contents
    -ip: str#
    +ip: str#

    @@ -944,17 +940,17 @@

    Module Contents
    -nonces: dict[str, int]#
    +nonces: dict[str, int]#

    -port: int#
    +port: int#
    -priority_fns: dict[str, Callable | None]#
    +priority_fns: dict[str, Callable | None]#
    @@ -965,32 +961,31 @@

    Module Contents
    serve(netuid, subtensor=None, certificate=None)[source]#
    -

    Serves the Axon on the specified subtensor connection using the configured wallet. This method -registers the Axon with a specific subnet within the Bittensor network, identified by the netuid. -It links the Axon to the broader network, allowing it to participate in the decentralized exchange -of information.

    +

    Serves the Axon on the specified subtensor connection using the configured wallet. This method registers the +Axon with a specific subnet within the Bittensor network, identified by the netuid. It links the Axon to the +broader network, allowing it to participate in the decentralized exchange of information.

    Parameters:
      -
    • netuid (int) – The unique identifier of the subnet to register on. This ID is essential for the Axon to +

    • netuid (int) – The unique identifier of the subnet to register on. This ID is essential for the Axon to correctly position itself within the Bittensor network topology.

    • -
    • subtensor (Optional[bittensor.core.subtensor.Subtensor]) – The subtensor connection to use for serving. If -not provided, a new connection is established based on default configurations.

    • -
    • certificate (Optional[bittensor.utils.Certificate])

    • +
    • subtensor (Optional[bittensor.core.subtensor.Subtensor]) – The subtensor connection to use for serving. If not provided, a new connection is established +based on default configurations.

    • +
    • certificate (Optional[bittensor.utils.Certificate]) – Neuron certificate.

    Returns:

    The Axon instance that is now actively serving on the specified subtensor.

    Return type:
    -

    bittensor.core.axon.Axon

    +

    Axon

    -

    Example:

    -
    my_axon = bittensor.Axon(...)
    -subtensor = bt.subtensor(network="local") # Local by default
    -my_axon.serve(netuid=1, subtensor=subtensor)  # Serves the axon on subnet with netuid 1
    -
    +
    +

    Example

    +

    my_axon = bittensor.Axon(…) +subtensor = bt.subtensor(network=”local”) # Local by default +my_axon.serve(netuid=1, subtensor=subtensor) # Serves the axon on subnet with netuid 1

    Note

    @@ -1016,11 +1011,11 @@

    Module Contents

    bittensor.core.axon.Axon

    -

    Example:

    -
    my_axon = bittensor.Axon(...)
    -... # setup axon, attach functions, etc.
    -my_axon.start()  # Starts the axon server
    -
    +
    +

    Example

    +

    my_axon = bittensor.Axon(…) +… # setup axon, attach functions, etc. +my_axon.start() # Starts the axon server

    Note

    @@ -1053,12 +1048,12 @@

    Module Contents

    bittensor.core.axon.Axon

    -

    Example:

    -
    my_axon = bittensor.Axon(...)
    -my_axon.start()
    -...
    -my_axon.stop()  # Stops the axon server
    -
    +
    +

    Example

    +

    my_axon = bittensor.Axon(…) +my_axon.start() +… +my_axon.stop() # Stops the axon server

    Note

    @@ -1095,23 +1090,23 @@

    Module Contents
    Parameters:
    -

    request (Request) – The incoming FastAPI request object containing both headers and the request body.

    +

    request (starlette.requests.Request) – The incoming FastAPI request object containing both headers and the request body.

    Returns:

    -
    Returns the parsed body of the request as a dictionary if all the hash comparisons match, indicating

    that the body is intact and has not been tampered with.

    +
    Returns the parsed body of the request as a dictionary if all the hash comparisons match, indicating that

    the body is intact and has not been tampered with.

    -
    Return type:
    -

    dict

    -
    -
    Raises:
    -

    JSONResponse – Raises a JSONResponse with a 400 status code if any of the hash comparisons fail, indicating +

    Raises:
    +

    JSONResponse – Raises a JSONResponse with a 400 status code if any of the hash comparisons fail, indicating a potential integrity issue with the incoming request payload. The response includes the detailed error message specifying which field has a hash mismatch.

    +
    Return type:
    +

    dict

    +

    This method performs several key functions:

      @@ -1131,7 +1126,7 @@

      Module Contents
      -verify_fns: dict[str, Callable | None]#
      +verify_fns: dict[str, Callable | None]#
      @@ -1146,30 +1141,29 @@

      Module Contentsclass bittensor.core.axon.AxonMiddleware(app, axon)[source]#

      Bases: starlette.middleware.base.BaseHTTPMiddleware

      The AxonMiddleware class is a key component in the Axon server, responsible for processing all incoming requests.

      -

      It handles the essential tasks of verifying requests, executing blacklist checks, -running priority functions, and managing the logging of messages and errors. Additionally, the class -is responsible for updating the headers of the response and executing the requested functions.

      -

      This middleware acts as an intermediary layer in request handling, ensuring that each request is -processed according to the defined rules and protocols of the Bittensor network. It plays a pivotal -role in maintaining the integrity and security of the network communication.

      +

      It handles the essential tasks of verifying requests, executing blacklist checks, running priority functions, and +managing the logging of messages and errors. Additionally, the class is responsible for updating the headers of the +response and executing the requested functions.

      +

      This middleware acts as an intermediary layer in request handling, ensuring that each request is processed according +to the defined rules and protocols of the Bittensor network. It plays a pivotal role in maintaining the integrity +and security of the network communication.

      Parameters:
        -
      • app (FastAPI) – An instance of the FastAPI application to which this middleware is attached.

      • -
      • axon (bittensor.core.axon.Axon) – The Axon instance that will process the requests.

      • +
      • app (AxonMiddleware) – An instance of the FastAPI application to which this middleware is attached.

      • +
      • axon (Axon) – The Axon instance that will process the requests.

      -

      The middleware operates by intercepting incoming requests, performing necessary preprocessing -(like verification and priority assessment), executing the request through the Axon’s endpoints, and -then handling any postprocessing steps such as response header updating and logging.

      +

      The middleware operates by intercepting incoming requests, performing necessary preprocessing (like verification and +priority assessment), executing the request through the Axon’s endpoints, and then handling any postprocessing steps +such as response header updating and logging.

      Initialize the AxonMiddleware class.

      Parameters:
      @@ -1181,16 +1175,15 @@

      Module Contents
      async blacklist(synapse)[source]#
      -

      Checks if the request should be blacklisted. This method ensures that requests from disallowed -sources or with malicious intent are blocked from processing. This can be extremely useful for -preventing spam or other forms of abuse. The blacklist is a list of keys or identifiers that -are prohibited from accessing certain resources.

      +

      Checks if the request should be blacklisted. This method ensures that requests from disallowed sources or with +malicious intent are blocked from processing. This can be extremely useful for preventing spam or other forms of +abuse. The blacklist is a list of keys or identifiers that are prohibited from accessing certain resources.

      Parameters:

      synapse (bittensor.core.synapse.Synapse) – The Synapse object representing the request.

      Raises:
      -

      Exception – If the request is found in the blacklist.

      +

      Exception – If the request is found in the blacklist.

      The blacklist check involves:

      @@ -1204,14 +1197,13 @@

      Module Contents
      async dispatch(request, call_next)[source]#
      -

      Asynchronously processes incoming HTTP requests and returns the corresponding responses. This -method acts as the central processing unit of the AxonMiddleware, handling each step in the -request lifecycle.

      +

      Asynchronously processes incoming HTTP requests and returns the corresponding responses. This method acts as the +central processing unit of the AxonMiddleware, handling each step in the request lifecycle.

      Parameters:
        -
      • request (Request) – The incoming HTTP request to be processed.

      • -
      • call_next (RequestResponseEndpoint) – A callable that processes the request and returns a response.

      • +
      • request (starlette.requests.Request) – The incoming HTTP request to be processed.

      • +
      • call_next (starlette.middleware.base.RequestResponseEndpoint) – A callable that processes the request and returns a response.

      Returns:
      @@ -1238,12 +1230,12 @@

      Module Contents
      async preprocess(request)[source]#
      -

      Performs the initial processing of the incoming request. This method is responsible for -extracting relevant information from the request and setting up the Synapse object, which -represents the state and context of the request within the Axon server.

      +

      Performs the initial processing of the incoming request. This method is responsible for extracting relevant +information from the request and setting up the Synapse object, which represents the state and context of the +request within the Axon server.

      Parameters:
      -

      request (Request) – The incoming request to be preprocessed.

      +

      request (starlette.requests.Request) – The incoming request to be preprocessed.

      Returns:

      The Synapse object representing the preprocessed state of the request.

      @@ -1273,7 +1265,7 @@

      Module Contents

      synapse (bittensor.core.synapse.Synapse) – The Synapse object representing the request.

      Raises:
      -

      Exception – If the priority assessment process encounters issues, such as timeouts.

      +

      Exception – If the priority assessment process encounters issues, such as timeouts.

      The priority function plays a crucial role in managing the processing load and ensuring that @@ -1289,8 +1281,8 @@

      Module ContentsParameters:
      • synapse (bittensor.core.synapse.Synapse) – The Synapse object representing the request.

      • -
      • call_next (RequestResponseEndpoint) – The next function in the middleware chain to process requests.

      • -
      • request (Request) – The original HTTP request.

      • +
      • call_next (starlette.middleware.base.RequestResponseEndpoint) – The next function in the middleware chain to process requests.

      • +
      • request (starlette.requests.Request) – The original HTTP request.

      Returns:
      @@ -1313,7 +1305,7 @@

      Module ContentsParameters:
      @@ -1326,7 +1318,7 @@

      Module ContentsParameters:
      • synapse (bittensor.core.synapse.Synapse) – The Synapse object representing the request.

      • -
      • start_time (float) – The timestamp when the request processing started.

      • +
      • start_time (float) – The timestamp when the request processing started.

      • response_override (Optional[starlette.responses.Response]) – Instead of serializing the synapse, mutate the provided response object. This is only really useful for StreamingSynapse responses.

      @@ -1345,14 +1337,14 @@

      Module Contents
      async verify(synapse)[source]#
      -

      Verifies the authenticity and integrity of the request. This method ensures that the incoming -request meets the predefined security and validation criteria.

      +

      Verifies the authenticity and integrity of the request. This method ensures that the incoming request meets the +predefined security and validation criteria.

      Parameters:

      synapse (bittensor.core.synapse.Synapse) – The Synapse object representing the request.

      Raises:
      -

      Exception – If the verification process fails due to unmet criteria or security concerns.

      +

      Exception – If the verification process fails due to unmet criteria or security concerns.

      The verification process involves:

      @@ -1416,8 +1408,8 @@

      Module Contents
      Parameters:
        -
      • should_exit (bool) – Flag to indicate whether the server should stop running.

      • -
      • is_running (bool) – Flag to indicate whether the server is currently running.

      • +
      • should_exit – Flag to indicate whether the server should stop running.

      • +
      • is_running – Flag to indicate whether the server is currently running.

      • config (uvicorn.config.Config)

      @@ -1434,7 +1426,7 @@

      Module Contents
      -is_running: bool = False#
      +is_running: bool = False#

      @@ -1452,7 +1444,7 @@

      Module Contents
      -should_exit: bool = False#
      +should_exit: bool = False#

      @@ -1486,8 +1478,7 @@

      Module Contents
      Parameters:
      -

      synapse (bittensor.core.synapse.Synapse) – The synapse object containing details about the request and the -associated axon.

      +

      synapse (bittensor.core.synapse.Synapse) – The synapse object containing details about the request and the associated axon.

      Returns:

      A JSON response with a status code and content indicating the error message.

      @@ -1506,17 +1497,16 @@

      Module ContentsParameters:
      • synapse (bittensor.core.synapse.Synapse) – The synapse object to be updated with error information.

      • -
      • exception (Exception) – The exception that was raised and needs to be logged and handled.

      • -
      • status_code (Optional[int]) – The HTTP status code to be set on the synapse object. Defaults to None.

      • -
      • start_time (Optional[float]) – The timestamp marking the start of the processing, used to calculate process time. -Defaults to None.

      • +
      • exception (Exception) – The exception that was raised and needs to be logged and handled.

      • +
      • status_code (Optional[int]) – The HTTP status code to be set on the synapse object.

      • +
      • start_time (Optional[float]) – The timestamp marking the start of the processing, used to calculate process time.

      Returns:

      The updated synapse object with error details.

      Return type:
      -

      Synapse

      +

      bittensor.core.synapse.Synapse

      diff --git a/static/python-api/html/autoapi/bittensor/core/chain_data/axon_info/index.html b/static/python-api/html/autoapi/bittensor/core/chain_data/axon_info/index.html index bb9005e00c..332746ca9e 100644 --- a/static/python-api/html/autoapi/bittensor/core/chain_data/axon_info/index.html +++ b/static/python-api/html/autoapi/bittensor/core/chain_data/axon_info/index.html @@ -161,25 +161,28 @@
    1. bittensor.core.settings
    2. bittensor.core.stream
    3. bittensor.core.subtensor
    4. -
    5. bittensor.core.subtensor_api
    6. bittensor.core.synapse
    7. bittensor.core.tensor
    8. bittensor.core.threadpool
    9. -
    10. bittensor.core.timelock
    11. bittensor.core.types

  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -457,21 +460,21 @@

    Module Contents
    Variables:
      -
    • version (int) – The version of the axon endpoint.

    • -
    • ip (str) – The IP address of the axon endpoint.

    • -
    • port (int) – The port number the axon endpoint uses.

    • -
    • ip_type (int) – The type of IP protocol (e.g., IPv4 or IPv6).

    • -
    • hotkey (str) – The hotkey associated with the axon endpoint.

    • -
    • coldkey (str) – The coldkey associated with the axon endpoint.

    • -
    • protocol (int) – The protocol version (default is 4).

    • -
    • placeholder1 (int) – Reserved field (default is 0).

    • -
    • placeholder2 (int) – Reserved field (default is 0).

    • +
    • version (int) – The version of the axon endpoint.

    • +
    • ip (str) – The IP address of the axon endpoint.

    • +
    • port (int) – The port number the axon endpoint uses.

    • +
    • ip_type (int) – The type of IP protocol (e.g., IPv4 or IPv6).

    • +
    • hotkey (str) – The hotkey associated with the axon endpoint.

    • +
    • coldkey (str) – The coldkey associated with the axon endpoint.

    • +
    • protocol (int) – The protocol version (default is 4).

    • +
    • placeholder1 (int) – Reserved field (default is 0).

    • +
    • placeholder2 (int) – Reserved field (default is 0).

    -coldkey: str#
    +coldkey: str#
    @@ -480,13 +483,13 @@

    Module Contents
    Parameters:
    -

    neuron_info (dict) – A dictionary containing the neuron information.

    +

    neuron_info (dict) – A dictionary containing the neuron information.

    Returns:

    An instance of AxonInfo created from the dictionary.

    Return type:
    -

    instance (AxonInfo)

    +

    AxonInfo

    @@ -497,7 +500,7 @@

    Module Contents
    Parameters:
    -

    parameter_dict (Union[dict[str, Any], bittensor.utils.registration.torch.nn.ParameterDict])

    +

    parameter_dict (Union[dict[str, Any], bittensor.utils.registration.torch.nn.ParameterDict])

    Return type:

    AxonInfo

    @@ -511,36 +514,36 @@

    Module Contents
    Parameters:
    -

    json_string (str) – The JSON string representation of the AxonInfo object.

    +

    json_string (str) – The JSON string representation of the AxonInfo object.

    Returns:

    -
    An instance of AxonInfo created from the JSON string. If decoding fails, returns a default

    AxonInfo object with default values.

    +
    An instance of AxonInfo created from the JSON string. If decoding fails, returns a default AxonInfo` object

    with default values.

    -
    Return type:
    -

    AxonInfo

    -
    -
    Raises:
    -
      -
    • json.JSONDecodeError – If there is an error in decoding the JSON string.

    • -
    • TypeError – If there is a type error when creating the AxonInfo object.

    • -
    • ValueError – If there is a value error when creating the AxonInfo object.

    • +
      Raises:
      +
        +
      • json.JSONDecodeError – If there is an error in decoding the JSON string.

      • +
      • TypeError – If there is a type error when creating the AxonInfo object.

      • +
      • ValueError – If there is a value error when creating the AxonInfo object.

      +
      Return type:
      +

      AxonInfo

      +
    -hotkey: str#
    +hotkey: str#
    -ip: str#
    +ip: str#
    @@ -549,45 +552,45 @@

    Module Contents
    Return type:
    -

    str

    +

    str

    -ip_type: int#
    +ip_type: int#
    -property is_serving: bool#
    +property is_serving: bool#

    True if the endpoint is serving.

    Return type:
    -

    bool

    +

    bool

    -placeholder1: int = 0#
    +placeholder1: int = 0#
    -placeholder2: int = 0#
    +placeholder2: int = 0#
    -port: int#
    +port: int#
    -protocol: int = 4#
    +protocol: int = 4#
    @@ -596,7 +599,7 @@

    Module Contents
    Return type:
    -

    Union[dict[str, Union[int, str]], bittensor.utils.registration.torch.nn.ParameterDict]

    +

    Union[dict[str, Union[int, str]], bittensor.utils.registration.torch.nn.ParameterDict]

    @@ -607,14 +610,14 @@

    Module Contents
    Return type:
    -

    str

    +

    str

    -version: int#
    +version: int#
    diff --git a/static/python-api/html/autoapi/bittensor/core/chain_data/chain_identity/index.html b/static/python-api/html/autoapi/bittensor/core/chain_data/chain_identity/index.html index 6822528ee2..31a1d205a3 100644 --- a/static/python-api/html/autoapi/bittensor/core/chain_data/chain_identity/index.html +++ b/static/python-api/html/autoapi/bittensor/core/chain_data/chain_identity/index.html @@ -48,7 +48,7 @@ - + @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -444,37 +447,37 @@

    Module Contents
    -additional: str#
    +additional: str#
    -description: str#
    +description: str#
    -discord: str#
    +discord: str#
    -github: str#
    +github: str#
    -image: str#
    +image: str#
    -name: str#
    +name: str#
    -url: str#
    +url: str#
    @@ -503,11 +506,11 @@

    Module Contents

    next

    -

    bittensor.core.chain_data.delegate_info

    +

    bittensor.core.chain_data.crowdloan_info

    diff --git a/static/python-api/html/autoapi/bittensor/core/chain_data/crowdloan_info/index.html b/static/python-api/html/autoapi/bittensor/core/chain_data/crowdloan_info/index.html new file mode 100644 index 0000000000..366bc1f73f --- /dev/null +++ b/static/python-api/html/autoapi/bittensor/core/chain_data/crowdloan_info/index.html @@ -0,0 +1,786 @@ + + + + + + + + + + + bittensor.core.chain_data.crowdloan_info — Bittensor SDK Docs documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + +
    + +
    + + + + + +
    +
    + + + + + + +
    + + + +
    + +
    +
    + +
    +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + + + + + + + +
    + +
    +

    bittensor.core.chain_data.crowdloan_info#

    +
    +

    Classes#

    +
    + + + + + + + + +

    CrowdloanConstants

    Represents all runtime constants defined in the pallet-crowdloan.

    CrowdloanInfo

    Represents a single on-chain crowdloan campaign from the pallet-crowdloan.

    +
    +
    +
    +

    Module Contents#

    +
    +
    +class bittensor.core.chain_data.crowdloan_info.CrowdloanConstants#
    +

    Represents all runtime constants defined in the pallet-crowdloan.

    +

    These attributes correspond directly to on-chain configuration constants exposed by the Crowdloan pallet. They +define contribution limits, duration bounds, pallet identifiers, and refund behavior that govern how crowdloan +campaigns operate within the Subtensor network.

    +

    Each attribute is fetched directly from the runtime via Subtensor.substrate.get_constant(“Crowdloan”, <name>) and +reflects the current chain configuration at the time of retrieval.

    +
    +
    Variables:
    +
      +
    • AbsoluteMinimumContribution – The absolute minimum amount required to contribute to any crowdloan.

    • +
    • MaxContributors – The maximum number of unique contributors allowed per crowdloan.

    • +
    • MaximumBlockDuration – The maximum allowed duration (in blocks) for a crowdloan campaign.

    • +
    • MinimumDeposit – The minimum deposit required from the creator to open a new crowdloan.

    • +
    • MinimumBlockDuration – The minimum allowed duration (in blocks) for a crowdloan campaign.

    • +
    • RefundContributorsLimit – The maximum number of contributors that can be refunded in single on-chain refund call.

    • +
    +
    +
    +
    +

    Note

    +

    All Balance amounts are in RAO.

    +
    +
    +
    +AbsoluteMinimumContribution: bittensor.utils.balance.Balance | None#
    +
    + +
    +
    +MaxContributors: int | None#
    +
    + +
    +
    +MaximumBlockDuration: int | None#
    +
    + +
    +
    +MinimumBlockDuration: int | None#
    +
    + +
    +
    +MinimumDeposit: bittensor.utils.balance.Balance | None#
    +
    + +
    +
    +RefundContributorsLimit: int | None#
    +
    + +
    +
    +classmethod constants_names()#
    +

    Returns the list of all constant field names defined in this dataclass.

    +
    +
    Return type:
    +

    list[str]

    +
    +
    +
    + +
    +
    +classmethod from_dict(data)#
    +

    Creates a CrowdloanConstants instance from a dictionary of decoded chain constants.

    +
    +
    Parameters:
    +

    data (dict) – Dictionary mapping constant names to their decoded values (returned by Subtensor.query_constant()).

    +
    +
    Returns:
    +

    The structured dataclass with constants filled in.

    +
    +
    Return type:
    +

    CrowdloanConstants

    +
    +
    +
    + +
    + +
    +
    +class bittensor.core.chain_data.crowdloan_info.CrowdloanInfo#
    +

    Represents a single on-chain crowdloan campaign from the pallet-crowdloan.

    +

    Each instance reflects the current state of a specific crowdloan as stored in chain storage. It includes funding +details, creator information, contribution totals, and optional call/target data that define what happens upon +successful finalization.

    +
    +
    Variables:
    +
      +
    • id – The unique identifier (index) of the crowdloan.

    • +
    • creator – The SS58 address of the creator (campaign initiator).

    • +
    • deposit – The creator’s initial deposit locked to open the crowdloan.

    • +
    • min_contribution – The minimum contribution amount allowed per participant.

    • +
    • end – The block number when the campaign ends.

    • +
    • cap – The maximum amount to be raised (funding cap).

    • +
    • funds_account – The account ID holding the crowdloan’s funds.

    • +
    • raised – The total amount raised so far.

    • +
    • target_address – Optional SS58 address to which funds are transferred upon success.

    • +
    • call – Optional encoded runtime call (e.g., a register_leased_network extrinsic) to execute on finalize.

    • +
    • finalized – Whether the crowdloan has been finalized on-chain.

    • +
    • contributors_count – Number of unique contributors currently participating.

    • +
    +
    +
    +
    +
    +call: str | None#
    +
    + +
    +
    +cap: bittensor.utils.balance.Balance#
    +
    + +
    +
    +contributors_count: int#
    +
    + +
    +
    +creator: str#
    +
    + +
    +
    +deposit: bittensor.utils.balance.Balance#
    +
    + +
    +
    +end: int#
    +
    + +
    +
    +finalized: bool#
    +
    + +
    +
    +classmethod from_dict(idx, data)#
    +

    Returns a CrowdloanInfo object from decoded chain data.

    +
    +
    Parameters:
    +
    +
    +
    Return type:
    +

    CrowdloanInfo

    +
    +
    +
    + +
    +
    +funds_account: str#
    +
    + +
    +
    +id: int#
    +
    + +
    +
    +min_contribution: bittensor.utils.balance.Balance#
    +
    + +
    +
    +raised: bittensor.utils.balance.Balance#
    +
    + +
    +
    +target_address: str | None#
    +
    + +
    + +
    +
    + + +
    + + + + + + + + +
    + + + + + + + +
    +
    + + +
    + + +
    +
    +
    + + + + + +
    +
    + + \ No newline at end of file diff --git a/static/python-api/html/autoapi/bittensor/core/chain_data/delegate_info/index.html b/static/python-api/html/autoapi/bittensor/core/chain_data/delegate_info/index.html index ffd62038f6..91de5a37f7 100644 --- a/static/python-api/html/autoapi/bittensor/core/chain_data/delegate_info/index.html +++ b/static/python-api/html/autoapi/bittensor/core/chain_data/delegate_info/index.html @@ -49,7 +49,7 @@ - + @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -410,7 +413,6 @@

    Contents

  • DelegateInfoBase.registrations
  • DelegateInfoBase.return_per_1000
  • DelegateInfoBase.take
  • -
  • DelegateInfoBase.total_daily_return
  • DelegateInfoBase.validator_permits
  • @@ -445,7 +447,7 @@

    Classes#<

    Base class containing common delegate information fields.

    DelegatedInfo

    -

    Dataclass for delegated information. This class represents a delegate's information

    +

    Dataclass for delegated information. This class represents a delegate's information specific to a particular subnet.

    @@ -459,53 +461,52 @@

    Module ContentsDelegateInfoBase

    Dataclass for delegate information.

    -
    Additional Attributes:

    total_stake (dict[int, Balance]): Total stake of the delegate mapped by netuid. -nominators (dict[str, dict[int, Balance]]): Mapping of nominator SS58 addresses to their stakes per subnet.

    +
    Additional Attributes:

    total_stake: Total stake of the delegate mapped by netuid. +nominators: Mapping of nominator SS58 addresses to their stakes per subnet.

    -nominators: dict[str, dict[int, bittensor.utils.balance.Balance]]#
    +nominators: dict[str, dict[int, bittensor.utils.balance.Balance]]#
    -total_stake: dict[int, bittensor.utils.balance.Balance]#
    +total_stake: dict[int, bittensor.utils.balance.Balance]#
    -class bittensor.core.chain_data.delegate_info.DelegateInfoBase#
    +class bittensor.core.chain_data.delegate_info.DelegateInfoBase[source]#

    Bases: bittensor.core.chain_data.info_base.InfoBase

    Base class containing common delegate information fields.

    Variables:
      -
    • hotkey_ss58 (str) – Hotkey of delegate.

    • -
    • owner_ss58 (str) – Coldkey of owner.

    • -
    • take (float) – Take of the delegate as a percentage.

    • -
    • validator_permits (list[int]) – List of subnets that the delegate is allowed to validate on.

    • -
    • registrations (list[int]) – List of subnets that the delegate is registered on.

    • -
    • return_per_1000 (Balance) – Return per 1000 tao of the delegate over a day.

    • -
    • total_daily_return (Balance) – Total daily return of the delegate.

    • +
    • hotkey_ss58 – Hotkey of delegate.

    • +
    • owner_ss58 – Coldkey of owner.

    • +
    • take – Take of the delegate as a percentage.

    • +
    • validator_permits – List of subnets that the delegate is allowed to validate on.

    • +
    • registrations – List of subnets that the delegate is registered on.

    • +
    • return_per_1000 – Return per 1000 tao of the delegate over a day.

    -hotkey_ss58: str#
    +hotkey_ss58: str#
    -owner_ss58: str#
    +owner_ss58: str#
    -registrations: list[int]#
    +registrations: list[int]#
    @@ -515,35 +516,29 @@

    Module Contents
    -take: float#
    -

    - -
    -
    -total_daily_return: bittensor.utils.balance.Balance#
    +take: float#
    -validator_permits: list[int]#
    +validator_permits: list[int]#
    -class bittensor.core.chain_data.delegate_info.DelegatedInfo#
    +class bittensor.core.chain_data.delegate_info.DelegatedInfo[source]#

    Bases: DelegateInfoBase

    -

    Dataclass for delegated information. This class represents a delegate’s information -specific to a particular subnet.

    +

    Dataclass for delegated information. This class represents a delegate’s information specific to a particular subnet.

    -
    Additional Attributes:

    netuid (int): Network ID of the subnet. -stake (Balance): Stake amount for this specific delegation.

    +
    Additional Attributes:

    netuid: Network ID of the subnet. +stake: Stake amount for this specific delegation.

    -netuid: int#
    +netuid: int#
    @@ -568,12 +563,12 @@

    Module Contents

    previous

    -

    bittensor.core.chain_data.chain_identity

    +

    bittensor.core.chain_data.crowdloan_info

    Module ContentsDelegateInfoBase.registrations
  • DelegateInfoBase.return_per_1000
  • DelegateInfoBase.take
  • -
  • DelegateInfoBase.total_daily_return
  • DelegateInfoBase.validator_permits
  • diff --git a/static/python-api/html/autoapi/bittensor/core/chain_data/delegate_info_lite/index.html b/static/python-api/html/autoapi/bittensor/core/chain_data/delegate_info_lite/index.html index 8e4ed47660..3331285b61 100644 --- a/static/python-api/html/autoapi/bittensor/core/chain_data/delegate_info_lite/index.html +++ b/static/python-api/html/autoapi/bittensor/core/chain_data/delegate_info_lite/index.html @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -406,7 +409,6 @@

    Contents

  • DelegateInfoLite.registrations
  • DelegateInfoLite.return_per_1000
  • DelegateInfoLite.take
  • -
  • DelegateInfoLite.total_daily_return
  • DelegateInfoLite.validator_permits
  • @@ -446,35 +448,34 @@

    Module Contents
    Parameters:
      -
    • delegate_ss58 (str) – Hotkey of the delegate for which the information is being fetched.

    • -
    • take (float) – Take of the delegate as a percentage.

    • -
    • nominators (int) – Count of the nominators of the delegate.

    • -
    • owner_ss58 (str) – Coldkey of the owner.

    • -
    • registrations (list[int]) – List of subnets that the delegate is registered on.

    • -
    • validator_permits (list[int]) – List of subnets that the delegate is allowed to validate on.

    • -
    • return_per_1000 (int) – Return per 1000 TAO, for the delegate over a day.

    • -
    • total_daily_return (int) – Total daily return of the delegate.

    • +
    • delegate_ss58 – Hotkey of the delegate for which the information is being fetched.

    • +
    • take – Take of the delegate as a percentage.

    • +
    • nominators – Count of the nominators of the delegate.

    • +
    • owner_ss58 – Coldkey of the owner.

    • +
    • registrations – List of subnets that the delegate is registered on.

    • +
    • validator_permits – List of subnets that the delegate is allowed to validate on.

    • +
    • return_per_1000 – Return per 1000 TAO, for the delegate over a day.

    -delegate_ss58: str#
    +delegate_ss58: str#
    -nominators: int#
    +nominators: int#
    -owner_ss58: str#
    +owner_ss58: str#
    -registrations: list[int]#
    +registrations: list[int]#
    @@ -484,17 +485,12 @@

    Module Contents
    -take: float#
    -

    - -
    -
    -total_daily_return: bittensor.utils.balance.Balance#
    +take: float#
    -validator_permits: list[int]#
    +validator_permits: list[int]#
    @@ -557,7 +553,6 @@

    Module ContentsDelegateInfoLite.registrations
  • DelegateInfoLite.return_per_1000
  • DelegateInfoLite.take
  • -
  • DelegateInfoLite.total_daily_return
  • DelegateInfoLite.validator_permits
  • diff --git a/static/python-api/html/autoapi/bittensor/core/chain_data/dynamic_info/index.html b/static/python-api/html/autoapi/bittensor/core/chain_data/dynamic_info/index.html index 5fe741d665..4e38708b2b 100644 --- a/static/python-api/html/autoapi/bittensor/core/chain_data/dynamic_info/index.html +++ b/static/python-api/html/autoapi/bittensor/core/chain_data/dynamic_info/index.html @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -448,8 +451,8 @@

    Contents

    bittensor.core.chain_data.dynamic_info#

    -

    This module defines the DynamicInfo data class and associated methods for handling and decoding -dynamic information in the Bittensor network.

    +

    This module defines the DynamicInfo data class and associated methods for handling and decoding dynamic information in +the Bittensor network.

    Classes#

    @@ -498,7 +501,7 @@

    Module Contentsalpha_to_tao(alpha)[source]#
    Parameters:
    -

    alpha (Union[bittensor.utils.balance.Balance, float, int])

    +

    alpha (Union[bittensor.utils.balance.Balance, float, int])

    Return type:

    bittensor.utils.balance.Balance

    @@ -513,8 +516,8 @@

    Module Contents
    Parameters:
    Returns:
    @@ -523,14 +526,14 @@

    Module ContentsReturn type: -

    Union[tuple[bittensor.utils.balance.Balance, bittensor.utils.balance.Balance], float]

    +

    Union[tuple[bittensor.utils.balance.Balance, bittensor.utils.balance.Balance], float]

    -blocks_since_last_step: int#
    +blocks_since_last_step: int#
    @@ -540,42 +543,42 @@

    Module Contents
    -is_dynamic: bool#
    +is_dynamic: bool#

    -k: float#
    +k: float#
    -last_step: int#
    +last_step: int#
    -moving_price: float#
    +moving_price: float#
    -netuid: int#
    +netuid: int#
    -network_registered_at: int#
    +network_registered_at: int#
    -owner_coldkey: str#
    +owner_coldkey: str#
    -owner_hotkey: str#
    +owner_hotkey: str#
    @@ -590,7 +593,7 @@

    Module Contents
    -price: bittensor.utils.balance.Balance#
    +price: bittensor.utils.balance.Balance | None#

    @@ -600,12 +603,12 @@

    Module Contents
    -subnet_identity: bittensor.core.chain_data.subnet_identity.SubnetIdentity | None#
    +subnet_identity: bittensor.core.chain_data.subnet_identity.SubnetIdentity | None#

    -subnet_name: str#
    +subnet_name: str#
    @@ -615,7 +618,7 @@

    Module Contents
    -symbol: str#
    +symbol: str#

    @@ -638,7 +641,7 @@

    Module Contentstao_to_alpha(tao)[source]#
    Parameters:
    -

    tao (Union[bittensor.utils.balance.Balance, float, int])

    +

    tao (Union[bittensor.utils.balance.Balance, float, int])

    Return type:

    bittensor.utils.balance.Balance

    @@ -653,8 +656,8 @@

    Module Contents
    Parameters:
    Returns:
    @@ -663,14 +666,14 @@

    Module ContentsReturn type: -

    Union[tuple[bittensor.utils.balance.Balance, bittensor.utils.balance.Balance], float]

    +

    Union[tuple[bittensor.utils.balance.Balance, bittensor.utils.balance.Balance], float]

    -tempo: int#
    +tempo: int#
    diff --git a/static/python-api/html/autoapi/bittensor/core/chain_data/index.html b/static/python-api/html/autoapi/bittensor/core/chain_data/index.html index b24991a020..5e05d9b703 100644 --- a/static/python-api/html/autoapi/bittensor/core/chain_data/index.html +++ b/static/python-api/html/autoapi/bittensor/core/chain_data/index.html @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -398,6 +401,11 @@

    Contents

    @@ -419,6 +427,7 @@

    Submodulesbittensor.core.chain_data.axon_info

  • bittensor.core.chain_data.chain_identity
  • +
  • bittensor.core.chain_data.crowdloan_info
  • bittensor.core.chain_data.delegate_info
  • bittensor.core.chain_data.delegate_info_lite
  • bittensor.core.chain_data.dynamic_info
  • @@ -429,7 +438,10 @@

    Submodulesbittensor.core.chain_data.neuron_info_lite
  • bittensor.core.chain_data.prometheus_info
  • bittensor.core.chain_data.proposal_vote_data
  • +
  • bittensor.core.chain_data.proxy
  • +
  • bittensor.core.chain_data.root_claim
  • bittensor.core.chain_data.scheduled_coldkey_swap_info
  • +
  • bittensor.core.chain_data.sim_swap
  • bittensor.core.chain_data.stake_info
  • bittensor.core.chain_data.subnet_hyperparameters
  • bittensor.core.chain_data.subnet_identity
  • @@ -439,6 +451,25 @@

    Submodulesbittensor.core.chain_data.weight_commit_info + +
    +

    Attributes#

    +

    + + + + + +

    ProposalCallData

    +
    +
    +
    +

    Package Contents#

    +
    +
    +bittensor.core.chain_data.ProposalCallData#
    +
    +
    @@ -489,6 +520,11 @@

    Submodules diff --git a/static/python-api/html/autoapi/bittensor/core/chain_data/info_base/index.html b/static/python-api/html/autoapi/bittensor/core/chain_data/info_base/index.html index 8899b192ea..a7326f9684 100644 --- a/static/python-api/html/autoapi/bittensor/core/chain_data/info_base/index.html +++ b/static/python-api/html/autoapi/bittensor/core/chain_data/info_base/index.html @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -454,7 +457,7 @@

    Module Contentsclassmethod from_dict(decoded)[source]#
    Parameters:
    -

    decoded (dict)

    +

    decoded (dict)

    Return type:

    T

    @@ -467,10 +470,10 @@

    Module Contentsclassmethod list_from_dicts(any_list)[source]#
    Parameters:
    -

    any_list (list[Any])

    +

    any_list (list[Any])

    Return type:
    -

    list[T]

    +

    list[T]

    diff --git a/static/python-api/html/autoapi/bittensor/core/chain_data/ip_info/index.html b/static/python-api/html/autoapi/bittensor/core/chain_data/ip_info/index.html index be1ced2b9e..1e61287753 100644 --- a/static/python-api/html/autoapi/bittensor/core/chain_data/ip_info/index.html +++ b/static/python-api/html/autoapi/bittensor/core/chain_data/ip_info/index.html @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -443,9 +446,9 @@

    Module Contents
    Variables:
      -
    • ip (str) – The IP address as a string.

    • -
    • ip_type (int) – The type of the IP address (e.g., IPv4, IPv6).

    • -
    • protocol (int) – The protocol associated with the IP (e.g., TCP, UDP).

    • +
    • ip – The IP address as a string.

    • +
    • ip_type – The type of the IP address (e.g., IPv4, IPv6).

    • +
    • protocol – The protocol associated with the IP (e.g., TCP, UDP).

    @@ -455,7 +458,7 @@

    Module Contents
    Return type:
    -

    dict[str, Any]

    +

    dict[str, Any]

    @@ -466,7 +469,7 @@

    Module Contents
    Parameters:
    -

    parameter_dict (Union[dict[str, Any], bittensor.utils.registration.torch.nn.ParameterDict])

    +

    parameter_dict (Union[dict[str, Any], bittensor.utils.registration.torch.nn.ParameterDict])

    Return type:

    IPInfo

    @@ -476,17 +479,17 @@

    Module Contents
    -ip: str#
    +ip: str#
    -ip_type: int#
    +ip_type: int#
    -protocol: int#
    +protocol: int#
    @@ -495,7 +498,7 @@

    Module Contents
    Return type:
    -

    Union[dict[str, Union[str, int]], bittensor.utils.registration.torch.nn.ParameterDict]

    +

    Union[dict[str, Union[str, int]], bittensor.utils.registration.torch.nn.ParameterDict]

    diff --git a/static/python-api/html/autoapi/bittensor/core/chain_data/metagraph_info/index.html b/static/python-api/html/autoapi/bittensor/core/chain_data/metagraph_info/index.html index 045b9c8e02..8e7e059026 100644 --- a/static/python-api/html/autoapi/bittensor/core/chain_data/metagraph_info/index.html +++ b/static/python-api/html/autoapi/bittensor/core/chain_data/metagraph_info/index.html @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -397,6 +400,7 @@

    Contents

  • +
  • SELECTIVE_METAGRAPH_COMMITMENTS_OFFSET
  • SelectiveMetagraphIndex
  • +
  • get_selective_metagraph_commitments()
  • process_nested()
  • @@ -616,6 +627,17 @@

    Contents

    bittensor.core.chain_data.metagraph_info#

    +
    +

    Attributes#

    + +

    Classes#

    @@ -643,7 +665,10 @@

    Classes#<

    Functions#

    - + + + + @@ -659,32 +684,32 @@

    Module Contents
    -active: list[bool]#
    +active: list[bool]#
    -activity_cutoff: int#
    +activity_cutoff: int#
    -adjustment_alpha: float#
    +adjustment_alpha: float#
    -adjustment_interval: int#
    +adjustment_interval: int#
    -alpha_dividends_per_hotkey: list[tuple[str, bittensor.utils.balance.Balance]]#
    +alpha_dividends_per_hotkey: list[tuple[str, bittensor.utils.balance.Balance]]#
    -alpha_high: float#
    +alpha_high: float#
    @@ -699,7 +724,7 @@

    Module Contents
    -alpha_low: float#
    +alpha_low: float#

    @@ -714,32 +739,32 @@

    Module Contents
    -alpha_stake: list[bittensor.utils.balance.Balance]#
    +alpha_stake: list[bittensor.utils.balance.Balance]#

    -axons: list[bittensor.core.chain_data.axon_info.AxonInfo]#
    +axons: list[bittensor.core.chain_data.axon_info.AxonInfo]#
    -block: int#
    +block: int#
    -block_at_registration: list[int]#
    +block_at_registration: list[int]#
    -blocks_since_last_step: int#
    +blocks_since_last_step: int#
    -bonds_moving_avg: float#
    +bonds_moving_avg: float#
    @@ -749,82 +774,87 @@

    Module Contents
    -coldkeys: list[str]#
    +coldkeys: list[str]#

    -commit_reveal_period: int#
    +commit_reveal_period: int#
    -commit_reveal_weights_enabled: bool#
    +commit_reveal_weights_enabled: bool# +
    + +
    +
    +commitments: tuple[tuple[str, str]] | None#
    -consensus: list[float]#
    +consensus: list[float]#
    -difficulty: float#
    +difficulty: float#
    -dividends: list[float]#
    +dividends: list[float]#
    -emission: list[bittensor.utils.balance.Balance]#
    +emission: list[bittensor.utils.balance.Balance]#
    -hotkeys: list[str]#
    +hotkeys: list[str]#
    -identities: list[bittensor.core.chain_data.chain_identity.ChainIdentity | None]#
    +identities: list[bittensor.core.chain_data.chain_identity.ChainIdentity | None]#
    -identity: bittensor.core.chain_data.subnet_identity.SubnetIdentity | None#
    +identity: bittensor.core.chain_data.subnet_identity.SubnetIdentity | None#
    -immunity_period: int#
    +immunity_period: int#
    -incentives: list[float]#
    +incentives: list[float]#
    -kappa: float#
    +kappa: float#
    -last_step: int#
    +last_step: int#
    -last_update: list[int]#
    +last_update: list[int]#
    -liquid_alpha_enabled: bool#
    +liquid_alpha_enabled: bool#
    @@ -834,32 +864,37 @@

    Module Contents
    -max_difficulty: float#
    +max_difficulty: float#

    -max_regs_per_block: int#
    +max_regs_per_block: int#
    -max_uids: int#
    +max_uids: int#
    -max_validators: int#
    +max_validators: int#
    -max_weights_limit: float#
    +max_weights_limit: float# +
    + +
    +
    +mechid: int#
    -min_allowed_weights: float#
    +min_allowed_weights: float#
    @@ -869,7 +904,7 @@

    Module Contents
    -min_difficulty: float#
    +min_difficulty: float#

    @@ -879,32 +914,32 @@

    Module Contents
    -name: str#
    +name: str#

    -netuid: int#
    +netuid: int#
    -network_registered_at: int#
    +network_registered_at: int#
    -num_uids: int#
    +num_uids: int#
    -owner_coldkey: str | None#
    +owner_coldkey: str | None#
    -owner_hotkey: str | None#
    +owner_hotkey: str | None#
    @@ -919,32 +954,32 @@

    Module Contents
    -pow_registration_allowed: bool#
    +pow_registration_allowed: bool#

    -pruning_score: list[float]#
    +pruning_score: list[float]#
    -rank: list[float]#
    +rank: list[float]#
    -registration_allowed: bool#
    +registration_allowed: bool#
    -rho: int#
    +rho: int#
    -serving_rate_limit: int#
    +serving_rate_limit: int#
    @@ -959,12 +994,12 @@

    Module Contents
    -symbol: str#
    +symbol: str#

    -tao_dividends_per_hotkey: list[tuple[str, bittensor.utils.balance.Balance]]#
    +tao_dividends_per_hotkey: list[tuple[str, bittensor.utils.balance.Balance]]#
    @@ -979,42 +1014,47 @@

    Module Contents
    -tao_stake: list[bittensor.utils.balance.Balance]#
    +tao_stake: list[bittensor.utils.balance.Balance]#

    -target_regs_per_interval: int#
    +target_regs_per_interval: int#
    -tempo: int#
    +tempo: int#
    -total_stake: list[bittensor.utils.balance.Balance]#
    +total_stake: list[bittensor.utils.balance.Balance]#
    -trust: list[float]#
    +trust: list[float]#
    -validator_permit: list[bool]#
    +validator_permit: list[bool]# +
    + +
    +
    +validators: list[str] | None#
    -weights_rate_limit: int#
    +weights_rate_limit: int#
    -weights_version: int#
    +weights_version: int#
    @@ -1025,32 +1065,32 @@

    Module Contents
    -alpha_in_emission: float#
    +alpha_in_emission: float#
    -alpha_out_emission: float#
    +alpha_out_emission: float#
    -pending_alpha_emission: float#
    +pending_alpha_emission: float#
    -pending_root_emission: float#
    +pending_root_emission: float#
    -subnet_emission: float#
    +subnet_emission: float#
    -tao_in_emission: float#
    +tao_in_emission: float#
    @@ -1060,147 +1100,147 @@

    Module Contentsclass bittensor.core.chain_data.metagraph_info.MetagraphInfoParams[source]#
    -activity_cutoff: int#
    +activity_cutoff: int#
    -adjustment_alpha: float#
    +adjustment_alpha: float#
    -adjustment_interval: int#
    +adjustment_interval: int#
    -alpha_high: float#
    +alpha_high: float#
    -alpha_low: float#
    +alpha_low: float#
    -bonds_moving_avg: float#
    +bonds_moving_avg: float#
    -burn: float#
    +burn: float#
    -commit_reveal_period: int#
    +commit_reveal_period: int#
    -commit_reveal_weights_enabled: bool#
    +commit_reveal_weights_enabled: bool#
    -difficulty: float#
    +difficulty: float#
    -immunity_period: int#
    +immunity_period: int#
    -kappa: float#
    +kappa: float#
    -liquid_alpha_enabled: bool#
    +liquid_alpha_enabled: bool#
    -max_burn: float#
    +max_burn: float#
    -max_difficulty: float#
    +max_difficulty: float#
    -max_regs_per_block: int#
    +max_regs_per_block: int#
    -max_validators: int#
    +max_validators: int#
    -max_weights_limit: float#
    +max_weights_limit: float#
    -min_allowed_weights: float#
    +min_allowed_weights: float#
    -min_burn: float#
    +min_burn: float#
    -min_difficulty: float#
    +min_difficulty: float#
    -pow_registration_allowed: bool#
    +pow_registration_allowed: bool#
    -registration_allowed: bool#
    +registration_allowed: bool#
    -rho: int#
    +rho: int#
    -serving_rate_limit: int#
    +serving_rate_limit: int#
    -target_regs_per_interval: int#
    +target_regs_per_interval: int#
    -tempo: int#
    +tempo: int#
    -weights_rate_limit: int#
    +weights_rate_limit: int#
    -weights_version: int#
    +weights_version: int#
    @@ -1211,35 +1251,40 @@

    Module Contents
    -alpha_in: float#
    +alpha_in: float#
    -alpha_out: float#
    +alpha_out: float#
    -moving_price: float#
    +moving_price: float#
    -subnet_volume: float#
    +subnet_volume: float#
    -tao_in: float#
    +tao_in: float#
    +
    +
    +bittensor.core.chain_data.metagraph_info.SELECTIVE_METAGRAPH_COMMITMENTS_OFFSET = 14#
    +
    +
    -class bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex#
    -

    Bases: enum.Enum

    +class bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex[source]# +

    Bases: enum.Enum

    Generic enumeration.

    Derive from this class to define new enumerations.

    @@ -1347,6 +1392,11 @@

    Module ContentsCommitRevealWeightsEnabled = 46#

    +
    +
    +Commitments = 73#
    +
    +
    Consensus = 63#
    @@ -1592,6 +1642,11 @@

    Module ContentsValidatorPermit = 57#

    +
    +
    +Validators = 72#
    +
    +
    WeightsRateLimit = 27#
    @@ -1604,23 +1659,40 @@

    Module Contents
    -static all_indices()#
    +static all_indices()[source]#
    Return type:
    -

    list[int]

    +

    list[int]

    +
    +
    +bittensor.core.chain_data.metagraph_info.get_selective_metagraph_commitments(decoded)#
    +

    Returns a tuple of hotkeys and commitments from decoded chain data if provided, else None.

    +
    +
    Parameters:
    +

    decoded (dict)

    +
    +
    Return type:
    +

    Optional[tuple[tuple[str, str]]]

    +
    +
    +
    +
    bittensor.core.chain_data.metagraph_info.process_nested(data, chr_transform)[source]#

    Processes nested data structures by applying a transformation function to their elements.

    Parameters:
    -

    data (Union[tuple, dict])

    +

    data (Union[tuple, dict])

    +
    +
    Return type:
    +

    Optional[Union[list, dict]]

    @@ -1674,6 +1746,7 @@

    Module Contents +
  • SELECTIVE_METAGRAPH_COMMITMENTS_OFFSET
  • SelectiveMetagraphIndex
  • +
  • get_selective_metagraph_commitments()
  • process_nested()
  • diff --git a/static/python-api/html/autoapi/bittensor/core/chain_data/neuron_info/index.html b/static/python-api/html/autoapi/bittensor/core/chain_data/neuron_info/index.html index cc206fa6aa..31056d0b4d 100644 --- a/static/python-api/html/autoapi/bittensor/core/chain_data/neuron_info/index.html +++ b/static/python-api/html/autoapi/bittensor/core/chain_data/neuron_info/index.html @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -463,65 +466,65 @@

    Module Contents
    Variables:
      -
    • hotkey (str) – The hotkey associated with the neuron.

    • -
    • coldkey (str) – The coldkey associated with the neuron.

    • -
    • uid (int) – The unique identifier for the neuron.

    • -
    • netuid (int) – The network unique identifier for the neuron.

    • -
    • active (int) – The active status of the neuron.

    • -
    • stake (Balance) – The balance staked to this neuron.

    • -
    • stake_dict (dict[str, Balance]) – A dictionary mapping coldkey to the amount staked.

    • -
    • total_stake (Balance) – The total amount of stake.

    • -
    • rank (float) – The rank score of the neuron.

    • -
    • emission (float) – The emission rate.

    • -
    • incentive (float) – The incentive value.

    • -
    • consensus (float) – The consensus score.

    • -
    • trust (float) – The trust score.

    • -
    • validator_trust (float) – The validation trust score.

    • -
    • dividends (float) – The dividends value.

    • -
    • last_update (int) – The timestamp of the last update.

    • -
    • validator_permit (bool) – Validator permit status.

    • -
    • weights (list[tuple[int]]) – List of weights associated with the neuron.

    • -
    • bonds (list[list[int]]) – List of bonds associated with the neuron.

    • -
    • pruning_score (int) – The pruning score of the neuron.

    • -
    • prometheus_info (Optional[PrometheusInfo]) – Information related to Prometheus.

    • -
    • axon_info (Optional[AxonInfo]) – Information related to Axon.

    • -
    • is_null (bool) – Indicator if this is a null neuron.

    • +
    • hotkey – The hotkey associated with the neuron.

    • +
    • coldkey – The coldkey associated with the neuron.

    • +
    • uid – The unique identifier for the neuron.

    • +
    • netuid – The network unique identifier for the neuron.

    • +
    • active – The active status of the neuron.

    • +
    • stake – The balance staked to this neuron.

    • +
    • stake_dict – A dictionary mapping coldkey to the amount staked.

    • +
    • total_stake – The total amount of stake.

    • +
    • rank – The rank score of the neuron.

    • +
    • emission – The emission rate.

    • +
    • incentive – The incentive value.

    • +
    • consensus – The consensus score.

    • +
    • trust – The trust score.

    • +
    • validator_trust – The validation trust score.

    • +
    • dividends – The dividends value.

    • +
    • last_update – The timestamp of the last update.

    • +
    • validator_permit – Validator permit status.

    • +
    • weights – List of weights associated with the neuron.

    • +
    • bonds – List of bonds associated with the neuron.

    • +
    • pruning_score – The pruning score of the neuron.

    • +
    • prometheus_info – Information related to Prometheus.

    • +
    • axon_info – Information related to Axon.

    • +
    • is_null – Indicator if this is a null neuron.

    -active: int#
    +active: int#
    -axon_info: bittensor.core.chain_data.axon_info.AxonInfo | None = None#
    +axon_info: bittensor.core.chain_data.axon_info.AxonInfo | None = None#
    -bonds: list[list[int]]#
    +bonds: list[list[int]]#
    -coldkey: str#
    +coldkey: str#
    -consensus: float#
    +consensus: float#
    -dividends: float#
    +dividends: float#
    -emission: float#
    +emission: float#
    @@ -531,11 +534,11 @@

    Module Contents
    Parameters:
      -
    • neuron_lite (NeuronInfoLite) – A lite version of the neuron containing basic attributes.

    • -
    • weights_as_dict (dict[int, list[tuple[int, int]]]) – A dictionary where the key is the UID and the value is -a list of weight tuples associated with the neuron.

    • -
    • bonds_as_dict (dict[int, list[tuple[int, int]]]) – A dictionary where the key is the UID and the value is a -list of bond tuples associated with the neuron.

    • +
    • neuron_lite (bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite) – A lite version of the neuron containing basic attributes.

    • +
    • weights_as_dict (dict[int, list[tuple[int, int]]]) – A dictionary where the key is the UID and the value is a list of weight tuples associated +with the neuron.

    • +
    • bonds_as_dict (dict[int, list[tuple[int, int]]]) – A dictionary where the key is the UID and the value is a list of bond tuples associated with +the neuron.

    Returns:
    @@ -560,42 +563,42 @@

    Module Contents
    -hotkey: str#
    +hotkey: str#

    -incentive: float#
    +incentive: float#
    -is_null: bool = False#
    +is_null: bool = False#
    -last_update: int#
    +last_update: int#
    -netuid: int#
    +netuid: int#
    -prometheus_info: bittensor.core.chain_data.prometheus_info.PrometheusInfo | None = None#
    +prometheus_info: bittensor.core.chain_data.prometheus_info.PrometheusInfo | None = None#
    -pruning_score: int#
    +pruning_score: int#
    -rank: float#
    +rank: float#
    @@ -605,7 +608,7 @@

    Module Contents
    -stake_dict: dict[str, bittensor.utils.balance.Balance]#
    +stake_dict: dict[str, bittensor.utils.balance.Balance]#

    @@ -615,27 +618,27 @@

    Module Contents
    -trust: float#
    +trust: float#

    -uid: int#
    +uid: int#
    -validator_permit: bool#
    +validator_permit: bool#
    -validator_trust: float#
    +validator_trust: float#
    -weights: list[tuple[int, int]]#
    +weights: list[tuple[int, int]]#
    diff --git a/static/python-api/html/autoapi/bittensor/core/chain_data/neuron_info_lite/index.html b/static/python-api/html/autoapi/bittensor/core/chain_data/neuron_info_lite/index.html index 25cea36be6..d2ece40db5 100644 --- a/static/python-api/html/autoapi/bittensor/core/chain_data/neuron_info_lite/index.html +++ b/static/python-api/html/autoapi/bittensor/core/chain_data/neuron_info_lite/index.html @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -462,27 +465,27 @@

    Module Contents
    Variables:
      -
    • hotkey (str) – The hotkey string for the neuron.

    • -
    • coldkey (str) – The coldkey string for the neuron.

    • -
    • uid (int) – A unique identifier for the neuron.

    • -
    • netuid (int) – Network unique identifier for the neuron.

    • -
    • active (int) – Indicates whether the neuron is active.

    • -
    • stake (Balance) – The stake amount associated with the neuron.

    • -
    • stake_dict (dict) – Mapping of coldkey to the amount staked to this Neuron.

    • -
    • total_stake (Balance) – Total amount of the stake.

    • -
    • rank (float) – The rank of the neuron.

    • -
    • emission (float) – The emission value of the neuron.

    • -
    • incentive (float) – The incentive value of the neuron.

    • -
    • consensus (float) – The consensus value of the neuron.

    • -
    • trust (float) – Trust value of the neuron.

    • -
    • validator_trust (float) – Validator trust value of the neuron.

    • -
    • dividends (float) – Dividends associated with the neuron.

    • -
    • last_update (int) – Timestamp of the last update.

    • -
    • validator_permit (bool) – Indicates if the neuron has a validator permit.

    • -
    • prometheus_info (Optional[PrometheusInfo]) – Prometheus information associated with the neuron.

    • -
    • axon_info (Optional[AxonInfo]) – Axon information associated with the neuron.

    • -
    • pruning_score (int) – The pruning score of the neuron.

    • -
    • is_null (bool) – Indicates whether the neuron is null.

    • +
    • hotkey – The hotkey string for the neuron.

    • +
    • coldkey – The coldkey string for the neuron.

    • +
    • uid – A unique identifier for the neuron.

    • +
    • netuid – Network unique identifier for the neuron.

    • +
    • active – Indicates whether the neuron is active.

    • +
    • stake – The stake amount associated with the neuron.

    • +
    • stake_dict – Mapping of coldkey to the amount staked to this Neuron.

    • +
    • total_stake – Total amount of the stake.

    • +
    • rank – The rank of the neuron.

    • +
    • emission – The emission value of the neuron.

    • +
    • incentive – The incentive value of the neuron.

    • +
    • consensus – The consensus value of the neuron.

    • +
    • trust – Trust value of the neuron.

    • +
    • validator_trust – Validator trust value of the neuron.

    • +
    • dividends – Dividends associated with the neuron.

    • +
    • last_update – Timestamp of the last update.

    • +
    • validator_permit – Indicates if the neuron has a validator permit.

    • +
    • prometheus_info – Prometheus information associated with the neuron.

    • +
    • axon_info – Axon information associated with the neuron.

    • +
    • pruning_score – The pruning score of the neuron.

    • +
    • is_null – Indicates whether the neuron is null.

    @@ -505,32 +508,32 @@

    Module Contents
    -active: int#
    +active: int#
    -axon_info: bittensor.core.chain_data.axon_info.AxonInfo | None#
    +axon_info: bittensor.core.chain_data.axon_info.AxonInfo | None#
    -coldkey: str#
    +coldkey: str#
    -consensus: float#
    +consensus: float#
    -dividends: float#
    +dividends: float#
    -emission: float#
    +emission: float#
    @@ -546,42 +549,42 @@

    Module Contents
    -hotkey: str#
    +hotkey: str#

    -incentive: float#
    +incentive: float#
    -is_null: bool = False#
    +is_null: bool = False#
    -last_update: int#
    +last_update: int#
    -netuid: int#
    +netuid: int#
    -prometheus_info: bittensor.core.chain_data.prometheus_info.PrometheusInfo | None#
    +prometheus_info: bittensor.core.chain_data.prometheus_info.PrometheusInfo | None#
    -pruning_score: int#
    +pruning_score: int#
    -rank: float#
    +rank: float#
    @@ -591,7 +594,7 @@

    Module Contents
    -stake_dict: dict[str, bittensor.utils.balance.Balance]#
    +stake_dict: dict[str, bittensor.utils.balance.Balance]#

    @@ -601,22 +604,22 @@

    Module Contents
    -trust: float#
    +trust: float#

    -uid: int#
    +uid: int#
    -validator_permit: bool#
    +validator_permit: bool#
    -validator_trust: float#
    +validator_trust: float#
    diff --git a/static/python-api/html/autoapi/bittensor/core/chain_data/prometheus_info/index.html b/static/python-api/html/autoapi/bittensor/core/chain_data/prometheus_info/index.html index 66e862f2d8..cf95b6287a 100644 --- a/static/python-api/html/autoapi/bittensor/core/chain_data/prometheus_info/index.html +++ b/static/python-api/html/autoapi/bittensor/core/chain_data/prometheus_info/index.html @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -443,37 +446,37 @@

    Module Contents
    Variables:
      -
    • block (int) – The block number associated with the Prometheus data.

    • -
    • version (int) – The version of the Prometheus data.

    • -
    • ip (str) – The IP address associated with Prometheus.

    • -
    • port (int) – The port number for Prometheus.

    • -
    • ip_type (int) – The type of IP address (e.g., IPv4, IPv6).

    • +
    • block – The block number associated with the Prometheus data.

    • +
    • version – The version of the Prometheus data.

    • +
    • ip – The IP address associated with Prometheus.

    • +
    • port – The port number for Prometheus.

    • +
    • ip_type – The type of IP address (e.g., IPv4, IPv6).

    -block: int#
    +block: int#
    -ip: str#
    +ip: str#
    -ip_type: int#
    +ip_type: int#
    -port: int#
    +port: int#
    -version: int#
    +version: int#
    diff --git a/static/python-api/html/autoapi/bittensor/core/chain_data/proposal_vote_data/index.html b/static/python-api/html/autoapi/bittensor/core/chain_data/proposal_vote_data/index.html index fa23b66e4e..2fe3bdb5b0 100644 --- a/static/python-api/html/autoapi/bittensor/core/chain_data/proposal_vote_data/index.html +++ b/static/python-api/html/autoapi/bittensor/core/chain_data/proposal_vote_data/index.html @@ -48,7 +48,7 @@ - + @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -443,20 +446,20 @@

    Module Contents
    -ayes: list[str]#
    +ayes: list[str]#
    -end: int#
    +end: int#
    -classmethod from_dict(proposal_dict)#
    +classmethod from_dict(proposal_dict)[source]#
    Parameters:
    -

    proposal_dict (dict)

    +

    proposal_dict (dict)

    Return type:

    ProposalVoteData

    @@ -466,17 +469,17 @@

    Module Contents
    -index: int#
    +index: int#

    -nays: list[str]#
    +nays: list[str]#
    -threshold: int#
    +threshold: int#
    @@ -505,11 +508,11 @@

    Module Contents

    next

    -

    bittensor.core.chain_data.scheduled_coldkey_swap_info

    +

    bittensor.core.chain_data.proxy

    diff --git a/static/python-api/html/autoapi/bittensor/core/chain_data/proxy/index.html b/static/python-api/html/autoapi/bittensor/core/chain_data/proxy/index.html new file mode 100644 index 0000000000..32c869a88b --- /dev/null +++ b/static/python-api/html/autoapi/bittensor/core/chain_data/proxy/index.html @@ -0,0 +1,1225 @@ + + + + + + + + + + + bittensor.core.chain_data.proxy — Bittensor SDK Docs documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + Ctrl+K + + + +
    + +
    + + + + + +
    +
    + + + + + + +
    + + + +
    + +
    +
    + +
    +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + + + + + + + +
    + +
    +

    bittensor.core.chain_data.proxy#

    +
    +

    Classes#

    +

  • process_nested(data, chr_transform)

    get_selective_metagraph_commitments(decoded)

    Returns a tuple of hotkeys and commitments from decoded chain data if provided, else None.

    process_nested(data, chr_transform)

    Processes nested data structures by applying a transformation function to their elements.

    + + + + + + + + + + + + + + +

    ProxyAnnouncementInfo

    Dataclass representing proxy announcement information.

    ProxyConstants

    Fetches all runtime constants defined in the Proxy pallet.

    ProxyInfo

    Dataclass representing proxy relationship information.

    ProxyType

    Enumeration of all supported proxy types in the Bittensor network.

    +
    +
    +
    +

    Module Contents#

    +
    +
    +class bittensor.core.chain_data.proxy.ProxyAnnouncementInfo#
    +

    Dataclass representing proxy announcement information.

    +

    This class contains information about a pending proxy announcement. Announcements are used when a proxy account +with a non-zero delay period (time-lock) wants to declare its intention to execute a call on behalf of the real +account. The announcement must be made before the actual call can be executed, allowing the real account time to +review and potentially reject the operation via reject_proxy_announcement before it takes effect. After the +delay period passes, the proxy can execute the announced call via proxy_announced.

    +
    +
    Variables:
    +
      +
    • real – The SS58 address of the real account on whose behalf the call will be made.

    • +
    • call_hash – The hash of the call that will be executed in the future (hex string with 0x prefix). This hash +must match the actual call when it is executed via proxy_announced.

    • +
    • height – The block height at which the announcement was made. The delay period is calculated from this block.

    • +
    +
    +
    +
    +

    Notes

    + +
    +
    +
    +call_hash: str#
    +
    + +
    +
    +classmethod from_dict(data)#
    +

    Creates a list of ProxyAnnouncementInfo objects from chain announcement data.

    +

    This method decodes the raw announcement data returned from the Proxy.Announcements storage function.

    +
    +
    Parameters:
    +

    data (tuple) – Tuple of announcements data from the Proxy.Announcements storage function.

    +
    +
    Returns:
    +

    List of ProxyAnnouncementInfo objects representing all pending announcements.

    +
    +
    Return type:
    +

    list[ProxyAnnouncementInfo]

    +
    +
    + +
    + +
    +
    +classmethod from_query_map_record(record)#
    +

    Returns a list of ProxyAnnouncementInfo objects from a tuple of announcements data.

    +
    +
    Parameters:
    +

    record (tuple) – Data item from query_map records call to Announcements storage function. Structure is [key, value] +where key is the delegate account and value contains announcements data.

    +
    +
    Returns:
    +

      +
    • SS58 address of the delegate account making the announcement.

    • +
    • List of ProxyAnnouncementInfo objects for all pending announcements from this delegate.

    • +
    +

    +
    +
    Return type:
    +

    Tuple containing

    +
    +
    +
    + +
    +
    +height: int#
    +
    + +
    +
    +real: str#
    +
    + +
    + +
    +
    +class bittensor.core.chain_data.proxy.ProxyConstants#
    +

    Fetches all runtime constants defined in the Proxy pallet.

    +

    Displays current values for on-chain configuration constants for the Proxy pallet. They define +deposit requirements, account limits, and announcement constraints that govern the behavior of proxies.

    +

    Each attribute is fetched directly from the runtime via Subtensor.query_constant(“Proxy”, <name>) and reflects +the current chain configuration at the time of retrieval.

    +
    +
    Variables:
    +
      +
    • AnnouncementDepositBase – Base deposit amount (in RAO) required to announce a future proxy call. This deposit +is held until the announced call is executed or cancelled.

    • +
    • AnnouncementDepositFactor – Additional deposit factor (in RAO) per byte of the call hash being announced. The +total announcement deposit is calculated as: AnnouncementDepositBase + (call_hash_size * +AnnouncementDepositFactor).

    • +
    • MaxProxies – Maximum number of proxy relationships that a single account can have. This limits the total +number of delegates that can act on behalf of an account.

    • +
    • MaxPending – Maximum number of pending proxy announcements that can exist for a single account at any given +time. This prevents spam and limits the storage requirements for pending announcements.

    • +
    • ProxyDepositBase – Base deposit amount (in RAO) required when adding a proxy relationship. This deposit is +held as long as the proxy relationship exists and is returned when the proxy is removed.

    • +
    • ProxyDepositFactor – Additional deposit factor (in RAO) per proxy type added. The total proxy deposit is +calculated as: ProxyDepositBase + (number_of_proxy_types * ProxyDepositFactor).

    • +
    +
    +
    +
    +

    Notes

    + +
    +
    +
    +AnnouncementDepositBase: bittensor.utils.balance.Balance | None#
    +
    + +
    +
    +AnnouncementDepositFactor: bittensor.utils.balance.Balance | None#
    +
    + +
    +
    +MaxPending: int | None#
    +
    + +
    +
    +MaxProxies: int | None#
    +
    + +
    +
    +ProxyDepositBase: bittensor.utils.balance.Balance | None#
    +
    + +
    +
    +ProxyDepositFactor: bittensor.utils.balance.Balance | None#
    +
    + +
    +
    +classmethod constants_names()#
    +

    Returns the all constant field names defined in this dataclass.

    +
    +
    Returns:
    +

    List of constant field names as strings.

    +
    +
    Return type:
    +

    list[str]

    +
    +
    +
    + +
    +
    +classmethod from_dict(data)#
    +

    Creates a ProxyConstants instance from a dictionary of decoded chain constants.

    +
    +
    Parameters:
    +

    data (dict) – Dictionary mapping constant names to their decoded values (returned by Subtensor.query_constant()).

    +
    +
    Returns:
    +

    ProxyConstants object with constants filled in. Fields not found in data will be set to None.

    +
    +
    Return type:
    +

    ProxyConstants

    +
    +
    +
    + +
    +
    +to_dict()#
    +

    Converts the ProxyConstants instance to a dictionary.

    +
    +
    Returns:
    +

    Dictionary mapping constant names to their values. Balance objects remain as Balance instances.

    +
    +
    Return type:
    +

    dict

    +
    +
    +
    + +
    + +
    +
    +class bittensor.core.chain_data.proxy.ProxyInfo#
    +

    Dataclass representing proxy relationship information.

    +

    This class contains information about a proxy relationship between a real account and a delegate account. A proxy +relationship allows the delegate to perform certain operations on behalf of the real account, with restrictions +defined by the proxy type and a delay period.

    +
    +
    Variables:
    +
      +
    • delegate – The SS58 address of the delegate proxy account that can act on behalf of the real account.

    • +
    • proxy_type – The type of proxy permissions granted to the delegate (e.g., “Any”, “NonTransfer”, +“ChildKeys”, “Staking”). This determines what operations the delegate can perform.

    • +
    • delay – The number of blocks that must elapse between announcing a call and executing it (time-lock period). A +delay of 0 allows immediate execution without announcements. Non-zero delays require the delegate to +announce the call first via announce_proxy, wait for the delay period to pass, then execute it via +proxy_announced, giving the real account time to review and potentially reject the call via +reject_proxy_announcement before execution.

    • +
    +
    +
    + +
    +
    +delay: int#
    +
    + +
    +
    +delegate: str#
    +
    + +
    +
    +classmethod from_query(query)#
    +

    Creates a list of ProxyInfo objects and deposit balance from a Substrate query result.

    +

    This method decodes the query result from the Proxy.Proxies storage function, extracting both the proxy +relationships and the deposit amount reserved for maintaining these proxies.

    +
    +
    Parameters:
    +

    query (Any) – Query result from Substrate query() call to Proxy.Proxies storage function.

    +
    +
    Returns:
    +

      +
    • List of ProxyInfo objects representing all proxy relationships for the real account.

    • +
    • Balance object representing the reserved deposit amount (in RAO).

    • +
    +

    +
    +
    Return type:
    +

    Tuple containing

    +
    +
    +
    +

    Notes

    +

    The deposit is held as long as the proxy relationships exist and is returned when proxies are removed.

    +

    See: <https://docs.learnbittensor.org/keys/proxies>

    +
    +
    + +
    +
    +classmethod from_query_map_record(record)#
    +

    Creates a dictionary mapping delegate addresses to their ProxyInfo lists from a query_map record.

    +

    Processes a single record from a query_map call to the Proxy.Proxies storage function. Each record represents +one real account and its associated proxy/ies relationships.

    +
    +
    Parameters:
    +

    record (list) – Data item from query_map records call to Proxies storage function. Structure is [key, value] where +key is the real account and value contains proxies data.

    +
    +
    Returns:
    +

      +
    • SS58 address of the real account (delegator).

    • +
    • List of ProxyInfo objects representing all proxy relationships for this real account.

    • +
    +

    +
    +
    Return type:
    +

    Tuple containing

    +
    +
    +
    + +
    +
    +classmethod from_tuple(data)#
    +

    Creates a list of ProxyInfo objects from chain proxy data.

    +

    This method decodes the raw proxy data returned from the Proxy.Proxies storage function and creates +structured ProxyInfo objects.

    +
    +
    Parameters:
    +

    data (tuple) – Tuple of chain proxy data from the Proxy.Proxies storage function.

    +
    +
    Returns:
    +

    List of ProxyInfo objects representing all proxy relationships for a real account.

    +
    +
    Return type:
    +

    list[ProxyInfo]

    +
    +
    + +
    + +
    +
    +proxy_type: str#
    +
    + +
    + +
    +
    +class bittensor.core.chain_data.proxy.ProxyType#
    +

    Bases: str, enum.Enum

    +

    Enumeration of all supported proxy types in the Bittensor network.

    +

    These types define the permissions that a proxy account has when acting on behalf of the real account. Each type +restricts what operations the proxy can perform.

    +

    Proxy Type Descriptions:

    +
    +
    +
    Any: Allows the proxy to execute any call on behalf of the real account. This is the most permissive but least

    secure proxy type. Use with caution.

    +
    +
    Owner: Allows the proxy to manage subnet identity and settings. Permitted operations include:
      +
    • AdminUtils calls (except sudo_set_sn_owner_hotkey)

    • +
    • set_subnet_identity

    • +
    • update_symbol

    • +
    +
    +
    NonCritical: Allows all operations except critical ones that could harm the account. Prohibited operations:
      +
    • dissolve_network

    • +
    • root_register

    • +
    • burned_register

    • +
    • Sudo calls

    • +
    +
    +
    NonTransfer: Allows all operations except those involving token transfers. Prohibited operations:
      +
    • All Balances module calls

    • +
    • transfer_stake

    • +
    • schedule_swap_coldkey

    • +
    • swap_coldkey

    • +
    +
    +
    NonFungible: Allows all operations except token-related operations and registrations. Prohibited operations:
      +
    • All Balances module calls

    • +
    • All staking operations (add_stake, remove_stake, unstake_all, swap_stake, move_stake, transfer_stake)

    • +
    • Registration operations (burned_register, root_register)

    • +
    • Key swap operations (schedule_swap_coldkey, swap_coldkey, swap_hotkey)

    • +
    +
    +
    Staking: Allows only staking-related operations. Permitted operations:
      +
    • add_stake, add_stake_limit

    • +
    • remove_stake, remove_stake_limit, remove_stake_full_limit

    • +
    • unstake_all, unstake_all_alpha

    • +
    • swap_stake, swap_stake_limit

    • +
    • move_stake

    • +
    +
    +
    Registration: Allows only neuron registration operations. Permitted operations:
      +
    • burned_register

    • +
    • register

    • +
    +
    +
    Transfer: Allows only token transfer operations. Permitted operations:
      +
    • transfer_keep_alive

    • +
    • transfer_allow_death

    • +
    • transfer_all

    • +
    • transfer_stake

    • +
    +
    +
    SmallTransfer: Allows only small token transfers below a specific limit. Permitted operations:
      +
    • transfer_keep_alive (if value < SMALL_TRANSFER_LIMIT)

    • +
    • transfer_allow_death (if value < SMALL_TRANSFER_LIMIT)

    • +
    • transfer_stake (if alpha_amount < SMALL_TRANSFER_LIMIT)

    • +
    +
    +
    ChildKeys: Allows only child key management operations. Permitted operations:
      +
    • set_children

    • +
    • set_childkey_take

    • +
    +
    +
    SudoUncheckedSetCode: Allows only runtime code updates. Permitted operations:
      +
    • sudo_unchecked_weight with inner call System::set_code

    • +
    +
    +
    SwapHotkey: Allows only hotkey swap operations. Permitted operations:
      +
    • swap_hotkey

    • +
    +
    +
    SubnetLeaseBeneficiary: Allows subnet management and configuration operations. Permitted operations:
      +
    • start_call

    • +
    • Multiple AdminUtils.sudo_set_* calls for subnet parameters, network settings, weights, alpha values, etc.

    • +
    +
    +
    RootClaim: Allows only root claim operations. Permitted operations:
      +
    • claim_root

    • +
    • set_root_claim_type

    • +
    +
    +
    +
    +
    +

    Notes

    + +
    +

    Initialize self. See help(type(self)) for accurate signature.

    +
    +
    +Any = 'Any'#
    +
    + +
    +
    +ChildKeys = 'ChildKeys'#
    +
    + +
    +
    +Governance = 'Governance'#
    +
    + +
    +
    +NonCritical = 'NonCritical'#
    +
    + +
    +
    +NonFungible = 'NonFungible'#
    +
    + +
    +
    +NonTransfer = 'NonTransfer'#
    +
    + +
    +
    +Owner = 'Owner'#
    +
    + +
    +
    +Registration = 'Registration'#
    +
    + +
    +
    +RootClaim = 'RootClaim'#
    +
    + +
    +
    +RootWeights = 'RootWeights'#
    +
    + +
    +
    +Senate = 'Senate'#
    +
    + +
    +
    +SmallTransfer = 'SmallTransfer'#
    +
    + +
    +
    +Staking = 'Staking'#
    +
    + +
    +
    +SubnetLeaseBeneficiary = 'SubnetLeaseBeneficiary'#
    +
    + +
    +
    +SudoUncheckedSetCode = 'SudoUncheckedSetCode'#
    +
    + +
    +
    +SwapHotkey = 'SwapHotkey'#
    +
    + +
    +
    +Transfer = 'Transfer'#
    +
    + +
    +
    +Triumvirate = 'Triumvirate'#
    +
    + +
    +
    +classmethod all_types()#
    +

    Returns a list of all proxy type values.

    +
    +
    Returns:
    +

    List of all valid proxy type string values (e.g., [“Any”, “Owner”, “Staking”, …]).

    +
    +
    Return type:
    +

    list[str]

    +
    +
    +
    + +
    +
    +classmethod is_valid(value)#
    +

    Checks if a string value is a valid proxy type.

    +
    +
    Parameters:
    +

    value (str) – String value to validate.

    +
    +
    Returns:
    +

    True if the value is a valid proxy type, False otherwise.

    +
    +
    Return type:
    +

    bool

    +
    +
    +
    + +
    +
    +classmethod normalize(proxy_type)#
    +

    Normalizes a proxy type to a string value.

    +

    This method handles both string and ProxyType enum values, validates the input, and returns the string +representation suitable for Substrate calls.

    +
    +
    Parameters:
    +

    proxy_type (Union[str, ProxyType]) – Either a string or ProxyType enum value.

    +
    +
    Returns:
    +

    The normalized string value of the proxy type.

    +
    +
    Raises:
    +

    ValueError – If the proxy_type is not a valid proxy type.

    +
    +
    Return type:
    +

    str

    +
    +
    +
    + +
    + +
    +
    + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/static/python-api/html/autoapi/bittensor/core/subtensor_api/commitments/index.html b/static/python-api/html/autoapi/bittensor/core/chain_data/root_claim/index.html similarity index 60% rename from static/python-api/html/autoapi/bittensor/core/subtensor_api/commitments/index.html rename to static/python-api/html/autoapi/bittensor/core/chain_data/root_claim/index.html index bf2b5e6da0..602f46e95f 100644 --- a/static/python-api/html/autoapi/bittensor/core/subtensor_api/commitments/index.html +++ b/static/python-api/html/autoapi/bittensor/core/chain_data/root_claim/index.html @@ -8,7 +8,7 @@ - bittensor.core.subtensor_api.commitments — Bittensor SDK Docs documentation + bittensor.core.chain_data.root_claim — Bittensor SDK Docs documentation @@ -45,11 +45,11 @@ - + - - + + @@ -152,7 +152,7 @@
  • bittensor.core
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -264,7 +267,7 @@ -
  • -

    bittensor.core.subtensor_api.commitments

    +

    bittensor.core.chain_data.root_claim

    @@ -399,16 +402,16 @@

    Contents

  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -442,15 +445,15 @@

    Module Contents
    Variables:
      -
    • old_coldkey (str) – The old cold key before the swap.

    • -
    • new_coldkey (str) – The new cold key after the swap.

    • -
    • arbitration_block (int) – The block number at which the arbitration of the swap will take place.

    • +
    • old_coldkey – The old cold key before the swap.

    • +
    • new_coldkey – The new cold key after the swap.

    • +
    • arbitration_block – The block number at which the arbitration of the swap will take place.

    -arbitration_block: int#
    +arbitration_block: int#
    @@ -459,22 +462,22 @@

    Module Contents
    Parameters:
    -

    vec_u8 (list[int])

    +

    vec_u8 (list[int])

    Return type:
    -

    Optional[list[str]]

    +

    Optional[list[str]]

    -new_coldkey: str#
    +new_coldkey: str#
    -old_coldkey: str#
    +old_coldkey: str#
    @@ -494,20 +497,20 @@

    Module Contents

    previous

    -

    bittensor.core.chain_data.proposal_vote_data

    +

    bittensor.core.chain_data.root_claim

    next

    -

    bittensor.core.chain_data.stake_info

    +

    bittensor.core.chain_data.sim_swap

    diff --git a/static/python-api/html/autoapi/bittensor/core/chain_data/sim_swap/index.html b/static/python-api/html/autoapi/bittensor/core/chain_data/sim_swap/index.html new file mode 100644 index 0000000000..87a5b2bbc8 --- /dev/null +++ b/static/python-api/html/autoapi/bittensor/core/chain_data/sim_swap/index.html @@ -0,0 +1,618 @@ + + + + + + + + + + + bittensor.core.chain_data.sim_swap — Bittensor SDK Docs documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + +
    + +
    + + + + + +
    +
    + + + + + + +
    + + + +
    + +
    +
    + +
    +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + + + + + + + +
    + +
    +

    bittensor.core.chain_data.sim_swap#

    +
    +

    Classes#

    +
    + + + + + +

    SimSwapResult

    Represents the result of a simulated swap operation.

    +
    +
    +
    +

    Module Contents#

    +
    +
    +class bittensor.core.chain_data.sim_swap.SimSwapResult#
    +

    Represents the result of a simulated swap operation.

    +

    This class is used to encapsulate the amounts and fees for the simulated swap process, including both tao and alpha token values. +It provides a convenient way to manage and interpret the swap results.

    +
    +
    Variables:
    +
      +
    • tao_amount – The amount of tao tokens obtained as the result of the swap.

    • +
    • alpha_amount – The amount of alpha tokens obtained as the result of the swap.

    • +
    • tao_fee – The fee associated with the tao token portion of the swap.

    • +
    • alpha_fee – The fee associated with the alpha token portion of the swap.

    • +
    +
    +
    +
    +
    +alpha_amount: bittensor.utils.balance.Balance#
    +
    + +
    +
    +alpha_fee: bittensor.utils.balance.Balance#
    +
    + +
    +
    +classmethod from_dict(data, netuid)#
    +

    Converts a dictionary to a SimSwapResult instance.

    +

    This method acts as a factory to create a SimSwapResult object using the data +from a dictionary. It parses the specified dictionary, converts values into +Balance objects, and sets associated units based on parameters and context.

    +
    +
    Parameters:
    +
      +
    • data (dict) – A dictionary containing the swap result data. It must include the keys “tao_amount”, “alpha_amount”, +“tao_fee”, and “alpha_fee” with their respective values.

    • +
    • netuid (int) – A network-specific unit identifier used to set the unit for alpha-related amounts.

    • +
    +
    +
    Returns:
    +

    An instance of SimSwapResult initialized with the parsed and converted data.

    +
    +
    Return type:
    +

    SimSwapResult

    +
    +
    +
    + +
    +
    +tao_amount: bittensor.utils.balance.Balance#
    +
    + +
    +
    +tao_fee: bittensor.utils.balance.Balance#
    +
    + +
    + +
    +
    + + +
    + + + + + + + + +
    + + + + + + + +
    +
    + + +
    + + +
    +
    +
    + + + + + +
    +
    + + \ No newline at end of file diff --git a/static/python-api/html/autoapi/bittensor/core/chain_data/stake_info/index.html b/static/python-api/html/autoapi/bittensor/core/chain_data/stake_info/index.html index 538e777196..5f2b353750 100644 --- a/static/python-api/html/autoapi/bittensor/core/chain_data/stake_info/index.html +++ b/static/python-api/html/autoapi/bittensor/core/chain_data/stake_info/index.html @@ -49,7 +49,7 @@ - + @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -447,20 +450,20 @@

    Module Contents
    Variables:
      -
    • hotkey_ss58 (str) – The SS58 encoded hotkey address.

    • -
    • coldkey_ss58 (str) – The SS58 encoded coldkey address.

    • -
    • stake (Balance) – The stake associated with the hotkey-coldkey pair, represented as a Balance object.

    • +
    • hotkey_ss58 – The SS58 encoded hotkey address.

    • +
    • coldkey_ss58 – The SS58 encoded coldkey address.

    • +
    • stake – The stake associated with the hotkey-coldkey pair, represented as a Balance object.

    -coldkey_ss58: str#
    +coldkey_ss58: str#
    -drain: int#
    +drain: int#
    @@ -474,7 +477,7 @@

    Module Contents
    Parameters:
    -

    decoded (dict)

    +

    decoded (dict)

    Return type:

    StakeInfo

    @@ -484,12 +487,12 @@

    Module Contents
    -hotkey_ss58: str#
    +hotkey_ss58: str#

    -is_registered: bool#
    +is_registered: bool#
    @@ -499,7 +502,7 @@

    Module Contents
    -netuid: int#
    +netuid: int#

    @@ -524,12 +527,12 @@

    Module Contents

    previous

    -

    bittensor.core.chain_data.scheduled_coldkey_swap_info

    +

    bittensor.core.chain_data.sim_swap

    bittensor.core.settings

  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -405,7 +408,9 @@

    Contents

  • SubnetHyperparameters.adjustment_interval
  • SubnetHyperparameters.alpha_high
  • SubnetHyperparameters.alpha_low
  • +
  • SubnetHyperparameters.alpha_sigmoid_steepness
  • SubnetHyperparameters.bonds_moving_avg
  • +
  • SubnetHyperparameters.bonds_reset_enabled
  • SubnetHyperparameters.commit_reveal_period
  • SubnetHyperparameters.commit_reveal_weights_enabled
  • SubnetHyperparameters.difficulty
  • @@ -423,10 +428,14 @@

    Contents

  • SubnetHyperparameters.registration_allowed
  • SubnetHyperparameters.rho
  • SubnetHyperparameters.serving_rate_limit
  • +
  • SubnetHyperparameters.subnet_is_active
  • SubnetHyperparameters.target_regs_per_interval
  • SubnetHyperparameters.tempo
  • +
  • SubnetHyperparameters.transfers_enabled
  • +
  • SubnetHyperparameters.user_liquidity_enabled
  • SubnetHyperparameters.weights_rate_limit
  • SubnetHyperparameters.weights_version
  • +
  • SubnetHyperparameters.yuma_version
  • @@ -465,169 +474,205 @@

    Module Contents
    Variables:
      -
    • rho (int) – The rate of decay of some value.

    • -
    • kappa (int) – A constant multiplier used in calculations.

    • -
    • immunity_period (int) – The period during which immunity is active.

    • -
    • min_allowed_weights (int) – Minimum allowed weights.

    • -
    • max_weight_limit (float) – Maximum weight limit.

    • -
    • tempo (int) – The tempo or rate of operation.

    • -
    • min_difficulty (int) – Minimum difficulty for some operations.

    • -
    • max_difficulty (int) – Maximum difficulty for some operations.

    • -
    • weights_version (int) – The version number of the weights used.

    • -
    • weights_rate_limit (int) – Rate limit for processing weights.

    • -
    • adjustment_interval (int) – Interval at which adjustments are made.

    • -
    • activity_cutoff (int) – Activity cutoff threshold.

    • -
    • registration_allowed (bool) – Indicates if registration is allowed.

    • -
    • target_regs_per_interval (int) – Target number of registrations per interval.

    • -
    • min_burn (int) – Minimum burn value.

    • -
    • max_burn (int) – Maximum burn value.

    • -
    • bonds_moving_avg (int) – Moving average of bonds.

    • -
    • max_regs_per_block (int) – Maximum number of registrations per block.

    • -
    • serving_rate_limit (int) – Limit on the rate of service.

    • -
    • max_validators (int) – Maximum number of validators.

    • -
    • adjustment_alpha (int) – Alpha value for adjustments.

    • -
    • difficulty (int) – Difficulty level.

    • -
    • commit_reveal_period (int) – Interval for commit-reveal weights.

    • -
    • commit_reveal_weights_enabled (bool) – Flag indicating if commit-reveal weights are enabled.

    • -
    • alpha_high (int) – High value of alpha.

    • -
    • alpha_low (int) – Low value of alpha.

    • -
    • liquid_alpha_enabled (bool) – Flag indicating if liquid alpha is enabled.

    • +
    • rho – The rate of decay of some value.

    • +
    • kappa – A constant multiplier used in calculations.

    • +
    • immunity_period – The period during which immunity is active.

    • +
    • min_allowed_weights – Minimum allowed weights.

    • +
    • max_weight_limit – Maximum weight limit.

    • +
    • tempo – The tempo or rate of operation.

    • +
    • min_difficulty – Minimum difficulty for some operations.

    • +
    • max_difficulty – Maximum difficulty for some operations.

    • +
    • weights_version – The version number of the weights used.

    • +
    • weights_rate_limit – Rate limit for processing weights.

    • +
    • adjustment_interval – Interval at which adjustments are made.

    • +
    • activity_cutoff – Activity cutoff threshold.

    • +
    • registration_allowed – Indicates if registration is allowed.

    • +
    • target_regs_per_interval – Target number of registrations per interval.

    • +
    • min_burn – Minimum burn value.

    • +
    • max_burn – Maximum burn value.

    • +
    • bonds_moving_avg – Moving average of bonds.

    • +
    • max_regs_per_block – Maximum number of registrations per block.

    • +
    • serving_rate_limit – Limit on the rate of service.

    • +
    • max_validators – Maximum number of validators.

    • +
    • adjustment_alpha – Alpha value for adjustments.

    • +
    • difficulty – Difficulty level.

    • +
    • commit_reveal_period – Interval for commit-reveal weights.

    • +
    • commit_reveal_weights_enabled – Flag indicating if commit-reveal weights are enabled.

    • +
    • alpha_high – High value of alpha.

    • +
    • alpha_low – Low value of alpha.

    • +
    • liquid_alpha_enabled – Flag indicating if liquid alpha is enabled.

    • +
    • alpha_sigmoid_steepness – Sigmoid steepness parameter for converting miner-validator alignment into alpha.

    • +
    • yuma_version – Version of yuma.

    • +
    • subnet_is_active – Indicates if subnet is active after START CALL.

    • +
    • transfers_enabled – Flag indicating if transfers are enabled.

    • +
    • bonds_reset_enabled – Flag indicating if bonds are reset enabled.

    • +
    • user_liquidity_enabled – Flag indicating if user liquidity is enabled.

    -activity_cutoff: int#
    +activity_cutoff: int#
    -adjustment_alpha: int#
    +adjustment_alpha: int#
    -adjustment_interval: int#
    +adjustment_interval: int#
    -alpha_high: int#
    +alpha_high: int#
    -alpha_low: int#
    +alpha_low: int# +
    + +
    +
    +alpha_sigmoid_steepness: float#
    -bonds_moving_avg: int#
    +bonds_moving_avg: int# +
    + +
    +
    +bonds_reset_enabled: bool#
    -commit_reveal_period: int#
    +commit_reveal_period: int#
    -commit_reveal_weights_enabled: bool#
    +commit_reveal_weights_enabled: bool#
    -difficulty: int#
    +difficulty: int#
    -immunity_period: int#
    +immunity_period: int#
    -kappa: int#
    +kappa: int#
    -liquid_alpha_enabled: bool#
    +liquid_alpha_enabled: bool#
    -max_burn: int#
    +max_burn: int#
    -max_difficulty: int#
    +max_difficulty: int#
    -max_regs_per_block: int#
    +max_regs_per_block: int#
    -max_validators: int#
    +max_validators: int#
    -max_weight_limit: float#
    +max_weight_limit: float#
    -min_allowed_weights: int#
    +min_allowed_weights: int#
    -min_burn: int#
    +min_burn: int#
    -min_difficulty: int#
    +min_difficulty: int#
    -registration_allowed: bool#
    +registration_allowed: bool#
    -rho: int#
    +rho: int#
    -serving_rate_limit: int#
    +serving_rate_limit: int# +
    + +
    +
    +subnet_is_active: bool#
    -target_regs_per_interval: int#
    +target_regs_per_interval: int#
    -tempo: int#
    +tempo: int# +
    + +
    +
    +transfers_enabled: bool#
    +
    + +
    +
    +user_liquidity_enabled: bool#
    -weights_rate_limit: int#
    +weights_rate_limit: int#
    -weights_version: int#
    +weights_version: int# +
    + +
    +
    +yuma_version: int#
    @@ -689,7 +734,9 @@

    Module ContentsSubnetHyperparameters.adjustment_interval
  • SubnetHyperparameters.alpha_high
  • SubnetHyperparameters.alpha_low
  • +
  • SubnetHyperparameters.alpha_sigmoid_steepness
  • SubnetHyperparameters.bonds_moving_avg
  • +
  • SubnetHyperparameters.bonds_reset_enabled
  • SubnetHyperparameters.commit_reveal_period
  • SubnetHyperparameters.commit_reveal_weights_enabled
  • SubnetHyperparameters.difficulty
  • @@ -707,10 +754,14 @@

    Module ContentsSubnetHyperparameters.registration_allowed
  • SubnetHyperparameters.rho
  • SubnetHyperparameters.serving_rate_limit
  • +
  • SubnetHyperparameters.subnet_is_active
  • SubnetHyperparameters.target_regs_per_interval
  • SubnetHyperparameters.tempo
  • +
  • SubnetHyperparameters.transfers_enabled
  • +
  • SubnetHyperparameters.user_liquidity_enabled
  • SubnetHyperparameters.weights_rate_limit
  • SubnetHyperparameters.weights_version
  • +
  • SubnetHyperparameters.yuma_version
  • diff --git a/static/python-api/html/autoapi/bittensor/core/chain_data/subnet_identity/index.html b/static/python-api/html/autoapi/bittensor/core/chain_data/subnet_identity/index.html index d93eed9183..df7db211c9 100644 --- a/static/python-api/html/autoapi/bittensor/core/chain_data/subnet_identity/index.html +++ b/static/python-api/html/autoapi/bittensor/core/chain_data/subnet_identity/index.html @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -404,6 +407,7 @@

    Contents

  • SubnetIdentity.description
  • SubnetIdentity.discord
  • SubnetIdentity.github_repo
  • +
  • SubnetIdentity.logo_url
  • SubnetIdentity.subnet_contact
  • SubnetIdentity.subnet_name
  • SubnetIdentity.subnet_url
  • @@ -443,37 +447,42 @@

    Module Contents
    -additional: str#
    +additional: str#
    -description: str#
    +description: str#
    -discord: str#
    +discord: str#
    -github_repo: str#
    +github_repo: str# +
    + +
    +
    +logo_url: str#
    -subnet_contact: str#
    +subnet_contact: str#
    -subnet_name: str#
    +subnet_name: str#
    -subnet_url: str#
    +subnet_url: str#
    @@ -534,6 +543,7 @@

    Module ContentsSubnetIdentity.description

  • SubnetIdentity.discord
  • SubnetIdentity.github_repo
  • +
  • SubnetIdentity.logo_url
  • SubnetIdentity.subnet_contact
  • SubnetIdentity.subnet_name
  • SubnetIdentity.subnet_url
  • diff --git a/static/python-api/html/autoapi/bittensor/core/chain_data/subnet_info/index.html b/static/python-api/html/autoapi/bittensor/core/chain_data/subnet_info/index.html index a31bacc2b6..7312cd2e44 100644 --- a/static/python-api/html/autoapi/bittensor/core/chain_data/subnet_info/index.html +++ b/static/python-api/html/autoapi/bittensor/core/chain_data/subnet_info/index.html @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -455,7 +458,7 @@

    Module Contents
    -blocks_since_epoch: int#
    +blocks_since_epoch: int#
    @@ -465,82 +468,82 @@

    Module Contents
    -connection_requirements: dict[str, float]#
    +connection_requirements: dict[str, float]#

    -difficulty: int#
    +difficulty: int#
    -emission_value: float#
    +emission_value: float#
    -immunity_period: int#
    +immunity_period: int#
    -kappa: int#
    +kappa: int#
    -max_allowed_validators: int#
    +max_allowed_validators: int#
    -max_n: int#
    +max_n: int#
    -max_weight_limit: float#
    +max_weight_limit: float#
    -min_allowed_weights: int#
    +min_allowed_weights: int#
    -modality: int#
    +modality: int#
    -netuid: int#
    +netuid: int#
    -owner_ss58: str#
    +owner_ss58: str#
    -rho: int#
    +rho: int#
    -scaling_law_power: float#
    +scaling_law_power: float#
    -subnetwork_n: int#
    +subnetwork_n: int#
    -tempo: int#
    +tempo: int#
    diff --git a/static/python-api/html/autoapi/bittensor/core/chain_data/subnet_state/index.html b/static/python-api/html/autoapi/bittensor/core/chain_data/subnet_state/index.html index a4637fefc1..ff1daa2cc2 100644 --- a/static/python-api/html/autoapi/bittensor/core/chain_data/subnet_state/index.html +++ b/static/python-api/html/autoapi/bittensor/core/chain_data/subnet_state/index.html @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -435,8 +438,8 @@

    Contents

    bittensor.core.chain_data.subnet_state#

    -

    This module defines the SubnetState data class and associated methods for handling and decoding -subnetwork states in the Bittensor network.

    +

    This module defines the SubnetState data class and associated methods for handling and decoding subnetwork states in +the Bittensor network.

    Classes#

    @@ -457,92 +460,92 @@

    Module Contents
    -active: list[bool]#
    +active: list[bool]#
    -alpha_stake: list[bittensor.utils.balance.Balance]#
    +alpha_stake: list[bittensor.utils.balance.Balance]#
    -block_at_registration: list[int]#
    +block_at_registration: list[int]#
    -coldkeys: list[str]#
    +coldkeys: list[str]#
    -consensus: list[float]#
    +consensus: list[float]#
    -dividends: list[float]#
    +dividends: list[float]#
    -emission: list[bittensor.utils.balance.Balance]#
    +emission: list[bittensor.utils.balance.Balance]#
    -emission_history: list[list[int]]#
    +emission_history: list[list[int]]#
    -hotkeys: list[str]#
    +hotkeys: list[str]#
    -incentives: list[float]#
    +incentives: list[float]#
    -last_update: list[int]#
    +last_update: list[int]#
    -netuid: int#
    +netuid: int#
    -pruning_score: list[float]#
    +pruning_score: list[float]#
    -rank: list[float]#
    +rank: list[float]#
    -tao_stake: list[bittensor.utils.balance.Balance]#
    +tao_stake: list[bittensor.utils.balance.Balance]#
    -total_stake: list[bittensor.utils.balance.Balance]#
    +total_stake: list[bittensor.utils.balance.Balance]#
    -trust: list[float]#
    +trust: list[float]#
    -validator_permit: list[bool]#
    +validator_permit: list[bool]#
    diff --git a/static/python-api/html/autoapi/bittensor/core/chain_data/utils/index.html b/static/python-api/html/autoapi/bittensor/core/chain_data/utils/index.html index b7b88a3278..a85032048e 100644 --- a/static/python-api/html/autoapi/bittensor/core/chain_data/utils/index.html +++ b/static/python-api/html/autoapi/bittensor/core/chain_data/utils/index.html @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -420,6 +423,7 @@

    Contents

  • decode_account_id()
  • +
  • decode_block()
  • decode_metadata()
  • decode_revealed_commitment()
  • decode_revealed_commitment_with_hotkey()
  • @@ -460,22 +464,25 @@

    Functions

    - + + + + - + - + - + - + - + @@ -487,7 +494,7 @@

    Module Contents
    class bittensor.core.chain_data.utils.ChainDataType[source]#
    -

    Bases: enum.Enum

    +

    Bases: enum.Enum

    Generic enumeration.

    Derive from this class to define new enumerations.

    @@ -578,13 +585,30 @@

    Module Contents
    Parameters:
    -

    account_id_bytes (bytes) – The AccountId in bytes that needs to be decoded.

    +

    account_id_bytes (Union[bytes, str]) – The AccountId in bytes that needs to be decoded.

    Returns:

    The decoded AccountId as a Base64 string.

    Return type:
    -

    str

    +

    str

    +
    +

    +
    + +
    +
    +bittensor.core.chain_data.utils.decode_block(data)[source]#
    +

    Decode the block data from the given input if it is not None.

    +
    +
    Parameters:
    +

    data (bytes) – The block data to decode.

    +
    +
    Returns:
    +

    The decoded block.

    +
    +
    Return type:
    +

    int

    @@ -594,34 +618,34 @@

    Module Contentsbittensor.core.chain_data.utils.decode_metadata(metadata)[source]#
    Parameters:
    -

    metadata (dict)

    +

    metadata (dict)

    Return type:
    -

    str

    +

    str

    -bittensor.core.chain_data.utils.decode_revealed_commitment(encoded_data)#
    +bittensor.core.chain_data.utils.decode_revealed_commitment(encoded_data)[source]#

    Decode the revealed commitment data from the given input if it is not None.

    Parameters:
    -

    encoded_data (tuple[bytes, int]) – A tuple containing the revealed message and the block number.

    +

    encoded_data – A tuple containing the revealed message and the block number.

    Returns:

    A tuple containing the revealed block number and decoded commitment message.

    Return type:
    -

    tuple[int, str]

    +

    tuple[int, str]

    -bittensor.core.chain_data.utils.decode_revealed_commitment_with_hotkey(encoded_data)#
    +bittensor.core.chain_data.utils.decode_revealed_commitment_with_hotkey(encoded_data)[source]#

    Decode revealed commitment using a hotkey.

    Returns:
    @@ -632,7 +656,7 @@

    Module ContentsReturn type: -

    tuple[str, tuple[tuple[int, str], …]]

    +

    tuple[str, tuple[tuple[int, str], …]]

    Parameters:

    encoded_data (async_substrate_interface.sync_substrate.QueryMapResult)

    @@ -647,18 +671,18 @@

    Module Contents
    Parameters:
      -
    • input (Union[List[int], bytes, ScaleBytes]) – The input_ data to decode.

    • +
    • input – The input_ data to decode.

    • type_name (ChainDataType) – The type of data being decoded.

    • -
    • is_vec (bool) – Whether the data is a vector of the specified type. Default is False.

    • -
    • is_option (bool) – Whether the data is an optional value of the specified type. Default is False.

    • -
    • input_ (Union[list[int], bytes, scalecodec.base.ScaleBytes])

    • +
    • is_vec (bool) – Whether the data is a vector of the specified type.

    • +
    • is_option (bool) – Whether the data is an optional value of the specified type.

    • +
    • input_ (Union[list[int], bytes, scalecodec.base.ScaleBytes])

    Returns:

    The decoded data as a dictionary, or None if the decoding fails.

    Return type:
    -

    Optional[dict]

    +

    Optional[dict]

    @@ -670,19 +694,19 @@

    Module Contents
    Parameters:
      -
    • input (Union[List[int], bytes, ScaleBytes]) – The SCALE encoded input data.

    • -
    • type_string (str) – The type string defining the structure of the data.

    • -
    • input_ (Union[list[int], bytes, scalecodec.base.ScaleBytes])

    • +
    • input – The SCALE encoded input data.

    • +
    • type_string (str) – The type string defining the structure of the data.

    • +
    • input_ (Union[list[int], bytes, scalecodec.base.ScaleBytes])

    Returns:

    The decoded data as a dictionary, or None if the decoding fails.

    -
    Return type:
    -

    Optional[dict]

    +
    Raises:
    +

    TypeError – If the input_ is not a list[int], bytes, or ScaleBytes.

    -
    Raises:
    -

    TypeError – If the input_ is not a list[int], bytes, or ScaleBytes.

    +
    Return type:
    +

    Optional[dict]

    @@ -693,13 +717,13 @@

    Module Contents
    Parameters:
    -

    stake_data (list) – A list of tuples where each tuple contains an account ID in bytes and a stake in rao.

    +

    stake_data (list) – A list of tuples where each tuple contains an account ID in bytes and a stake in rao.

    Returns:

    A dictionary with account IDs as keys and their corresponding Balance objects as values.

    Return type:
    -

    dict

    +

    dict

    @@ -776,6 +800,7 @@

    Module Contentsdecode_account_id() +
  • decode_block()
  • decode_metadata()
  • decode_revealed_commitment()
  • decode_revealed_commitment_with_hotkey()
  • diff --git a/static/python-api/html/autoapi/bittensor/core/chain_data/weight_commit_info/index.html b/static/python-api/html/autoapi/bittensor/core/chain_data/weight_commit_info/index.html index d25a545eb2..ed67fbcb92 100644 --- a/static/python-api/html/autoapi/bittensor/core/chain_data/weight_commit_info/index.html +++ b/static/python-api/html/autoapi/bittensor/core/chain_data/weight_commit_info/index.html @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -400,8 +403,10 @@

    Contents

  • Classes
  • Module Contents
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -397,7 +400,6 @@

    Contents

  • @@ -443,17 +440,6 @@

    Contents

    config = bt.config(parser)

    print(config)

    -
    -

    Attributes#

    -

    decode_account_id(account_id_bytes)

    Decodes an AccountId from bytes to a Base64 string using SS58 encoding.

    decode_metadata(metadata)

    decode_block(data)

    Decode the block data from the given input if it is not None.

    decode_metadata(metadata)

    decode_revealed_commitment(encoded_data)

    decode_revealed_commitment(encoded_data)

    Decode the revealed commitment data from the given input if it is not None.

    decode_revealed_commitment_with_hotkey(encoded_data)

    decode_revealed_commitment_with_hotkey(encoded_data)

    Decode revealed commitment using a hotkey.

    from_scale_encoding(input_, type_name[, is_vec, is_option])

    from_scale_encoding(input_, type_name[, is_vec, is_option])

    Decodes input_ data from SCALE encoding based on the specified type name and modifiers.

    from_scale_encoding_using_type_string(input_, type_string)

    from_scale_encoding_using_type_string(input_, type_string)

    Decodes SCALE encoded data to a dictionary based on the provided type string.

    process_stake_data(stake_data)

    process_stake_data(stake_data)

    Processes stake data to decode account IDs and convert stakes from rao to Balance objects.

    - - - - - -

    T

    -
    -

    Exceptions#

    @@ -472,9 +458,6 @@

    Classes#<

    - - -

    Config

    Manages configuration for Bittensor modules with nested namespace support.

    DefaultConfig

    A Config with a set of default values.

    @@ -483,7 +466,7 @@

    Classes#<

    Module Contents#

    -class bittensor.core.config.Config(parser=None, args=None, strict=False, default=None)[source]#
    +class bittensor.core.config.Config(parser=None, args=None, strict=False, default=DEFAULTS)[source]#

    Bases: munch.DefaultMunch

    Manages configuration for Bittensor modules with nested namespace support.

    Construct a new DefaultMunch. Like collections.defaultdict, the @@ -492,9 +475,9 @@

    Module Contents
    Parameters:
    @@ -505,10 +488,10 @@

    Module Contents
    Parameters:
    -

    param_name (str)

    +

    param_name (str)

    Return type:
    -

    bool

    +

    bool

    @@ -533,42 +516,9 @@

    Module Contents
    Return type:
    -

    dict

    -
    - - - - - -
    -
    -class bittensor.core.config.DefaultConfig(parser=None, args=None, strict=False, default=None)[source]#
    -

    Bases: Config

    -

    A Config with a set of default values.

    -

    Construct a new DefaultMunch. Like collections.defaultdict, the -first argument is the default value; subsequent arguments are the -same as those for dict.

    -
    -
    Parameters:
    -
    -
    -
    -
    -
    -classmethod default()[source]#
    -
    -
    Abstractmethod:
    -

    -
    Return type:
    -

    T

    +

    dict

    -

    Get default config.

    @@ -576,16 +526,11 @@

    Module Contents
    exception bittensor.core.config.InvalidConfigFile[source]#
    -

    Bases: Exception

    +

    Bases: Exception

    Raised when there’s an error loading the config file.

    Initialize self. See help(type(self)) for accurate signature.

    -
    -
    -bittensor.core.config.T#
    -
    -

    @@ -635,7 +580,6 @@

    Module Contents

  • diff --git a/static/python-api/html/autoapi/bittensor/core/dendrite/index.html b/static/python-api/html/autoapi/bittensor/core/dendrite/index.html index 6151d8d55e..78803b23c5 100644 --- a/static/python-api/html/autoapi/bittensor/core/dendrite/index.html +++ b/static/python-api/html/autoapi/bittensor/core/dendrite/index.html @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -512,7 +515,7 @@

    Functions#

    -bittensor.core.dendrite.BaseModel: bittensor.utils.registration.torch.nn.Module | object#
    +bittensor.core.dendrite.BaseModel: bittensor.utils.registration.torch.nn.Module | object#
    @@ -522,7 +525,7 @@

    Module Contents
    -bittensor.core.dendrite.DENDRITE_ERROR_MAPPING: dict[Type[Exception], tuple]#
    +bittensor.core.dendrite.DENDRITE_ERROR_MAPPING: dict[Type[Exception], tuple]#

    @@ -539,10 +542,9 @@

    Module Contents
    Parameters:
    @@ -553,7 +555,7 @@

    Module Contents
    Return type:
    -

    str

    +

    str

    @@ -564,19 +566,19 @@

    Module Contents
    Return type:
    -

    str

    +

    str

    -query(self, *args, **kwargs) Synapse | list[Synapse]#
    +query(self, *args, **kwargs) Synapse | list[Synapse]#

    Makes synchronous requests to one or multiple target Axons and returns responses.

    Return type:
    -

    list[Union[AsyncGenerator[Any, Any], bittensor.core.synapse.Synapse, bittensor.core.stream.StreamingSynapse]]

    +

    list[Union[AsyncGenerator[Any, Any], bittensor.core.synapse.Synapse, bittensor.core.stream.StreamingSynapse]]

    @@ -588,16 +590,16 @@

    Module Contents
    Parameters:
    Return type:
    -

    list[Union[AsyncGenerator[Any, Any], bittensor.core.synapse.Synapse, bittensor.core.stream.StreamingSynapse]]

    +

    list[Union[AsyncGenerator[Any, Any], bittensor.core.synapse.Synapse, bittensor.core.stream.StreamingSynapse]]

    @@ -612,8 +614,8 @@

    Module Contents
    Return type:
    @@ -632,8 +634,8 @@

    Module Contents
    Return type:
    @@ -652,7 +654,7 @@

    Module Contents
    Return type:
    @@ -670,7 +672,7 @@

    Module ContentsParameters:
    @@ -683,7 +685,7 @@

    Module Contents
    Parameters:
    -

    using_new_loop (bool)

    +

    using_new_loop (bool)

    @@ -718,9 +720,7 @@

    Module Contents
    Parameters:
    -

    wallet (Optional[Union[bittensor_wallet.Wallet, bittensor_wallet.Keypair]]) – The user’s wallet or keypair -used for signing messages. Defaults to None, in which case a new -bittensor_wallet.Wallet().hotkey() is generated and used.

    +

    wallet (Optional[Union[bittensor_wallet.Wallet, bittensor_wallet.Keypair]]) – The user’s wallet or keypair used for signing messages.

    @@ -738,10 +738,9 @@

    Module Contents
    Parameters:
    @@ -752,7 +751,7 @@

    Module Contents
    Return type:
    -

    str

    +

    str

    @@ -763,19 +762,19 @@

    Module Contents
    Return type:
    -

    str

    +

    str

    -query(self, *args, **kwargs) Synapse | list[Synapse][source]#
    +query(self, *args, **kwargs) Synapse | list[Synapse][source]#

    Makes synchronous requests to one or multiple target Axons and returns responses.

    Return type:
    -

    list[Union[AsyncGenerator[Any, Any], bittensor.core.synapse.Synapse, bittensor.core.stream.StreamingSynapse]]

    +

    list[Union[AsyncGenerator[Any, Any], bittensor.core.synapse.Synapse, bittensor.core.stream.StreamingSynapse]]

    @@ -787,16 +786,16 @@

    Module Contents
    Parameters:
    Return type:
    -

    list[Union[AsyncGenerator[Any, Any], bittensor.core.synapse.Synapse, bittensor.core.stream.StreamingSynapse]]

    +

    list[Union[AsyncGenerator[Any, Any], bittensor.core.synapse.Synapse, bittensor.core.stream.StreamingSynapse]]

    @@ -811,8 +810,8 @@

    Module Contents
    Return type:
    @@ -831,8 +830,8 @@

    Module Contents
    Return type:
    @@ -851,7 +850,7 @@

    Module Contents
    Return type:
    @@ -869,7 +868,7 @@

    Module ContentsParameters:
    @@ -882,7 +881,7 @@

    Module Contents
    Parameters:
    -

    using_new_loop (bool)

    +

    using_new_loop (bool)

    @@ -917,9 +916,7 @@

    Module Contents
    Parameters:
    -

    wallet (Optional[Union[bittensor_wallet.Wallet, bittensor_wallet.Keypair]]) – The user’s wallet or keypair -used for signing messages. Defaults to None, in which case a new -bittensor_wallet.Wallet().hotkey() is generated and used.

    +

    wallet (Optional[Union[bittensor_wallet.Wallet, bittensor_wallet.Keypair]]) – The user’s wallet or keypair used for signing messages.

    @@ -966,12 +963,10 @@

    Module Contents
    Parameters:
    Returns:
    @@ -994,13 +989,10 @@

    Module Contents
    Parameters:
    Yields:
    @@ -1022,7 +1014,7 @@

    Module Contents
    Parameters:
    -

    using_new_loop (bool) – A flag to determine whether this has been called with a new event loop rather than +

    using_new_loop (bool) – A flag to determine whether this has been called with a new event loop rather than the default. This will indicate whether to close this event loop at the end of this call.

    @@ -1047,82 +1039,54 @@

    Module Contents async forward(axons, synapse=Synapse(), timeout=12, deserialize=True, run_async=True, streaming=False)[source]#

    Asynchronously sends requests to one or multiple Axons and collates their responses.

    -

    This function acts as a bridge for sending multiple requests concurrently or sequentially -based on the provided parameters. It checks the type of the target Axons, preprocesses -the requests, and then sends them off. After getting the responses, it processes and -collates them into a unified format.

    -

    When querying an Axon that sends a single response, this function returns a Synapse object -containing the response data. If multiple Axons are queried, a list of Synapse objects is -returned, each containing the response from the corresponding Axon.

    -

    For example:

    -
    ...
    -import bittensor
    -wallet = bittensor.Wallet()                     # Initialize a wallet
    -synapse = bittensor.Synapse(...)                # Create a synapse object that contains query data
    -dendrite = bittensor.Dendrite(wallet = wallet)  # Initialize a dendrite instance
    -netuid = ...                                    # Provide subnet ID
    -metagraph = bittensor.Metagraph(netuid)         # Initialize a metagraph instance
    -axons = metagraph.axons                         # Create a list of axons to query
    -responses = await dendrite(axons, synapse)      # Send the query to all axons and await the responses
    -
    +

    This function acts as a bridge for sending multiple requests concurrently or sequentially based on the provided +parameters. It checks the type of the target Axons, preprocesses the requests, and then sends them off. After +getting the responses, it processes and collates them into a unified format.

    +

    When querying an Axon that sends a single response, this function returns a Synapse object containing the +response data. If multiple Axons are queried, a list of Synapse objects is returned, each containing the +response from the corresponding Axon.

    +
    +

    Example

    +

    … +import bittensor +wallet = bittensor.Wallet() # Initialize a wallet +synapse = bittensor.Synapse(…) # Create a synapse object that contains query data +dendrite = bittensor.Dendrite(wallet = wallet) # Initialize a dendrite instance +netuid = … # Provide subnet ID +metagraph = bittensor.Metagraph(netuid) # Initialize a metagraph instance +axons = metagraph.axons # Create a list of axons to query +responses = await dendrite(axons, synapse) # Send the query to all axons and await the responses

    When querying an Axon that sends back data in chunks using the Dendrite, this function returns an AsyncGenerator that yields each chunk as it is received. The generator can be iterated over to process each chunk individually.

    -

    For example:

    -
    ...
    -dendrite = bittensor.Dendrite(wallet = wallet)
    -async for chunk in dendrite.forward(axons, synapse, timeout, deserialize, run_async, streaming):
    -    # Process each chunk here
    -    print(chunk)
    -
    +
    +

    Example

    +

    … +dendrite = bittensor.Dendrite(wallet = wallet) +async for chunk in dendrite.forward(axons, synapse, timeout, deserialize, run_async, streaming):

    +
    +

    # Process each chunk here +print(chunk)

    +
    Parameters:
      -
    • (Union[list[Union[bittensor.core.chain_data.axon_info.AxonInfo (axons) – Union[bittensor.core.chain_data.axon_info.AxonInfo, bittensor.core.axon.Axon]]): The target Axons to -send requests to. Can be a single Axon or a list of Axons.

    • -
    • bittensor.core.axon.Axon]] – Union[bittensor.core.chain_data.axon_info.AxonInfo, bittensor.core.axon.Axon]]): The target Axons to -send requests to. Can be a single Axon or a list of Axons.

    • -
    • axons (Union[list[Union[bittensor.core.chain_data.AxonInfo, bittensor.core.axon.Axon]], Union[bittensor.core.chain_data.AxonInfo, bittensor.core.axon.Axon]])

    • -
    • synapse (bittensor.core.synapse.Synapse)

    • -
    • timeout (float)

    • -
    • deserialize (bool)

    • -
    • run_async (bool)

    • -
    • streaming (bool)

    • -
    -
    -
    Return type:
    -

    list[Union[AsyncGenerator[Any, Any], bittensor.core.synapse.Synapse, bittensor.core.stream.StreamingSynapse]]

    -
    -
    -
    -
    :paramUnion[bittensor.core.chain_data.axon_info.AxonInfo, bittensor.core.axon.Axon]]): The target Axons to

    send requests to. Can be a single Axon or a list of Axons.

    -
    -
    -
    -
    Parameters:
    -
      -
    • synapse (bittensor.core.synapse.Synapse) – The Synapse object encapsulating the data. Defaults to a new -Synapse() instance.

    • -
    • timeout (float) – Maximum duration to wait for a response from an Axon in seconds. Defaults to 12.0.

    • -
    • deserialize (bool) – Determines if the received response should be deserialized. Defaults to True.

    • -
    • run_async (bool) – If True, sends requests concurrently. Otherwise, sends requests sequentially. -Defaults to True.

    • -
    • streaming (bool) – Indicates if the response is expected to be in streaming format. Defaults to False.

    • -
    • axons (Union[list[Union[bittensor.core.chain_data.AxonInfo, bittensor.core.axon.Axon]], Union[bittensor.core.chain_data.AxonInfo, bittensor.core.axon.Axon]])

    • +
    • axons (Union[list[Union[bittensor.core.chain_data.AxonInfo, bittensor.core.axon.Axon]], Union[bittensor.core.chain_data.AxonInfo, bittensor.core.axon.Axon]]) – The target Axons to send requests to. Can be a single Axon or a list of Axons.

    • +
    • synapse (bittensor.core.synapse.Synapse) – The Synapse object encapsulating the data.

    • +
    • timeout (float) – Maximum duration to wait for a response from an Axon in seconds.

    • +
    • deserialize (bool) – Determines if the received response should be deserialized.

    • +
    • run_async (bool) – If True, sends requests concurrently. Otherwise, sends requests sequentially.

    • +
    • streaming (bool) – Indicates if the response is expected to be in streaming format.

    Returns:
    -

    -
    If a single

    Axon is targeted, returns its response.

    -
    -
    -

    If multiple Axons are targeted, returns a list of their responses.

    -

    +

    If a single Axon is targeted, returns its response. If multiple Axons are targeted, returns a list of +their responses.

    Return type:
    -

    Union[AsyncGenerator, bittensor.core.synapse.Synapse, list[bittensor.core.synapse.Synapse]]

    +

    list[Union[AsyncGenerator[Any, Any], bittensor.core.synapse.Synapse, bittensor.core.stream.StreamingSynapse]]

    @@ -1140,7 +1104,7 @@

    Module Contents
    Parameters:
    -

    exception (Exception) – The exception object to be logged.

    +

    exception (Exception) – The exception object to be logged.

    Returns:

    None

    @@ -1156,9 +1120,9 @@

    Module Contents
    Parameters:
    Returns:
    @@ -1173,22 +1137,23 @@

    Module Contents
    process_error_message(synapse, request_name, exception)[source]#
    -

    Handles exceptions that occur during network requests, updating the synapse with appropriate status codes and messages.

    -

    This method interprets different types of exceptions and sets the corresponding status code and -message in the synapse object. It covers common network errors such as connection issues and timeouts.

    +

    Handles exceptions that occur during network requests, updating the synapse with appropriate status codes and +messages.

    +

    This method interprets different types of exceptions and sets the corresponding status code and message in the +synapse object. It covers common network errors such as connection issues and timeouts.

    Parameters:
    Returns:

    The updated synapse object with the error status code and message.

    Return type:
    -

    Synapse (bittensor.core.synapse.Synapse)

    +

    Synapse

    @@ -1205,9 +1170,9 @@

    Module Contents
    Parameters:
      -
    • server_response (object) –

      The aiohttp response object from the server.

      +
    • server_response (aiohttp.ClientResponse) –

      The aiohttp response object from the server.

    • -
    • json_response (dict) – The parsed JSON response from the server.

    • +
    • json_response (dict) – The parsed JSON response from the server.

    • local_synapse (bittensor.core.synapse.Synapse) – The local synapse object to be updated.

    @@ -1225,34 +1190,17 @@

    Module Contents
    Parameters:
      -
    • (Union[list[Union[bittensor.core.chain_data.axon_info.AxonInfo (axons) – Union[‘bittensor.core.chain_data.axon_info.AxonInfo’, ‘bittensor.core.axon.Axon’]]): The list of target -Axon information.

    • -
    • 'bittensor.core.axon.Axon']] – Union[‘bittensor.core.chain_data.axon_info.AxonInfo’, ‘bittensor.core.axon.Axon’]]): The list of target -Axon information.

    • -
    -
    -
    Return type:
    -

    list[Union[AsyncGenerator[Any, Any], bittensor.core.synapse.Synapse, bittensor.core.stream.StreamingSynapse]]

    -
    - -
    -
    :paramUnion[‘bittensor.core.chain_data.axon_info.AxonInfo’, ‘bittensor.core.axon.Axon’]]): The list of target

    Axon information.

    -
    -
    -
    -
    Parameters:
    -
      -
    • synapse (Optional[bittensor.core.synapse.Synapse]) – The Synapse object. Defaults to Synapse().

    • -
    • timeout (Optional[float]) – The request timeout duration in seconds. Defaults to 12.0 seconds.

    • +
    • axons – The list of target Axon information.

    • +
    • synapse – The Synapse object.

    • +
    • timeout – The request timeout duration in seconds.

    Returns:
    -

    If a single target axon is -provided, returns the response from that axon. If multiple target axons are provided, returns a list of -responses from all target axons.

    +

    If a single target axon is provided, returns the response from that axon. If multiple target axons are +provided, returns a list of responses from all target axons.

    Return type:
    -

    Union[bittensor.core.synapse.Synapse, list[bittensor.core.synapse.Synapse]]

    +

    list[Union[AsyncGenerator[Any, Any], bittensor.core.synapse.Synapse, bittensor.core.stream.StreamingSynapse]]

    @@ -1297,7 +1245,7 @@

    Module Contents
    -synapse_history: list = []#
    +synapse_history: list = []#
    diff --git a/static/python-api/html/autoapi/bittensor/core/errors/index.html b/static/python-api/html/autoapi/bittensor/core/errors/index.html index bda886221a..a1ad5215d4 100644 --- a/static/python-api/html/autoapi/bittensor/core/errors/index.html +++ b/static/python-api/html/autoapi/bittensor/core/errors/index.html @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -400,6 +403,8 @@

    Contents

  • Attributes
  • Exceptions
  • Module Contents
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -415,16 +418,22 @@

    Contents

    Submodules#

    @@ -452,11 +461,11 @@

    Submodules

    next

    -

    bittensor.core.extrinsics.asyncex.commit_reveal

    +

    bittensor.core.extrinsics.asyncex.children

    diff --git a/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/liquidity/index.html b/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/liquidity/index.html new file mode 100644 index 0000000000..1291173710 --- /dev/null +++ b/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/liquidity/index.html @@ -0,0 +1,699 @@ + + + + + + + + + + + bittensor.core.extrinsics.asyncex.liquidity — Bittensor SDK Docs documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + +
    + +
    + + + + + +
    +
    + + + + + + +
    + + + +
    + +
    +
    + +
    +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + + +
    +

    bittensor.core.extrinsics.asyncex.liquidity

    + +
    + +
    +
    + + + + +
    + +
    +

    bittensor.core.extrinsics.asyncex.liquidity#

    +
    +

    Functions#

    +
    + + + + + + + + + + + + + + +

    add_liquidity_extrinsic(subtensor, wallet, netuid, ...)

    Adds liquidity to the specified price range.

    modify_liquidity_extrinsic(subtensor, wallet, netuid, ...)

    Modifies liquidity in liquidity position by adding or removing liquidity from it.

    remove_liquidity_extrinsic(subtensor, wallet, netuid, ...)

    Remove liquidity and credit balances back to wallet's hotkey stake.

    toggle_user_liquidity_extrinsic(subtensor, wallet, ...)

    Allow to toggle user liquidity for specified subnet.

    +
    +
    +
    +

    Module Contents#

    +
    +
    +async bittensor.core.extrinsics.asyncex.liquidity.add_liquidity_extrinsic(subtensor, wallet, netuid, liquidity, price_low, price_high, hotkey_ss58=None, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#
    +

    Adds liquidity to the specified price range.

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.async_subtensor.AsyncSubtensor) – The Subtensor client instance used for blockchain interaction.

    • +
    • wallet (bittensor_wallet.Wallet) – The wallet used to sign the extrinsic (must be unlocked).

    • +
    • netuid (int) – The UID of the target subnet for which the call is being initiated.

    • +
    • liquidity (bittensor.utils.balance.Balance) – The amount of liquidity to be added.

    • +
    • price_low (bittensor.utils.balance.Balance) – The lower bound of the price tick range.

    • +
    • price_high (bittensor.utils.balance.Balance) – The upper bound of the price tick range.

    • +
    • hotkey_ss58 (Optional[str]) – The hotkey with staked TAO in Alpha. If not passed then the wallet hotkey is used.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    +

    Note: Adding is allowed even when user liquidity is enabled in specified subnet. Call +toggle_user_liquidity_extrinsic to enable/disable user liquidity.

    +
    + +
    +
    +async bittensor.core.extrinsics.asyncex.liquidity.modify_liquidity_extrinsic(subtensor, wallet, netuid, position_id, liquidity_delta, hotkey_ss58=None, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#
    +

    Modifies liquidity in liquidity position by adding or removing liquidity from it.

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.async_subtensor.AsyncSubtensor) – The Subtensor client instance used for blockchain interaction.

    • +
    • wallet (bittensor_wallet.Wallet) – The wallet used to sign the extrinsic (must be unlocked).

    • +
    • netuid (int) – The UID of the target subnet for which the call is being initiated.

    • +
    • position_id (int) – The id of the position record in the pool.

    • +
    • liquidity_delta (bittensor.utils.balance.Balance) – The amount of liquidity to be added or removed (add if positive or remove if negative).

    • +
    • hotkey_ss58 (Optional[str]) – The hotkey with staked TAO in Alpha. If not passed then the wallet hotkey is used.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    +
    +
    Note: Modifying is allowed even when user liquidity is enabled in specified subnet.

    Call toggle_user_liquidity_extrinsic to enable/disable user liquidity.

    +
    +
    +
    + +
    +
    +async bittensor.core.extrinsics.asyncex.liquidity.remove_liquidity_extrinsic(subtensor, wallet, netuid, position_id, hotkey_ss58=None, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#
    +

    Remove liquidity and credit balances back to wallet’s hotkey stake.

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.async_subtensor.AsyncSubtensor) – The Subtensor client instance used for blockchain interaction.

    • +
    • wallet (bittensor_wallet.Wallet) – The wallet used to sign the extrinsic (must be unlocked).

    • +
    • netuid (int) – The UID of the target subnet for which the call is being initiated.

    • +
    • position_id (int) – The id of the position record in the pool.

    • +
    • hotkey_ss58 (Optional[str]) – The hotkey with staked TAO in Alpha. If not passed then the wallet hotkey is used.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    +

    Note: Adding is allowed even when user liquidity is enabled in specified subnet. Call +toggle_user_liquidity_extrinsic to enable/disable user liquidity.

    +
    + +
    +
    +async bittensor.core.extrinsics.asyncex.liquidity.toggle_user_liquidity_extrinsic(subtensor, wallet, netuid, enable, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#
    +

    Allow to toggle user liquidity for specified subnet.

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.async_subtensor.AsyncSubtensor) – The Subtensor client instance used for blockchain interaction.

    • +
    • wallet (bittensor_wallet.Wallet) – The wallet used to sign the extrinsic (must be unlocked).

    • +
    • netuid (int) – The UID of the target subnet for which the call is being initiated.

    • +
    • enable (bool) – Boolean indicating whether to enable user liquidity.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    +
    + +
    +
    + + +
    + + + + + + + + +
    + + + + + + + +
    +
    + + +
    + + +
    +
    +
    + + + + + +
    +
    + + \ No newline at end of file diff --git a/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/mev_shield/index.html b/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/mev_shield/index.html new file mode 100644 index 0000000000..04bd0da991 --- /dev/null +++ b/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/mev_shield/index.html @@ -0,0 +1,904 @@ + + + + + + + + + + +<<<<<<<< HEAD:static/python-api/html/autoapi/bittensor/core/extrinsics/pallets/crowdloan/index.html + bittensor.core.extrinsics.pallets.crowdloan — Bittensor SDK Docs documentation +======== + bittensor.core.extrinsics.asyncex.mev_shield — Bittensor SDK Docs documentation +>>>>>>>> origin/main:static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/mev_shield/index.html + + + + + + + + + + + + + + + + + + + + + + + + + + +<<<<<<<< HEAD:static/python-api/html/autoapi/bittensor/core/extrinsics/pallets/crowdloan/index.html + + + + + +======== + + + + + +>>>>>>>> origin/main:static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/mev_shield/index.html + + + + + + + + + + + + +
    + + + + + + + + + +
    + +
    + + + + + +
    +
    + + + + + + +
    + + + +
    + +
    +
    + +
    +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + + +
    +<<<<<<<< HEAD:static/python-api/html/autoapi/bittensor/core/extrinsics/pallets/crowdloan/index.html +

    bittensor.core.extrinsics.pallets.crowdloan

    +======== +

    bittensor.core.extrinsics.asyncex.mev_shield

    +>>>>>>>> origin/main:static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/mev_shield/index.html + +
    +
    + +
    +

    Contents

    +
    + +
    +
    +
    + + + + +
    + +<<<<<<<< HEAD:static/python-api/html/autoapi/bittensor/core/extrinsics/pallets/crowdloan/index.html +
    +

    bittensor.core.extrinsics.pallets.crowdloan#

    +
    +

    Classes#

    +
    + + + +======== +
    +

    bittensor.core.extrinsics.asyncex.mev_shield#

    +

    Module provides async MEV Shield extrinsics.

    +
    +

    Functions#

    +

    Crowdloan

    Factory class for creating GenericCall objects for Crowdloan pallet functions.

    + + + + + + +>>>>>>>> origin/main:static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/mev_shield/index.html + + +

    submit_encrypted_extrinsic(subtensor, wallet, call[, ...])

    Submits an encrypted extrinsic to the MEV Shield pallet.

    wait_for_extrinsic_by_hash(subtensor, extrinsic_hash, ...)

    Wait for the result of a MeV Shield encrypted extrinsic.

    +
    +
    +
    +

    Module Contents#

    +<<<<<<<< HEAD:static/python-api/html/autoapi/bittensor/core/extrinsics/pallets/crowdloan/index.html +
    +
    +class bittensor.core.extrinsics.pallets.crowdloan.Crowdloan#
    +

    Bases: bittensor.core.extrinsics.pallets.base.CallBuilder

    +

    Factory class for creating GenericCall objects for Crowdloan pallet functions.

    +

    This class provides methods to create GenericCall instances for all Crowdloan pallet extrinsics.

    +

    Works with both sync (Subtensor) and async (AsyncSubtensor) instances. For async operations, pass an AsyncSubtensor +instance and await the result.

    +
    +

    Example

    +

    # Sync usage +call = Crowdloan(subtensor).finalize(crowdloan_id=123) +response = subtensor.sign_and_send_extrinsic(call=call, …)

    +

    # Async usage +call = await Crowdloan(subtensor).finalize(crowdloan_id=123) +response = await async_subtensor.sign_and_send_extrinsic(call=call, …)

    +
    +
    +
    +contribute(crowdloan_id, amount)#
    +

    Returns GenericCall instance for Subtensor function Crowdloan.contribute.

    +
    +
    Parameters:
    +
      +
    • crowdloan_id (int) – The unique identifier of the crowdloan to contribute to.

    • +
    • amount (int) – Amount in RAO to contribute.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +======== +
    +
    +async bittensor.core.extrinsics.asyncex.mev_shield.submit_encrypted_extrinsic(subtensor, wallet, call, sign_with='coldkey', *, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=False, wait_for_revealed_execution=True, blocks_for_revealed_execution=3)#
    +

    Submits an encrypted extrinsic to the MEV Shield pallet.

    +

    This function encrypts a call using ML-KEM-768 + XChaCha20Poly1305 and submits it to the MevShield pallet. The +extrinsic remains encrypted in the transaction pool until it is included in a block and decrypted by validators.

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.async_subtensor.AsyncSubtensor) – The Subtensor client instance used for blockchain interaction.

    • +
    • wallet (bittensor_wallet.Wallet) – The wallet used to sign the extrinsic (must be unlocked, coldkey will be used for signing).

    • +
    • call (scalecodec.types.GenericCall) – The GenericCall object to encrypt and submit.

    • +
    • sign_with (str) – The keypair to use for signing the inner call/extrinsic. Can be either “coldkey” or “hotkey”.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the executed event, indicating that validators have +successfully decrypted and executed the inner call. If True, the function will poll subsequent blocks for +the event matching this submission’s commitment.

    • +
    • blocks_for_revealed_execution (int) – Maximum number of blocks to poll for the executed event after inclusion. +The function checks blocks from start_block + 1 to start_block + blocks_for_revealed_execution. Returns +immediately if the event is found before the block limit is reached.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    Raises:
    +
      +
    • ValueError – If NextKey is not available in storage or encryption fails.

    • +
    • SubstrateRequestException – If the extrinsic fails to be submitted or included.

    • +
    +>>>>>>>> origin/main:static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/mev_shield/index.html +
    +
    +
    +

    Note

    +

    The encryption uses the public key from NextKey storage, which rotates every block. The payload structure is: +payload_core = signer_bytes (32B) + key_hash (32B Blake2-256 hash of NextKey) + SCALE(call) +plaintext = payload_core + b”x01” + signature (64B for sr25519) +commitment = blake2_256(payload_core)

    +

    The key_hash binds the transaction to the key epoch at submission time and replaces nonce-based replay +protection.

    +
    +
    + +<<<<<<<< HEAD:static/python-api/html/autoapi/bittensor/core/extrinsics/pallets/crowdloan/index.html +
    +
    +create(deposit, min_contribution, cap, end, call=None, target_address=None)#
    +

    Returns GenericCall instance for Subtensor function Crowdloan.create.

    +
    +
    Parameters:
    +
      +
    • deposit (int) – Initial deposit in RAO from the creator.

    • +
    • min_contribution (int) – Minimum contribution amount in RAO.

    • +
    • cap (int) – Maximum cap to be raised in RAO.

    • +
    • end (int) – Block number when the campaign ends.

    • +
    • call (Optional[scalecodec.GenericCall]) – Runtime call data (e.g., subtensor::register_leased_network).

    • +
    • target_address (Optional[str]) – SS58 address to transfer funds to on success.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +======== +
    +
    +async bittensor.core.extrinsics.asyncex.mev_shield.wait_for_extrinsic_by_hash(subtensor, extrinsic_hash, shield_id, submit_block_hash, timeout_blocks=3)#
    +

    Wait for the result of a MeV Shield encrypted extrinsic.

    +

    After submit_encrypted succeeds, the block author will decrypt and submit the inner extrinsic directly. This +function polls subsequent blocks looking for either: +- an extrinsic matching the provided hash (success) +OR +- a markDecryptionFailed extrinsic with matching shield ID (failure)

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.async_subtensor.AsyncSubtensor) – SubtensorInterface instance.

    • +
    • extrinsic_hash (str) – The hash of the inner extrinsic to find.

    • +
    • shield_id (str) – The wrapper ID from EncryptedSubmitted event (for detecting decryption failures).

    • +
    • submit_block_hash (str) – Block hash where submit_encrypted was included.

    • +
    • timeout_blocks (int) – Max blocks to wait (default 3).

    • +
    +
    +
    Returns:
    +

    Optional ExtrinsicReceipt.

    +
    +
    Return type:
    +

    Optional[async_substrate_interface.AsyncExtrinsicReceipt]

    +>>>>>>>> origin/main:static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/mev_shield/index.html +
    +
    +
    + +<<<<<<<< HEAD:static/python-api/html/autoapi/bittensor/core/extrinsics/pallets/crowdloan/index.html +
    +
    +dissolve(crowdloan_id)#
    +

    Returns GenericCall instance for Subtensor function Crowdloan.dissolve.

    +
    +
    Parameters:
    +

    crowdloan_id (int) – The unique identifier of the crowdloan to dissolve.

    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +finalize(crowdloan_id)#
    +

    Returns GenericCall instance for Subtensor function Crowdloan.finalize.

    +
    +
    Parameters:
    +

    crowdloan_id (int) – The unique identifier of the crowdloan to finalize.

    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +refund(crowdloan_id)#
    +

    Returns GenericCall instance for Subtensor function Crowdloan.refund.

    +
    +
    Parameters:
    +

    crowdloan_id (int) – The unique identifier of the crowdloan to refund.

    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +update_cap(crowdloan_id, new_cap)#
    +

    Returns GenericCall instance for Subtensor function Crowdloan.update_cap.

    +
    +
    Parameters:
    +
      +
    • crowdloan_id (int) – The unique identifier of the crowdloan to update the cap for.

    • +
    • new_cap (int) – New cap to be raised in RAO.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +update_end(crowdloan_id, new_end)#
    +

    Returns GenericCall instance for Subtensor function Crowdloan.update_end.

    +
    +
    Parameters:
    +
      +
    • crowdloan_id (int) – The unique identifier of the crowdloan to update the end block number for.

    • +
    • new_end (int) – New end block number.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +update_min_contribution(crowdloan_id, new_min_contribution)#
    +

    Returns GenericCall instance for Subtensor function Crowdloan.update_min_contribution.

    +
    +
    Parameters:
    +
      +
    • crowdloan_id (int) – The unique identifier of the crowdloan to update the minimum contribution amount for.

    • +
    • new_min_contribution (int) – New minimum contribution amount in RAO.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +withdraw(crowdloan_id)#
    +

    Returns GenericCall instance for Subtensor function Crowdloan.withdraw.

    +
    +
    Parameters:
    +

    crowdloan_id (int) – The unique identifier of the crowdloan to withdraw from.

    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    + +======== +>>>>>>>> origin/main:static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/mev_shield/index.html +
    +
    + + +
    + + + + + + + + +
    + + + + +
    + + +
    +
    + + +
    + + +
    +
    +
    + + + + + +
    +
    + + \ No newline at end of file diff --git a/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/move_stake/index.html b/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/move_stake/index.html index 9598a73615..54eb9afd4a 100644 --- a/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/move_stake/index.html +++ b/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/move_stake/index.html @@ -48,8 +48,8 @@ - - + + @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -421,7 +424,7 @@

    Contents

    Functions#

    - + @@ -438,92 +441,108 @@

    Functions#

    -async bittensor.core.extrinsics.asyncex.move_stake.move_stake_extrinsic(subtensor, wallet, origin_hotkey, origin_netuid, destination_hotkey, destination_netuid, amount, wait_for_inclusion=True, wait_for_finalization=False, period=None)[source]#
    +async bittensor.core.extrinsics.asyncex.move_stake.move_stake_extrinsic(subtensor, wallet, origin_netuid, origin_hotkey_ss58, destination_netuid, destination_hotkey_ss58, amount=None, move_all_stake=False, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#

    Moves stake from one hotkey to another within subnets in the Bittensor network.

    Parameters:
      -
    • subtensor (Subtensor) – The subtensor instance to interact with the blockchain.

    • -
    • wallet (Wallet) – The wallet containing the coldkey to authorize the move.

    • -
    • origin_hotkey (str) – SS58 address of the origin hotkey associated with the stake.

    • -
    • origin_netuid (int) – Network UID of the origin subnet.

    • -
    • destination_hotkey (str) – SS58 address of the destination hotkey.

    • -
    • destination_netuid (int) – Network UID of the destination subnet.

    • -
    • amount (Balance) – The amount of stake to move as a Balance object.

    • -
    • wait_for_inclusion (bool) – If True, waits for transaction inclusion in a block. Defaults to True.

    • -
    • wait_for_finalization (bool) – If True, waits for transaction finalization. Defaults to False.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If -the transaction is not included in a block within that number of blocks, it will expire and be rejected. -You can think of it as an expiration date for the transaction.

    • +
    • subtensor (bittensor.core.async_subtensor.AsyncSubtensor) – Subtensor instance.

    • +
    • wallet (bittensor_wallet.Wallet) – The wallet to move stake from.

    • +
    • origin_netuid (int) – The netuid of the source subnet.

    • +
    • origin_hotkey_ss58 (str) – The SS58 address of the source hotkey.

    • +
    • destination_netuid (int) – The netuid of the destination subnet.

    • +
    • destination_hotkey_ss58 (str) – The SS58 address of the destination hotkey.

    • +
    • amount (Optional[bittensor.utils.balance.Balance]) – Amount to move.

    • +
    • move_all_stake (bool) – If true, moves all stake from the source hotkey to the destination hotkey.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    True if the move was successful, False otherwise.

    +

    The result object of the extrinsic execution.

    Return type:
    -

    bool

    +

    ExtrinsicResponse

    -async bittensor.core.extrinsics.asyncex.move_stake.swap_stake_extrinsic(subtensor, wallet, hotkey_ss58, origin_netuid, destination_netuid, amount, wait_for_inclusion=True, wait_for_finalization=False, safe_staking=False, allow_partial_stake=False, rate_tolerance=0.005, period=None)[source]#
    +async bittensor.core.extrinsics.asyncex.move_stake.swap_stake_extrinsic(subtensor, wallet, hotkey_ss58, origin_netuid, destination_netuid, amount, safe_swapping=False, allow_partial_stake=False, rate_tolerance=0.005, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#

    Swaps stake from one subnet to another for a given hotkey in the Bittensor network.

    Parameters:
      -
    • subtensor (AsyncSubtensor) – The subtensor instance to interact with the blockchain.

    • -
    • wallet (Wallet) – The wallet containing the coldkey to authorize the swap.

    • -
    • hotkey_ss58 (str) – SS58 address of the hotkey associated with the stake.

    • -
    • origin_netuid (int) – Network UID of the origin subnet.

    • -
    • destination_netuid (int) – Network UID of the destination subnet.

    • -
    • amount (Balance) – The amount of stake to swap as a Balance object.

    • -
    • wait_for_inclusion (bool) – If True, waits for transaction inclusion in a block. Defaults to True.

    • -
    • wait_for_finalization (bool) – If True, waits for transaction finalization. Defaults to False.

    • -
    • safe_staking (bool) – If true, enables price safety checks to protect against price impact.

    • -
    • allow_partial_stake (bool) – If true, allows partial stake swaps when the full amount would exceed the price tolerance.

    • -
    • rate_tolerance (float) – Maximum allowed increase in a price ratio (0.005 = 0.5%).

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If -the transaction is not included in a block within that number of blocks, it will expire and be rejected. -You can think of it as an expiration date for the transaction.

    • +
    • subtensor (bittensor.core.async_subtensor.AsyncSubtensor) – Subtensor instance.

    • +
    • wallet (bittensor_wallet.Wallet) – The wallet to swap stake from.

    • +
    • hotkey_ss58 (str) – The hotkey SS58 address associated with the stake.

    • +
    • origin_netuid (int) – The source subnet UID.

    • +
    • destination_netuid (int) – The destination subnet UID.

    • +
    • amount (bittensor.utils.balance.Balance) – Amount to swap.

    • +
    • safe_swapping (bool) – If true, enables price safety checks to protect against price impact.

    • +
    • allow_partial_stake (bool) – If true, allows partial stake swaps when the full amount would exceed the price tolerance.

    • +
    • rate_tolerance (float) – Maximum allowed increase in a price ratio (0.005 = 0.5%).

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    True if the swap was successful, False otherwise.

    +

    The result object of the extrinsic execution.

    Return type:
    -

    bool

    +

    ExtrinsicResponse

    -async bittensor.core.extrinsics.asyncex.move_stake.transfer_stake_extrinsic(subtensor, wallet, destination_coldkey_ss58, hotkey_ss58, origin_netuid, destination_netuid, amount, wait_for_inclusion=True, wait_for_finalization=False, period=None)[source]#
    +async bittensor.core.extrinsics.asyncex.move_stake.transfer_stake_extrinsic(subtensor, wallet, destination_coldkey_ss58, hotkey_ss58, origin_netuid, destination_netuid, amount, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#

    Transfers stake from one coldkey to another in the Bittensor network.

    Parameters:
      -
    • subtensor (AsyncSubtensor) – The subtensor instance to interact with the blockchain.

    • -
    • wallet (Wallet) – The wallet containing the coldkey to authorize the transfer.

    • -
    • destination_coldkey_ss58 (str) – SS58 address of the destination coldkey.

    • -
    • hotkey_ss58 (str) – SS58 address of the hotkey associated with the stake.

    • -
    • origin_netuid (int) – Network UID of the origin subnet.

    • -
    • destination_netuid (int) – Network UID of the destination subnet.

    • -
    • amount (Balance) – The amount of stake to transfer as a Balance object.

    • -
    • wait_for_inclusion (bool) – If True, waits for transaction inclusion in a block. Defaults to True.

    • -
    • wait_for_finalization (bool) – If True, waits for transaction finalization. Defaults to False.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If -the transaction is not included in a block within that number of blocks, it will expire and be rejected. -You can think of it as an expiration date for the transaction.

    • +
    • subtensor (bittensor.core.async_subtensor.AsyncSubtensor) – The subtensor instance to interact with the blockchain.

    • +
    • wallet (bittensor_wallet.Wallet) – The wallet containing the coldkey to authorize the transfer.

    • +
    • destination_coldkey_ss58 (str) – SS58 address of the destination coldkey.

    • +
    • hotkey_ss58 (str) – SS58 address of the hotkey associated with the stake.

    • +
    • origin_netuid (int) – Network UID of the origin subnet.

    • +
    • destination_netuid (int) – Network UID of the destination subnet.

    • +
    • amount (bittensor.utils.balance.Balance) – The amount of stake to transfer as a Balance object.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    True if the transfer was successful, False otherwise.

    +

    The result object of the extrinsic execution.

    Return type:
    -

    bool

    +

    ExtrinsicResponse

    @@ -543,20 +562,20 @@

    Module Contents

    previous

    -

    bittensor.core.extrinsics.asyncex.commit_reveal

    +

    bittensor.core.extrinsics.asyncex.mev_shield

    next

    -

    bittensor.core.extrinsics.asyncex.registration

    +

    bittensor.core.extrinsics.asyncex.proxy

    diff --git a/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/proxy/index.html b/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/proxy/index.html new file mode 100644 index 0000000000..937467be5c --- /dev/null +++ b/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/proxy/index.html @@ -0,0 +1,1151 @@ + + + + + + + + + + + bittensor.core.extrinsics.asyncex.proxy — Bittensor SDK Docs documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + Ctrl+K + + + +
    + +
    + + + + + +
    +
    + + + + + + +
    + + + +
    + +
    +
    + +
    +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + + + + + + + +
    + +
    +

    bittensor.core.extrinsics.asyncex.proxy#

    +
    +

    Functions#

    +

    move_stake_extrinsic(subtensor, wallet, origin_hotkey, ...)

    move_stake_extrinsic(subtensor, wallet, origin_netuid, ...)

    Moves stake from one hotkey to another within subnets in the Bittensor network.

    swap_stake_extrinsic(subtensor, wallet, hotkey_ss58, ...)

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    add_proxy_extrinsic(subtensor, wallet, delegate_ss58, ...)

    Adds a proxy relationship.

    announce_extrinsic(subtensor, wallet, ...[, ...])

    Announces a future call that will be executed through a proxy.

    create_pure_proxy_extrinsic(subtensor, wallet, ...[, ...])

    Creates a pure proxy account.

    kill_pure_proxy_extrinsic(subtensor, wallet, ...[, ...])

    Kills (removes) a pure proxy account.

    poke_deposit_extrinsic(subtensor, wallet, *[, ...])

    Adjusts deposits made for proxies and announcements based on current values.

    proxy_announced_extrinsic(subtensor, wallet, ...[, ...])

    Executes an announced call on behalf of the real account through a proxy.

    proxy_extrinsic(subtensor, wallet, real_account_ss58, ...)

    Executes a call on behalf of the real account through a proxy.

    reject_announcement_extrinsic(subtensor, wallet, ...)

    Rejects an announcement made by a proxy delegate.

    remove_announcement_extrinsic(subtensor, wallet, ...)

    Removes an announcement made by a proxy account.

    remove_proxies_extrinsic(subtensor, wallet, *[, ...])

    Removes all proxy relationships for the account.

    remove_proxy_extrinsic(subtensor, wallet, ...[, ...])

    Removes a proxy relationship.

    +
    + +
    +

    Module Contents#

    +
    +
    +async bittensor.core.extrinsics.asyncex.proxy.add_proxy_extrinsic(subtensor, wallet, delegate_ss58, proxy_type, delay, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Adds a proxy relationship.

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.async_subtensor.AsyncSubtensor) – Subtensor instance with the connection to the chain.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet object.

    • +
    • delegate_ss58 (str) – The SS58 address of the delegate proxy account.

    • +
    • proxy_type (Union[str, bittensor.core.chain_data.proxy.ProxyType]) – The type of proxy permissions (e.g., "Any", "NonTransfer", "Governance", "Staking"). +Can be a string or ProxyType enum value. For available proxy types and their permissions, see the +documentation link in the Notes section below.

    • +
    • delay (int) – Optionally, include a delay in blocks. The number of blocks that must elapse between announcing and +executing a proxied transaction (time-lock period). A delay of 0 means the proxy can be used immediately +without announcements. A non-zero delay creates a time-lock, requiring the proxy to announce calls first, wait +for the delay period, then execute them, giving the real account time to review and reject unwanted operations.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You +can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    +
    +

    Notes

    + +
    +
    +

    Warning

    +
      +
    • The "Any" proxy type is dangerous as it grants full permissions to the proxy, including the ability to make +transfers and manage the account completely. Use with extreme caution.

    • +
    • If wait_for_inclusion=False or when block_hash is not available, the extrinsic receipt may not contain +triggered events. This means that any data that would normally be extracted from blockchain events (such as +proxy relationship details) will not be available in the response. To ensure complete event data is available, +either pass wait_for_inclusion=True when calling this function, or retrieve the data manually from the +blockchain using the extrinsic hash.

    • +
    +
    +
    + +
    +
    +async bittensor.core.extrinsics.asyncex.proxy.announce_extrinsic(subtensor, wallet, real_account_ss58, call_hash, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Announces a future call that will be executed through a proxy.

    +

    This extrinsic allows a proxy account to declare its intention to execute a specific call on behalf of a real +account after a delay period. The real account can review and either approve or reject the announcement.

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.async_subtensor.AsyncSubtensor) – Subtensor instance with the connection to the chain.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet object (should be the proxy account wallet).

    • +
    • real_account_ss58 (str) – The SS58 address of the real account on whose behalf the call will be made.

    • +
    • call_hash (str) – The hash of the call that will be executed in the future (hex string with 0x prefix).

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You +can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    +
    +

    Notes

    +
      +
    • A deposit is required when making an announcement. The deposit is returned when the announcement is +executed, rejected, or removed. The announcement can be executed after the delay period has passed.

    • +
    • See Working with Proxies: <https://docs.learnbittensor.org/keys/proxies/create-proxy>

    • +
    +
    +
    + +
    +
    +async bittensor.core.extrinsics.asyncex.proxy.create_pure_proxy_extrinsic(subtensor, wallet, proxy_type, delay, index, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Creates a pure proxy account.

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.async_subtensor.AsyncSubtensor) – Subtensor instance with the connection to the chain.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet object.

    • +
    • proxy_type (Union[str, bittensor.core.chain_data.proxy.ProxyType]) – The type of proxy permissions for the pure proxy. Can be a string or ProxyType enum value. For +available proxy types and their permissions, see the documentation link in the Notes section below.

    • +
    • delay (int) – Optionally, include a delay in blocks. The number of blocks that must elapse between announcing and +executing a proxied transaction (time-lock period). A delay of 0 means the pure proxy can be used +immediately without any announcement period. A non-zero delay creates a time-lock, requiring announcements +before execution to give the spawner time to review/reject.

    • +
    • index (int) – A salt value (u16, range 0-65535) used to generate unique pure proxy addresses. This should generally +be left as 0 unless you are creating batches of proxies. When creating multiple pure proxies with identical +parameters (same proxy_type and delay), different index values will produce different SS58 addresses. +This is not a sequential counter—you can use any unique values (e.g., 0, 100, 7, 42) in any order. The index +must be preserved as it’s required for kill_pure_proxy_extrinsic(). If creating multiple pure proxies in +a single batch transaction, each must have a unique index value.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You +can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    +
    +

    Notes

    + +
    +
    +

    Warning

    +
      +
    • The "Any" proxy type is dangerous as it grants full permissions to the proxy, including the ability to make +transfers and kill the proxy. Use with extreme caution.

    • +
    • If wait_for_inclusion=False or when block_hash is not available, the extrinsic receipt may not contain +triggered events. This means that any data that would normally be extracted from blockchain events (such as +the pure proxy account address) will not be available in the response. To ensure complete event data is available, +either pass wait_for_inclusion=True when calling this function, or retrieve the data manually from the +blockchain using the extrinsic hash.

    • +
    +
    +
    + +
    +
    +async bittensor.core.extrinsics.asyncex.proxy.kill_pure_proxy_extrinsic(subtensor, wallet, pure_proxy_ss58, spawner, proxy_type, index, height, ext_index, force_proxy_type=ProxyType.Any, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Kills (removes) a pure proxy account.

    +

    This method removes a pure proxy account that was previously created via create_pure_proxy(). The kill_pure call +must be executed through the pure proxy account itself, with the spawner acting as an “Any” proxy. This method +automatically handles this by executing the call via proxy().

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.async_subtensor.AsyncSubtensor) – Subtensor instance with the connection to the chain.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet object. The wallet.coldkey.ss58_address must be the spawner of the pure proxy (the +account that created it via create_pure_proxy_extrinsic()). The spawner must have an "Any" proxy +relationship with the pure proxy.

    • +
    • pure_proxy_ss58 (str) – The SS58 address of the pure proxy account to be killed. This is the address that was returned +in the create_pure_proxy_extrinsic() response.

    • +
    • spawner (str) – The SS58 address of the spawner account (the account that originally created the pure proxy via +create_pure_proxy_extrinsic()). This should match wallet.coldkey.ss58_address.

    • +
    • proxy_type (Union[str, bittensor.core.chain_data.proxy.ProxyType]) – The type of proxy permissions that were used when creating the pure proxy. This must match exactly +the proxy_type that was passed to create_pure_proxy_extrinsic().

    • +
    • index (int) – The salt value (u16, range 0-65535) originally used in create_pure_proxy_extrinsic() to generate +this pure proxy’s address. This value, combined with proxy_type, delay, and spawner, uniquely +identifies the pure proxy to be killed. Must match exactly the index used during creation.

    • +
    • height (int) – The block number at which the pure proxy was created. This is returned in the "PureCreated" event from +create_pure_proxy_extrinsic() and is required to identify the exact creation transaction.

    • +
    • ext_index (int) – The extrinsic index within the block at which the pure proxy was created. This is returned in the +"PureCreated" event from create_pure_proxy_extrinsic() and specifies the position of the creation +extrinsic within the block. Together with height, this uniquely identifies the creation transaction.

    • +
    • force_proxy_type (Optional[Union[str, bittensor.core.chain_data.proxy.ProxyType]]) – The proxy type relationship to use when executing kill_pure through the proxy mechanism. +Since pure proxies are keyless and cannot sign transactions, the spawner must act as a proxy for the pure +proxy to execute kill_pure. This parameter specifies which proxy type relationship between the spawner and +the pure proxy account should be used. The spawner must have a proxy relationship of this type (or "Any") +with the pure proxy account. Defaults to ProxyType.Any for maximum compatibility. If None, Substrate +will automatically select an available proxy type from the spawner’s proxy relationships.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    +
    +

    Notes

    +
      +
    • The kill_pure call must be executed through the pure proxy account itself, with the spawner acting as a proxy. +This method automatically handles this by executing the call via proxy_extrinsic(). By default, +force_proxy_type is set to ProxyType.Any, meaning the spawner must have an "Any" proxy relationship +with the pure proxy. If you pass a different force_proxy_type, the spawner must have that specific proxy +type relationship with the pure proxy.

    • +
    • See Pure Proxies: <https://docs.learnbittensor.org/keys/proxies/pure-proxies>

    • +
    +
    +
    +

    Warning

    +

    All access to this account will be lost. Any funds remaining in the pure proxy account will become permanently +inaccessible after this operation.

    +
    +
    +

    Example

    +

    # After creating a pure proxy

    +

    create_response = subtensor.proxies.create_pure_proxy(

    +
    +

    wallet=spawner_wallet,

    +

    proxy_type=ProxyType.Any, # Type of proxy permissions for the pure proxy

    +

    delay=0,

    +

    index=0,

    +
    +

    )

    +

    pure_proxy_ss58 = create_response.data[“pure_account”]

    +

    spawner = create_response.data[“spawner”]

    +

    proxy_type_used = create_response.data[“proxy_type”] # The proxy_type used during creation

    +

    height = create_response.data[“height”]

    +

    ext_index = create_response.data[“ext_index”]

    +

    # Kill the pure proxy

    +

    # Note: force_proxy_type defaults to ProxyType.Any (spawner must have Any proxy relationship)

    +

    kill_response = subtensor.proxies.kill_pure_proxy(

    +
    +

    wallet=spawner_wallet,

    +

    pure_proxy_ss58=pure_proxy_ss58,

    +

    spawner=spawner,

    +

    proxy_type=proxy_type_used, # Must match the proxy_type used during creation

    +

    index=0,

    +

    height=height,

    +

    ext_index=ext_index,

    +

    # force_proxy_type=ProxyType.Any, # Optional: defaults to ProxyType.Any

    +
    +

    )

    +
    +
    + +
    +
    +async bittensor.core.extrinsics.asyncex.proxy.poke_deposit_extrinsic(subtensor, wallet, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Adjusts deposits made for proxies and announcements based on current values.

    +

    This can be used by accounts to possibly lower their locked amount. The function automatically recalculates deposits +for both proxy relationships and announcements for the signing account. The transaction fee is waived if the deposit +amount has changed.

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.async_subtensor.AsyncSubtensor) – Subtensor instance with the connection to the chain.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet object (the account whose deposits will be adjusted).

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    +
    +

    Notes

    +
    +
    When to use:
      +
    • After runtime upgrade, if deposit constants have changed.

    • +
    • After removing proxies/announcements, to free up excess locked funds.

    • +
    • Periodically to optimize locked deposit amounts.

    • +
    +
    +
    + +
    +
    + +
    +
    +async bittensor.core.extrinsics.asyncex.proxy.proxy_announced_extrinsic(subtensor, wallet, delegate_ss58, real_account_ss58, force_proxy_type, call, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Executes an announced call on behalf of the real account through a proxy.

    +

    This extrinsic executes a call that was previously announced via announce_extrinsic(). The call must match the +call_hash that was announced, and the delay period must have passed.

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.async_subtensor.AsyncSubtensor) – Subtensor instance with the connection to the chain.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet object (should be the proxy account wallet that made the announcement).

    • +
    • delegate_ss58 (str) – The SS58 address of the delegate proxy account that made the announcement.

    • +
    • real_account_ss58 (str) – The SS58 address of the real account on whose behalf the call will be made.

    • +
    • force_proxy_type (Optional[Union[str, bittensor.core.chain_data.proxy.ProxyType]]) – The type of proxy to use for the call. If None, any proxy type can be used. Otherwise, must +match one of the allowed proxy types. Can be a string or ProxyType enum value.

    • +
    • call (scalecodec.types.GenericCall) – The inner call to be executed on behalf of the real account (must match the announced call_hash).

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You +can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    +
    +

    Notes

    + +
    +
    + +
    +
    +async bittensor.core.extrinsics.asyncex.proxy.proxy_extrinsic(subtensor, wallet, real_account_ss58, force_proxy_type, call, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Executes a call on behalf of the real account through a proxy.

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.async_subtensor.AsyncSubtensor) – Subtensor instance with the connection to the chain.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet object (should be the proxy account wallet).

    • +
    • real_account_ss58 (str) – The SS58 address of the real account on whose behalf the call is being made.

    • +
    • force_proxy_type (Optional[Union[str, bittensor.core.chain_data.proxy.ProxyType]]) – The type of proxy to use for the call. If None, any proxy type can be used. Otherwise, must +match one of the allowed proxy types. Can be a string or ProxyType enum value.

    • +
    • call (scalecodec.types.GenericCall) – The inner call to be executed on behalf of the real account.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You +can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    +
    +

    Notes

    + +
    +
    + +
    +
    +async bittensor.core.extrinsics.asyncex.proxy.reject_announcement_extrinsic(subtensor, wallet, delegate_ss58, call_hash, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Rejects an announcement made by a proxy delegate.

    +

    This extrinsic allows the real account to reject an announcement made by a proxy delegate, preventing the announced +call from being executed. Once rejected, the announcement cannot be executed and the announcement deposit is +returned to the delegate.

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.async_subtensor.AsyncSubtensor) – Subtensor instance with the connection to the chain.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet object (should be the real account wallet).

    • +
    • delegate_ss58 (str) – The SS58 address of the delegate proxy account whose announcement is being rejected.

    • +
    • call_hash (str) – The hash of the call that was announced and is now being rejected (hex string with 0x prefix).

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You +can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    +
    +

    Notes

    + +
    +
    + +
    +
    +async bittensor.core.extrinsics.asyncex.proxy.remove_announcement_extrinsic(subtensor, wallet, real_account_ss58, call_hash, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Removes an announcement made by a proxy account.

    +

    This extrinsic allows the proxy account to remove its own announcement before it is executed or rejected. This frees +up the announcement deposit.

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.async_subtensor.AsyncSubtensor) – Subtensor instance with the connection to the chain.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet object (should be the proxy account wallet that made the announcement).

    • +
    • real_account_ss58 (str) – The SS58 address of the real account on whose behalf the call was announced.

    • +
    • call_hash (str) – The hash of the call that was announced and is now being removed (hex string with 0x prefix).

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You +can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    +
    +

    Notes

    + +
    +
    + +
    +
    +async bittensor.core.extrinsics.asyncex.proxy.remove_proxies_extrinsic(subtensor, wallet, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Removes all proxy relationships for the account.

    +

    This removes all proxy relationships in a single call, which is more efficient than removing them one by one. The +deposit for all proxies will be returned.

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.async_subtensor.AsyncSubtensor) – Subtensor instance with the connection to the chain.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet object (the account whose proxies will be removed).

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    +
    +

    Notes

    + +
    +
    + +
    +
    +async bittensor.core.extrinsics.asyncex.proxy.remove_proxy_extrinsic(subtensor, wallet, delegate_ss58, proxy_type, delay, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Removes a proxy relationship.

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.async_subtensor.AsyncSubtensor) – Subtensor instance with the connection to the chain.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet object.

    • +
    • delegate_ss58 (str) – The SS58 address of the delegate proxy account to remove.

    • +
    • proxy_type (Union[str, bittensor.core.chain_data.proxy.ProxyType]) – The type of proxy permissions to remove. Can be a string or ProxyType enum value.

    • +
    • delay (int) – The announcement delay value (in blocks) for the proxy being removed. Must exactly match the delay value +that was set when the proxy was originally added. This is a required identifier for the specific proxy +relationship, not a delay before removal takes effect (removal is immediate).

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You +can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    +
    +

    Notes

    + +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + + + + + + + + + + +
    +
    + + \ No newline at end of file diff --git a/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/registration/index.html b/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/registration/index.html index 1c842d4427..662949630c 100644 --- a/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/registration/index.html +++ b/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/registration/index.html @@ -49,7 +49,7 @@ - + @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -418,22 +421,18 @@

    Contents

    bittensor.core.extrinsics.asyncex.registration#

    -

    This module provides asynchronous functionalities for registering a wallet with the subtensor network using -Proof-of-Work (PoW).

    -

    Extrinsics: -- register_extrinsic: Registers the wallet to the subnet. -- burned_register_extrinsic: Registers the wallet to chain by recycling TAO.

    +

    This module provides async functionalities for registering a wallet with the subtensor network using Proof-of-Work (PoW).

    Functions#

    - + - + - + @@ -447,135 +446,141 @@

    Functions#

    -async bittensor.core.extrinsics.asyncex.registration.burned_register_extrinsic(subtensor, wallet, netuid, wait_for_inclusion=False, wait_for_finalization=True, period=None)[source]#
    +async bittensor.core.extrinsics.asyncex.registration.burned_register_extrinsic(subtensor, wallet, netuid, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#

    Registers the wallet to chain by recycling TAO.

    Parameters:
    • subtensor (bittensor.core.async_subtensor.AsyncSubtensor) – Subtensor instance.

    • -
    • wallet (bittensor.wallet) – Bittensor wallet object.

    • -
    • netuid (int) – The netuid of the subnet to register on.

    • -
    • wait_for_inclusion (bool) – If set, waits for the extrinsic to enter a block before returning True, or -returns False if the extrinsic fails to enter the block within the timeout.

    • -
    • wait_for_finalization (bool) – If set, waits for the extrinsic to be finalized on the chain before returning -True, or returns False if the extrinsic fails to be finalized within the timeout.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If -the transaction is not included in a block within that number of blocks, it will expire and be rejected. -You can think of it as an expiration date for the transaction.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet object.

    • +
    • netuid (int) – The netuid of the subnet to register on.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    -
    Flag is True if extrinsic was finalized or included in the block. If we did not wait for

    finalization / inclusion, the response is True.

    -
    -
    -

    +

    The result object of the extrinsic execution.

    Return type:
    -

    success (bool)

    +

    ExtrinsicResponse

    -async bittensor.core.extrinsics.asyncex.registration.register_extrinsic(subtensor, wallet, netuid, wait_for_inclusion=False, wait_for_finalization=True, max_allowed_attempts=3, output_in_place=True, cuda=False, dev_id=0, tpb=256, num_processes=None, update_interval=None, log_verbose=False, period=None)[source]#
    -

    Registers the wallet to the chain.

    +async bittensor.core.extrinsics.asyncex.registration.register_extrinsic(subtensor, wallet, netuid, max_allowed_attempts=3, output_in_place=True, cuda=False, dev_id=0, tpb=256, num_processes=None, update_interval=None, log_verbose=False, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]# +

    Registers a neuron on the Bittensor subnet with provided netuid using the provided wallet.

    +

    Registration is a critical step for a neuron to become an active participant in the network, enabling it to stake, +set weights, and receive incentives.

    Parameters:
      -
    • subtensor (bittensor.core.async_subtensor.AsyncSubtensor) – initialized AsyncSubtensor object to use for chain -interactions

    • +
    • subtensor (bittensor.core.async_subtensor.AsyncSubtensor) – Subtensor object to use for chain interactions

    • wallet (bittensor_wallet.Wallet) – Bittensor wallet object.

    • -
    • netuid (int) – The netuid of the subnet to register on.

    • -
    • wait_for_inclusion (bool) – If set, waits for the extrinsic to enter a block before returning True, or returns -False if the extrinsic fails to enter the block within the timeout.

    • -
    • wait_for_finalization (bool) – If set, waits for the extrinsic to be finalized on the chain before returning -True, or returns False if the extrinsic fails to be finalized within the timeout.

    • -
    • max_allowed_attempts (int) – Maximum number of attempts to register the wallet.

    • -
    • output_in_place (bool) – Whether the POW solving should be outputted to the console as it goes along.

    • -
    • cuda (bool) – If True, the wallet should be registered using CUDA device(s).

    • -
    • dev_id (Union[list[int], int]) – The CUDA device id to use, or a list of device ids.

    • -
    • tpb (int) – The number of threads per block (CUDA).

    • -
    • num_processes (Optional[int]) – The number of processes to use to register.

    • -
    • update_interval (Optional[int]) – The number of nonces to solve between updates.

    • -
    • log_verbose (bool) – If True, the registration process will log more information.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If -the transaction is not included in a block within that number of blocks, it will expire and be rejected. -You can think of it as an expiration date for the transaction.

    • +
    • netuid (int) – The netuid of the subnet to register on.

    • +
    • max_allowed_attempts (int) – Maximum number of attempts to register the wallet.

    • +
    • output_in_place (bool) – Whether the POW solving should be outputted to the console as it goes along.

    • +
    • cuda (bool) – If True, the wallet should be registered using CUDA device(s).

    • +
    • dev_id (Union[list[int], int]) – The CUDA device id to use, or a list of device ids.

    • +
    • tpb (int) – The number of threads per block (CUDA).

    • +
    • num_processes (Optional[int]) – The number of processes to use to register.

    • +
    • update_interval (Optional[int]) – The number of nonces to solve between updates.

    • +
    • log_verbose (bool) – If True, the registration process will log more information.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    -
    True if extrinsic was finalized or included in the block. If we did not wait for finalization/inclusion, the

    response is True.

    -
    -
    -

    +

    The result object of the extrinsic execution.

    Return type:
    -

    bool

    +

    ExtrinsicResponse

    -async bittensor.core.extrinsics.asyncex.registration.register_subnet_extrinsic(subtensor, wallet, wait_for_inclusion=False, wait_for_finalization=True, period=None)[source]#
    +async bittensor.core.extrinsics.asyncex.registration.register_subnet_extrinsic(subtensor, wallet, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#

    Registers a new subnetwork on the Bittensor blockchain asynchronously.

    Parameters:
      -
    • subtensor (AsyncSubtensor) – The async subtensor interface to send the extrinsic.

    • -
    • wallet (Wallet) – The wallet to be used for subnet registration.

    • -
    • wait_for_inclusion (bool) – If set, waits for the extrinsic to enter a block before returning true.

    • -
    • wait_for_finalization (bool) – If set, waits for the extrinsic to be finalized on the chain before returning true.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If -the transaction is not included in a block within that number of blocks, it will expire and be rejected. -You can think of it as an expiration date for the transaction.

    • +
    • subtensor (bittensor.core.async_subtensor.AsyncSubtensor) – The subtensor interface to send the extrinsic.

    • +
    • wallet (bittensor_wallet.Wallet) – The wallet to be used for subnet registration.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    True if the subnet registration was successful, False otherwise.

    +

    The result object of the extrinsic execution.

    Return type:
    -

    bool

    +

    ExtrinsicResponse

    -async bittensor.core.extrinsics.asyncex.registration.set_subnet_identity_extrinsic(subtensor, wallet, netuid, subnet_name, github_repo, subnet_contact, subnet_url, discord, description, additional, wait_for_inclusion=False, wait_for_finalization=True, period=None)[source]#
    +async bittensor.core.extrinsics.asyncex.registration.set_subnet_identity_extrinsic(subtensor, wallet, netuid, subnet_name, github_repo, subnet_contact, subnet_url, logo_url, discord, description, additional, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#

    Set the identity information for a given subnet.

    Parameters:
      -
    • subtensor (AsyncSubtensor) – An instance of the Subtensor class to interact with the blockchain.

    • -
    • wallet (Wallet) – A wallet instance used to sign and submit the extrinsic.

    • -
    • netuid (int) – The unique ID for the subnet.

    • -
    • subnet_name (str) – The name of the subnet to assign the identity information.

    • -
    • github_repo (str) – URL of the GitHub repository related to the subnet.

    • -
    • subnet_contact (str) – Subnet’s contact information, e.g., email or contact link.

    • -
    • subnet_url (str) – The URL of the subnet’s primary web portal.

    • -
    • discord (str) – Discord server or contact for the subnet.

    • -
    • description (str) – A textual description of the subnet.

    • -
    • additional (str) – Any additional metadata or information related to the subnet.

    • -
    • wait_for_inclusion (bool) – Whether to wait for the extrinsic inclusion in a block (default: False).

    • -
    • wait_for_finalization (bool) – Whether to wait for the extrinsic finalization in a block (default: True).

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If -the transaction is not included in a block within that number of blocks, it will expire and be rejected. -You can think of it as an expiration date for the transaction.

    • +
    • subtensor (bittensor.core.async_subtensor.AsyncSubtensor) – An instance of the Subtensor class to interact with the blockchain.

    • +
    • wallet (bittensor_wallet.Wallet) – A wallet instance used to sign and submit the extrinsic.

    • +
    • netuid (int) – The unique ID for the subnet.

    • +
    • subnet_name (str) – The name of the subnet to assign the identity information.

    • +
    • github_repo (str) – URL of the GitHub repository related to the subnet.

    • +
    • subnet_contact (str) – Subnet’s contact information, e.g., email or contact link.

    • +
    • subnet_url (str) – The URL of the subnet’s primary web portal.

    • +
    • logo_url (str) – The URL of the logo’s primary web portal.

    • +
    • discord (str) – Discord server or contact for the subnet.

    • +
    • description (str) – A textual description of the subnet.

    • +
    • additional (str) – Any additional metadata or information related to the subnet.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    -
    A tuple where the first element indicates success or failure (True/False), and the second

    element contains a descriptive message.

    -
    -
    -

    +

    The result object of the extrinsic execution.

    Return type:
    -

    tuple[bool, str]

    +

    ExtrinsicResponse

    @@ -595,12 +600,12 @@

    Module Contents

    previous

    -

    bittensor.core.extrinsics.asyncex.move_stake

    +

    bittensor.core.extrinsics.asyncex.proxy

    bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -399,8 +402,9 @@

    Contents

    @@ -420,11 +424,14 @@

    Contents

    Functions#

  • burned_register_extrinsic(subtensor, wallet, netuid[, ...])

    burned_register_extrinsic(subtensor, wallet, netuid, *)

    Registers the wallet to chain by recycling TAO.

    register_extrinsic(subtensor, wallet, netuid[, ...])

    Registers the wallet to the chain.

    Registers a neuron on the Bittensor subnet with provided netuid using the provided wallet.

    register_subnet_extrinsic(subtensor, wallet[, ...])

    register_subnet_extrinsic(subtensor, wallet, *[, ...])

    Registers a new subnetwork on the Bittensor blockchain asynchronously.

    set_subnet_identity_extrinsic(subtensor, wallet, ...)

    - - + + + + + - - + +

    root_register_extrinsic(subtensor, wallet[, ...])

    Registers the wallet to the root network.

    claim_root_extrinsic(subtensor, wallet, netuids, *[, ...])

    Claims the root emissions for a coldkey.

    root_register_extrinsic(subtensor, wallet, *[, ...])

    Registers the neuron to the root network.

    set_root_weights_extrinsic(subtensor, wallet, netuids, ...)

    Sets the given weights and values on a chain for a wallet hotkey account.

    set_root_claim_type_extrinsic(subtensor, wallet, ...)

    Sets the root claim type for the coldkey in provided wallet.

    @@ -433,67 +440,97 @@

    Functions

    Module Contents#

    -
    -async bittensor.core.extrinsics.asyncex.root.root_register_extrinsic(subtensor, wallet, wait_for_inclusion=True, wait_for_finalization=True, period=None)[source]#
    -

    Registers the wallet to the root network.

    +
    +async bittensor.core.extrinsics.asyncex.root.claim_root_extrinsic(subtensor, wallet, netuids, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Claims the root emissions for a coldkey.

    Parameters:
      -
    • subtensor (bittensor.core.async_subtensor.AsyncSubtensor) – The AsyncSubtensor object

    • -
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet object.

    • -
    • wait_for_inclusion (bool) – If set, waits for the extrinsic to enter a block before returning True, or returns -False if the extrinsic fails to enter the block within the timeout.

    • -
    • wait_for_finalization (bool) – If set, waits for the extrinsic to be finalized on the chain before returning -True, or returns False if the extrinsic fails to be finalized within the timeout.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If -the transaction is not included in a block within that number of blocks, it will expire and be rejected. -You can think of it as an expiration date for the transaction.

    • +
    • subtensor (bittensor.core.async_subtensor.AsyncSubtensor) – Subtensor instance to interact with the blockchain.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor Wallet instance.

    • +
    • netuids (bittensor.core.types.UIDs) – The netuids to claim root emissions for.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    -
    True if extrinsic was finalized or included in the block. If we did not wait for finalization/inclusion,

    the response is True.

    -
    -
    -

    +

    The result object of the extrinsic execution.

    Return type:
    -

    bool

    +

    ExtrinsicResponse

    -
    -async bittensor.core.extrinsics.asyncex.root.set_root_weights_extrinsic(subtensor, wallet, netuids, weights, version_key=0, wait_for_inclusion=False, wait_for_finalization=False, period=None)[source]#
    -

    Sets the given weights and values on a chain for a wallet hotkey account.

    +
    +async bittensor.core.extrinsics.asyncex.root.root_register_extrinsic(subtensor, wallet, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#
    +

    Registers the neuron to the root network.

    Parameters:
      -
    • subtensor (bittensor.core.async_subtensor.AsyncSubtensor) – The AsyncSubtensor object

    • -
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet object.

    • -
    • netuids (Union[NDArray[np.int64], list[int]]) – The netuid of the subnet to set weights for.

    • -
    • weights (Union[NDArray[np.float32], list[Float]]) – Weights to set. These must be Float`s and must correspond -to the passed `netuid s.

    • -
    • version_key (int) – The version key of the validator.

    • -
    • wait_for_inclusion (bool) – If set, waits for the extrinsic to enter a block before returning True, or returns -False if the extrinsic fails to enter the block within the timeout.

    • -
    • wait_for_finalization (bool) – If set, waits for the extrinsic to be finalized on the chain before returning ` -True`, or returns False if the extrinsic fails to be finalized within the timeout.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If -the transaction is not included in a block within that number of blocks, it will expire and be rejected. -You can think of it as an expiration date for the transaction.

    • +
    • subtensor (bittensor.core.async_subtensor.AsyncSubtensor) – Subtensor instance to interact with the blockchain.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor Wallet instance.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    -
    True if extrinsic was finalized or included in the block. If we did not wait for finalization/inclusion, the

    response is True.

    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    -

    +
    + +
    +
    +async bittensor.core.extrinsics.asyncex.root.set_root_claim_type_extrinsic(subtensor, wallet, new_root_claim_type, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Sets the root claim type for the coldkey in provided wallet.

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.async_subtensor.AsyncSubtensor) – Subtensor instance to interact with the blockchain.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor Wallet instance.

    • +
    • new_root_claim_type (Literal['Swap', 'Keep'] | RootClaimType | dict) – The new root claim type to set. Can be: +- String: “Swap” or “Keep” +- RootClaimType: RootClaimType.Swap, RootClaimType.Keep +- Dict: {“KeepSubnets”: {“subnets”: [1, 2, 3]}} +- Callable: RootClaimType.KeepSubnets([1, 2, 3])

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    Return type:
    -

    bool

    +

    ExtrinsicResponse

    @@ -549,8 +586,9 @@

    Module Contents
  • Functions
  • Module Contents
  • diff --git a/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/serving/index.html b/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/serving/index.html index 48e07b3660..b3eb9ea1b8 100644 --- a/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/serving/index.html +++ b/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/serving/index.html @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -399,9 +402,7 @@

    Contents

    diff --git a/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/start_call/index.html b/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/start_call/index.html index 21c8ce3505..9d556c3e4e 100644 --- a/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/start_call/index.html +++ b/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/start_call/index.html @@ -48,7 +48,7 @@ - + @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -419,7 +422,7 @@

    Contents

    Functions#

    - + @@ -430,31 +433,32 @@

    Functions#

    -async bittensor.core.extrinsics.asyncex.start_call.start_call_extrinsic(subtensor, wallet, netuid, wait_for_inclusion=True, wait_for_finalization=False, period=None)#
    +async bittensor.core.extrinsics.asyncex.start_call.start_call_extrinsic(subtensor, wallet, netuid, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=False, wait_for_revealed_execution=True)[source]#

    Submits a start_call extrinsic to the blockchain, to trigger the start call process for a subnet (used to start a new subnet’s emission mechanism).

    Parameters:
      -
    • subtensor (Subtensor) – The Subtensor client instance used for blockchain interaction.

    • -
    • wallet (Wallet) – The wallet used to sign the extrinsic (must be unlocked).

    • -
    • netuid (int) – The UID of the target subnet for which the call is being initiated.

    • -
    • wait_for_inclusion (bool, optional) – Whether to wait for the extrinsic to be included in a block. Defaults to True.

    • -
    • wait_for_finalization (bool, optional) – Whether to wait for finalization of the extrinsic. Defaults to False.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If +

    • subtensor (bittensor.core.async_subtensor.AsyncSubtensor) – The Subtensor client instance used for blockchain interaction.

    • +
    • wallet (bittensor_wallet.Wallet) – The wallet used to sign the extrinsic (must be unlocked).

    • +
    • netuid (int) – The UID of the target subnet for which the call is being initiated.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the transaction is not included in a block within that number of blocks, it will expire and be rejected. You can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the extrinsic to be included in a block.

    • +
    • wait_for_finalization (bool) – Whether to wait for finalization of the extrinsic.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

      -
    • True and a success message if the extrinsic is successfully submitted or processed.

    • -
    • False and an error message if the submission fails or the wallet cannot be unlocked.

    • -
    -

    +

    The result object of the extrinsic execution.

    Return type:
    -

    Tuple[bool, str]

    +

    ExtrinsicResponse

    @@ -483,11 +487,11 @@

    Module Contents

    next

    -

    bittensor.core.extrinsics.asyncex.take

    +

    bittensor.core.extrinsics.asyncex.sudo

    diff --git a/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/sudo/index.html b/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/sudo/index.html new file mode 100644 index 0000000000..10f76d8353 --- /dev/null +++ b/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/sudo/index.html @@ -0,0 +1,642 @@ + + + + + + + + + + + bittensor.core.extrinsics.asyncex.sudo — Bittensor SDK Docs documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + Ctrl+K + + + +
    + +
    + + + + + +
    +
    + + + + + + +
    + + + +
    + +
    +
    + +
    +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + + + + + + + +
    + +
    +

    bittensor.core.extrinsics.asyncex.sudo#

    +
    +

    Functions#

    +

    start_call_extrinsic(subtensor, wallet, netuid[, ...])

    start_call_extrinsic(subtensor, wallet, netuid, *[, ...])

    Submits a start_call extrinsic to the blockchain, to trigger the start call process for a subnet (used to start a

    + + + + + + + + + + + +

    sudo_set_admin_freeze_window_extrinsic(subtensor, ...)

    Sets the admin freeze window length (in blocks) at the end of a tempo.

    sudo_set_mechanism_count_extrinsic(subtensor, wallet, ...)

    Sets the number of subnet mechanisms.

    sudo_set_mechanism_emission_split_extrinsic(subtensor, ...)

    Sets the emission split between mechanisms in a provided subnet.

    +
    + +
    +

    Module Contents#

    +
    +
    +async bittensor.core.extrinsics.asyncex.sudo.sudo_set_admin_freeze_window_extrinsic(subtensor, wallet, window, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True)#
    +

    Sets the admin freeze window length (in blocks) at the end of a tempo.

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.async_subtensor.AsyncSubtensor) – AsyncSubtensor instance.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor Wallet instance.

    • +
    • window (int) – The amount of blocks to freeze in the end of a tempo.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    +
    + +
    +
    +async bittensor.core.extrinsics.asyncex.sudo.sudo_set_mechanism_count_extrinsic(subtensor, wallet, netuid, mech_count, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True)#
    +

    Sets the number of subnet mechanisms.

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.async_subtensor.AsyncSubtensor) – Subtensor instance.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor Wallet instance.

    • +
    • netuid (int) – The subnet unique identifier.

    • +
    • mech_count (int) – The amount of subnet mechanism to be set.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    +
    + +
    +
    +async bittensor.core.extrinsics.asyncex.sudo.sudo_set_mechanism_emission_split_extrinsic(subtensor, wallet, netuid, maybe_split, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True)#
    +

    Sets the emission split between mechanisms in a provided subnet.

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.async_subtensor.AsyncSubtensor) – AsyncSubtensor instance.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor Wallet instance.

    • +
    • netuid (int) – The subnet unique identifier.

    • +
    • maybe_split (bittensor.core.types.Weights) – List of emission weights (positive integers) for each subnet mechanism.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    +
    +

    Note

    +

    The maybe_split list defines the relative emission share for each subnet mechanism. +Its length must match the number of active mechanisms in the subnet or be shorter, but not equal to zero. For +example, [3, 1, 1] distributes emissions in a 3:1:1 ratio across subnet mechanisms 0, 1, and 2. Each mechanism’s +emission share is calculated as: share[i] = maybe_split[i] / sum(maybe_split)

    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + + + + + + + + + + +
    +
    + + \ No newline at end of file diff --git a/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/take/index.html b/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/take/index.html index 0aae9d465d..187c881a32 100644 --- a/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/take/index.html +++ b/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/take/index.html @@ -49,7 +49,7 @@ - + @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -399,8 +402,7 @@

    Contents

    @@ -420,10 +422,7 @@

    Contents

    Functions#

    - - - - + @@ -433,57 +432,34 @@

    Functions

    Module Contents#

    -
    -async bittensor.core.extrinsics.asyncex.take.decrease_take_extrinsic(subtensor, wallet, hotkey_ss58, take, wait_for_inclusion=True, wait_for_finalization=True, raise_error=False, period=None)#
    -

    Sets the delegate ‘take’ percentage for a neuron identified by its hotkey.

    -
    -
    Parameters:
    -
      -
    • subtensor (Subtensor) – Blockchain connection.

    • -
    • wallet (Wallet) – The wallet to sign the extrinsic.

    • -
    • hotkey_ss58 (str) – SS58 address of the hotkey to set take for.

    • -
    • take (int) – The percentage of rewards that the delegate claims from nominators.

    • -
    • wait_for_inclusion (bool, optional) – Wait for inclusion before returning. Defaults to True.

    • -
    • wait_for_finalization (bool, optional) – Wait for finalization before returning. Defaults to True.

    • -
    • raise_error (bool, optional) – Raise error on failure. Defaults to False.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If -the transaction is not included in a block within that number of blocks, it will expire and be rejected. -You can think of it as an expiration date for the transaction.

    • -
    -
    -
    Returns:
    -

    Success flag and status message.

    -
    -
    Return type:
    -

    tuple[bool, str]

    -
    -
    -
    - -
    -
    -async bittensor.core.extrinsics.asyncex.take.increase_take_extrinsic(subtensor, wallet, hotkey_ss58, take, wait_for_inclusion=True, wait_for_finalization=True, raise_error=False, period=None)#
    +
    +async bittensor.core.extrinsics.asyncex.take.set_take_extrinsic(subtensor, wallet, hotkey_ss58, take, action, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#

    Sets the delegate ‘take’ percentage for a neuron identified by its hotkey.

    Parameters:
      -
    • subtensor (Subtensor) – Blockchain connection.

    • -
    • wallet (Wallet) – The wallet to sign the extrinsic.

    • -
    • hotkey_ss58 (str) – SS58 address of the hotkey to set take for.

    • -
    • take (int) – The percentage of rewards that the delegate claims from nominators.

    • -
    • wait_for_inclusion (bool, optional) – Wait for inclusion before returning. Defaults to True.

    • -
    • wait_for_finalization (bool, optional) – Wait for finalization before returning. Defaults to True.

    • -
    • raise_error (bool, optional) – Raise error on failure. Defaults to False.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If -the transaction is not included in a block within that number of blocks, it will expire and be rejected. -You can think of it as an expiration date for the transaction.

    • +
    • subtensor (bittensor.core.async_subtensor.AsyncSubtensor) – The Subtensor instance.

    • +
    • wallet (bittensor_wallet.bittensor_wallet.Wallet) – The wallet to sign the extrinsic.

    • +
    • hotkey_ss58 (str) – SS58 address of the hotkey to set take for.

    • +
    • take (int) – The percentage of rewards that the delegate claims from nominators.

    • +
    • action (Literal['increase_take', 'decrease_take']) – The call function to use to set the take. Can be either “increase_take” or “decrease_take”.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    Success flag and status message.

    +

    The result object of the extrinsic execution.

    Return type:
    -

    tuple[bool, str]

    +

    ExtrinsicResponse

    @@ -503,12 +479,12 @@

    Module Contents

    previous

    -

    bittensor.core.extrinsics.asyncex.start_call

    +

    bittensor.core.extrinsics.asyncex.sudo

    Module Contents
  • Functions
  • Module Contents
  • diff --git a/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/transfer/index.html b/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/transfer/index.html index eb63c1584d..90c3ce7298 100644 --- a/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/transfer/index.html +++ b/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/transfer/index.html @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -419,7 +422,7 @@

    Contents

    Functions#

  • decrease_take_extrinsic(subtensor, wallet, ...[, ...])

    Sets the delegate 'take' percentage for a neuron identified by its hotkey.

    increase_take_extrinsic(subtensor, wallet, ...[, ...])

    set_take_extrinsic(subtensor, wallet, hotkey_ss58, ...)

    Sets the delegate 'take' percentage for a neuron identified by its hotkey.

    - + @@ -430,35 +433,34 @@

    Functions#

    -async bittensor.core.extrinsics.asyncex.transfer.transfer_extrinsic(subtensor, wallet, dest, amount, transfer_all=False, wait_for_inclusion=True, wait_for_finalization=False, keep_alive=True, period=None)[source]#
    +async bittensor.core.extrinsics.asyncex.transfer.transfer_extrinsic(subtensor, wallet, destination_ss58, amount, keep_alive=True, transfer_all=False, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#

    Transfers funds from this wallet to the destination public key address.

    Parameters:
      -
    • subtensor (bittensor.core.async_subtensor.AsyncSubtensor) – initialized AsyncSubtensor object used for transfer

    • -
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet object to make transfer from.

    • -
    • dest (str) – Destination public key address (ss58_address or ed25519) of recipient.

    • -
    • amount (bittensor.utils.balance.Balance) – Amount to stake as Bittensor balance.

    • -
    • transfer_all (bool) – Whether to transfer all funds from this wallet to the destination address.

    • -
    • wait_for_inclusion (bool) – If set, waits for the extrinsic to enter a block before returning True, or returns -False if the extrinsic fails to enter the block within the timeout.

    • -
    • wait_for_finalization (bool) – If set, waits for the extrinsic to be finalized on the chain before returning -True, or returns False if the extrinsic fails to be finalized within the timeout.

    • -
    • keep_alive (bool) – If set, keeps the account alive by keeping the balance above the existential deposit.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. -If the transaction is not included in a block within that number of blocks, it will expire and be rejected. -You can think of it as an expiration date for the transaction.

    • +
    • subtensor (bittensor.core.async_subtensor.AsyncSubtensor) – The Subtensor instance.

    • +
    • wallet (bittensor_wallet.Wallet) – The wallet to sign the extrinsic.

    • +
    • destination_ss58 (str) – Destination public key address (ss58_address or ed25519) of recipient.

    • +
    • amount (Optional[bittensor.utils.balance.Balance]) – Amount to stake as Bittensor balance. None if transferring all.

    • +
    • transfer_all (bool) – Whether to transfer all funds from this wallet to the destination address.

    • +
    • keep_alive (bool) – If set, keeps the account alive by keeping the balance above the existential deposit.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    -
    Flag is True if extrinsic was finalized or included in the block. If we did not wait for

    finalization / inclusion, the response is True, regardless of its inclusion.

    -
    -
    -

    +

    The result object of the extrinsic execution.

    Return type:
    -

    success (bool)

    +

    ExtrinsicResponse

    diff --git a/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/unstaking/index.html b/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/unstaking/index.html index ee2c8f0e20..ec3b41aa9f 100644 --- a/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/unstaking/index.html +++ b/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/unstaking/index.html @@ -48,7 +48,7 @@ - + @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -399,6 +402,7 @@

    Contents

  • transfer_extrinsic(subtensor, wallet, dest, amount[, ...])

    transfer_extrinsic(subtensor, wallet, ...[, ...])

    Transfers funds from this wallet to the destination public key address.

    - + + + + - + @@ -432,76 +439,123 @@

    Functions

    Module Contents#

    +
    +
    +async bittensor.core.extrinsics.asyncex.unstaking.unstake_all_extrinsic(subtensor, wallet, netuid, hotkey_ss58, rate_tolerance=0.005, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#
    +

    Unstakes all TAO/Alpha associated with a hotkey from the specified subnets on the Bittensor network.

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.async_subtensor.AsyncSubtensor) – Subtensor instance.

    • +
    • wallet (bittensor_wallet.Wallet) – The wallet of the stake owner.

    • +
    • netuid (int) – The unique identifier of the subnet.

    • +
    • hotkey_ss58 (str) – The SS58 address of the hotkey to unstake from.

    • +
    • rate_tolerance (Optional[float]) – The maximum allowed price change ratio when unstaking. For example, 0.005 = 0.5% maximum +price decrease. If not passed (None), then unstaking goes without price limit.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    +
    +
    -async bittensor.core.extrinsics.asyncex.unstaking.unstake_extrinsic(subtensor, wallet, hotkey_ss58=None, netuid=None, amount=None, wait_for_inclusion=True, wait_for_finalization=False, safe_staking=False, allow_partial_stake=False, rate_tolerance=0.005, period=None)[source]#
    +async bittensor.core.extrinsics.asyncex.unstaking.unstake_extrinsic(subtensor, wallet, netuid, hotkey_ss58, amount, allow_partial_stake=False, rate_tolerance=0.005, safe_unstaking=False, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#

    Removes stake into the wallet coldkey from the specified hotkey uid.

    Parameters:
      -
    • subtensor (bittensor.core.async_subtensor.AsyncSubtensor) – AsyncSubtensor instance.

    • +
    • subtensor (bittensor.core.async_subtensor.AsyncSubtensor) – Subtensor instance.

    • wallet (bittensor_wallet.Wallet) – Bittensor wallet object.

    • -
    • hotkey_ss58 (Optional[str]) – The ss58 address of the hotkey to unstake from. By default, the wallet hotkey -is used.

    • -
    • netuid (Optional[int]) – The subnet uid to unstake from.

    • -
    • amount (Union[Balance, float]) – Amount to stake as Bittensor balance, or float interpreted as Tao.

    • -
    • wait_for_inclusion (bool) – If set, waits for the extrinsic to enter a block before returning True, or -returns False if the extrinsic fails to enter the block within the timeout.

    • -
    • wait_for_finalization (bool) – If set, waits for the extrinsic to be finalized on the chain before returning -True, or returns False if the extrinsic fails to be finalized within the timeout.

    • -
    • safe_staking (bool) – If true, enables price safety checks

    • -
    • allow_partial_stake (bool) – If true, allows partial unstaking if price tolerance exceeded

    • -
    • rate_tolerance (float) – Maximum allowed price decrease percentage (0.005 = 0.5%)

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. -If the transaction is not included in a block within that number of blocks, it will expire and be rejected. -You can think of it as an expiration date for the transaction.

    • +
    • netuid (int) – Subnet unique id.

    • +
    • hotkey_ss58 (str) – The ss58 address of the hotkey to unstake from.

    • +
    • amount (bittensor.utils.balance.Balance) – Amount to stake as Bittensor balance.

    • +
    • allow_partial_stake (bool) – If true, allows partial unstaking if price tolerance exceeded.

    • +
    • safe_unstaking (bool) – If true, enables price safety checks.

    • +
    • rate_tolerance (float) – Maximum allowed price decrease percentage (0.005 = 0.5%).

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    -
    Flag is True if extrinsic was finalized or included in the block. If we did not wait for

    finalization / inclusion, the response is True.

    -
    -
    -

    +

    The result object of the extrinsic execution.

    Return type:
    -

    success (bool)

    +

    ExtrinsicResponse

    -async bittensor.core.extrinsics.asyncex.unstaking.unstake_multiple_extrinsic(subtensor, wallet, hotkey_ss58s, netuids, amounts=None, wait_for_inclusion=True, wait_for_finalization=False, period=None)[source]#
    +async bittensor.core.extrinsics.asyncex.unstaking.unstake_multiple_extrinsic(subtensor, wallet, netuids, hotkey_ss58s, amounts=None, rate_tolerance=0.05, unstake_all=False, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#

    Removes stake from each hotkey_ss58 in the list, using each amount, to a common coldkey.

    Parameters:
      -
    • subtensor (bittensor.core.subtensor.Subtensor) – Subtensor instance.

    • +
    • subtensor (bittensor.core.async_subtensor.AsyncSubtensor) – AsyncSubtensor instance.

    • wallet (bittensor_wallet.Wallet) – The wallet with the coldkey to unstake to.

    • -
    • hotkey_ss58s (List[str]) – List of hotkeys to unstake from.

    • -
    • netuids (List[int]) – List of netuids to unstake from.

    • -
    • amounts (List[Union[Balance, float]]) – List of amounts to unstake. If None, unstake all.

    • -
    • wait_for_inclusion (bool) – If set, waits for the extrinsic to enter a block before returning True, or -returns False if the extrinsic fails to enter the block within the timeout.

    • -
    • wait_for_finalization (bool) – If set, waits for the extrinsic to be finalized on the chain before returning -True, or returns False if the extrinsic fails to be finalized within the timeout.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. -If the transaction is not included in a block within that number of blocks, it will expire and be rejected. -You can think of it as an expiration date for the transaction.

    • +
    • netuids (bittensor.core.types.UIDs) – List of subnets unique IDs to unstake from.

    • +
    • hotkey_ss58s (list[str]) – List of hotkeys to unstake from.

    • +
    • amounts (Optional[list[bittensor.utils.balance.Balance]]) – List of amounts to unstake. If None, unstake all.

    • +
    • rate_tolerance (Optional[float]) – Maximum allowed price decrease percentage (0.005 = 0.5%).

    • +
    • unstake_all (bool) – If true, unstakes all tokens.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    -
    Flag is True if extrinsic was finalized or included in the block. Flag is True if any

    wallet was unstaked. If we did not wait for finalization / inclusion, the response is True.

    -
    -
    -

    +

    The result object of the extrinsic execution.

    Return type:
    -

    success (bool)

    +

    ExtrinsicResponse

    +
    +

    Note

    +

    The data field in the returned ExtrinsicResponse contains the results of each individual internal +unstake_extrinsic or unstake_all_extrinsic call. Each entry maps a tuple key (idx, hotkey_ss58, netuid) to +either:

    +
    +
      +
    • the corresponding ExtrinsicResponse object if the unstaking attempt was executed, or

    • +
    • None if the unstaking was skipped due to failing validation (e.g., wrong balance, zero amount, etc.).

    • +
    +
    +

    In the key, idx is the index the unstake attempt. This allows the caller to inspect which specific operations +were attempted and which were not.

    +
    @@ -528,11 +582,11 @@

    Module Contents

    next

    -

    bittensor.core.extrinsics.asyncex.weights

    +

    bittensor.core.extrinsics.asyncex.utils

    @@ -555,6 +609,7 @@

    Module Contents
  • Functions
  • Module Contents diff --git a/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/commit_reveal/index.html b/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/utils/index.html similarity index 73% rename from static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/commit_reveal/index.html rename to static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/utils/index.html index b65c6c17c3..9f65d7a79d 100644 --- a/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/commit_reveal/index.html +++ b/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/utils/index.html @@ -8,7 +8,7 @@ - bittensor.core.extrinsics.asyncex.commit_reveal — Bittensor SDK Docs documentation + bittensor.core.extrinsics.asyncex.utils — Bittensor SDK Docs documentation @@ -45,11 +45,11 @@ - + - - + + @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -264,7 +267,7 @@ -
  • -

    bittensor.core.extrinsics.asyncex.commit_reveal

    +

    bittensor.core.extrinsics.asyncex.utils

    @@ -399,7 +402,7 @@

    Contents

    @@ -413,15 +416,14 @@

    Contents

    -
    -

    bittensor.core.extrinsics.asyncex.commit_reveal#

    -

    This module provides async functionality for commit reveal in the Bittensor network.

    +
    +

    bittensor.core.extrinsics.asyncex.utils#

    Functions#

  • unstake_extrinsic(subtensor, wallet[, hotkey_ss58, ...])

    unstake_all_extrinsic(subtensor, wallet, netuid, ...)

    Unstakes all TAO/Alpha associated with a hotkey from the specified subnets on the Bittensor network.

    unstake_extrinsic(subtensor, wallet, netuid, ...[, ...])

    Removes stake into the wallet coldkey from the specified hotkey uid.

    unstake_multiple_extrinsic(subtensor, wallet, ...[, ...])

    unstake_multiple_extrinsic(subtensor, wallet, netuids, ...)

    Removes stake from each hotkey_ss58 in the list, using each amount, to a common coldkey.

    - - + +

    commit_reveal_v3_extrinsic(subtensor, wallet, netuid, ...)

    Commits and reveals weights for a given subtensor and wallet with provided uids and weights.

    sudo_call_extrinsic(subtensor, wallet, call_function, ...)

    Execute a sudo call extrinsic.

    @@ -430,35 +432,34 @@

    Functions

    Module Contents#

    -
    -async bittensor.core.extrinsics.asyncex.commit_reveal.commit_reveal_v3_extrinsic(subtensor, wallet, netuid, uids, weights, version_key=version_as_int, wait_for_inclusion=False, wait_for_finalization=False, block_time=12.0, period=None)[source]#
    -

    Commits and reveals weights for a given subtensor and wallet with provided uids and weights.

    +
    +async bittensor.core.extrinsics.asyncex.utils.sudo_call_extrinsic(subtensor, wallet, call_function, call_params, call_module='AdminUtils', sign_with='coldkey', use_nonce=False, nonce_key='hotkey', period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, root_call=False)#
    +

    Execute a sudo call extrinsic.

    Parameters:
      -
    • subtensor (bittensor.core.async_subtensor.AsyncSubtensor) – The AsyncSubtensor instance.

    • -
    • wallet (bittensor_wallet.Wallet) – The wallet to use for committing and revealing.

    • -
    • netuid (int) – The id of the network.

    • -
    • uids (Union[numpy.typing.NDArray[numpy.int64], bittensor.utils.registration.torch.LongTensor, list]) – The uids to commit.

    • -
    • weights (Union[numpy.typing.NDArray[numpy.float32], bittensor.utils.registration.torch.FloatTensor, list]) – The weights associated with the uids.

    • -
    • version_key (int) – The version key to use for committing and revealing. Default is version_as_int.

    • -
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction. Default is False.

    • -
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction. Default is False.

    • -
    • block_time (float) – The number of seconds for block duration. Default is 12.0 seconds.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If -the transaction is not included in a block within that number of blocks, it will expire and be rejected. -You can think of it as an expiration date for the transaction.

    • +
    • subtensor (bittensor.core.async_subtensor.AsyncSubtensor) – AsyncSubtensor instance.

    • +
    • wallet (bittensor_wallet.Wallet) – The wallet instance.

    • +
    • call_function (str) – The call function to execute.

    • +
    • call_params (dict) – The call parameters.

    • +
    • call_module (str) – The call module.

    • +
    • sign_with (str) – The keypair to sign the extrinsic with.

    • +
    • use_nonce (bool) – Whether to use a nonce.

    • +
    • nonce_key (str) – The key to use for the nonce.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • root_call (bool) – False, if the subnet owner makes a call.

    Returns:
    -

    -
    A tuple where the first element is a boolean indicating success or failure, and the second

    element is a message associated with the result

    -
    -
    -

    +

    The result object of the extrinsic execution.

    Return type:
    -

    tuple[bool, str]

    +

    ExtrinsicResponse

    @@ -478,20 +479,20 @@

    Module Contents

    previous

    -

    bittensor.core.extrinsics.asyncex

    +

    bittensor.core.extrinsics.asyncex.unstaking

    next

    -

    bittensor.core.extrinsics.asyncex.move_stake

    +

    bittensor.core.extrinsics.asyncex.weights

    @@ -514,7 +515,7 @@

    Module Contents
  • Functions
  • Module Contents
  • diff --git a/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/weights/index.html b/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/weights/index.html index a2f3a1ef3d..750986c8f0 100644 --- a/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/weights/index.html +++ b/static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/weights/index.html @@ -48,8 +48,8 @@ - - + + @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -399,6 +402,7 @@

    Contents

  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -416,19 +419,24 @@

    Submodules diff --git a/static/python-api/html/autoapi/bittensor/core/extrinsics/liquidity/index.html b/static/python-api/html/autoapi/bittensor/core/extrinsics/liquidity/index.html new file mode 100644 index 0000000000..fa5dda4af0 --- /dev/null +++ b/static/python-api/html/autoapi/bittensor/core/extrinsics/liquidity/index.html @@ -0,0 +1,697 @@ + + + + + + + + + + + bittensor.core.extrinsics.liquidity — Bittensor SDK Docs documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + +
    + +
    + + + + + +
    +
    + + + + + + +
    + + + +
    + +
    +
    + +
    +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + + + + + + + +
    + +
    +

    bittensor.core.extrinsics.liquidity#

    +
    +

    Functions#

    +
    + + + + + + + + + + + + + + +

    add_liquidity_extrinsic(subtensor, wallet, netuid, ...)

    Adds liquidity to the specified price range.

    modify_liquidity_extrinsic(subtensor, wallet, netuid, ...)

    Modifies liquidity in liquidity position by adding or removing liquidity from it.

    remove_liquidity_extrinsic(subtensor, wallet, netuid, ...)

    Remove liquidity and credit balances back to wallet's hotkey stake.

    toggle_user_liquidity_extrinsic(subtensor, wallet, ...)

    Allow to toggle user liquidity for specified subnet.

    +
    +
    +
    +

    Module Contents#

    +
    +
    +bittensor.core.extrinsics.liquidity.add_liquidity_extrinsic(subtensor, wallet, netuid, liquidity, price_low, price_high, hotkey_ss58=None, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#
    +

    Adds liquidity to the specified price range.

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.subtensor.Subtensor) – The Subtensor client instance used for blockchain interaction.

    • +
    • wallet (bittensor_wallet.Wallet) – The wallet used to sign the extrinsic (must be unlocked).

    • +
    • netuid (int) – The UID of the target subnet for which the call is being initiated.

    • +
    • liquidity (bittensor.utils.balance.Balance) – The amount of liquidity to be added.

    • +
    • price_low (bittensor.utils.balance.Balance) – The lower bound of the price tick range.

    • +
    • price_high (bittensor.utils.balance.Balance) – The upper bound of the price tick range.

    • +
    • hotkey_ss58 (Optional[str]) – The hotkey with staked TAO in Alpha. If not passed then the wallet hotkey is used.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    +

    Note: Adding is allowed even when user liquidity is enabled in specified subnet. Call +toggle_user_liquidity_extrinsic to enable/disable user liquidity.

    +
    + +
    +
    +bittensor.core.extrinsics.liquidity.modify_liquidity_extrinsic(subtensor, wallet, netuid, position_id, liquidity_delta, hotkey_ss58=None, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#
    +

    Modifies liquidity in liquidity position by adding or removing liquidity from it.

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.subtensor.Subtensor) – The Subtensor client instance used for blockchain interaction.

    • +
    • wallet (bittensor_wallet.Wallet) – The wallet used to sign the extrinsic (must be unlocked).

    • +
    • netuid (int) – The UID of the target subnet for which the call is being initiated.

    • +
    • position_id (int) – The id of the position record in the pool.

    • +
    • liquidity_delta (bittensor.utils.balance.Balance) – The amount of liquidity to be added or removed (add if positive or remove if negative).

    • +
    • hotkey_ss58 (Optional[str]) – The hotkey with staked TAO in Alpha. If not passed then the wallet hotkey is used.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    +

    Note: Modifying is allowed even when user liquidity is enabled in specified subnet. Call +toggle_user_liquidity_extrinsic to enable/disable user liquidity.

    +
    + +
    +
    +bittensor.core.extrinsics.liquidity.remove_liquidity_extrinsic(subtensor, wallet, netuid, position_id, hotkey_ss58=None, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#
    +

    Remove liquidity and credit balances back to wallet’s hotkey stake.

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.subtensor.Subtensor) – The Subtensor client instance used for blockchain interaction.

    • +
    • wallet (bittensor_wallet.Wallet) – The wallet used to sign the extrinsic (must be unlocked).

    • +
    • netuid (int) – The UID of the target subnet for which the call is being initiated.

    • +
    • position_id (int) – The id of the position record in the pool.

    • +
    • hotkey_ss58 (Optional[str]) – The hotkey with staked TAO in Alpha. If not passed then the wallet hotkey is used.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    +

    Note: Adding is allowed even when user liquidity is enabled in specified subnet. Call +toggle_user_liquidity_extrinsic to enable/disable user liquidity.

    +
    + +
    +
    +bittensor.core.extrinsics.liquidity.toggle_user_liquidity_extrinsic(subtensor, wallet, netuid, enable, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#
    +

    Allow to toggle user liquidity for specified subnet.

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.subtensor.Subtensor) – The Subtensor client instance used for blockchain interaction.

    • +
    • wallet (bittensor_wallet.Wallet) – The wallet used to sign the extrinsic (must be unlocked).

    • +
    • netuid (int) – The UID of the target subnet for which the call is being initiated.

    • +
    • enable (bool) – Boolean indicating whether to enable user liquidity.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    +
    + +
    +
    + + +
    + + + + + + + + +
    + + + + + + + +
    +
    + + +
    + + +
    +
    +
    + + + + + +
    +
    + + \ No newline at end of file diff --git a/static/python-api/html/autoapi/bittensor/core/extrinsics/commit_weights/index.html b/static/python-api/html/autoapi/bittensor/core/extrinsics/mev_shield/index.html similarity index 63% rename from static/python-api/html/autoapi/bittensor/core/extrinsics/commit_weights/index.html rename to static/python-api/html/autoapi/bittensor/core/extrinsics/mev_shield/index.html index 5687a99cd8..9b392f86c1 100644 --- a/static/python-api/html/autoapi/bittensor/core/extrinsics/commit_weights/index.html +++ b/static/python-api/html/autoapi/bittensor/core/extrinsics/mev_shield/index.html @@ -8,7 +8,7 @@ - bittensor.core.extrinsics.commit_weights — Bittensor SDK Docs documentation + bittensor.core.extrinsics.mev_shield — Bittensor SDK Docs documentation @@ -45,11 +45,11 @@ - + - + @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -264,7 +267,7 @@ -
  • -

    bittensor.core.extrinsics.commit_weights

    +

    bittensor.core.extrinsics.mev_shield

    @@ -399,8 +402,8 @@

    Contents

    @@ -414,18 +417,18 @@

    Contents

    -
    -

    bittensor.core.extrinsics.commit_weights#

    -

    Module sync commit weights and reveal weights extrinsic.

    +
    +

    bittensor.core.extrinsics.mev_shield#

    +

    Module provides sync MEV Shield extrinsics.

    Functions#

    - - + + - - + +

    commit_weights_extrinsic(subtensor, wallet, netuid, ...)

    Commits a hash of the neuron's weights to the Bittensor blockchain using the provided wallet.

    submit_encrypted_extrinsic(subtensor, wallet, call[, ...])

    Submits an encrypted extrinsic to the MEV Shield pallet.

    reveal_weights_extrinsic(subtensor, wallet, netuid, ...)

    Reveals the weights for a specific subnet on the Bittensor blockchain using the provided wallet.

    wait_for_extrinsic_by_hash(subtensor, extrinsic_hash, ...)

    Wait for the result of a MeV Shield encrypted extrinsic.

    @@ -434,70 +437,80 @@

    Functions

    Module Contents#

    -
    -bittensor.core.extrinsics.commit_weights.commit_weights_extrinsic(subtensor, wallet, netuid, commit_hash, wait_for_inclusion=False, wait_for_finalization=False, period=None)[source]#
    -

    Commits a hash of the neuron’s weights to the Bittensor blockchain using the provided wallet. -This function is a wrapper around the do_commit_weights method.

    +
    +bittensor.core.extrinsics.mev_shield.submit_encrypted_extrinsic(subtensor, wallet, call, sign_with='coldkey', *, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=False, wait_for_revealed_execution=True, blocks_for_revealed_execution=3)#
    +

    Submits an encrypted extrinsic to the MEV Shield pallet.

    +

    This function encrypts a call using ML-KEM-768 + XChaCha20Poly1305 and submits it to the MevShield pallet. The +extrinsic remains encrypted in the transaction pool until it is included in a block and decrypted by validators.

    Parameters:
      -
    • subtensor (bittensor.core.subtensor.Subtensor) – The subtensor instance used for blockchain interaction.

    • -
    • wallet (bittensor_wallet.Wallet) – The wallet associated with the neuron committing the weights.

    • -
    • netuid (int) – The unique identifier of the subnet.

    • -
    • commit_hash (str) – The hash of the neuron’s weights to be committed.

    • -
    • wait_for_inclusion (bool) – Waits for the transaction to be included in a block.

    • -
    • wait_for_finalization (bool) – Waits for the transaction to be finalized on the blockchain.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If -the transaction is not included in a block within that number of blocks, it will expire and be rejected. -You can think of it as an expiration date for the transaction.

    • +
    • subtensor (bittensor.core.subtensor.Subtensor) – The Subtensor client instance used for blockchain interaction.

    • +
    • wallet (bittensor_wallet.Wallet) – The wallet used to sign the extrinsic (must be unlocked, coldkey will be used for signing).

    • +
    • call (scalecodec.types.GenericCall) – The GenericCall object to encrypt and submit.

    • +
    • sign_with (str) – The keypair to use for signing the inner call/extrinsic. Can be either “coldkey” or “hotkey”.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the executed event, indicating that validators have +successfully decrypted and executed the inner call. If True, the function will poll subsequent blocks for +the event matching this submission’s commitment.

    • +
    • blocks_for_revealed_execution (int) – Maximum number of blocks to poll for the executed event after inclusion. +The function checks blocks from start_block + 1 to start_block + blocks_for_revealed_execution. Returns +immediately if the event is found before the block limit is reached.

    Returns:
    -

    True if the weight commitment is successful, False otherwise. -msg is a string value describing the success or potential error.

    +

    The result object of the extrinsic execution.

    Return type:
    -

    tuple[bool, str]

    +

    ExtrinsicResponse

    -
    -
    -
    This function provides a user-friendly interface for committing weights to the Bittensor blockchain, ensuring proper

    error handling and user interaction when required.

    +
    Raises:
    +
      +
    • ValueError – If NextKey is not available in storage or encryption fails.

    • +
    • SubstrateRequestException – If the extrinsic fails to be submitted or included.

    • +
    +
    +

    Note

    +

    The encryption uses the public key from NextKey storage, which rotates every block. The payload structure is: +payload_core = signer_bytes (32B) + key_hash (32B Blake2-256 hash of NextKey) + SCALE(call) +plaintext = payload_core + b”x01” + signature (64B for sr25519) +commitment = blake2_256(payload_core)

    +

    The key_hash binds the transaction to the key epoch at submission time and replaces nonce-based replay +protection.

    +
    -
    -bittensor.core.extrinsics.commit_weights.reveal_weights_extrinsic(subtensor, wallet, netuid, uids, weights, salt, version_key, wait_for_inclusion=False, wait_for_finalization=False, period=None)[source]#
    -

    Reveals the weights for a specific subnet on the Bittensor blockchain using the provided wallet. -This function is a wrapper around the _do_reveal_weights method.

    +
    +bittensor.core.extrinsics.mev_shield.wait_for_extrinsic_by_hash(subtensor, extrinsic_hash, shield_id, submit_block_hash, timeout_blocks=3)#
    +

    Wait for the result of a MeV Shield encrypted extrinsic.

    +

    After submit_encrypted succeeds, the block author will decrypt and submit the inner extrinsic directly. This +function polls subsequent blocks looking for either: +- an extrinsic matching the provided hash (success) +OR +- a markDecryptionFailed extrinsic with matching shield ID (failure)

    Parameters:
      -
    • subtensor (bittensor.core.subtensor.Subtensor) – The subtensor instance used for blockchain interaction.

    • -
    • wallet (bittensor_wallet.Wallet) – The wallet associated with the neuron revealing the weights.

    • -
    • netuid (int) – The unique identifier of the subnet.

    • -
    • uids (list[int]) – List of neuron UIDs for which weights are being revealed.

    • -
    • weights (list[int]) – List of weight values corresponding to each UID.

    • -
    • salt (list[int]) – List of salt values corresponding to the hash function.

    • -
    • version_key (int) – Version key for compatibility with the network.

    • -
    • wait_for_inclusion (bool) – Waits for the transaction to be included in a block.

    • -
    • wait_for_finalization (bool) – Waits for the transaction to be finalized on the blockchain.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If -the transaction is not included in a block within that number of blocks, it will expire and be rejected. -You can think of it as an expiration date for the transaction.

    • +
    • subtensor (bittensor.core.subtensor.Subtensor) – SubtensorInterface instance.

    • +
    • extrinsic_hash (str) – The hash of the inner extrinsic to find.

    • +
    • shield_id (str) – The wrapper ID from EncryptedSubmitted event (for detecting decryption failures).

    • +
    • submit_block_hash (str) – Block hash where submit_encrypted was included.

    • +
    • timeout_blocks (int) – Max blocks to wait (default 3).

    Returns:
    -

    True if the weight commitment is successful, False otherwise. -msg is a string value describing the success or potential error.

    +

    Optional ExtrinsicReceipt.

    Return type:
    -

    tuple[bool, str]

    -
    -
    -
    -
    This function provides a user-friendly interface for revealing weights on the Bittensor blockchain, ensuring proper

    error handling and user interaction when required.

    +

    Optional[async_substrate_interface.ExtrinsicReceipt]

    @@ -517,12 +530,12 @@

    Module Contents

    previous

    -

    bittensor.core.extrinsics.commit_reveal

    +

    bittensor.core.extrinsics.liquidity

    Module Contents
  • Functions
  • Module Contents
  • diff --git a/static/python-api/html/autoapi/bittensor/core/extrinsics/move_stake/index.html b/static/python-api/html/autoapi/bittensor/core/extrinsics/move_stake/index.html index 8c88d69b71..6dcb8a4366 100644 --- a/static/python-api/html/autoapi/bittensor/core/extrinsics/move_stake/index.html +++ b/static/python-api/html/autoapi/bittensor/core/extrinsics/move_stake/index.html @@ -48,8 +48,8 @@ - - + + @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -421,7 +424,7 @@

    Contents

    Functions#

    - + @@ -438,92 +441,108 @@

    Functions#

    -bittensor.core.extrinsics.move_stake.move_stake_extrinsic(subtensor, wallet, origin_hotkey, origin_netuid, destination_hotkey, destination_netuid, amount=None, wait_for_inclusion=True, wait_for_finalization=False, period=None)[source]#
    +bittensor.core.extrinsics.move_stake.move_stake_extrinsic(subtensor, wallet, origin_netuid, origin_hotkey_ss58, destination_netuid, destination_hotkey_ss58, amount=None, move_all_stake=False, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#

    Moves stake to a different hotkey and/or subnet while keeping the same coldkey owner.

    Parameters:
      -
    • subtensor (Subtensor) – Subtensor instance.

    • -
    • wallet (bittensor.wallet) – The wallet to move stake from.

    • -
    • origin_hotkey (str) – The SS58 address of the source hotkey.

    • -
    • origin_netuid (int) – The netuid of the source subnet.

    • -
    • destination_hotkey (str) – The SS58 address of the destination hotkey.

    • -
    • destination_netuid (int) – The netuid of the destination subnet.

    • -
    • amount (Union[Balance, float]) – Amount to move.

    • -
    • wait_for_inclusion (bool) – If true, waits for inclusion before returning.

    • -
    • wait_for_finalization (bool) – If true, waits for finalization before returning.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If -the transaction is not included in a block within that number of blocks, it will expire and be rejected. -You can think of it as an expiration date for the transaction.

    • +
    • subtensor (bittensor.core.subtensor.Subtensor) – Subtensor instance.

    • +
    • wallet (bittensor_wallet.Wallet) – The wallet to move stake from.

    • +
    • origin_netuid (int) – The netuid of the source subnet.

    • +
    • origin_hotkey_ss58 (str) – The SS58 address of the source hotkey.

    • +
    • destination_netuid (int) – The netuid of the destination subnet.

    • +
    • destination_hotkey_ss58 (str) – The SS58 address of the destination hotkey.

    • +
    • amount (Optional[bittensor.utils.balance.Balance]) – Amount to move.

    • +
    • move_all_stake (bool) – If true, moves all stake from the source hotkey to the destination hotkey.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    True if the move was successful.

    +

    The result object of the extrinsic execution.

    Return type:
    -

    success (bool)

    +

    ExtrinsicResponse

    -bittensor.core.extrinsics.move_stake.swap_stake_extrinsic(subtensor, wallet, hotkey_ss58, origin_netuid, destination_netuid, amount=None, wait_for_inclusion=True, wait_for_finalization=False, safe_staking=False, allow_partial_stake=False, rate_tolerance=0.005, period=None)[source]#
    +bittensor.core.extrinsics.move_stake.swap_stake_extrinsic(subtensor, wallet, hotkey_ss58, origin_netuid, destination_netuid, amount, safe_swapping=False, allow_partial_stake=False, rate_tolerance=0.005, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#

    Moves stake between subnets while keeping the same coldkey-hotkey pair ownership.

    Parameters:
      -
    • subtensor (Subtensor) – Subtensor instance.

    • -
    • wallet (bittensor.wallet) – The wallet to swap stake from.

    • -
    • hotkey_ss58 (str) – The hotkey SS58 address associated with the stake.

    • -
    • origin_netuid (int) – The source subnet UID.

    • -
    • destination_netuid (int) – The destination subnet UID.

    • -
    • amount (Union[Balance, float]) – Amount to swap.

    • -
    • wait_for_inclusion (bool) – If true, waits for inclusion before returning.

    • -
    • wait_for_finalization (bool) – If true, waits for finalization before returning.

    • -
    • safe_staking (bool) – If true, enables price safety checks to protect against price impact.

    • -
    • allow_partial_stake (bool) – If true, allows partial stake swaps when the full amount would exceed the price tolerance.

    • -
    • rate_tolerance (float) – Maximum allowed increase in a price ratio (0.005 = 0.5%).

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If -the transaction is not included in a block within that number of blocks, it will expire and be rejected. -You can think of it as an expiration date for the transaction.

    • +
    • subtensor (bittensor.core.subtensor.Subtensor) – Subtensor instance.

    • +
    • wallet (bittensor_wallet.Wallet) – The wallet to swap stake from.

    • +
    • hotkey_ss58 (str) – The hotkey SS58 address associated with the stake.

    • +
    • origin_netuid (int) – The source subnet UID.

    • +
    • destination_netuid (int) – The destination subnet UID.

    • +
    • amount (bittensor.utils.balance.Balance) – Amount to swap.

    • +
    • safe_swapping (bool) – If true, enables price safety checks to protect against price impact.

    • +
    • allow_partial_stake (bool) – If true, allows partial stake swaps when the full amount would exceed the price tolerance.

    • +
    • rate_tolerance (float) – Maximum allowed increase in a price ratio (0.005 = 0.5%).

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    True if the swap was successful.

    +

    The result object of the extrinsic execution.

    Return type:
    -

    success (bool)

    +

    ExtrinsicResponse

    -bittensor.core.extrinsics.move_stake.transfer_stake_extrinsic(subtensor, wallet, destination_coldkey_ss58, hotkey_ss58, origin_netuid, destination_netuid, amount=None, wait_for_inclusion=True, wait_for_finalization=False, period=None)[source]#
    +bittensor.core.extrinsics.move_stake.transfer_stake_extrinsic(subtensor, wallet, destination_coldkey_ss58, hotkey_ss58, origin_netuid, destination_netuid, amount, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#

    Transfers stake from one subnet to another while changing the coldkey owner.

    Parameters:
      -
    • subtensor (Subtensor) – Subtensor instance.

    • -
    • wallet (bittensor.wallet) – The wallet to transfer stake from.

    • -
    • destination_coldkey_ss58 (str) – The destination coldkey SS58 address.

    • -
    • hotkey_ss58 (str) – The hotkey SS58 address associated with the stake.

    • -
    • origin_netuid (int) – The source subnet UID.

    • -
    • destination_netuid (int) – The destination subnet UID.

    • -
    • amount (Union[Balance, float, int]) – Amount to transfer.

    • -
    • wait_for_inclusion (bool) – If true, waits for inclusion before returning.

    • -
    • wait_for_finalization (bool) – If true, waits for finalization before returning.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If -the transaction is not included in a block within that number of blocks, it will expire and be rejected. -You can think of it as an expiration date for the transaction.

    • +
    • subtensor (bittensor.core.subtensor.Subtensor) – The subtensor instance to interact with the blockchain.

    • +
    • wallet (bittensor_wallet.Wallet) – The wallet containing the coldkey to authorize the transfer.

    • +
    • destination_coldkey_ss58 (str) – SS58 address of the destination coldkey.

    • +
    • hotkey_ss58 (str) – SS58 address of the hotkey associated with the stake.

    • +
    • origin_netuid (int) – Network UID of the origin subnet.

    • +
    • destination_netuid (int) – Network UID of the destination subnet.

    • +
    • amount (bittensor.utils.balance.Balance) – The amount of stake to transfer as a Balance object.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    True if the transfer was successful.

    +

    The result object of the extrinsic execution.

    Return type:
    -

    success (bool)

    +

    ExtrinsicResponse

    @@ -543,20 +562,20 @@

    Module Contents

    previous

    -

    bittensor.core.extrinsics.commit_weights

    +

    bittensor.core.extrinsics.mev_shield

    next

    -

    bittensor.core.extrinsics.registration

    +

    bittensor.core.extrinsics.pallets

    diff --git a/static/python-api/html/autoapi/bittensor/core/extrinsics/pallets/admin_utils/index.html b/static/python-api/html/autoapi/bittensor/core/extrinsics/pallets/admin_utils/index.html new file mode 100644 index 0000000000..01112630ef --- /dev/null +++ b/static/python-api/html/autoapi/bittensor/core/extrinsics/pallets/admin_utils/index.html @@ -0,0 +1,2217 @@ + + + + + + + + + + + bittensor.core.extrinsics.pallets.admin_utils — Bittensor SDK Docs documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + Ctrl+K + + + +
    + +
    + + + + + +
    +
    + + + + + + +
    + + + +
    + +
    +
    + +
    +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + + +
    +

    bittensor.core.extrinsics.pallets.admin_utils

    + +
    +
    + +
    +

    Contents

    +
    + +
    +
    +
    + + + + +
    + +
    +

    bittensor.core.extrinsics.pallets.admin_utils#

    +

    WARNING: This module contains administrative utilities that should ONLY be used for local development and testing +purposes. These functions provide direct access to critical network parameters and should never be used in production +environments as they can potentially disrupt network stability.

    +

    The AdminUtils module contains powerful administrative functions that can modify core network parameters. Improper use +of these functions outside of development/testing contexts could have severe consequences for network operation.

    +
    +

    Classes#

    +

    move_stake_extrinsic(subtensor, wallet, origin_hotkey, ...)

    move_stake_extrinsic(subtensor, wallet, origin_netuid, ...)

    Moves stake to a different hotkey and/or subnet while keeping the same coldkey owner.

    swap_stake_extrinsic(subtensor, wallet, hotkey_ss58, ...)

    + + + + + +

    AdminUtils

    Factory class for creating GenericCall objects for AdminUtils pallet functions.

    +
    + +
    +

    Module Contents#

    +
    +
    +class bittensor.core.extrinsics.pallets.admin_utils.AdminUtils#
    +

    Bases: bittensor.core.extrinsics.pallets.base.CallBuilder

    +

    Factory class for creating GenericCall objects for AdminUtils pallet functions.

    +

    This class provides methods to create GenericCall instances for all AdminUtils pallet extrinsics.

    +

    Works with both sync (Subtensor) and async (AsyncSubtensor) instances. For async operations, pass an AsyncSubtensor +instance and await the result.

    +
    +

    Example

    +

    # Sync usage +call = AdminUtils(subtensor).sudo_set_default_take(default_take=100) +response = subtensor.sign_and_send_extrinsic(call=call, …)

    +

    # Async usage +call = await AdminUtils(async_subtensor).sudo_set_default_take(default_take=100) +response = await async_subtensor.sign_and_send_extrinsic(call=call, …)

    +
    +
    +
    +schedule_grandpa_change(next_authorities, in_blocks, forced=None)#
    +

    Returns GenericCall instance for AdminUtils function schedule_grandpa_change.

    +

    A public interface for pallet_grandpa::Pallet::schedule_grandpa_change.

    +

    Schedule a change in the authorities.

    +

    The change will be applied at the end of execution of the block in_blocks after the +current block. This value may be 0, in which case the change is applied at the end of +the current block.

    +

    If the forced parameter is defined, this indicates that the current set has been +synchronously determined to be offline and that after in_blocks the given change +should be applied. The given block number indicates the median last finalized block +number and it should be used as the canon block when starting the new grandpa voter.

    +

    No change should be signaled while any change is pending. Returns an error if a change +is already pending.

    +
    +
    Parameters:
    +
      +
    • next_authorities (list[tuple]) – The list of next authorities (AuthorityList).

    • +
    • in_blocks (int) – The number of blocks after which the change is applied.

    • +
    • forced (Optional[int]) – Optional block number for forced change.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_activity_cutoff(netuid, activity_cutoff)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_activity_cutoff.

    +

    The extrinsic sets the activity cutoff for a subnet. +It is only callable by the root account or subnet owner. +The extrinsic will call the Subtensor pallet to set the activity cutoff.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The network identifier.

    • +
    • activity_cutoff (int) – The activity cutoff value (u16).

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_adjustment_alpha(netuid, adjustment_alpha)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_adjustment_alpha.

    +

    The extrinsic sets the adjustment alpha for a subnet. +It is only callable by the root account or subnet owner. +The extrinsic will call the Subtensor pallet to set the adjustment alpha.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The network identifier.

    • +
    • adjustment_alpha (int) – The adjustment alpha value (u64).

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_adjustment_interval(netuid, adjustment_interval)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_adjustment_interval.

    +

    The extrinsic sets the adjustment interval for a subnet. +It is only callable by the root account, not changeable by the subnet owner. +The extrinsic will call the Subtensor pallet to set the adjustment interval.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The network identifier.

    • +
    • adjustment_interval (int) – The adjustment interval (u16).

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_admin_freeze_window(window)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_admin_freeze_window.

    +

    Sets the admin freeze window length (in blocks) at the end of a tempo. +Only callable by root.

    +
    +
    Parameters:
    +

    window (int) – The admin freeze window length in blocks (u16).

    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_alpha_sigmoid_steepness(netuid, steepness)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_alpha_sigmoid_steepness.

    +

    Sets the Steepness for the alpha sigmoid function.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The unique identifier for the subnet.

    • +
    • steepness (int) – The Steepness for the alpha sigmoid function. (range is 0-int16::MAX, +negative values are reserved for future use).

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_alpha_values(netuid, alpha_low, alpha_high)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_alpha_values.

    +

    Sets values for liquid alpha.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The network identifier.

    • +
    • alpha_low (int) – The low alpha value (u16).

    • +
    • alpha_high (int) – The high alpha value (u16).

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_bonds_moving_average(netuid, bonds_moving_average)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_bonds_moving_average.

    +

    The extrinsic sets the bonds moving average for a subnet. +It is only callable by the root account or subnet owner. +The extrinsic will call the Subtensor pallet to set the bonds moving average.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The network identifier.

    • +
    • bonds_moving_average (int) – The bonds moving average value (u64).

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_bonds_penalty(netuid, bonds_penalty)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_bonds_penalty.

    +

    The extrinsic sets the bonds penalty for a subnet. +It is only callable by the root account or subnet owner. +The extrinsic will call the Subtensor pallet to set the bonds penalty.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The network identifier.

    • +
    • bonds_penalty (int) – The bonds penalty value (u16).

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_bonds_reset_enabled(netuid, enabled)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_bonds_reset_enabled.

    +

    Enables or disables Bonds Reset for a given subnet.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The unique identifier for the subnet.

    • +
    • enabled (bool) – A boolean flag to enable or disable Bonds Reset.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_ck_burn(burn)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_ck_burn.

    +

    Sets the childkey burn for a subnet. +It is only callable by the root account. +The extrinsic will call the Subtensor pallet to set the childkey burn.

    +
    +
    Parameters:
    +

    burn (int) – The childkey burn value (u64).

    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_coldkey_swap_schedule_duration(duration)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_coldkey_swap_schedule_duration.

    +

    Sets the duration of the coldkey swap schedule.

    +

    This extrinsic allows the root account to set the duration for the coldkey swap schedule. +The coldkey swap schedule determines how long it takes for a coldkey swap operation to complete.

    +
    +
    Parameters:
    +

    duration (int) – The new duration for the coldkey swap schedule, in number of blocks.

    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_commit_reveal_version(version)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_commit_reveal_version.

    +

    Sets the commit-reveal weights version for all subnets.

    +
    +
    Parameters:
    +

    version (int) – The commit-reveal weights version (u16).

    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_commit_reveal_weights_enabled(netuid, enabled)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_commit_reveal_weights_enabled.

    +

    The extrinsic enabled/disables commit/reaveal for a given subnet. +It is only callable by the root account or subnet owner. +The extrinsic will call the Subtensor pallet to set the value.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The network identifier.

    • +
    • enabled (bool) – Whether commit/reveal weights is enabled (bool).

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_commit_reveal_weights_interval(netuid, interval)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_commit_reveal_weights_interval.

    +

    Sets the commit-reveal weights periods for a specific subnet.

    +

    This extrinsic allows the subnet owner or root account to set the duration (in epochs) during which committed weights must be revealed. +The commit-reveal mechanism ensures that users commit weights in advance and reveal them only within a specified period.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The unique identifier of the subnet for which the periods are being set.

    • +
    • interval (int) – The number of epochs that define the commit-reveal period.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_default_take(default_take)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_default_take.

    +

    The extrinsic sets the default take for the network. +It is only callable by the root account. +The extrinsic will call the Subtensor pallet to set the default take.

    +
    +
    Parameters:
    +

    default_take (int) – The default take value (u16).

    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_difficulty(netuid, difficulty)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_difficulty.

    +

    The extrinsic sets the difficulty for a subnet. +It is only callable by the root account or subnet owner. +The extrinsic will call the Subtensor pallet to set the difficulty.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The network identifier.

    • +
    • difficulty (int) – The difficulty value (u64).

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_dissolve_network_schedule_duration(duration)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_dissolve_network_schedule_duration.

    +

    Sets the duration of the dissolve network schedule.

    +

    This extrinsic allows the root account to set the duration for the dissolve network schedule. +The dissolve network schedule determines how long it takes for a network dissolution operation to complete.

    +
    +
    Parameters:
    +

    duration (int) – The new duration for the dissolve network schedule, in number of blocks.

    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_ema_price_halving_period(netuid, ema_halving)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_ema_price_halving_period.

    +

    Sets the number of blocks for EMA price to halve.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The unique identifier for the subnet.

    • +
    • ema_halving (int) – Number of blocks for EMA price to halve.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_evm_chain_id(chain_id)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_evm_chain_id.

    +

    Sets the EVM ChainID.

    +
    +
    Parameters:
    +

    chain_id (int) – The u64 chain ID.

    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_immunity_period(netuid, immunity_period)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_immunity_period.

    +

    The extrinsic sets the immunity period for a subnet. +It is only callable by the root account or subnet owner. +The extrinsic will call the Subtensor pallet to set the immunity period.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The network identifier.

    • +
    • immunity_period (int) – The immunity period (u16).

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_kappa(netuid, kappa)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_kappa.

    +

    The extrinsic sets the kappa for a subnet. +It is only callable by the root account or subnet owner. +The extrinsic will call the Subtensor pallet to set the kappa.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The network identifier.

    • +
    • kappa (int) – The kappa value (u16).

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_liquid_alpha_enabled(netuid, enabled)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_liquid_alpha_enabled.

    +

    Enables or disables Liquid Alpha for a given subnet.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The unique identifier for the subnet.

    • +
    • enabled (bool) – A boolean flag to enable or disable Liquid Alpha.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_lock_reduction_interval(interval)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_lock_reduction_interval.

    +

    The extrinsic sets the lock reduction interval for the network. +It is only callable by the root account. +The extrinsic will call the Subtensor pallet to set the lock reduction interval.

    +
    +
    Parameters:
    +

    interval (int) – The lock reduction interval (u64).

    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_max_allowed_uids(netuid, max_allowed_uids)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_max_allowed_uids.

    +

    The extrinsic sets the maximum allowed UIDs for a subnet. +It is only callable by the root account and subnet owner. +The extrinsic will call the Subtensor pallet to set the maximum allowed UIDs for a subnet.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The network identifier.

    • +
    • max_allowed_uids (int) – The maximum allowed UIDs (u16).

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_max_allowed_validators(netuid, max_allowed_validators)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_max_allowed_validators.

    +

    The extrinsic sets the maximum allowed validators for a subnet. +It is only callable by the root account. +The extrinsic will call the Subtensor pallet to set the maximum allowed validators.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The network identifier.

    • +
    • max_allowed_validators (int) – The maximum allowed validators (u16).

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_max_burn(netuid, max_burn)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_max_burn.

    +

    The extrinsic sets the maximum burn for a subnet. +It is only callable by root and subnet owner. +The extrinsic will call the Subtensor pallet to set the maximum burn.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The network identifier.

    • +
    • max_burn (int) – The maximum burn value in RAO (TaoCurrency).

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_max_difficulty(netuid, max_difficulty)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_max_difficulty.

    +

    The extrinsic sets the maximum difficulty for a subnet. +It is only callable by the root account or subnet owner. +The extrinsic will call the Subtensor pallet to set the maximum difficulty.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The network identifier.

    • +
    • max_difficulty (int) – The maximum difficulty value (u64).

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_max_registrations_per_block(netuid, max_registrations_per_block)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_max_registrations_per_block.

    +

    The extrinsic sets the maximum registrations per block for a subnet. +It is only callable by the root account. +The extrinsic will call the Subtensor pallet to set the maximum registrations per block.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The network identifier.

    • +
    • max_registrations_per_block (int) – The maximum registrations per block (u16).

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_mechanism_count(netuid, mechanism_count)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_mechanism_count.

    +

    Sets the desired number of mechanisms in a subnet.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The network identifier.

    • +
    • mechanism_count (int) – The desired number of mechanisms (MechId).

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_mechanism_emission_split(netuid, maybe_split=None)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_mechanism_emission_split.

    +

    Sets the emission split between mechanisms in a subnet.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The network identifier.

    • +
    • maybe_split (Optional[list[int]]) – Optional list of emission split values (Option<Vec<u16>>).

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_min_allowed_uids(netuid, min_allowed_uids)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_min_allowed_uids.

    +

    The extrinsic sets the minimum allowed UIDs for a subnet. +It is only callable by the root account.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The network identifier.

    • +
    • min_allowed_uids (int) – The minimum allowed UIDs (u16).

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_min_allowed_weights(netuid, min_allowed_weights)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_min_allowed_weights.

    +

    The extrinsic sets the minimum allowed weights for a subnet. +It is only callable by the root account or subnet owner. +The extrinsic will call the Subtensor pallet to set the minimum allowed weights.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The network identifier.

    • +
    • min_allowed_weights (int) – The minimum allowed weights (u16).

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_min_burn(netuid, min_burn)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_min_burn.

    +

    The extrinsic sets the minimum burn for a subnet. +It is only callable by root and subnet owner. +The extrinsic will call the Subtensor pallet to set the minimum burn.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The network identifier.

    • +
    • min_burn (int) – The minimum burn value in RAO (TaoCurrency).

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_min_delegate_take(take)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_min_delegate_take.

    +

    The extrinsic sets the minimum delegate take. +It is only callable by the root account. +The extrinsic will call the Subtensor pallet to set the minimum delegate take.

    +
    +
    Parameters:
    +

    take (int) – The minimum delegate take value (u16).

    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_min_difficulty(netuid, min_difficulty)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_min_difficulty.

    +

    The extrinsic sets the minimum difficulty for a subnet. +It is only callable by the root account or subnet owner. +The extrinsic will call the Subtensor pallet to set the minimum difficulty.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The network identifier.

    • +
    • min_difficulty (int) – The minimum difficulty value (u64).

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_network_immunity_period(immunity_period)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_network_immunity_period.

    +

    The extrinsic sets the immunity period for the network. +It is only callable by the root account. +The extrinsic will call the Subtensor pallet to set the immunity period for the network.

    +
    +
    Parameters:
    +

    immunity_period (int) – The immunity period (u64).

    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_network_min_lock_cost(lock_cost)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_network_min_lock_cost.

    +

    The extrinsic sets the min lock cost for the network. +It is only callable by the root account. +The extrinsic will call the Subtensor pallet to set the min lock cost for the network.

    +
    +
    Parameters:
    +

    lock_cost (int) – The lock cost value in RAO (TaoCurrency).

    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_network_pow_registration_allowed(netuid, registration_allowed)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_network_pow_registration_allowed.

    +

    The extrinsic sets the network PoW registration allowed for a subnet. +It is only callable by the root account or subnet owner. +The extrinsic will call the Subtensor pallet to set the network PoW registration allowed.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The network identifier.

    • +
    • registration_allowed (bool) – Whether PoW registration is allowed (bool).

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_network_rate_limit(rate_limit)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_network_rate_limit.

    +

    The extrinsic sets the network rate limit for the network. +It is only callable by the root account. +The extrinsic will call the Subtensor pallet to set the network rate limit.

    +
    +
    Parameters:
    +

    rate_limit (int) – The network rate limit (u64).

    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_network_registration_allowed(netuid, registration_allowed)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_network_registration_allowed.

    +

    The extrinsic sets the network registration allowed for a subnet. +It is only callable by the root account or subnet owner. +The extrinsic will call the Subtensor pallet to set the network registration allowed.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The network identifier.

    • +
    • registration_allowed (bool) – Whether registration is allowed (bool).

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_nominator_min_required_stake(min_stake)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_nominator_min_required_stake.

    +

    The extrinsic sets the minimum stake required for nominators. +It is only callable by the root account. +The extrinsic will call the Subtensor pallet to set the minimum stake required for nominators.

    +
    +
    Parameters:
    +

    min_stake (int) – The minimum stake required for nominators (u64).

    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_owner_hparam_rate_limit(epochs)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_owner_hparam_rate_limit.

    +

    Sets the owner hyperparameter rate limit in epochs (global multiplier). +Only callable by root.

    +
    +
    Parameters:
    +

    epochs (int) – The owner hyperparameter rate limit in epochs (u16).

    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_owner_immune_neuron_limit(netuid, immune_neurons)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_owner_immune_neuron_limit.

    +

    Sets the number of immune owner neurons.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The network identifier.

    • +
    • immune_neurons (int) – The number of immune owner neurons (u16).

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_rao_recycled(netuid, rao_recycled)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_rao_recycled.

    +

    The extrinsic sets the recycled RAO for a subnet. +It is only callable by the root account. +The extrinsic will call the Subtensor pallet to set the recycled RAO.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The network identifier.

    • +
    • rao_recycled (int) – The recycled RAO value in RAO (TaoCurrency).

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_recycle_or_burn(netuid, recycle_or_burn)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_recycle_or_burn.

    +

    Set the behaviour of the “burn” UID(s) for a given subnet. +If set to Burn, the miner emission sent to the burn UID(s) will be burned. +If set to Recycle, the miner emission sent to the burn UID(s) will be recycled.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The unique identifier for the subnet.

    • +
    • recycle_or_burn (str) – The desired behaviour of the “burn” UID(s) for the subnet.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_rho(netuid, rho)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_rho.

    +

    The extrinsic sets the rho for a subnet. +It is only callable by the root account or subnet owner. +The extrinsic will call the Subtensor pallet to set the rho.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The network identifier.

    • +
    • rho (int) – The rho value (u16).

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_serving_rate_limit(netuid, serving_rate_limit)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_serving_rate_limit.

    +

    The extrinsic sets the serving rate limit for a subnet. +It is only callable by the root account or subnet owner. +The extrinsic will call the Subtensor pallet to set the serving rate limit.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The network identifier.

    • +
    • serving_rate_limit (int) – The serving rate limit (u64).

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_sn_owner_hotkey(netuid, hotkey)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_sn_owner_hotkey.

    +

    Sets or updates the hotkey account associated with the owner of a specific subnet.

    +

    This function allows either the root origin or the current subnet owner to set or update +the hotkey for a given subnet. The subnet must already exist. To prevent abuse, the call is +rate-limited to once per configured interval (default: one week) per subnet.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The unique identifier of the subnet whose owner hotkey is being set.

    • +
    • hotkey (str) – The new hotkey account to associate with the subnet owner.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_stake_threshold(min_stake)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_stake_threshold.

    +

    The extrinsic sets the weights min stake. +It is only callable by the root account. +The extrinsic will call the Subtensor pallet to set the weights min stake.

    +
    +
    Parameters:
    +

    min_stake (int) – The minimum stake value (u64).

    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_subnet_limit(max_subnets)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_subnet_limit.

    +

    The extrinsic sets the subnet limit for the network. +It is only callable by the root account. +The extrinsic will call the Subtensor pallet to set the subnet limit.

    +
    +
    Parameters:
    +

    max_subnets (int) – The maximum number of subnets (u16).

    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_subnet_moving_alpha(alpha)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_subnet_moving_alpha.

    +

    Sets the new moving alpha value for the SubnetMovingAlpha.

    +
    +
    Parameters:
    +

    alpha (dict) – The new moving alpha value (I96F32).

    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_subnet_owner_cut(subnet_owner_cut)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_subnet_owner_cut.

    +

    The extrinsic sets the subnet owner cut for a subnet. +It is only callable by the root account. +The extrinsic will call the Subtensor pallet to set the subnet owner cut.

    +
    +
    Parameters:
    +

    subnet_owner_cut (int) – The subnet owner cut value (u16).

    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_subnet_owner_hotkey(netuid, hotkey)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_subnet_owner_hotkey.

    +

    Change the SubnetOwnerHotkey for a given subnet.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The unique identifier for the subnet.

    • +
    • hotkey (str) – The new hotkey for the subnet owner.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_subtoken_enabled(netuid, subtoken_enabled)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_subtoken_enabled.

    +

    Enables or disables subtoken trading for a given subnet.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The unique identifier of the subnet.

    • +
    • subtoken_enabled (bool) – A boolean indicating whether subtoken trading should be enabled or disabled.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_tao_flow_cutoff(flow_cutoff)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_tao_flow_cutoff.

    +

    Sets TAO flow cutoff value (A).

    +
    +
    Parameters:
    +

    flow_cutoff (dict) – The TAO flow cutoff value (I64F64).

    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_tao_flow_normalization_exponent(exponent)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_tao_flow_normalization_exponent.

    +

    Sets TAO flow normalization exponent (p).

    +
    +
    Parameters:
    +

    exponent (dict) – The TAO flow normalization exponent (U64F64).

    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_tao_flow_smoothing_factor(smoothing_factor)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_tao_flow_smoothing_factor.

    +

    Sets TAO flow smoothing factor (alpha).

    +
    +
    Parameters:
    +

    smoothing_factor (int) – The TAO flow smoothing factor (u64).

    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_target_registrations_per_interval(netuid, target_registrations_per_interval)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_target_registrations_per_interval.

    +

    The extrinsic sets the target registrations per interval for a subnet. +It is only callable by the root account. +The extrinsic will call the Subtensor pallet to set the target registrations per interval.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The network identifier.

    • +
    • target_registrations_per_interval (int) – The target registrations per interval (u16).

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_tempo(netuid, tempo)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_tempo.

    +

    The extrinsic sets the tempo for a subnet. +It is only callable by the root account. +The extrinsic will call the Subtensor pallet to set the tempo.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The network identifier.

    • +
    • tempo (int) – The tempo value (u16).

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_toggle_transfer(netuid, toggle)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_toggle_transfer.

    +

    Enable or disable atomic alpha transfers for a given subnet.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The unique identifier for the subnet.

    • +
    • toggle (bool) – A boolean flag to enable or disable Liquid Alpha.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_total_issuance(total_issuance)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_total_issuance.

    +

    The extrinsic sets the total issuance for the network. +It is only callable by the root account. +The extrinsic will call the Subtensor pallet to set the issuance for the network.

    +
    +
    Parameters:
    +

    total_issuance (int) – The total issuance value in RAO (TaoCurrency).

    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_tx_delegate_take_rate_limit(tx_rate_limit)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_tx_delegate_take_rate_limit.

    +

    The extrinsic sets the rate limit for delegate take transactions. +It is only callable by the root account. +The extrinsic will call the Subtensor pallet to set the rate limit for delegate take transactions.

    +
    +
    Parameters:
    +

    tx_rate_limit (int) – The transaction rate limit (u64).

    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_tx_rate_limit(tx_rate_limit)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_tx_rate_limit.

    +

    The extrinsic sets the transaction rate limit for the network. +It is only callable by the root account. +The extrinsic will call the Subtensor pallet to set the transaction rate limit.

    +
    +
    Parameters:
    +

    tx_rate_limit (int) – The transaction rate limit (u64).

    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_weights_set_rate_limit(netuid, weights_set_rate_limit)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_weights_set_rate_limit.

    +

    The extrinsic sets the weights set rate limit for a subnet. +It is only callable by the root account. +The extrinsic will call the Subtensor pallet to set the weights set rate limit.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The network identifier.

    • +
    • weights_set_rate_limit (int) – The weights set rate limit (u64).

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_weights_version_key(netuid, weights_version_key)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_weights_version_key.

    +

    The extrinsic sets the weights version key for a subnet. +It is only callable by the root account or subnet owner. +The extrinsic will call the Subtensor pallet to set the weights version key.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The network identifier.

    • +
    • weights_version_key (int) – The weights version key (u64).

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_set_yuma3_enabled(netuid, enabled)#
    +

    Returns GenericCall instance for AdminUtils function sudo_set_yuma3_enabled.

    +

    Enables or disables Yuma3 for a given subnet.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The unique identifier for the subnet.

    • +
    • enabled (bool) – A boolean flag to enable or disable Yuma3.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_toggle_evm_precompile(precompile_id, enabled)#
    +

    Returns GenericCall instance for AdminUtils function sudo_toggle_evm_precompile.

    +

    Toggles the enablement of an EVM precompile.

    +
    +
    Parameters:
    +
      +
    • precompile_id (str) – The identifier of the EVM precompile to toggle.

    • +
    • enabled (bool) – The new enablement state of the precompile.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +sudo_trim_to_max_allowed_uids(netuid, max_n)#
    +

    Returns GenericCall instance for AdminUtils function sudo_trim_to_max_allowed_uids.

    +

    Trims the maximum number of UIDs for a subnet.

    +

    The trimming is done by sorting the UIDs by emission descending and then trimming +the lowest emitters while preserving temporally and owner immune UIDs. The UIDs are +then compressed to the left and storage is migrated to the new compressed UIDs.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The network identifier.

    • +
    • max_n (int) – The maximum number of UIDs (u16).

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +swap_authorities(new_authorities)#
    +

    Returns GenericCall instance for AdminUtils function swap_authorities.

    +

    The extrinsic sets the new authorities for Aura consensus. +It is only callable by the root account. +The extrinsic will call the Aura pallet to change the authorities.

    +
    +
    Parameters:
    +

    new_authorities (list[str]) – List of new authority identifiers.

    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    + +
    + + + + + + + + + + + + + + + + + +
    + + + +
    + + +
    + + + + + + + + + + +
    +
    + + \ No newline at end of file diff --git a/static/python-api/html/autoapi/bittensor/core/extrinsics/pallets/balances/index.html b/static/python-api/html/autoapi/bittensor/core/extrinsics/pallets/balances/index.html new file mode 100644 index 0000000000..104c6fa324 --- /dev/null +++ b/static/python-api/html/autoapi/bittensor/core/extrinsics/pallets/balances/index.html @@ -0,0 +1,633 @@ + + + + + + + + + + + bittensor.core.extrinsics.pallets.balances — Bittensor SDK Docs documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + +
    + +
    + + + + + +
    +
    + + + + + + +
    + + + +
    + +
    +
    + +
    +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + + +
    +

    bittensor.core.extrinsics.pallets.balances

    + +
    + +
    +
    + + + + +
    + +
    +

    bittensor.core.extrinsics.pallets.balances#

    +
    +

    Classes#

    +
    + + + + + +

    Balances

    Factory class for creating GenericCall objects for Balances pallet functions.

    +
    +
    +
    +

    Module Contents#

    +
    +
    +class bittensor.core.extrinsics.pallets.balances.Balances#
    +

    Bases: bittensor.core.extrinsics.pallets.base.CallBuilder

    +

    Factory class for creating GenericCall objects for Balances pallet functions.

    +

    This class provides methods to create GenericCall instances for all Balances pallet extrinsics.

    +

    Works with both sync (Subtensor) and async (AsyncSubtensor) instances. For async operations, pass an AsyncSubtensor +instance and await the result.

    +
    +

    Example

    +

    # Sync usage +call = Balances(subtensor).transfer_all(dest=”5DE..”, keep_alive=True) +response = subtensor.sign_and_send_extrinsic(call=call, …)

    +

    # Async usage +call = await Balances(subtensor).transfer_all(dest=”5DE..”, keep_alive=True) +response = await async_subtensor.sign_and_send_extrinsic(call=call, …)

    +
    +
    +
    +transfer_all(dest, keep_alive)#
    +

    Returns GenericCall instance for Subtensor function Balances.transfer_all.

    +
    +
    Parameters:
    +
      +
    • dest (str) – The destination ss58 address.

    • +
    • keep_alive (bool) – A boolean to determine if the transfer_all operation should send all of the funds the account +has, causing the sender account to be killed (false), or transfer everything except at least the +existential deposit, which will guarantee to keep the sender account alive (true).

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +transfer_allow_death(dest, value)#
    +

    Returns GenericCall instance for Subtensor function Balances.transfer_allow_death.

    +
    +
    Parameters:
    +
      +
    • dest (str) – The destination ss58 address.

    • +
    • value (int) – The Balance amount in RAO to transfer.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +transfer_keep_alive(dest, value)#
    +

    Returns GenericCall instance for Subtensor function Balances.transfer_keep_alive.

    +
    +
    Parameters:
    +
      +
    • dest (str) – The destination ss58 address.

    • +
    • value (int) – The Balance amount in RAO to transfer.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    + +
    +
    + + +
    + + + + + + + + +
    + + + + + + + +
    +
    + + +
    + + +
    +
    +
    + + + + + +
    +
    + + \ No newline at end of file diff --git a/static/python-api/html/autoapi/bittensor/core/extrinsics/pallets/base/index.html b/static/python-api/html/autoapi/bittensor/core/extrinsics/pallets/base/index.html new file mode 100644 index 0000000000..e6b38a6c63 --- /dev/null +++ b/static/python-api/html/autoapi/bittensor/core/extrinsics/pallets/base/index.html @@ -0,0 +1,622 @@ + + + + + + + + + + + bittensor.core.extrinsics.pallets.base — Bittensor SDK Docs documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + +
    + +
    + + + + + +
    +
    + + + + + + +
    + + + +
    + +
    +
    + +
    +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + + +
    +

    bittensor.core.extrinsics.pallets.base

    + +
    + +
    +
    + + + + +
    + +
    +

    bittensor.core.extrinsics.pallets.base#

    +
    +

    Attributes#

    +
    + + + + + +

    Call

    +
    +
    +
    +

    Classes#

    +
    + + + + + +

    CallBuilder

    Base class for creating GenericCall objects for all Subtensor pallet functions.

    +
    +
    +
    +

    Module Contents#

    +
    +
    +bittensor.core.extrinsics.pallets.base.Call#
    +
    + +
    +
    +class bittensor.core.extrinsics.pallets.base.CallBuilder#
    +

    Base class for creating GenericCall objects for all Subtensor pallet functions.

    +

    This class implements an interface for creating GenericCall objects that can be used with any Subtensor pallet +function. For async operations, pass an AsyncSubtensor instance and await the result.

    +
    +
    Variables:
    +
      +
    • subtensor – The Subtensor or AsyncSubtensor instance used for call composition.

    • +
    • dynamic_function – If True, allows dynamic calls to functions not explicitly defined in the pallet class. When a

    • +
    • pallet (method is called that doesn't exist in the class, it will be dynamically created as a call to the)

    • +
    • name. (function with the same)

    • +
    +
    +
    +
    +
    +create_composed_call(call_module=None, call_function=None, **kwargs)#
    +

    Create a call to the pallet function.

    +
    +
    Parameters:
    +
      +
    • call_module (str) – If not provided, will be determined from the calling class name.

    • +
    • call_function (str) – If not provided, will be determined from the calling method name.

    • +
    • **kwargs – Named parameters that will be passed to the function.

    • +
    +
    +
    Return type:
    +

    Call

    +
    +
    +
    +

    Note

    +

    The key in kwargs must always match the parameter name in the subtensor’s function.

    +
    +
    + +
    +
    +dynamic_function: bool = True#
    +
    + +
    +
    +subtensor: bittensor.core.subtensor.Subtensor | bittensor.core.async_subtensor.AsyncSubtensor#
    +
    + +
    + +
    +
    + + +
    + + + + + + + + +
    + + + + + + + +
    +
    + + +
    + + +
    +
    +
    + + + + + +
    +
    + + \ No newline at end of file diff --git a/static/python-api/html/autoapi/bittensor/core/extrinsics/pallets/commitments/index.html b/static/python-api/html/autoapi/bittensor/core/extrinsics/pallets/commitments/index.html new file mode 100644 index 0000000000..9ebe1832ff --- /dev/null +++ b/static/python-api/html/autoapi/bittensor/core/extrinsics/pallets/commitments/index.html @@ -0,0 +1,587 @@ + + + + + + + + + + + bittensor.core.extrinsics.pallets.commitments — Bittensor SDK Docs documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + +
    + +
    + + + + + +
    +
    + + + + + + +
    + + + +
    + +
    +
    + +
    +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + + +
    +

    bittensor.core.extrinsics.pallets.commitments

    + +
    +
    + +
    +

    Contents

    +
    + +
    +
    +
    + + + + +
    + +
    +

    bittensor.core.extrinsics.pallets.commitments#

    +
    +

    Classes#

    +
    + + + + + +

    Commitments

    Factory class for creating GenericCall objects for Commitments pallet functions.

    +
    +
    +
    +

    Module Contents#

    +
    +
    +class bittensor.core.extrinsics.pallets.commitments.Commitments#
    +

    Bases: bittensor.core.extrinsics.pallets.base.CallBuilder

    +

    Factory class for creating GenericCall objects for Commitments pallet functions.

    +

    This class provides methods to create GenericCall instances for Commitments pallet extrinsics.

    +

    Works with both sync (Subtensor) and async (AsyncSubtensor) instances. For async operations, pass an AsyncSubtensor +instance and await the result.

    +
    +

    Example

    +

    # Sync usage +call = Commitments(subtensor).set_commitment(netuid=14, …) +response = subtensor.sign_and_send_extrinsic(call=call, …)

    +

    # Async usage +call = await Commitments(async_subtensor).set_commitment(netuid=14, …) +response = await async_subtensor.sign_and_send_extrinsic(call=call, …)

    +
    +
    +
    +set_commitment(netuid, info)#
    +

    Returns GenericCall instance for Subtensor function Commitments.set_commitment.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The netuid of the subnet to set commitment for.

    • +
    • info (dict) – Dictionary of info fields to set.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    + +
    +
    + + +
    + + + + + + + + +
    + + + + +
    + + +
    +
    + + +
    + + +
    +
    +
    + + + + + +
    +
    + + \ No newline at end of file diff --git a/static/python-api/html/autoapi/bittensor/core/extrinsics/pallets/crowdloan/index.html b/static/python-api/html/autoapi/bittensor/core/extrinsics/pallets/crowdloan/index.html new file mode 100644 index 0000000000..3841e852d8 --- /dev/null +++ b/static/python-api/html/autoapi/bittensor/core/extrinsics/pallets/crowdloan/index.html @@ -0,0 +1,904 @@ + + + + + + + + + + +<<<<<<<< HEAD:static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/mev_shield/index.html + bittensor.core.extrinsics.asyncex.mev_shield — Bittensor SDK Docs documentation +======== + bittensor.core.extrinsics.pallets.crowdloan — Bittensor SDK Docs documentation +>>>>>>>> origin/main:static/python-api/html/autoapi/bittensor/core/extrinsics/pallets/crowdloan/index.html + + + + + + + + + + + + + + + + + + + + + + + + + + +<<<<<<<< HEAD:static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/mev_shield/index.html + + + + + +======== + + + + + +>>>>>>>> origin/main:static/python-api/html/autoapi/bittensor/core/extrinsics/pallets/crowdloan/index.html + + + + + + + + + + + + +
    + + + + + + + + + +
    + +
    + + + + + +
    +
    + + + + + + +
    + + + +
    + +
    +
    + +
    +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + + +
    +<<<<<<<< HEAD:static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/mev_shield/index.html +

    bittensor.core.extrinsics.asyncex.mev_shield

    +======== +

    bittensor.core.extrinsics.pallets.crowdloan

    +>>>>>>>> origin/main:static/python-api/html/autoapi/bittensor/core/extrinsics/pallets/crowdloan/index.html + +
    +
    + +
    +

    Contents

    +
    + +
    +
    +
    + + + + +
    + +<<<<<<<< HEAD:static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/mev_shield/index.html +
    +

    bittensor.core.extrinsics.asyncex.mev_shield#

    +

    Module provides async MEV Shield extrinsics.

    +
    +

    Functions#

    +
    + + + + + + +======== +
    +

    bittensor.core.extrinsics.pallets.crowdloan#

    +
    +

    Classes#

    +

    submit_encrypted_extrinsic(subtensor, wallet, call[, ...])

    Submits an encrypted extrinsic to the MEV Shield pallet.

    wait_for_extrinsic_by_hash(subtensor, extrinsic_hash, ...)

    Wait for the result of a MeV Shield encrypted extrinsic.

    + + + +>>>>>>>> origin/main:static/python-api/html/autoapi/bittensor/core/extrinsics/pallets/crowdloan/index.html + + +

    Crowdloan

    Factory class for creating GenericCall objects for Crowdloan pallet functions.

    +
    +
    +
    +

    Module Contents#

    +<<<<<<<< HEAD:static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/mev_shield/index.html +
    +
    +async bittensor.core.extrinsics.asyncex.mev_shield.submit_encrypted_extrinsic(subtensor, wallet, call, sign_with='coldkey', period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=False, wait_for_revealed_execution=True, blocks_for_revealed_execution=3)#
    +

    Submits an encrypted extrinsic to the MEV Shield pallet.

    +

    This function encrypts a call using ML-KEM-768 + XChaCha20Poly1305 and submits it to the MevShield pallet. The +extrinsic remains encrypted in the transaction pool until it is included in a block and decrypted by validators.

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.async_subtensor.AsyncSubtensor) – The Subtensor client instance used for blockchain interaction.

    • +
    • wallet (bittensor_wallet.Wallet) – The wallet used to sign the extrinsic (must be unlocked, coldkey will be used for signing).

    • +
    • call (scalecodec.types.GenericCall) – The GenericCall object to encrypt and submit.

    • +
    • sign_with (str) – The keypair to use for signing the inner call/extrinsic. Can be either “coldkey” or “hotkey”.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the executed event, indicating that validators have +successfully decrypted and executed the inner call. If True, the function will poll subsequent blocks for +the event matching this submission’s commitment.

    • +
    • blocks_for_revealed_execution (int) – Maximum number of blocks to poll for the executed event after inclusion. +The function checks blocks from start_block + 1 to start_block + blocks_for_revealed_execution. Returns +immediately if the event is found before the block limit is reached.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    Raises:
    +
      +
    • ValueError – If NextKey is not available in storage or encryption fails.

    • +
    • SubstrateRequestException – If the extrinsic fails to be submitted or included.

    • +
    +======== +
    +
    +class bittensor.core.extrinsics.pallets.crowdloan.Crowdloan#
    +

    Bases: bittensor.core.extrinsics.pallets.base.CallBuilder

    +

    Factory class for creating GenericCall objects for Crowdloan pallet functions.

    +

    This class provides methods to create GenericCall instances for all Crowdloan pallet extrinsics.

    +

    Works with both sync (Subtensor) and async (AsyncSubtensor) instances. For async operations, pass an AsyncSubtensor +instance and await the result.

    +
    +

    Example

    +

    # Sync usage +call = Crowdloan(subtensor).finalize(crowdloan_id=123) +response = subtensor.sign_and_send_extrinsic(call=call, …)

    +

    # Async usage +call = await Crowdloan(subtensor).finalize(crowdloan_id=123) +response = await async_subtensor.sign_and_send_extrinsic(call=call, …)

    +
    +
    +
    +contribute(crowdloan_id, amount)#
    +

    Returns GenericCall instance for Subtensor function Crowdloan.contribute.

    +
    +
    Parameters:
    +
      +
    • crowdloan_id (int) – The unique identifier of the crowdloan to contribute to.

    • +
    • amount (int) – Amount in RAO to contribute.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +>>>>>>>> origin/main:static/python-api/html/autoapi/bittensor/core/extrinsics/pallets/crowdloan/index.html +
    +
    +
    +

    Note

    +

    The encryption uses the public key from NextKey storage, which rotates every block. The payload structure is: +payload_core = signer_bytes (32B) + key_hash (32B Blake2-256 hash of NextKey) + SCALE(call) +plaintext = payload_core + b”x01” + signature (64B for sr25519) +commitment = blake2_256(payload_core)

    +

    The key_hash binds the transaction to the key epoch at submission time and replaces nonce-based replay +protection.

    +
    +
    + +<<<<<<<< HEAD:static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/mev_shield/index.html +
    +
    +async bittensor.core.extrinsics.asyncex.mev_shield.wait_for_extrinsic_by_hash(subtensor, extrinsic_hash, shield_id, submit_block_hash, timeout_blocks=3)#
    +

    Wait for the result of a MeV Shield encrypted extrinsic.

    +

    After submit_encrypted succeeds, the block author will decrypt and submit the inner extrinsic directly. This +function polls subsequent blocks looking for either: +- an extrinsic matching the provided hash (success) +OR +- a markDecryptionFailed extrinsic with matching shield ID (failure)

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.async_subtensor.AsyncSubtensor) – SubtensorInterface instance.

    • +
    • extrinsic_hash (str) – The hash of the inner extrinsic to find.

    • +
    • shield_id (str) – The wrapper ID from EncryptedSubmitted event (for detecting decryption failures).

    • +
    • submit_block_hash (str) – Block hash where submit_encrypted was included.

    • +
    • timeout_blocks (int) – Max blocks to wait (default 3).

    • +
    +
    +
    Returns:
    +

    Optional ExtrinsicReceipt.

    +
    +
    Return type:
    +

    Optional[async_substrate_interface.AsyncExtrinsicReceipt]

    +======== +
    +
    +create(deposit, min_contribution, cap, end, call=None, target_address=None)#
    +

    Returns GenericCall instance for Subtensor function Crowdloan.create.

    +
    +
    Parameters:
    +
      +
    • deposit (int) – Initial deposit in RAO from the creator.

    • +
    • min_contribution (int) – Minimum contribution amount in RAO.

    • +
    • cap (int) – Maximum cap to be raised in RAO.

    • +
    • end (int) – Block number when the campaign ends.

    • +
    • call (Optional[scalecodec.GenericCall]) – Runtime call data (e.g., subtensor::register_leased_network).

    • +
    • target_address (Optional[str]) – SS58 address to transfer funds to on success.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +>>>>>>>> origin/main:static/python-api/html/autoapi/bittensor/core/extrinsics/pallets/crowdloan/index.html +
    +
    +
    + +<<<<<<<< HEAD:static/python-api/html/autoapi/bittensor/core/extrinsics/asyncex/mev_shield/index.html +======== +
    +
    +dissolve(crowdloan_id)#
    +

    Returns GenericCall instance for Subtensor function Crowdloan.dissolve.

    +
    +
    Parameters:
    +

    crowdloan_id (int) – The unique identifier of the crowdloan to dissolve.

    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +finalize(crowdloan_id)#
    +

    Returns GenericCall instance for Subtensor function Crowdloan.finalize.

    +
    +
    Parameters:
    +

    crowdloan_id (int) – The unique identifier of the crowdloan to finalize.

    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +refund(crowdloan_id)#
    +

    Returns GenericCall instance for Subtensor function Crowdloan.refund.

    +
    +
    Parameters:
    +

    crowdloan_id (int) – The unique identifier of the crowdloan to refund.

    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +update_cap(crowdloan_id, new_cap)#
    +

    Returns GenericCall instance for Subtensor function Crowdloan.update_cap.

    +
    +
    Parameters:
    +
      +
    • crowdloan_id (int) – The unique identifier of the crowdloan to update the cap for.

    • +
    • new_cap (int) – New cap to be raised in RAO.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +update_end(crowdloan_id, new_end)#
    +

    Returns GenericCall instance for Subtensor function Crowdloan.update_end.

    +
    +
    Parameters:
    +
      +
    • crowdloan_id (int) – The unique identifier of the crowdloan to update the end block number for.

    • +
    • new_end (int) – New end block number.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +update_min_contribution(crowdloan_id, new_min_contribution)#
    +

    Returns GenericCall instance for Subtensor function Crowdloan.update_min_contribution.

    +
    +
    Parameters:
    +
      +
    • crowdloan_id (int) – The unique identifier of the crowdloan to update the minimum contribution amount for.

    • +
    • new_min_contribution (int) – New minimum contribution amount in RAO.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +withdraw(crowdloan_id)#
    +

    Returns GenericCall instance for Subtensor function Crowdloan.withdraw.

    +
    +
    Parameters:
    +

    crowdloan_id (int) – The unique identifier of the crowdloan to withdraw from.

    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    + +>>>>>>>> origin/main:static/python-api/html/autoapi/bittensor/core/extrinsics/pallets/crowdloan/index.html +
    +
    + + +
    + + + + + + + + +
    + + + + +
    + + +
    +
    + + +
    + + +
    +
    +
    + + + + + +
    +
    + + \ No newline at end of file diff --git a/static/python-api/html/autoapi/bittensor/core/extrinsics/set_weights/index.html b/static/python-api/html/autoapi/bittensor/core/extrinsics/pallets/index.html similarity index 65% rename from static/python-api/html/autoapi/bittensor/core/extrinsics/set_weights/index.html rename to static/python-api/html/autoapi/bittensor/core/extrinsics/pallets/index.html index ba4bb84d91..dff240312e 100644 --- a/static/python-api/html/autoapi/bittensor/core/extrinsics/set_weights/index.html +++ b/static/python-api/html/autoapi/bittensor/core/extrinsics/pallets/index.html @@ -8,7 +8,7 @@ - bittensor.core.extrinsics.set_weights — Bittensor SDK Docs documentation + bittensor.core.extrinsics.pallets — Bittensor SDK Docs documentation @@ -45,11 +45,11 @@ - + - - + + @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -264,7 +267,7 @@ -
  • -

    bittensor.core.extrinsics.set_weights

    +

    bittensor.core.extrinsics.pallets

    @@ -397,11 +400,7 @@

    Contents

    @@ -413,58 +412,24 @@

    Contents

    -
    -

    bittensor.core.extrinsics.set_weights#

    -

    Module sync setting weights extrinsic.

    -
    -

    Functions#

    -
    - - - - - -

    set_weights_extrinsic(subtensor, wallet, netuid, uids, ...)

    Sets the given weights and values on a chain for a wallet hotkey account.

    -
    -
    -
    -

    Module Contents#

    -
    -
    -bittensor.core.extrinsics.set_weights.set_weights_extrinsic(subtensor, wallet, netuid, uids, weights, version_key=0, wait_for_inclusion=False, wait_for_finalization=False, period=8)[source]#
    -

    Sets the given weights and values on a chain for a wallet hotkey account.

    -
    -
    Parameters:
    -
    -
    Returns:
    -

    -
    Flag is True if extrinsic was finalized or included in the block. If we did not wait for

    finalization / inclusion, the response is True.

    -
    -
    -

    -
    -
    Return type:
    -

    success (bool)

    -
    -
    -
    - +
    @@ -480,20 +445,20 @@

    Module Contents

    previous

    -

    bittensor.core.extrinsics.serving

    +

    bittensor.core.extrinsics.move_stake

    next

    -

    bittensor.core.extrinsics.staking

    +

    bittensor.core.extrinsics.pallets.admin_utils

    @@ -514,11 +479,7 @@

    Module Contents diff --git a/static/python-api/html/autoapi/bittensor/core/extrinsics/pallets/mev_shield/index.html b/static/python-api/html/autoapi/bittensor/core/extrinsics/pallets/mev_shield/index.html new file mode 100644 index 0000000000..bd7eeb5f8c --- /dev/null +++ b/static/python-api/html/autoapi/bittensor/core/extrinsics/pallets/mev_shield/index.html @@ -0,0 +1,608 @@ + + + + + + + + + + + bittensor.core.extrinsics.pallets.mev_shield — Bittensor SDK Docs documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + +
    + +
    + + + + + +
    +
    + + + + + + +
    + + + +
    + +
    +
    + +
    +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + + +
    +

    bittensor.core.extrinsics.pallets.mev_shield

    + +
    +
    + +
    +

    Contents

    +
    + +
    +
    +
    + + + + +
    + +
    +

    bittensor.core.extrinsics.pallets.mev_shield#

    +
    +

    Classes#

    +
    + + + + + +

    MevShield

    Factory class for creating GenericCall objects for MevShield pallet functions.

    +
    +
    +
    +

    Module Contents#

    +
    +
    +class bittensor.core.extrinsics.pallets.mev_shield.MevShield#
    +

    Bases: bittensor.core.extrinsics.pallets.base.CallBuilder

    +

    Factory class for creating GenericCall objects for MevShield pallet functions.

    +

    This class provides methods to create GenericCall instances for all MevShield pallet extrinsics.

    +

    Works with both sync (Subtensor) and async (AsyncSubtensor) instances. For async operations, pass an AsyncSubtensor +instance and await the result.

    +
    +

    Example

    +

    # Sync usage +call = MevShield(subtensor).submit_encrypted(

    +
    +

    commitment=”0x1234…”, +ciphertext=b”encrypted_data…”

    +
    +

    ) +response = subtensor.sign_and_send_extrinsic(call=call, …)

    +

    # Async usage +call = await MevShield(async_subtensor).submit_encrypted(

    +
    +

    commitment=”0x1234…”, +ciphertext=b”encrypted_data…”

    +
    +

    ) +response = await async_subtensor.sign_and_send_extrinsic(call=call, …)

    +
    +
    +
    +submit_encrypted(commitment, ciphertext)#
    +

    Returns GenericCall instance for MevShield function submit_encrypted.

    +

    This function submits an encrypted extrinsic to the MEV Shield pallet. The extrinsic remains encrypted in the +transaction pool until it is included in a block and decrypted by validators.

    +
    +
    Parameters:
    +
      +
    • commitment (str) – The blake2_256 hash of the payload_core (signer + nonce + SCALE(call)). Must be a hex string +with “0x” prefix.

    • +
    • ciphertext (bytes) – The encrypted blob containing the payload and signature. +Format: [u16 kem_len LE][kem_ct][nonce24][aead_ct] +Maximum size: 8192 bytes.

    • +
    +
    +
    Returns:
    +

    GenericCall instance ready for extrinsic submission.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    +

    Note

    +

    The commitment is used to verify the ciphertext’s content at decryption time. The ciphertext is encrypted +using ML-KEM-768 + XChaCha20Poly1305 with the public key from the NextKey storage item, which rotates every +block.

    +
    +
    + +
    + +
    +
    + + +
    + + + + + + + + +
    + + + + +
    + + +
    +
    + + +
    + + +
    +
    +
    + + + + + +
    +
    + + \ No newline at end of file diff --git a/static/python-api/html/autoapi/bittensor/core/extrinsics/pallets/proxy/index.html b/static/python-api/html/autoapi/bittensor/core/extrinsics/pallets/proxy/index.html new file mode 100644 index 0000000000..22a48b2850 --- /dev/null +++ b/static/python-api/html/autoapi/bittensor/core/extrinsics/pallets/proxy/index.html @@ -0,0 +1,904 @@ + + + + + + + + + + + bittensor.core.extrinsics.pallets.proxy — Bittensor SDK Docs documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + +
    + +
    + + + + + +
    +
    + + + + + + +
    + + + +
    + +
    +
    + +
    +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + + + + + + + +
    + +
    +

    bittensor.core.extrinsics.pallets.proxy#

    +
    +

    Classes#

    +
    + + + + + +

    Proxy

    Factory class for creating GenericCall objects for Proxy pallet functions.

    +
    +
    +
    +

    Module Contents#

    +
    +
    +class bittensor.core.extrinsics.pallets.proxy.Proxy#
    +

    Bases: bittensor.core.extrinsics.pallets.base.CallBuilder

    +

    Factory class for creating GenericCall objects for Proxy pallet functions.

    +

    This class provides methods to create GenericCall instances for all Proxy pallet extrinsics.

    +

    Works with both sync (Subtensor) and async (AsyncSubtensor) instances. For async operations, pass an AsyncSubtensor +instance and await the result.

    +
    +

    Example

    +

    # Sync usage

    +

    call = Proxy(subtensor).add_proxy(delegate=”5DE..”, proxy_type=”Any”, delay=0)

    +

    response = subtensor.sign_and_send_extrinsic(call=call, …)

    +

    # Async usage

    +

    call = await Proxy(async_subtensor).add_proxy(delegate=”5DE..”, proxy_type=”Any”, delay=0)

    +

    response = await async_subtensor.sign_and_send_extrinsic(call=call, …)

    +
    +
    +
    +add_proxy(delegate, proxy_type, delay)#
    +

    Add a proxy relationship between existing wallets.

    +
    +
    Parameters:
    +
      +
    • delegate (str) – The SS58 address of the delegate proxy account.

    • +
    • proxy_type (str) – The type of proxy permissions (e.g., Any, NonTransfer, Staking). For available +proxy types and their permissions, see the documentation link in the Notes section below.

    • +
    • delay (int) – Optionally, include a delay in blocks. The time-lock period for proxy announcements. A delay of 0 +means immediate execution without announcements.

    • +
    +
    +
    Returns:
    +

    GenericCall instance for the Proxy.addProxy extrinsic.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    +

    Notes

    + +
    +
    + +
    +
    +announce(real, call_hash)#
    +

    Create a call to announce a future proxied operation.

    +
    +
    Parameters:
    +
      +
    • real (str) – The SS58 address of the real account on whose behalf the call will be made.

    • +
    • call_hash (str) – The hash of the call that will be executed in the future (hex string with 0x prefix).

    • +
    +
    +
    Returns:
    +

    GenericCall instance for the Proxy.announce extrinsic.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    +

    Notes

    +
      +
    • A deposit is required when making an announcement. The deposit is returned when the announcement is executed, +rejected, or removed. The announcement can be executed after the delay period has passed.

    • +
    • See Working with Proxies: <https://docs.learnbittensor.org/keys/proxies/create-proxy>

    • +
    +
    +
    + +
    +
    +create_pure(proxy_type, delay, index)#
    +

    Create a pure proxy account.

    +
    +
    Parameters:
    +
      +
    • proxy_type (str) – The type of proxy permissions for the pure proxy (e.g., Any, NonTransfer, +Staking). For available proxy types and their permissions, see the documentation link in the Notes +section below.

    • +
    • delay (int) – Optionally, include a delay in blocks. The time-lock period for proxy announcements. A delay of 0 +means immediate execution without announcements.

    • +
    • index (int) – A salt value (u16, range 0-65535) used to generate unique pure proxy addresses. This should +generally be left as 0 unless you are creating batches of proxies. Must be preserved for +kill_pure.

    • +
    +
    +
    Returns:
    +

    GenericCall instance for the Proxy.createPure extrinsic.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    +

    Notes

    + +
    +
    + +
    +
    +kill_pure(spawner, proxy_type, index, height, ext_index)#
    +

    Destroy a pure proxy account.

    +
    +
    Parameters:
    +
      +
    • spawner (str) – The SS58 address of the account that spawned the pure proxy (the account that called +create_pure).

    • +
    • proxy_type (str) – The type of proxy permissions that were used when creating the pure proxy. Must match the value +used in create_pure.

    • +
    • index (int) – The salt value (u16, range 0-65535) originally used in create_pure to generate this pure +proxy’s address. Must match exactly the index used during creation.

    • +
    • height (int) – The block number at which the pure proxy was created. This is returned in the PureCreated +event from create_pure.

    • +
    • ext_index (int) – The extrinsic index within the block at which the pure proxy was created. This is returned in the +PureCreated event from create_pure.

    • +
    +
    +
    Returns:
    +

    GenericCall instance for the Proxy.killPure extrinsic.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    + +
    +

    Warning

    +

    All access to this account will be lost. Any funds remaining in the pure proxy account will become +permanently inaccessible after this operation.

    +
    +
    + +
    +
    +poke_deposit()#
    +

    Adjust proxy and announcement deposits based on current runtime values.

    +
    +
    Returns:
    +

    GenericCall instance for the Proxy.pokeDeposit extrinsic.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    +

    Notes

    +
      +
    • This can be used by accounts to possibly lower their locked amount. The function automatically recalculates +deposits for both proxy relationships and announcements for the signing account. The transaction fee is waived +if the deposit amount has changed.

    • +
    • See Working with Proxies: <https://docs.learnbittensor.org/keys/proxies/create-proxy>

    • +
    +
    +
    + +
    +
    +proxy(real, force_proxy_type, call)#
    +

    Create a call to execute an operation through a proxy relationship.

    +
    +
    Parameters:
    +
      +
    • real (str) – The SS58 address of the real account on whose behalf the call is being made.

    • +
    • force_proxy_type (Optional[str]) – The type of proxy to use for the call. If None, any proxy type can be used. Otherwise, +must match one of the allowed proxy types that the signing account has for the real account.

    • +
    • call (scalecodec.GenericCall) – The inner call to be executed on behalf of the real account.

    • +
    +
    +
    Returns:
    +

    GenericCall instance for the Proxy.proxy extrinsic.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    +

    Notes

    + +
    +
    + +
    +
    +proxy_announced(delegate, real, force_proxy_type, call)#
    +

    Create a call to execute a previously announced proxied operation.

    +
    +
    Parameters:
    +
      +
    • delegate (str) – The SS58 address of the delegate proxy account that made the announcement.

    • +
    • real (str) – The SS58 address of the real account on whose behalf the call will be made.

    • +
    • force_proxy_type (Optional[str]) – The type of proxy to use for the call. If None, any proxy type can be used. Otherwise, +must match one of the allowed proxy types.

    • +
    • call (scalecodec.GenericCall) – The inner call to be executed on behalf of the real account. The hash of this call must match the +call_hash that was announced.

    • +
    +
    +
    Returns:
    +

    GenericCall instance for the Proxy.proxyAnnounced extrinsic.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    +

    Notes

    + +
    +
    + +
    +
    +reject_announcement(delegate, call_hash)#
    +

    Reject a proxy announcement.

    +
    +
    Parameters:
    +
      +
    • delegate (str) – The SS58 address of the delegate proxy account whose announcement is being rejected.

    • +
    • call_hash (str) – The hash of the call that was announced and is now being rejected (hex string with 0x +prefix).

    • +
    +
    +
    Returns:
    +

    GenericCall instance for the Proxy.rejectAnnouncement extrinsic.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    +

    Notes

    + +
    +
    + +
    +
    +remove_announcement(real, call_hash)#
    +

    Remove an announcement made by the signing proxy account.

    +
    +
    Parameters:
    +
      +
    • real (str) – The SS58 address of the real account on whose behalf the call was announced.

    • +
    • call_hash (str) – The hash of the call that was announced and is now being removed (hex string with 0x +prefix).

    • +
    +
    +
    Returns:
    +

    GenericCall instance for the Proxy.removeAnnouncement extrinsic.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    +

    Notes

    + +
    +
    + +
    +
    +remove_proxies()#
    +

    Remove all proxy relationships for the signing account.

    +
    +
    Returns:
    +

    GenericCall instance for the Proxy.removeProxies extrinsic.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    +

    Notes

    + +
    +
    + +
    +
    +remove_proxy(delegate, proxy_type, delay)#
    +

    Remove a specific proxy relationship.

    +
    +
    Parameters:
    +
      +
    • delegate (str) – The SS58 address of the delegate proxy account to remove.

    • +
    • proxy_type (str) – The type of proxy permissions to remove. Must match the value used when the proxy was added.

    • +
    • delay (int) – The announcement delay value (in blocks) for the proxy being removed. Must exactly match the delay +value that was set when the proxy was originally added. This is a required identifier for the specific +proxy relationship.

    • +
    +
    +
    Returns:
    +

    GenericCall instance for the Proxy.removeProxy extrinsic.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    +

    Notes

    +

    See Working with Proxies: <https://docs.learnbittensor.org/keys/proxies/create-proxy>

    +
    +
    + +
    + +
    +
    + + +
    + + + + + + + + +
    + + + + + + + +
    +
    + + +
    + + +
    +
    +
    + + + + + +
    +
    + + \ No newline at end of file diff --git a/static/python-api/html/autoapi/bittensor/core/extrinsics/pallets/subtensor_module/index.html b/static/python-api/html/autoapi/bittensor/core/extrinsics/pallets/subtensor_module/index.html new file mode 100644 index 0000000000..21b256ca93 --- /dev/null +++ b/static/python-api/html/autoapi/bittensor/core/extrinsics/pallets/subtensor_module/index.html @@ -0,0 +1,1223 @@ + + + + + + + + + + + bittensor.core.extrinsics.pallets.subtensor_module — Bittensor SDK Docs documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + +
    + +
    + + + + + +
    +
    + + + + + + +
    + + + +
    + +
    +
    + +
    +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + + + + + + + +
    + +
    +

    bittensor.core.extrinsics.pallets.subtensor_module#

    +
    +

    Classes#

    +
    + + + + + +

    SubtensorModule

    Factory class for creating GenericCall objects for SubtensorModule pallet functions.

    +
    +
    +
    +

    Module Contents#

    +
    +
    +class bittensor.core.extrinsics.pallets.subtensor_module.SubtensorModule#
    +

    Bases: bittensor.core.extrinsics.pallets.base.CallBuilder

    +

    Factory class for creating GenericCall objects for SubtensorModule pallet functions.

    +

    This class provides methods to create GenericCall instances for all SubtensorModule pallet extrinsics.

    +

    Works with both sync (Subtensor) and async (AsyncSubtensor) instances. For async operations, pass an AsyncSubtensor +instance and await the result.

    +
    +

    Example

    +

    # Sync usage +call = SubtensorModule(subtensor).start_call(netuid=14) +response = subtensor.sign_and_send_extrinsic(call=call, …)

    +

    # Async usage +call = await SubtensorModule(async_subtensor).start_call(netuid=14) +response = await async_subtensor.sign_and_send_extrinsic(call=call, …)

    +
    +
    +
    +add_stake(netuid, hotkey, amount_staked)#
    +

    Returns GenericCall instance for Subtensor function SubtensorModule.add_stake.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The netuid of the subnet to add stake to.

    • +
    • hotkey (str) – The hotkey SS58 address associated with validator.

    • +
    • amount_staked (int) – Amount of stake in RAO to add.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +add_stake_limit(netuid, hotkey, amount_staked, limit_price, allow_partial)#
    +

    Returns GenericCall instance for Subtensor function SubtensorModule.add_stake_limit.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The netuid of the subnet to add stake to.

    • +
    • hotkey (str) – The hotkey SS58 address associated with validator.

    • +
    • amount_staked (int) – Amount of stake in RAO to add.

    • +
    • limit_price (float) – The limit price expressed in units of RAO per one Alpha.

    • +
    • allow_partial (bool) – If True, allows partial unstaking if price tolerance exceeded.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +burned_register(netuid, hotkey)#
    +

    Returns GenericCall instance for Subtensor function SubtensorModule.burned_register.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The netuid of the subnet to register on.

    • +
    • hotkey (str) – The hotkey SS58 address associated with the neuron.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +claim_root(subnets)#
    +

    Returns GenericCall instance for Subtensor function SubtensorModule.claim_root.

    +
    +
    Parameters:
    +

    subnets (list[int]) – The netuids of the subnets to claim root for. Think about it as netuids.

    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +commit_mechanism_weights(netuid, mecid, commit_hash)#
    +

    Returns GenericCall instance for Subtensor function SubtensorModule.commit_mechanism_weights.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The unique identifier of the subnet.

    • +
    • mecid (int) – The subnet mechanism unique identifier.

    • +
    • commit_hash (str) – The hash of the commitment.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +commit_timelocked_mechanism_weights(netuid, mecid, commit, reveal_round, commit_reveal_version)#
    +

    Returns GenericCall instance for Subtensor function SubtensorModule.commit_mechanism_weights.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The unique identifier of the subnet.

    • +
    • mecid (int) – The subnet mechanism unique identifier.

    • +
    • commit (bytes) – Raw bytes of the encrypted and compressed uids & weights values for setting weights.

    • +
    • reveal_round (int) – Drand round number when weights have to be revealed. Based on Drand Quicknet network.

    • +
    • commit_reveal_version (int) – The version of the commit-reveal in the chain.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +decrease_take(hotkey, take)#
    +

    Returns GenericCall instance for Subtensor function SubtensorModule.decrease_take.

    +
    +
    Parameters:
    +
      +
    • hotkey (str) – SS58 address of the hotkey to set take for.

    • +
    • take (int) – The percentage of rewards that the delegate claims from nominators.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +increase_take(hotkey, take)#
    +

    Returns GenericCall instance for Subtensor function SubtensorModule.increase_take.

    +
    +
    Parameters:
    +
      +
    • hotkey (str) – SS58 address of the hotkey to set take for.

    • +
    • take (int) – The percentage of rewards that the delegate claims from nominators.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +move_stake(origin_netuid, origin_hotkey_ss58, destination_netuid, destination_hotkey_ss58, alpha_amount)#
    +

    Returns GenericCall instance for Subtensor function SubtensorModule.move_stake.

    +
    +
    Parameters:
    +
      +
    • origin_netuid (int) – The netuid of the source subnet.

    • +
    • origin_hotkey_ss58 (str) – The SS58 address of the source hotkey.

    • +
    • destination_netuid (int) – The netuid of the destination subnet.

    • +
    • destination_hotkey_ss58 (str) – The SS58 address of the destination hotkey.

    • +
    • alpha_amount (int) – Amount of origin Balance to move.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +register(netuid, coldkey, hotkey, block_number, nonce, work)#
    +

    Returns GenericCall instance for Subtensor function SubtensorModule.register.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The netuid of the subnet to register on.

    • +
    • coldkey (str) – The coldkey SS58 address associated with the neuron.

    • +
    • hotkey (str) – The hotkey SS58 address associated with the neuron.

    • +
    • block_number (int) – POW block number.

    • +
    • nonce (int) – POW nonce.

    • +
    • work (list[int]) – List representation of POW seal.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +register_network(hotkey)#
    +

    Returns GenericCall instance for Subtensor function SubtensorModule.register_network.

    +
    +
    Parameters:
    +

    hotkey (str) – The hotkey SS58 address associated with the subnet owner.

    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +remove_stake(netuid, hotkey, amount_unstaked)#
    +

    Returns GenericCall instance for Subtensor function SubtensorModule.remove_stake.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The netuid of the subnet to remove stake from.

    • +
    • hotkey (str) – The hotkey SS58 address associated with validator.

    • +
    • amount_unstaked (int) – Amount of stake in RAO to remove/unstake from the validator.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +remove_stake_full_limit(netuid, hotkey, limit_price=None)#
    +

    Returns GenericCall instance for Subtensor function SubtensorModule.remove_stake_full_limit.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The netuid of the subnet to remove stake from.

    • +
    • hotkey (str) – The hotkey SS58 address associated with validator.

    • +
    • limit_price (Optional[float]) – The limit price expressed in units of RAO per one Alpha.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +remove_stake_limit(netuid, hotkey, amount_unstaked, limit_price, allow_partial)#
    +

    Returns GenericCall instance for Subtensor function SubtensorModule.remove_stake_full.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The netuid of the subnet to remove stake from.

    • +
    • hotkey (str) – The hotkey SS58 address associated with validator.

    • +
    • amount_unstaked (int) – Amount of stake in RAO to remove/unstake from the validator.

    • +
    • limit_price (float) – The limit price expressed in units of RAO per one Alpha.

    • +
    • allow_partial (bool) – Allows partial stake execution of the amount.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +reveal_mechanism_weights(netuid, mecid, uids, values, salt, version_key)#
    +

    Returns GenericCall instance for Subtensor function SubtensorModule.reveal_mechanism_weights.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The unique identifier of the subnet.

    • +
    • mecid (int) – The subnet mechanism unique identifier.

    • +
    • uids (bittensor.core.types.UIDs) – List of neuron UIDs for which weights are being revealed. Think like UIDs.

    • +
    • values (bittensor.core.types.Weights) – List of weight values corresponding to each UID. Think like Weights.

    • +
    • salt (bittensor.core.types.Salt) – The salt used to generate the hash.

    • +
    • version_key (int) – Version key for compatibility with the network.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +root_register(hotkey)#
    +

    Returns GenericCall instance for Subtensor function SubtensorModule.root_register.

    +
    +
    Parameters:
    +

    hotkey (str) – The hotkey SS58 address associated with the neuron.

    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +serve_axon(netuid, version, ip, port, ip_type, protocol, placeholder1=0, placeholder2=0)#
    +

    Returns GenericCall instance for Subtensor function SubtensorModule.serve_axon.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The network uid to serve on.

    • +
    • version (int) – The bittensor version identifier.

    • +
    • ip (int) – Integer representation of endpoint ip.

    • +
    • port (int) – Endpoint port number i.e., 9221.

    • +
    • ip_type (int) – The endpoint ip version.

    • +
    • protocol (int) – An int representation of the protocol.

    • +
    • placeholder1 (int) – Placeholder for further extra params.

    • +
    • placeholder2 (int) – Placeholder for further extra params.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +serve_axon_tls(netuid, version, ip, port, ip_type, protocol, placeholder1=0, placeholder2=0, certificate=None)#
    +

    Returns GenericCall instance for Subtensor function SubtensorModule.serve_axon_tls.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The network uid to serve on.

    • +
    • version (int) – The bittensor version identifier.

    • +
    • ip (int) – Integer representation of endpoint ip.

    • +
    • port (int) – Endpoint port number i.e., 9221.

    • +
    • ip_type (int) – The endpoint ip version.

    • +
    • protocol (int) – An int representation of the protocol.

    • +
    • placeholder1 (int) – Placeholder for further extra params.

    • +
    • placeholder2 (int) – Placeholder for further extra params.

    • +
    • certificate (Optional[bittensor.utils.Certificate]) – Certificate to use for TLS. If None, no TLS will be used.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +set_children(hotkey, netuid, children)#
    +

    Returns GenericCall instance for Subtensor function SubtensorModule.set_children.

    +
    +
    Parameters:
    +
      +
    • hotkey (str) – The hotkey SS58 address associated with the neuron.

    • +
    • netuid (int) – The netuid of the subnet to set children for.

    • +
    • children (list[tuple[float, str]]) – List of tuples containing the proportion of stake to assign to each child hotkey.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +set_coldkey_auto_stake_hotkey(netuid, hotkey)#
    +

    Returns GenericCall instance for Subtensor function SubtensorModule.set_coldkey_auto_stake_hotkey.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The netuid of the subnet to set auto stake hotkey for.

    • +
    • hotkey (str) – The hotkey SS58 address associated with the validator neuron.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +set_mechanism_weights(netuid, mecid, dests, weights, version_key)#
    +

    Returns GenericCall instance for Subtensor function SubtensorModule.set_mechanism_weights.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The unique identifier of the subnet.

    • +
    • mecid (int) – The subnet mechanism unique identifier.

    • +
    • dests (bittensor.core.types.UIDs) – List of neuron UIDs for which weights are being revealed. Think like UIDs.

    • +
    • weights (bittensor.core.types.Weights) – List of weight values corresponding to each UID.

    • +
    • version_key (int) – Version key for compatibility with the network.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +set_pending_childkey_cooldown(cooldown)#
    +

    Returns GenericCall instance for Subtensor function SubtensorModule.set_pending_childkey_cooldown.

    +
    +
    Parameters:
    +

    cooldown (int) – The pending childkey cooldown period in seconds.

    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +set_root_claim_type(new_root_claim_type)#
    +

    Returns GenericCall instance for Subtensor function SubtensorModule.set_root_claim_type.

    +
    +
    Parameters:
    +

    new_root_claim_type (Literal['Swap', 'Keep'] | dict) – The new root claim type. Can be: +- String: “Swap” or “Keep” +- Dict: {“KeepSubnets”: {“subnets”: [1, 2, 3]}}

    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +set_subnet_identity(netuid, subnet_name, github_repo, subnet_contact, subnet_url, discord, description, logo_url, additional)#
    +

    Returns GenericCall instance for Subtensor function SubtensorModule.set_subnet_identity.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The netuid of the subnet to set identity for.

    • +
    • subnet_name (str) – The name of the subnet.

    • +
    • github_repo (str) – The GitHub repository URL of the subnet.

    • +
    • subnet_contact (str) – The contact information of the subnet owner.

    • +
    • subnet_url (str) – The URL of the subnet.

    • +
    • logo_url (str) – The URL of the subnet logo.

    • +
    • discord (str) – The Discord server URL of the subnet.

    • +
    • description (str) – The description of the subnet.

    • +
    • additional (str) – Additional information about the subnet.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +start_call(netuid)#
    +

    Returns GenericCall instance for Subtensor function SubtensorModule.start_call.

    +
    +
    Parameters:
    +

    netuid (int) – The netuid of the subnet to to be activated.

    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +swap_stake(hotkey, origin_netuid, destination_netuid, alpha_amount)#
    +

    Returns GenericCall instance for Subtensor function SubtensorModule.swap_stake.

    +
    +
    Parameters:
    +
      +
    • hotkey (str) – The hotkey SS58 address associated with the stake.

    • +
    • origin_netuid (int) – The source subnet UID.

    • +
    • destination_netuid (int) – The destination subnet UID.

    • +
    • alpha_amount (int) – Amount of stake in RAO to swap.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +swap_stake_limit(hotkey, origin_netuid, destination_netuid, alpha_amount, limit_price, allow_partial)#
    +

    Returns GenericCall instance for Subtensor function SubtensorModule.swap_stake_limit.

    +
    +
    Parameters:
    +
      +
    • hotkey (str) – The hotkey SS58 address associated with the stake.

    • +
    • origin_netuid (int) – The source subnet UID.

    • +
    • destination_netuid (int) – The destination subnet UID.

    • +
    • alpha_amount (int) – The amount of stake in RAO to swap.

    • +
    • allow_partial (bool) – If true, allows partial stake swaps when the full amount would exceed the price +tolerance.

    • +
    • limit_price (float) – Maximum allowed increase in a price ratio (0.005 = 0.5%).

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +transfer_stake(destination_coldkey, hotkey, origin_netuid, destination_netuid, alpha_amount)#
    +

    Returns GenericCall instance for Subtensor function SubtensorModule.transfer_stake.

    +
    +
    Parameters:
    +
      +
    • destination_coldkey (str) – SS58 address of the destination coldkey.

    • +
    • hotkey (str) – SS58 address of the hotkey associated with the stake.

    • +
    • origin_netuid (int) – Network UID of the origin subnet.

    • +
    • destination_netuid (int) – Network UID of the destination subnet.

    • +
    • alpha_amount (int) – The amount of stake in RAO to transfer as a Balance object.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    + +
    +
    + + +
    + + + + + + + + +
    + + + + + + + +
    +
    + + +
    + + +
    +
    +
    + + + + + +
    +
    + + \ No newline at end of file diff --git a/static/python-api/html/autoapi/bittensor/core/extrinsics/pallets/sudo/index.html b/static/python-api/html/autoapi/bittensor/core/extrinsics/pallets/sudo/index.html new file mode 100644 index 0000000000..aead8baba0 --- /dev/null +++ b/static/python-api/html/autoapi/bittensor/core/extrinsics/pallets/sudo/index.html @@ -0,0 +1,586 @@ + + + + + + + + + + + bittensor.core.extrinsics.pallets.sudo — Bittensor SDK Docs documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + +
    + +
    + + + + + +
    +
    + + + + + + +
    + + + +
    + +
    +
    + +
    +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + + +
    +

    bittensor.core.extrinsics.pallets.sudo

    + +
    +
    + +
    +

    Contents

    +
    + +
    +
    +
    + + + + +
    + +
    +

    bittensor.core.extrinsics.pallets.sudo#

    +
    +

    Classes#

    +
    + + + + + +

    Sudo

    Factory class for creating GenericCall objects for Sudo pallet functions.

    +
    +
    +
    +

    Module Contents#

    +
    +
    +class bittensor.core.extrinsics.pallets.sudo.Sudo#
    +

    Bases: bittensor.core.extrinsics.pallets.base.CallBuilder

    +

    Factory class for creating GenericCall objects for Sudo pallet functions.

    +

    This class provides methods to create GenericCall instances for all Sudo pallet extrinsics.

    +

    Works with both sync (Subtensor) and async (AsyncSubtensor) instances. For async operations, pass an AsyncSubtensor +instance and await the result.

    +
    +

    Example

    +

    # Nested sync calls (e.g., with Sudo) +inner_call = SubtensorModule(subtensor).set_pending_childkey_cooldown(cooldown=100) +sudo_call = Sudo(subtensor).sudo(call=inner_call) +response = subtensor.sign_and_send_extrinsic(call=sudo_call, …)

    +

    # Nested async calls (e.g., with Sudo) +inner_call = await SubtensorModule(subtensor).set_pending_childkey_cooldown(cooldown=100) +sudo_call = await Sudo(subtensor).sudo(call=inner_call) +response = subtensor.sign_and_send_extrinsic(call=sudo_call, …)

    +
    +
    +
    +sudo(call)#
    +

    Returns GenericCall instance for Subtensor function Sudo.sudo.

    +
    +
    Parameters:
    +

    call (scalecodec.GenericCall) – The call to be executed as sudo.

    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    + +
    +
    + + +
    + + + + + + + + +
    + + + + +
    + + +
    +
    + + +
    + + +
    +
    +
    + + + + + +
    +
    + + \ No newline at end of file diff --git a/static/python-api/html/autoapi/bittensor/core/extrinsics/pallets/swap/index.html b/static/python-api/html/autoapi/bittensor/core/extrinsics/pallets/swap/index.html new file mode 100644 index 0000000000..40685c72d8 --- /dev/null +++ b/static/python-api/html/autoapi/bittensor/core/extrinsics/pallets/swap/index.html @@ -0,0 +1,659 @@ + + + + + + + + + + + bittensor.core.extrinsics.pallets.swap — Bittensor SDK Docs documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + +
    + +
    + + + + + +
    +
    + + + + + + +
    + + + +
    + +
    +
    + +
    +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + + +
    +

    bittensor.core.extrinsics.pallets.swap

    + +
    + +
    +
    + + + + +
    + +
    +

    bittensor.core.extrinsics.pallets.swap#

    +
    +

    Classes#

    +
    + + + + + +

    Swap

    Factory class for creating GenericCall objects for Swap pallet functions.

    +
    +
    +
    +

    Module Contents#

    +
    +
    +class bittensor.core.extrinsics.pallets.swap.Swap#
    +

    Bases: bittensor.core.extrinsics.pallets.base.CallBuilder

    +

    Factory class for creating GenericCall objects for Swap pallet functions.

    +

    This class provides methods to create GenericCall instances for all Swap pallet extrinsics.

    +

    Works with both sync (Subtensor) and async (AsyncSubtensor) instances. For async operations, pass an AsyncSubtensor +instance and await the result.

    +
    +

    Example

    +

    # Sync usage +call = Swap(subtensor).toggle_user_liquidity(netuid=14, enable=True) +response = subtensor.sign_and_send_extrinsic(call=call, …)

    +

    # Async usage +call = await Swap(subtensor).toggle_user_liquidity(netuid=14, enable=True) +response = await async_subtensor.sign_and_send_extrinsic(call=call, …)

    +
    +
    +
    +add_liquidity(netuid, liquidity, tick_low, tick_high, hotkey=None)#
    +

    Returns GenericCall instance for Subtensor function Swap.add_liquidity.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The UID of the target subnet for which the call is being initiated.

    • +
    • liquidity (int) – The amount of liquidity in RAO to be added.

    • +
    • tick_low (int) – The lower bound of the price tick range.

    • +
    • tick_high (int) – The upper bound of the price tick range.

    • +
    • hotkey (Optional[str]) – The hotkey with staked TAO in Alpha. If not passed then the wallet hotkey is used.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +modify_position(netuid, hotkey, position_id, liquidity_delta)#
    +

    Returns GenericCall instance for Subtensor function Swap.modify_position.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The UID of the target subnet for which the call is being initiated.

    • +
    • hotkey (str) – The hotkey with staked TAO in Alpha. If not passed then the wallet hotkey is used.

    • +
    • position_id (int) – The id of the position record in the pool.

    • +
    • liquidity_delta (int) – The amount of liquidity in RAO to be added or removed (could be positive or negative).

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +remove_liquidity(netuid, hotkey, position_id)#
    +

    Returns GenericCall instance for Subtensor function Swap.remove_liquidity.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The UID of the target subnet for which the call is being initiated.

    • +
    • position_id (int) – The id of the position record in the pool.

    • +
    • hotkey (str) – The hotkey with staked TAO in Alpha. If not passed then the wallet hotkey is used.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    +
    +toggle_user_liquidity(netuid, enable)#
    +

    Returns GenericCall instance for Subtensor function Swap.toggle_user_liquidity.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The UID of the target subnet for which the call is being initiated.

    • +
    • enable (bool) – Boolean indicating whether to enable user liquidity.

    • +
    +
    +
    Returns:
    +

    GenericCall instance.

    +
    +
    Return type:
    +

    bittensor.core.extrinsics.pallets.base.Call

    +
    +
    +
    + +
    + +
    +
    + + +
    + + + + + + + + +
    + + + + + + + +
    +
    + + +
    + + +
    +
    +
    + + + + + +
    +
    + + \ No newline at end of file diff --git a/static/python-api/html/autoapi/bittensor/core/extrinsics/proxy/index.html b/static/python-api/html/autoapi/bittensor/core/extrinsics/proxy/index.html new file mode 100644 index 0000000000..627b4d5a2c --- /dev/null +++ b/static/python-api/html/autoapi/bittensor/core/extrinsics/proxy/index.html @@ -0,0 +1,1152 @@ + + + + + + + + + + + bittensor.core.extrinsics.proxy — Bittensor SDK Docs documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + +
    + +
    + + + + + +
    +
    + + + + + + +
    + + + +
    + +
    +
    + +
    +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + + + + + + + +
    + +
    +

    bittensor.core.extrinsics.proxy#

    +
    +

    Functions#

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    add_proxy_extrinsic(subtensor, wallet, delegate_ss58, ...)

    Adds a proxy relationship.

    announce_extrinsic(subtensor, wallet, ...[, ...])

    Announces a future call that will be executed through a proxy.

    create_pure_proxy_extrinsic(subtensor, wallet, ...[, ...])

    Creates a pure proxy account.

    kill_pure_proxy_extrinsic(subtensor, wallet, ...[, ...])

    Kills (removes) a pure proxy account.

    poke_deposit_extrinsic(subtensor, wallet, *[, ...])

    Adjusts deposits made for proxies and announcements based on current values.

    proxy_announced_extrinsic(subtensor, wallet, ...[, ...])

    Executes an announced call on behalf of the real account through a proxy.

    proxy_extrinsic(subtensor, wallet, real_account_ss58, ...)

    Executes a call on behalf of the real account through a proxy.

    reject_announcement_extrinsic(subtensor, wallet, ...)

    Rejects an announcement made by a proxy delegate.

    remove_announcement_extrinsic(subtensor, wallet, ...)

    Removes an announcement made by a proxy account.

    remove_proxies_extrinsic(subtensor, wallet, *[, ...])

    Removes all proxy relationships for the account.

    remove_proxy_extrinsic(subtensor, wallet, ...[, ...])

    Removes a proxy relationship.

    +
    +
    +
    +

    Module Contents#

    +
    +
    +bittensor.core.extrinsics.proxy.add_proxy_extrinsic(subtensor, wallet, delegate_ss58, proxy_type, delay, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Adds a proxy relationship.

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.subtensor.Subtensor) – Subtensor instance with the connection to the chain.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet object.

    • +
    • delegate_ss58 (str) – The SS58 address of the delegate proxy account.

    • +
    • proxy_type (Union[str, bittensor.core.chain_data.proxy.ProxyType]) – The type of proxy permissions (e.g., Any, NonTransfer, Governance, Staking). +Can be a string or ProxyType enum value. For available proxy types and their permissions, see the +documentation link in the Notes section below.

    • +
    • delay (int) – Optionally, include a delay in blocks. The number of blocks that must elapse between announcing and +executing a proxied transaction (time-lock period). A delay of 0 means the proxy can be used immediately +without announcements. A non-zero delay creates a time-lock, requiring the proxy to announce calls first, wait +for the delay period, then execute them, giving the real account time to review and reject unwanted operations.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You +can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    +
    +

    Notes

    + +
    +
    +

    Warning

    +
      +
    • The Any proxy type is dangerous as it grants full permissions to the proxy, including the ability to make +transfers and manage the account completely. Use with extreme caution.

    • +
    • If wait_for_inclusion=False or when block_hash is not available, the extrinsic receipt may not contain +triggered events. This means that any data that would normally be extracted from blockchain events (such as +proxy relationship details) will not be available in the response. To ensure complete event data is available, +either pass wait_for_inclusion=True when calling this function, or retrieve the data manually from the +blockchain using the extrinsic hash.

    • +
    +
    +
    + +
    +
    +bittensor.core.extrinsics.proxy.announce_extrinsic(subtensor, wallet, real_account_ss58, call_hash, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Announces a future call that will be executed through a proxy.

    +

    This extrinsic allows a proxy account to declare its intention to execute a specific call on behalf of a real +account after a delay period. The real account can review and either approve or reject the announcement.

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.subtensor.Subtensor) – Subtensor instance with the connection to the chain.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet object (should be the proxy account wallet).

    • +
    • real_account_ss58 (str) – The SS58 address of the real account on whose behalf the call will be made.

    • +
    • call_hash (str) – The hash of the call that will be executed in the future (hex string with 0x prefix).

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You +can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    +
    +

    Notes

    +
      +
    • A deposit is required when making an announcement. The deposit is returned when the announcement is +executed, rejected, or removed. The announcement can be executed after the delay period has passed.

    • +
    • See Working with Proxies: <https://docs.learnbittensor.org/keys/proxies/create-proxy>

    • +
    +
    +
    + +
    +
    +bittensor.core.extrinsics.proxy.create_pure_proxy_extrinsic(subtensor, wallet, proxy_type, delay, index, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Creates a pure proxy account.

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.subtensor.Subtensor) – Subtensor instance with the connection to the chain.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet object.

    • +
    • proxy_type (Union[str, bittensor.core.chain_data.proxy.ProxyType]) – The type of proxy permissions for the pure proxy. Can be a string or ProxyType enum value. For +available proxy types and their permissions, see the documentation link in the Notes section below.

    • +
    • delay (int) – Optionally, include a delay in blocks. The number of blocks that must elapse between announcing and +executing a proxied transaction (time-lock period). A delay of 0 means the pure proxy can be used +immediately without any announcement period. A non-zero delay creates a time-lock, requiring announcements +before execution to give the spawner time to review/reject.

    • +
    • index (int) – A salt value (u16, range 0-65535) used to generate unique pure proxy addresses. This should generally +be left as 0 unless you are creating batches of proxies. When creating multiple pure proxies with identical +parameters (same proxy_type and delay), different index values will produce different SS58 addresses. +This is not a sequential counter—you can use any unique values (e.g., 0, 100, 7, 42) in any order. The index +must be preserved as it’s required for kill_pure_proxy_extrinsic(). If creating multiple pure proxies in +a single batch transaction, each must have a unique index value.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You +can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    +
    +

    Notes

    + +
    +
    +

    Warning

    +
      +
    • The Any proxy type is dangerous as it grants full permissions to the proxy, including the ability to make +transfers and kill the proxy. Use with extreme caution.

    • +
    • If wait_for_inclusion=False or when block_hash is not available, the extrinsic receipt may not contain +triggered events. This means that any data that would normally be extracted from blockchain events (such as +the pure proxy account address) will not be available in the response. To ensure complete event data is available, +either pass wait_for_inclusion=True when calling this function, or retrieve the data manually from the +blockchain using the extrinsic hash.

    • +
    +
    +
    + +
    +
    +bittensor.core.extrinsics.proxy.kill_pure_proxy_extrinsic(subtensor, wallet, pure_proxy_ss58, spawner, proxy_type, index, height, ext_index, force_proxy_type=ProxyType.Any, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Kills (removes) a pure proxy account.

    +

    This method removes a pure proxy account that was previously created via create_pure_proxy(). The kill_pure call +must be executed through the pure proxy account itself, with the spawner acting as an “Any” proxy. This method +automatically handles this by executing the call via proxy().

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.subtensor.Subtensor) – Subtensor instance with the connection to the chain.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet object. The wallet.coldkey.ss58_address must be the spawner of the pure proxy (the +account that created it via create_pure_proxy_extrinsic()). The spawner must have an Any proxy +relationship with the pure proxy.

    • +
    • pure_proxy_ss58 (str) – The SS58 address of the pure proxy account to be killed. This is the address that was returned +in the create_pure_proxy_extrinsic() response.

    • +
    • spawner (str) – The SS58 address of the spawner account (the account that originally created the pure proxy via +create_pure_proxy_extrinsic()). This should match wallet.coldkey.ss58_address.

    • +
    • proxy_type (Union[str, bittensor.core.chain_data.proxy.ProxyType]) – The type of proxy permissions that were used when creating the pure proxy. This must match exactly +the proxy_type that was passed to create_pure_proxy_extrinsic().

    • +
    • index (int) – The salt value (u16, range 0-65535) originally used in create_pure_proxy_extrinsic() to generate +this pure proxy’s address. This value, combined with proxy_type, delay, and spawner, uniquely +identifies the pure proxy to be killed. Must match exactly the index used during creation.

    • +
    • height (int) – The block number at which the pure proxy was created. This is returned in the PureCreated event from +create_pure_proxy_extrinsic() and is required to identify the exact creation transaction.

    • +
    • ext_index (int) – The extrinsic index within the block at which the pure proxy was created. This is returned in the +PureCreated event from create_pure_proxy_extrinsic() and specifies the position of the creation +extrinsic within the block. Together with height, this uniquely identifies the creation transaction.

    • +
    • force_proxy_type (Optional[Union[str, bittensor.core.chain_data.proxy.ProxyType]]) – The proxy type relationship to use when executing kill_pure through the proxy mechanism. +Since pure proxies are keyless and cannot sign transactions, the spawner must act as a proxy for the pure +proxy to execute kill_pure. This parameter specifies which proxy type relationship between the spawner and +the pure proxy account should be used. The spawner must have a proxy relationship of this type (or Any) +with the pure proxy account. Defaults to ProxyType.Any for maximum compatibility. If None, Substrate +will automatically select an available proxy type from the spawner’s proxy relationships.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    +
    +

    Notes

    +
      +
    • The kill_pure call must be executed through the pure proxy account itself, with the spawner acting as a proxy. +This method automatically handles this by executing the call via proxy_extrinsic(). By default, +force_proxy_type is set to ProxyType.Any, meaning the spawner must have an Any proxy relationship +with the pure proxy. If you pass a different force_proxy_type, the spawner must have that specific proxy +type relationship with the pure proxy.

    • +
    • See Pure Proxies: <https://docs.learnbittensor.org/keys/proxies/pure-proxies>

    • +
    +
    +
    +

    Warning

    +

    All access to this account will be lost. Any funds remaining in the pure proxy account will become permanently +inaccessible after this operation.

    +
    +
    +

    Example

    +

    # After creating a pure proxy

    +

    create_response = subtensor.proxies.create_pure_proxy(

    +
    +

    wallet=spawner_wallet,

    +

    proxy_type=ProxyType.Any, # Type of proxy permissions for the pure proxy

    +

    delay=0,

    +

    index=0,

    +
    +

    )

    +

    pure_proxy_ss58 = create_response.data[“pure_account”]

    +

    spawner = create_response.data[“spawner”]

    +

    proxy_type_used = create_response.data[“proxy_type”] # The proxy_type used during creation

    +

    height = create_response.data[“height”]

    +

    ext_index = create_response.data[“ext_index”]

    +

    # Kill the pure proxy

    +

    # Note: force_proxy_type defaults to ProxyType.Any (spawner must have Any proxy relationship)

    +

    kill_response = subtensor.proxies.kill_pure_proxy(

    +
    +

    wallet=spawner_wallet,

    +

    pure_proxy_ss58=pure_proxy_ss58,

    +

    spawner=spawner,

    +

    proxy_type=proxy_type_used, # Must match the proxy_type used during creation

    +

    index=0,

    +

    height=height,

    +

    ext_index=ext_index,

    +

    # force_proxy_type=ProxyType.Any, # Optional: defaults to ProxyType.Any

    +
    +

    )

    +
    +
    + +
    +
    +bittensor.core.extrinsics.proxy.poke_deposit_extrinsic(subtensor, wallet, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Adjusts deposits made for proxies and announcements based on current values.

    +

    This can be used by accounts to possibly lower their locked amount. The function automatically recalculates deposits +for both proxy relationships and announcements for the signing account. The transaction fee is waived if the deposit +amount has changed.

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.subtensor.Subtensor) – Subtensor instance with the connection to the chain.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet object (the account whose deposits will be adjusted).

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    +
    +

    Notes

    +
    +
    When to use:
      +
    • After runtime upgrade, if deposit constants have changed.

    • +
    • After removing proxies/announcements, to free up excess locked funds.

    • +
    • Periodically to optimize locked deposit amounts.

    • +
    +
    +
    + +
    +
    + +
    +
    +bittensor.core.extrinsics.proxy.proxy_announced_extrinsic(subtensor, wallet, delegate_ss58, real_account_ss58, force_proxy_type, call, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Executes an announced call on behalf of the real account through a proxy.

    +

    This extrinsic executes a call that was previously announced via announce_extrinsic(). The call must match the +call_hash that was announced, and the delay period must have passed.

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.subtensor.Subtensor) – Subtensor instance with the connection to the chain.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet object (should be the proxy account wallet that made the announcement).

    • +
    • delegate_ss58 (str) – The SS58 address of the delegate proxy account that made the announcement.

    • +
    • real_account_ss58 (str) – The SS58 address of the real account on whose behalf the call will be made.

    • +
    • force_proxy_type (Optional[Union[str, bittensor.core.chain_data.proxy.ProxyType]]) – The type of proxy to use for the call. If None, any proxy type can be used. Otherwise, must +match one of the allowed proxy types. Can be a string or ProxyType enum value.

    • +
    • call (scalecodec.types.GenericCall) – The inner call to be executed on behalf of the real account (must match the announced call_hash).

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You +can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    +
    +

    Notes

    + +
    +
    + +
    +
    +bittensor.core.extrinsics.proxy.proxy_extrinsic(subtensor, wallet, real_account_ss58, force_proxy_type, call, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Executes a call on behalf of the real account through a proxy.

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.subtensor.Subtensor) – Subtensor instance with the connection to the chain.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet object (should be the proxy account wallet).

    • +
    • real_account_ss58 (str) – The SS58 address of the real account on whose behalf the call is being made.

    • +
    • force_proxy_type (Optional[Union[str, bittensor.core.chain_data.proxy.ProxyType]]) – The type of proxy to use for the call. If None, any proxy type can be used. Otherwise, must +match one of the allowed proxy types. Can be a string or ProxyType enum value.

    • +
    • call (scalecodec.types.GenericCall) – The inner call to be executed on behalf of the real account.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You +can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    +
    +

    Notes

    + +
    +
    + +
    +
    +bittensor.core.extrinsics.proxy.reject_announcement_extrinsic(subtensor, wallet, delegate_ss58, call_hash, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Rejects an announcement made by a proxy delegate.

    +

    This extrinsic allows the real account to reject an announcement made by a proxy delegate, preventing the announced +call from being executed. Once rejected, the announcement cannot be executed and the announcement deposit is +returned to the delegate.

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.subtensor.Subtensor) – Subtensor instance with the connection to the chain.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet object (should be the real account wallet).

    • +
    • delegate_ss58 (str) – The SS58 address of the delegate proxy account whose announcement is being rejected.

    • +
    • call_hash (str) – The hash of the call that was announced and is now being rejected (hex string with 0x prefix).

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You +can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    +
    +

    Notes

    + +
    +
    + +
    +
    +bittensor.core.extrinsics.proxy.remove_announcement_extrinsic(subtensor, wallet, real_account_ss58, call_hash, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Removes an announcement made by a proxy account.

    +

    This extrinsic allows the proxy account to remove its own announcement before it is executed or rejected. This frees +up the announcement deposit.

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.subtensor.Subtensor) – Subtensor instance with the connection to the chain.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet object (should be the proxy account wallet that made the announcement).

    • +
    • real_account_ss58 (str) – The SS58 address of the real account on whose behalf the call was announced.

    • +
    • call_hash (str) – The hash of the call that was announced and is now being removed (hex string with 0x prefix).

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You +can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    +
    +

    Notes

    + +
    +
    + +
    +
    +bittensor.core.extrinsics.proxy.remove_proxies_extrinsic(subtensor, wallet, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Removes all proxy relationships for the account.

    +

    This removes all proxy relationships in a single call, which is more efficient than removing them one by one. The +deposit for all proxies will be returned.

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.subtensor.Subtensor) – Subtensor instance with the connection to the chain.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet object (the account whose proxies will be removed).

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    +
    +

    Notes

    + +
    +
    + +
    +
    +bittensor.core.extrinsics.proxy.remove_proxy_extrinsic(subtensor, wallet, delegate_ss58, proxy_type, delay, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Removes a proxy relationship.

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.subtensor.Subtensor) – Subtensor instance with the connection to the chain.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet object.

    • +
    • delegate_ss58 (str) – The SS58 address of the delegate proxy account to remove.

    • +
    • proxy_type (Union[str, bittensor.core.chain_data.proxy.ProxyType]) – The type of proxy permissions to remove. Can be a string or ProxyType enum value.

    • +
    • delay (int) – The announcement delay value (in blocks) for the proxy being removed. Must exactly match the delay value +that was set when the proxy was originally added. This is a required identifier for the specific proxy +relationship, not a delay before removal takes effect (removal is immediate).

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You +can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    +
    +

    Notes

    + +
    +
    + +
    +
    + + +
    + + + + + + + + +
    + + + + + + + +
    +
    + + +
    + + +
    +
    +
    + + + + + +
    +
    + + \ No newline at end of file diff --git a/static/python-api/html/autoapi/bittensor/core/extrinsics/registration/index.html b/static/python-api/html/autoapi/bittensor/core/extrinsics/registration/index.html index 907bcd8d21..5599547f5f 100644 --- a/static/python-api/html/autoapi/bittensor/core/extrinsics/registration/index.html +++ b/static/python-api/html/autoapi/bittensor/core/extrinsics/registration/index.html @@ -49,7 +49,7 @@ - + @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -418,21 +421,18 @@

    Contents

    bittensor.core.extrinsics.registration#

    -

    This module provides functionalities for registering a wallet with the subtensor network using Proof-of-Work (PoW).

    -

    Extrinsics: -- register_extrinsic: Registers the wallet to the subnet. -- burned_register_extrinsic: Registers the wallet to chain by recycling TAO.

    +

    This module provides sync functionalities for registering a wallet with the subtensor network using Proof-of-Work (PoW).

    Functions#

    - + - + - + @@ -446,134 +446,139 @@

    Functions#

    -bittensor.core.extrinsics.registration.burned_register_extrinsic(subtensor, wallet, netuid, wait_for_inclusion=False, wait_for_finalization=True, period=None)[source]#
    +bittensor.core.extrinsics.registration.burned_register_extrinsic(subtensor, wallet, netuid, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#

    Registers the wallet to chain by recycling TAO.

    Parameters:
    • subtensor (bittensor.core.subtensor.Subtensor) – Subtensor instance.

    • -
    • wallet (bittensor.wallet) – Bittensor wallet object.

    • -
    • netuid (int) – The netuid of the subnet to register on.

    • -
    • wait_for_inclusion (bool) – If set, waits for the extrinsic to enter a block before returning True, or -returns False if the extrinsic fails to enter the block within the timeout.

    • -
    • wait_for_finalization (bool) – If set, waits for the extrinsic to be finalized on the chain before returning -True, or returns False if the extrinsic fails to be finalized within the timeout.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If -the transaction is not included in a block within that number of blocks, it will expire and be rejected. -You can think of it as an expiration date for the transaction.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet object.

    • +
    • netuid (int) – The netuid of the subnet to register on.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    -
    Flag is True if extrinsic was finalized or included in the block. If we did not wait for

    finalization / inclusion, the response is True.

    -
    -
    -

    +

    The result object of the extrinsic execution.

    Return type:
    -

    success (bool)

    +

    ExtrinsicResponse

    -bittensor.core.extrinsics.registration.register_extrinsic(subtensor, wallet, netuid, wait_for_inclusion=False, wait_for_finalization=True, max_allowed_attempts=3, output_in_place=True, cuda=False, dev_id=0, tpb=256, num_processes=None, update_interval=None, log_verbose=False, period=None)[source]#
    -

    Registers the wallet to the chain.

    +bittensor.core.extrinsics.registration.register_extrinsic(subtensor, wallet, netuid, max_allowed_attempts=3, output_in_place=True, cuda=False, dev_id=0, tpb=256, num_processes=None, update_interval=None, log_verbose=False, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]# +

    Registers a neuron on the Bittensor subnet with provided netuid using the provided wallet.

    Parameters:
    • subtensor (bittensor.core.subtensor.Subtensor) – Subtensor object to use for chain interactions

    • wallet (bittensor_wallet.Wallet) – Bittensor wallet object.

    • -
    • netuid (int) – The netuid of the subnet to register on.

    • -
    • wait_for_inclusion (bool) – If set, waits for the extrinsic to enter a block before returning True, or returns -False if the extrinsic fails to enter the block within the timeout.

    • -
    • wait_for_finalization (bool) – If set, waits for the extrinsic to be finalized on the chain before returning -True, or returns False if the extrinsic fails to be finalized within the timeout.

    • -
    • max_allowed_attempts (int) – Maximum number of attempts to register the wallet.

    • -
    • output_in_place (bool) – Whether the POW solving should be outputted to the console as it goes along.

    • -
    • cuda (bool) – If True, the wallet should be registered using CUDA device(s).

    • -
    • dev_id (Union[list[int], int]) – The CUDA device id to use, or a list of device ids.

    • -
    • tpb (int) – The number of threads per block (CUDA).

    • -
    • num_processes (Optional[int]) – The number of processes to use to register.

    • -
    • update_interval (Optional[int]) – The number of nonces to solve between updates.

    • -
    • log_verbose (bool) – If True, the registration process will log more information.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If -the transaction is not included in a block within that number of blocks, it will expire and be rejected. -You can think of it as an expiration date for the transaction.

    • +
    • netuid (int) – The netuid of the subnet to register on.

    • +
    • max_allowed_attempts (int) – Maximum number of attempts to register the wallet.

    • +
    • output_in_place (bool) – Whether the POW solving should be outputted to the console as it goes along.

    • +
    • cuda (bool) – If True, the wallet should be registered using CUDA device(s).

    • +
    • dev_id (Union[list[int], int]) – The CUDA device id to use, or a list of device ids.

    • +
    • tpb (int) – The number of threads per block (CUDA).

    • +
    • num_processes (Optional[int]) – The number of processes to use to register.

    • +
    • update_interval (Optional[int]) – The number of nonces to solve between updates.

    • +
    • log_verbose (bool) – If True, the registration process will log more information.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    -
    True if extrinsic was finalized or included in the block. If we did not wait for finalization/inclusion, the

    response is True.

    -
    -
    -

    +

    The result object of the extrinsic execution.

    Return type:
    -

    bool

    +

    ExtrinsicResponse

    -bittensor.core.extrinsics.registration.register_subnet_extrinsic(subtensor, wallet, wait_for_inclusion=False, wait_for_finalization=True, period=None)[source]#
    +bittensor.core.extrinsics.registration.register_subnet_extrinsic(subtensor, wallet, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#

    Registers a new subnetwork on the Bittensor blockchain.

    Parameters:
      -
    • subtensor (Subtensor) – The subtensor interface to send the extrinsic.

    • -
    • wallet (Wallet) – The wallet to be used for subnet registration.

    • -
    • wait_for_inclusion (bool) – If set, waits for the extrinsic to enter a block before returning true.

    • -
    • wait_for_finalization (bool) – If set, waits for the extrinsic to be finalized on the chain before returning true.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If -the transaction is not included in a block within that number of blocks, it will expire and be rejected. -You can think of it as an expiration date for the transaction.

    • +
    • subtensor (bittensor.core.subtensor.Subtensor) – The subtensor interface to send the extrinsic.

    • +
    • wallet (bittensor_wallet.Wallet) – The wallet to be used for subnet registration.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    True if the subnet registration was successful, False otherwise.

    +

    The result object of the extrinsic execution.

    Return type:
    -

    bool

    +

    ExtrinsicResponse

    -bittensor.core.extrinsics.registration.set_subnet_identity_extrinsic(subtensor, wallet, netuid, subnet_name, github_repo, subnet_contact, subnet_url, discord, description, additional, wait_for_inclusion=False, wait_for_finalization=True, period=None)[source]#
    +bittensor.core.extrinsics.registration.set_subnet_identity_extrinsic(subtensor, wallet, netuid, subnet_name, github_repo, subnet_contact, subnet_url, logo_url, discord, description, additional, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#

    Set the identity information for a given subnet.

    Parameters:
      -
    • subtensor (Subtensor) – An instance of the Subtensor class to interact with the blockchain.

    • -
    • wallet (Wallet) – A wallet instance used to sign and submit the extrinsic.

    • -
    • netuid (int) – The unique ID for the subnet.

    • -
    • subnet_name (str) – The name of the subnet to assign the identity information.

    • -
    • github_repo (str) – URL of the GitHub repository related to the subnet.

    • -
    • subnet_contact (str) – Subnet’s contact information, e.g., email or contact link.

    • -
    • subnet_url (str) – The URL of the subnet’s primary web portal.

    • -
    • discord (str) – Discord server or contact for the subnet.

    • -
    • description (str) – A textual description of the subnet.

    • -
    • additional (str) – Any additional metadata or information related to the subnet.

    • -
    • wait_for_inclusion (bool) – Whether to wait for the extrinsic inclusion in a block (default: False).

    • -
    • wait_for_finalization (bool) – Whether to wait for the extrinsic finalization in a block (default: True).

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If -the transaction is not included in a block within that number of blocks, it will expire and be rejected. -You can think of it as an expiration date for the transaction.

    • +
    • subtensor (bittensor.core.subtensor.Subtensor) – An instance of the Subtensor class to interact with the blockchain.

    • +
    • wallet (bittensor_wallet.Wallet) – A wallet instance used to sign and submit the extrinsic.

    • +
    • netuid (int) – The unique ID for the subnet.

    • +
    • subnet_name (str) – The name of the subnet to assign the identity information.

    • +
    • github_repo (str) – URL of the GitHub repository related to the subnet.

    • +
    • subnet_contact (str) – Subnet’s contact information, e.g., email or contact link.

    • +
    • subnet_url (str) – The URL of the subnet’s primary web portal.

    • +
    • logo_url (str) – The URL of the logo’s primary web portal.

    • +
    • discord (str) – Discord server or contact for the subnet.

    • +
    • description (str) – A textual description of the subnet.

    • +
    • additional (str) – Any additional metadata or information related to the subnet.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    -
    A tuple where the first element indicates success or failure (True/False), and the second

    element contains a descriptive message.

    -
    -
    -

    +

    The result object of the extrinsic execution.

    Return type:
    -

    tuple[bool, str]

    +

    ExtrinsicResponse

    @@ -593,12 +598,12 @@

    Module Contents

    previous

    -

    bittensor.core.extrinsics.move_stake

    +

    bittensor.core.extrinsics.proxy

    bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -399,8 +402,9 @@

    Contents

    @@ -420,11 +424,14 @@

    Contents

    Functions#

  • burned_register_extrinsic(subtensor, wallet, netuid[, ...])

    burned_register_extrinsic(subtensor, wallet, netuid, *)

    Registers the wallet to chain by recycling TAO.

    register_extrinsic(subtensor, wallet, netuid[, ...])

    Registers the wallet to the chain.

    Registers a neuron on the Bittensor subnet with provided netuid using the provided wallet.

    register_subnet_extrinsic(subtensor, wallet[, ...])

    register_subnet_extrinsic(subtensor, wallet, *[, ...])

    Registers a new subnetwork on the Bittensor blockchain.

    set_subnet_identity_extrinsic(subtensor, wallet, ...)

    - - + + + + + - - + +

    root_register_extrinsic(subtensor, wallet[, ...])

    Registers the wallet to the root network.

    claim_root_extrinsic(subtensor, wallet, netuids, *[, ...])

    Claims the root emissions for a coldkey.

    root_register_extrinsic(subtensor, wallet, *[, ...])

    Registers the neuron to the root network.

    set_root_weights_extrinsic(subtensor, wallet, netuids, ...)

    Sets the given weights and values on chain for a given wallet hotkey account.

    set_root_claim_type_extrinsic(subtensor, wallet, ...)

    Sets the root claim type for the coldkey in provided wallet.

    @@ -433,67 +440,97 @@

    Functions

    Module Contents#

    -
    -bittensor.core.extrinsics.root.root_register_extrinsic(subtensor, wallet, wait_for_inclusion=False, wait_for_finalization=True, period=None)[source]#
    -

    Registers the wallet to the root network.

    +
    +bittensor.core.extrinsics.root.claim_root_extrinsic(subtensor, wallet, netuids, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Claims the root emissions for a coldkey.

    Parameters:
      -
    • subtensor (bittensor.core.subtensor.Subtensor) – The Subtensor object

    • -
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet object.

    • -
    • wait_for_inclusion (bool) – If set, waits for the extrinsic to enter a block before returning True, or returns -False if the extrinsic fails to enter the block within the timeout.

    • -
    • wait_for_finalization (bool) – If set, waits for the extrinsic to be finalized on the chain before returning -True, or returns False if the extrinsic fails to be finalized within the timeout.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If -the transaction is not included in a block within that number of blocks, it will expire and be rejected. -You can think of it as an expiration date for the transaction.

    • +
    • subtensor (bittensor.core.subtensor.Subtensor) – Subtensor instance to interact with the blockchain.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor Wallet instance.

    • +
    • netuids (bittensor.core.types.UIDs) – The netuids to claim root emissions for.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    -
    True if extrinsic was finalized or included in the block. If we did not wait for finalization/inclusion, the

    response is True.

    -
    -
    -

    +

    The result object of the extrinsic execution.

    Return type:
    -

    bool

    +

    ExtrinsicResponse

    -
    -bittensor.core.extrinsics.root.set_root_weights_extrinsic(subtensor, wallet, netuids, weights, version_key=0, wait_for_inclusion=False, wait_for_finalization=False, period=None)[source]#
    -

    Sets the given weights and values on chain for a given wallet hotkey account.

    +
    +bittensor.core.extrinsics.root.root_register_extrinsic(subtensor, wallet, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#
    +

    Registers the neuron to the root network.

    Parameters:
      -
    • subtensor (bittensor.core.subtensor.Subtensor) – The Subtensor object

    • -
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet object.

    • -
    • netuids (Union[NDArray[np.int64], list[int]]) – The netuid of the subnet to set weights for.

    • -
    • weights (Union[NDArray[np.float32], list[float]]) – Weights to set. These must be floats and must correspond -to the passed netuid s.

    • -
    • version_key (int) – The version key of the validator.

    • -
    • wait_for_inclusion (bool) – If set, waits for the extrinsic to enter a block before returning True, or returns -False if the extrinsic fails to enter the block within the timeout.

    • -
    • wait_for_finalization (bool) – If set, waits for the extrinsic to be finalized on the chain before returning -True`, or returns False if the extrinsic fails to be finalized within the timeout.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If -the transaction is not included in a block within that number of blocks, it will expire and be rejected. -You can think of it as an expiration date for the transaction.

    • +
    • subtensor (bittensor.core.subtensor.Subtensor) – Subtensor instance to interact with the blockchain.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor Wallet instance.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    -
    True if extrinsic was finalized or included in the block. If we did not wait for finalization/inclusion, the

    response is True.

    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    -

    +
    + +
    +
    +bittensor.core.extrinsics.root.set_root_claim_type_extrinsic(subtensor, wallet, new_root_claim_type, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Sets the root claim type for the coldkey in provided wallet.

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.subtensor.Subtensor) – Subtensor instance to interact with the blockchain.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor Wallet instance.

    • +
    • new_root_claim_type (Literal['Swap', 'Keep'] | RootClaimType | dict) – The new root claim type to set. Can be: +- String: “Swap” or “Keep” +- RootClaimType: RootClaimType.Swap, RootClaimType.Keep +- Dict: {“KeepSubnets”: {“subnets”: [1, 2, 3]}} +- Callable: RootClaimType.KeepSubnets([1, 2, 3])

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    Return type:
    -

    bool

    +

    ExtrinsicResponse

    @@ -549,8 +586,9 @@

    Module Contents
  • Functions
  • Module Contents
  • diff --git a/static/python-api/html/autoapi/bittensor/core/extrinsics/serving/index.html b/static/python-api/html/autoapi/bittensor/core/extrinsics/serving/index.html index 7df0ea143c..8e6c988098 100644 --- a/static/python-api/html/autoapi/bittensor/core/extrinsics/serving/index.html +++ b/static/python-api/html/autoapi/bittensor/core/extrinsics/serving/index.html @@ -48,7 +48,7 @@ - + @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -399,9 +402,7 @@

    Contents

    diff --git a/static/python-api/html/autoapi/bittensor/core/extrinsics/start_call/index.html b/static/python-api/html/autoapi/bittensor/core/extrinsics/start_call/index.html index 8906a7c27f..eb771654f7 100644 --- a/static/python-api/html/autoapi/bittensor/core/extrinsics/start_call/index.html +++ b/static/python-api/html/autoapi/bittensor/core/extrinsics/start_call/index.html @@ -48,7 +48,7 @@ - + @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -419,7 +422,7 @@

    Contents

    Functions#

    - + @@ -430,31 +433,32 @@

    Functions#

    -bittensor.core.extrinsics.start_call.start_call_extrinsic(subtensor, wallet, netuid, wait_for_inclusion=True, wait_for_finalization=False, period=None)#
    +bittensor.core.extrinsics.start_call.start_call_extrinsic(subtensor, wallet, netuid, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=False, wait_for_revealed_execution=True)[source]#

    Submits a start_call extrinsic to the blockchain, to trigger the start call process for a subnet (used to start a new subnet’s emission mechanism).

    Parameters:
      -
    • subtensor (Subtensor) – The Subtensor client instance used for blockchain interaction.

    • -
    • wallet (Wallet) – The wallet used to sign the extrinsic (must be unlocked).

    • -
    • netuid (int) – The UID of the target subnet for which the call is being initiated.

    • -
    • wait_for_inclusion (bool, optional) – Whether to wait for the extrinsic to be included in a block. Defaults to True.

    • -
    • wait_for_finalization (bool, optional) – Whether to wait for finalization of the extrinsic. Defaults to False.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If +

    • subtensor (bittensor.core.subtensor.Subtensor) – The Subtensor client instance used for blockchain interaction.

    • +
    • wallet (bittensor_wallet.Wallet) – The wallet used to sign the extrinsic (must be unlocked).

    • +
    • netuid (int) – The UID of the target subnet for which the call is being initiated.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the transaction is not included in a block within that number of blocks, it will expire and be rejected. You can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the extrinsic to be included in a block.

    • +
    • wait_for_finalization (bool) – Whether to wait for finalization of the extrinsic.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

      -
    • True and a success message if the extrinsic is successfully submitted or processed.

    • -
    • False and an error message if the submission fails or the wallet cannot be unlocked.

    • -
    -

    +

    The result object of the extrinsic execution.

    Return type:
    -

    Tuple[bool, str]

    +

    ExtrinsicResponse

    @@ -483,11 +487,11 @@

    Module Contents

    next

    -

    bittensor.core.extrinsics.take

    +

    bittensor.core.extrinsics.sudo

    diff --git a/static/python-api/html/autoapi/bittensor/core/extrinsics/sudo/index.html b/static/python-api/html/autoapi/bittensor/core/extrinsics/sudo/index.html new file mode 100644 index 0000000000..f5143b9f04 --- /dev/null +++ b/static/python-api/html/autoapi/bittensor/core/extrinsics/sudo/index.html @@ -0,0 +1,642 @@ + + + + + + + + + + + bittensor.core.extrinsics.sudo — Bittensor SDK Docs documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + Ctrl+K + + + +
    + +
    + + + + + +
    +
    + + + + + + +
    + + + +
    + +
    +
    + +
    +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + + + + + + + +
    + +
    +

    bittensor.core.extrinsics.sudo#

    +
    +

    Functions#

    +

    start_call_extrinsic(subtensor, wallet, netuid[, ...])

    start_call_extrinsic(subtensor, wallet, netuid, *[, ...])

    Submits a start_call extrinsic to the blockchain, to trigger the start call process for a subnet (used to start a

    + + + + + + + + + + + +

    sudo_set_admin_freeze_window_extrinsic(subtensor, ...)

    Sets the admin freeze window length (in blocks) at the end of a tempo.

    sudo_set_mechanism_count_extrinsic(subtensor, wallet, ...)

    Sets the number of subnet mechanisms.

    sudo_set_mechanism_emission_split_extrinsic(subtensor, ...)

    Sets the emission split between mechanisms in a provided subnet.

    +
    + +
    +

    Module Contents#

    +
    +
    +bittensor.core.extrinsics.sudo.sudo_set_admin_freeze_window_extrinsic(subtensor, wallet, window, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True)#
    +

    Sets the admin freeze window length (in blocks) at the end of a tempo.

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.subtensor.Subtensor) – Subtensor instance.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor Wallet instance.

    • +
    • window (int) – The amount of blocks to freeze in the end of a tempo.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    +
    + +
    +
    +bittensor.core.extrinsics.sudo.sudo_set_mechanism_count_extrinsic(subtensor, wallet, netuid, mech_count, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True)#
    +

    Sets the number of subnet mechanisms.

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.subtensor.Subtensor) – Subtensor instance.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor Wallet instance.

    • +
    • netuid (int) – The subnet unique identifier.

    • +
    • mech_count (int) – The amount of subnet mechanism to be set.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    +
    + +
    +
    +bittensor.core.extrinsics.sudo.sudo_set_mechanism_emission_split_extrinsic(subtensor, wallet, netuid, maybe_split, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True)#
    +

    Sets the emission split between mechanisms in a provided subnet.

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.subtensor.Subtensor) – Subtensor instance.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor Wallet instance.

    • +
    • netuid (int) – The subnet unique identifier.

    • +
    • maybe_split (bittensor.core.types.Weights) – List of emission weights (positive integers) for each subnet mechanism.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    +
    +

    Note

    +

    The maybe_split list defines the relative emission share for each subnet mechanism. +Its length must match the number of active mechanisms in the subnet or be shorter, but not equal to zero. For +example, [3, 1, 1] distributes emissions in a 3:1:1 ratio across subnet mechanisms 0, 1, and 2. Each mechanism’s +emission share is calculated as: share[i] = maybe_split[i] / sum(maybe_split)

    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + + + + + + + + + + +
    +
    + + \ No newline at end of file diff --git a/static/python-api/html/autoapi/bittensor/core/extrinsics/take/index.html b/static/python-api/html/autoapi/bittensor/core/extrinsics/take/index.html index 26eac7a8a1..cecf279e4d 100644 --- a/static/python-api/html/autoapi/bittensor/core/extrinsics/take/index.html +++ b/static/python-api/html/autoapi/bittensor/core/extrinsics/take/index.html @@ -49,7 +49,7 @@ - + @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -399,8 +402,7 @@

    Contents

    @@ -420,10 +422,7 @@

    Contents

    Functions#

    - - - - + @@ -433,57 +432,34 @@

    Functions

    Module Contents#

    -
    -bittensor.core.extrinsics.take.decrease_take_extrinsic(subtensor, wallet, hotkey_ss58, take, wait_for_inclusion=True, wait_for_finalization=True, raise_error=False, period=None)#
    -

    Sets the delegate take percentage for a neuron identified by its hotkey.

    -
    -
    Parameters:
    -
      -
    • subtensor (Subtensor) – Blockchain connection.

    • -
    • wallet (Wallet) – The wallet to sign the extrinsic.

    • -
    • hotkey_ss58 (str) – SS58 address of the hotkey to set take for.

    • -
    • take (int) – The percentage of rewards that the delegate claims from nominators.

    • -
    • wait_for_inclusion (bool, optional) – Wait for inclusion before returning. Defaults to True.

    • -
    • wait_for_finalization (bool, optional) – Wait for finalization before returning. Defaults to True.

    • -
    • raise_error (bool, optional) – Raise error on failure. Defaults to False.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. -If the transaction is not included in a block within that number of blocks, it will expire and be rejected. -You can think of it as an expiration date for the transaction.

    • -
    -
    -
    Returns:
    -

    Success flag and status message.

    -
    -
    Return type:
    -

    tuple[bool, str]

    -
    -
    -
    - -
    -
    -bittensor.core.extrinsics.take.increase_take_extrinsic(subtensor, wallet, hotkey_ss58, take, wait_for_inclusion=True, wait_for_finalization=True, raise_error=False, period=None)#
    +
    +bittensor.core.extrinsics.take.set_take_extrinsic(subtensor, wallet, hotkey_ss58, take, action, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#

    Sets the delegate ‘take’ percentage for a neuron identified by its hotkey.

    Parameters:
      -
    • subtensor (Subtensor) – Blockchain connection.

    • -
    • wallet (Wallet) – The wallet to sign the extrinsic.

    • -
    • hotkey_ss58 (str) – SS58 address of the hotkey to set take for.

    • -
    • take (int) – The percentage of rewards that the delegate claims from nominators.

    • -
    • wait_for_inclusion (bool, optional) – Wait for inclusion before returning. Defaults to True.

    • -
    • wait_for_finalization (bool, optional) – Wait for finalization before returning. Defaults to True.

    • -
    • raise_error (bool, optional) – Raise error on failure. Defaults to False.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If -the transaction is not included in a block within that number of blocks, it will expire and be rejected. -You can think of it as an expiration date for the transaction.

    • +
    • subtensor (bittensor.core.subtensor.Subtensor) – The Subtensor instance.

    • +
    • wallet (bittensor_wallet.bittensor_wallet.Wallet) – The wallet to sign the extrinsic.

    • +
    • hotkey_ss58 (str) – SS58 address of the hotkey to set take for.

    • +
    • take (int) – The percentage of rewards that the delegate claims from nominators.

    • +
    • action (Literal['increase_take', 'decrease_take']) – The call function to use to set the take. Can be either “increase_take” or “decrease_take”.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    Success flag and status message.

    +

    The result object of the extrinsic execution.

    Return type:
    -

    tuple[bool, str]

    +

    ExtrinsicResponse

    @@ -503,12 +479,12 @@

    Module Contents

    previous

    -

    bittensor.core.extrinsics.start_call

    +

    bittensor.core.extrinsics.sudo

    Module Contents
  • Functions
  • Module Contents
  • diff --git a/static/python-api/html/autoapi/bittensor/core/extrinsics/transfer/index.html b/static/python-api/html/autoapi/bittensor/core/extrinsics/transfer/index.html index 86888ca8a3..e086d6397e 100644 --- a/static/python-api/html/autoapi/bittensor/core/extrinsics/transfer/index.html +++ b/static/python-api/html/autoapi/bittensor/core/extrinsics/transfer/index.html @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -419,7 +422,7 @@

    Contents

    Functions#

  • decrease_take_extrinsic(subtensor, wallet, ...[, ...])

    Sets the delegate take percentage for a neuron identified by its hotkey.

    increase_take_extrinsic(subtensor, wallet, ...[, ...])

    set_take_extrinsic(subtensor, wallet, hotkey_ss58, ...)

    Sets the delegate 'take' percentage for a neuron identified by its hotkey.

    - + @@ -430,35 +433,34 @@

    Functions#

    -bittensor.core.extrinsics.transfer.transfer_extrinsic(subtensor, wallet, dest, amount, transfer_all=False, wait_for_inclusion=True, wait_for_finalization=False, keep_alive=True, period=None)[source]#
    +bittensor.core.extrinsics.transfer.transfer_extrinsic(subtensor, wallet, destination_ss58, amount, keep_alive=True, transfer_all=False, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#

    Transfers funds from this wallet to the destination public key address.

    Parameters:
    • subtensor (bittensor.core.subtensor.Subtensor) – the Subtensor object used for transfer

    • -
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet object to make transfer from.

    • -
    • dest (str) – Destination public key address (ss58_address or ed25519) of recipient.

    • -
    • amount (bittensor.utils.balance.Balance) – Amount to stake as Bittensor balance.

    • -
    • transfer_all (bool) – Whether to transfer all funds from this wallet to the destination address.

    • -
    • wait_for_inclusion (bool) – If set, waits for the extrinsic to enter a block before returning True, or returns -False if the extrinsic fails to enter the block within the timeout.

    • -
    • wait_for_finalization (bool) – If set, waits for the extrinsic to be finalized on the chain before returning -True, or returns False if the extrinsic fails to be finalized within the timeout.

    • -
    • keep_alive (bool) – If set, keeps the account alive by keeping the balance above the existential deposit.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. -If the transaction is not included in a block within that number of blocks, it will expire and be rejected. -You can think of it as an expiration date for the transaction.

    • +
    • wallet (bittensor_wallet.Wallet) – The wallet to sign the extrinsic.

    • +
    • destination_ss58 (str) – Destination public key address (ss58_address or ed25519) of recipient.

    • +
    • amount (Optional[bittensor.utils.balance.Balance]) – Amount to stake as Bittensor balance. None if transferring all.

    • +
    • transfer_all (bool) – Whether to transfer all funds from this wallet to the destination address.

    • +
    • keep_alive (bool) – If set, keeps the account alive by keeping the balance above the existential deposit.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    -
    Flag is True if extrinsic was finalized or included in the block. If we did not wait for

    finalization / inclusion, the response is True, regardless of its inclusion.

    -
    -
    -

    +

    The result object of the extrinsic execution.

    Return type:
    -

    success (bool)

    +

    ExtrinsicResponse

    diff --git a/static/python-api/html/autoapi/bittensor/core/extrinsics/unstaking/index.html b/static/python-api/html/autoapi/bittensor/core/extrinsics/unstaking/index.html index b0c78e6c15..db7630a888 100644 --- a/static/python-api/html/autoapi/bittensor/core/extrinsics/unstaking/index.html +++ b/static/python-api/html/autoapi/bittensor/core/extrinsics/unstaking/index.html @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -399,6 +402,7 @@

    Contents

  • transfer_extrinsic(subtensor, wallet, dest, amount[, ...])

    transfer_extrinsic(subtensor, wallet, ...[, ...])

    Transfers funds from this wallet to the destination public key address.

    - + + + + - + @@ -432,76 +439,123 @@

    Functions

    Module Contents#

    +
    +
    +bittensor.core.extrinsics.unstaking.unstake_all_extrinsic(subtensor, wallet, netuid, hotkey_ss58, rate_tolerance=0.005, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#
    +

    Unstakes all TAO/Alpha associated with a hotkey from the specified subnets on the Bittensor network.

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.subtensor.Subtensor) – Subtensor instance.

    • +
    • wallet (bittensor_wallet.Wallet) – The wallet of the stake owner.

    • +
    • netuid (int) – The unique identifier of the subnet.

    • +
    • hotkey_ss58 (str) – The SS58 address of the hotkey to unstake from.

    • +
    • rate_tolerance (Optional[float]) – The maximum allowed price change ratio when unstaking. For example, 0.005 = 0.5% maximum +price decrease. If not passed (None), then unstaking goes without price limit.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    +
    +
    -bittensor.core.extrinsics.unstaking.unstake_extrinsic(subtensor, wallet, hotkey_ss58=None, netuid=None, amount=None, wait_for_inclusion=True, wait_for_finalization=False, safe_staking=False, allow_partial_stake=False, rate_tolerance=0.005, period=None)[source]#
    +bittensor.core.extrinsics.unstaking.unstake_extrinsic(subtensor, wallet, netuid, hotkey_ss58, amount, allow_partial_stake=False, rate_tolerance=0.005, safe_unstaking=False, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#

    Removes stake into the wallet coldkey from the specified hotkey uid.

    Parameters:
    • subtensor (bittensor.core.subtensor.Subtensor) – Subtensor instance.

    • wallet (bittensor_wallet.Wallet) – Bittensor wallet object.

    • -
    • hotkey_ss58 (Optional[str]) – The ss58 address of the hotkey to unstake from. By default, the wallet hotkey -is used.

    • -
    • netuid (Optional[int]) – Subnet unique id.

    • -
    • amount (Union[Balance]) – Amount to stake as Bittensor balance.

    • -
    • wait_for_inclusion (bool) – If set, waits for the extrinsic to enter a block before returning True, or -returns False if the extrinsic fails to enter the block within the timeout.

    • -
    • wait_for_finalization (bool) – If set, waits for the extrinsic to be finalized on the chain before returning -True, or returns False if the extrinsic fails to be finalized within the timeout.

    • -
    • safe_staking (bool) – If true, enables price safety checks

    • -
    • allow_partial_stake (bool) – If true, allows partial unstaking if price tolerance exceeded

    • -
    • rate_tolerance (float) – Maximum allowed price decrease percentage (0.005 = 0.5%)

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. -If the transaction is not included in a block within that number of blocks, it will expire and be rejected. -You can think of it as an expiration date for the transaction.

    • +
    • hotkey_ss58 (str) – The ss58 address of the hotkey to unstake from.

    • +
    • netuid (int) – Subnet unique id.

    • +
    • amount (bittensor.utils.balance.Balance) – Amount to stake as Bittensor balance.

    • +
    • allow_partial_stake (bool) – If true, allows partial unstaking if price tolerance exceeded.

    • +
    • rate_tolerance (float) – Maximum allowed price decrease percentage (0.005 = 0.5%).

    • +
    • safe_unstaking (bool) – If true, enables price safety checks.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    -
    Flag is True if extrinsic was finalized or included in the block. If we did not wait for

    finalization / inclusion, the response is True.

    -
    -
    -

    +

    The result object of the extrinsic execution.

    Return type:
    -

    success (bool)

    +

    ExtrinsicResponse

    -bittensor.core.extrinsics.unstaking.unstake_multiple_extrinsic(subtensor, wallet, hotkey_ss58s, netuids, amounts=None, wait_for_inclusion=True, wait_for_finalization=False, period=None)[source]#
    +bittensor.core.extrinsics.unstaking.unstake_multiple_extrinsic(subtensor, wallet, netuids, hotkey_ss58s, amounts=None, rate_tolerance=0.05, unstake_all=False, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#

    Removes stake from each hotkey_ss58 in the list, using each amount, to a common coldkey.

    Parameters:
    • subtensor (bittensor.core.subtensor.Subtensor) – Subtensor instance.

    • wallet (bittensor_wallet.Wallet) – The wallet with the coldkey to unstake to.

    • -
    • hotkey_ss58s (List[str]) – List of hotkeys to unstake from.

    • -
    • netuids (List[int]) – List of subnets unique IDs to unstake from.

    • -
    • amounts (List[Balance]) – List of amounts to unstake. If None, unstake all.

    • -
    • wait_for_inclusion (bool) – If set, waits for the extrinsic to enter a block before returning True, or -returns False if the extrinsic fails to enter the block within the timeout.

    • -
    • wait_for_finalization (bool) – If set, waits for the extrinsic to be finalized on the chain before returning -True, or returns False if the extrinsic fails to be finalized within the timeout.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. -If the transaction is not included in a block within that number of blocks, it will expire and be rejected. -You can think of it as an expiration date for the transaction.

    • +
    • netuids (bittensor.core.types.UIDs) – List of subnets unique IDs to unstake from.

    • +
    • hotkey_ss58s (list[str]) – List of hotkeys to unstake from.

    • +
    • amounts (Optional[list[bittensor.utils.balance.Balance]]) – List of amounts to unstake. If None, unstake all.

    • +
    • rate_tolerance (Optional[float]) – Maximum allowed price decrease percentage (0.005 = 0.5%).

    • +
    • unstake_all (bool) – If true, unstakes all tokens.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    -
    Flag is True if extrinsic was finalized or included in the block. Flag is True if any

    wallet was unstaked. If we did not wait for finalization / inclusion, the response is True.

    -
    -
    -

    +

    The result object of the extrinsic execution.

    Return type:
    -

    success (bool)

    +

    ExtrinsicResponse

    +
    +

    Note

    +

    The data field in the returned ExtrinsicResponse contains the results of each individual internal +unstake_extrinsic or unstake_all_extrinsic call. Each entry maps a tuple key (idx, hotkey_ss58, netuid) to +either:

    +
    +
      +
    • the corresponding ExtrinsicResponse object if the unstaking attempt was executed, or

    • +
    • None if the unstaking was skipped due to failing validation (e.g., wrong balance, zero amount, etc.).

    • +
    +
    +

    In the key, idx is the index the unstake attempt. This allows the caller to inspect which specific operations +were attempted and which were not.

    +
    @@ -555,6 +609,7 @@

    Module Contents
  • Functions
  • Module Contents diff --git a/static/python-api/html/autoapi/bittensor/core/extrinsics/utils/index.html b/static/python-api/html/autoapi/bittensor/core/extrinsics/utils/index.html index 97afa5639d..3f919e5c60 100644 --- a/static/python-api/html/autoapi/bittensor/core/extrinsics/utils/index.html +++ b/static/python-api/html/autoapi/bittensor/core/extrinsics/utils/index.html @@ -48,7 +48,7 @@ - + @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -399,7 +402,12 @@

    Contents

    @@ -420,15 +428,105 @@

    Contents

    Functions#

  • unstake_extrinsic(subtensor, wallet[, hotkey_ss58, ...])

    unstake_all_extrinsic(subtensor, wallet, netuid, ...)

    Unstakes all TAO/Alpha associated with a hotkey from the specified subnets on the Bittensor network.

    unstake_extrinsic(subtensor, wallet, netuid, ...[, ...])

    Removes stake into the wallet coldkey from the specified hotkey uid.

    unstake_multiple_extrinsic(subtensor, wallet, ...[, ...])

    unstake_multiple_extrinsic(subtensor, wallet, netuids, ...)

    Removes stake from each hotkey_ss58 in the list, using each amount, to a common coldkey.

    - + + + + + + + + + + + + + + + +

    get_old_stakes(wallet, hotkey_ss58s, netuids, all_stakes)

    apply_pure_proxy_data(response, triggered_events, ...)

    Apply pure proxy data to the response object.

    get_event_data_by_event_name(events, event_name)

    Extracts event data from triggered events by event ID.

    get_mev_commitment_and_ciphertext(signed_ext, ...)

    Builds MEV Shield payload and encrypts it using ML-KEM-768 + XChaCha20Poly1305.

    get_old_stakes(wallet, hotkey_ss58s, netuids, all_stakes)

    Retrieve the previous staking balances for a wallet's hotkeys across given netuids.

    get_transfer_fn_params(amount, destination_ss58, ...)

    Helper function to get the transfer call function and call params, depending on the value and keep_alive flag

    sudo_call_extrinsic(subtensor, wallet, call_function, ...)

    Execute a sudo call extrinsic.

    Module Contents#

    +
    +
    +bittensor.core.extrinsics.utils.apply_pure_proxy_data(response, triggered_events, block_number, extrinsic_idx, raise_error)#
    +

    Apply pure proxy data to the response object.

    +
    +
    Parameters:
    +
      +
    • response (bittensor.core.types.ExtrinsicResponse) – The response object to update.

    • +
    • triggered_events (list) – The triggered events of the transaction.

    • +
    • block_number (int) – The block number of the transaction.

    • +
    • extrinsic_idx (int) – The index of the extrinsic in the transaction.

    • +
    • raise_error (bool) – Whether to raise an error if the data cannot be applied successfully.

    • +
    +
    +
    Returns:
    +

    True if the data was applied successfully, False otherwise.

    +
    +
    Return type:
    +

    bittensor.core.types.ExtrinsicResponse

    +
    +
    +
    + +
    +
    +bittensor.core.extrinsics.utils.get_event_data_by_event_name(events, event_name)#
    +

    Extracts event data from triggered events by event ID.

    +

    Searches through a list of triggered events and returns the attributes dictionary for the first event matching the +specified event_id.

    +
    +
    Parameters:
    +
      +
    • events (list) – List of event dictionaries, typically from ExtrinsicReceipt.triggered_events. Each event should have an +“module_id”. “event_id” key and an “attributes” key.

    • +
    • event_name (str) – The events identifier to search for (e.g. “mevShield.EncryptedSubmitted”, etc).

    • +
    +
    +
    Returns:
    +

    The attributes dictionary of the matching event, or None if no matching event is found.

    +
    +
    Return type:
    +

    Optional[dict]

    +
    +
    +
    + +
    +
    +bittensor.core.extrinsics.utils.get_mev_commitment_and_ciphertext(signed_ext, ml_kem_768_public_key)#
    +

    Builds MEV Shield payload and encrypts it using ML-KEM-768 + XChaCha20Poly1305.

    +

    This function constructs the payload structure required for MEV Shield encryption and performs the encryption +process. The payload binds the transaction to a specific key epoch using the key_hash, which replaces nonce-based +replay protection.

    +
    +
    Parameters:
    +
      +
    • signed_ext (scalecodec.types.GenericExtrinsic) – The signed GenericExtrinsic object representing the inner call to be encrypted and executed.

    • +
    • ml_kem_768_public_key (bytes) – The ML-KEM-768 public key bytes (1184 bytes) from NextKey storage. This key is used for +encryption and its hash binds the transaction to the key epoch.

    • +
    +
    +
    Returns:
    +

      +
    • commitment_hex (str): Hex string of the Blake2-256 hash of payload_core (32 bytes).

    • +
    • ciphertext (bytes): Encrypted blob containing plaintext.

    • +
    • payload_core (bytes): Raw payload bytes before encryption.

    • +
    +

    +
    +
    Return type:
    +

    A tuple containing

    +
    +
    +
    +
    bittensor.core.extrinsics.utils.get_old_stakes(wallet, hotkey_ss58s, netuids, all_stakes)[source]#
    @@ -440,16 +538,71 @@

    Module ContentsParameters:
    Returns:

    A list of Balances, each representing the stake for a given hotkey and netuid.

    Return type:
    -

    list[Balance]

    +

    list[bittensor.utils.balance.Balance]

    +
    +

    + + +
    +
    +bittensor.core.extrinsics.utils.get_transfer_fn_params(amount, destination_ss58, keep_alive)#
    +

    Helper function to get the transfer call function and call params, depending on the value and keep_alive flag +provided.

    +
    +
    Parameters:
    +
      +
    • amount (Optional[bittensor.utils.balance.Balance]) – the amount of Tao to transfer. None if transferring all.

    • +
    • destination_ss58 (str) – the destination SS58 of the transfer

    • +
    • keep_alive (bool) – whether to enforce a retention of the existential deposit in the account after transfer.

    • +
    +
    +
    Returns:
    +

    tuple[call function, call params]

    +
    +
    Return type:
    +

    tuple[str, dict[str, Union[str, int, bool]]]

    +
    +
    +
    + +
    +
    +bittensor.core.extrinsics.utils.sudo_call_extrinsic(subtensor, wallet, call_function, call_params, call_module='AdminUtils', sign_with='coldkey', use_nonce=False, nonce_key='hotkey', period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, root_call=False)#
    +

    Execute a sudo call extrinsic.

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.subtensor.Subtensor) – The Subtensor instance.

    • +
    • wallet (bittensor_wallet.Wallet) – The wallet instance.

    • +
    • call_function (str) – The call function to execute.

    • +
    • call_params (dict) – The call parameters.

    • +
    • call_module (str) – The call module.

    • +
    • sign_with (str) – The keypair to sign the extrinsic with.

    • +
    • use_nonce (bool) – Whether to use a nonce.

    • +
    • nonce_key (str) – The key to use for the nonce.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • root_call (bool) – False, if the subnet owner makes a call.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    @@ -478,11 +631,11 @@

    Module Contents

    next

    -

    bittensor.core.metagraph

    +

    bittensor.core.extrinsics.weights

    @@ -505,7 +658,12 @@

    Module Contents
  • Functions
  • Module Contents
  • diff --git a/static/python-api/html/autoapi/bittensor/core/extrinsics/weights/index.html b/static/python-api/html/autoapi/bittensor/core/extrinsics/weights/index.html new file mode 100644 index 0000000000..722d02ee53 --- /dev/null +++ b/static/python-api/html/autoapi/bittensor/core/extrinsics/weights/index.html @@ -0,0 +1,702 @@ + + + + + + + + + + + bittensor.core.extrinsics.weights — Bittensor SDK Docs documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + +
    + +
    + + + + + +
    +
    + + + + + + +
    + + + +
    + +
    +
    + +
    +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + + + + + + + +
    + +
    +

    bittensor.core.extrinsics.weights#

    +

    Module provides sync commit and reveal weights extrinsic.

    +
    +

    Functions#

    +
    + + + + + + + + + + + + + + +

    commit_timelocked_weights_extrinsic(subtensor, wallet, ...)

    Commits the weights for a specific sub subnet mechanism on the Bittensor blockchain using the provided wallet.

    commit_weights_extrinsic(subtensor, wallet, netuid, ...)

    Commits the weights for a specific sub subnet on the Bittensor blockchain using the provided wallet.

    reveal_weights_extrinsic(subtensor, wallet, netuid, ...)

    Reveals the weights for a specific sub subnet on the Bittensor blockchain using the provided wallet.

    set_weights_extrinsic(subtensor, wallet, netuid, ...)

    Sets the passed weights in the chain for hotkeys in the sub-subnet of the passed subnet.

    +
    +
    +
    +

    Module Contents#

    +
    +
    +bittensor.core.extrinsics.weights.commit_timelocked_weights_extrinsic(subtensor, wallet, netuid, mechid, uids, weights, block_time, commit_reveal_version=4, version_key=version_as_int, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Commits the weights for a specific sub subnet mechanism on the Bittensor blockchain using the provided wallet.

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.subtensor.Subtensor) – Subtensor instance.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor Wallet instance.

    • +
    • netuid (int) – The subnet unique identifier.

    • +
    • mechid (int) – The subnet mechanism unique identifier

    • +
    • uids (bittensor.core.types.UIDs) – The list of neuron UIDs that the weights are being set for.

    • +
    • weights (bittensor.core.types.Weights) – The corresponding weights to be set for each UID.

    • +
    • block_time (Union[int, float]) – The number of seconds for block duration.

    • +
    • commit_reveal_version (int) – The version of the commit-reveal in the chain.

    • +
    • version_key (int) – Version key for compatibility with the network.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    +
    + +
    +
    +bittensor.core.extrinsics.weights.commit_weights_extrinsic(subtensor, wallet, netuid, mechid, uids, weights, salt, version_key=version_as_int, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Commits the weights for a specific sub subnet on the Bittensor blockchain using the provided wallet.

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.subtensor.Subtensor) – Subtensor instance.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor Wallet instance.

    • +
    • netuid (int) – The subnet unique identifier.

    • +
    • mechid (int) – The subnet mechanism unique identifier.

    • +
    • uids (bittensor.core.types.UIDs) – NumPy array of neuron UIDs for which weights are being committed.

    • +
    • weights (bittensor.core.types.Weights) – NumPy array of weight values corresponding to each UID.

    • +
    • salt (bittensor.core.types.Salt) – list of randomly generated integers as salt to generated weighted hash.

    • +
    • version_key (int) – Version key for compatibility with the network.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    +
    + +
    +
    +bittensor.core.extrinsics.weights.reveal_weights_extrinsic(subtensor, wallet, netuid, mechid, uids, weights, salt, version_key, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Reveals the weights for a specific sub subnet on the Bittensor blockchain using the provided wallet.

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.subtensor.Subtensor) – Subtensor instance.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor Wallet instance.

    • +
    • netuid (int) – The unique identifier of the subnet.

    • +
    • mechid (int) – The subnet mechanism unique identifier.

    • +
    • uids (bittensor.core.types.UIDs) – List of neuron UIDs for which weights are being revealed.

    • +
    • weights (bittensor.core.types.Weights) – List of weight values corresponding to each UID.

    • +
    • salt (bittensor.core.types.Salt) – List of salt values corresponding to the hash function.

    • +
    • version_key (int) – Version key for compatibility with the network.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    +
    + +
    +
    +bittensor.core.extrinsics.weights.set_weights_extrinsic(subtensor, wallet, netuid, mechid, uids, weights, version_key, *, mev_protection=DEFAULT_MEV_PROTECTION, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Sets the passed weights in the chain for hotkeys in the sub-subnet of the passed subnet.

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.core.subtensor.Subtensor) – Subtensor instance.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor Wallet instance.

    • +
    • netuid (int) – The unique identifier of the subnet.

    • +
    • mechid (int) – The subnet mechanism unique identifier.

    • +
    • uids (bittensor.core.types.UIDs) – List of neuron UIDs for which weights are being revealed.

    • +
    • weights (bittensor.core.types.Weights) – List of weight values corresponding to each UID.

    • +
    • version_key (int) – Version key for compatibility with the network.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    +
    + +
    +
    + + +
    + + + + + + + + +
    + + + + + + + +
    +
    + + +
    + + +
    +
    +
    + + + + + +
    +
    + + \ No newline at end of file diff --git a/static/python-api/html/autoapi/bittensor/core/index.html b/static/python-api/html/autoapi/bittensor/core/index.html index 30d720b3dc..c7382323e8 100644 --- a/static/python-api/html/autoapi/bittensor/core/index.html +++ b/static/python-api/html/autoapi/bittensor/core/index.html @@ -163,25 +163,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -428,11 +431,9 @@

    Submodulesbittensor.core.settings

  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • diff --git a/static/python-api/html/autoapi/bittensor/core/metagraph/index.html b/static/python-api/html/autoapi/bittensor/core/metagraph/index.html index 26be0d8085..d5b4758d3e 100644 --- a/static/python-api/html/autoapi/bittensor/core/metagraph/index.html +++ b/static/python-api/html/autoapi/bittensor/core/metagraph/index.html @@ -51,7 +51,7 @@ - + @@ -163,25 +163,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -452,6 +455,9 @@

    Contents

  • MetagraphMixin.load()
  • MetagraphMixin.load_from_path()
  • MetagraphMixin.max_uids
  • +
  • MetagraphMixin.mechanism_count
  • +
  • MetagraphMixin.mechanisms_emissions_split
  • +
  • MetagraphMixin.mechid
  • MetagraphMixin.metadata()
  • MetagraphMixin.n
  • MetagraphMixin.name
  • @@ -579,10 +585,10 @@

    Classes#<
    - + - + @@ -601,7 +607,7 @@

    Classes#<

    Functions#

    AsyncMetagraph

    TODO docstring. Advise user to use async_metagraph factory fn if they want to sync at init

    Asynchronous version of the Metagraph class for non-blocking synchronization with the Bittensor network state.

    Metagraph

    The metagraph class is a core component of the Bittensor network, representing the neural graph that forms the

    Synchronous implementation of the Metagraph, representing the current state of a Bittensor subnet.

    MetagraphMixin

    The metagraph class is a core component of the Bittensor network, representing the neural graph that forms the

    - + @@ -621,23 +627,34 @@

    Functions#

    -class bittensor.core.metagraph.AsyncMetagraph(netuid, network=settings.DEFAULT_NETWORK, lite=True, sync=True, subtensor=None)[source]#
    +class bittensor.core.metagraph.AsyncMetagraph(netuid, mechid=0, network=settings.DEFAULT_NETWORK, lite=True, sync=True, subtensor=None)[source]#

    Bases: NumpyOrTorch

    -

    TODO docstring. Advise user to use async_metagraph factory fn if they want to sync at init

    +

    Asynchronous version of the Metagraph class for non-blocking synchronization with the Bittensor network state.

    +

    This class allows developers to fetch and update metagraph data using async operations, enabling concurrent +execution in event-driven environments.

    +
    +

    Note

    +

    Prefer using the factory function async_metagraph() for initialization, which handles async synchronization +automatically.

    +
    +
    +

    Example

    +

    metagraph = await async_metagraph(netuid=1, network=”finney”)

    +

    Initializes a new instance of the metagraph object, setting up the basic structure and parameters based on the provided arguments. This class requires Torch to be installed. This method is the entry point for creating a metagraph object, which is a central component in representing the state of the Bittensor network.

    Parameters:
      -
    • netuid (int) – The unique identifier for the network, distinguishing this instance of the metagraph within -potentially multiple network configurations.

    • -
    • network (str) – The name of the network, which can indicate specific configurations or versions of the -Bittensor network.

    • -
    • lite (bool) – A flag indicating whether to use a lite version of the metagraph. The lite version may contain -less detailed information but can be quicker to initialize and sync.

    • -
    • sync (bool) – A flag indicating whether to synchronize the metagraph with the network upon initialization. +

    • netuid (int) – Subnet unique identifier.

    • +
    • network (str) – The name of the network, which can indicate specific configurations or versions of the Bittensor

    • +
    • network.

    • +
    • lite (bool) – A flag indicating whether to use a lite version of the metagraph. The lite version may contain less +detailed information but can be quicker to initialize and sync.

    • +
    • sync (bool) – A flag indicating whether to synchronize the metagraph with the network upon initialization. Synchronization involves updating the metagraph’s parameters to reflect the current state of the network.

    • +
    • mechid (int) – Subnet mechanism unique identifier.

    • subtensor (Optional[bittensor.core.async_subtensor.AsyncSubtensor])

    @@ -645,11 +662,10 @@

    Module Contents

    Example

    Initializing a metagraph object for the Bittensor network with a specific network UID:

    -
    from bittensor.core.metagraph import Metagraph
    -
    -metagraph = Metagraph(netuid=123, network="finney", lite=True, sync=True)
    -
    -
    +
    +

    from bittensor.core.metagraph import Metagraph

    +

    metagraph = Metagraph(netuid=123, network=”finney”, lite=True, sync=True)

    +
    @@ -662,14 +678,12 @@

    Module Contents
    Parameters:
      -
    • block (Optional[int]) – A specific block number to synchronize with. If None, the metagraph syncs with the -latest block. This allows for historical analysis or specific state examination of the network.

    • -
    • lite (Optional[bool]) – If True, a lite version of the metagraph is used for quicker synchronization. This is -beneficial when full detail is not necessary, allowing for reduced computational and time overhead. -Defaults to True.

    • -
    • subtensor (Optional[bittensor.core.subtensor.Subtensor]) – An instance of the subtensor class from Bittensor, -providing an interface to the underlying blockchain data. If provided, this instance is used for data -retrieval during synchronization.

    • +
    • block (Optional[int]) – A specific block number to synchronize with. If None, the metagraph syncs with the latest block. This +allows for historical analysis or specific state examination of the network.

    • +
    • lite (Optional[bool]) – If True, a lite version of the metagraph is used for quicker synchronization. This is beneficial when +full detail is not necessary, allowing for reduced computational and time overhead.

    • +
    • subtensor (Optional[bittensor.core.async_subtensor.AsyncSubtensor]) – An instance of the subtensor class from Bittensor, providing an interface to the underlying +blockchain data. If provided, this instance is used for data retrieval during synchronization.

    @@ -697,16 +711,14 @@

    Module Contents
    from bittensor.core.subtensor import Subtensor
    -
    -subtensor = Subtensor(network='archive')
    -current_block = subtensor.get_current_block()
    -history_block = current_block - 1200
    -
    -metagraph.sync(block=history_block, lite=False, subtensor=subtensor)
    -
    - +

    Example:

    +
    +

    from bittensor.core.subtensor import Subtensor

    +

    subtensor = Subtensor(network=’archive’) +current_block = subtensor.get_current_block() +history_block = current_block - 1200

    +

    metagraph.sync(block=history_block, lite=False, subtensor=subtensor)

    +

    @@ -745,82 +757,16 @@

    Module Contents
    -class bittensor.core.metagraph.Metagraph(netuid, network=settings.DEFAULT_NETWORK, lite=True, sync=True, subtensor=None)[source]#
    +class bittensor.core.metagraph.Metagraph(netuid, mechid=0, network=settings.DEFAULT_NETWORK, lite=True, sync=True, subtensor=None)[source]#

    Bases: NumpyOrTorch

    -

    The metagraph class is a core component of the Bittensor network, representing the neural graph that forms the -backbone of the decentralized machine learning system.

    -
    -
    The metagraph is a dynamic representation of the network’s state, capturing the interconnectedness and attributes of

    neurons (participants) in the Bittensor ecosystem. This class is not just a static structure but a live -reflection of the network, constantly updated and synchronized with the state of the blockchain.

    -
    -
    In Bittensor, neurons are akin to nodes in a distributed system, each contributing computational resources and

    participating in the network’s collective intelligence. The metagraph tracks various attributes of these -neurons, such as stake, trust, and consensus, which are crucial for the network’s incentive mechanisms and the -Yuma Consensus algorithm as outlined in the NeurIPS paper. These attributes govern how neurons -interact, how they are incentivized, and their roles within the network’s decision-making processes.

    -
    -
    -
    -
    Parameters:
    -
      -
    • netuid (int) – A unique identifier that distinguishes between different instances or versions of the Bittensor network.

    • -
    • network (str) – The name of the network, signifying specific configurations or iterations within the Bittensor ecosystem.

    • -
    • lite (bool)

    • -
    • sync (bool)

    • -
    • subtensor (Optional[bittensor.core.subtensor.Subtensor])

    • -
    -
    -
    Variables:
    -
      -
    • version (NDArray) – The version number of the network, integral for tracking network updates.

    • -
    • n (NDArray) – The total number of neurons in the network, reflecting its size and complexity.

    • -
    • block (NDArray) – The current block number in the blockchain, crucial for synchronizing with the network’s latest state.

    • -
    • stake – Represents the cryptocurrency staked by neurons, impacting their influence and earnings within the network.

    • -
    • total_stake – The cumulative stake across all neurons.

    • -
    • ranks – Neuron rankings as per the Yuma Consensus algorithm, influencing their incentive distribution and network authority.

    • -
    • trust – Scores indicating the reliability of neurons, mainly miners, within the network’s operational context.

    • -
    • consensus – Scores reflecting each neuron’s alignment with the network’s collective decisions.

    • -
    • validator_trust – Trust scores for validator neurons, crucial for network security and validation.

    • -
    • incentive – Rewards allocated to neurons, particularly miners, for their network contributions.

    • -
    • emission – The rate at which rewards are distributed to neurons.

    • -
    • dividends – Rewards received primarily by validators as part of the incentive mechanism.

    • -
    • active – Status indicating whether a neuron is actively participating in the network.

    • -
    • last_update – Timestamp of the latest update to a neuron’s data.

    • -
    • validator_permit – Indicates if a neuron is authorized to act as a validator.

    • -
    • weights – Inter-neuronal weights set by each neuron, influencing network dynamics.

    • -
    • bonds – Represents speculative investments by neurons in others, part of the reward mechanism.

    • -
    • uids – Unique identifiers for each neuron, essential for network operations.

    • -
    • axons (List) – Details about each neuron’s axon, critical for facilitating network communication.

    • -
    -
    -
    -
    -
    The metagraph plays a pivotal role in Bittensor’s decentralized AI operations, influencing everything from data

    propagation to reward distribution. It embodies the principles of decentralized governance and collaborative -intelligence, ensuring that the network remains adaptive, secure, and efficient.

    -
    -
    +

    Synchronous implementation of the Metagraph, representing the current state of a Bittensor subnet.

    +

    The Metagraph encapsulates neuron attributes such as stake, trust, incentive, weights, and connectivity, and +provides methods to synchronize these values directly from the blockchain via a Subtensor instance.

    Example

    -

    Initializing the metagraph to represent the current state of the Bittensor network:

    -
    from bittensor.core.metagraph import Metagraph
    -metagraph = Metagraph(netuid=config.netuid, network=subtensor.network, sync=False)
    -
    -
    -

    Synchronizing the metagraph with the network to reflect the latest state and neuron data:

    -
    metagraph.sync(subtensor=subtensor)
    -
    -
    -

    Accessing metagraph properties to inform network interactions and decisions:

    -
    total_stake = metagraph.S
    -neuron_ranks = metagraph.R
    -neuron_incentives = metagraph.I
    -axons = metagraph.axons
    -neurons = metagraph.neurons
    -
    -
    -

    Maintaining a local copy of hotkeys for querying and interacting with network entities:

    -
    hotkeys = deepcopy(metagraph.hotkeys)
    -
    -
    +

    from bittensor.core.subtensor import Subtensor +subtensor = Subtensor(network=”finney”) +metagraph = Metagraph(netuid=1, network=”finney”, sync=True, subtensor=subtensor)

    Initializes a new instance of the metagraph object, setting up the basic structure and parameters based on the provided arguments. This class requires Torch to be installed. This method is the entry point for creating a @@ -828,14 +774,14 @@

    Module Contents
    Parameters:
      -
    • netuid (int) – The unique identifier for the network, distinguishing this instance of the metagraph within -potentially multiple network configurations.

    • -
    • network (str) – The name of the network, which can indicate specific configurations or versions of the -Bittensor network.

    • -
    • lite (bool) – A flag indicating whether to use a lite version of the metagraph. The lite version may contain -less detailed information but can be quicker to initialize and sync.

    • -
    • sync (bool) – A flag indicating whether to synchronize the metagraph with the network upon initialization. +

    • netuid (int) – Subnet unique identifier.

    • +
    • network (str) – The name of the network, which can indicate specific configurations or versions of the Bittensor

    • +
    • network.

    • +
    • lite (bool) – A flag indicating whether to use a lite version of the metagraph. The lite version may contain less +detailed information but can be quicker to initialize and sync.

    • +
    • sync (bool) – A flag indicating whether to synchronize the metagraph with the network upon initialization. Synchronization involves updating the metagraph’s parameters to reflect the current state of the network.

    • +
    • mechid (int) – Subnet mechanism unique identifier.

    • subtensor (Optional[bittensor.core.subtensor.Subtensor])

    @@ -843,11 +789,10 @@

    Module Contents

    Example

    Initializing a metagraph object for the Bittensor network with a specific network UID:

    -
    from bittensor.core.metagraph import Metagraph
    -
    -metagraph = Metagraph(netuid=123, network="finney", lite=True, sync=True)
    -
    -
    +
    +

    from bittensor.core.metagraph import Metagraph

    +

    metagraph = Metagraph(netuid=123, network=”finney”, lite=True, sync=True)

    +
    @@ -860,14 +805,12 @@

    Module Contents
    Parameters:
      -
    • block (Optional[int]) – A specific block number to synchronize with. If None, the metagraph syncs with the -latest block. This allows for historical analysis or specific state examination of the network.

    • -
    • lite (Optional[bool]) – If True, a lite version of the metagraph is used for quicker synchronization. This is -beneficial when full detail is not necessary, allowing for reduced computational and time overhead. -Defaults to True.

    • -
    • subtensor (Optional[bittensor.core.subtensor.Subtensor]) – An instance of the subtensor class from Bittensor, -providing an interface to the underlying blockchain data. If provided, this instance is used for data -retrieval during synchronization.

    • +
    • block (Optional[int]) – A specific block number to synchronize with. If None, the metagraph syncs with the latest block. This +allows for historical analysis or specific state examination of the network.

    • +
    • lite (Optional[bool]) – If True, a lite version of the metagraph is used for quicker synchronization. This is beneficial when +full detail is not necessary, allowing for reduced computational and time overhead.

    • +
    • subtensor (Optional[bittensor.core.subtensor.Subtensor]) – An instance of the subtensor class from Bittensor, providing an interface to the underlying +blockchain data. If provided, this instance is used for data retrieval during synchronization.

    @@ -895,16 +838,14 @@

    Module Contents
    from bittensor.core.subtensor import Subtensor
    -
    -subtensor = Subtensor(network='archive')
    -current_block = subtensor.get_current_block()
    -history_block = current_block - 1200
    -
    -metagraph.sync(block=history_block, lite=False, subtensor=subtensor)
    -
    - +

    Example:

    +
    +

    from bittensor.core.subtensor import Subtensor

    +

    subtensor = Subtensor(network=’archive’) +current_block = subtensor.get_current_block() +history_block = current_block - 1200

    +

    metagraph.sync(block=history_block, lite=False, subtensor=subtensor)

    +

    @@ -912,8 +853,8 @@

    Module Contents
    -class bittensor.core.metagraph.MetagraphMixin(netuid, network=settings.DEFAULT_NETWORK, lite=True, sync=True, subtensor=None)[source]#
    -

    Bases: abc.ABC

    +class bittensor.core.metagraph.MetagraphMixin(netuid, mechid=0, network=settings.DEFAULT_NETWORK, lite=True, sync=True, subtensor=None)[source]# +

    Bases: abc.ABC

    The metagraph class is a core component of the Bittensor network, representing the neural graph that forms the backbone of the decentralized machine learning system.

    @@ -929,10 +870,11 @@

    Module Contents
    Parameters:
      -
    • netuid (int) – A unique identifier that distinguishes between different instances or versions of the Bittensor network.

    • -
    • network (str) – The name of the network, signifying specific configurations or iterations within the Bittensor ecosystem.

    • -
    • lite (bool)

    • -
    • sync (bool)

    • +
    • netuid (int) – A unique identifier that distinguishes between different instances or versions of the Bittensor network.

    • +
    • network (str) – The name of the network, signifying specific configurations or iterations within the Bittensor ecosystem.

    • +
    • mechid (int)

    • +
    • lite (bool)

    • +
    • sync (bool)

    • subtensor (Optional[Union[bittensor.core.async_subtensor.AsyncSubtensor, bittensor.core.subtensor.Subtensor]])

    @@ -960,11 +902,9 @@

    Module Contents -
    The metagraph plays a pivotal role in Bittensor’s decentralized AI operations, influencing everything from data

    propagation to reward distribution. It embodies the principles of decentralized governance and collaborative +

    The metagraph plays a pivotal role in Bittensor’s decentralized AI operations, influencing everything from data +propagation to reward distribution. It embodies the principles of decentralized governance and collaborative intelligence, ensuring that the network remains adaptive, secure, and efficient.

    -
    -

    Example

    Initializing the metagraph to represent the current state of the Bittensor network:

    @@ -995,14 +935,15 @@

    Module Contents
    Parameters:
      -
    • netuid (int) – The unique identifier for the network, distinguishing this instance of the metagraph within +

    • netuid (int) – The unique identifier for the network, distinguishing this instance of the metagraph within potentially multiple network configurations.

    • -
    • network (str) – The name of the network, which can indicate specific configurations or versions of the -Bittensor network.

    • -
    • lite (bool) – A flag indicating whether to use a lite version of the metagraph. The lite version may contain -less detailed information but can be quicker to initialize and sync.

    • -
    • sync (bool) – A flag indicating whether to synchronize the metagraph with the network upon initialization. +

    • network (str) – The name of the network, which can indicate specific configurations or versions of the Bittensor +network.

    • +
    • lite (bool) – A flag indicating whether to use a lite version of the metagraph. The lite version may contain less +detailed information but can be quicker to initialize and sync.

    • +
    • sync (bool) – A flag indicating whether to synchronize the metagraph with the network upon initialization. Synchronization involves updating the metagraph’s parameters to reflect the current state of the network.

    • +
    • mechid (int)

    • subtensor (Optional[Union[bittensor.core.async_subtensor.AsyncSubtensor, bittensor.core.subtensor.Subtensor]])

    @@ -1010,9 +951,9 @@

    Module Contents

    Example

    Initializing a metagraph object for the Bittensor network with a specific network UID:

    -
    metagraph = Metagraph(netuid=123, network="finney", lite=True, sync=True)
    -
    -
    +
    +

    metagraph = Metagraph(netuid=123, network=”finney”, lite=True, sync=True)

    +

    @@ -1268,7 +1209,7 @@

    Module Contents
    -property addresses: list[str]#
    +property addresses: list[str]#

    Provides a list of IP addresses for each neuron in the Bittensor network. These addresses are used for network communication, allowing neurons to connect, interact, and exchange information with each other. IP addresses are fundamental for the network’s peer-to-peer communication infrastructure.

    @@ -1282,7 +1223,7 @@

    Module ContentsReturn type: -

    List[str]

    +

    List[str]

    @@ -1295,7 +1236,7 @@

    Module Contents
    -alpha_dividends_per_hotkey: list[tuple[str, float]]#
    +alpha_dividends_per_hotkey: list[tuple[str, float]]#
    @@ -1305,7 +1246,7 @@

    Module Contents
    -axons: list[bittensor.core.chain_data.AxonInfo]#
    +axons: list[bittensor.core.chain_data.AxonInfo]#

    @@ -1315,12 +1256,12 @@

    Module Contents
    -block_at_registration: list[int]#
    +block_at_registration: list[int]#

    -blocks_since_last_step: int#
    +blocks_since_last_step: int#
    @@ -1330,12 +1271,12 @@

    Module Contents
    -chain_endpoint: str | None#
    +chain_endpoint: str | None#

    -property coldkeys: list[str]#
    +property coldkeys: list[str]#

    Contains a list of coldkeys for each neuron in the Bittensor network.

    Coldkeys are similar to hotkeys but are typically used for more secure, offline activities such as storing assets or offline signing of transactions. They are an important aspect of a neuron’s security, providing an @@ -1349,7 +1290,7 @@

    Module ContentsReturn type: -

    List[str]

    +

    List[str]

    @@ -1383,7 +1324,7 @@

    Module Contents
    -property hotkeys: list[str]#
    +property hotkeys: list[str]#

    Represents a list of hotkeys for each neuron in the Bittensor network.

    Hotkeys are unique identifiers used by neurons for active participation in the network, such as sending and receiving information or transactions. They are akin to public keys in cryptographic systems and are essential @@ -1398,7 +1339,7 @@

    Module ContentsReturn type: -

    List[str]

    +

    List[str]

    @@ -1418,12 +1359,12 @@

    Module Contents
    -identities: list[bittensor.core.chain_data.ChainIdentity | None]#
    +identities: list[bittensor.core.chain_data.ChainIdentity | None]#
    -identity: bittensor.core.chain_data.SubnetIdentity | None#
    +identity: bittensor.core.chain_data.SubnetIdentity | None#
    @@ -1433,7 +1374,7 @@

    Module Contents
    -last_step: int#
    +last_step: int#

    @@ -1461,18 +1402,14 @@

    Module Contents
    Parameters:
    -

    root_dir (Optional[list[str]]) – list to the file path for the root directory of your metagraph saves -(i.e. [‘/’, ‘tmp’, ‘metagraphs’], defaults to [“~”, “.bittensor”, “metagraphs”]

    +

    root_dir (Optional[list[str]]) – list to the file path for the root directory of your metagraph saves (i.e. [‘/’, ‘tmp’, +‘metagraphs’], defaults to [“~”, “.bittensor”, “metagraphs”]

    Returns:
    -

    -
    The metagraph instance after loading its state from the

    default directory.

    -
    -
    -

    +

    The metagraph instance after loading its state from the default directory.

    Return type:
    -

    metagraph (bittensor.core.metagraph.Metagraph)

    +

    metagraph

    @@ -1504,18 +1441,14 @@

    Module Contents
    Parameters:
    -

    dir_path (str) – The directory path where the metagraph’s state files are stored. This path should contain -one or more saved state files, typically named in a format that includes the block number.

    +

    dir_path (str) – The directory path where the metagraph’s state files are stored. This path should contain one or +more saved state files, typically named in a format that includes the block number.

    Returns:
    -

    -
    The metagraph instance after loading its state from the

    specified directory path.

    -
    -
    -

    +

    The metagraph instance after loading its state from the specified directory path.

    Return type:
    -

    metagraph (bittensor.core.metagraph.AsyncMetagraph)

    +

    metagraph

    @@ -1538,7 +1471,22 @@

    Module Contents
    -max_uids: int#
    +max_uids: int# +
    + +
    +
    +mechanism_count: int#
    +
    + +
    +
    +mechanisms_emissions_split: list[int]#
    +
    + +
    +
    +mechid: int#
    @@ -1560,7 +1508,7 @@

    Module ContentsReturn type: -

    dict

    +

    dict

    @@ -1579,42 +1527,42 @@

    Module Contents
    -name: str#
    +name: str#
    -netuid: int#
    +netuid: int#
    -network: str#
    +network: str#
    -network_registered_at: int#
    +network_registered_at: int#
    -neurons: list[bittensor.core.chain_data.NeuronInfo | bittensor.core.chain_data.NeuronInfoLite]#
    +neurons: list[bittensor.core.chain_data.NeuronInfo | bittensor.core.chain_data.NeuronInfoLite]#
    -num_uids: int#
    +num_uids: int#
    -owner_coldkey: str#
    +owner_coldkey: str#
    -owner_hotkey: str#
    +owner_hotkey: str#
    @@ -1624,7 +1572,7 @@

    Module Contents
    -pruning_score: list[float]#
    +pruning_score: list[float]#

    @@ -1642,14 +1590,14 @@

    Module Contents
    Parameters:
    -

    root_dir (Optional[list[str]]) – list to the file path for the root directory of your metagraph saves -(i.e. [‘/’, ‘tmp’, ‘metagraphs’], defaults to [“~”, “.bittensor”, “metagraphs”]

    +

    root_dir (Optional[list[str]]) – list to the file path for the root directory of your metagraph saves (i.e. [‘/’, ‘tmp’, +‘metagraphs’], defaults to [“~”, “.bittensor”, “metagraphs”]

    Returns:

    The metagraph instance after saving its state.

    Return type:
    -

    metagraph (bittensor.core.metagraph.Metagraph)

    +

    metagraph

    @@ -1687,17 +1635,17 @@

    Module Contents
    -subtensor: bittensor.core.async_subtensor.AsyncSubtensor | bittensor.core.subtensor.Subtensor | None#
    +subtensor: bittensor.core.async_subtensor.AsyncSubtensor | bittensor.core.subtensor.Subtensor | None#
    -symbol: str#
    +symbol: str#
    -tao_dividends_per_hotkey: list[tuple[str, float]]#
    +tao_dividends_per_hotkey: list[tuple[str, float]]#
    @@ -1707,7 +1655,7 @@

    Module Contents
    -tempo: int#
    +tempo: int#

    @@ -1732,7 +1680,7 @@

    Module Contents
    -version: bittensor.utils.registration.torch.nn.Parameter | tuple[numpy.typing.NDArray]#
    +version: bittensor.utils.registration.torch.nn.Parameter | tuple[numpy.typing.NDArray]#

    @@ -1744,7 +1692,7 @@

    Module Contents
    -class bittensor.core.metagraph.NonTorchMetagraph(netuid, network=settings.DEFAULT_NETWORK, lite=True, sync=True, subtensor=None)[source]#
    +class bittensor.core.metagraph.NonTorchMetagraph(netuid, mechid=0, network=settings.DEFAULT_NETWORK, lite=True, sync=True, subtensor=None)[source]#

    Bases: MetagraphMixin

    The metagraph class is a core component of the Bittensor network, representing the neural graph that forms the backbone of the decentralized machine learning system.

    @@ -1761,10 +1709,11 @@

    Module Contents
    Parameters:
      -
    • netuid (int) – A unique identifier that distinguishes between different instances or versions of the Bittensor network.

    • -
    • network (str) – The name of the network, signifying specific configurations or iterations within the Bittensor ecosystem.

    • -
    • lite (bool)

    • -
    • sync (bool)

    • +
    • netuid (int) – A unique identifier that distinguishes between different instances or versions of the Bittensor network.

    • +
    • network (str) – The name of the network, signifying specific configurations or iterations within the Bittensor ecosystem.

    • +
    • mechid (int)

    • +
    • lite (bool)

    • +
    • sync (bool)

    • subtensor (Optional[Union[bittensor.core.async_subtensor.AsyncSubtensor, bittensor.core.subtensor.Subtensor]])

    @@ -1792,11 +1741,9 @@

    Module Contents -
    The metagraph plays a pivotal role in Bittensor’s decentralized AI operations, influencing everything from data

    propagation to reward distribution. It embodies the principles of decentralized governance and collaborative +

    The metagraph plays a pivotal role in Bittensor’s decentralized AI operations, influencing everything from data +propagation to reward distribution. It embodies the principles of decentralized governance and collaborative intelligence, ensuring that the network remains adaptive, secure, and efficient.

    -
    -

    Example

    Initializing the metagraph to represent the current state of the Bittensor network:

    @@ -1827,14 +1774,14 @@

    Module Contents
    Parameters:
      -
    • netuid (int) – The unique identifier for the network, distinguishing this instance of the metagraph within -potentially multiple network configurations.

    • -
    • network (str) – The name of the network, which can indicate specific configurations or versions of the -Bittensor network.

    • -
    • lite (bool) – A flag indicating whether to use a lite version of the metagraph. The lite version may contain -less detailed information but can be quicker to initialize and sync.

    • -
    • sync (bool) – A flag indicating whether to synchronize the metagraph with the network upon initialization. +

    • netuid (int) – Subnet unique identifier.

    • +
    • network (str) – The name of the network, which can indicate specific configurations or versions of the Bittensor

    • +
    • network.

    • +
    • lite (bool) – A flag indicating whether to use a lite version of the metagraph. The lite version may contain less +detailed information but can be quicker to initialize and sync.

    • +
    • sync (bool) – A flag indicating whether to synchronize the metagraph with the network upon initialization. Synchronization involves updating the metagraph’s parameters to reflect the current state of the network.

    • +
    • mechid (int) – Subnet mechanism unique identifier.

    • subtensor (Optional[Union[bittensor.core.async_subtensor.AsyncSubtensor, bittensor.core.subtensor.Subtensor]])

    @@ -1899,23 +1846,19 @@

    Module Contents
    Parameters:
    -

    dir_path (str) – The directory path where the metagraph’s state file is located.

    +

    dir_path (str) – The directory path where the metagraph’s state file is located.

    Returns:
    -

    -
    An instance of the Metagraph with the state

    loaded from the file.

    -
    -
    -

    +

    An instance of the Metagraph with the state loaded from the file.

    Return type:
    -

    metagraph (bittensor.core.metagraph.AsyncMetagraph())

    +

    metagraph

    Raises:
    @@ -2005,7 +1948,7 @@

    Module Contents
    -class bittensor.core.metagraph.TorchMetagraph(netuid, network=settings.DEFAULT_NETWORK, lite=True, sync=True, subtensor=None)[source]#
    +class bittensor.core.metagraph.TorchMetagraph(netuid, mechid=0, network=settings.DEFAULT_NETWORK, lite=True, sync=True, subtensor=None)[source]#

    Bases: MetagraphMixin, BaseClass

    The metagraph class is a core component of the Bittensor network, representing the neural graph that forms the backbone of the decentralized machine learning system.

    @@ -2022,10 +1965,11 @@

    Module Contents
    Parameters:
      -
    • netuid (int) – A unique identifier that distinguishes between different instances or versions of the Bittensor network.

    • -
    • network (str) – The name of the network, signifying specific configurations or iterations within the Bittensor ecosystem.

    • -
    • lite (bool)

    • -
    • sync (bool)

    • +
    • netuid (int) – A unique identifier that distinguishes between different instances or versions of the Bittensor network.

    • +
    • network (str) – The name of the network, signifying specific configurations or iterations within the Bittensor ecosystem.

    • +
    • mechid (int)

    • +
    • lite (bool)

    • +
    • sync (bool)

    • subtensor (Optional[Union[bittensor.core.async_subtensor.AsyncSubtensor, bittensor.core.subtensor.Subtensor]])

    @@ -2053,11 +1997,9 @@

    Module Contents -
    The metagraph plays a pivotal role in Bittensor’s decentralized AI operations, influencing everything from data

    propagation to reward distribution. It embodies the principles of decentralized governance and collaborative +

    The metagraph plays a pivotal role in Bittensor’s decentralized AI operations, influencing everything from data +propagation to reward distribution. It embodies the principles of decentralized governance and collaborative intelligence, ensuring that the network remains adaptive, secure, and efficient.

    -
    -

    Example

    Initializing the metagraph to represent the current state of the Bittensor network:

    @@ -2088,14 +2030,14 @@

    Module Contents
    Parameters:
      -
    • netuid (int) – The unique identifier for the network, distinguishing this instance of the metagraph within -potentially multiple network configurations.

    • -
    • network (str) – The name of the network, which can indicate specific configurations or versions of the -Bittensor network.

    • -
    • lite (bool) – A flag indicating whether to use a lite version of the metagraph. The lite version may contain -less detailed information but can be quicker to initialize and sync.

    • -
    • sync (bool) – A flag indicating whether to synchronize the metagraph with the network upon initialization. +

    • netuid (int) – Subnet unique identifier.

    • +
    • network (str) – The name of the network, which can indicate specific configurations or versions of the Bittensor

    • +
    • network.

    • +
    • lite (bool) – A flag indicating whether to use a lite version of the metagraph. The lite version may contain less +detailed information but can be quicker to initialize and sync.

    • +
    • sync (bool) – A flag indicating whether to synchronize the metagraph with the network upon initialization. Synchronization involves updating the metagraph’s parameters to reflect the current state of the network.

    • +
    • mechid (int) – Subnet mechanism unique identifier.

    • subtensor (Optional[Union[bittensor.core.async_subtensor.AsyncSubtensor, bittensor.core.subtensor.Subtensor]])

    @@ -2103,11 +2045,10 @@

    Module Contents

    Example

    Initializing a metagraph object for the Bittensor network with a specific network UID:

    -
    from bittensor.core.metagraph import Metagraph
    -
    -metagraph = Metagraph(netuid=123, network="finney", lite=True, sync=True)
    -
    -
    +
    +

    from bittensor.core.metagraph import Metagraph

    +

    metagraph = Metagraph(netuid=123, network=”finney”, lite=True, sync=True)

    +

    @@ -2160,13 +2101,13 @@

    Module Contents
    Parameters:
    -

    dir_path (str) – The directory path where the state file is located.

    +

    dir_path (str) – The directory path where the state file is located.

    Returns:

    The current metagraph instance with the loaded state.

    Return type:
    -

    metagraph (bittensor.core.metagraph.AsyncMetagraph)

    +

    metagraph

    @@ -2237,15 +2178,16 @@

    Module Contents
    -async bittensor.core.metagraph.async_metagraph(netuid, network=settings.DEFAULT_NETWORK, lite=True, sync=True, subtensor=None)[source]#
    +async bittensor.core.metagraph.async_metagraph(netuid, mechid=0, network=settings.DEFAULT_NETWORK, lite=True, sync=True, subtensor=None)[source]#

    Factory function to create an instantiated AsyncMetagraph, mainly for the ability to use sync at instantiation.

    Parameters:
    @@ -2262,9 +2204,9 @@

    Module Contents
    Parameters:
      -
    • network (str) – Network name.

    • -
    • netuid (int) – Network UID.

    • -
    • root_dir (Optional[list[str]]) – list to the file path for the root directory of your metagraph saves (i.e. [‘/’, ‘tmp’, ‘metagraphs’], +

    • network (str) – Network name.

    • +
    • netuid (int) – Network UID.

    • +
    • root_dir (Optional[list[str]]) – list to the file path for the root directory of your metagraph saves (i.e. [‘/’, ‘tmp’, ‘metagraphs’], defaults to [“~”, “.bittensor”, “metagraphs”]

    @@ -2272,7 +2214,7 @@

    Module Contents

    Directory path.

    Return type:
    -

    str

    +

    str

    @@ -2283,20 +2225,20 @@

    Module Contents
    Parameters:
    -

    dir_path (str) – Directory path.

    +

    dir_path (str) – Directory path.

    Returns:

    Latest block path.

    Return type:
    -

    str

    +

    str

    -bittensor.core.metagraph.safe_globals()#
    +bittensor.core.metagraph.safe_globals()[source]#

    Context manager to load torch files for version 2.6+

    @@ -2315,12 +2257,12 @@

    Module Contents

    previous

    -

    bittensor.core.extrinsics.utils

    +

    bittensor.core.extrinsics.weights

    Module ContentsMetagraphMixin.load()
  • MetagraphMixin.load_from_path()
  • MetagraphMixin.max_uids
  • +
  • MetagraphMixin.mechanism_count
  • +
  • MetagraphMixin.mechanisms_emissions_split
  • +
  • MetagraphMixin.mechid
  • MetagraphMixin.metadata()
  • MetagraphMixin.n
  • MetagraphMixin.name
  • diff --git a/static/python-api/html/autoapi/bittensor/core/settings/index.html b/static/python-api/html/autoapi/bittensor/core/settings/index.html index bbe4fa88d7..ce805d3488 100644 --- a/static/python-api/html/autoapi/bittensor/core/settings/index.html +++ b/static/python-api/html/autoapi/bittensor/core/settings/index.html @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -403,13 +406,16 @@

    Contents

  • BLOCKTIME
  • DEFAULTS
  • DEFAULT_ENDPOINT
  • +
  • DEFAULT_MEV_PROTECTION
  • DEFAULT_NETWORK
  • +
  • DEFAULT_PERIOD
  • FINNEY_ENTRYPOINT
  • FINNEY_TEST_ENTRYPOINT
  • HOME_DIR
  • LATENT_LITE_ENTRYPOINT
  • LOCAL_ENTRYPOINT
  • MINERS_DIR
  • +
  • MLKEM768_PUBLIC_KEY_SIZE
  • NETWORKS
  • NETWORK_EXPLORER_MAP
  • NETWORK_MAP
  • @@ -419,14 +425,12 @@

    Contents

  • REVERSE_NETWORK_MAP
  • ROOT_TAO_STAKE_WEIGHT
  • SS58_ADDRESS_LENGTH
  • -
  • SS58_FORMAT
  • -
  • SUBVORTEX_ENTRYPOINT
  • +
  • TAO_APP_BLOCK_EXPLORER
  • TAO_SYMBOL
  • TYPE_REGISTRY
  • USER_BITTENSOR_DIR
  • WALLETS_DIR
  • version_as_int
  • -
  • version_split
  • @@ -458,7 +462,13 @@

    Attributes

    - + + + + + + + @@ -479,37 +489,37 @@

    Attributes

    - + - + - + - + - + - + - + - + - + - + - + @@ -527,9 +537,6 @@

    Attributes

    - - -

    async_metagraph(netuid[, network, lite, sync, subtensor])

    async_metagraph(netuid[, mechid, network, lite, sync, ...])

    Factory function to create an instantiated AsyncMetagraph, mainly for the ability to use sync at instantiation.

    get_save_dir(network, netuid[, root_dir])

    DEFAULT_ENDPOINT

    DEFAULT_NETWORK

    DEFAULT_MEV_PROTECTION

    DEFAULT_NETWORK

    DEFAULT_PERIOD

    FINNEY_ENTRYPOINT

    MINERS_DIR

    NETWORKS

    MLKEM768_PUBLIC_KEY_SIZE

    NETWORK_EXPLORER_MAP

    NETWORKS

    NETWORK_MAP

    NETWORK_EXPLORER_MAP

    PIPADDRESS

    NETWORK_MAP

    RAO_SYMBOL

    PIPADDRESS

    READ_ONLY

    RAO_SYMBOL

    REVERSE_NETWORK_MAP

    READ_ONLY

    ROOT_TAO_STAKE_WEIGHT

    REVERSE_NETWORK_MAP

    SS58_ADDRESS_LENGTH

    ROOT_TAO_STAKE_WEIGHT

    SS58_FORMAT

    SS58_ADDRESS_LENGTH

    SUBVORTEX_ENTRYPOINT

    TAO_APP_BLOCK_EXPLORER

    TAO_SYMBOL

    version_as_int

    version_split

    @@ -556,11 +563,21 @@

    Module Contentsbittensor.core.settings.DEFAULT_ENDPOINT = 'wss://entrypoint-finney.opentensor.ai:443'#
    +
    +
    +bittensor.core.settings.DEFAULT_MEV_PROTECTION#
    +
    +
    bittensor.core.settings.DEFAULT_NETWORK = 'finney'#
    +
    +
    +bittensor.core.settings.DEFAULT_PERIOD = 128#
    +
    +
    bittensor.core.settings.FINNEY_ENTRYPOINT = 'wss://entrypoint-finney.opentensor.ai:443'#
    @@ -591,9 +608,14 @@

    Module Contentsbittensor.core.settings.MINERS_DIR#

    +
    +
    +bittensor.core.settings.MLKEM768_PUBLIC_KEY_SIZE = 1184#
    +
    +
    -bittensor.core.settings.NETWORKS = ['finney', 'test', 'archive', 'local', 'subvortex', 'latent-lite']#
    +bittensor.core.settings.NETWORKS = ['finney', 'test', 'archive', 'local', 'latent-lite']#
    @@ -613,7 +635,7 @@

    Module Contents
    -bittensor.core.settings.RAO_SYMBOL: str#
    +bittensor.core.settings.RAO_SYMBOL: str#

    @@ -637,23 +659,18 @@

    Module Contents -
    -bittensor.core.settings.SS58_FORMAT = 42#
    -

    - -
    -
    -bittensor.core.settings.SUBVORTEX_ENTRYPOINT = 'ws://subvortex.info:9944'#
    +
    +bittensor.core.settings.TAO_APP_BLOCK_EXPLORER = 'https://www.tao.app/block/'#
    -bittensor.core.settings.TAO_SYMBOL: str#
    +bittensor.core.settings.TAO_SYMBOL: str#
    -bittensor.core.settings.TYPE_REGISTRY: dict[str, dict]#
    +bittensor.core.settings.TYPE_REGISTRY: dict[str, dict]#
    @@ -668,12 +685,7 @@

    Module Contents
    -bittensor.core.settings.version_as_int: int#
    -

    - -
    -
    -bittensor.core.settings.version_split#
    +bittensor.core.settings.version_as_int: int#
    @@ -731,13 +743,16 @@

    Module ContentsBLOCKTIME

  • DEFAULTS
  • DEFAULT_ENDPOINT
  • +
  • DEFAULT_MEV_PROTECTION
  • DEFAULT_NETWORK
  • +
  • DEFAULT_PERIOD
  • FINNEY_ENTRYPOINT
  • FINNEY_TEST_ENTRYPOINT
  • HOME_DIR
  • LATENT_LITE_ENTRYPOINT
  • LOCAL_ENTRYPOINT
  • MINERS_DIR
  • +
  • MLKEM768_PUBLIC_KEY_SIZE
  • NETWORKS
  • NETWORK_EXPLORER_MAP
  • NETWORK_MAP
  • @@ -747,14 +762,12 @@

    Module ContentsREVERSE_NETWORK_MAP
  • ROOT_TAO_STAKE_WEIGHT
  • SS58_ADDRESS_LENGTH
  • -
  • SS58_FORMAT
  • -
  • SUBVORTEX_ENTRYPOINT
  • +
  • TAO_APP_BLOCK_EXPLORER
  • TAO_SYMBOL
  • TYPE_REGISTRY
  • USER_BITTENSOR_DIR
  • WALLETS_DIR
  • version_as_int
  • -
  • version_split
  • diff --git a/static/python-api/html/autoapi/bittensor/core/stream/index.html b/static/python-api/html/autoapi/bittensor/core/stream/index.html index 4fa3da9fc3..6c5820b4fb 100644 --- a/static/python-api/html/autoapi/bittensor/core/stream/index.html +++ b/static/python-api/html/autoapi/bittensor/core/stream/index.html @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -450,7 +453,7 @@

    Module Contents
    class bittensor.core.stream.BTStreamingResponseModel(/, **data)[source]#
    -

    Bases: pydantic.BaseModel

    +

    Bases: pydantic.BaseModel

    BTStreamingResponseModel() is a Pydantic model that encapsulates the token streamer callable for Pydantic validation. It is used within the StreamingSynapse() class to create a BTStreamingResponse() object, which is @@ -475,7 +478,7 @@

    Module Contents
    -token_streamer: Callable[[starlette.types.Send], Awaitable[None]]#
    +token_streamer: Callable[[starlette.types.Send], Awaitable[None]]#

    @@ -483,7 +486,7 @@

    Module Contents
    class bittensor.core.stream.StreamingSynapse(/, **data)[source]#
    -

    Bases: bittensor.core.synapse.Synapse, abc.ABC

    +

    Bases: bittensor.core.synapse.Synapse, abc.ABC

    The StreamingSynapse() class is designed to be subclassed for handling streaming responses in the Bittensor network. It provides abstract methods that must be implemented by the subclass to deserialize, process streaming responses, and extract JSON data. It also includes a method to create a streaming response object.

    @@ -510,10 +513,9 @@

    Module Contents
    Parameters:
      -
    • model (bittensor.core.stream.BTStreamingResponseModel) – A BTStreamingResponseModel instance containing -the token streamer callable, which is responsible for generating the content of the response.

    • -
    • synapse (bittensor.core.stream.StreamingSynapse) – The response Synapse to be used to update the response -headers etc.

    • +
    • model (BTStreamingResponseModel) – A BTStreamingResponseModel instance containing the token streamer callable, which is responsible +for generating the content of the response.

    • +
    • synapse (Optional[StreamingSynapse]) – The response Synapse to be used to update the response headers etc.

    • **kwargs – Additional keyword arguments passed to the parent StreamingResponse class.

    @@ -553,15 +555,14 @@

    Module Contents
    Parameters:
    -

    token_streamer (Callable[[starlette.types.Send], Awaitable[None]]) – A callable that takes a send function -and returns an awaitable. It’s responsible for generating the content of the response.

    +

    token_streamer (Callable[[starlette.types.Send], Awaitable[None]]) – A callable that takes a send function and returns an awaitable. It’s responsible for +generating the content of the response.

    Returns:
    -

    The streaming response -object, ready to be sent to the client.

    +

    The streaming response object, ready to be sent to the client.

    Return type:
    -

    BTStreamingResponse (bittensor.core.stream.StreamingSynapse.BTStreamingResponse)

    +

    BTStreamingResponse

    @@ -575,10 +576,13 @@

    Module Contents
    Parameters:
    -

    response (aiohttp.ClientResponse) – The response object from which to extract JSON data.

    +
      +
    • data. (The response object from which to extract JSON)

    • +
    • response (aiohttp.ClientResponse)

    • +
    Return type:
    -

    dict

    +

    dict

    @@ -600,12 +604,16 @@

    Module Contents
    Parameters:
    -

    response (aiohttp.ClientResponse) – The response object to be processed, typically containing chunks of data.

    +
      +
    • processed (The response object to be)

    • +
    • data. (typically containing chunks of)

    • +
    • response (aiohttp.ClientResponse)

    • +
    diff --git a/static/python-api/html/autoapi/bittensor/core/subtensor/index.html b/static/python-api/html/autoapi/bittensor/core/subtensor/index.html index 3bf06802da..bd34902dd3 100644 --- a/static/python-api/html/autoapi/bittensor/core/subtensor/index.html +++ b/static/python-api/html/autoapi/bittensor/core/subtensor/index.html @@ -48,7 +48,7 @@ - + @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -400,67 +403,113 @@

    Contents

  • Classes
  • Module Contents @@ -542,7 +614,7 @@

    Classes#<
    - +

    Subtensor

    Thin layer for interacting with Substrate Interface. Mostly a collection of frequently used calls.

    Synchronous interface for interacting with the Bittensor blockchain.

    @@ -552,1688 +624,3625 @@

    Classes#<

    Module Contents#

    -class bittensor.core.subtensor.Subtensor(network=None, config=None, log_verbose=False, fallback_endpoints=None, retry_forever=False, _mock=False)[source]#
    +class bittensor.core.subtensor.Subtensor(network=None, config=None, log_verbose=False, fallback_endpoints=None, retry_forever=False, archive_endpoints=None, mock=False)[source]#

    Bases: bittensor.core.types.SubtensorMixin

    -

    Thin layer for interacting with Substrate Interface. Mostly a collection of frequently used calls.

    -

    Initializes an instance of the Subtensor class.

    +

    Synchronous interface for interacting with the Bittensor blockchain.

    +

    This class provides a thin layer over the Substrate Interface offering synchronous functionality for Bittensor. This +includes frequently-used calls for querying blockchain data, managing stakes and liquidity positions, registering +neurons, submitting weights, and many other functions for participating in Bittensor.

    +
    +

    Notes

    +

    Key Bittensor concepts used throughout this class:

    +
      +
    • Coldkey: The key pair corresponding to a user’s overall wallet. Used to transfer, stake, manage subnets.

    • +
    • Hotkey: A key pair (each wallet may have zero, one, or more) used for neuron operations (mining and +validation).

    • +
    • Netuid: Unique identifier for a subnet (0 is the Root Subnet)

    • +
    • UID: Unique identifier for a neuron registered to a hotkey on a specific subnet.

    • +
    • Metagraph: Data structure containing the complete state of a subnet at a block.

    • +
    • TAO: The base network token; subnet 0 stake is in TAO

    • +
    • Alpha: Subnet-specific token representing some quantity of TAO staked into a subnet.

    • +
    • Rao: Smallest unit of TAO (1 TAO = 1e9 Rao)

    • +
    • Bittensor Glossary <https://docs.learnbittensor.org/glossary>

    • +
    • Wallets, Coldkeys and Hotkeys in Bittensor <https://docs.learnbittensor.org/keys/wallets>

    • +
    +
    +

    Initializes a Subtensor instance for blockchain interaction.

    Parameters:
      -
    • network (Optional[str]) – The network name or type to connect to.

    • -
    • config (Optional[bittensor.core.config.Config]) – Configuration object for the AsyncSubtensor instance.

    • -
    • log_verbose (bool) – Enables or disables verbose logging.

    • -
    • fallback_endpoints (Optional[list[str]]) – List of fallback endpoints to use if default or provided network is not available. Defaults to None.

    • -
    • retry_forever (bool) – Whether to retry forever on connection errors. Defaults to False.

    • -
    • _mock (bool) – Whether this is a mock instance. Mainly just for use in testing.

    • +
    • network (Optional[str]) – The network name to connect to (e.g., finney for Bittensor mainnet, test, for +Bittensor test network, local for a locally deployed blockchain). If None, uses the +default network from config.

    • +
    • config (Optional[bittensor.core.config.Config]) – Configuration object for the Subtensor instance. If None, uses the default configuration.

    • +
    • log_verbose (bool) – Enables or disables verbose logging.

    • +
    • fallback_endpoints (Optional[list[str]]) – List of fallback WebSocket endpoints to use if the primary network endpoint is +unavailable. These are tried in order when the default endpoint fails.

    • +
    • retry_forever (bool) – Whether to retry connection attempts indefinitely on connection errors.

    • +
    • mock (bool) – Whether this is a mock instance. FOR TESTING ONLY.

    • +
    • archive_endpoints (Optional[list[str]]) – List of archive node endpoints for queries requiring historical block data beyond the +retention period of lite nodes. These are only used when requesting blocks that the current node is +unable to serve.

    -
    Raises:
    -

    Any exceptions raised during the setup, configuration, or connection process.

    +
    Returns:
    +

    None

    -
    -add_stake(wallet, hotkey_ss58=None, netuid=None, amount=None, wait_for_inclusion=True, wait_for_finalization=False, safe_staking=False, allow_partial_stake=False, rate_tolerance=0.005, period=None)[source]#
    -

    Adds the specified amount of stake to a neuron identified by the hotkey SS58 address. -Staking is a fundamental process in the Bittensor network that enables neurons to participate actively and earn

    -
    -

    incentives.

    -
    +
    +add_liquidity(wallet, netuid, liquidity, price_low, price_high, hotkey_ss58=None, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#
    +

    Adds liquidity to the specified price range.

    Parameters:
      -
    • wallet (bittensor_wallet.Wallet) – The wallet to be used for staking.

    • -
    • hotkey_ss58 (Optional[str]) – The SS58 address of the hotkey associated with the neuron.

    • -
    • netuid (Optional[int]) – The unique identifier of the subnet to which the neuron belongs.

    • -
    • amount (Balance) – The amount of TAO to stake.

    • -
    • wait_for_inclusion (bool) – Waits for the transaction to be included in a block.

    • -
    • wait_for_finalization (bool) – Waits for the transaction to be finalized on the blockchain.

    • -
    • safe_staking (bool) – If true, enables price safety checks to protect against fluctuating prices. The stake -will only execute if the price change doesn’t exceed the rate tolerance. Default is False.

    • -
    • allow_partial_stake (bool) – If true and safe_staking is enabled, allows partial staking when -the full amount would exceed the price tolerance. If false, the entire stake fails if it would -exceed the tolerance. Default is False.

    • -
    • rate_tolerance (float) – The maximum allowed price change ratio when staking. For example, -0.005 = 0.5% maximum price increase. Only used when safe_staking is True. Default is 0.005.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s -submitted. If the transaction is not included in a block within that number of blocks, it will expire -and be rejected. You can think of it as an expiration date for the transaction.

    • +
    • wallet (bittensor_wallet.Wallet) – The wallet used to sign the extrinsic (must be unlocked).

    • +
    • netuid (int) – The UID of the target subnet for which the call is being initiated.

    • +
    • liquidity (bittensor.utils.balance.Balance) – The amount of liquidity to be added.

    • +
    • price_low (bittensor.utils.balance.Balance) – The lower bound of the price tick range. In TAO.

    • +
    • price_high (bittensor.utils.balance.Balance) – The upper bound of the price tick range. In TAO.

    • +
    • hotkey_ss58 (Optional[str]) – The hotkey with staked TAO in Alpha. If not passed then the wallet hotkey is used.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If +the transaction is not included in a block within that number of blocks, it will expire and be rejected. +You can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the extrinsic to be included in a block.

    • +
    • wait_for_finalization (bool) – Whether to wait for finalization of the extrinsic.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    True if the staking is successful, False otherwise.

    +

    The result object of the extrinsic execution.

    Return type:
    -

    bool

    +

    ExtrinsicResponse

    -
    -
    This function enables neurons to increase their stake in the network, enhancing their influence and potential

    rewards in line with Bittensor’s consensus and reward mechanisms. -When safe_staking is enabled, it provides protection against price fluctuations during the time stake is -executed and the time it is actually processed by the chain.

    +

    Note: Adding is allowed even when user liquidity is enabled in specified subnet. Call toggle_user_liquidity +method to enable/disable user liquidity.

    +
    + +
    +
    +add_proxy(wallet, delegate_ss58, proxy_type, delay, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Adds a proxy relationship.

    +

    This method creates a proxy relationship where the delegate can execute calls on behalf of the real account (the +wallet owner) with restrictions defined by the proxy type and a delay period. A deposit is required and held as +long as the proxy relationship exists.

    +
    +
    Parameters:
    +
      +
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet object.

    • +
    • delegate_ss58 (str) – The SS58 address of the delegate proxy account.

    • +
    • proxy_type (Union[str, bittensor.core.chain_data.ProxyType]) – The type of proxy permissions (e.g., “Any”, “NonTransfer”, “Governance”, “Staking”). Can be a +string or ProxyType enum value.

    • +
    • delay (int) – The number of blocks before the proxy can be used.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You +can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +

    Notes

    + +
    -
    -add_stake_multiple(wallet, hotkey_ss58s, netuids, amounts=None, wait_for_inclusion=True, wait_for_finalization=False, period=None)[source]#
    -

    Adds stakes to multiple neurons identified by their hotkey SS58 addresses. -This bulk operation allows for efficient staking across different neurons from a single wallet.

    +
    +add_stake(wallet, netuid, hotkey_ss58, amount, safe_staking=False, allow_partial_stake=False, rate_tolerance=0.005, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#
    +

    Adds stake from the specified wallet to a neuron on a specified subnet.

    +

    Staking is a fundamental process in the Bittensor network that enables neurons to participate actively +and earn incentives. This method transfers TAO from the coldkey to stake on a hotkey in a specific subnet, +converting it to Alpha (subnet-specific token) in the process.

    Parameters:
      -
    • wallet (bittensor_wallet.Wallet) – The wallet used for staking.

    • -
    • hotkey_ss58s (list[str]) – List of SS58 addresses of hotkeys to stake to.

    • -
    • netuids (list[int]) – List of network UIDs to stake to.

    • -
    • amounts (list[Balance]) – Corresponding amounts of TAO to stake for each hotkey.

    • -
    • wait_for_inclusion (bool) – Waits for the transaction to be included in a block.

    • -
    • wait_for_finalization (bool) – Waits for the transaction to be finalized on the blockchain.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If +

    • wallet (bittensor_wallet.Wallet) – The wallet to be used for staking.

    • +
    • netuid (int) – The unique identifier of the subnet to which the neuron belongs.

    • +
    • hotkey_ss58 (str) – The SS58 address of the hotkey account to stake to.

    • +
    • amount (bittensor.utils.balance.Balance) – The amount of TAO to stake.

    • +
    • safe_staking (bool) – If True, enables price safety checks to protect against fluctuating prices. The stake will +only execute if the price change doesn’t exceed the rate tolerance.

    • +
    • allow_partial_stake (bool) – If True and safe_staking is enabled, allows partial staking when the full amount would +exceed the price tolerance. If false, the entire stake fails if it would exceed the tolerance.

    • +
    • rate_tolerance (float) – The maximum allowed price change ratio when staking. For example, 0.005 = 0.5% maximum price +increase. Only used when safe_staking is True.

    • +
    • mev_protection (bool) – If True, encrypts and submits the staking transaction through the MEV Shield pallet to +protect against front-running and MEV attacks. The transaction remains encrypted in the mempool until +validators decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the transaction is not included in a block within that number of blocks, it will expire and be rejected. You can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Waits for the transaction to be included in a block.

    • +
    • wait_for_finalization (bool) – Waits for the transaction to be finalized on the blockchain.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection +used.

    Returns:
    -

    True if the staking is successful for all specified neurons, False otherwise.

    +

    The result object of the extrinsic execution.

    Return type:
    -

    bool

    +

    ExtrinsicResponse

    -
    -
    This function is essential for managing stakes across multiple neurons, reflecting the dynamic and collaborative

    nature of the Bittensor network.

    +
    +

    Notes

    +

    When safe_staking is enabled, it provides protection against price fluctuations during the time between when +stake is submitted and when it is actually processed by the chain.

    + +
    +
    + +
    +
    +add_stake_multiple(wallet, netuids, hotkey_ss58s, amounts, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#
    +

    Adds stakes to multiple neurons identified by their hotkey SS58 addresses. +This bulk operation allows for efficient staking across different neurons from a single wallet.

    +
    +
    Parameters:
    +
      +
    • wallet (bittensor_wallet.Wallet) – The wallet used for staking.

    • +
    • netuids (bittensor.core.types.UIDs) – List of subnet UIDs.

    • +
    • hotkey_ss58s (list[str]) – List of SS58 addresses of hotkeys to stake to.

    • +
    • amounts (list[bittensor.utils.balance.Balance]) – List of corresponding TAO amounts to bet for each netuid and hotkey.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You +can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Waits for the transaction to be included in a block.

    • +
    • wait_for_finalization (bool) – Waits for the transaction to be finalized on the blockchain.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    all_subnets(block=None)[source]#
    -

    Retrieves the subnet information for all subnets in the network.

    +

    Queries the blockchain for comprehensive information about all subnets, including their dynamic parameters +and operational status.

    +
    +
    Parameters:
    +

    block (Optional[int]) – The block number to query. If None, queries the current chain head.

    +
    +
    Returns:
    +

    A list of DynamicInfo objects, each containing detailed information about +a subnet, or None if the query fails.

    +
    +
    Return type:
    +

    Optional[list[DynamicInfo]]

    +
    +
    +
    + +
    +
    +announce_proxy(wallet, real_account_ss58, call_hash, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Announces a future call that will be executed through a proxy.

    +

    This method allows a proxy account to declare its intention to execute a specific call on behalf of a real +account after a delay period. The real account can review and either approve (via proxy_announced()) or reject +(via reject_proxy_announcement()) the announcement.

    Parameters:
    -

    block (Optional[int]) – The block number to query the subnet information from.

    +
      +
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet object (should be the proxy account wallet).

    • +
    • real_account_ss58 (str) – The SS58 address of the real account on whose behalf the call will be made.

    • +
    • call_hash (str) – The hash of the call that will be executed in the future.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You +can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    Returns:
    -

    A list of DynamicInfo objects, each containing detailed information about a subnet.

    +

    The result object of the extrinsic execution.

    Return type:
    -

    Optional[DynamicInfo]

    +

    ExtrinsicResponse

    +
    +

    Notes

    +
      +
    • A deposit is required when making an announcement. The deposit is returned when the announcement is

    • +
    +

    executed, rejected, or removed. The announcement can be executed after the delay period has passed. +- See: <https://docs.learnbittensor.org/keys/proxies>

    +
    -property block: int#
    -
    -
    Return type:
    -

    int

    +property block: int# +

    Provides an asynchronous getter to retrieve the current block number.

    +
    +
    Returns:
    +

    The current blockchain block number.

    +
    +
    Return type:
    +

    int

    -blocks_since_last_step(netuid, block=None)#
    -

    Returns number of blocks since the last epoch of the subnet.

    +blocks_since_last_step(netuid, block=None)[source]# +

    Queries the blockchain to determine how many blocks have passed since the last epoch step for a specific +subnet.

    Parameters:
      -
    • netuid (int) – The unique identifier of the subnetwork.

    • -
    • block (Optional[int]) – the block number for this query.

    • +
    • netuid (int) – The unique identifier of the subnetwork.

    • +
    • block (Optional[int]) – The block number to query. If None, queries the current chain head.

    Returns:
    -

    block number of the last step in the subnet.

    +

    The number of blocks since the last step in the subnet, or None if the query fails.

    Return type:
    -

    Optional[int]

    +

    Optional[int]

    +
    -blocks_since_last_update(netuid, uid)[source]#
    -

    Returns the number of blocks since the last update for a specific UID in the subnetwork.

    +blocks_since_last_update(netuid, uid, block=None)[source]# +

    Returns the number of blocks since the last update, or None if the subnetwork or UID does not exist.

    Parameters:
      -
    • netuid (int) – The unique identifier of the subnetwork.

    • -
    • uid (int) – The unique identifier of the neuron.

    • +
    • netuid (int) – The unique identifier of the subnetwork.

    • +
    • uid (int) – The unique identifier of the neuron.

    • +
    • block (Optional[int]) – The block number for this query. If None, queries the current chain head.

    Returns:
    -

    -
    The number of blocks since the last update, or None if the subnetwork or UID does not

    exist.

    +

    The number of blocks since the last update, or None if the subnetwork or UID does not exist.

    +
    +
    Return type:
    +

    Optional[int]

    -

    +
    + +
    +
    +blocks_until_next_epoch(netuid, tempo=None, block=None)#
    +

    Returns the number of blocks until the next epoch of subnet with provided netuid.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The unique identifier of the subnetwork.

    • +
    • tempo (Optional[int]) – The tempo of the subnet.

    • +
    • block (Optional[int]) – the block number for this query.

    • +
    +
    +
    Returns:
    +

    The number of blocks until the next epoch of the subnet with provided netuid.

    Return type:
    -

    Optional[int]

    +

    Optional[int]

    -bonds(netuid, block=None)[source]#
    -
    -
    Retrieves the bond distribution set by neurons within a specific subnet of the Bittensor network.

    Bonds represent the investments or commitments made by neurons in one another, indicating a level of trust -and perceived value. This bonding mechanism is integral to the network’s market-based approach to -measuring and rewarding machine intelligence.

    -
    -
    +bonds(netuid, mechid=0, block=None)[source]# +

    Retrieves the bond distribution set by subnet validators within a specific subnet.

    +

    Bonds represent a validator’s accumulated assessment of each miner’s performance over time, which serves as the +starting point of Yuma Consensus.

    Parameters:
      -
    • netuid (int) – The network UID of the subnet to query.

    • -
    • block (Optional[int]) – the block number for this query.

    • +
    • netuid (int) – Subnet identifier.

    • +
    • mechid (int) – Subnet mechanism identifier (default 0 for primary mechanism).

    • +
    • block (Optional[int]) – The block number for this query. If None, queries the current chain head.

    Returns:
    -

    List of tuples mapping each neuron’s UID to its bonds with other neurons.

    -
    -
    Return type:
    -

    list[tuple[int, list[tuple[int, int]]]]

    +

      +
    • +
      validator_uid: The UID of the validator
        +
      • bonds: List of (miner_uid, bond_value) pairs

      • +
      -
      -
      Understanding bond distributions is crucial for analyzing the trust dynamics and market behavior within the

      subnet. It reflects how neurons recognize and invest in each other’s intelligence and contributions, -supporting diverse and niche systems within the Bittensor ecosystem.

      +
    • +
    +

    Bond values are u16-normalized (0-65535, where 65535 = 1.0 or 100%).

    +

    +
    +
    Return type:
    +

    List of tuples, where each tuple contains

    +

    Example:

    +
    # Get bonds for subnet 1
    +
    +bonds = subtensor.bonds(netuid=1)
    +
    +print(bonds[0])
    +
    +# example output: (5, [(0, 32767), (1, 16383), (3, 8191)])
    +
    +# This means validator UID 5 has bonds: 50% to miner 0, 25% to miner 1, 12.5% to miner 3
    +
    +
    +
    -burned_register(wallet, netuid, wait_for_inclusion=False, wait_for_finalization=True, period=None)[source]#
    -
    -
    Registers a neuron on the Bittensor network by recycling TAO. This method of registration involves recycling

    TAO tokens, allowing them to be re-mined by performing work on the network.

    -
    -
    +burned_register(wallet, netuid, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]# +

    Registers a neuron on the Bittensor network by recycling TAO. This method of registration involves recycling +TAO tokens, allowing them to be re-mined by performing work on the network.

    Parameters:
    • wallet (bittensor_wallet.Wallet) – The wallet associated with the neuron to be registered.

    • -
    • netuid (int) – The unique identifier of the subnet.

    • -
    • wait_for_inclusion (bool, optional) – Waits for the transaction to be included in a block. Defaults to -False.

    • -
    • wait_for_finalization (bool, optional) – Waits for the transaction to be finalized on the blockchain. -Defaults to True.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If -the transaction is not included in a block within that number of blocks, it will expire and be rejected. -You can think of it as an expiration date for the transaction.

    • +
    • netuid (int) – The unique identifier of the subnet.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You +can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Waits for the transaction to be included in a block.

    • +
    • wait_for_finalization (bool) – Waits for the transaction to be finalized on the blockchain.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    True if the registration is successful, False otherwise.

    +

    The result object of the extrinsic execution.

    Return type:
    -

    bool

    +

    ExtrinsicResponse

    +
    -
    -close()[source]#
    -

    Closes the websocket connection.

    -
    - -
    -
    -commit(wallet, netuid, data, period=None)[source]#
    -

    Commits arbitrary data to the Bittensor network by publishing metadata.

    +
    +claim_root(wallet, netuids, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Submit an extrinsic to manually claim accumulated root dividends from one or more subnets.

    Parameters:
      -
    • wallet (bittensor_wallet.Wallet) – The wallet associated with the neuron committing the data.

    • -
    • netuid (int) – The unique identifier of the subnetwork.

    • -
    • data (str) – The data to be committed to the network.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s -submitted. If the transaction is not included in a block within that number of blocks, it will expire -and be rejected. You can think of it as an expiration date for the transaction.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor Wallet instance.

    • +
    • netuids (bittensor.core.types.UIDs) – Iterable of subnet IDs to claim from in this call (the chain enforces a maximum number per +transaction).

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – Number of blocks during which the transaction remains valid after submission. If the extrinsic is +not included in a block within this window, it will expire and be rejected.

    • +
    • raise_error (bool) – Whether to raise a Python exception instead of returning a failed ExtrinsicResponse.

    • +
    • wait_for_inclusion (bool) – Whether to wait until the extrinsic is included in a block before returning.

    • +
    • wait_for_finalization (bool) – Whether to wait for finalization of the extrinsic in a block before returning.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    True if the commitment was successful, False otherwise.

    -
    -
    Return type:
    -

    bool

    +

    ExtrinsicResponse describing the result of the extrinsic execution.

    +
    +
    +
    +

    Notes

    + +
    +
    + +
    +
    +close()[source]#
    +

    Closes the connection to the blockchain.

    +

    Use this to explicitly clean up resources and close the network connection instead of waiting for garbage +collection.

    +
    +
    Returns:
    +

    None

    +

    Example:

    +
    sub = bt.Subtensor(network="finney")
    +
    +# calls to subtensor
    +
    +sub.close()
    +
    +
    commit_reveal_enabled(netuid, block=None)[source]#
    -

    Check if the commit-reveal mechanism is enabled for a given network at a specific block.

    +

    Check if commit-reveal mechanism is enabled for a given subnet at a specific block.

    Parameters:
      -
    • netuid (int) – The network identifier for which to check the commit-reveal mechanism.

    • -
    • block (Optional[int]) – The block number to query.

    • +
    • netuid (int) – The unique identifier of the subnet for which to check the commit-reveal mechanism.

    • +
    • block (Optional[int]) – The block number to query. If None, queries the current chain head.

    Returns:
    -

    Returns the integer value of the hyperparameter if available; otherwise, returns None.

    +

    True if commit-reveal mechanism is enabled, False otherwise.

    Return type:
    -

    Optional[bool]

    +

    bool

    +
    -commit_weights(wallet, netuid, salt, uids, weights, version_key=version_as_int, wait_for_inclusion=False, wait_for_finalization=False, max_retries=5, period=16)[source]#
    +commit_weights(wallet, netuid, salt, uids, weights, mechid=0, version_key=version_as_int, max_attempts=5, *, mev_protection=DEFAULT_MEV_PROTECTION, period=16, raise_error=True, wait_for_inclusion=False, wait_for_finalization=False, wait_for_revealed_execution=True)[source]#

    Commits a hash of the neuron’s weights to the Bittensor blockchain using the provided wallet. This action serves as a commitment or snapshot of the neuron’s current weight distribution.

    Parameters:
    • wallet (bittensor_wallet.Wallet) – The wallet associated with the neuron committing the weights.

    • -
    • netuid (int) – The unique identifier of the subnet.

    • -
    • salt (list[int]) – list of randomly generated integers as salt to generated weighted hash.

    • -
    • uids (np.ndarray) – NumPy array of neuron UIDs for which weights are being committed.

    • -
    • weights (np.ndarray) – NumPy array of weight values corresponding to each UID.

    • -
    • version_key (int) – Version key for compatibility with the network. Default is int representation of -a Bittensor version..

    • -
    • wait_for_inclusion (bool) – Waits for the transaction to be included in a block. Default is False.

    • -
    • wait_for_finalization (bool) – Waits for the transaction to be finalized on the blockchain. Default is -False.

    • -
    • max_retries (int) – The number of maximum attempts to commit weights. Default is 5.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If +

    • netuid (int) – The unique identifier of the subnet.

    • +
    • salt (bittensor.core.types.Salt) – list of randomly generated integers as salt to generated weighted hash.

    • +
    • uids (bittensor.core.types.UIDs) – NumPy array of neuron UIDs for which weights are being committed.

    • +
    • weights (bittensor.core.types.Weights) – NumPy array of weight values corresponding to each UID.

    • +
    • mechid (int) – Subnet mechanism unique identifier.

    • +
    • version_key (int) – Version key for compatibility with the network.

    • +
    • max_attempts (int) – The number of maximum attempts to commit weights.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the transaction is not included in a block within that number of blocks, it will expire and be rejected. You can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the extrinsic to be included in a block.

    • +
    • wait_for_finalization (bool) – Whether to wait for finalization of the extrinsic.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    True if the weight commitment is successful, False otherwise. -msg is a string value describing the success or potential error.

    +

    The result object of the extrinsic execution.

    Return type:
    -

    tuple[bool, str]

    -
    -
    -
    -
    This function allows neurons to create a tamper-proof record of their weight distribution at a specific point

    in time, enhancing transparency and accountability within the Bittensor network.

    -
    -
    -
    - -
    -
    -determine_block_hash(block)[source]#
    -
    -
    Parameters:
    -

    block (Optional[int])

    -
    -
    Return type:
    -

    Optional[str]

    +

    ExtrinsicResponse

    +

    This function allows neurons to create a tamper-proof record of their weight distribution at a specific point in +time, enhancing transparency and accountability within the Bittensor network.

    +
    -
    -difficulty(netuid, block=None)[source]#
    -

    Retrieves the ‘Difficulty’ hyperparameter for a specified subnet in the Bittensor network.

    -
    -
    This parameter is instrumental in determining the computational challenge required for neurons to participate in

    consensus and validation processes.

    -
    -
    +
    +compose_call(call_module, call_function, call_params, block=None)#
    +

    Dynamically compose a GenericCall using on-chain Substrate metadata after validating the provided parameters.

    Parameters:
      -
    • netuid (int) – The unique identifier of the subnet.

    • -
    • block (Optional[int]) – The blockchain block number for the query.

    • +
    • call_module (str) – Pallet name (e.g. “SubtensorModule”, “AdminUtils”).

    • +
    • call_function (str) – Function name (e.g. “set_weights”, “sudo_set_tempo”).

    • +
    • call_params (dict[str, Any]) – Dictionary of parameters for the call.

    • +
    • block (Optional[int]) – Block number for querying metadata.

    Returns:
    -

    The value of the ‘Difficulty’ hyperparameter if the subnet exists, None otherwise.

    +

    Composed call object ready for extrinsic submission.

    Return type:
    -

    Optional[int]

    -
    -
    -
    -
    The ‘Difficulty’ parameter directly impacts the network’s security and integrity by setting the computational

    effort required for validating transactions and participating in the network’s consensus mechanism.

    +

    GenericCall

    +
    +

    Notes

    +

    For detailed documentation and examples of composing calls, including the CallBuilder utility, see: +<https://docs.learnbittensor.org/sdk/call>

    +
    -
    -does_hotkey_exist(hotkey_ss58, block=None)[source]#
    -

    Returns true if the hotkey is known by the chain and there are accounts.

    +
    +contribute_crowdloan(wallet, crowdloan_id, amount, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Contributes TAO to an active crowdloan campaign.

    +

    Contributions must occur before the crowdloan’s end block and are subject to minimum contribution +requirements. If a contribution would push the total raised above the cap, it is automatically clipped +to fit the remaining amount. Once the cap is reached, further contributions are rejected.

    Parameters:
      -
    • hotkey_ss58 (str) – The SS58 address of the hotkey.

    • -
    • block (Optional[int]) – the block number for this query.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet instance used to sign the transaction (coldkey pays, coldkey receives emissions).

    • +
    • crowdloan_id (int) – The unique identifier of the crowdloan to contribute to.

    • +
    • amount (bittensor.utils.balance.Balance) – Amount to contribute (TAO). Must meet or exceed the campaign’s min_contribution.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted.

    • +
    • raise_error (bool) – If True, raises an exception rather than returning failure in the response.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the extrinsic to be included in a block.

    • +
    • wait_for_finalization (bool) – Whether to wait for finalization of the extrinsic.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    True if the hotkey is known by the chain and there are accounts, False otherwise.

    +

    ExtrinsicResponse indicating success or failure, with error details if applicable.

    Return type:
    -

    bool

    +

    bittensor.core.types.ExtrinsicResponse

    +
    +

    Notes

    + +
    -
    -encode_params(call_definition, params)[source]#
    -

    Returns a hex encoded string of the params using their types.

    +
    +create_crowdloan(wallet, deposit, min_contribution, cap, end, call=None, target_address=None, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Creates a new crowdloan campaign on-chain.

    Parameters:
      -
    • call_definition (dict[str, list[bittensor.core.types.ParamWithTypes]])

    • -
    • params (Union[list[Any], dict[str, Any]])

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor Wallet instance used to sign the transaction.

    • +
    • deposit (bittensor.utils.balance.Balance) – Initial deposit in RAO from the creator.

    • +
    • min_contribution (bittensor.utils.balance.Balance) – Minimum contribution amount.

    • +
    • cap (bittensor.utils.balance.Balance) – Maximum cap to be raised.

    • +
    • end (int) – Block number when the campaign ends.

    • +
    • call (Optional[scalecodec.types.GenericCall]) – Runtime call data (e.g., subtensor::register_leased_network).

    • +
    • target_address (Optional[str]) – SS58 address to transfer funds to on success.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If +the transaction is not included in a block within that number of blocks, it will expire and be rejected.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the extrinsic to be included in a block.

    • +
    • wait_for_finalization (bool) – Whether to wait for finalization of the extrinsic.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    -
    Return type:
    -

    str

    +
    Returns:
    +

    ExtrinsicResponse indicating success or failure. On success, the crowdloan ID can be extracted from the +Crowdloan.Created event in the response.

    -
    +
    Return type:
    +

    bittensor.core.types.ExtrinsicResponse

    +
    +
    +
    +

    Notes

    + +
    -
    -filter_netuids_by_registered_hotkeys(all_netuids, filter_for_netuids, all_hotkeys, block)[source]#
    -

    Filters a given list of all netuids for certain specified netuids and hotkeys

    +
    +create_pure_proxy(wallet, proxy_type, delay, index, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Creates a pure proxy account.

    +

    A pure proxy is a keyless account that can only be controlled through proxy relationships. Unlike regular +proxies, pure proxies do not have their own private keys, making them more secure for certain use cases. The +pure proxy address is deterministically generated based on the spawner account, proxy type, delay, and index.

    Parameters:
      -
    • all_netuids (Iterable[int]) – A list of netuids to filter.

    • -
    • filter_for_netuids (Iterable[int]) – A subset of all_netuids to filter from the main list.

    • -
    • all_hotkeys (Iterable[Wallet]) – Hotkeys to filter from the main list.

    • -
    • block (Optional[int]) – The blockchain block number for the query.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet object.

    • +
    • proxy_type (Union[str, bittensor.core.chain_data.ProxyType]) – The type of proxy permissions for the pure proxy. Can be a string or ProxyType enum value. For +available proxy types and their permissions, see the documentation link in the Notes section below.

    • +
    • delay (int) – Optionally, include a delay in blocks. The number of blocks that must elapse between announcing and +executing a proxied transaction. A delay of 0 means the pure proxy can be used immediately without any +announcement period. A non-zero delay creates a time-lock, requiring announcements before execution to give +the spawner time to review/reject.

    • +
    • index (int) – A salt value (u16, range 0-65535) used to generate unique pure proxy addresses. This should generally +be left as 0 unless you are creating batches of proxies. When creating multiple pure proxies with +identical parameters (same proxy_type and delay), different index values will produce different SS58 +addresses. This is not a sequential counter—you can use any unique values (e.g., 0, 100, 7, 42) in any +order. The index must be preserved as it’s required for kill_pure_proxy(). If creating multiple pure +proxies in a single batch transaction, each must have a unique index value.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You +can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    The filtered list of netuids.

    +

    The result object of the extrinsic execution.

    Return type:
    -

    list[int]

    +

    ExtrinsicResponse

    +
    +

    Notes

    + +
    -
    -get_all_commitments(netuid, block=None)[source]#
    -
    +
    +determine_block_hash(block)[source]#
    +

    Determine the block hash for the block specified with the provided parameters.

    +

    Ensures that only one of the block specification parameters is used and returns the appropriate block hash +for blockchain queries.

    +
    Parameters:
    -
      -
    • netuid (int)

    • -
    • block (Optional[int])

    • -
    +

    block (Optional[int]) – The block number to get the hash for. If None, returns None.

    -
    Return type:
    -

    dict[str, str]

    +
    Returns:
    +

    The block hash (hex string with 0x prefix) if one can be determined, None otherwise.

    +
    +
    Return type:
    +

    Optional[str]

    +
    -
    -get_all_metagraphs_info(block=None)[source]#
    -

    Retrieves a list of MetagraphInfo objects for all subnets

    +
    +difficulty(netuid, block=None)[source]#
    +

    Retrieves the ‘Difficulty’ hyperparameter for a specified subnet in the Bittensor network.

    +
    +
    This parameter determines the computational challenge required for neurons to participate in consensus and

    validation processes, using proof of work (POW) registration.

    +
    +
    Parameters:
    -

    block (Optional[int]) – the block number at which to retrieve the hyperparameter. Do not specify if using block_hash or -reuse_block

    +
      +
    • netuid (int) – The unique identifier of the subnet.

    • +
    • block (Optional[int]) – The block number to query. If None, queries the current chain head.

    • +
    Returns:
    -

    MetagraphInfo dataclass

    +

    The value of the ‘Difficulty’ hyperparameter if the subnet exists, None otherwise.

    Return type:
    -

    list[bittensor.core.chain_data.MetagraphInfo]

    +

    Optional[int]

    +
    +

    Notes

    +

    Burn registration is much more common on Bittensor subnets currently, compared to POW registration.

    + +
    -
    -get_all_neuron_certificates(netuid, block=None)#
    -

    Retrieves the TLS certificates for neurons within a specified subnet (netuid) of the Bittensor network.

    +
    +dissolve_crowdloan(wallet, crowdloan_id, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Dissolves a failed or refunded crowdloan, cleaning up storage and returning the creator’s deposit.

    +

    This permanently removes the crowdloan from on-chain storage and returns the creator’s deposit. Can only +be called by the creator after all non-creator contributors have been refunded via refund_crowdloan. +This is the final step in the lifecycle of a failed crowdloan (one that did not reach its cap by the end +block).

    Parameters:
      -
    • netuid (int) – The unique identifier of the subnet.

    • -
    • block (Optional[int]) – The blockchain block number for the query.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet instance used to sign the transaction (must be the creator’s coldkey).

    • +
    • crowdloan_id (int) – The unique identifier of the crowdloan to dissolve.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after submission.

    • +
    • raise_error (bool) – If True, raises an exception rather than returning failure in the response.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the extrinsic to be included in a block.

    • +
    • wait_for_finalization (bool) – Whether to wait for finalization of the extrinsic.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    Certificate} for the key/Certificate pairs on the subnet

    +

    ExtrinsicResponse indicating success or failure, with error details if applicable.

    Return type:
    -

    {ss58

    +

    bittensor.core.types.ExtrinsicResponse

    -

    This function is used for certificate discovery for setting up mutual tls communication between neurons.

    +
    +

    Notes

    +
      +
    • Only the creator can dissolve their own crowdloan.

    • +
    • All non-creator contributors must be refunded first via refund_crowdloan.

    • +
    • The creator’s deposit (and any remaining contribution above deposit) is returned.

    • +
    • After dissolution, the crowdloan is permanently removed from chain storage.

    • +
    • <https://docs.learnbittensor.org/subnets/crowdloans>

    • +
    +
    -
    -get_all_revealed_commitments(netuid, block=None)#
    -

    Returns all revealed commitments for a given netuid.

    +
    +does_hotkey_exist(hotkey_ss58, block=None)[source]#
    +

    Returns true if the hotkey has been associated with a coldkey through account creation.

    +

    This method queries the Subtensor’s Owner storage map to check if the hotkey has been paired with a +coldkey, as it must be before it (the hotkey) can be used for neuron registration.

    +

    The Owner storage map defaults to the zero address (5C4hrfjw9DjXZTzV3MwzrrAr9P1MJhSrvWGWqi1eSuyUpnhM) +for unused hotkeys. This method returns True if the Owner value is anything other than this default.

    Parameters:
      -
    • netuid (int) – The unique identifier of the subnetwork.

    • -
    • block (Optional[int]) – The block number to retrieve the commitment from. Default is None.

    • +
    • hotkey_ss58 (str) – The SS58 address of the hotkey.

    • +
    • block (Optional[int]) – The block number to query. If None, queries the current chain head.

    Returns:
    -

    A dictionary of all revealed commitments in view {ss58_address: (reveal block, commitment message)}.

    +

    True if the hotkey has been associated with a coldkey, False otherwise.

    Return type:
    -

    result (dict)

    +

    bool

    -

    Example of result: -{

    -
    -

    “5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY”: ( (12, “Alice message 1”), (152, “Alice message 2”) ), -“5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty”: ( (12, “Bob message 1”), (147, “Bob message 2”) ),

    -
    -

    }

    +
    -
    -get_all_subnets_info(block=None)[source]#
    -
    -
    Retrieves detailed information about all subnets within the Bittensor network. This function provides

    comprehensive data on each subnet, including its characteristics and operational parameters.

    +
    +filter_netuids_by_registered_hotkeys(all_netuids, filter_for_netuids, all_hotkeys, block)[source]#
    +

    Filters netuids by combining netuids from all_netuids and netuids with registered hotkeys.

    +
    +
    If filter_for_netuids is empty/None:

    Returns all netuids where hotkeys from all_hotkeys are registered.

    +
    +
    If filter_for_netuids is provided:

    Returns the union of: +- Netuids from all_netuids that are in filter_for_netuids, AND +- Netuids with registered hotkeys that are in filter_for_netuids

    +

    This allows you to get netuids that are either in your specified list (all_netuids) or have registered hotkeys, +as long as they match filter_for_netuids.

    Parameters:
    -

    block (Optional[int]) – The blockchain block number for the query.

    +
      +
    • all_netuids (Iterable[int]) – A list of netuids to consider for filtering.

    • +
    • filter_for_netuids (Iterable[int]) – A subset of netuids to restrict the result to. If None/empty, returns +all netuids with registered hotkeys.

    • +
    • all_hotkeys (Iterable[Wallet]) – Hotkeys to check for registration.

    • +
    • block (Optional[int]) – The blockchain block number for the query.

    • +
    Returns:
    -

    A list of SubnetInfo objects, each containing detailed information about a subnet.

    +

    The filtered list of netuids (union of filtered all_netuids and registered hotkeys).

    Return type:
    -

    list[SubnetInfo]

    -
    -
    -
    -
    Gaining insights into the subnets’ details assists in understanding the network’s composition, the roles of

    different subnets, and their unique features.

    +

    list[int]

    -
    -get_balance(address, block=None)[source]#
    -

    Retrieves the balance for given coldkey.

    +
    +finalize_crowdloan(wallet, crowdloan_id, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Finalizes a successful crowdloan after the cap is fully raised and the end block has passed.

    +

    Finalization executes the stored call (e.g., register_leased_network) or transfers raised funds to +the target address. For subnet lease crowdloans, this registers the subnet, creates a +SubnetLeaseBeneficiary proxy for the creator, and records contributor shares for pro-rata emissions +distribution. Leftover funds (after registration and proxy costs) are refunded to contributors.

    +

    Only the creator can finalize, and finalization can only occur after both the end block is reached and +the total raised equals the cap.

    Parameters:
      -
    • address (str) – coldkey address.

    • -
    • block (Optional[int]) – The blockchain block number for the query.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet instance used to sign the transaction (must be the creator’s coldkey).

    • +
    • crowdloan_id (int) – The unique identifier of the crowdloan to finalize.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after submission.

    • +
    • raise_error (bool) – If True, raises an exception rather than returning failure in the response.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the extrinsic to be included in a block.

    • +
    • wait_for_finalization (bool) – Whether to wait for finalization of the extrinsic.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    Balance object.

    +

    ExtrinsicResponse indicating success or failure. On success, a subnet lease is created (if applicable) +and contributor shares are recorded for emissions.

    Return type:
    -

    bittensor.utils.balance.Balance

    -
    -
    +

    bittensor.core.types.ExtrinsicResponse

    +
    +
    +
    +

    Notes

    + +
    -
    -get_balances(*addresses, block=None)[source]#
    -

    Retrieves the balance for given coldkey(s)

    +
    +get_admin_freeze_window(block=None)#
    +

    Returns the duration, in blocks, of the administrative freeze window at the end of each epoch.

    +

    The admin freeze window is a period at the end of each epoch during which subnet owner +operations are prohibited. This prevents subnet owners from modifying hyperparameters or performing certain +administrative actions right before validators submit weights at the epoch boundary.

    Parameters:
    -
      -
    • addresses (str) – coldkey addresses(s).

    • -
    • block (Optional[int]) – The blockchain block number for the query.

    • -
    +

    block (Optional[int]) – The block number to query.

    Returns:
    -

    Balance objects}.

    +

    10 blocks, ~2 minutes).

    Return type:
    -

    Dict of {address

    +

    The number of blocks in the administrative freeze window (default

    +
    -
    -get_block_hash(block=None)[source]#
    -
    -
    Retrieves the hash of a specific block on the Bittensor blockchain. The block hash is a unique identifier

    representing the cryptographic hash of the block’s content, ensuring its integrity and immutability.

    -
    -
    +
    +get_all_commitments(netuid, block=None)[source]#
    +

    Retrieves raw commitment metadata from a given subnet.

    +

    This method retrieves all commitment data for all neurons in a specific subnet. This is useful for analyzing the +commit-reveal patterns across an entire subnet.

    Parameters:
    -

    block (int) – The block number for which the hash is to be retrieved.

    +
      +
    • netuid (int) – The unique identifier of the subnetwork.

    • +
    • block (Optional[int]) – The block number to query. If None, queries the current chain head.

    • +
    Returns:
    -

    The cryptographic hash of the specified block.

    +

    commitment with the commitment as a string.

    Return type:
    -

    str

    -
    -
    -
    -
    The block hash is a fundamental aspect of blockchain technology, providing a secure reference to each block’s

    data. It is crucial for verifying transactions, ensuring data consistency, and maintaining the -trustworthiness of the blockchain.

    +

    A mapping of the ss58

    +

    Example:

    -
    -get_children(hotkey, netuid, block=None)[source]#
    -
    -
    This method retrieves the children of a given hotkey and netuid. It queries the SubtensorModule’s ChildKeys

    storage function to get the children and formats them before returning as a tuple.

    -
    -
    +
    +get_all_ema_tao_inflow(block=None)#
    +

    Retrieves the EMA (exponential moving average) of net TAO flows for all subnets.

    +

    The EMA tracks net TAO flows (staking minus unstaking) with a 30-day half-life (~86.8 day window), smoothing +out short-term fluctuations while capturing sustained staking trends. This metric determines the subnet’s share +of TAO emissions under the current, flow-based model. Positive values indicate net inflow (more staking than unstaking), +negative values indicate net outflow. Subnets with negative EMA flows receive zero emissions.

    Parameters:
    -
      -
    • hotkey (str) – The hotkey value.

    • -
    • netuid (int) – The netuid value.

    • -
    • block (Optional[int]) – The block number for which the children are to be retrieved.

    • -
    +

    block (Optional[int]) – The block number to retrieve the commitment from.

    Returns:
    -

    -
    A tuple containing a boolean indicating success or failure, a list of formatted children, and an error

    message (if applicable)

    -
    -
    -

    +

    Dict mapping netuid to (last_updated_block, ema_flow). The Balance represents the EMA of net TAO flow in +TAO units. Positive values indicate sustained net inflow, negative values indicate sustained net outflow.

    Return type:
    -

    tuple[bool, list[tuple[float, str]], str]

    +

    dict[int, tuple[int, bittensor.utils.balance.Balance]]

    +

    The EMA uses a smoothing factor α ≈ 0.000003209, creating a 30-day half-life and ~86.8 day window. Only +direct stake/unstake operations count toward flows; neuron registrations and root claims are excluded. +Subnet 0 (root network) does not have an EMA TAO flow value.

    +
    -
    -get_children_pending(hotkey, netuid, block=None)#
    -

    This method retrieves the pending children of a given hotkey and netuid. -It queries the SubtensorModule’s PendingChildKeys storage function.

    +
    +get_all_metagraphs_info(all_mechanisms=False, block=None)[source]#
    +

    Retrieves a list of MetagraphInfo objects for all subnets

    Parameters:
      -
    • hotkey (str) – The hotkey value.

    • -
    • netuid (int) – The netuid value.

    • -
    • block (Optional[int]) – The block number for which the children are to be retrieved.

    • +
    • all_mechanisms (bool) – If True then returns all mechanisms, otherwise only those with index 0 for all subnets.

    • +
    • block (Optional[int]) – The blockchain block number for the query.

    Returns:
    -

    A list of children with their proportions. -int: The cool-down block number.

    +

    List of MetagraphInfo objects for all existing subnets.

    Return type:
    -

    list[tuple[float, str]]

    +

    Optional[list[bittensor.core.chain_data.MetagraphInfo]]

    +
    -
    -get_commitment(netuid, uid, block=None)[source]#
    -

    Retrieves the on-chain commitment for a specific neuron in the Bittensor network.

    +
    +get_all_neuron_certificates(netuid, block=None)[source]#
    +

    Retrieves the TLS certificates for neurons within a specified subnet (netuid) of the Bittensor network.

    Parameters:
      -
    • netuid (int) – The unique identifier of the subnetwork.

    • -
    • uid (int) – The unique identifier of the neuron.

    • -
    • block (Optional[int]) – The block number to retrieve the commitment from. If None, the latest block is used. -Default is None.

    • +
    • netuid (int) – The unique identifier of the subnet.

    • +
    • block (Optional[int]) – The blockchain block number for the query.

    Returns:
    -

    The commitment data as a string.

    +

    Dictionary mapping neuron hotkey SS58 addresses to their Certificate objects. Only includes neurons +that have registered certificates.

    Return type:
    -

    str

    -
    -
    -
    - -
    -
    -get_current_block()[source]#
    -
    -
    Returns the current block number on the Bittensor blockchain. This function provides the latest block number,

    indicating the most recent state of the blockchain.

    -
    -
    -
    -
    Returns:
    -

    The current chain block number.

    -
    -
    Return type:
    -

    int

    -
    -
    -
    -
    Knowing the current block number is essential for querying real-time data and performing time-sensitive

    operations on the blockchain. It serves as a reference point for network activities and data -synchronization.

    +

    dict[str, bittensor.utils.Certificate]

    +
    +

    Notes

    +

    This method is used for certificate discovery to establish mutual TLS communication between neurons.

    + +
    -
    -get_current_weight_commit_info(netuid, block=None)[source]#
    -

    Retrieves CRV3 weight commit information for a specific subnet.

    +
    +get_all_revealed_commitments(netuid, block=None)[source]#
    +

    Retrieves all revealed commitments for a given subnet.

    Parameters:
      -
    • netuid (int) – The unique identifier of the subnet.

    • -
    • block (Optional[int]) – The blockchain block number for the query. Default is None.

    • +
    • netuid (int) – The unique identifier of the subnetwork.

    • +
    • block (Optional[int]) – The block number to query. If None, queries the current chain head.

    Returns:
    -

    A list of commit details, where each entry is a dictionary with keys ‘who’, ‘serialized_commit’, and -‘reveal_round’, or an empty list if no data is found.

    +

    A dictionary mapping hotkey addresses to tuples of (reveal_block, commitment_message) pairs. +Each validator can have multiple revealed commitments (up to 10 most recent).

    Return type:
    -

    list

    +

    dict[str, tuple[tuple[int, str], Ellipsis]]

    +

    Example:

    +
    # sample return value
    +
    +{
    +
    +    "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY": ( (12, "Alice message 1"), (152, "Alice message 2") ),
    +
    +    "5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty": ( (12, "Bob message 1"), (147, "Bob message 2") ),
    +
    +}
    +
    +
    +
    -
    -get_delegate_by_hotkey(hotkey_ss58, block=None)[source]#
    -
    -
    Retrieves detailed information about a delegate neuron based on its hotkey. This function provides a

    comprehensive view of the delegate’s status, including its stakes, nominators, and reward distribution.

    -
    -
    +
    +get_all_subnets_info(block=None)[source]#
    +

    Retrieves detailed information about all subnets within the Bittensor network.

    Parameters:
    -
      -
    • hotkey_ss58 (str) – The SS58 address of the delegate’s hotkey.

    • -
    • block (Optional[int]) – The blockchain block number for the query.

    • -
    +

    block (Optional[int]) – The block number to query. If None, queries the current chain head.

    Returns:
    -

    Detailed information about the delegate neuron, None if not found.

    +

    A list of SubnetInfo objects, each containing detailed information about a subnet.

    Return type:
    -

    Optional[DelegateInfo]

    -
    -
    -
    -
    This function is essential for understanding the roles and influence of delegate neurons within the Bittensor

    network’s consensus and governance structures.

    +

    list[bittensor.core.chain_data.SubnetInfo]

    -
    -get_delegate_identities(block=None)[source]#
    -

    Fetches delegates identities from the chain.

    +
    +get_all_subnets_netuid(block=None)#
    +

    Retrieves the list of all subnet unique identifiers (netuids) currently present in the Bittensor network.

    Parameters:
    -

    block (Optional[int]) – The blockchain block number for the query.

    +

    block (Optional[int]) – The blockchain block number for the query.

    Returns:
    -

    ChainIdentity, …}

    +

    A list of subnet netuids.

    Return type:
    -

    Dict {ss58

    +

    bittensor.core.types.UIDs

    +

    This function provides a comprehensive view of the subnets within the Bittensor network, +offering insights into its diversity and scale.

    -
    -get_delegate_take(hotkey_ss58, block=None)[source]#
    -
    -
    Retrieves the delegate ‘take’ percentage for a neuron identified by its hotkey. The ‘take’ represents the

    percentage of rewards that the delegate claims from its nominators’ stakes.

    -
    -
    +
    +get_auto_stakes(coldkey_ss58, block=None)#
    +

    Fetches auto stake destinations for a given wallet across all subnets.

    Parameters:
      -
    • hotkey_ss58 (str) – The SS58 address of the neuron’s hotkey.

    • -
    • block (Optional[int]) – The blockchain block number for the query.

    • +
    • coldkey_ss58 (str) – Coldkey ss58 address.

    • +
    • block (Optional[int]) – The block number for the query. If None, queries the current chain head.

    Returns:
    -

    The delegate take percentage.

    +

      +
    • netuid: The unique identifier of the subnet.

    • +
    • hotkey: The hotkey of the wallet.

    • +
    +

    Return type:
    -

    float

    -
    -
    -
    -
    The delegate take is a critical parameter in the network’s incentive structure, influencing the distribution of

    rewards among neurons and their nominators.

    +

    Dictionary mapping netuid to hotkey, where

    +
    -
    -get_delegated(coldkey_ss58, block=None)[source]#
    -

    Retrieves a list of delegates and their associated stakes for a given coldkey. This function identifies the -delegates that a specific account has staked tokens on.

    +
    +get_balance(address, block=None)[source]#
    +

    Retrieves the balance for given coldkey.

    +

    This method queries the System module’s Account storage to get the current balance of a coldkey address. The +balance represents the amount of TAO tokens held by the specified address.

    Parameters:
      -
    • coldkey_ss58 (str) – The SS58 address of the account’s coldkey.

    • -
    • block (Optional[int]) – The blockchain block number for the query.

    • +
    • address (str) – The coldkey address in SS58 format.

    • +
    • block (Optional[int]) – The block number to query. If None, queries the current chain head.

    Returns:
    -

    A list of tuples, each containing a delegate’s information and staked amount.

    +

    The balance object containing the account’s TAO balance.

    Return type:
    -

    list[tuple[bittensor.core.chain_data.DelegateInfo, bittensor.utils.balance.Balance]]

    -
    -
    -
    -
    This function is important for account holders to understand their stake allocations and their involvement in

    the network’s delegation and consensus mechanisms.

    +

    Balance

    -
    -get_delegates(block=None)[source]#
    -

    Fetches all delegates on the chain

    +
    +get_balances(*addresses, block=None)[source]#
    +

    Retrieves the balance for given coldkey(s).

    +

    This method efficiently queries multiple coldkey addresses in a single batch operation, returning a dictionary +mapping each address to its corresponding balance. This is more efficient than calling get_balance multiple +times.

    Parameters:
    -

    block (Optional[int]) – The blockchain block number for the query.

    +
      +
    • *addresses (str) – Variable number of coldkey addresses in SS58 format.

    • +
    • block (Optional[int]) – The block number to query. If None, queries the current chain head.

    • +
    Returns:
    -

    List of DelegateInfo objects, or an empty list if there are no delegates.

    +

    A dictionary mapping each address to its Balance object.

    Return type:
    -

    list[bittensor.core.chain_data.DelegateInfo]

    +

    dict[str, bittensor.utils.balance.Balance]

    -
    -get_existential_deposit(block=None)[source]#
    -

    Retrieves the existential deposit amount for the Bittensor blockchain. -The existential deposit is the minimum amount of TAO required for an account to exist on the blockchain. -Accounts with balances below this threshold can be reaped to conserve network resources.

    +
    +get_block_hash(block=None)[source]#
    +

    Retrieves the hash of a specific block on the Bittensor blockchain.

    +

    The block hash is a unique identifier representing the cryptographic hash of the block’s content, ensuring its +integrity and immutability. It is a fundamental aspect of blockchain technology, providing a secure reference +to each block’s data. It is crucial for verifying transactions, ensuring data consistency, and maintaining the +trustworthiness of the blockchain.

    Parameters:
    -

    block (Optional[int]) – The blockchain block number for the query.

    +

    block (Optional[int]) – The block number for which the hash is to be retrieved. If None, returns the latest block hash.

    Returns:
    -

    The existential deposit amount.

    +

    The cryptographic hash of the specified block.

    Return type:
    -

    Optional[bittensor.utils.balance.Balance]

    -
    -
    -
    -
    The existential deposit is a fundamental economic parameter in the Bittensor network, ensuring efficient use of

    storage and preventing the proliferation of dust accounts.

    +

    str

    +
    -
    -get_hotkey_owner(hotkey_ss58, block=None)[source]#
    -

    Retrieves the owner of the given hotkey at a specific block hash. -This function queries the blockchain for the owner of the provided hotkey. If the hotkey does not exist at the

    -
    -

    specified block hash, it returns None.

    -
    +
    +get_block_info(block=None, block_hash=None)#
    +

    Retrieve complete information about a specific block from the Subtensor chain.

    +

    This method aggregates multiple low-level RPC calls into a single structured response, returning both the raw +on-chain data and high-level decoded metadata for the given block.

    Parameters:
      -
    • hotkey_ss58 (str) – The SS58 address of the hotkey.

    • -
    • block (Optional[int]) – The blockchain block number for the query.

    • +
    • block (Optional[int]) – The block number for which the hash is to be retrieved.

    • +
    • block_hash (Optional[str]) – The hash of the block to retrieve the block from.

    Returns:
    -

    The SS58 address of the owner if the hotkey exists, or None if it doesn’t.

    +

    A dataclass containing all available information about the specified block, including:

    +
    +
      +
    • number: The block number.

    • +
    • hash: The corresponding block hash.

    • +
    • timestamp: The timestamp of the block (based on the Timestamp.Now extrinsic).

    • +
    • header: The raw block header returned by the node RPC.

    • +
    • extrinsics: The list of decoded extrinsics included in the block.

    • +
    • explorer: The link to block explorer service. Always related with finney block data.

    • +
    +
    +

    Return type:
    -

    Optional[str]

    +

    BlockInfo instance

    -
    -
    -get_hotkey_stake#
    -
    -
    -
    -get_hyperparameter(param_name, netuid, block=None)[source]#
    -

    Retrieves a specified hyperparameter for a specific subnet.

    +
    +get_children(hotkey_ss58, netuid, block=None)[source]#
    +

    Retrieves the children of a given hotkey and netuid.

    +

    This method queries the SubtensorModule’s ChildKeys storage function to get the children and formats them before +returning as a tuple. It provides information about the child neurons that a validator has set for weight +distribution.

    Parameters:
      -
    • param_name (str) – The name of the hyperparameter to retrieve.

    • -
    • netuid (int) – The unique identifier of the subnet.

    • -
    • block (Optional[int]) – the block number at which to retrieve the hyperparameter.

    • +
    • hotkey_ss58 (str) – The hotkey value.

    • +
    • netuid (int) – The netuid value.

    • +
    • block (Optional[int]) – The block number to query. If None, queries the current chain head.

    Returns:
    -

    The value of the specified hyperparameter if the subnet exists, or None

    +

    +
    A tuple containing a boolean indicating success or failure, a list of formatted children with their

    proportions, and an error message (if applicable).

    +
    +
    +

    Return type:
    -

    Optional[Any]

    +

    tuple[bool, list[tuple[float, str]], str]

    +

    Example:

    +
    # Get children for a hotkey in subnet 1
    +
    +success, children, error = subtensor.get_children(hotkey="5F...", netuid=1)
    +
    +if success:
    +
    +    for proportion, child_hotkey in children:
    +
    +        print(f"Child {child_hotkey}: {proportion}")
    +
    +
    +
    -
    -get_metagraph_info(netuid, block=None)[source]#
    -

    Retrieves the MetagraphInfo dataclass from the node for a single subnet (netuid)

    +
    +get_children_pending(hotkey_ss58, netuid, block=None)[source]#
    +

    Retrieves the pending children of a given hotkey and netuid.

    +

    This method queries the SubtensorModule’s PendingChildKeys storage function to get children that are pending +approval or in a cooldown period. These are children that have been proposed but not yet finalized.

    Parameters:
      -
    • netuid (int) – The NetUID of the subnet.

    • -
    • block (Optional[int]) – the block number at which to retrieve the hyperparameter. Do not specify if using block_hash or -reuse_block

    • +
    • hotkey_ss58 (str) – The hotkey value.

    • +
    • netuid (int) – The netuid value.

    • +
    • block (Optional[int]) – The block number for which the children are to be retrieved. If None, queries the current chain head.

    Returns:
    -

    MetagraphInfo dataclass

    +

    A tuple containing:

    +
    +
      +
    • list[tuple[float, str]]: A list of children with their proportions.

    • +
    • int: The cool-down block number.

    • +
    +
    +

    Return type:
    -

    Optional[bittensor.core.chain_data.MetagraphInfo]

    +

    tuple

    +
    -
    -get_minimum_required_stake()[source]#
    -

    Returns the minimum required stake for nominators in the Subtensor network. -This method retries the substrate call up to three times with exponential backoff in case of failures.

    +
    +get_commitment(netuid, uid, block=None)[source]#
    +

    Retrieves the on-chain commitment for a specific neuron in the Bittensor network.

    +

    This method retrieves the commitment data that a neuron has published to the blockchain. Commitments are used in +the commit-reveal mechanism for secure weight setting and other network operations.

    -
    Returns:
    -

    The minimum required stake as a Balance object.

    +
    Parameters:
    +
      +
    • netuid (int) – The unique identifier of the subnetwork.

    • +
    • uid (int) – The unique identifier of the neuron.

    • +
    • block (Optional[int]) – The block number to query. If None, queries the current chain head.

    • +
    -
    Return type:
    -

    Balance

    +
    Returns:
    +

    The commitment data as a string.

    -
    Raises:
    -

    Exception – If the substrate call fails after the maximum number of retries.

    +
    Return type:
    +

    str

    +
    -
    -get_netuids_for_hotkey(hotkey_ss58, block=None)[source]#
    -
    -
    Retrieves a list of subnet UIDs (netuids) for which a given hotkey is a member. This function identifies the

    specific subnets within the Bittensor network where the neuron associated with the hotkey is active.

    -
    -
    +
    +get_commitment_metadata(netuid, hotkey_ss58, block=None)#
    +

    Fetches raw commitment metadata from specific subnet for given hotkey.

    Parameters:
      -
    • hotkey_ss58 (str) – The SS58 address of the neuron’s hotkey.

    • -
    • block (Optional[int]) – The blockchain block number for the query.

    • +
    • netuid (int) – The unique subnet identifier.

    • +
    • hotkey_ss58 (str) – The hotkey ss58 address.

    • +
    • block (Optional[int]) – The blockchain block number for the query.

    Returns:
    -

    A list of netuids where the neuron is a member.

    +

    The raw commitment metadata. Returns a dict when commitment data exists, +or an empty string when no commitment is found for the given hotkey on the subnet.

    Return type:
    -

    list[int]

    +

    Union[str, dict]

    +
    -
    -get_neuron_certificate(hotkey, netuid, block=None)[source]#
    -
    -
    Retrieves the TLS certificate for a specific neuron identified by its unique identifier (UID) within a

    specified subnet (netuid) of the Bittensor network.

    -
    -
    +
    +get_crowdloan_by_id(crowdloan_id, block=None)#
    +

    Retrieves detailed information about a specific crowdloan campaign.

    Parameters:
      -
    • hotkey (str) – The hotkey to query.

    • -
    • netuid (int) – The unique identifier of the subnet.

    • -
    • block (Optional[int]) – The blockchain block number for the query.

    • +
    • crowdloan_id (int) – Unique identifier of the crowdloan (auto-incremented starting from 0).

    • +
    • block (Optional[int]) – The blockchain block number for the query. If None, queries the current chain head.

    Returns:
    -

    the certificate of the neuron if found, None otherwise.

    +

    campaign ID, creator address, creator’s deposit, +minimum contribution amount, end block, funding cap, funds account address, amount raised, +optional target address, optional embedded call, finalization status, and contributor count. +Returns None if the crowdloan does not exist.

    Return type:
    -

    Optional[bittensor.utils.Certificate]

    +

    CrowdloanInfo object containing

    -

    This function is used for certificate discovery for setting up mutual tls communication between neurons.

    +
    +

    Notes

    + +
    -
    -get_neuron_for_pubkey_and_subnet(hotkey_ss58, netuid, block=None)[source]#
    -
    -
    Retrieves information about a neuron based on its public key (hotkey SS58 address) and the specific subnet UID

    (netuid). This function provides detailed neuron information for a particular subnet within the Bittensor -network.

    -
    -
    +
    +get_crowdloan_constants(constants=None, block=None)#
    +

    Retrieves runtime configuration constants governing crowdloan behavior and limits on the Bittensor blockchain.

    +

    If a list of constant names is provided, only those constants will be queried. +Otherwise, all known constants defined in CrowdloanConstants.field_names() are fetched.

    +

    These constants define requirements and operational limits for crowdloan campaigns:

    +
      +
    • AbsoluteMinimumContribution: Minimum amount per contribution (TAO).

    • +
    • MaxContributors: Maximum number of unique contributors per crowdloan.

    • +
    • MaximumBlockDuration: Maximum duration (in blocks) for a crowdloan campaign (60 days = 432,000 blocks on production).

    • +
    • MinimumDeposit: Minimum deposit required from the creator (TAO).

    • +
    • MinimumBlockDuration: Minimum duration (in blocks) for a crowdloan campaign (7 days = 50,400 blocks on production).

    • +
    • RefundContributorsLimit: Maximum number of contributors refunded per refund_crowdloan call (typically 50).

    • +
    Parameters:
      -
    • hotkey_ss58 (str) – The SS58 address of the neuron’s hotkey.

    • -
    • netuid (int) – The unique identifier of the subnet.

    • -
    • block (Optional[int]) – The blockchain block number for the query.

    • +
    • constants (Optional[list[str]]) – Specific constant names to query. If None, retrieves all constants from CrowdloanConstants.

    • +
    • block (Optional[int]) – The blockchain block number for the query. If None, queries the current chain head.

    Returns:
    -

    -
    Detailed information about the neuron if found,

    None otherwise.

    -
    -
    -

    +

    A CrowdloanConstants data object containing the queried constants. Missing constants return None.

    Return type:
    -

    Optional[bittensor.core.chain_data.neuron_info.NeuronInfo]

    -
    -
    -
    -
    This function is crucial for accessing specific neuron data and understanding its status, stake, and other

    attributes within a particular subnet of the Bittensor ecosystem.

    +

    bittensor.core.chain_data.CrowdloanConstants

    +
    +

    Notes

    +

    These constants enforce contribution floors, duration bounds, and refund batching limits.

    + +
    -
    -get_next_epoch_start_block(netuid, block=None)#
    -

    Calculates the first block number of the next epoch for the given subnet.

    -

    If block is not provided, the current chain block will be used. Epochs are -determined based on the subnet’s tempo (i.e., blocks per epoch). The result -is the block number at which the next epoch will begin.

    +
    +get_crowdloan_contributions(crowdloan_id, block=None)#
    +

    Retrieves all contributions made to a specific crowdloan campaign.

    +

    Returns a mapping of contributor coldkey addresses to their contribution amounts in Rao.

    Parameters:
      -
    • netuid (int) – The unique identifier of the subnet.

    • -
    • block (Optional[int], optional) – The reference block to calculate from. -If None, uses the current chain block height.

    • +
    • crowdloan_id (int) – The unique identifier of the crowdloan.

    • +
    • block (Optional[int]) – The blockchain block number for the query. If None, queries the current chain head.

    Returns:
    -

    The block number at which the next epoch will start.

    +

    Dictionary mapping contributor SS58 addresses to their Balance contribution amounts (in Rao). +Returns empty dictionary if the crowdloan has no contributions or does not exist.

    Return type:
    -

    int

    +

    dict[str, bittensor.utils.balance.Balance]

    +
    +

    Notes

    +

    Contributions are clipped to the remaining cap. Once the cap is reached, no further contributions are accepted.

    + +
    -
    -get_owned_hotkeys(coldkey_ss58, block=None, reuse_block=False)#
    -

    Retrieves all hotkeys owned by a specific coldkey address.

    +
    +get_crowdloan_next_id(block=None)#
    +

    Retrieves the next available crowdloan identifier.

    +

    Crowdloan IDs are allocated sequentially starting from 0. This method returns the ID that will be +assigned to the next crowdloan created via create_crowdloan().

    Parameters:
    -
      -
    • coldkey_ss58 (str) – The SS58 address of the coldkey to query.

    • -
    • block (int) – The blockchain block number for the query.

    • -
    • reuse_block (bool) – Whether to reuse the last-used blockchain block hash.

    • -
    +

    block (Optional[int]) – The blockchain block number for the query. If None, queries the current chain head.

    Returns:
    -

    A list of hotkey SS58 addresses owned by the coldkey.

    +

    The next crowdloan ID (integer) to be assigned.

    Return type:
    -

    list[str]

    +

    int

    +
    -
    -get_revealed_commitment(netuid, uid, block=None)#
    -

    Returns uid related revealed commitment for a given netuid.

    +
    +get_crowdloans(block=None)#
    +

    Retrieves all existing crowdloan campaigns with their metadata.

    +

    Returns comprehensive information for all crowdloans registered on the blockchain, including +both active and finalized campaigns.

    Parameters:
    -
      -
    • netuid (int) – The unique identifier of the subnetwork.

    • -
    • uid (int) – The neuron uid to retrieve the commitment from.

    • -
    • block (Optional[int]) – The block number to retrieve the commitment from. Default is None.

    • -
    +

    block (Optional[int]) – The blockchain block number for the query. If None, queries the current chain head.

    Returns:
    -

    A tuple of reveal block and commitment message.

    +

    campaign ID, creator address, creator’s deposit, +minimum contribution amount, end block, funding cap, funds account address, amount raised, +optional target address, optional embedded call, finalization status, and contributor count. +Returns empty list if no crowdloans exist.

    Return type:
    -

    result (Optional[tuple[int, str]]

    +

    List of CrowdloanInfo objects, each containing

    -
    -
    Example of result:

    ( (12, “Alice message 1”), (152, “Alice message 2”) ) -( (12, “Bob message 1”), (147, “Bob message 2”) )

    + +
    + +
    +
    +get_current_block()[source]#
    +

    Returns the current block number on the Bittensor blockchain.

    +

    This function provides the latest block number, indicating the most recent state of the blockchain.

    +
    +
    Returns:
    +

    The current chain block number.

    +
    +
    Return type:
    +

    int

    +
    -
    -get_revealed_commitment_by_hotkey(netuid, hotkey_ss58_address, block=None)#
    -

    Returns hotkey related revealed commitment for a given netuid.

    +
    +get_delegate_by_hotkey(hotkey_ss58, block=None)[source]#
    +

    Retrieves detailed information about a delegate neuron (validator) based on its hotkey. This function +provides a comprehensive view of the delegate’s status, including its stakes, nominators, and reward +distribution.

    Parameters:
      -
    • netuid (int) – The unique identifier of the subnetwork.

    • -
    • hotkey_ss58_address (str) – The ss58 address of the committee member.

    • -
    • block (Optional[int]) – The block number to retrieve the commitment from. Default is None.

    • +
    • hotkey_ss58 (str) – The SS58 address of the delegate’s hotkey.

    • +
    • block (Optional[int]) – The block number to query. If None, queries the current chain head.

    Returns:
    -

    A tuple of reveal block and commitment message.

    +

    Detailed information about the delegate neuron, None if not found.

    Return type:
    -

    result (tuple[int, str)

    +

    Optional[bittensor.core.chain_data.DelegateInfo]

    +
    -
    -get_stake(coldkey_ss58, hotkey_ss58, netuid, block=None)[source]#
    -

    Returns the stake under a coldkey - hotkey pairing.

    +
    +get_delegate_identities(block=None)[source]#
    +

    Fetches delegate identities.

    +

    Delegates are validators that accept stake from other TAO holders (nominators/delegators). This method +retrieves the on-chain identity information for all delegates, including display name, legal name, web URLs, +and other metadata they have set.

    Parameters:
    -
      -
    • hotkey_ss58 (str) – The SS58 address of the hotkey.

    • -
    • coldkey_ss58 (str) – The SS58 address of the coldkey.

    • -
    • netuid (int) – The subnet ID

    • -
    • block (Optional[int]) – The block number at which to query the stake information.

    • -
    +

    block (Optional[int]) – The block number to query. If None, queries the current chain head.

    Returns:
    -

    The stake under the coldkey - hotkey pairing.

    +

    Dictionary mapping delegate SS58 addresses to their ChainIdentity objects.

    Return type:
    -

    Balance

    +

    dict[str, bittensor.core.chain_data.chain_identity.ChainIdentity]

    +
    -
    -get_stake_add_fee(amount, netuid, coldkey_ss58, hotkey_ss58, block=None)#
    -

    Calculates the fee for adding new stake to a hotkey.

    -
    +
    +get_delegate_take(hotkey_ss58, block=None)[source]#
    +

    Retrieves the delegate ‘take’ percentage for a neuron identified by its hotkey. The ‘take’ represents the +percentage of rewards that the delegate claims from its nominators’ stakes.

    +
    Parameters:
      -
    • amount (bittensor.utils.balance.Balance) – Amount of stake to add in TAO

    • -
    • netuid (int) – Netuid of subnet

    • -
    • coldkey_ss58 (str) – SS58 address of coldkey

    • -
    • hotkey_ss58 (str) – SS58 address of hotkey

    • -
    • block (Optional[int]) – Block number at which to perform the calculation

    • +
    • hotkey_ss58 (str) – The SS58 address of the neuron’s hotkey.

    • +
    • block (Optional[int]) – The block number to query. If None, queries the current chain head.

    Returns:
    -

    The calculated stake fee as a Balance object

    +

    The delegate take percentage.

    Return type:
    -

    bittensor.utils.balance.Balance

    +

    float

    +
    -
    -get_stake_for_coldkey(coldkey_ss58, block=None)[source]#
    -

    Retrieves the stake information for a given coldkey.

    +
    +get_delegated(coldkey_ss58, block=None)[source]#
    +

    Retrieves delegates and their associated stakes for a given nominator coldkey.

    +

    This method identifies all delegates (validators) that a specific coldkey has staked tokens to, along with +stake amounts and other delegation information. This is useful for account holders to understand their stake +allocations and involvement in the network’s delegation and consensus mechanisms.

    Parameters:
      -
    • coldkey_ss58 (str) – The SS58 address of the coldkey.

    • -
    • block (Optional[int]) – The block number at which to query the stake information.

    • +
    • coldkey_ss58 (str) – The SS58 address of the account’s coldkey.

    • +
    • block (Optional[int]) – The block number to query. If None, queries the current chain head.

    Returns:
    -

    A list of StakeInfo objects, or None if no stake information is found.

    +

    List of DelegatedInfo objects containing stake amounts and delegate information. Returns empty list if no +delegations exist for the coldkey.

    Return type:
    -

    Optional[list[StakeInfo]]

    +

    list[bittensor.core.chain_data.DelegatedInfo]

    +
    -
    -get_stake_for_coldkey_and_hotkey(coldkey_ss58, hotkey_ss58, netuids=None, block=None)[source]#
    -

    Retrieves all coldkey-hotkey pairing stake across specified (or all) subnets

    +
    +get_delegates(block=None)[source]#
    +

    Fetches all delegates registered on the chain.

    +

    Delegates are validators that accept stake from other TAO holders (nominators/delegators). This method +retrieves comprehensive information about all delegates including their hotkeys, total stake, nominator count, +take percentage, and other metadata.

    Parameters:
    -
      -
    • coldkey_ss58 (str) – The SS58 address of the coldkey.

    • -
    • hotkey_ss58 (str) – The SS58 address of the hotkey.

    • -
    • netuids (Optional[list[int]]) – The subnet IDs to query for. Set to None for all subnets.

    • -
    • block (Optional[int]) – The block number at which to query the stake information.

    • -
    +

    block (Optional[int]) – The block number to query. If None, queries the current chain head.

    Returns:
    -

    StakeInfo} pairing of all stakes across all subnets.

    +

    List of DelegateInfo objects containing comprehensive delegate information. Returns empty list if no +delegates are registered.

    Return type:
    -

    A {netuid

    +

    list[bittensor.core.chain_data.DelegateInfo]

    +
    -
    -get_stake_for_hotkey(hotkey_ss58, netuid, block=None)[source]#
    -

    Retrieves the stake information for a given hotkey.

    +
    +get_ema_tao_inflow(netuid, block=None)#
    +

    Retrieves the EMA (exponential moving average) of net TAO flow for a specific subnet.

    +

    The EMA tracks net TAO flows (staking minus unstaking) with a 30-day half-life (~86.8 day window), smoothing +out short-term fluctuations while capturing sustained staking trends. This metric determines the subnet’s share +of TAO emissions under the current, flow-based model. Positive values indicate net inflow (more staking than unstaking), +negative values indicate net outflow. Subnets with negative EMA flows receive zero emissions.

    Parameters:
      -
    • hotkey_ss58 (str) – The SS58 address of the hotkey.

    • -
    • netuid (int) – The subnet ID to query for.

    • -
    • block (Optional[int]) – The block number at which to query the stake information. Do not specify if also specifying -block_hash or reuse_block

    • +
    • netuid (int) – The unique identifier of the subnet to query.

    • +
    • block (Optional[int]) – The block number to query. If None, uses latest finalized block.

    -
    Return type:
    -

    bittensor.utils.balance.Balance

    +
    Returns:
    +

    Tuple of (last_updated_block, ema_flow) where ema_flow is the EMA of net TAO flow in TAO units. +Returns None if the subnet does not exist or if querying subnet 0 (root network).

    +
    +
    Return type:
    +

    Optional[tuple[int, bittensor.utils.balance.Balance]]

    +

    The EMA uses a smoothing factor α ≈ 0.000003209, creating a 30-day half-life and ~86.8 day window. Only direct +stake/unstake operations count toward flows; neuron registrations and root claims are excluded. Subnet 0 (root +network) does not have an EMA TAO flow value and will return None.

    +
    -
    -
    -get_stake_info_for_coldkey#
    -
    -
    -
    -get_stake_movement_fee(amount, origin_netuid, origin_hotkey_ss58, origin_coldkey_ss58, destination_netuid, destination_hotkey_ss58, destination_coldkey_ss58, block=None)#
    -

    Calculates the fee for moving stake between hotkeys/subnets/coldkeys.

    +
    +get_existential_deposit(block=None)[source]#
    +

    Retrieves the existential deposit amount for the Bittensor blockchain.

    +

    The existential deposit is the minimum amount of TAO required for an account to exist on the blockchain. +Accounts with balances below this threshold can be reaped (removed) to conserve network resources and prevent +blockchain bloat from dust accounts.

    Parameters:
    -
      -
    • amount (bittensor.utils.balance.Balance) – Amount of stake to move in TAO

    • -
    • origin_netuid (int) – Netuid of origin subnet

    • -
    • origin_hotkey_ss58 (str) – SS58 address of origin hotkey

    • -
    • origin_coldkey_ss58 (str) – SS58 address of origin coldkey

    • -
    • destination_netuid (int) – Netuid of destination subnet

    • -
    • destination_hotkey_ss58 (str) – SS58 address of destination hotkey

    • -
    • destination_coldkey_ss58 (str) – SS58 address of destination coldkey

    • -
    • block (Optional[int]) – Block number at which to perform the calculation

    • -
    +

    block (Optional[int]) – The blockchain block number for the query.

    Returns:
    -

    The calculated stake fee as a Balance object

    +

    The existential deposit amount in RAO.

    Return type:
    -

    bittensor.utils.balance.Balance

    +

    Optional[bittensor.utils.balance.Balance]

    +
    -
    -get_subnet_burn_cost(block=None)[source]#
    -
    -
    Retrieves the burn cost for registering a new subnet within the Bittensor network. This cost represents the

    amount of Tao that needs to be locked or burned to establish a new subnet.

    -
    -
    +
    +get_extrinsic_fee(call, keypair)#
    +

    Gets the extrinsic fee for a given extrinsic call and keypair.

    +

    This method estimates the transaction fee that will be charged for submitting the extrinsic to the +blockchain. The fee is returned in Rao (the smallest unit of TAO, where 1 TAO = 1e9 Rao).

    Parameters:
    -

    block (Optional[int]) – The blockchain block number for the query.

    +
      +
    • call (scalecodec.types.GenericCall) – The extrinsic GenericCall object representing the transaction to estimate.

    • +
    • keypair (bittensor_wallet.Keypair) – The keypair associated with the extrinsic (used to determine the account paying the fee).

    • +
    Returns:
    -

    The burn cost for subnet registration.

    +

    Balance object representing the extrinsic fee in Rao.

    Return type:
    -

    int

    -
    -
    -
    -
    The subnet burn cost is an important economic parameter, reflecting the network’s mechanisms for controlling

    the proliferation of subnets and ensuring their commitment to the network’s long-term viability.

    +

    bittensor.utils.balance.Balance

    +

    Example:

    +
    # Estimate fee before sending a transfer
    +
    +call = subtensor.compose_call(
    +
    +    call_module="Balances",
    +
    +    call_function="transfer",
    +
    +    call_params={"dest": destination_ss58, "value": amount.rao}
    +
    +)
    +
    +fee = subtensor.get_extrinsic_fee(call=call, keypair=wallet.coldkey)
    +
    +print(f"Estimated fee: {fee.tao} TAO")
    +
    +
    +
    +

    Notes

    +

    To create the GenericCall object, use the compose_call method with proper parameters. +- <https://docs.learnbittensor.org/learn/fees>

    +
    -
    -get_subnet_hyperparameters(netuid, block=None)[source]#
    -
    -
    Retrieves the hyperparameters for a specific subnet within the Bittensor network. These hyperparameters define

    the operational settings and rules governing the subnet’s behavior.

    -
    -
    +
    +get_hotkey_owner(hotkey_ss58, block=None)[source]#
    +

    Retrieves the owner of the given hotkey at a specific block hash. +This function queries the blockchain for the owner of the provided hotkey. If the hotkey does not exist at the +specified block hash, it returns None.

    Parameters:
      -
    • netuid (int) – The network UID of the subnet to query.

    • -
    • block (Optional[int]) – The blockchain block number for the query.

    • +
    • hotkey_ss58 (str) – The SS58 address of the hotkey.

    • +
    • block (Optional[int]) – The blockchain block number for the query. If None, queries the current chain head.

    Returns:
    -

    The subnet’s hyperparameters, or None if not available.

    +

    The SS58 address of the owner if the hotkey exists, or None if it doesn’t.

    Return type:
    -

    Optional[Union[list, bittensor.core.chain_data.SubnetHyperparameters]]

    -
    -
    -
    -
    Understanding the hyperparameters is crucial for comprehending how subnets are configured and managed, and how

    they interact with the network’s consensus and incentive mechanisms.

    +

    Optional[str]

    +
    +
    +get_hotkey_stake#
    +
    +
    -
    -get_subnet_owner_hotkey(netuid, block=None)#
    -

    Retrieves the hotkey of the subnet owner for a given network UID.

    -

    This function queries the subtensor network to fetch the hotkey of the owner of a subnet specified by its -netuid. If no data is found or the query fails, the function returns None.

    +
    +get_hyperparameter(param_name, netuid, block=None)[source]#
    +

    Retrieves a specified hyperparameter for a specific subnet.

    +

    This method queries the blockchain for subnet-specific hyperparameters such as difficulty, tempo, immunity +period, and other network configuration values. Return types and units vary by parameter.

    Parameters:
      -
    • netuid (int) – The network UID of the subnet to fetch the owner’s hotkey for.

    • -
    • block (Optional[int]) – The specific block number to query the data from.

    • +
    • param_name (str) – The name of the hyperparameter storage function to retrieve.

    • +
    • netuid (int) – The unique identifier of the subnet.

    • +
    • block (Optional[int]) – The block number to query. If None, queries the current chain head.

    Returns:
    -

    The hotkey of the subnet owner if available; None otherwise.

    +

    The value of the specified hyperparameter if the subnet exists, None otherwise. Return type varies +by parameter (int, float, bool, or Balance).

    Return type:
    -

    Optional[str]

    +

    Optional[Any]

    +
    -
    -get_subnet_reveal_period_epochs(netuid, block=None)[source]#
    -

    Retrieve the SubnetRevealPeriodEpochs hyperparameter.

    +
    +get_last_bonds_reset(netuid, hotkey_ss58, block=None)#
    +

    Retrieves the block number when bonds were last reset for a specific hotkey on a subnet.

    Parameters:
      -
    • netuid (int)

    • -
    • block (Optional[int])

    • +
    • netuid (int) – The network uid to fetch from.

    • +
    • hotkey_ss58 (str) – The hotkey of the neuron for which to fetch the last bonds reset.

    • +
    • block (Optional[int]) – The block number to query. If None, queries the current chain head.

    -
    Return type:
    -

    int

    +
    Returns:
    +

    The block number when bonds were last reset, or None if no bonds reset has occurred.

    +
    -
    -get_subnet_validator_permits(netuid, block=None)#
    -

    Retrieves the list of validator permits for a given subnet as boolean values.

    +
    +get_last_commitment_bonds_reset_block(netuid, uid, block=None)[source]#
    +

    Retrieves the last block number when the bonds reset were triggered by publish_metadata for a specific neuron.

    Parameters:
      -
    • netuid (int) – The unique identifier of the subnetwork.

    • -
    • block (Optional[int]) – The blockchain block number for the query.

    • +
    • netuid (int) – The unique identifier of the subnetwork.

    • +
    • uid (int) – The unique identifier of the neuron.

    • +
    • block (Optional[int]) – The block number to query. If None, queries the current chain head.

    Returns:
    -

    A list of boolean values representing validator permits, or None if not available.

    +

    The block number when the bonds were last reset, or None if not found.

    Return type:
    -

    Optional[list[bool]]

    +

    Optional[int]

    -
    -get_subnets(block=None)[source]#
    -

    Retrieves the list of all subnet unique identifiers (netuids) currently present in the Bittensor network.

    +
    +get_liquidity_list(wallet, netuid, block=None)[source]#
    +

    Retrieves all liquidity positions for the given wallet on a specified subnet (netuid). +Calculates associated fee rewards based on current global and tick-level fee data.

    Parameters:
    -

    block (Optional[int]) – The blockchain block number for the query.

    +
      +
    • wallet (bittensor_wallet.Wallet) – Wallet instance to fetch positions for.

    • +
    • netuid (int) – Subnet unique id.

    • +
    • block (Optional[int]) – The blockchain block number for the query.

    • +
    Returns:
    -

    A list of subnet netuids.

    +

    List of liquidity positions, or None if subnet does not exist.

    Return type:
    -

    list[int]

    +

    Optional[list[bittensor.utils.liquidity.LiquidityPosition]]

    -

    This function provides a comprehensive view of the subnets within the Bittensor network, -offering insights into its diversity and scale.

    -
    -get_timestamp(block=None)#
    -

    Retrieves the datetime timestamp for a given block

    +
    +get_mechanism_count(netuid, block=None)#
    +

    Retrieves the number of mechanisms for the given subnet.

    Parameters:
    -

    block (Optional[int]) – The blockchain block number for the query.

    +
      +
    • netuid (int) – Subnet identifier.

    • +
    • block (Optional[int]) – The blockchain block number for the query. If None, queries the current chain head.

    • +
    Returns:
    -

    datetime object for the timestamp of the block

    +

    The number of mechanisms for the given subnet.

    Return type:
    -

    datetime.datetime

    +

    int

    +
    -
    -get_total_subnets(block=None)[source]#
    -

    Retrieves the total number of subnets within the Bittensor network as of a specific blockchain block.

    +
    +get_mechanism_emission_split(netuid, block=None)#
    +

    Returns the emission percentages allocated to each subnet mechanism.

    Parameters:
    -

    block (Optional[int]) – The blockchain block number for the query.

    +
      +
    • netuid (int) – The unique identifier of the subnet.

    • +
    • block (Optional[int]) – The blockchain block number for the query.

    • +
    Returns:
    -

    The total number of subnets in the network.

    +

    A list of integers representing the percentage of emission allocated to each subnet mechanism (rounded to +whole numbers). Returns None if emission is evenly split or if the data is unavailable.

    Return type:
    -

    Optional[str]

    -
    -
    -
    -
    Understanding the total number of subnets is essential for assessing the network’s growth and the extent of its

    decentralized infrastructure.

    +

    Optional[list[int]]

    -
    -get_transfer_fee(wallet, dest, value)[source]#
    -
    -
    Calculates the transaction fee for transferring tokens from a wallet to a specified destination address. This

    function simulates the transfer to estimate the associated cost, taking into account the current network -conditions and transaction complexity.

    -
    -
    +
    +get_metagraph_info(netuid, mechid=0, selected_indices=None, block=None)[source]#
    +

    Retrieves full or partial metagraph information for the specified subnet (netuid).

    +

    A metagraph is a data structure that contains comprehensive information about the current state of a subnet, +including detailed information on all the nodes (neurons) such as subnet validator stakes and subnet weights +and bonds.

    Parameters:
      -
    • wallet (bittensor_wallet.Wallet) – The wallet from which the transfer is initiated.

    • -
    • dest (str) – The SS58 address of the destination account.

    • -
    • value (Union[bittensor.utils.balance.Balance, float, int]) – The amount of tokens to be transferred, -specified as a Balance object, or in Tao (float) or Rao (int) units.

    • +
    • netuid (int) – Subnet unique identifier.

    • +
    • mechid (int) – Subnet mechanism unique identifier.

    • +
    • selected_indices (Optional[Union[list[bittensor.core.chain_data.SelectiveMetagraphIndex], list[int]]]) – Optional list of SelectiveMetagraphIndex or int values specifying which fields to retrieve. +If not provided, all available fields will be returned.

    • +
    • block (Optional[int]) – The block number at which to query the data. If None, queries the current chain head.

    Returns:
    -

    -
    The estimated transaction fee for the transfer, represented as a Balance

    object.

    -
    -
    -

    +

    MetagraphInfo object with the requested subnet mechanism data, None if the subnet mechanism does not exist.

    Return type:
    -

    bittensor.utils.balance.Balance

    -
    -
    -
    -
    Estimating the transfer fee is essential for planning and executing token transactions, ensuring that the wallet

    has sufficient funds to cover both the transfer amount and the associated costs. This function provides a -crucial tool for managing financial operations within the Bittensor network.

    +

    Optional[bittensor.core.chain_data.MetagraphInfo]

    +

    Example:

    +
    # Retrieve all fields from the metagraph from subnet 2 mechanism 0
    +
    +meta_info = subtensor.get_metagraph_info(netuid=2)
    +
    +# Retrieve all fields from the metagraph from subnet 2 mechanism 1
    +
    +meta_info = subtensor.get_metagraph_info(netuid=2, mechid=1)
    +
    +# Retrieve selective data from the metagraph from subnet 2 mechanism 0
    +
    +partial_meta_info = subtensor.get_metagraph_info(
    +
    +    netuid=2,
    +
    +    selected_indices=[SelectiveMetagraphIndex.Name, SelectiveMetagraphIndex.OwnerHotkeys]
    +)
    +
    +# Retrieve selective data from the metagraph from subnet 2 mechanism 1
    +
    +partial_meta_info = subtensor.get_metagraph_info(
    +    netuid=2,
    +    mechid=1,
    +    selected_indices=[SelectiveMetagraphIndex.Name, SelectiveMetagraphIndex.OwnerHotkeys]
    +)
    +
    +
    +
    -
    -get_uid_for_hotkey_on_subnet(hotkey_ss58, netuid, block=None)[source]#
    -

    Retrieves the unique identifier (UID) for a neuron’s hotkey on a specific subnet.

    +
    +get_mev_shield_current_key(block=None)#
    +

    Retrieves the CurrentKey from the MevShield pallet storage.

    +

    The CurrentKey contains the ML-KEM-768 public key that is currently being used for encryption in this block. +This key is rotated from NextKey at the beginning of each block.

    Parameters:
    -
      -
    • hotkey_ss58 (str) – The SS58 address of the neuron’s hotkey.

    • -
    • netuid (int) – The unique identifier of the subnet.

    • -
    • block (Optional[int]) – The blockchain block number for the query.

    • -
    +

    block (Optional[int]) – The blockchain block number at which to perform the query. If None, uses the current block.

    Returns:
    -

    The UID of the neuron if it is registered on the subnet, None otherwise.

    +

    The ML-KEM-768 public key as bytes (1184 bytes for ML-KEM-768)

    Return type:
    -

    Optional[int]

    -
    -
    -
    -
    The UID is a critical identifier within the network, linking the neuron’s hotkey to its operational and

    governance activities on a particular subnet.

    +

    Optional[bytes]

    +
    +

    Note

    +

    If CurrentKey is not set (None in storage), this function returns None. This can happen if no validator has +announced a key yet.

    +
    -
    -get_unstake_fee(amount, netuid, coldkey_ss58, hotkey_ss58, block=None)#
    -

    Calculates the fee for unstaking from a hotkey.

    +
    +get_mev_shield_next_key(block=None)#
    +

    Retrieves the NextKey from the MevShield pallet storage.

    +

    The NextKey contains the ML-KEM-768 public key that will be used for encryption in the next block. This key is +rotated from NextKey to CurrentKey at the beginning of each block.

    Parameters:
    -
      -
    • amount (bittensor.utils.balance.Balance) – Amount of stake to unstake in TAO

    • -
    • netuid (int) – Netuid of subnet

    • -
    • coldkey_ss58 (str) – SS58 address of coldkey

    • -
    • hotkey_ss58 (str) – SS58 address of hotkey

    • -
    • block (Optional[int]) – Block number at which to perform the calculation

    • -
    +

    block (Optional[int]) – The blockchain block number at which to perform the query. If None, uses the current block.

    Returns:
    -

    The calculated stake fee as a Balance object

    +

    The ML-KEM-768 public key as bytes (1184 bytes for ML-KEM-768)

    Return type:
    -

    bittensor.utils.balance.Balance

    +

    Optional[bytes]

    +
    +

    Note

    +

    If NextKey is not set (None in storage), this function returns None. This can happen if no validator has +announced the next key yet.

    +
    -
    -get_vote_data(proposal_hash, block=None)[source]#
    -
    -
    Retrieves the voting data for a specific proposal on the Bittensor blockchain. This data includes information

    about how senate members have voted on the proposal.

    -
    -
    +
    +get_mev_shield_submission(submission_id, block=None)#
    +

    Retrieves Submission from the MevShield pallet storage.

    +

    If submission_id is provided, returns a single submission. If submission_id is None, returns all submissions from +the storage map.

    Parameters:
      -
    • proposal_hash (str) – The hash of the proposal for which voting data is requested.

    • -
    • block (Optional[int]) – The blockchain block number for the query.

    • +
    • submission_id (str) – The hash ID of the submission. Can be a hex string with “0x” prefix or bytes. If None, +returns all submissions.

    • +
    • block (Optional[int]) – The blockchain block number at which to perform the query. If None, uses the current block.

    Returns:
    -

    An object containing the proposal’s voting data, or None if not found.

    -
    -
    Return type:
    -

    Optional[bittensor.core.async_subtensor.ProposalVoteData]

    +

    +
    A dictionary containing the submission data if found, None otherwise. The

    dictionary contains: +- author: The SS58 address of the account that submitted the encrypted extrinsic +- commitment: The blake2_256 hash of the payload_core (as hex string with “0x” prefix) +- ciphertext: The encrypted blob as bytes (format: [u16 kem_len][kem_ct][nonce24][aead_ct]) +- submitted_in: The block number when the submission was created

    -
    -
    This function is important for tracking and understanding the decision-making processes within the Bittensor

    network, particularly how proposals are received and acted upon by the governing body.

    +

    If submission_id is None: A dictionary mapping submission IDs (as hex strings) to submission dictionaries.

    +

    +
    +
    Return type:
    +

    If submission_id is provided

    +
    +

    Note

    +

    If a specific submission does not exist in storage, this function returns None. If querying all submissions +and none exist, returns an empty dictionary.

    +
    -
    -immunity_period(netuid, block=None)[source]#
    -
    -
    Retrieves the ‘ImmunityPeriod’ hyperparameter for a specific subnet. This parameter defines the duration during

    which new neurons are protected from certain network penalties or restrictions.

    -
    -
    +
    +get_mev_shield_submissions(block=None)#
    +

    Retrieves all encrypted submissions from the MevShield pallet storage.

    +

    This function queries the MevShield.Submissions storage map and returns all pending encrypted submissions that +have been submitted via submit_encrypted but not yet executed via execute_revealed.

    Parameters:
    -
      -
    • netuid (int) – The unique identifier of the subnet.

    • -
    • block (Optional[int]) – The blockchain block number for the query.

    • -
    +

    block (Optional[int]) – The blockchain block number for the query. If None, uses the current block.

    Returns:
    -

    The value of the ‘ImmunityPeriod’ hyperparameter if the subnet exists, None otherwise.

    +

    A dictionary mapping wrapper_id (as hex string with “0x” prefix) to submission data dictionaries. Each +submission dictionary contains: +- author: The SS58 address of the account that submitted the encrypted extrinsic +- commitment: The blake2_256 hash of the payload_core as bytes (32 bytes) +- ciphertext: The encrypted blob as bytes (format: [u16 kem_len][kem_ct][nonce24][aead_ct]) +- submitted_in: The block number when the submission was created

    +

    Returns None if no submissions exist in storage at the specified block.

    +

    Return type:
    -

    Optional[int]

    -
    -
    -
    -
    The ‘ImmunityPeriod’ is a critical aspect of the network’s governance system, ensuring that new participants

    have a grace period to establish themselves and contribute to the network without facing immediate -punitive actions.

    +

    Optional[dict[str, dict[str, str | int]]]

    +
    +

    Note

    +

    Submissions are automatically pruned after KEY_EPOCH_HISTORY blocks (100 blocks) by the pallet’s +on_initialize hook. Only submissions that have been submitted but not yet executed will be present in +storage.

    +
    -
    -is_fast_blocks()#
    -

    Returns True if the node is running with fast blocks. False if not.

    +
    +get_minimum_required_stake()[source]#
    +

    Returns the minimum required stake threshold for nominator cleanup operations.

    +

    This threshold is used ONLY for cleanup after unstaking operations. If a nominator’s remaining stake +falls below this minimum after an unstake, the remaining stake is forcefully cleared and returned +to the coldkey to prevent dust accounts.

    +

    This is NOT the minimum checked during staking operations. The actual minimum for staking is determined +by DefaultMinStake (typically 0.001 TAO plus fees).

    +
    +
    Returns:
    +

    The minimum stake threshold as a Balance object. Nominator stakes below this amount +are automatically cleared after unstake operations.

    +
    +
    Return type:
    +

    bittensor.utils.balance.Balance

    +
    +
    +
    -
    -is_hotkey_delegate(hotkey_ss58, block=None)[source]#
    +
    +get_netuids_for_hotkey(hotkey_ss58, block=None)[source]#
    -
    Determines whether a given hotkey (public key) is a delegate on the Bittensor network. This function checks if

    the neuron associated with the hotkey is part of the network’s delegation system.

    +
    Retrieves a list of subnet UIDs (netuids) where a given hotkey is a member. This function identifies the

    specific subnets within the Bittensor network where the neuron associated with the hotkey is active.

    Parameters:
      -
    • hotkey_ss58 (str) – The SS58 address of the neuron’s hotkey.

    • -
    • block (Optional[int]) – The blockchain block number for the query.

    • +
    • hotkey_ss58 (str) – The SS58 address of the neuron’s hotkey.

    • +
    • block (Optional[int]) – The blockchain block number for the query. If None, queries the current chain head.

    Returns:
    -

    True if the hotkey is a delegate, False otherwise.

    +

    A list of netuids where the neuron is a member.

    Return type:
    -

    bool

    -
    -
    -
    -
    Being a delegate is a significant status within the Bittensor network, indicating a neuron’s involvement in

    consensus and governance processes.

    +

    list[int]

    +
    -
    -is_hotkey_registered(hotkey_ss58, netuid=None, block=None)[source]#
    -
    -
    Determines whether a given hotkey (public key) is registered in the Bittensor network, either globally across

    any subnet or specifically on a specified subnet. This function checks the registration status of a neuron -identified by its hotkey, which is crucial for validating its participation and activities within the -network.

    -
    -
    +
    +get_neuron_certificate(hotkey_ss58, netuid, block=None)[source]#
    +

    Retrieves the TLS certificate for a specific neuron identified by its unique identifier (UID) within a specified +subnet (netuid) of the Bittensor network.

    Parameters:
      -
    • hotkey_ss58 (str) – The SS58 address of the neuron’s hotkey.

    • -
    • netuid (Optional[int]) – The unique identifier of the subnet to check the registration. If None, the -registration is checked across all subnets.

    • -
    • block (Optional[int]) – The blockchain block number at which to perform the query.

    • +
    • hotkey_ss58 (str) – The SS58 address of the neuron’s hotkey.

    • +
    • netuid (int) – The unique identifier of the subnet.

    • +
    • block (Optional[int]) – The blockchain block number for the query. If None, queries the current chain head.

    Returns:
    -

    -
    True if the hotkey is registered in the specified context (either any subnet or a specific subnet),

    False otherwise.

    -
    -
    -

    +

    Certificate object containing the neuron’s TLS public key and algorithm, or None if the neuron has +not registered a certificate.

    Return type:
    -

    bool

    -
    -
    -
    -
    This function is important for verifying the active status of neurons in the Bittensor network. It aids in

    understanding whether a neuron is eligible to participate in network processes such as consensus, -validation, and incentive distribution based on its registration status.

    +

    Optional[bittensor.utils.Certificate]

    +

    This function is used for certificate discovery for setting up mutual tls communication between neurons.

    -
    -is_hotkey_registered_any(hotkey_ss58, block=None)[source]#
    -

    Checks if a neuron’s hotkey is registered on any subnet within the Bittensor network.

    +
    +get_neuron_for_pubkey_and_subnet(hotkey_ss58, netuid, block=None)[source]#
    +

    Retrieves information about a neuron based on its public key (hotkey SS58 address) and the specific subnet UID +(netuid). This function provides detailed neuron information for a particular subnet within the Bittensor +network.

    Parameters:
      -
    • hotkey_ss58 (str) – The SS58 address of the neuron’s hotkey.

    • -
    • block (Optional[int]) – The blockchain block number for the query.

    • +
    • hotkey_ss58 (str) – The SS58 address of the neuron’s hotkey.

    • +
    • netuid (int) – The unique identifier of the subnet.

    • +
    • block (Optional[int]) – The blockchain block number for the query.

    Returns:
    -

    True if the hotkey is registered on any subnet, False otherwise.

    +

    Detailed information about the neuron if found, None otherwise.

    Return type:
    -

    bool

    +

    Optional

    -

    This function is essential for determining the network-wide presence and participation of a neuron.

    +

    This function is crucial for accessing specific neuron data and understanding its status, stake, and other +attributes within a particular subnet of the Bittensor ecosystem.

    -
    -is_hotkey_registered_on_subnet(hotkey_ss58, netuid, block=None)[source]#
    -

    Checks if the hotkey is registered on a given netuid.

    -
    +
    +get_next_epoch_start_block(netuid, block=None)[source]#
    +

    Calculates the first block number of the next epoch for the given subnet.

    +

    If block is not provided, the current chain block will be used. Epochs are determined based on the subnet’s +tempo (i.e., blocks per epoch). The result is the block number at which the next epoch will begin.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The unique identifier of the subnet.

    • +
    • block (Optional[int]) – The reference block to calculate from. If None, uses the current chain block height.

    • +
    +
    +
    Returns:
    +

    The block number at which the next epoch will start, or None if tempo is 0 or invalid.

    +
    +
    Return type:
    +

    int

    +
    +
    + +
    + +
    +
    +get_owned_hotkeys(coldkey_ss58, block=None)[source]#
    +

    Retrieves all hotkeys owned by a specific coldkey address.

    +
    +
    Parameters:
    +
      +
    • coldkey_ss58 (str) – The SS58 address of the coldkey to query.

    • +
    • block (Optional[int]) – The blockchain block number for the query.

    • +
    +
    +
    Returns:
    +

    A list of hotkey SS58 addresses owned by the coldkey.

    +
    +
    Return type:
    +

    list[str]

    +
    +
    +
    + +
    +
    +get_parents(hotkey_ss58, netuid, block=None)[source]#
    +

    This method retrieves the parent of a given hotkey and netuid. It queries the SubtensorModule’s ParentKeys +storage function to get the children and formats them before returning as a tuple.

    +
    +
    Parameters:
    +
      +
    • hotkey_ss58 (str) – The child hotkey SS58.

    • +
    • netuid (int) – The netuid value.

    • +
    • block (Optional[int]) – The block number to query. If None, queries the current chain head.

    • +
    +
    +
    Returns:
    +

    A list of formatted parents [(proportion, parent)]

    +
    +
    Return type:
    +

    list[tuple[float, str]]

    +
    +
    + +
    + +
    +
    +get_proxies(block=None)#
    +

    Retrieves all proxy relationships from the chain.

    +

    This method queries the Proxy.Proxies storage map across all accounts and returns a dictionary mapping each real +account (delegator) to its list of proxy relationships.

    +
    +
    Parameters:
    +

    block (Optional[int]) – The blockchain block number for the query. If None, queries the latest block.

    +
    +
    Returns:
    +

    +
    Dictionary mapping real account SS58 addresses to lists of ProxyInfo objects. Each ProxyInfo contains the

    delegate address, proxy type, and delay for that proxy relationship.

    +
    +
    +

    +
    +
    Return type:
    +

    dict[str, list[bittensor.core.chain_data.ProxyInfo]]

    +
    +
    +
    +

    Notes

    + +
    +
    + +
    +
    +get_proxies_for_real_account(real_account_ss58, block=None)#
    +

    Returns proxy/ies associated with the provided real account.

    +

    This method queries the Proxy.Proxies storage for a specific real account and returns all proxy relationships +where this real account is the delegator. It also returns the deposit amount reserved for these proxies.

    +
    +
    Parameters:
    +
      +
    • real_account_ss58 (str) – SS58 address of the real account (delegator) whose proxies to retrieve.

    • +
    • block (Optional[int]) – The blockchain block number for the query.

    • +
    +
    +
    Returns:
    +

      +
    • +
      List of ProxyInfo objects representing all proxy relationships for the real account. Each ProxyInfo

      contains delegate address, proxy type, and delay.

      +
      +
      +
    • +
    • +
      Balance object representing the reserved deposit amount for these proxies. This deposit is held as

      long as the proxy relationships exist and is returned when proxies are removed.

      +
      +
      +
    • +
    +

    +
    +
    Return type:
    +

    Tuple containing

    +
    +
    +
    +

    Notes

    + +
    +
    + +
    +
    +get_proxy_announcement(delegate_account_ss58, block=None)#
    +

    Retrieves proxy announcements for a specific delegate account.

    +

    This method queries the Proxy.Announcements storage for announcements made by the given delegate proxy account. +Announcements allow a proxy to declare its intention to execute a call on behalf of a real account after a delay +period.

    +
    +
    Parameters:
    +
      +
    • delegate_account_ss58 (str) – SS58 address of the delegate proxy account whose announcements to retrieve.

    • +
    • block (Optional[int]) – The blockchain block number for the query. If None, queries the latest block.

    • +
    +
    +
    Returns:
    +

    +
    List of ProxyAnnouncementInfo objects. Each object contains the real account address, call hash, and block

    height at which the announcement was made.

    +
    +
    +

    +
    +
    Return type:
    +

    list[bittensor.core.chain_data.ProxyAnnouncementInfo]

    +
    +
    +
    +

    Notes

    + +
    +
    + +
    +
    +get_proxy_announcements(block=None)#
    +

    Retrieves all proxy announcements from the chain.

    +

    This method queries the Proxy.Announcements storage map across all delegate accounts and returns a dictionary +mapping each delegate to its list of pending announcements.

    +
    +
    Parameters:
    +

    block (Optional[int]) – The blockchain block number for the query. If None, queries the latest block.

    +
    +
    Returns:
    +

    Dictionary mapping delegate account SS58 addresses to lists of ProxyAnnouncementInfo objects. +Each ProxyAnnouncementInfo contains the real account address, call hash, and block height.

    +
    +
    Return type:
    +

    dict[str, list[bittensor.core.chain_data.ProxyAnnouncementInfo]]

    +
    +
    +
    +

    Notes

    + +
    +
    + +
    +
    +get_proxy_constants(constants=None, as_dict=False, block=None)#
    +

    Fetches runtime configuration constants from the Proxy pallet.

    +

    This method retrieves on-chain configuration constants that define deposit requirements, proxy limits, and +announcement constraints for the Proxy pallet. These constants govern how proxy accounts operate within the +Subtensor network.

    +
    +
    Parameters:
    +
      +
    • constants (Optional[list[str]]) – Optional list of specific constant names to fetch. If omitted, all constants defined in +ProxyConstants.constants_names() are queried. Valid constant names include: “AnnouncementDepositBase”, +“AnnouncementDepositFactor”, “MaxProxies”, “MaxPending”, “ProxyDepositBase”, “ProxyDepositFactor”.

    • +
    • as_dict (bool) – If True, returns the constants as a dictionary instead of a ProxyConstants object.

    • +
    • block (Optional[int]) – The blockchain block number for the query. If None, queries the latest block.

    • +
    +
    +
    Returns:
    +

    ProxyConstants object containing all requested constants. +If as_dict is True: Dictionary mapping constant names to their values (Balance objects for deposit

    +
    +

    constants, integers for limit constants).

    +
    +

    +
    +
    Return type:
    +

    If as_dict is False

    +
    +
    +
    +

    Notes

    +
      +
    • All Balance amounts are returned in RAO. Constants reflect the current chain configuration at the specified

    • +
    +

    block. +- See: <https://docs.learnbittensor.org/keys/proxies>

    +
    +
    + +
    +
    +get_revealed_commitment(netuid, uid, block=None)[source]#
    +

    Returns uid related revealed commitment for a given netuid.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The unique identifier of the subnetwork.

    • +
    • uid (int) – The neuron uid to retrieve the commitment from.

    • +
    • block (Optional[int]) – The block number to retrieve the commitment from. If None, queries the current chain head.

    • +
    +
    +
    Returns:
    +

    A tuple of reveal block and commitment message.

    +
    +
    Return type:
    +

    Optional[tuple[tuple[int, str], Ellipsis]]

    +
    +
    +

    Example:

    +
    # sample return value
    +
    +( (12, "Alice message 1"), (152, "Alice message 2") )
    +
    +( (12, "Bob message 1"), (147, "Bob message 2") )
    +
    +
    + +
    + +
    +
    +get_revealed_commitment_by_hotkey(netuid, hotkey_ss58, block=None)[source]#
    +

    Retrieves hotkey related revealed commitment for a given subnet.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The unique identifier of the subnetwork.

    • +
    • hotkey_ss58 (str) – The ss58 address of the committee member.

    • +
    • block (Optional[int]) – The block number to query. If None, queries the current chain head.

    • +
    +
    +
    Returns:
    +

    A tuple of reveal block and commitment message.

    +
    +
    Return type:
    +

    Optional[tuple[tuple[int, str], Ellipsis]]

    +
    +
    + +
    + +
    +
    +get_root_alpha_dividends_per_subnet(hotkey_ss58, netuid, block=None)#
    +

    Retrieves the root alpha dividends per subnet for a given hotkey.

    +

    This storage tracks the root alpha dividends that a hotkey has received on a specific subnet. +It is updated during block emission distribution when root alpha is distributed to validators.

    +
    +
    Parameters:
    +
      +
    • hotkey_ss58 (str) – The ss58 address of the root validator hotkey.

    • +
    • netuid (int) – The unique identifier of the subnet.

    • +
    • block (Optional[int]) – The blockchain block number for the query.

    • +
    +
    +
    Returns:
    +

    The root alpha dividends for this hotkey on this subnet in Rao, with unit set to netuid.

    +
    +
    Return type:
    +

    Balance

    +
    +
    +
    + +
    +
    +get_root_claim_type(coldkey_ss58, block=None)#
    +

    Return the configured root claim type for a given coldkey.

    +

    The root claim type controls how dividends from staking to the Root Subnet (subnet 0) are processed when they +are claimed:

    +
      +
    • Swap (default): Alpha dividends are swapped to TAO at claim time and restaked on the root subnet.

    • +
    • Keep: Alpha dividends remain as Alpha on the originating subnets.

    • +
    +
    +
    Parameters:
    +
      +
    • coldkey_ss58 (str) – The SS58 address of the coldkey whose root claim preference to query.

    • +
    • block (Optional[int]) – The block number to query. Do not specify if using block_hash or reuse_block.

    • +
    +
    +
    Returns:
    +

    The root claim type as a string, either Swap or Keep, +or dict for “KeepSubnets” in format {“KeepSubnets”: {“subnets”: [1, 2, 3]}}.

    +
    +
    Return type:
    +

    Union[str, dict]

    +
    +
    +
    +

    Notes

    + +
    +
    + +
    +
    +get_root_claimable_all_rates(hotkey_ss58, block=None)#
    +

    Retrieves all root claimable rates from a given hotkey address for all subnets with this validator.

    +
    +
    Parameters:
    +
      +
    • hotkey_ss58 (str) – The SS58 address of the root validator hotkey.

    • +
    • block (Optional[int]) – The block number to query. If None, queries the current chain head.

    • +
    +
    +
    Returns:
    +

    Dictionary mapping netuid to a float claimable rate (approximately in the range [0.0, 1.0]) for that +subnet. Missing entries imply no claimable Alpha dividends for that subnet.

    +
    +
    Return type:
    +

    dict[int, float]

    +
    +
    + +
    + +
    +
    +get_root_claimable_rate(hotkey_ss58, netuid, block=None)#
    +

    Return the fraction of root stake currently claimable on a subnet.

    +

    This method returns a normalized rate representing how much Alpha dividends are currently claimable on the given +subnet relative to the validator’s root stake. It is primarily a low-level helper; most users should call +get_root_claimable_stake() instead to obtain a Balance.

    +
    +
    Parameters:
    +
      +
    • hotkey_ss58 (str) – The SS58 address of the root validator hotkey.

    • +
    • netuid (int) – The unique identifier of the subnet whose claimable rate to compute.

    • +
    • block (Optional[int]) – The block number to query. If None, queries the current chain head.

    • +
    +
    +
    Returns:
    +

    A float representing the claimable rate for this subnet (approximately in the range [0.0, 1.0]). A value +of 0.0 means there are currently no claimable Alpha dividends on the subnet.

    +
    +
    Return type:
    +

    float

    +
    +
    +
    +

    Notes

    + +
    +
    + +
    +
    +get_root_claimable_stake(coldkey_ss58, hotkey_ss58, netuid, block=None)#
    +

    Return the currently claimable Alpha staking dividends for a coldkey from a root validator on a subnet.

    +
    +
    Parameters:
    +
      +
    • coldkey_ss58 (str) – The SS58 address of the delegator’s coldkey.

    • +
    • hotkey_ss58 (str) – The SS58 address of the root validator hotkey.

    • +
    • netuid (int) – The subnet ID where Alpha dividends will be claimed.

    • +
    • block (Optional[int]) – The block number to query. If None, queries the current chain head.

    • +
    +
    +
    Returns:
    +

    Balance representing the Alpha stake currently available to claim on the specified subnet (unit is the +subnet’s Alpha token).

    +
    +
    Return type:
    +

    bittensor.utils.balance.Balance

    +
    +
    +
    +

    Notes

    + +
    +
    + +
    +
    +get_root_claimed(coldkey_ss58, hotkey_ss58, netuid, block=None)#
    +

    Return the total Alpha dividends already claimed for a coldkey from a root validator on a subnet.

    +
    +
    Parameters:
    +
      +
    • coldkey_ss58 (str) – The SS58 address of the delegator’s coldkey.

    • +
    • hotkey_ss58 (str) – The SS58 address of the root validator hotkey.

    • +
    • netuid (int) – The unique identifier of the subnet.

    • +
    • block (Optional[int]) – The blockchain block number for the query.

    • +
    +
    +
    Returns:
    +

    Balance representing the cumulative Alpha stake that has already been claimed from the root validator on +the specified subnet.

    +
    +
    Return type:
    +

    bittensor.utils.balance.Balance

    +
    +
    + +
    + +
    +
    +get_stake(coldkey_ss58, hotkey_ss58, netuid, block=None)[source]#
    +

    Returns the amount of Alpha staked by a specific coldkey to a specific hotkey within a given subnet. +This function retrieves the delegated stake balance, referred to as the ‘Alpha’ value.

    +
    +
    Parameters:
    +
      +
    • coldkey_ss58 (str) – The SS58 address of the coldkey that delegated the stake. This address owns the stake.

    • +
    • hotkey_ss58 (str) – The ss58 address of the hotkey which the stake is on.

    • +
    • netuid (int) – The unique identifier of the subnet to query.

    • +
    • block (Optional[int]) – The specific block number at which to retrieve the stake information.

    • +
    +
    +
    Returns:
    +

    +
    An object representing the amount of Alpha (TAO ONLY if the subnet’s netuid is 0) currently staked from the

    specified coldkey to the specified hotkey within the given subnet.

    +
    +
    +

    +
    +
    Return type:
    +

    bittensor.utils.balance.Balance

    +
    +
    +
    + +
    +
    +get_stake_add_fee(amount, netuid, block=None)[source]#
    +

    Calculates the fee for adding new stake to a hotkey.

    +
    +
    Parameters:
    +
      +
    • amount (bittensor.utils.balance.Balance) – Amount of stake to add in TAO

    • +
    • netuid (int) – Netuid of subnet

    • +
    • block (Optional[int]) – Block number at which to perform the calculation

    • +
    +
    +
    Returns:
    +

    The calculated stake fee as a Balance object in TAO.

    +
    +
    Return type:
    +

    bittensor.utils.balance.Balance

    +
    +
    +
    + +
    +
    +get_stake_for_coldkey_and_hotkey(coldkey_ss58, hotkey_ss58, netuids=None, block=None)[source]#
    +

    Retrieves all coldkey-hotkey pairing stake across specified (or all) subnets

    +
    +
    Parameters:
    +
      +
    • coldkey_ss58 (str) – The SS58 address of the coldkey.

    • +
    • hotkey_ss58 (str) – The SS58 address of the hotkey.

    • +
    • netuids (Optional[bittensor.core.types.UIDs]) – The subnet IDs to query for. Set to None for all subnets.

    • +
    • block (Optional[int]) – The block number at which to query the stake information.

    • +
    +
    +
    Returns:
    +

    A netuid to StakeInfo mapping of all stakes across all subnets.

    +
    +
    Return type:
    +

    dict[int, bittensor.core.chain_data.StakeInfo]

    +
    +
    +
    + +
    +
    +get_stake_for_hotkey(hotkey_ss58, netuid, block=None)[source]#
    +

    Retrieves the stake information for a given hotkey.

    +
    +
    Parameters:
    +
      +
    • hotkey_ss58 (str) – The SS58 address of the hotkey.

    • +
    • netuid (int) – The subnet ID to query for.

    • +
    • block (Optional[int]) – The block number at which to query the stake information.

    • +
    +
    +
    Return type:
    +

    bittensor.utils.balance.Balance

    +
    +
    +
    + +
    +
    +get_stake_info_for_coldkey(coldkey_ss58, block=None)#
    +

    Retrieves the stake information for a given coldkey.

    +
    +
    Parameters:
    +
      +
    • coldkey_ss58 (str) – The SS58 address of the coldkey.

    • +
    • block (Optional[int]) – The block number at which to query the stake information.

    • +
    +
    +
    Returns:
    +

    List of StakeInfo objects.

    +
    +
    Return type:
    +

    list[bittensor.core.chain_data.StakeInfo]

    +
    +
    +
    + +
    +
    +get_stake_info_for_coldkeys(coldkey_ss58s, block=None)#
    +

    Retrieves the stake information for multiple coldkeys.

    +
    +
    Parameters:
    +
      +
    • coldkey_ss58s (list[str]) – A list of SS58 addresses of the coldkeys to query.

    • +
    • block (Optional[int]) – The block number at which to query the stake information.

    • +
    +
    +
    Returns:
    +

    The dictionary mapping coldkey addresses to a list of StakeInfo objects.

    +
    +
    Return type:
    +

    dict[str, list[bittensor.core.chain_data.StakeInfo]]

    +
    +
    +
    + +
    +
    +get_stake_movement_fee(origin_netuid, destination_netuid, amount, block=None)[source]#
    +

    Calculates the fee for moving stake between hotkeys/subnets/coldkeys.

    +
    +
    Parameters:
    +
      +
    • origin_netuid (int) – Netuid of source subnet.

    • +
    • destination_netuid (int) – Netuid of the destination subnet.

    • +
    • amount (bittensor.utils.balance.Balance) – Amount of stake to move.

    • +
    • block (Optional[int]) – The block number for which the children are to be retrieved.

    • +
    +
    +
    Returns:
    +

    The calculated stake fee as a Balance object

    +
    +
    Return type:
    +

    bittensor.utils.balance.Balance

    +
    +
    +
    + +
    +
    +get_stake_weight(netuid, block=None)#
    +

    Retrieves the stake weight for all hotkeys in a given subnet.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – Netuid of subnet.

    • +
    • block (Optional[int]) – Block number at which to perform the calculation.

    • +
    +
    +
    Returns:
    +

    A list of stake weights for all hotkeys in the specified subnet.

    +
    +
    Return type:
    +

    list[float]

    +
    +
    +
    + +
    +
    +get_subnet_burn_cost(block=None)[source]#
    +

    Retrieves the burn cost for registering a new subnet within the Bittensor network. This cost represents the +amount of Tao that needs to be locked or burned to establish a new subnet.

    +
    +
    Parameters:
    +

    block (Optional[int]) – The blockchain block number for the query.

    +
    +
    Returns:
    +

    The burn cost for subnet registration.

    +
    +
    Return type:
    +

    int

    +
    +
    +

    The subnet burn cost is an important economic parameter, reflecting the network’s mechanisms for controlling the +proliferation of subnets and ensuring their commitment to the network’s long-term viability.

    +
    + +
    +
    +get_subnet_hyperparameters(netuid, block=None)[source]#
    +

    Retrieves the hyperparameters for a specific subnet within the Bittensor network. These hyperparameters define +the operational settings and rules governing the subnet’s behavior.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The network UID of the subnet to query.

    • +
    • block (Optional[int]) – The blockchain block number for the query.

    • +
    +
    +
    Returns:
    +

    The subnet’s hyperparameters, or None if not available.

    +
    +
    Return type:
    +

    Optional[Union[list, bittensor.core.chain_data.SubnetHyperparameters]]

    +
    +
    +

    Understanding the hyperparameters is crucial for comprehending how subnets are configured and managed, and how +they interact with the network’s consensus and incentive mechanisms.

    +
    + +
    +
    +get_subnet_info(netuid, block=None)[source]#
    +

    Retrieves detailed information about subnet within the Bittensor network. +This function provides comprehensive data on subnet, including its characteristics and operational parameters.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The unique identifier of the subnet.

    • +
    • block (Optional[int]) – The blockchain block number for the query.

    • +
    +
    +
    Returns:
    +

    A SubnetInfo objects, each containing detailed information about a subnet.

    +
    +
    Return type:
    +

    SubnetInfo

    +
    +
    +

    Gaining insights into the subnet’s details assists in understanding the network’s composition, the roles of +different subnets, and their unique features.

    +
    + +
    +
    +get_subnet_owner_hotkey(netuid, block=None)[source]#
    +

    Retrieves the hotkey of the subnet owner for a given network UID.

    +

    This function queries the subtensor network to fetch the hotkey of the owner of a subnet specified by its +netuid. If no data is found or the query fails, the function returns None.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The network UID of the subnet to fetch the owner’s hotkey for.

    • +
    • block (Optional[int]) – The blockchain block number for the query. If None, queries the current chain head.

    • +
    +
    +
    Returns:
    +

    The hotkey of the subnet owner if available; None otherwise.

    +
    +
    Return type:
    +

    Optional[str]

    +
    +
    +
    + +
    +
    +get_subnet_price(netuid, block=None)[source]#
    +

    Gets the current Alpha price in TAO for the specified subnet.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The unique identifier of the subnet.

    • +
    • block (Optional[int]) – The blockchain block number for the query. If None, queries the current chain head.

    • +
    +
    +
    Returns:
    +

    The current Alpha price in TAO units for the specified subnet.

    +
    +
    Return type:
    +

    bittensor.utils.balance.Balance

    +
    +
    +
    +

    Notes

    +

    Subnet 0 (root network) always returns 1 TAO since it uses TAO directly rather than Alpha.

    +
    +
    + +
    +
    +get_subnet_prices(block=None)[source]#
    +

    Gets the current Alpha price in TAO for all subnets.

    +
    +
    Parameters:
    +

    block (Optional[int]) – The blockchain block number for the query. If None, queries the current chain head.

    +
    +
    Returns:
    +

    A dictionary mapping subnet unique ID (netuid) to the current Alpha price in TAO units.

    +
    +
    Return type:
    +

    dict[int, bittensor.utils.balance.Balance]

    +
    +
    +
    +

    Notes

    +

    Subnet 0 (root network) always has a price of 1 TAO since it uses TAO directly rather than Alpha.

    +
    +
    + +
    +
    +get_subnet_reveal_period_epochs(netuid, block=None)[source]#
    +

    Retrieves the SubnetRevealPeriodEpochs hyperparameter for a specified subnet.

    +

    This hyperparameter determines the number of epochs that must pass before a committed weight can be revealed +in the commit-reveal mechanism.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The unique identifier of the subnet.

    • +
    • block (Optional[int]) – The blockchain block number for the query. If None, queries the current chain head.

    • +
    +
    +
    Returns:
    +

    The number of epochs in the reveal period for the subnet.

    +
    +
    Return type:
    +

    int

    +
    +
    + +
    + +
    +
    +get_subnet_validator_permits(netuid, block=None)[source]#
    +

    Retrieves the list of validator permits for a given subnet as boolean values.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The unique identifier of the subnetwork.

    • +
    • block (Optional[int]) – The blockchain block number for the query.

    • +
    +
    +
    Returns:
    +

    A list of boolean values representing validator permits, or None if not available.

    +
    +
    Return type:
    +

    Optional[list[bool]]

    +
    +
    +
    + +
    +
    +get_timelocked_weight_commits(netuid, mechid=0, block=None)#
    +

    Retrieves CRv4 (Commit-Reveal version 4) weight commit information for a specific subnet.

    +

    This method retrieves timelocked weight commitments made by validators using the commit-reveal mechanism. +The raw byte/vector encoding from the chain is automatically parsed and converted into a structured format +via WeightCommitInfo.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The unique identifier of the subnet.

    • +
    • mechid (int) – Subnet mechanism identifier (default 0 for primary mechanism).

    • +
    • block (Optional[int]) – The blockchain block number for the query. If None, queries the current chain head.

    • +
    +
    +
    Returns:
    +

      +
    • ss58_address: The SS58 address of the committer.

    • +
    • commit_block: The block number when the commitment was made.

    • +
    • commit_message: The commit message (encoded commitment data).

    • +
    • reveal_round: The drand round when the commitment can be revealed.

    • +
    +

    +
    +
    Return type:
    +

    A list of commit details, where each item is a tuple containing

    +
    +
    +
    +

    Notes

    +

    The list may be empty if there are no commits found. +- <https://docs.learnbittensor.org/resources/glossary#commit-reveal>

    +
    +
    + +
    +
    +get_timestamp(block=None)[source]#
    +

    Retrieves the datetime timestamp for a given block

    +
    +
    Parameters:
    +

    block (Optional[int]) – The blockchain block number for the query.

    +
    +
    Returns:
    +

    datetime object for the timestamp of the block

    +
    +
    Return type:
    +

    datetime.datetime

    +
    +
    +
    + +
    +
    +get_total_subnets(block=None)[source]#
    +

    Retrieves the total number of subnets within the Bittensor network as of a specific blockchain block.

    +
    +
    Parameters:
    +

    block (Optional[int]) – The blockchain block number for the query. If None, queries the current chain head.

    +
    +
    Returns:
    +

    The total number of subnets in the network.

    +
    +
    Return type:
    +

    Optional[int]

    +
    +
    +
    + +
    +
    +get_transfer_fee(wallet, destination_ss58, amount, keep_alive=True)[source]#
    +

    Calculates the transaction fee for transferring tokens from a wallet to a specified destination address. This +function simulates the transfer to estimate the associated cost, taking into account the current network +conditions and transaction complexity.

    +
    +
    Parameters:
    +
      +
    • wallet (bittensor_wallet.Wallet) – The wallet from which the transfer is initiated.

    • +
    • destination_ss58 (str) – The SS58 address of the destination account.

    • +
    • amount (Optional[bittensor.utils.balance.Balance]) – The amount of tokens to be transferred, specified as a Balance object, or in Tao or Rao units.

    • +
    • keep_alive (bool) – Whether the transfer fee should be calculated based on keeping the wallet alive (existential +deposit) or not.

    • +
    +
    +
    Returns:
    +

    +
    The estimated transaction fee for the transfer, represented as a Balance

    object.

    +
    +
    +

    +
    +
    Return type:
    +

    bittensor.utils.balance.Balance

    +
    +
    + +
    + +
    +
    +get_uid_for_hotkey_on_subnet(hotkey_ss58, netuid, block=None)[source]#
    +

    Retrieves the unique identifier (UID) for a neuron’s hotkey on a specific subnet.

    +
    +
    Parameters:
    +
      +
    • hotkey_ss58 (str) – The SS58 address of the neuron’s hotkey.

    • +
    • netuid (int) – The unique identifier of the subnet.

    • +
    • block (Optional[int]) – The blockchain block number for the query.

    • +
    +
    +
    Returns:
    +

    The UID of the neuron if it is registered on the subnet, None otherwise.

    +
    +
    Return type:
    +

    Optional[int]

    +
    +
    +

    The UID is a critical identifier within the network, linking the neuron’s hotkey to its operational and +governance activities on a particular subnet.

    +
    + +
    +
    +get_unstake_fee(netuid, amount, block=None)[source]#
    +

    Calculates the fee for unstaking from a hotkey.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The unique identifier of the subnet.

    • +
    • amount (bittensor.utils.balance.Balance) – Amount of stake to unstake in TAO.

    • +
    • block (Optional[int]) – The blockchain block number for the query. If None, queries the current chain head.

    • +
    +
    +
    Returns:
    +

    The calculated stake fee as a Balance object in Alpha.

    +
    +
    Return type:
    +

    bittensor.utils.balance.Balance

    +
    +
    + +
    + +
    +
    +get_vote_data(proposal_hash, block=None)[source]#
    +

    Retrieves the voting data for a specific proposal on the Bittensor blockchain. This data includes information +about how senate members have voted on the proposal.

    +
    +
    Parameters:
    +
      +
    • proposal_hash (str) – The hash of the proposal for which voting data is requested.

    • +
    • block (Optional[int]) – The blockchain block number for the query. If None, queries the current chain head.

    • +
    +
    +
    Returns:
    +

    An object containing the proposal’s voting data, or None if not found.

    +
    +
    Return type:
    +

    Optional[bittensor.core.chain_data.ProposalVoteData]

    +
    +
    +

    This function is important for tracking and understanding the decision-making processes within the Bittensor +network, particularly how proposals are received and acted upon by the governing body.

    +
    + +
    +
    +immunity_period(netuid, block=None)[source]#
    +

    Retrieves the ‘ImmunityPeriod’ hyperparameter for a specific subnet. This parameter defines the duration during +which new neurons are protected from certain network penalties or restrictions.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The unique identifier of the subnet.

    • +
    • block (Optional[int]) – The blockchain block number for the query.

    • +
    +
    +
    Returns:
    +

    The value of the ‘ImmunityPeriod’ hyperparameter if the subnet exists, None otherwise.

    +
    +
    Return type:
    +

    Optional[int]

    +
    +
    +

    The ‘ImmunityPeriod’ is a critical aspect of the network’s governance system, ensuring that new participants +have a grace period to establish themselves and contribute to the network without facing immediate punitive +actions.

    +
    + +
    +
    +is_fast_blocks()[source]#
    +

    Checks if the node is running with fast blocks enabled.

    +

    Fast blocks have a block time of 10 seconds, compared to the standard 12-second block time. This affects +transaction timing and network synchronization.

    +
    +
    Returns:
    +

    True if fast blocks are enabled (10-second block time), False otherwise (12-second block time).

    +
    +
    Return type:
    +

    bool

    +
    +
    + +
    + +
    +
    +is_hotkey_delegate(hotkey_ss58, block=None)[source]#
    +

    Determines whether a given hotkey (public key) is a delegate on the Bittensor network. This function checks if +the neuron associated with the hotkey is part of the network’s delegation system.

    +
    +
    Parameters:
    +
      +
    • hotkey_ss58 (str) – The SS58 address of the neuron’s hotkey.

    • +
    • block (Optional[int]) – The blockchain block number for the query.

    • +
    +
    +
    Returns:
    +

    True if the hotkey is a delegate, False otherwise.

    +
    +
    Return type:
    +

    bool

    +
    +
    +

    Being a delegate is a significant status within the Bittensor network, indicating a neuron’s involvement in +consensus and governance processes.

    +
    + +
    +
    +is_hotkey_registered(hotkey_ss58, netuid=None, block=None)[source]#
    +

    Determines whether a given hotkey (public key) is registered in the Bittensor network, either globally across +any subnet or specifically on a specified subnet. This function checks the registration status of a neuron +identified by its hotkey, which is crucial for validating its participation and activities within the network.

    +
    +
    Parameters:
    +
      +
    • hotkey_ss58 (str) – The SS58 address of the neuron’s hotkey.

    • +
    • netuid (Optional[int]) – The unique identifier of the subnet to check the registration. If None, the registration is +checked across all subnets.

    • +
    • block (Optional[int]) – The blockchain block number at which to perform the query.

    • +
    +
    +
    Returns:
    +

    +
    True if the hotkey is registered in the specified context (either any subnet or a specific subnet),

    False otherwise.

    +
    +
    +

    +
    +
    Return type:
    +

    bool

    +
    +
    +

    This function is important for verifying the active status of neurons in the Bittensor network. It aids in +understanding whether a neuron is eligible to participate in network processes such as consensus, validation, +and incentive distribution based on its registration status.

    +
    + +
    +
    +is_hotkey_registered_any(hotkey_ss58, block=None)[source]#
    +

    Checks if a neuron’s hotkey is registered on any subnet within the Bittensor network.

    +
    +
    Parameters:
    +
      +
    • hotkey_ss58 (str) – The SS58 address of the neuron’s hotkey.

    • +
    • block (Optional[int]) – The blockchain block number for the query.

    • +
    +
    +
    Returns:
    +

    True if the hotkey is registered on any subnet, False otherwise.

    +
    +
    Return type:
    +

    bool

    +
    +
    +
    + +
    +
    +is_hotkey_registered_on_subnet(hotkey_ss58, netuid, block=None)[source]#
    +

    Checks if the hotkey is registered on a given subnet.

    +
    Parameters:
      -
    • hotkey_ss58 (str)

    • -
    • netuid (int)

    • -
    • block (Optional[int])

    • +
    • hotkey_ss58 (str) – The SS58 address of the hotkey to check.

    • +
    • netuid (int) – The unique identifier of the subnet.

    • +
    • block (Optional[int]) – The blockchain block number for the query. If None, queries the current chain head.

    -
    Return type:
    -

    bool

    +
    Returns:
    +

    True if the hotkey is registered on the specified subnet, False otherwise.

    +
    +
    Return type:
    +

    bool

    +
    +
    + +
    + +
    +
    +is_in_admin_freeze_window(netuid, block=None)#
    +

    Returns True if the current block is within the terminal freeze window of the tempo +for the given subnet. During this window, admin ops are prohibited to avoid interference +with validator weight submissions.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The unique identifier of the subnet.

    • +
    • block (Optional[int]) – The blockchain block number for the query.

    • +
    +
    +
    Returns:
    +

    True if in freeze window, else False.

    +
    +
    Return type:
    +

    bool

    -is_subnet_active(netuid, block=None)#
    -

    Verify if subnet with provided netuid is active.

    +is_subnet_active(netuid, block=None)[source]# +

    Verifies if a subnet with the provided netuid is active.

    +

    A subnet is considered active if the start_call extrinsic has been executed. A newly registered subnet +may exist but not be active until the subnet owner calls start_call to begin emissions.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The unique identifier of the subnet.

    • +
    • block (Optional[int]) – The blockchain block number for the query. If None, queries the current chain head.

    • +
    +
    +
    Returns:
    +

    True if the subnet is active (emissions have started), False otherwise.

    +
    +
    Return type:
    +

    bool

    +
    +
    + +
    + +
    +
    +kill_pure_proxy(wallet, pure_proxy_ss58, spawner, proxy_type, index, height, ext_index, force_proxy_type=ProxyType.Any, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Kills (removes) a pure proxy account.

    +

    This method removes a pure proxy account that was previously created via create_pure_proxy(). The kill_pure +call must be executed through the pure proxy account itself, with the spawner acting as an “Any” proxy. This +method automatically handles this by executing the call via proxy().

    Parameters:
      -
    • netuid (int) – The unique identifier of the subnet.

    • -
    • block (Optional[int]) – The blockchain block number for the query.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet object. The wallet.coldkey.ss58_address must be the spawner of the pure proxy (the +account that created it via create_pure_proxy()). The spawner must have an “Any” proxy relationship +with the pure proxy.

    • +
    • pure_proxy_ss58 (str) – The SS58 address of the pure proxy account to be killed. This is the address that was +returned in the create_pure_proxy() response.

    • +
    • spawner (str) – The SS58 address of the spawner account (the account that originally created the pure proxy via +create_pure_proxy()). This should match wallet.coldkey.ss58_address.

    • +
    • proxy_type (Union[str, bittensor.core.chain_data.ProxyType]) – The type of proxy permissions. Can be a string or ProxyType enum value. Must match the +proxy_type used when creating the pure proxy.

    • +
    • index (int) – The salt value (u16, range 0-65535) originally used in create_pure_proxy() to generate this +pure proxy’s address. This value, combined with proxy_type, delay, and spawner, uniquely +identifies the pure proxy to be killed. Must match exactly the index used during creation.

    • +
    • height (int) – The block height at which the pure proxy was created.

    • +
    • ext_index (int) – The extrinsic index at which the pure proxy was created.

    • +
    • force_proxy_type (Optional[Union[str, bittensor.core.chain_data.ProxyType]]) – The proxy type relationship to use when executing kill_pure through the proxy mechanism. +Since pure proxies are keyless and cannot sign transactions, the spawner must act as a proxy for the +pure proxy to execute kill_pure. This parameter specifies which proxy type relationship between the +spawner and the pure proxy account should be used. The spawner must have a proxy relationship of this +type (or Any) with the pure proxy account. Defaults to ProxyType.Any for maximum compatibility. If +None, Substrate will automatically select an available proxy type from the spawner’s proxy +relationships.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You +can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    True if subnet is active, False otherwise.

    +

    The result object of the extrinsic execution.

    Return type:
    -

    bool

    +

    ExtrinsicResponse

    -

    This means whether the start_call was initiated or not.

    +
    +

    Notes

    +
      +
    • The kill_pure call must be executed through the pure proxy account itself, with the spawner acting as +an Any proxy. This method automatically handles this by executing the call via proxy(). The spawner +must have an Any proxy relationship with the pure proxy for this to work.

    • +
    • See: <https://docs.learnbittensor.org/keys/proxies/pure-proxies>

    • +
    +
    +
    +

    Warning

    +

    All access to this account will be lost. Any funds remaining in the pure proxy account will become +permanently inaccessible after this operation.

    +
    last_drand_round()[source]#
    -

    Retrieves the last drand round emitted in bittensor. This corresponds when committed weights will be revealed.

    +

    Retrieves the last drand round emitted in Bittensor.

    +

    Drand (distributed randomness) rounds are used to determine when committed weights can be revealed in the +commit-reveal mechanism. This method returns the most recent drand round number, which corresponds to the +timing for weight reveals.

    Returns:
    -

    The latest Drand round emitted in bittensor.

    +

    The latest drand round number emitted in Bittensor, or None if no round has been stored.

    Return type:
    -

    int

    +

    Optional[int]

    +
    @@ -2244,698 +4253,1286 @@

    Module Contents
    max_weight_limit(netuid, block=None)[source]#
    -

    Returns network MaxWeightsLimit hyperparameter.

    +

    Returns the MaxWeightsLimit hyperparameter for a subnet.

    Parameters:
      -
    • netuid (int) – The unique identifier of the subnetwork.

    • -
    • block (Optional[int]) – The blockchain block number for the query.

    • +
    • netuid (int) – The unique identifier of the subnetwork.

    • +
    • block (Optional[int]) – The blockchain block number for the query.

    Returns:

    -
    The value of the MaxWeightsLimit hyperparameter, or None if the subnetwork does not

    exist or the parameter is not found.

    +
    The stored maximum weight limit as a normalized float in [0, 1], or None if the subnetwork

    does not exist. Note: this value is not actually enforced - the weight validation code uses +a hardcoded u16::MAX instead.

    Return type:
    -

    Optional[float]

    +

    Optional[float]

    +
    +

    Notes

    + +

    -metagraph(netuid, lite=True, block=None)[source]#
    -
    +metagraph(netuid, mechid=0, lite=True, block=None)[source]# +

    Returns a synced metagraph for a specified subnet within the Bittensor network. +The metagraph represents the network’s structure, including neuron connections and interactions.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The network UID of the subnet to query.

    • +
    • mechid (int) – Subnet mechanism identifier.

    • +
    • lite (bool) – If True, returns a metagraph using a lightweight sync (no weights, no bonds).

    • +
    • block (Optional[int]) – Block number for synchronization, or None for the latest block.

    • +
    +
    +
    Returns:
    +

    The metagraph representing the subnet’s structure and neuron relationships.

    +
    +
    Return type:
    +

    bittensor.core.metagraph.Metagraph

    +
    +
    +

    The metagraph is an essential tool for understanding the topology and dynamics of the Bittensor network’s +decentralized architecture, particularly in relation to neuron interconnectivity and consensus processes.

    +
    + +
    +
    +mev_submit_encrypted(wallet, call, sign_with='coldkey', *, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True, blocks_for_revealed_execution=3)#
    +

    Submits an encrypted extrinsic to the MEV Shield pallet.

    +

    This function encrypts a call using ML-KEM-768 + XChaCha20Poly1305 and submits it to the MevShield pallet. The +extrinsic remains encrypted in the transaction pool until it is included in a block and decrypted by validators.

    +
    +
    Parameters:
    +
      +
    • wallet (bittensor_wallet.Wallet) – The wallet used to sign the extrinsic (must be unlocked, coldkey will be used for signing).

    • +
    • call (scalecodec.types.GenericCall) – The GenericCall object to encrypt and submit.

    • +
    • sign_with (str) – The keypair to use for signing the inner call/extrinsic. Can be either “coldkey” or “hotkey”.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You can +think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the executed event, indicating that validators +have successfully decrypted and executed the inner call. If True, the function will poll subsequent +blocks for the event matching this submission’s commitment.

    • +
    • blocks_for_revealed_execution (int) – Maximum number of blocks to poll for the executed event after inclusion. The +function checks blocks from start_block+1 to start_block + blocks_for_revealed_execution. Returns +immediately if the event is found before the block limit is reached.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    Raises:
    +
      +
    • ValueError – If NextKey is not available in storage or encryption fails.

    • +
    • SubstrateRequestException – If the extrinsic fails to be submitted or included.

    • +
    +
    +
    +
    +

    Note

    +

    The encryption uses the public key from NextKey storage, which rotates every block. The payload structure is: +payload_core = signer_bytes (32B) + nonce (u32 LE, 4B) + SCALE(call) +plaintext = payload_core + b”x01” + signature (64B for sr25519) +commitment = blake2_256(payload_core)

    +
    +
    +

    Notes

    +

    For detailed documentation and examples of MEV Shield protection, see: +<https://docs.learnbittensor.org/sdk/mev-protection>

    +

    For creating GenericCall objects to use with this method, see: +<https://docs.learnbittensor.org/sdk/call>

    +
    +
    + +
    +
    +min_allowed_weights(netuid, block=None)[source]#
    +

    Returns the MinAllowedWeights hyperparameter for a subnet.

    +

    This hyperparameter sets the minimum length of the weights vector that a validator must submit. +It checks weights.len() >= MinAllowedWeights. For example, a validator could submit [1000, 0, 0, 0] +to satisfy MinAllowedWeights=4, but this would fail if MinAllowedWeights were set to 5. +This ensures validators distribute attention across the subnet.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The unique identifier of the subnetwork.

    • +
    • block (Optional[int]) – The blockchain block number for the query.

    • +
    +
    +
    Returns:
    +

    +
    The minimum number of required weight connections, or None if the subnetwork does not

    exist or the parameter is not found.

    +
    +
    +

    +
    +
    Return type:
    +

    Optional[int]

    +
    +
    + +
    + +
    +
    +modify_liquidity(wallet, netuid, position_id, liquidity_delta, hotkey_ss58=None, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#
    +

    Modifies liquidity in liquidity position by adding or removing liquidity from it.

    +
    +
    Parameters:
    +
      +
    • wallet (bittensor_wallet.Wallet) – The wallet used to sign the extrinsic (must be unlocked).

    • +
    • netuid (int) – The UID of the target subnet for which the call is being initiated.

    • +
    • position_id (int) – The id of the position record in the pool.

    • +
    • liquidity_delta (bittensor.utils.balance.Balance) – The amount of liquidity to be added or removed (add if positive or remove if negative).

    • +
    • hotkey_ss58 (Optional[str]) – The hotkey with staked TAO in Alpha. If not passed then the wallet hotkey is used.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If +the transaction is not included in a block within that number of blocks, it will expire and be rejected. +You can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the extrinsic to be included in a block.

    • +
    • wait_for_finalization (bool) – Whether to wait for finalization of the extrinsic.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    +

    Example:

    +
    import bittensor as bt
    +
    +subtensor = bt.subtensor(network="local")
    +
    +my_wallet = bt.Wallet()
    +
    +# if liquidity_delta is negative
    +
    +my_liquidity_delta = Balance.from_tao(100) * -1
    +
    +subtensor.modify_liquidity(
    +
    +    wallet=my_wallet,
    +
    +    netuid=123,
    +
    +    position_id=2,
    +
    +    liquidity_delta=my_liquidity_delta
    +
    +)
    +
    +# if liquidity_delta is positive
    +
    +my_liquidity_delta = Balance.from_tao(120)
    +
    +subtensor.modify_liquidity(
    +
    +    wallet=my_wallet,
    +
    +    netuid=123,
    +
    +    position_id=2,
    +
    +    liquidity_delta=my_liquidity_delta
    +)
    +
    +
    +

    Note: Modifying is allowed even when user liquidity is enabled in specified subnet. Call toggle_user_liquidity +to enable/disable user liquidity.

    +
    + +
    +
    +move_stake(wallet, origin_netuid, origin_hotkey_ss58, destination_netuid, destination_hotkey_ss58, amount=None, move_all_stake=False, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#
    +

    Moves stake to a different hotkey and/or subnet.

    +
    +
    Parameters:
    +
      +
    • wallet (bittensor_wallet.Wallet) – The wallet to move stake from.

    • +
    • origin_netuid (int) – The netuid of the source subnet.

    • +
    • origin_hotkey_ss58 (str) – The SS58 address of the source hotkey.

    • +
    • destination_netuid (int) – The netuid of the destination subnet.

    • +
    • destination_hotkey_ss58 (str) – The SS58 address of the destination hotkey.

    • +
    • amount (Optional[bittensor.utils.balance.Balance]) – Amount of stake to move.

    • +
    • move_all_stake (bool) – If True, moves all stake from the source hotkey to the destination hotkey.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You +can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Waits for the transaction to be included in a block.

    • +
    • wait_for_finalization (bool) – Waits for the transaction to be finalized on the blockchain.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    + +
    + +
    +
    +neuron_for_uid(uid, netuid, block=None)[source]#
    +

    Retrieves detailed information about a specific neuron identified by its unique identifier (UID) within a +specified subnet (netuid) of the Bittensor network. This function provides a comprehensive view of a neuron’s +attributes, including its stake, rank, and operational status.

    +
    +
    Parameters:
    +
      +
    • uid (int) – The unique identifier of the neuron.

    • +
    • netuid (int) – The unique identifier of the subnet.

    • +
    • block (Optional[int]) – The blockchain block number for the query.

    • +
    +
    +
    Returns:
    +

    Detailed information about the neuron if found, a null neuron otherwise

    +
    +
    Return type:
    +

    bittensor.core.chain_data.NeuronInfo

    +
    +
    +

    This function is crucial for analyzing individual neurons’ contributions and status within a specific subnet, +offering insights into their roles in the network’s consensus and validation mechanisms.

    +
    + +
    +
    +neurons(netuid, block=None)[source]#
    +

    Retrieves a list of all neurons within a specified subnet of the Bittensor network. +This function provides a snapshot of the subnet’s neuron population, including each neuron’s attributes and +network interactions.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The unique identifier of the subnet.

    • +
    • block (Optional[int]) – The blockchain block number for the query.

    • +
    +
    +
    Returns:
    +

    A list of NeuronInfo objects detailing each neuron’s characteristics in the subnet.

    +
    +
    Return type:
    +

    list[bittensor.core.chain_data.NeuronInfo]

    +
    +
    +

    Understanding the distribution and status of neurons within a subnet is key to comprehending the network’s +decentralized structure and the dynamics of its consensus and governance processes.

    +
    + +
    +
    +neurons_lite(netuid, block=None)[source]#
    +

    Retrieves a list of neurons in a ‘lite’ format from a specific subnet of the Bittensor network. +This function provides a streamlined view of the neurons, focusing on key attributes such as stake and network +participation.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The unique identifier of the subnet.

    • +
    • block (Optional[int]) – The blockchain block number for the query.

    • +
    +
    +
    Returns:
    +

    A list of simplified neuron information for the subnet.

    +
    +
    Return type:
    +

    list[bittensor.core.chain_data.NeuronInfoLite]

    +
    +
    +

    This function offers a quick overview of the neuron population within a subnet, facilitating efficient analysis +of the network’s decentralized structure and neuron dynamics.

    +
    + +
    +
    +poke_deposit(wallet, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Adjusts deposits made for proxies and announcements based on current values.

    +

    This method recalculates and updates the locked deposit amounts for both proxy relationships and announcements +for the signing account. It can be used to potentially lower the locked amount if the deposit requirements have +changed (e.g., due to runtime upgrades or changes in the number of proxies/announcements).

    +
    +
    Parameters:
    +
      +
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet object (the account whose deposits will be adjusted).

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    +
    +

    Note

    +

    This method automatically adjusts deposits for both proxy relationships and announcements. No parameters are +needed as it operates on the account’s current state.

    +
    +
    +
    When to use:
      +
    • After runtime upgrade, if deposit constants have changed.

    • +
    • After removing proxies/announcements, to free up excess locked funds.

    • +
    • Periodically to optimize locked deposit amounts.

    • +
    +
    +
    +
    + +
    +
    +proxy(wallet, real_account_ss58, force_proxy_type, call, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Executes a call on behalf of the real account through a proxy.

    +

    This method allows a proxy account (delegate) to execute a call on behalf of the real account (delegator). The +call is subject to the permissions defined by the proxy type and must respect the delay period if one was set +when the proxy was added.

    +
    +
    Parameters:
    +
      +
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet object (should be the proxy account wallet).

    • +
    • real_account_ss58 (str) – The SS58 address of the real account on whose behalf the call is being made.

    • +
    • force_proxy_type (Optional[Union[str, bittensor.core.chain_data.ProxyType]]) – The type of proxy to use for the call. If None, any proxy type can be used. Otherwise, +must match one of the allowed proxy types. Can be a string or ProxyType enum value.

    • +
    • call (scalecodec.types.GenericCall) – The inner call to be executed on behalf of the real account.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You +can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    +
    +

    Note

    +

    The call must be permitted by the proxy type. For example, a “NonTransfer” proxy cannot execute transfer +calls. The delay period must also have passed since the proxy was added.

    +
    +
    + +
    +
    +proxy_announced(wallet, delegate_ss58, real_account_ss58, force_proxy_type, call, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Executes an announced call on behalf of the real account through a proxy.

    +

    This method executes a call that was previously announced via announce_proxy(). The call must match the +call_hash that was announced, and the delay period must have passed since the announcement was made. The real +account has the opportunity to review and reject the announcement before execution.

    +
    +
    Parameters:
    +
      +
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet object (should be the proxy account wallet that made the announcement).

    • +
    • delegate_ss58 (str) – The SS58 address of the delegate proxy account that made the announcement.

    • +
    • real_account_ss58 (str) – The SS58 address of the real account on whose behalf the call will be made.

    • +
    • force_proxy_type (Optional[Union[str, bittensor.core.chain_data.ProxyType]]) – The type of proxy to use for the call. If None, any proxy type can be used. Otherwise, +must match one of the allowed proxy types. Can be a string or ProxyType enum value.

    • +
    • call (scalecodec.types.GenericCall) – The inner call to be executed on behalf of the real account (must match the announced call_hash).

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You +can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    +
    +

    Note

    +

    The call_hash of the provided call must match the call_hash that was announced. The announcement must not +have been rejected by the real account, and the delay period must have passed.

    +
    +
    + +
    +
    +query_constant(module_name, constant_name, block=None)[source]#
    +

    Retrieves a constant from the specified module on the Bittensor blockchain.

    +

    Use this function for nonstandard queries to constants defined within the Bittensor blockchain, if these cannot +be accessed through other, standard getter methods.

    +
    Parameters:
      -
    • netuid (int)

    • -
    • lite (bool)

    • -
    • block (Optional[int])

    • +
    • module_name (str) – The name of the module containing the constant (e.g., Balances, SubtensorModule).

    • +
    • constant_name (str) – The name of the constant to retrieve (e.g., ExistentialDeposit).

    • +
    • block (Optional[int]) – The block number to query. If None, queries the current chain head.

    -
    Return type:
    -

    bittensor.core.metagraph.Metagraph

    +
    Returns:
    +

    A SCALE-decoded object if found, None otherwise. Access the actual value using .value attribute. +Common types include int (for counts/blocks), Balance objects (for amounts in Rao), and booleans.

    +
    +
    Return type:
    +

    Optional[async_substrate_interface.types.ScaleObj]

    -
    -min_allowed_weights(netuid, block=None)[source]#
    -

    Returns network MinAllowedWeights hyperparameter.

    +
    +query_identity(coldkey_ss58, block=None)[source]#
    +

    Queries the identity of a neuron on the Bittensor blockchain using the given key. This function retrieves +detailed identity information about a specific neuron, which is a crucial aspect of the network’s decentralized +identity and governance system.

    Parameters:
      -
    • netuid (int) – The unique identifier of the subnetwork.

    • -
    • block (Optional[int]) – The blockchain block number for the query.

    • +
    • coldkey_ss58 (str) – Coldkey used to query the neuron’s identity (technically the neuron’s coldkey SS58 address).

    • +
    • block (Optional[int]) – The blockchain block number for the query.

    Returns:
    -

    -
    The value of the MinAllowedWeights hyperparameter, or None if the subnetwork does not

    exist or the parameter is not found.

    -
    -
    -

    +

    An object containing the identity information of the neuron if found, None otherwise.

    Return type:
    -

    Optional[int]

    +

    Optional[bittensor.core.chain_data.chain_identity.ChainIdentity]

    +

    The identity information can include various attributes such as the neuron’s stake, rank, and other +network-specific details, providing insights into the neuron’s role and status within the Bittensor network.

    +
    +

    Note

    +

    See the Bittensor CLI documentation for supported identity +parameters.

    +
    -
    -move_stake(wallet, origin_hotkey, origin_netuid, destination_hotkey, destination_netuid, amount, wait_for_inclusion=True, wait_for_finalization=False, period=None)[source]#
    -

    Moves stake to a different hotkey and/or subnet.

    +
    +query_map(module, name, params=None, block=None)[source]#
    +

    Queries map storage from any module on the Bittensor blockchain.

    +

    Use this function for nonstandard queries to map storage defined within the Bittensor blockchain, if these cannot +be accessed through other, standard getter methods.

    Parameters:
      -
    • wallet (bittensor.wallet) – The wallet to move stake from.

    • -
    • origin_hotkey (str) – The SS58 address of the source hotkey.

    • -
    • origin_netuid (int) – The netuid of the source subnet.

    • -
    • destination_hotkey (str) – The SS58 address of the destination hotkey.

    • -
    • destination_netuid (int) – The netuid of the destination subnet.

    • -
    • amount (Balance) – Amount of stake to move.

    • -
    • wait_for_inclusion (bool) – Waits for the transaction to be included in a block.

    • -
    • wait_for_finalization (bool) – Waits for the transaction to be finalized on the blockchain.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If -the transaction is not included in a block within that number of blocks, it will expire and be rejected. -You can think of it as an expiration date for the transaction.

    • +
    • module (str) – The name of the module from which to query the map storage (e.g., “SubtensorModule”, “System”).

    • +
    • name (str) – The specific storage function within the module to query (e.g., “Bonds”, “Weights”).

    • +
    • params (Optional[list]) – Parameters to be passed to the query.

    • +
    • block (Optional[int]) – The block number to query. If None, queries the current chain head.

    Returns:
    -

    True if the stake movement was successful.

    +

    A data structure representing the map storage if found, None otherwise.

    Return type:
    -

    success (bool)

    +

    QueryMapResult

    -
    -neuron_for_uid(uid, netuid, block=None)[source]#
    -
    -
    Retrieves detailed information about a specific neuron identified by its unique identifier (UID) within a

    specified subnet (netuid) of the Bittensor network. This function provides a comprehensive view of a -neuron’s attributes, including its stake, rank, and operational status.

    -
    -
    +
    +query_map_subtensor(name, params=None, block=None)[source]#
    +

    Queries map storage from the Subtensor module on the Bittensor blockchain.

    +

    Use this function for nonstandard queries to map storage defined within the Bittensor blockchain, if these cannot +be accessed through other, standard getter methods.

    Parameters:
      -
    • uid (int) – The unique identifier of the neuron.

    • -
    • netuid (int) – The unique identifier of the subnet.

    • -
    • block (Optional[int]) – The blockchain block number for the query.

    • +
    • name (str) – The name of the map storage function to query.

    • +
    • params (Optional[list]) – A list of parameters to pass to the query function.

    • +
    • block (Optional[int]) – The block number to query. If None, queries the current chain head.

    Returns:
    -

    Detailed information about the neuron if found, a null neuron otherwise

    +

    An object containing the map-like data structure, or None if not found.

    Return type:
    -

    bittensor.core.chain_data.NeuronInfo

    -
    -
    -
    -
    This function is crucial for analyzing individual neurons’ contributions and status within a specific subnet,

    offering insights into their roles in the network’s consensus and validation mechanisms.

    +

    async_substrate_interface.sync_substrate.QueryMapResult

    -
    -neurons(netuid, block=None)[source]#
    -

    Retrieves a list of all neurons within a specified subnet of the Bittensor network. -This function provides a snapshot of the subnet’s neuron population, including each neuron’s attributes and

    -
    -

    network interactions.

    -
    +
    +query_module(module, name, params=None, block=None)[source]#
    +

    Queries any module storage on the Bittensor blockchain with the specified parameters and block number. +This function is a generic query interface that allows for flexible and diverse data retrieval from various +blockchain modules. Use this function for nonstandard queries to storage defined within the Bittensor +blockchain, if these cannot be accessed through other, standard getter methods.

    Parameters:
      -
    • netuid (int) – The unique identifier of the subnet.

    • -
    • block (Optional[int]) – The blockchain block number for the query.

    • +
    • module (str) – The name of the module from which to query data.

    • +
    • name (str) – The name of the storage function within the module.

    • +
    • params (Optional[list]) – A list of parameters to pass to the query function.

    • +
    • block (Optional[int]) – The block number to query. If None, queries the current chain head.

    Returns:
    -

    A list of NeuronInfo objects detailing each neuron’s characteristics in the subnet.

    +

    An object containing the requested data if found, None otherwise.

    Return type:
    -

    list[bittensor.core.chain_data.NeuronInfo]

    -
    -
    -
    -
    Understanding the distribution and status of neurons within a subnet is key to comprehending the network’s

    decentralized structure and the dynamics of its consensus and governance processes.

    +

    Optional[Union[async_substrate_interface.types.ScaleObj, Any, bittensor.utils.balance.FixedPoint]]

    -
    -neurons_lite(netuid, block=None)[source]#
    -

    Retrieves a list of neurons in a ‘lite’ format from a specific subnet of the Bittensor network. -This function provides a streamlined view of the neurons, focusing on key attributes such as stake and network

    +
    +query_runtime_api(runtime_api, method, params=None, block=None)[source]#
    +

    Queries the runtime API of the Bittensor blockchain, providing a way to interact with the underlying runtime +and retrieve data encoded in Scale Bytes format. Use this function for nonstandard queries to the runtime

    -

    participation.

    +

    environment, if these cannot be accessed through other, standard getter methods.

    Parameters:
      -
    • netuid (int) – The unique identifier of the subnet.

    • -
    • block (Optional[int]) – The blockchain block number for the query.

    • +
    • runtime_api (str) – The name of the runtime API to query.

    • +
    • method (str) – The specific method within the runtime API to call.

    • +
    • params (Optional[Union[list[Any], dict[str, Any]]]) – The parameters to pass to the method call.

    • +
    • block (Optional[int]) – The block number to query. If None, queries the current chain head.

    Returns:
    -

    A list of simplified neuron information for the subnet.

    +

    The decoded result from the runtime API call, or None if the call fails.

    Return type:
    -

    list[bittensor.core.chain_data.NeuronInfoLite]

    -
    -
    -
    -
    This function offers a quick overview of the neuron population within a subnet, facilitating efficient analysis

    of the network’s decentralized structure and neuron dynamics.

    +

    Any

    -
    -query_constant(module_name, constant_name, block=None)[source]#
    -
    -
    Retrieves a constant from the specified module on the Bittensor blockchain. This function is used to access

    fixed parameters or values defined within the blockchain’s modules, which are essential for understanding -the network’s configuration and rules.

    -
    -
    +
    +query_subtensor(name, params=None, block=None)[source]#
    +

    Queries named storage from the Subtensor module on the Bittensor blockchain.

    +

    Use this function for nonstandard queries to constants defined within the Bittensor blockchain, if these cannot +be accessed through other, standard getter methods.

    Parameters:
      -
    • module_name (str) – The name of the module containing the constant.

    • -
    • constant_name (str) – The name of the constant to retrieve.

    • -
    • block (Optional[int]) – The blockchain block number at which to query the constant.

    • +
    • name (str) – The name of the storage function to query.

    • +
    • params (Optional[list]) – A list of parameters to pass to the query function.

    • +
    • block (Optional[int]) – The block number to query. If None, queries the current chain head.

    Returns:
    -

    The value of the constant if found, None otherwise.

    +

    An object containing the requested data.

    Return type:
    -

    Optional[async_substrate_interface.types.ScaleObj]

    -
    -
    -
    -
    Constants queried through this function can include critical network parameters such as inflation rates,

    consensus rules, or validation thresholds, providing a deeper understanding of the Bittensor network’s -operational parameters.

    +

    query_response

    -
    -query_identity(coldkey_ss58, block=None)[source]#
    -
    -
    Queries the identity of a neuron on the Bittensor blockchain using the given key. This function retrieves

    detailed identity information about a specific neuron, which is a crucial aspect of the network’s -decentralized identity and governance system.

    -
    -
    +
    +recycle(netuid, block=None)[source]#
    +

    Retrieves the ‘Burn’ hyperparameter for a specified subnet.

    +

    The ‘Burn’ parameter represents the amount of TAO that is recycled when registering a neuron +on this subnet. Recycled tokens are removed from circulation but can be re-emitted, unlike +burned tokens which are permanently removed.

    Parameters:
      -
    • coldkey_ss58 (str) – The coldkey used to query the neuron’s identity (technically the neuron’s coldkey SS58 -address).

    • -
    • block (Optional[int]) – The blockchain block number for the query.

    • +
    • netuid (int) – The unique identifier of the subnet.

    • +
    • block (Optional[int]) – The blockchain block number for the query.

    Returns:
    -

    An object containing the identity information of the neuron if found, None otherwise.

    +

    The amount of TAO recycled per neuron registration, or None if the subnet does not exist.

    Return type:
    -

    Optional[bittensor.core.chain_data.chain_identity.ChainIdentity]

    -
    -
    -
    -
    The identity information can include various attributes such as the neuron’s stake, rank, and other

    network-specific details, providing insights into the neuron’s role and status within the Bittensor network.

    -
    -
    -
    -
    -query_map(module, name, block=None, params=None)[source]#
    -
    -
    Queries map storage from any module on the Bittensor blockchain. This function retrieves data structures that

    represent key-value mappings, essential for accessing complex and structured data within the blockchain -modules.

    -
    -
    +
    +refund_crowdloan(wallet, crowdloan_id, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Refunds contributors from a failed crowdloan campaign that did not reach its cap.

    +

    Refunds are batched, processing up to RefundContributorsLimit (default 50) contributors per call. +For campaigns with more contributors, multiple calls are required. Only non-creator contributors are +refunded; the creator’s deposit remains until dissolution via dissolve_crowdloan.

    +

    Only the crowdloan creator can call this method for a non-finalized crowdloan.

    Parameters:
      -
    • module (str) – The name of the module from which to query the map storage.

    • -
    • name (str) – The specific storage function within the module to query.

    • -
    • block (Optional[int]) – The blockchain block number at which to perform the query.

    • -
    • params (Optional[list]) – Parameters to be passed to the query.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet instance used to sign the transaction (must be the crowdloan creator).

    • +
    • crowdloan_id (int) – The unique identifier of the crowdloan to refund.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after submission.

    • +
    • raise_error (bool) – If True, raises an exception rather than returning failure in the response.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the extrinsic to be included in a block.

    • +
    • wait_for_finalization (bool) – Whether to wait for finalization of the extrinsic.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    A data structure representing the map storage if found, None otherwise.

    +

    ExtrinsicResponse indicating success or failure, with error details if applicable.

    Return type:
    -

    result

    -
    -
    -
    -
    This function is particularly useful for retrieving detailed and structured data from various blockchain

    modules, offering insights into the network’s state and the relationships between its different components.

    +

    bittensor.core.types.ExtrinsicResponse

    +
    -
    -query_map_subtensor(name, block=None, params=None)[source]#
    -
    -
    Queries map storage from the Subtensor module on the Bittensor blockchain. This function is designed to retrieve

    a map-like data structure, which can include various neuron-specific details or network-wide attributes.

    -
    -
    +
    +register(wallet, netuid, max_allowed_attempts=3, output_in_place=True, cuda=False, dev_id=0, tpb=256, num_processes=None, update_interval=None, log_verbose=False, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#
    +

    Registers a neuron on the Bittensor subnet with provided netuid using the provided wallet.

    +

    Registration is a critical step for a neuron to become an active participant in the network, enabling it to +stake, set weights, and receive incentives.

    Parameters:
      -
    • name (str) – The name of the map storage function to query.

    • -
    • block (Optional[int]) – The blockchain block number at which to perform the query.

    • -
    • params (Optional[list]) – A list of parameters to pass to the query function.

    • +
    • wallet (bittensor_wallet.Wallet) – The wallet associated with the neuron to be registered.

    • +
    • netuid (int) – The unique identifier of the subnet.

    • +
    • max_allowed_attempts (int) – Maximum number of attempts to register the wallet.

    • +
    • output_in_place (bool) – If True, prints the progress of the proof of work to the console in-place. Meaning the +progress is printed on the same lines.

    • +
    • cuda (bool) – If true, the wallet should be registered using CUDA device(s).

    • +
    • dev_id (Union[list[int], int]) – The CUDA device id to use, or a list of device ids.

    • +
    • tpb (int) – The number of threads per block (CUDA).

    • +
    • num_processes (Optional[int]) – The number of processes to use to register.

    • +
    • update_interval (Optional[int]) – The number of nonces to solve between updates.

    • +
    • log_verbose (bool) – If true, the registration process will log more information.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You +can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    An object containing the map-like data structure, or None if not found.

    +

    The result object of the extrinsic execution.

    Return type:
    -

    async_substrate_interface.sync_substrate.QueryMapResult

    -
    -
    -
    -
    This function is particularly useful for analyzing and understanding complex network structures and

    relationships within the Bittensor ecosystem, such as interneuronal connections and stake distributions.

    +

    ExtrinsicResponse

    +

    This function facilitates the entry of new neurons into the network, supporting the decentralized growth and +scalability of the Bittensor ecosystem.

    +
    -
    -query_module(module, name, block=None, params=None)[source]#
    -
    -
    Queries any module storage on the Bittensor blockchain with the specified parameters and block number. This

    function is a generic query interface that allows for flexible and diverse data retrieval from various -blockchain modules.

    -
    -
    +
    +register_subnet(wallet, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#
    +

    Registers a new subnetwork on the Bittensor network.

    Parameters:
      -
    • module (str) – The name of the module from which to query data.

    • -
    • name (str) – The name of the storage function within the module.

    • -
    • block (Optional[int]) – The blockchain block number at which to perform the query.

    • -
    • params (Optional[list[object]]) – A list of parameters to pass to the query function.

    • +
    • wallet (bittensor_wallet.Wallet) – The wallet to be used for subnet registration.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If +the transaction is not included in a block within that number of blocks, it will expire and be rejected. +You can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the extrinsic to be included in a block.

    • +
    • wait_for_finalization (bool) – Whether to wait for finalization of the extrinsic.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    An object containing the requested data if found, None otherwise.

    +

    The result object of the extrinsic execution.

    Return type:
    -

    Optional[Union[async_substrate_interface.types.ScaleObj, Any, bittensor.utils.balance.FixedPoint]]

    -
    -
    -
    -
    This versatile query function is key to accessing a wide range of data and insights from different parts of the

    Bittensor blockchain, enhancing the understanding and analysis of the network’s state and dynamics.

    +

    ExtrinsicResponse

    +
    -
    -query_runtime_api(runtime_api, method, params=None, block=None)[source]#
    -
    -
    Queries the runtime API of the Bittensor blockchain, providing a way to interact with the underlying runtime and

    retrieve data encoded in Scale Bytes format. This function is essential for advanced users who need to -interact with specific runtime methods and decode complex data types.

    -
    -
    +
    +reject_proxy_announcement(wallet, delegate_ss58, call_hash, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Rejects an announcement made by a proxy delegate.

    +

    This method allows the real account to reject an announcement made by a proxy delegate, preventing the announced +call from being executed. Once rejected, the announcement cannot be executed and the announcement deposit is +returned to the delegate.

    Parameters:
      -
    • runtime_api (str) – The name of the runtime API to query.

    • -
    • method (str) – The specific method within the runtime API to call.

    • -
    • params (Optional[Union[list[Any], dict[str, Any]]]) – The parameters to pass to the method call.

    • -
    • block (Optional[int]) – the block number for this query.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet object (should be the real account wallet).

    • +
    • delegate_ss58 (str) – The SS58 address of the delegate proxy account whose announcement is being rejected.

    • +
    • call_hash (str) – The hash of the call that was announced and is now being rejected.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You +can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    The Scale Bytes encoded result from the runtime API call, or None if the call fails.

    +

    The result object of the extrinsic execution.

    Return type:
    -

    Any

    -
    -
    -
    -
    This function enables access to the deeper layers of the Bittensor blockchain, allowing for detailed and

    specific interactions with the network’s runtime environment.

    +

    ExtrinsicResponse

    +
    +

    Note

    +

    Once rejected, the announcement cannot be executed. The delegate’s announcement deposit is returned.

    +
    -
    -query_subtensor(name, block=None, params=None)[source]#
    -
    -
    Queries named storage from the Subtensor module on the Bittensor blockchain. This function is used to retrieve

    specific data or parameters from the blockchain, such as stake, rank, or other neuron-specific attributes.

    -
    -
    +
    +remove_liquidity(wallet, netuid, position_id, hotkey_ss58=None, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#
    +

    Remove liquidity and credit balances back to wallet’s hotkey stake.

    Parameters:
      -
    • name (str) – The name of the storage function to query.

    • -
    • block (Optional[int]) – The blockchain block number at which to perform the query.

    • -
    • params (Optional[list]) – A list of parameters to pass to the query function.

    • +
    • wallet (bittensor_wallet.Wallet) – The wallet used to sign the extrinsic (must be unlocked).

    • +
    • netuid (int) – The UID of the target subnet for which the call is being initiated.

    • +
    • position_id (int) – The id of the position record in the pool.

    • +
    • hotkey_ss58 (Optional[str]) – The hotkey with staked TAO in Alpha. If not passed then the wallet hotkey is used.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If +the transaction is not included in a block within that number of blocks, it will expire and be rejected. +You can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the extrinsic to be included in a block.

    • +
    • wait_for_finalization (bool) – Whether to wait for finalization of the extrinsic.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    An object containing the requested data.

    +

    The result object of the extrinsic execution.

    Return type:
    -

    query_response

    +

    ExtrinsicResponse

    +
    +

    Note

    +
      +
    • Adding is allowed even when user liquidity is enabled in specified subnet. Call toggle_user_liquidity

    • +
    +
    -
    This query function is essential for accessing detailed information about the network and its neurons, providing

    valuable insights into the state and dynamics of the Bittensor ecosystem.

    +
    extrinsic to enable/disable user liquidity.
      +
    • To get the position_id use get_liquidity_list method.

    • +
    -
    -recycle(netuid, block=None)[source]#
    -
    -
    Retrieves the ‘Burn’ hyperparameter for a specified subnet. The ‘Burn’ parameter represents the amount of Tao

    that is effectively recycled within the Bittensor network.

    -
    -
    +
    +remove_proxies(wallet, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Removes all proxy relationships for the account in a single transaction.

    +

    This method removes all proxy relationships for the signing account in a single call, which is more efficient +than removing them one by one using remove_proxy(). The deposit for all proxies will be returned to the +account.

    Parameters:
      -
    • netuid (int) – The unique identifier of the subnet.

    • -
    • block (Optional[int]) – The blockchain block number for the query.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet object. The account whose proxies will be removed (the delegator). All proxy +relationships where wallet.coldkey.ss58_address is the real account will be removed.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You +can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    The value of the ‘Burn’ hyperparameter if the subnet exists, None otherwise.

    +

    The result object of the extrinsic execution.

    Return type:
    -

    Optional[Balance]

    -
    -
    -
    -
    Understanding the ‘Burn’ rate is essential for analyzing the network registration usage, particularly how it is

    correlated with user activity and the overall cost of participation in a given subnet.

    +

    ExtrinsicResponse

    +
    +

    Note

    +

    This removes all proxy relationships for the account, regardless of proxy type or delegate. Use +remove_proxy() if you need to remove specific proxy relationships selectively.

    +
    -
    -register(wallet, netuid, wait_for_inclusion=False, wait_for_finalization=True, max_allowed_attempts=3, output_in_place=True, cuda=False, dev_id=0, tpb=256, num_processes=None, update_interval=None, log_verbose=False, period=None)[source]#
    -

    Registers a neuron on the Bittensor network using the provided wallet.

    -
    -
    Registration is a critical step for a neuron to become an active participant in the network, enabling it to

    stake, set weights, and receive incentives.

    -
    -
    +
    +remove_proxy(wallet, delegate_ss58, proxy_type, delay, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Removes a specific proxy relationship.

    +

    This method removes a single proxy relationship between the real account and a delegate. The parameters must +exactly match those used when the proxy was added via add_proxy(). The deposit for this proxy will be returned +to the account.

    Parameters:
      -
    • wallet (bittensor_wallet.Wallet) – The wallet associated with the neuron to be registered.

    • -
    • netuid (int) – The unique identifier of the subnet.

    • -
    • wait_for_inclusion (bool) – Waits for the transaction to be included in a block. Defaults to False.

    • -
    • wait_for_finalization (bool) – Waits for the transaction to be finalized on the blockchain. Defaults to -True.

    • -
    • max_allowed_attempts (int) – Maximum number of attempts to register the wallet.

    • -
    • output_in_place (bool) – If true, prints the progress of the proof of work to the console in-place. Meaning -the progress is printed on the same lines. Defaults to True.

    • -
    • cuda (bool) – If true, the wallet should be registered using CUDA device(s). Defaults to False.

    • -
    • dev_id (Union[List[int], int]) – The CUDA device id to use, or a list of device ids. Defaults to 0 (zero).

    • -
    • tpb (int) – The number of threads per block (CUDA). Default to 256.

    • -
    • num_processes (Optional[int]) – The number of processes to use to register. Default to None.

    • -
    • update_interval (Optional[int]) – The number of nonces to solve between updates. Default to None.

    • -
    • log_verbose (bool) – If true, the registration process will log more information. Default to False.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If -the transaction is not included in a block within that number of blocks, it will expire and be rejected. -You can think of it as an expiration date for the transaction.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet object.

    • +
    • delegate_ss58 (str) – The SS58 address of the delegate proxy account to remove.

    • +
    • proxy_type (Union[str, bittensor.core.chain_data.ProxyType]) – The type of proxy permissions to remove. Can be a string or ProxyType enum value.

    • +
    • delay (int) – The number of blocks before the proxy removal takes effect.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You +can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    True if the registration is successful, False otherwise.

    +

    The result object of the extrinsic execution.

    Return type:
    -

    bool

    +

    ExtrinsicResponse

    -

    This function facilitates the entry of new neurons into the network, supporting the decentralized -growth and scalability of the Bittensor ecosystem.

    +
    +

    Note

    +

    The delegate_ss58, proxy_type, and delay parameters must exactly match those used when the proxy was added. +Use get_proxies_for_real_account() to retrieve the exact parameters for existing proxies.

    +
    -
    -register_subnet(wallet, wait_for_inclusion=False, wait_for_finalization=True, period=None)[source]#
    -

    Registers a new subnetwork on the Bittensor network.

    +
    +remove_proxy_announcement(wallet, real_account_ss58, call_hash, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Removes an announcement made by a proxy account.

    +

    This method allows the proxy account to remove its own announcement before it is executed or rejected. This +frees up the announcement deposit and prevents the call from being executed. Only the proxy account that made +the announcement can remove it.

    Parameters:
      -
    • wallet (bittensor_wallet.Wallet) – The wallet to be used for subnet registration.

    • -
    • wait_for_inclusion (bool) – If set, waits for the extrinsic to enter a block before returning true, or returns -false if the extrinsic fails to enter the block within the timeout. Default is False.

    • -
    • wait_for_finalization (bool) – If set, waits for the extrinsic to be finalized on the chain before returning -true, or returns false if the extrinsic fails to be finalized within the timeout. Default is True.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If -the transaction is not included in a block within that number of blocks, it will expire and be rejected. -You can think of it as an expiration date for the transaction.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet object (should be the proxy account wallet that made the announcement).

    • +
    • real_account_ss58 (str) – The SS58 address of the real account on whose behalf the call was announced.

    • +
    • call_hash (str) – The hash of the call that was announced and is now being removed.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You +can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    True if the subnet registration was successful, False otherwise.

    +

    The result object of the extrinsic execution.

    Return type:
    -

    bool

    +

    ExtrinsicResponse

    +
    +

    Note

    +

    Only the proxy account that made the announcement can remove it. The real account can reject it via +reject_proxy_announcement(), but cannot remove it directly.

    +
    -reveal_weights(wallet, netuid, uids, weights, salt, version_key=version_as_int, wait_for_inclusion=False, wait_for_finalization=False, max_retries=5, period=16)[source]#
    +reveal_weights(wallet, netuid, uids, weights, salt, mechid=0, max_attempts=5, version_key=version_as_int, *, mev_protection=DEFAULT_MEV_PROTECTION, period=16, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#

    Reveals the weights for a specific subnet on the Bittensor blockchain using the provided wallet. This action serves as a revelation of the neuron’s previously committed weight distribution.

    Parameters:
      -
    • wallet (bittensor_wallet.Wallet) – The wallet associated with the neuron revealing the weights.

    • -
    • netuid (int) – The unique identifier of the subnet.

    • -
    • uids (np.ndarray) – NumPy array of neuron UIDs for which weights are being revealed.

    • -
    • weights (np.ndarray) – NumPy array of weight values corresponding to each UID.

    • -
    • salt (np.ndarray) – NumPy array of salt values corresponding to the hash function.

    • -
    • version_key (int) – Version key for compatibility with the network. Default is int representation of -the Bittensor version.

    • -
    • wait_for_inclusion (bool) – Waits for the transaction to be included in a block. Default is False.

    • -
    • wait_for_finalization (bool) – Waits for the transaction to be finalized on the blockchain. Default is -False.

    • -
    • max_retries (int) – The number of maximum attempts to reveal weights. Default is 5.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If -the transaction is not included in a block within that number of blocks, it will expire and be rejected. -You can think of it as an expiration date for the transaction.

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor Wallet instance.

    • +
    • netuid (int) – The unique identifier of the subnet.

    • +
    • uids (bittensor.core.types.UIDs) – NumPy array of neuron UIDs for which weights are being revealed.

    • +
    • weights (bittensor.core.types.Weights) – NumPy array of weight values corresponding to each UID.

    • +
    • salt (bittensor.core.types.Salt) – NumPy array of salt values corresponding to the hash function.

    • +
    • mechid (int) – The subnet mechanism unique identifier.

    • +
    • max_attempts (int) – The number of maximum attempts to reveal weights.

    • +
    • version_key (int) – Version key for compatibility with the network.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You +can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Waits for the transaction to be included in a block.

    • +
    • wait_for_finalization (bool) – Waits for the transaction to be finalized on the blockchain.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    -
    True if the weight revelation is successful, False otherwise. And msg, a string

    value describing the success or potential error.

    -
    -
    -

    +

    The result object of the extrinsic execution.

    Return type:
    -

    tuple[bool, str]

    -
    -
    -
    -
    This function allows neurons to reveal their previously committed weight distribution, ensuring transparency

    and accountability within the Bittensor network.

    +

    ExtrinsicResponse

    +

    This function allows neurons to reveal their previously committed weight distribution, ensuring transparency and +accountability within the Bittensor network.

    +
    -root_register(wallet, wait_for_inclusion=False, wait_for_finalization=True, period=None)[source]#
    +root_register(wallet, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#

    Register neuron by recycling some TAO.

    Parameters:
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet instance.

    • -
    • wait_for_inclusion (bool) – Waits for the transaction to be included in a block. Default is False.

    • -
    • wait_for_finalization (bool) – Waits for the transaction to be finalized on the blockchain. Default is -False.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If -the transaction is not included in a block within that number of blocks, it will expire and be rejected. -You can think of it as an expiration date for the transaction.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You +can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Waits for the transaction to be included in a block.

    • +
    • wait_for_finalization (bool) – Waits for the transaction to be finalized on the blockchain.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    True if registration was successful, otherwise False.

    +

    The result object of the extrinsic execution.

    Return type:
    -

    bool

    +

    ExtrinsicResponse

    +
    -
    -root_set_weights(wallet, netuids, weights, version_key=0, wait_for_inclusion=False, wait_for_finalization=False, period=None)[source]#
    -

    Set weights for the root network.

    +
    +root_set_pending_childkey_cooldown(wallet, cooldown, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#
    +

    Sets the pending childkey cooldown.

    Parameters:
    • wallet (bittensor_wallet.Wallet) – bittensor wallet instance.

    • -
    • netuids (list[int]) – The list of subnet uids.

    • -
    • weights (list[float]) – The list of weights to be set.

    • -
    • version_key (int, optional) – Version key for compatibility with the network. Default is 0.

    • -
    • wait_for_inclusion (bool, optional) – Waits for the transaction to be included in a block. Defaults to -False.

    • -
    • wait_for_finalization (bool, optional) – Waits for the transaction to be finalized on the blockchain. -Defaults to False.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If -the transaction is not included in a block within that number of blocks, it will expire and be rejected. -You can think of it as an expiration date for the transaction.

    • +
    • cooldown (int) – the number of blocks to setting pending childkey cooldown.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s +submitted. If the transaction is not included in a block within that number of blocks, it will expire +and be rejected. You can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Waits for the transaction to be included in a block.

    • +
    • wait_for_finalization (bool) – Waits for the transaction to be finalized on the blockchain.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    True if the setting of weights is successful, False otherwise.

    +

    The result object of the extrinsic execution.

    Return type:
    -

    bool

    +

    ExtrinsicResponse

    +

    Note: This operation can only be successfully performed if your wallet has root privileges.

    -serve_axon(netuid, axon, wait_for_inclusion=False, wait_for_finalization=True, certificate=None, period=None)[source]#
    -
    -
    Registers an Axon serving endpoint on the Bittensor network for a specific neuron. This function is used to

    set up the Axon, a key component of a neuron that handles incoming queries and data processing tasks.

    -
    -
    +serve_axon(netuid, axon, certificate=None, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]# +

    Registers an Axon serving endpoint on the Bittensor network for a specific neuron.

    +

    This function is used to set up the Axon, a key component of a neuron that handles incoming queries and data +processing tasks.

    Parameters:
      -
    • netuid (int) – The unique identifier of the subnetwork.

    • +
    • netuid (int) – The unique identifier of the subnetwork.

    • axon (bittensor.core.axon.Axon) – The Axon instance to be registered for serving.

    • -
    • wait_for_inclusion (bool) – Waits for the transaction to be included in a block. Default is False.

    • -
    • wait_for_finalization (bool) – Waits for the transaction to be finalized on the blockchain. Default is -True.

    • -
    • certificate (bittensor.utils.Certificate) – Certificate to use for TLS. If None, no TLS will be used. -Defaults to None.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If -the transaction is not included in a block within that number of blocks, it will expire and be rejected. -You can think of it as an expiration date for the transaction.

    • +
    • certificate (Optional[bittensor.utils.Certificate]) – Certificate to use for TLS. If None, no TLS will be used.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s +submitted. If the transaction is not included in a block within that number of blocks, it will expire +and be rejected. You can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Waits for the transaction to be included in a block.

    • +
    • wait_for_finalization (bool) – Waits for the transaction to be finalized on the blockchain.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    True if the Axon serve registration is successful, False otherwise.

    +

    The result object of the extrinsic execution.

    Return type:
    -

    bool

    +

    ExtrinsicResponse

    -
    -
    By registering an Axon, the neuron becomes an active part of the network’s distributed computing infrastructure,

    contributing to the collective intelligence of Bittensor.

    +

    By registering an Axon, the neuron becomes an active part of the network’s distributed computing infrastructure, +contributing to the collective intelligence of Bittensor.

    + +
    + +
    +
    +set_auto_stake(wallet, netuid, hotkey_ss58, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Sets the coldkey to automatically stake to the hotkey within specific subnet mechanism.

    +
    +
    Parameters:
    +
      +
    • wallet (bittensor_wallet.Wallet) – Bittensor Wallet instance.

    • +
    • netuid (int) – The subnet unique identifier.

    • +
    • hotkey_ss58 (str) – The SS58 address of the validator’s hotkey to which the miner automatically stakes all rewards +received from the specified subnet immediately upon receipt.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You +can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +

    Note

    +

    Use the get_auto_stakes method to get the hotkey address of the validator where auto stake is set.

    +
    -set_children(wallet, hotkey, netuid, children, wait_for_inclusion=True, wait_for_finalization=True, raise_error=False, period=None)#
    +set_children(wallet, netuid, hotkey_ss58, children, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#

    Allows a coldkey to set children-keys.

    Parameters:
    • wallet (bittensor_wallet.Wallet) – bittensor wallet instance.

    • -
    • hotkey (str) – The SS58 address of the neuron’s hotkey.

    • -
    • netuid (int) – The netuid value.

    • -
    • children (list[tuple[float, str]]) – A list of children with their proportions.

    • -
    • wait_for_inclusion (bool) – Waits for the transaction to be included in a block.

    • -
    • wait_for_finalization (bool) – Waits for the transaction to be finalized on the blockchain.

    • -
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If -the transaction is not included in a block within that number of blocks, it will expire and be rejected. -You can think of it as an expiration date for the transaction.

    • +
    • hotkey_ss58 (str) – The SS58 address of the neuron’s hotkey.

    • +
    • netuid (int) – The netuid value.

    • +
    • children (list[tuple[float, str]]) – A list of children with their proportions.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s +submitted. If the transaction is not included in a block within that number of blocks, it will expire +and be rejected. You can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Waits for the transaction to be included in a block.

    • +
    • wait_for_finalization (bool) – Waits for the transaction to be finalized on the blockchain.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    -
    A tuple where the first element is a boolean indicating success or failure of the

    operation, and the second element is a message providing additional information.

    -
    -
    -

    +

    The result object of the extrinsic execution.

    Return type:
    -

    tuple[bool, str]

    -
    -
    Raises:
    -
    +

    ExtrinsicResponse

    +
    -
    +
    -set_commitment#
    -
    +set_commitment(wallet, netuid, data, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)# +

    Commits arbitrary data to the Bittensor network by publishing metadata.

    +

    This method allows neurons to publish arbitrary data to the blockchain, which can be used for various purposes +such as sharing model updates, configuration data, or other network-relevant information.

    +
    +
    Parameters:
    +
      +
    • wallet (bittensor_wallet.Wallet) – The wallet associated with the neuron committing the data.

    • +
    • netuid (int) – The unique identifier of the subnetwork.

    • +
    • data (str) – The data to be committed to the network.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You +can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +
    +
    +

    Example:

    +
    # Commit some data to subnet 1
    +
    +response = await subtensor.commit(wallet=my_wallet, netuid=1, data="Hello Bittensor!")
    +
    +# Commit with custom period
    +
    +response = await subtensor.commit(wallet=my_wallet, netuid=1, data="Model update v2.0", period=100)
    +
    +
    +

    Note: See <https://docs.learnbittensor.org/glossary#commit-reveal>

    +
    -set_delegate_take(wallet, hotkey_ss58, take, wait_for_inclusion=True, wait_for_finalization=True, raise_error=False, period=None)#
    +set_delegate_take(wallet, hotkey_ss58, take, wait_for_inclusion=True, wait_for_finalization=True, raise_error=False, period=DEFAULT_PERIOD, wait_for_revealed_execution=True)[source]#

    Sets the delegate ‘take’ percentage for a neuron identified by its hotkey. The ‘take’ represents the percentage of rewards that the delegate claims from its nominators’ stakes.

    Parameters:
    • wallet (bittensor_wallet.Wallet) – bittensor wallet instance.

    • -
    • hotkey_ss58 (str) – The SS58 address of the neuron’s hotkey.

    • -
    • take (float) – Percentage reward for the delegate.

    • -
    • wait_for_inclusion (bool) – Waits for the transaction to be included in a block.

    • -
    • wait_for_finalization (bool) – Waits for the transaction to be finalized on the blockchain.

    • -
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If -the transaction is not included in a block within that number of blocks, it will expire and be rejected. -You can think of it as an expiration date for the transaction.

    • +
    • hotkey_ss58 (str) – The SS58 address of the neuron’s hotkey.

    • +
    • take (float) – Percentage reward for the delegate.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s +submitted. If the transaction is not included in a block within that number of blocks, it will expire +and be rejected. You can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Waits for the transaction to be included in a block.

    • +
    • wait_for_finalization (bool) – Waits for the transaction to be finalized on the blockchain.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    -
    A tuple where the first element is a boolean indicating success or failure of the

    operation, and the second element is a message providing additional information.

    -
    -
    -

    +

    The result object of the extrinsic execution.

    Return type:
    -

    tuple[bool, str]

    +

    ExtrinsicResponse

    Raises:
      @@ -2943,7 +5540,8 @@

      Module ContentsDelegateTakeTooLow – Delegate take is too low.

    • DelegateTxRateLimitExceeded – A transactor exceeded the rate limit for delegate transaction.

    • HotKeyAccountNotExists – The hotkey does not exist.

    • -
    • NonAssociatedColdKey – Request to stake, unstake, or subscribe is made by a coldkey that is not associated with the hotkey account.

    • +
    • NonAssociatedColdKey – Request to stake, unstake, or subscribe is made by a coldkey that is not associated +with the hotkey account.

    • bittensor_wallet.errors.PasswordError – Decryption failed or wrong password for decryption provided.

    • bittensor_wallet.errors.KeyFileError – Failed to decode keyfile data.

    @@ -2953,192 +5551,325 @@

    Module Contents +

    Notes

    +
    +

    -set_reveal_commitment(wallet, netuid, data, blocks_until_reveal=360, block_time=12, period=None)#
    +set_reveal_commitment(wallet, netuid, data, blocks_until_reveal=360, block_time=12, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#

    Commits arbitrary data to the Bittensor network by publishing metadata.

    Parameters:
      -
    • wallet (bittensor_wallet.Wallet) – The wallet associated with the neuron committing the data.

    • -
    • netuid (int) – The unique identifier of the subnetwork.

    • -
    • data (str) – The data to be committed to the network.

    • -
    • blocks_until_reveal (int) – The number of blocks from now after which the data will be revealed. Defaults to -360. Then number of blocks in one epoch.

    • -
    • block_time (Union[int, float]) – The number of seconds between each block. Defaults to 12.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s -submitted. If the transaction is not included in a block within that number of blocks, it will expire -and be rejected. You can think of it as an expiration date for the transaction.

    • +
    • wallet – The wallet associated with the neuron committing the data.

    • +
    • netuid (int) – The unique identifier of the subnetwork.

    • +
    • data (str) – The data to be committed to the network.

    • +
    • blocks_until_reveal (int) – The number of blocks from now after which the data will be revealed. Then number of +blocks in one epoch.

    • +
    • block_time (Union[int, float]) – The number of seconds between each block.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You +can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    True if the commitment was successful, False otherwise.

    +

    The result object of the extrinsic execution.

    Return type:
    -

    bool

    +

    ExtrinsicResponse

    -

    Note: A commitment can be set once per subnet epoch and is reset at the next epoch in the chain automatically.

    +
    +

    Note

    +

    A commitment can be set once per subnet epoch and is reset at the next epoch in the chain automatically. +Successful extrinsic’s the “data” field contains {“encrypted”: encrypted, “reveal_round”: reveal_round}.

    +
    +
    + +
    +
    +set_root_claim_type(wallet, new_root_claim_type, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Submit an extrinsic to set the root claim type for the wallet’s coldkey.

    +

    The root claim type determines how future Alpha dividends from subnets are handled when they are claimed for +the wallet’s coldkey:

    +
      +
    • Swap: Alpha dividends are swapped to TAO at claim time and restaked on the Root Subnet (default).

    • +
    • Keep: Alpha dividends remain as Alpha on the originating subnets.

    • +
    +
    +
    Parameters:
    +
      +
    • wallet (bittensor_wallet.Wallet) – Bittensor Wallet instance.

    • +
    • new_root_claim_type (Literal['Swap', 'Keep'] | RootClaimType | dict) – The new root claim type to set. Can be: +- String: “Swap” or “Keep” +- RootClaimType: RootClaimType.Swap, RootClaimType.Keep +- Dict: {“KeepSubnets”: {“subnets”: [1, 2, 3]}} +- Callable: RootClaimType.KeepSubnets([1, 2, 3])

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – Number of blocks for which the transaction remains valid after submission. If the extrinsic is +not included in a block within this window, it will expire and be rejected.

    • +
    • raise_error (bool) – Whether to raise a Python exception instead of returning a failed ExtrinsicResponse.

    • +
    • wait_for_inclusion (bool) – Whether to wait until the extrinsic is included in a block before returning.

    • +
    • wait_for_finalization (bool) – Whether to wait for finalization of the extrinsic in a block before returning.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    ExtrinsicResponse describing the result of the extrinsic execution.

    +
    +
    +
    +

    Notes

    + +
    -set_subnet_identity(wallet, netuid, subnet_identity, wait_for_inclusion=False, wait_for_finalization=True, period=None)[source]#
    +set_subnet_identity(wallet, netuid, subnet_identity, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#

    Sets the identity of a subnet for a specific wallet and network.

    Parameters:
      -
    • wallet (Wallet) – The wallet instance that will authorize the transaction.

    • -
    • netuid (int) – The unique ID of the network on which the operation takes place.

    • -
    • subnet_identity (SubnetIdentity) – The identity data of the subnet including attributes like name, GitHub -repository, contact, URL, discord, description, and any additional metadata.

    • -
    • wait_for_inclusion (bool) – Indicates if the function should wait for the transaction to be included in the block.

    • -
    • wait_for_finalization (bool) – Indicates if the function should wait for the transaction to reach finalization.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If -the transaction is not included in a block within that number of blocks, it will expire and be rejected. -You can think of it as an expiration date for the transaction.

    • +
    • wallet (bittensor_wallet.Wallet) – The wallet instance that will authorize the transaction.

    • +
    • netuid (int) – The unique ID of the network on which the operation takes place.

    • +
    • subnet_identity (bittensor.core.chain_data.SubnetIdentity) – The identity data of the subnet including attributes like name, GitHub repository, contact, +URL, discord, description, and any additional metadata.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s +submitted. If the transaction is not included in a block within that number of blocks, it will expire +and be rejected. You can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Waits for the transaction to be included in a block.

    • +
    • wait_for_finalization (bool) – Waits for the transaction to be finalized on the blockchain.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    -
    A tuple where the first element is a boolean indicating success or failure of the

    operation, and the second element is a message providing additional information.

    -
    -
    -

    +

    The result object of the extrinsic execution.

    Return type:
    -

    tuple[bool, str]

    +

    ExtrinsicResponse

    -set_weights(wallet, netuid, uids, weights, version_key=version_as_int, wait_for_inclusion=False, wait_for_finalization=False, max_retries=5, block_time=12.0, period=8)[source]#
    -
    -
    Sets the inter-neuronal weights for the specified neuron. This process involves specifying the influence or

    trust a neuron places on other neurons in the network, which is a fundamental aspect of Bittensor’s -decentralized learning architecture.

    -
    -
    +set_weights(wallet, netuid, uids, weights, mechid=0, block_time=12.0, commit_reveal_version=4, max_attempts=5, version_key=version_as_int, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]# +

    Sets the interneuronal weights for the specified neuron. This process involves specifying the influence or trust +a neuron places on other neurons in the network, which is a fundamental aspect of Bittensor’s decentralized +learning architecture.

    Parameters:
      -
    • wallet (bittensor_wallet.Wallet) – The wallet associated with the neuron setting the weights.

    • -
    • netuid (int) – The unique identifier of the subnet.

    • -
    • uids (Union[numpy.typing.NDArray[numpy.int64], bittensor.utils.torch.LongTensor, list]) – The list of neuron UIDs that the weights are being set for.

    • -
    • weights (Union[numpy.typing.NDArray[numpy.float32], bittensor.utils.torch.FloatTensor, list]) – The corresponding weights to be set for each UID.

    • -
    • version_key (int) – Version key for compatibility with the network. Default is int representation of a Bittensor version.

    • -
    • wait_for_inclusion (bool) – Waits for the transaction to be included in a block. Default is False.

    • -
    • wait_for_finalization (bool) – Waits for the transaction to be finalized on the blockchain. Default is False.

    • -
    • max_retries (int) – The number of maximum attempts to set weights. Default is 5.

    • -
    • block_time (float) – The number of seconds for block duration. Default is 12.0 seconds.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If -the transaction is not included in a block within that number of blocks, it will expire and be rejected. -You can think of it as an expiration date for the transaction. Default is 16.

    • +
    • wallet (bittensor_wallet.Wallet) – The wallet associated with the subnet validator setting the weights.

    • +
    • netuid (int) – The unique identifier of the subnet.

    • +
    • uids (bittensor.core.types.UIDs) – The list of subnet miner neuron UIDs that the weights are being set for.

    • +
    • weights (bittensor.core.types.Weights) – The corresponding weights to be set for each UID, representing the validator’s evaluation of each +miner’s performance.

    • +
    • mechid (int) – The subnet mechanism unique identifier.

    • +
    • block_time (float) – The number of seconds for block duration.

    • +
    • commit_reveal_version (int) – The version of the chain commit-reveal protocol to use.

    • +
    • max_attempts (int) – The number of maximum attempts to set weights.

    • +
    • version_key (int) – Version key for compatibility with the network.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s +submitted. If the transaction is not included in a block within that number of blocks, it will expire +and be rejected. You can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Waits for the transaction to be included in a block.

    • +
    • wait_for_finalization (bool) – Waits for the transaction to be finalized on the blockchain.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    True if the setting of weights is successful, False otherwise. -msg is a string value describing the success or potential error.

    +

    The result object of the extrinsic execution.

    Return type:
    -

    tuple

    -
    -
    -
    -
    This function is crucial in shaping the network’s collective intelligence, where each neuron’s learning and

    contribution are influenced by the weights it sets towards others.

    +

    ExtrinsicResponse

    +

    This function is crucial in shaping the network’s collective intelligence, where each neuron’s learning and +contribution are influenced by the weights it sets towards others.

    +
    -sign_and_send_extrinsic(call, wallet, wait_for_inclusion=True, wait_for_finalization=False, sign_with='coldkey', use_nonce=False, period=None, nonce_key='hotkey', raise_error=False)[source]#
    +sign_and_send_extrinsic(call, wallet, sign_with='coldkey', use_nonce=False, nonce_key='hotkey', nonce=None, *, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=False, calling_function=None)[source]#

    Helper method to sign and submit an extrinsic call to chain.

    Parameters:
      -
    • call (scalecodec.types.GenericCall) – a prepared Call object

    • -
    • wallet (bittensor_wallet.Wallet) – the wallet whose coldkey will be used to sign the extrinsic

    • -
    • wait_for_inclusion (bool) – whether to wait until the extrinsic call is included on the chain

    • -
    • wait_for_finalization (bool) – whether to wait until the extrinsic call is finalized on the chain

    • -
    • sign_with (str) – the wallet’s keypair to use for the signing. Options are “coldkey”, “hotkey”, “coldkeypub”

    • -
    • use_nonce (bool) – unique identifier for the transaction related with hot/coldkey.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If -the transaction is not included in a block within that number of blocks, it will expire and be rejected. -You can think of it as an expiration date for the transaction.

    • -
    • nonce_key (str) – the type on nonce to use. Options are “hotkey” or “coldkey”.

    • -
    • raise_error (bool) – raises the relevant exception rather than returning False if unsuccessful.

    • +
    • call (scalecodec.types.GenericCall) – A prepared Call object

    • +
    • wallet (bittensor_wallet.Wallet) – The wallet whose coldkey will be used to sign the extrinsic

    • +
    • sign_with (str) – The wallet’s keypair to use for the signing. Options are “coldkey”, “hotkey”, “coldkeypub”

    • +
    • use_nonce (bool) – Unique identifier for the transaction related with hot/coldkey.

    • +
    • nonce_key (str) – The type on nonce to use. Options are “hotkey” or “coldkey”.

    • +
    • nonce (Optional[int]) – The nonce to use for the transaction. If not provided, it will be fetched from the chain.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You +can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises the relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait until the extrinsic call is included on the chain

    • +
    • wait_for_finalization (bool) – Whether to wait until the extrinsic call is finalized on the chain

    • +
    • calling_function (Optional[str]) – The name of the calling function.

    Returns:
    -

    (success, error message)

    +

    The result object of the extrinsic execution.

    -
    Raises:
    -

    SubstrateRequestException – Substrate request exception.

    +
    Return type:
    +

    ExtrinsicResponse

    -
    Return type:
    -

    tuple[bool, str]

    +
    Raises:
    +

    SubstrateRequestException – Substrate request exception.

    -
    -start_call(wallet, netuid, wait_for_inclusion=True, wait_for_finalization=False, period=None)#
    -

    Submits a start_call extrinsic to the blockchain, to trigger the start call process for a subnet (used to start a -new subnet’s emission mechanism).

    +
    +sim_swap(origin_netuid, destination_netuid, amount, block=None)#
    +

    Simulates a swap/stake operation and calculates the fees and resulting amounts.

    +

    This method queries the SimSwap Runtime API to calculate the swap fees (in Alpha or TAO) and the quantities +of Alpha or TAO tokens expected as output from the transaction. This simulation does NOT include the +blockchain extrinsic transaction fee (the fee to submit the transaction itself).

    +

    When moving stake between subnets, the operation may involve swapping Alpha (subnet-specific stake token) to +TAO (the base network token), then TAO to Alpha on the destination subnet. For subnet 0 (root network), all +stake is in TAO.

    Parameters:
      -
    • wallet (Wallet) – The wallet used to sign the extrinsic (must be unlocked).

    • -
    • netuid (int) – The UID of the target subnet for which the call is being initiated.

    • -
    • wait_for_inclusion (bool, optional) – Whether to wait for the extrinsic to be included in a block. Defaults to True.

    • -
    • wait_for_finalization (bool, optional) – Whether to wait for finalization of the extrinsic. Defaults to False.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If -the transaction is not included in a block within that number of blocks, it will expire and be rejected. -You can think of it as an expiration date for the transaction.

    • +
    • origin_netuid (int) – Netuid of the source subnet (0 if adding stake).

    • +
    • destination_netuid (int) – Netuid of the destination subnet.

    • +
    • amount (bittensor.utils.balance.Balance) – Amount to swap/stake as a Balance object. Use Balance.from_tao(…) or +Balance.from_rao(…) to create the amount.

    • +
    • block (Optional[int]) – The block number to query. If None, uses the current chain head.

    Returns:
    -

      -
    • True and a success message if the extrinsic is successfully submitted or processed.

    • -
    • False and an error message if the submission fails or the wallet cannot be unlocked.

    • -
    -

    +

    Object containing alpha_fee, tao_fee, alpha_amount, and tao_amount fields +representing the swap fees and output amounts.

    Return type:
    -

    Tuple[bool, str]

    +

    SimSwapResult

    +

    Example:

    +
    # Simulate staking 100 TAO stake to subnet 1
    +
    +result = subtensor.sim_swap(
    +
    +    origin_netuid=0,
    +
    +    destination_netuid=1,
    +
    +    amount=Balance.from_tao(100)
    +
    +)
    +
    +print(f"Fee: {result.tao_fee.tao} TAO, Output: {result.alpha_amount} Alpha")
    +
    +
    +
    +

    Notes

    + +
    -
    -state_call(method, data, block=None)[source]#
    +
    +start_call(wallet, netuid, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=False, wait_for_revealed_execution=True)[source]#
    -
    Makes a state call to the Bittensor blockchain, allowing for direct queries of the blockchain’s state. This

    function is typically used for advanced queries that require specific method calls and data inputs.

    +
    Submits a start_call extrinsic to the blockchain, to trigger the start call process for a subnet (used to start

    a new subnet’s emission mechanism).

    Parameters:
      -
    • method (str) – The method name for the state call.

    • -
    • data (str) – The data to be passed to the method.

    • -
    • block (Optional[int]) – The blockchain block number at which to perform the state call.

    • +
    • wallet (bittensor_wallet.Wallet) – The wallet used to sign the extrinsic (must be unlocked).

    • +
    • netuid (int) – The UID of the target subnet for which the call is being initiated.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You +can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    The result of the rpc call.

    +

    The result object of the extrinsic execution.

    Return type:
    -

    result (dict[Any, Any])

    +

    ExtrinsicResponse

    -
    -
    The state call function provides a more direct and flexible way of querying blockchain data, useful for specific

    use cases where standard queries are insufficient.

    +
    + +
    +
    +state_call(method, data, block=None)[source]#
    +

    Makes a state call to the Bittensor blockchain, allowing for direct queries of the blockchain’s state. +This function is typically used for advanced, nonstandard queries not provided by other getter methods.

    +

    Use this method when you need to query runtime APIs or storage functions that don’t have dedicated +wrapper methods in the SDK. For standard queries, prefer the specific getter methods (e.g., get_balance, +get_stake) which provide better type safety and error handling.

    +
    +
    Parameters:
    +
      +
    • method (str) – The runtime API method name (e.g., “SubnetInfoRuntimeApi”, “get_metagraph”).

    • +
    • data (str) – Hex-encoded string of the SCALE-encoded parameters to pass to the method.

    • +
    • block (Optional[int]) – The block number to query. If None, queries the current chain head.

    • +
    +
    +
    Returns:
    +

    The result of the rpc call.

    +
    +
    Return type:
    +

    dict[Any, Any]

    @@ -3150,15 +5881,15 @@

    Module Contents
    Parameters:
      -
    • netuid (int) – The unique identifier of the subnet.

    • -
    • block (Optional[int]) – The block number to query the subnet information from.

    • +
    • netuid (int) – The unique identifier of the subnet.

    • +
    • block (Optional[int]) – The block number to query the subnet information from.

    Returns:

    A DynamicInfo object, containing detailed information about a subnet.

    Return type:
    -

    Optional[DynamicInfo]

    +

    Optional[bittensor.core.chain_data.DynamicInfo]

    @@ -3170,41 +5901,37 @@

    Module Contents
    Parameters:
      -
    • netuid (int) – The unique identifier of the subnet.

    • -
    • block (Optional[int]) – The blockchain block number for the query.

    • +
    • netuid (int) – The unique identifier of the subnet.

    • +
    • block (Optional[int]) – The blockchain block number for the query.

    Returns:

    True if the subnet exists, False otherwise.

    Return type:
    -

    bool

    +

    bool

    -

    This function is critical for verifying the presence of specific subnets in the network, -enabling a deeper understanding of the network’s structure and composition.

    +

    This function is critical for verifying the presence of specific subnets in the network, enabling a deeper +understanding of the network’s structure and composition.

    subnetwork_n(netuid, block=None)[source]#
    -

    Returns network SubnetworkN hyperparameter.

    +

    Returns the current number of registered neurons (UIDs) in a subnet.

    Parameters:
      -
    • netuid (int) – The unique identifier of the subnetwork.

    • -
    • block (Optional[int]) – The blockchain block number for the query.

    • +
    • netuid (int) – The unique identifier of the subnetwork.

    • +
    • block (Optional[int]) – The blockchain block number for the query.

    Returns:
    -

    -
    The value of the SubnetworkN hyperparameter, or None if the subnetwork does not exist or

    the parameter is not found.

    -
    -
    -

    +

    The current number of registered neurons in the subnet, or None if the subnetwork does not exist.

    Return type:
    -

    Optional[int]

    +

    Optional[int]

    @@ -3216,132 +5943,194 @@

    Module Contents
    -swap_stake(wallet, hotkey_ss58, origin_netuid, destination_netuid, amount, wait_for_inclusion=True, wait_for_finalization=False, safe_staking=False, allow_partial_stake=False, rate_tolerance=0.005, period=None)[source]#
    +swap_stake(wallet, hotkey_ss58, origin_netuid, destination_netuid, amount, safe_swapping=False, allow_partial_stake=False, rate_tolerance=0.005, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#

    Moves stake between subnets while keeping the same coldkey-hotkey pair ownership. Like subnet hopping - same owner, same hotkey, just changing which subnet the stake is in.

    Parameters:
      -
    • wallet (bittensor.wallet) – The wallet to swap stake from.

    • -
    • hotkey_ss58 (str) – The SS58 address of the hotkey whose stake is being swapped.

    • -
    • origin_netuid (int) – The netuid from which stake is removed.

    • -
    • destination_netuid (int) – The netuid to which stake is added.

    • -
    • amount (Union[Balance, float]) – The amount to swap.

    • -
    • wait_for_inclusion (bool) – Waits for the transaction to be included in a block.

    • -
    • wait_for_finalization (bool) – Waits for the transaction to be finalized on the blockchain.

    • -
    • safe_staking (bool) – If true, enables price safety checks to protect against fluctuating prices. The swap -will only execute if the price ratio between subnets doesn’t exceed the rate tolerance. -Default is False.

    • -
    • allow_partial_stake (bool) – If true and safe_staking is enabled, allows partial stake swaps when -the full amount would exceed the price tolerance. If false, the entire swap fails if it would -exceed the tolerance. Default is False.

    • -
    • rate_tolerance (float) – The maximum allowed increase in the price ratio between subnets -(origin_price/destination_price). For example, 0.005 = 0.5% maximum increase. Only used -when safe_staking is True. Default is 0.005.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If -the transaction is not included in a block within that number of blocks, it will expire and be rejected. -You can think of it as an expiration date for the transaction.

    • +
    • wallet (bittensor_wallet.Wallet) – The wallet to swap stake from.

    • +
    • hotkey_ss58 (str) – The SS58 address of the hotkey whose stake is being swapped.

    • +
    • origin_netuid (int) – The netuid from which stake is removed.

    • +
    • destination_netuid (int) – The netuid to which stake is added.

    • +
    • amount (bittensor.utils.balance.Balance) – The amount to swap.

    • +
    • safe_swapping (bool) – If True, enables price safety checks to protect against fluctuating prices. The swap +will only execute if the price ratio between subnets doesn’t exceed the rate tolerance.

    • +
    • allow_partial_stake (bool) – If True and safe_staking is enabled, allows partial stake swaps when the full amount +would exceed the price tolerance. If false, the entire swap fails if it would exceed the tolerance.

    • +
    • rate_tolerance (float) – The maximum allowed increase in the price ratio between subnets +(origin_price/destination_price). For example, 0.005 = 0.5% maximum increase. Only used when +safe_staking is True.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the +transaction is not included in a block within that number of blocks, it will expire and be rejected. You +can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the inclusion of the transaction.

    • +
    • wait_for_finalization (bool) – Whether to wait for the finalization of the transaction.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    True if the extrinsic was successful.

    +

    The result object of the extrinsic execution.

    Return type:
    -

    success (bool)

    +

    ExtrinsicResponse

    -

    The price ratio for swap_stake in safe mode is calculated as: origin_subnet_price / destination_subnet_price -When safe_staking is enabled, the swap will only execute if:

    +
    +

    Notes

    +

    The price ratio for swap_stake in safe mode is calculated as: origin_subnet_price / destination_subnet_price. +When safe_swapping is enabled, the swap will only execute if: +- With allow_partial_stake=False: The entire swap amount can be executed without the price ratio

    -
      -
    • With allow_partial_stake=False: The entire swap amount can be executed without the price ratio

    • -
    -

    increasing more than rate_tolerance -- With allow_partial_stake=True: A partial amount will be swapped up to the point where the -price ratio would increase by rate_tolerance

    +

    increasing more than rate_tolerance.

    + +
    tempo(netuid, block=None)[source]#
    -

    Returns network Tempo hyperparameter.

    +

    Returns the Tempo hyperparameter for a subnet.

    +

    Tempo determines the length of an epoch in blocks. It defines how frequently the subnet’s consensus mechanism +runs, calculating emissions and updating rankings. A tempo of 360 blocks equals approximately 72 minutes +(360 blocks × 12 seconds per block).

    Parameters:
      -
    • netuid (int) – The unique identifier of the subnetwork.

    • -
    • block (Optional[int]) – The blockchain block number for the query.

    • +
    • netuid (int) – The unique identifier of the subnetwork.

    • +
    • block (Optional[int]) – The blockchain block number for the query.

    Returns:
    -

    -
    The value of the Tempo hyperparameter, or None if the subnetwork does not exist or the

    parameter is not found.

    +

    The tempo value in blocks, or None if the subnetwork does not exist.

    +
    +
    Return type:
    +

    Optional[int]

    -

    + +
    + +
    +
    +toggle_user_liquidity(wallet, netuid, enable, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#
    +

    Allow to toggle user liquidity for specified subnet.

    +
    +
    Parameters:
    +
      +
    • wallet (bittensor_wallet.Wallet) – The wallet used to sign the extrinsic (must be unlocked).

    • +
    • netuid (int) – The UID of the target subnet for which the call is being initiated.

    • +
    • enable (bool) – Boolean indicating whether to enable user liquidity.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If +the transaction is not included in a block within that number of blocks, it will expire and be rejected. +You can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the extrinsic to be included in a block.

    • +
    • wait_for_finalization (bool) – Whether to wait for finalization of the extrinsic.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    Return type:
    -

    Optional[int]

    +

    ExtrinsicResponse

    +

    Note: The call can be executed successfully by the subnet owner only.

    -transfer(wallet, dest, amount, wait_for_inclusion=True, wait_for_finalization=False, transfer_all=False, keep_alive=True, period=None)[source]#
    +transfer(wallet, destination_ss58, amount, transfer_all=False, keep_alive=True, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=False, wait_for_revealed_execution=True)[source]#

    Transfer token of amount to destination.

    Parameters:
    • wallet (bittensor_wallet.Wallet) – Source wallet for the transfer.

    • -
    • dest (str) – Destination address for the transfer.

    • -
    • amount (float) – Amount of tao to transfer.

    • -
    • transfer_all (bool) – Flag to transfer all tokens. Default is False.

    • -
    • wait_for_inclusion (bool) – Waits for the transaction to be included in a block. Default is True.

    • -
    • wait_for_finalization (bool) – Waits for the transaction to be finalized on the blockchain. Default is -False.

    • -
    • keep_alive (bool) – Flag to keep the connection alive. Default is True.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If +

    • destination_ss58 (str) – Destination address for the transfer.

    • +
    • amount (Optional[bittensor.utils.balance.Balance]) – Number of tokens to transfer. None is transferring all.

    • +
    • transfer_all (bool) – Flag to transfer all tokens.

    • +
    • keep_alive (bool) – Flag to keep the connection alive.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the transaction is not included in a block within that number of blocks, it will expire and be rejected. You can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the extrinsic to be included in a block.

    • +
    • wait_for_finalization (bool) – Whether to wait for finalization of the extrinsic.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    True if the transferring was successful, otherwise False.

    +

    The result object of the extrinsic execution.

    Return type:
    -

    bool

    +

    ExtrinsicResponse

    -transfer_stake(wallet, destination_coldkey_ss58, hotkey_ss58, origin_netuid, destination_netuid, amount, wait_for_inclusion=True, wait_for_finalization=False, period=None)[source]#
    +transfer_stake(wallet, destination_coldkey_ss58, hotkey_ss58, origin_netuid, destination_netuid, amount, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#

    Transfers stake from one subnet to another while changing the coldkey owner.

    Parameters:
      -
    • wallet (bittensor.wallet) – The wallet to transfer stake from.

    • -
    • destination_coldkey_ss58 (str) – The destination coldkey SS58 address.

    • -
    • hotkey_ss58 (str) – The hotkey SS58 address associated with the stake.

    • -
    • origin_netuid (int) – The source subnet UID.

    • -
    • destination_netuid (int) – The destination subnet UID.

    • -
    • amount (Union[Balance, float, int]) – Amount to transfer.

    • -
    • wait_for_inclusion (bool) – If true, waits for inclusion before returning.

    • -
    • wait_for_finalization (bool) – If true, waits for finalization before returning.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If +

    • wallet (bittensor_wallet.Wallet) – The wallet to transfer stake from.

    • +
    • destination_coldkey_ss58 (str) – The destination coldkey SS58 address.

    • +
    • hotkey_ss58 (str) – The hotkey SS58 address associated with the stake.

    • +
    • origin_netuid (int) – The source subnet UID.

    • +
    • destination_netuid (int) – The destination subnet UID.

    • +
    • amount (bittensor.utils.balance.Balance) – Amount to transfer.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the transaction is not included in a block within that number of blocks, it will expire and be rejected. You can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the extrinsic to be included in a block.

    • +
    • wait_for_finalization (bool) – Whether to wait for finalization of the extrinsic.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    True if the transfer was successful.

    +

    The result object of the extrinsic execution.

    Return type:
    -

    success (bool)

    +

    ExtrinsicResponse

    +
    @@ -3351,13 +6140,13 @@

    Module Contents
    Parameters:
    -

    block (Optional[int]) – The blockchain block number for the query.

    +

    block (Optional[int]) – The blockchain block number for the query.

    Returns:

    The transaction rate limit of the network, None if not available.

    Return type:
    -

    Optional[int]

    +

    Optional[int]

    @@ -3369,50 +6158,157 @@

    Module Contents
    -unstake(wallet, hotkey_ss58=None, netuid=None, amount=None, wait_for_inclusion=True, wait_for_finalization=False, safe_staking=False, allow_partial_stake=False, rate_tolerance=0.005, period=None)[source]#
    -
    -
    Removes a specified amount of stake from a single hotkey account. This function is critical for adjusting

    individual neuron stakes within the Bittensor network.

    -
    -
    +unstake(wallet, netuid, hotkey_ss58, amount, allow_partial_stake=False, rate_tolerance=0.005, safe_unstaking=False, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]# +

    Removes a specified amount of stake from a single hotkey account. This function is critical for adjusting +individual neuron stakes within the Bittensor network.

    Parameters:
      -
    • wallet (bittensor_wallet.wallet) – The wallet associated with the neuron from which the stake is being -removed.

    • -
    • hotkey_ss58 (Optional[str]) – The SS58 address of the hotkey account to unstake from.

    • -
    • netuid (Optional[int]) – The unique identifier of the subnet.

    • -
    • amount (Balance) – The amount of alpha to unstake. If not specified, unstakes all.

    • -
    • wait_for_inclusion (bool) – Waits for the transaction to be included in a block.

    • -
    • wait_for_finalization (bool) – Waits for the transaction to be finalized on the blockchain.

    • -
    • safe_staking (bool) – If true, enables price safety checks to protect against fluctuating prices. The unstake -will only execute if the price change doesn’t exceed the rate tolerance. Default is False.

    • -
    • allow_partial_stake (bool) – If true and safe_staking is enabled, allows partial unstaking when +

    • wallet (bittensor_wallet.Wallet) – The wallet associated with the neuron from which the stake is being removed.

    • +
    • netuid (int) – The unique identifier of the subnet.

    • +
    • hotkey_ss58 (str) – The SS58 address of the hotkey account to unstake from.

    • +
    • amount (bittensor.utils.balance.Balance) – The amount of alpha to unstake. If not specified, unstakes all. Alpha amount.

    • +
    • allow_partial_stake (bool) – If True and safe_staking is enabled, allows partial unstaking when the full amount would exceed the price tolerance. If false, the entire unstake fails if it would -exceed the tolerance. Default is False.

    • -
    • rate_tolerance (float) – The maximum allowed price change ratio when unstaking. For example, -0.005 = 0.5% maximum price decrease. Only used when safe_staking is True. Default is 0.005.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If +exceed the tolerance.

    • +
    • rate_tolerance (float) – The maximum allowed price change ratio when unstaking. For example, +0.005 = 0.5% maximum price decrease. Only used when safe_staking is True.

    • +
    • safe_unstaking (bool) – If True, enables price safety checks to protect against fluctuating prices. The unstake +will only execute if the price change doesn’t exceed the rate tolerance.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the transaction is not included in a block within that number of blocks, it will expire and be rejected. You can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the extrinsic to be included in a block.

    • +
    • wait_for_finalization (bool) – Whether to wait for finalization of the extrinsic.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    True if the unstaking process is successful, False otherwise.

    +

    The result object of the extrinsic execution.

    Return type:
    -

    bool

    +

    ExtrinsicResponse

    -
    -
    This function supports flexible stake management, allowing neurons to adjust their network participation and

    potential reward accruals. When safe_staking is enabled, it provides protection against price fluctuations +

    This function supports flexible stake management, allowing neurons to adjust their network participation and +potential reward accruals. When safe_staking is enabled, it provides protection against price fluctuations during the time unstake is executed and the time it is actually processed by the chain.

    + +
    + +
    +
    +unstake_all(wallet, netuid, hotkey_ss58, rate_tolerance=0.005, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#
    +

    Unstakes all TAO/Alpha associated with a hotkey from the specified subnets on the Bittensor network.

    +
    +
    Parameters:
    +
      +
    • wallet (bittensor_wallet.Wallet) – The wallet of the stake owner.

    • +
    • netuid (int) – The unique identifier of the subnet.

    • +
    • hotkey_ss58 (str) – The SS58 address of the hotkey to unstake from.

    • +
    • rate_tolerance (Optional[float]) – The maximum allowed price change ratio when unstaking. For example, 0.005 = 0.5% maximum +price decrease. If not passed (None), then unstaking goes without price limit.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If +the transaction is not included in a block within that number of blocks, it will expire and be rejected. +You can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the extrinsic to be included in a block.

    • +
    • wait_for_finalization (bool) – Whether to wait for finalization of the extrinsic.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    The result object of the extrinsic execution.

    +
    +
    Return type:
    +

    ExtrinsicResponse

    +

    Example:

    +
    # If you would like to unstake all stakes in all subnets safely:
    +
    +import bittensor as bt
    +
    +subtensor = bt.Subtensor()
    +
    +wallet = bt.Wallet("my_wallet")
    +
    +netuid = 14
    +
    +hotkey = "5%SOME_HOTKEY%"
    +
    +wallet_stakes = subtensor.get_stake_info_for_coldkey(coldkey_ss58=wallet.coldkey.ss58_address)
    +
    +for stake in wallet_stakes:
    +
    +    result = subtensor.unstake_all(
    +
    +        wallet=wallet,
    +
    +        hotkey_ss58=stake.hotkey_ss58,
    +
    +        netuid=stake.netuid,
    +
    +    )
    +
    +    print(result)
    +
    +# If you would like to unstake all stakes in all subnets unsafely, use rate_tolerance=None:
    +
    +import bittensor as bt
    +
    +subtensor = bt.Subtensor()
    +
    +wallet = bt.Wallet("my_wallet")
    +
    +netuid = 14
    +
    +hotkey = "5%SOME_HOTKEY_WHERE_IS_YOUR_STAKE_NOW%"
    +
    +wallet_stakes = subtensor.get_stake_info_for_coldkey(coldkey_ss58=wallet.coldkey.ss58_address)
    +
    +for stake in wallet_stakes:
    +
    +    result = subtensor.unstake_all(
    +
    +        wallet=wallet,
    +
    +        hotkey_ss58=stake.hotkey_ss58,
    +
    +        netuid=stake.netuid,
    +
    +        rate_tolerance=None,
    +
    +    )
    +
    +    print(result)
    +
    +
    +
    -unstake_multiple(wallet, hotkey_ss58s, netuids, amounts=None, wait_for_inclusion=True, wait_for_finalization=False, period=None)[source]#
    +unstake_multiple(wallet, netuids, hotkey_ss58s, amounts=None, unstake_all=False, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)[source]#
    Performs batch unstaking from multiple hotkey accounts, allowing a neuron to reduce its staked amounts

    efficiently. This function is useful for managing the distribution of stakes across multiple neurons.

    @@ -3420,30 +6316,200 @@

    Module Contents
    Parameters:
      -
    • wallet (bittensor_wallet.Wallet) – The wallet linked to the coldkey from which the stakes are being -withdrawn.

    • -
    • hotkey_ss58s (List[str]) – A list of hotkey SS58 addresses to unstake from.

    • -
    • netuids (List[int]) – The list of subnet uids.

    • -
    • amounts (List[Balance]) – The amounts of TAO to unstake from each hotkey. If not provided, -unstakes all available stakes.

    • -
    • wait_for_inclusion (bool) – Waits for the transaction to be included in a block.

    • -
    • wait_for_finalization (bool) – Waits for the transaction to be finalized on the blockchain.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If +

    • wallet (bittensor_wallet.Wallet) – The wallet linked to the coldkey from which the stakes are being withdrawn.

    • +
    • netuids (bittensor.core.types.UIDs) – Subnets unique IDs.

    • +
    • hotkey_ss58s (list[str]) – A list of hotkey SS58 addresses to unstake from.

    • +
    • amounts (Optional[list[bittensor.utils.balance.Balance]]) – The amounts of TAO to unstake from each hotkey. If not provided, unstakes all.

    • +
    • unstake_all (bool) – If True, unstakes all tokens. Amounts are ignored.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s submitted. If the transaction is not included in a block within that number of blocks, it will expire and be rejected. You can think of it as an expiration date for the transaction.

    • +
    • raise_error (bool) – Raises a relevant exception rather than returning False if unsuccessful.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the extrinsic to be included in a block.

    • +
    • wait_for_finalization (bool) – Whether to wait for finalization of the extrinsic.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    Returns:
    -

    True if the batch unstaking is successful, False otherwise.

    +

    The result object of the extrinsic execution.

    Return type:
    -

    bool

    +

    ExtrinsicResponse

    -
    -
    This function allows for strategic reallocation or withdrawal of stakes, aligning with the dynamic stake

    management aspect of the Bittensor network.

    +

    This function allows for strategic reallocation or withdrawal of stakes, aligning with the dynamic stake +management aspect of the Bittensor network.

    + +
    + +
    +
    +update_cap_crowdloan(wallet, crowdloan_id, new_cap, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Updates the fundraising cap of an active (non-finalized) crowdloan.

    +

    Allows the creator to adjust the maximum total contribution amount before finalization. The new cap +must be at least equal to the amount already raised. This is useful for adjusting campaign goals based +on contributor feedback or changing subnet costs.

    +
    +
    Parameters:
    +
      +
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet instance used to sign the transaction (must be the creator’s coldkey).

    • +
    • crowdloan_id (int) – The unique identifier of the crowdloan to update.

    • +
    • new_cap (bittensor.utils.balance.Balance) – The new fundraising cap (TAO). Must be >= raised.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after submission.

    • +
    • raise_error (bool) – If True, raises an exception rather than returning failure in the response.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the extrinsic to be included in a block.

    • +
    • wait_for_finalization (bool) – Whether to wait for finalization of the extrinsic.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    ExtrinsicResponse indicating success or failure, with error details if applicable.

    +
    +
    Return type:
    +

    bittensor.core.types.ExtrinsicResponse

    +
    +
    +
    +

    Notes

    + +
    +
    + +
    +
    +update_end_crowdloan(wallet, crowdloan_id, new_end, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Updates the end block of an active (non-finalized) crowdloan.

    +

    Allows the creator to extend (or shorten) the contribution period before finalization. The new end block +must be in the future and respect the minimum and maximum duration bounds defined in the runtime constants. +This is useful for extending campaigns that need more time to reach their cap or shortening campaigns with +sufficient contributions.

    +
    +
    Parameters:
    +
      +
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet instance used to sign the transaction (must be the creator’s coldkey).

    • +
    • crowdloan_id (int) – The unique identifier of the crowdloan to update.

    • +
    • new_end (int) – The new block number at which the crowdloan will end. Must be between MinimumBlockDuration +(7 days = 50,400 blocks) and MaximumBlockDuration (60 days = 432,000 blocks) from the current block.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after submission.

    • +
    • raise_error (bool) – If True, raises an exception rather than returning failure in the response.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the extrinsic to be included in a block.

    • +
    • wait_for_finalization (bool) – Whether to wait for finalization of the extrinsic.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    ExtrinsicResponse indicating success or failure, with error details if applicable.

    +
    +
    Return type:
    +

    bittensor.core.types.ExtrinsicResponse

    +
    +
    +
    +

    Notes

    + +
    +
    + +
    +
    +update_min_contribution_crowdloan(wallet, crowdloan_id, new_min_contribution, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Updates the minimum contribution amount of an active (non-finalized) crowdloan.

    +

    Allows the creator to adjust the minimum per-contribution amount before finalization. The new value must +meet or exceed the AbsoluteMinimumContribution constant. This is useful for adjusting contribution +requirements based on the number of expected contributors or campaign strategy.

    +
    +
    Parameters:
    +
      +
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet instance used to sign the transaction (must be the creator’s coldkey).

    • +
    • crowdloan_id (int) – The unique identifier of the crowdloan to update.

    • +
    • new_min_contribution (bittensor.utils.balance.Balance) – The new minimum contribution amount (TAO). Must be >= AbsoluteMinimumContribution.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after submission.

    • +
    • raise_error (bool) – If True, raises an exception rather than returning failure in the response.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the extrinsic to be included in a block.

    • +
    • wait_for_finalization (bool) – Whether to wait for finalization of the extrinsic.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    ExtrinsicResponse indicating success or failure, with error details if applicable.

    +
    +
    Return type:
    +

    bittensor.core.types.ExtrinsicResponse

    +
    +
    +
    +

    Notes

    + +
    +
    + +
    +
    +validate_extrinsic_params(call_module, call_function, call_params, block=None)#
    +

    Validate and filter extrinsic parameters against on-chain metadata.

    +

    This method checks that the provided parameters match the expected signature of the given extrinsic (module and +function) as defined in the Substrate metadata. It raises explicit errors for missing or invalid parameters and +silently ignores any extra keys not present in the function definition.

    +
    +
    Parameters:
    +
      +
    • call_module (str) – The pallet name, e.g. “SubtensorModule” or “AdminUtils”.

    • +
    • call_function (str) – The extrinsic function name, e.g. “set_weights” or “sudo_set_tempo”.

    • +
    • call_params (dict[str, Any]) – A dictionary of parameters to validate.

    • +
    • block (Optional[int]) – Optional block number to query metadata from. If not provided, the latest metadata is used.

    • +
    +
    +
    Returns:
    +

    A filtered dictionary containing only the parameters that are valid for the specified extrinsic.

    +
    +
    Raises:
    +
      +
    • ValueError – If the given module or function is not found in the chain metadata.

    • +
    • KeyError – If one or more required parameters are missing.

    • +
    +
    +

    Notes

    +

    This method does not compose or submit the extrinsic. It only ensures that call_params conforms to the +expected schema derived from on-chain metadata.

    +
    @@ -3453,74 +6519,111 @@

    Module Contents
    Parameters:
    -

    block (Optional[int]) – The block number to wait for. If None, waits for the next block.

    +

    block (Optional[int]) – The block number to wait for. If None, waits for the next block.

    Returns:

    True if the target block was reached, False if timeout occurred.

    -
    Return type:
    -

    bool

    -

    -
    -

    Example

    -
    >>> subtensor.wait_for_block() # Waits for the next block
    ->>> subtensor.wait_for_block(block=1234) # Waits for a specific block
    +

    Example:

    +
    # Waits for a specific block
    +
    +subtensor.wait_for_block(block=1234)
     
    -
    -weights(netuid, block=None)[source]#
    +weights(netuid, mechid=0, block=None)[source]#

    Retrieves the weight distribution set by neurons within a specific subnet of the Bittensor network. -This function maps each neuron’s UID to the weights it assigns to other neurons, reflecting the network’s trust

    -
    -

    and value assignment mechanisms.

    -
    +This function maps each neuron’s UID to the weights it assigns to other neurons, reflecting the network’s trust +and value assignment mechanisms.

    Parameters:
      -
    • netuid (int) – The network UID of the subnet to query.

    • -
    • block (Optional[int]) – Block number for synchronization, or None for the latest block.

    • +
    • netuid (int) – The network UID of the subnet to query.

    • +
    • mechid (int) – Subnet mechanism identifier.

    • +
    • block (Optional[int]) – Block number for synchronization, or None for the latest block.

    Returns:

    A list of tuples mapping each neuron’s UID to its assigned weights.

    Return type:
    -

    list[tuple[int, list[tuple[int, int]]]]

    -
    -
    -
    -
    The weight distribution is a key factor in the network’s consensus algorithm and the ranking of neurons,

    influencing their influence and reward allocation within the subnet.

    +

    list[tuple[int, list[tuple[int, int]]]]

    +

    The weight distribution is a key factor in the network’s consensus algorithm and the ranking of neurons, +influencing their influence and reward allocation within the subnet.

    weights_rate_limit(netuid, block=None)[source]#
    -

    Returns network WeightsSetRateLimit hyperparameter.

    +

    Returns the WeightsSetRateLimit hyperparameter for a subnet.

    +

    This hyperparameter limits how many times a validator can set weights per epoch. It prevents validators +from spamming weight updates and ensures stable consensus calculations. Once the limit is reached, validators +must wait until the next epoch to set weights again.

    Parameters:
      -
    • netuid (int) – The unique identifier of the subnetwork.

    • -
    • block (Optional[int]) – The blockchain block number for the query.

    • +
    • netuid (int) – The unique identifier of the subnetwork.

    • +
    • block (Optional[int]) – The blockchain block number for the query.

    Returns:

    -
    The value of the WeightsSetRateLimit hyperparameter, or None if the subnetwork does not

    exist or the parameter is not found.

    +
    The maximum number of weight set operations allowed per epoch, or None if the subnetwork does not

    exist or the parameter is not found.

    Return type:
    -

    Optional[int]

    +

    Optional[int]

    +
    +
    +
    + +
    +
    +withdraw_crowdloan(wallet, crowdloan_id, *, mev_protection=DEFAULT_MEV_PROTECTION, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True, wait_for_revealed_execution=True)#
    +

    Withdraws a contribution from an active (not yet finalized or dissolved) crowdloan.

    +

    Contributors can withdraw their contributions at any time before finalization. For regular contributors, +the full contribution amount is returned. For the creator, only amounts exceeding the initial deposit can +be withdrawn; the deposit itself remains locked until dissolution.

    +
    +
    Parameters:
    +
      +
    • wallet (bittensor_wallet.Wallet) – Bittensor wallet instance used to sign the transaction (coldkey must match a contributor).

    • +
    • crowdloan_id (int) – The unique identifier of the crowdloan to withdraw from.

    • +
    • mev_protection (bool) – If True, encrypts and submits the transaction through the MEV Shield pallet to protect +against front-running and MEV attacks. The transaction remains encrypted in the mempool until validators +decrypt and execute it. If False, submits the transaction directly without encryption.

    • +
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after submission, after which +it will be rejected.

    • +
    • raise_error (bool) – If True, raises an exception rather than returning False in the response, in case the +transaction fails.

    • +
    • wait_for_inclusion (bool) – Whether to wait for the extrinsic to be included in a block.

    • +
    • wait_for_finalization (bool) – Whether to wait for finalization of the extrinsic.

    • +
    • wait_for_revealed_execution (bool) – Whether to wait for the revealed execution of transaction if mev_protection used.

    • +
    +
    +
    Returns:
    +

    ExtrinsicResponse indicating success or failure, with error details if applicable.

    +
    +
    Return type:
    +

    bittensor.core.types.ExtrinsicResponse

    +

    @@ -3549,11 +6652,11 @@

    Module Contents

    next

    -

    bittensor.core.subtensor_api

    +

    bittensor.core.synapse

    @@ -3577,67 +6680,113 @@

    Module ContentsClasses

  • Module Contents diff --git a/static/python-api/html/autoapi/bittensor/core/subtensor_api/subnets/index.html b/static/python-api/html/autoapi/bittensor/core/subtensor_api/subnets/index.html deleted file mode 100644 index 7e8271fdcf..0000000000 --- a/static/python-api/html/autoapi/bittensor/core/subtensor_api/subnets/index.html +++ /dev/null @@ -1,792 +0,0 @@ - - - - - - - - - - - bittensor.core.subtensor_api.subnets — Bittensor SDK Docs documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - -
    - -
    - - - - - -
    -
    - - - - - - -
    - - - -
    - -
    -
    - -
    -
    - -
    - -
    - -
    - - -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - - - - - - - - -
    - -
    -

    bittensor.core.subtensor_api.subnets#

    -
    -

    Classes#

    -
    - - - - - -

    Subnets

    Class for managing subnet operations.

    -
    -
    -
    -

    Module Contents#

    -
    -
    -class bittensor.core.subtensor_api.subnets.Subnets(subtensor)#
    -

    Class for managing subnet operations.

    -
    -
    Parameters:
    -

    subtensor (Union[bittensor.core.subtensor.Subtensor, bittensor.core.async_subtensor.AsyncSubtensor])

    -
    -
    -
    -
    -all_subnets#
    -
    - -
    -
    -blocks_since_last_step#
    -
    - -
    -
    -blocks_since_last_update#
    -
    - -
    -
    -bonds#
    -
    - -
    -
    -difficulty#
    -
    - -
    -
    -get_all_subnets_info#
    -
    - -
    -
    -get_children#
    -
    - -
    -
    -get_children_pending#
    -
    - -
    -
    -get_current_weight_commit_info#
    -
    - -
    -
    -get_hyperparameter#
    -
    - -
    -
    -get_neuron_for_pubkey_and_subnet#
    -
    - -
    -
    -get_next_epoch_start_block#
    -
    - -
    -
    -get_subnet_burn_cost#
    -
    - -
    -
    -get_subnet_hyperparameters#
    -
    - -
    -
    -get_subnet_owner_hotkey#
    -
    - -
    -
    -get_subnet_reveal_period_epochs#
    -
    - -
    -
    -get_subnet_validator_permits#
    -
    - -
    -
    -get_subnets#
    -
    - -
    -
    -get_total_subnets#
    -
    - -
    -
    -get_uid_for_hotkey_on_subnet#
    -
    - -
    -
    -immunity_period#
    -
    - -
    -
    -is_hotkey_registered_on_subnet#
    -
    - -
    -
    -is_subnet_active#
    -
    - -
    -
    -max_weight_limit#
    -
    - -
    -
    -min_allowed_weights#
    -
    - -
    -
    -recycle#
    -
    - -
    -
    -register_subnet#
    -
    - -
    -
    -set_subnet_identity#
    -
    - -
    -
    -subnet#
    -
    - -
    -
    -subnet_exists#
    -
    - -
    -
    -subnetwork_n#
    -
    - -
    -
    -tempo#
    -
    - -
    -
    -weights#
    -
    - -
    -
    -weights_rate_limit#
    -
    - -
    - -
    -
    - - -
    - - - - - - - - -
    - - - - - - - -
    -
    - - -
    - - -
    -
    -
    - - - - - -
    -
    - - \ No newline at end of file diff --git a/static/python-api/html/autoapi/bittensor/core/synapse/index.html b/static/python-api/html/autoapi/bittensor/core/synapse/index.html index 076145c3af..a1cda1bdb8 100644 --- a/static/python-api/html/autoapi/bittensor/core/synapse/index.html +++ b/static/python-api/html/autoapi/bittensor/core/synapse/index.html @@ -49,7 +49,7 @@ - + @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -500,7 +503,7 @@

    Module Contents
    class bittensor.core.synapse.Synapse(/, **data)[source]#
    -

    Bases: pydantic.BaseModel

    +

    Bases: pydantic.BaseModel

    Represents a Synapse in the Bittensor network, serving as a communication schema between neurons (nodes).

    Synapses ensure the format and correctness of transmission tensors according to the Bittensor protocol. Each Synapse type is tailored for a specific machine learning (ML) task, following unique compression and @@ -602,14 +605,14 @@

    Module Contents
    Parameters:
      -
    • name (str) – HTTP route name, set on axon.attach().

    • -
    • timeout (float) – Total query length, set by the dendrite terminal.

    • -
    • total_size (int) – Total size of request body in bytes.

    • -
    • header_size (int) – Size of request header in bytes.

    • -
    • dendrite (TerminalInfo()) – Information about the dendrite terminal.

    • -
    • axon (TerminalInfo()) – Information about the axon terminal.

    • -
    • computed_body_hash (str) – Computed hash of the request body.

    • -
    • required_hash_fields (list[str]) – Fields required to compute the body hash.

    • +
    • name – HTTP route name, set on axon.attach().

    • +
    • timeout – Total query length, set by the dendrite terminal.

    • +
    • total_size – Total size of request body in bytes.

    • +
    • header_size – Size of request header in bytes.

    • +
    • dendrite – Information about the dendrite terminal.

    • +
    • axon – Information about the axon terminal.

    • +
    • computed_body_hash – Computed hash of the request body.

    • +
    • required_hash_fields – Fields required to compute the body hash.

    • data (Any)

    @@ -632,7 +635,7 @@

    Module Contents
    Parameters:
    @@ -645,7 +648,7 @@

    Module Contents
    Return type:
    -

    int

    +

    int

    @@ -656,7 +659,7 @@

    Module Contents
    Return type:
    -

    dict

    +

    dict

    @@ -667,7 +670,7 @@

    Module Contents
    Return type:
    -

    str

    +

    str

    @@ -678,10 +681,10 @@

    Module Contents
    Parameters:
    -

    headers (dict)

    +

    headers (dict)

    Return type:
    -

    dict

    +

    dict

    @@ -692,7 +695,7 @@

    Module Contents
    Parameters:
    -

    headers (dict)

    +

    headers (dict)

    Return type:

    Synapse

    @@ -708,12 +711,12 @@

    Module Contents
    -axon: TerminalInfo | None = None#
    +axon: TerminalInfo | None = None#
    -property body_hash: str#
    +property body_hash: str#

    Computes a SHA3-256 hash of the serialized body of the Synapse instance.

    This hash is used to ensure the data integrity and security of the Synapse instance when it’s transmitted across the @@ -724,11 +727,11 @@

    Module Contents
    synapse = Synapse(name="ExampleRoute", timeout=10)
    -hash_value = synapse.body_hash
    -# hash_value is the SHA3-256 hash of the serialized body of the Synapse instance
    -
    +
    +

    Example

    +

    synapse = Synapse(name=”ExampleRoute”, timeout=10) +hash_value = synapse.body_hash +# hash_value is the SHA3-256 hash of the serialized body of the Synapse instance

    Returns:
    @@ -739,19 +742,19 @@

    Module ContentsReturn type: -

    str

    +

    str

    -computed_body_hash: str | None = None#
    +computed_body_hash: str | None = None#
    -dendrite: TerminalInfo | None = None#
    +dendrite: TerminalInfo | None = None#
    @@ -767,23 +770,26 @@

    Module Contents
    class CustomSynapse(Synapse):
    -    additional_data: str
    -
    -    def deserialize(self) -> "CustomSynapse":
    -        # Custom deserialization logic
    -        # For example, decoding a base64 encoded string in 'additional_data'
    -        if self.additional_data:
    -            self.additional_data = base64.b64decode(self.additional_data).decode('utf-8')
    -        return self
    -
    -serialized_data = '{"additional_data": "SGVsbG8gV29ybGQ="}'  # Base64 for 'Hello World'
    -custom_synapse = CustomSynapse.model_validate_json(serialized_data)
    -deserialized_synapse = custom_synapse.deserialize()
    -
    -# deserialized_synapse.additional_data would now be 'Hello World'
    -
    +
    +

    Example

    +
    +
    class CustomSynapse(Synapse):

    additional_data: str

    +
    +
    def deserialize(self) -> “CustomSynapse”:

    # Custom deserialization logic +# For example, decoding a base64 encoded string in ‘additional_data’ +if self.additional_data:

    +
    +

    self.additional_data = base64.b64decode(self.additional_data).decode(‘utf-8’)

    +
    +

    return self

    +
    +
    +
    +
    +

    serialized_data = ‘{“additional_data”: “SGVsbG8gV29ybGQ=”}’ # Base64 for ‘Hello World’ +custom_synapse = CustomSynapse.model_validate_json(serialized_data) +deserialized_synapse = custom_synapse.deserialize()

    +

    # deserialized_synapse.additional_data would now be ‘Hello World’

    Returns:
    @@ -797,7 +803,7 @@

    Module Contents
    -property failed_verification: bool#
    +property failed_verification: bool#

    Checks if the dendrite’s status code indicates failed verification.

    This method returns True if the status code of the dendrite is 401, which is the HTTP status code for unauthorized access.

    @@ -806,7 +812,7 @@

    Module Contents

    True if dendrite’s status code is 401, False otherwise.

    Return type:
    -

    bool

    +

    bool

    @@ -816,34 +822,35 @@

    Module Contentsclassmethod from_headers(headers)[source]#

    Constructs a new Synapse instance from a given headers dictionary, enabling the re-creation of the Synapse’s state as it was prior to network transmission.

    -

    This method is a key part of the -deserialization process in the Bittensor network, allowing nodes to accurately reconstruct Synapse -objects from received data.

    -

    Example:

    -
    received_headers = {
    -    'bt_header_axon_address': '127.0.0.1',
    -    'bt_header_dendrite_port': '8080',
    -    # Other headers...
    -}
    -synapse = Synapse.from_headers(received_headers)
    -# synapse is a new Synapse instance reconstructed from the received headers
    -
    -
    +

    This method is a key part of the deserialization process in the Bittensor network, allowing nodes to accurately +reconstruct Synapse objects from received data.

    Parameters:
    -

    headers (dict) – The dictionary of headers containing serialized Synapse information.

    +

    headers (dict) – The dictionary of headers containing serialized Synapse information.

    Returns:

    -
    A new instance of Synapse, reconstructed from the parsed header information,

    replicating the original instance’s state.

    +
    A new instance of Synapse, reconstructed from the parsed header information, replicating the original

    instance’s state.

    Return type:
    -

    bittensor.core.synapse.Synapse

    +

    Synapse

    +
    +
    +
    +

    Example

    +
    +
    received_headers = {

    ‘bt_header_axon_address’: ‘127.0.0.1’, +‘bt_header_dendrite_port’: ‘8080’, +# Other headers…

    +

    } +synapse = Synapse.from_headers(received_headers) +# synapse is a new Synapse instance reconstructed from the received headers

    +
    @@ -863,19 +870,19 @@

    Module Contents

    The total size of the current object.

    Return type:
    -

    int

    +

    int

    -header_size: int | None = None#
    +header_size: int | None = None#
    -property is_blacklist: bool#
    +property is_blacklist: bool#

    Checks if the dendrite’s status code indicates a blacklisted request.

    This method returns True if the status code of the dendrite is 403, which is the HTTP status code for a forbidden request.

    @@ -884,14 +891,14 @@

    Module Contents

    True if dendrite’s status code is 403, False otherwise.

    Return type:
    -

    bool

    +

    bool

    -property is_failure: bool#
    +property is_failure: bool#

    Checks if the dendrite’s status code indicates failure.

    This method returns True if the status code of the dendrite is not 200, which would mean the HTTP request was not successful.

    @@ -900,14 +907,14 @@

    Module Contents

    True if dendrite’s status code is not 200, False otherwise.

    Return type:
    -

    bool

    +

    bool

    -property is_success: bool#
    +property is_success: bool#

    Checks if the dendrite’s status code indicates success.

    This method returns True if the status code of the dendrite is 200, which typically represents a successful HTTP request.

    @@ -916,14 +923,14 @@

    Module Contents

    True if dendrite’s status code is 200, False otherwise.

    Return type:
    -

    bool

    +

    bool

    -property is_timeout: bool#
    +property is_timeout: bool#

    Checks if the dendrite’s status code indicates a timeout.

    This method returns True if the status code of the dendrite is 408, which is the HTTP status code for a request timeout.

    @@ -932,7 +939,7 @@

    Module Contents

    True if dendrite’s status code is 408, False otherwise.

    Return type:
    -

    bool

    +

    bool

    @@ -945,7 +952,7 @@

    Module Contents
    -name: str | None = None#
    +name: str | None = None#
    @@ -953,47 +960,49 @@

    Module Contentsclassmethod parse_headers_to_inputs(headers)[source]#

    Interprets and transforms a given dictionary of headers into a structured dictionary, facilitating the reconstruction of Synapse objects.

    -

    This method is essential for parsing network-transmitted -data back into a Synapse instance, ensuring data consistency and integrity.

    -

    Process:

    -
      -
    1. Separates headers into categories based on prefixes (axon, dendrite, etc.).

    2. -
    3. Decodes and deserializes input_obj headers into their original objects.

    4. -
    5. Assigns simple fields directly from the headers to the input dictionary.

    6. -
    -

    Example:

    -
    received_headers = {
    -    'bt_header_axon_address': '127.0.0.1',
    -    'bt_header_dendrite_port': '8080',
    -    # Other headers...
    -}
    -inputs = Synapse.parse_headers_to_inputs(received_headers)
    -# inputs now contains a structured representation of Synapse properties based on the headers
    -
    -
    -
    -

    Note

    -
    -
    This is handled automatically when calling Synapse.from_headers(headers)() and does not need to be

    called directly.

    -
    -
    -
    +

    This method is essential for parsing network-transmitted data back into a Synapse instance, ensuring data +consistency and integrity.

    Parameters:
    -

    headers (dict) – The headers dictionary to parse.

    +

    headers (dict) – The headers dictionary to parse.

    Returns:

    A structured dictionary representing the inputs for constructing a Synapse instance.

    Return type:
    -

    dict

    +

    dict

    +
    +
    Process:
      +
    1. Separates headers into categories based on prefixes (axon, dendrite, etc.).

    2. +
    3. Decodes and deserializes input_obj headers into their original objects.

    4. +
    5. Assigns simple fields directly from the headers to the input dictionary.

    6. +
    +
    +
    +
    +

    Example

    +
    +
    received_headers = {

    ‘bt_header_axon_address’: ‘127.0.0.1’, +‘bt_header_dendrite_port’: ‘8080’, +# Other headers…

    +
    +
    +

    } +inputs = Synapse.parse_headers_to_inputs(received_headers) +# inputs now contains a structured representation of Synapse properties based on the headers

    +
    +
    +

    Note

    +

    This is handled automatically when calling Synapse.from_headers(headers)() and does not need to be +called directly.

    +

    -required_hash_fields: ClassVar[tuple[str, Ellipsis]] = ()#
    +required_hash_fields: ClassVar[tuple[str, Ellipsis]] = ()#
    @@ -1001,17 +1010,17 @@

    Module Contentsset_name_type(values)[source]#
    Parameters:
    -

    values (dict)

    +

    values (dict)

    Return type:
    -

    dict

    +

    dict

    -timeout: float | None = None#
    +timeout: float | None = None#
    @@ -1041,14 +1050,14 @@

    Module ContentsReturn type: -

    dict

    +

    dict

    -total_size: int | None = None#
    +total_size: int | None = None#
    @@ -1056,7 +1065,7 @@

    Module Contents
    class bittensor.core.synapse.TerminalInfo(/, **data)[source]#
    -

    Bases: pydantic.BaseModel

    +

    Bases: pydantic.BaseModel

    TerminalInfo encapsulates detailed information about a network synapse (node) involved in a communication process.

    This class serves as a metadata carrier, providing essential details about the state and configuration of a terminal during network interactions. This is a

    @@ -1072,23 +1081,23 @@

    Module Contents
    Parameters:
      -
    • status_code (int) – HTTP status code indicating the result of a network request. Essential for identifying the -outcome of network interactions.

    • -
    • status_message (str) – Descriptive message associated with the status code, providing additional context about -the request’s result.

    • -
    • process_time (float) – Time taken by the terminal to process the call, important for performance monitoring and +

    • status_code – HTTP status code indicating the result of a network request. Essential for identifying the outcome +of network interactions.

    • +
    • status_message – Descriptive message associated with the status code, providing additional context about the +request’s result.

    • +
    • process_time – Time taken by the terminal to process the call, important for performance monitoring and optimization.

    • -
    • ip (str) – IP address of the terminal, crucial for network routing and data transmission.

    • -
    • port (int) – Network port used by the terminal, key for establishing network connections.

    • -
    • version (int) – Bittensor version running on the terminal, ensuring compatibility between different nodes in the +

    • ip – IP address of the terminal, crucial for network routing and data transmission.

    • +
    • port – Network port used by the terminal, key for establishing network connections.

    • +
    • version – Bittensor version running on the terminal, ensuring compatibility between different nodes in the +network.

    • +
    • nonce – Unique, monotonically increasing number for each terminal, aiding in identifying and ordering network +interactions.

    • +
    • uuid – Unique identifier for the terminal, fundamental for network security and identification.

    • +
    • hotkey – Encoded hotkey string of the terminal wallet, important for transaction and identity verification in the network.

    • -
    • nonce (int) – Unique, monotonically increasing number for each terminal, aiding in identifying and ordering -network interactions.

    • -
    • uuid (str) – Unique identifier for the terminal, fundamental for network security and identification.

    • -
    • hotkey (str) – Encoded hotkey string of the terminal wallet, important for transaction and identity verification -in the network.

    • -
    • signature (str) – Digital signature verifying the tuple of nonce, axon_hotkey, dendrite_hotkey, and uuid, -critical for ensuring data authenticity and security.

    • +
    • signature – Digital signature verifying the tuple of nonce, axon_hotkey, dendrite_hotkey, and uuid, critical for +ensuring data authenticity and security.

    • data (Any)

    @@ -1126,12 +1135,12 @@

    Module Contents
    -hotkey: str | None = None#
    +hotkey: str | None = None#
    -ip: str | None = None#
    +ip: str | None = None#
    @@ -1142,42 +1151,42 @@

    Module Contents
    -nonce: int | None = None#
    +nonce: int | None = None#

    -port: int | None = None#
    +port: int | None = None#
    -process_time: float | None = None#
    +process_time: float | None = None#
    -signature: str | None = None#
    +signature: str | None = None#
    -status_code: int | None = None#
    +status_code: int | None = None#
    -status_message: str | None = None#
    +status_message: str | None = None#
    -uuid: str | None = None#
    +uuid: str | None = None#
    -version: int | None = None#
    +version: int | None = None#

    @@ -1189,13 +1198,13 @@

    Module ContentsNone, it simply returns None.

    Parameters:
    -

    raw (str) – The string to convert.

    +

    raw (str) – The string to convert.

    Returns:

    The converted float, or None if the input was None.

    Return type:
    -

    float or None

    +

    Optional[float]

    @@ -1207,13 +1216,13 @@

    Module ContentsNone, it simply returns None.

    Parameters:
    -

    raw (str) – The string to convert.

    +

    raw (str) – The string to convert.

    Returns:

    The converted integer, or None if the input was None.

    Return type:
    -

    int or None

    +

    int

    @@ -1227,14 +1236,14 @@

    Module ContentsParameters:
    Returns:

    The total size of the object.

    Return type:
    -

    int

    +

    int

    @@ -1254,12 +1263,12 @@

    Module Contents

    previous

    -

    bittensor.core.subtensor_api.wallets

    +

    bittensor.core.subtensor

    bittensor.core.settings

  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -483,7 +486,7 @@

    Module Contents
    class bittensor.core.tensor.DTypes(*args, **kwargs)[source]#
    -

    Bases: dict

    +

    Bases: dict

    dict() -> new empty dictionary dict(mapping) -> new dictionary initialized from a mapping object’s

    @@ -502,7 +505,7 @@

    Module Contents
    -torch: bool = False#
    +torch: bool = False#

    @@ -510,14 +513,14 @@

    Module Contents
    class bittensor.core.tensor.Tensor(/, **data)[source]#
    -

    Bases: pydantic.BaseModel

    +

    Bases: pydantic.BaseModel

    Represents a Tensor object.

    Parameters:
      -
    • buffer (Optional[str]) – Tensor buffer data.

    • -
    • dtype (str) – Tensor data type.

    • -
    • shape (list[int]) – Tensor shape.

    • +
    • buffer – Tensor buffer data.

    • +
    • dtype – Tensor data type.

    • +
    • shape – Tensor shape.

    • data (Any)

    @@ -528,7 +531,7 @@

    Module Contents
    -buffer: str | None = None#
    +buffer: str | None = None#

    @@ -540,17 +543,17 @@

    Module Contents

    The deserialized tensor object.

    Return type:
    -

    np.array or torch.Tensor

    +

    np.array or torch.Tensor

    Raises:
    -

    Exception – If the deserialization process encounters an error.

    +

    Exception – If the deserialization process encounters an error.

    -dtype: str = None#
    +dtype: str = None#
    @@ -564,7 +567,7 @@

    Module Contentsnumpy()[source]#
    Return type:
    -

    numpy.ndarray

    +

    numpy.ndarray

    @@ -576,25 +579,25 @@

    Module Contents
    Parameters:
    Returns:

    The serialized tensor.

    -
    Return type:
    -

    Tensor()

    +
    Raises:
    +

    Exception – If the serialization process encounters an error.

    -
    Raises:
    -

    Exception – If the serialization process encounters an error.

    +
    Return type:
    +

    Tensor

    -shape: list[int] = None#
    +shape: list[int] = None#
    @@ -602,7 +605,7 @@

    Module Contentstensor()[source]#
    Return type:
    -

    Union[numpy.ndarray, bittensor.utils.registration.torch.Tensor]

    +

    Union[numpy.ndarray, bittensor.utils.registration.torch.Tensor]

    @@ -612,7 +615,7 @@

    Module Contentstolist()[source]#
    Return type:
    -

    list[object]

    +

    list[object]

    @@ -625,16 +628,16 @@

    Module Contentsnumpy data type, or the torch data type if using torch.

    Parameters:
    -

    raw (Union[None, numpy.dtype, torch.dtype, str]) – The raw value to cast.

    +

    raw (Union[None, numpy.dtype, bittensor.utils.registration.torch.dtype, str]) – The raw value to cast.

    Returns:

    The string representing the numpy/torch data type.

    -
    Return type:
    -

    str

    +
    Raises:
    +

    Exception – If the raw value is of an invalid type.

    -
    Raises:
    -

    Exception – If the raw value is of an invalid type.

    +
    Return type:
    +

    Optional[str]

    @@ -645,16 +648,16 @@

    Module Contents
    Parameters:
    -

    raw (Union[None, list[int], str]) – The raw value to cast.

    +

    raw (Union[None, list[int], str]) – The raw value to cast.

    Returns:

    The string representing the tensor shape.

    -
    Return type:
    -

    str

    +
    Raises:
    +

    Exception – If the raw value is of an invalid type or if the list elements are not of type int.

    -
    Raises:
    -

    Exception – If the raw value is of an invalid type or if the list elements are not of type int.

    +
    Return type:
    +

    Optional[Union[str, list]]

    diff --git a/static/python-api/html/autoapi/bittensor/core/threadpool/index.html b/static/python-api/html/autoapi/bittensor/core/threadpool/index.html index 482ec396d3..f9d8fee0c6 100644 --- a/static/python-api/html/autoapi/bittensor/core/threadpool/index.html +++ b/static/python-api/html/autoapi/bittensor/core/threadpool/index.html @@ -48,7 +48,7 @@ - + @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -488,8 +491,7 @@

    Module Contents
    Parameters:

  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -397,13 +400,14 @@

    Contents

  • -
  • bittensor.utils
    @@ -264,7 +267,7 @@ -
  • -

    bittensor.utils.mock

    +

    bittensor.extras.dev_framework

    @@ -409,13 +412,15 @@

    Contents

    -
    -

    bittensor.utils.mock#

    +
    +

    bittensor.extras.dev_framework#

    Submodules#

    @@ -433,20 +438,20 @@

    Submodules

    previous

    -

    bittensor.utils.formatting

    +

    bittensor.extras

    next

    -

    bittensor.utils.mock.subtensor_mock

    +

    bittensor.extras.dev_framework.calls

    diff --git a/static/python-api/html/autoapi/bittensor/extras/dev_framework/subnet/index.html b/static/python-api/html/autoapi/bittensor/extras/dev_framework/subnet/index.html new file mode 100644 index 0000000000..c8dbed57f4 --- /dev/null +++ b/static/python-api/html/autoapi/bittensor/extras/dev_framework/subnet/index.html @@ -0,0 +1,827 @@ + + + + + + + + + + + bittensor.extras.dev_framework.subnet — Bittensor SDK Docs documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + +
    + +
    + + + + + +
    +
    + + + + + + +
    + + + +
    + +
    +
    + +
    +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + + + + + + + +
    + +
    +

    bittensor.extras.dev_framework.subnet#

    +
    +

    Attributes#

    +
    + + + + + +

    NETUID

    +
    +
    +
    +

    Classes#

    +
    + + + + + + + + +

    CALL_RECORD

    TestSubnet

    Class for managing test subnet operations.

    +
    +
    +
    +

    Module Contents#

    +
    +
    +class bittensor.extras.dev_framework.subnet.CALL_RECORD#
    +

    Bases: tuple

    +
    +
    +idx#
    +
    + +
    +
    +operation#
    +
    + +
    +
    +response#
    +
    + +
    + +
    +
    +bittensor.extras.dev_framework.subnet.NETUID = 'SN_NETUID'#
    +
    + +
    +
    +class bittensor.extras.dev_framework.subnet.TestSubnet(subtensor, netuid=None, period=DEFAULT_PERIOD, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True)#
    +

    Class for managing test subnet operations.

    +
    +
    Parameters:
    +
      +
    • subtensor (bittensor.extras.SubtensorApi)

    • +
    • netuid (Optional[int])

    • +
    • period (Optional[int])

    • +
    • raise_error (bool)

    • +
    • wait_for_inclusion (bool)

    • +
    • wait_for_finalization (bool)

    • +
    +
    +
    +
    +
    +async async_execute_one(step)#
    +

    Executes one step asynchronously.

    +
    +
    Parameters:
    +

    step (Union[bittensor.extras.dev_framework.utils.STEPS, tuple])

    +
    +
    Return type:
    +

    bittensor.core.types.ExtrinsicResponse

    +
    +
    +
    + +
    +
    +async async_execute_steps(steps)#
    +

    Executes a multiple steps asynchronously.

    +
    +
    Parameters:
    +

    steps (list[Union[bittensor.extras.dev_framework.utils.STEPS, tuple]])

    +
    +
    +
    + +
    +
    +async async_set_hyperparameter(sudo_or_owner_wallet, call_function, call_module, call_params, sudo_call=False, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True)#
    +

    Set hyperparameter for the chain or subnet.

    +
    +
    Parameters:
    +
      +
    • sudo_or_owner_wallet (bittensor_wallet.Wallet)

    • +
    • call_function (str)

    • +
    • call_module (str)

    • +
    • call_params (dict)

    • +
    • sudo_call (bool)

    • +
    • period (Optional[int])

    • +
    • raise_error (bool)

    • +
    • wait_for_inclusion (bool)

    • +
    • wait_for_finalization (bool)

    • +
    +
    +
    Return type:
    +

    bittensor.core.types.ExtrinsicResponse

    +
    +
    +
    + +
    +
    +async async_wait_next_epoch(netuid=None)#
    +

    Async wait until the next epoch first block is reached.

    +
    +
    Parameters:
    +

    netuid (Optional[int])

    +
    +
    +
    + +
    +
    +property calls: list[CALL_RECORD]#
    +
    +
    Return type:
    +

    list[CALL_RECORD]

    +
    +
    +
    + +
    +
    +execute_one(step)#
    +

    Executes one step synchronously.

    +
    +
    Parameters:
    +

    step (Union[bittensor.extras.dev_framework.utils.STEPS, tuple])

    +
    +
    Return type:
    +

    bittensor.core.types.ExtrinsicResponse

    +
    +
    +
    + +
    +
    +execute_steps(steps)#
    +

    Executes a multiple steps synchronously.

    +
    +
    Parameters:
    +

    steps (list[Union[bittensor.extras.dev_framework.utils.STEPS, tuple]])

    +
    +
    +
    + +
    +
    +property netuid: int#
    +
    +
    Return type:
    +

    int

    +
    +
    +
    + +
    +
    +property owner: bittensor_wallet.Wallet#
    +
    +
    Return type:
    +

    bittensor_wallet.Wallet

    +
    +
    +
    + +
    +
    +period = 128#
    +
    + +
    +
    +raise_error = False#
    +
    + +
    +
    +s: bittensor.extras.SubtensorApi#
    +
    + +
    +
    +set_hyperparameter(sudo_or_owner_wallet, call_function, call_module, call_params, sudo_call=False, period=None, raise_error=False, wait_for_inclusion=True, wait_for_finalization=True)#
    +

    Set hyperparameter for the chain or subnet.

    +
    +
    Parameters:
    +
      +
    • sudo_or_owner_wallet (bittensor_wallet.Wallet)

    • +
    • call_function (str)

    • +
    • call_module (str)

    • +
    • call_params (dict)

    • +
    • sudo_call (bool)

    • +
    • period (Optional[int])

    • +
    • raise_error (bool)

    • +
    • wait_for_inclusion (bool)

    • +
    • wait_for_finalization (bool)

    • +
    +
    +
    Return type:
    +

    bittensor.core.types.ExtrinsicResponse

    +
    +
    +
    + +
    +
    +wait_for_finalization = True#
    +
    + +
    +
    +wait_for_inclusion = True#
    +
    + +
    +
    +wait_next_epoch(netuid=None)#
    +

    Sync wait until the next epoch first block is reached.

    +
    +
    Parameters:
    +

    netuid (Optional[int])

    +
    +
    +
    + +
    + +
    +
    + + +
    + + + + + + + + +
    + + + + + + + +
    +
    + + +
    + + +
    +
    +
    + + + + + +
    +
    + + \ No newline at end of file diff --git a/static/python-api/html/autoapi/bittensor/extras/dev_framework/utils/index.html b/static/python-api/html/autoapi/bittensor/extras/dev_framework/utils/index.html new file mode 100644 index 0000000000..f1c4fb6269 --- /dev/null +++ b/static/python-api/html/autoapi/bittensor/extras/dev_framework/utils/index.html @@ -0,0 +1,696 @@ + + + + + + + + + + + bittensor.extras.dev_framework.utils — Bittensor SDK Docs documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + +
    + +
    + + + + + +
    +
    + + + + + + +
    + + + +
    + +
    +
    + +
    +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + + + + + + + +
    + +
    +

    bittensor.extras.dev_framework.utils#

    +
    +

    Attributes#

    + +
    +
    +

    Classes#

    + +
    +
    +

    Functions#

    +
    + + + + + + + + +

    is_instance_namedtuple(obj)

    Check if the object is an instance of a namedtuple.

    split_command(command)

    Parse command and return four objects (wallet, pallet, sudo, kwargs).

    +
    +
    +
    +

    Module Contents#

    +
    +
    +bittensor.extras.dev_framework.utils.ACTIVATE_SUBNET#
    +
    + +
    +
    +class bittensor.extras.dev_framework.utils.ActivateSubnet#
    +
    +
    +netuid: int | None = None#
    +
    + +
    +
    +wallet: bittensor_wallet.Wallet#
    +
    + +
    + +
    +
    +bittensor.extras.dev_framework.utils.REGISTER_NEURON#
    +
    + +
    +
    +bittensor.extras.dev_framework.utils.REGISTER_SUBNET#
    +
    + +
    +
    +class bittensor.extras.dev_framework.utils.RegisterNeuron#
    +
    +
    +netuid: int | None = None#
    +
    + +
    +
    +wallet: bittensor_wallet.Wallet#
    +
    + +
    + +
    +
    +class bittensor.extras.dev_framework.utils.RegisterSubnet#
    +
    +
    +wallet: bittensor_wallet.Wallet#
    +
    + +
    + +
    +
    +bittensor.extras.dev_framework.utils.STEPS#
    +
    + +
    +
    +bittensor.extras.dev_framework.utils.is_instance_namedtuple(obj)#
    +

    Check if the object is an instance of a namedtuple.

    +
    + +
    +
    +bittensor.extras.dev_framework.utils.split_command(command)#
    +

    Parse command and return four objects (wallet, pallet, sudo, kwargs).

    +
    + +
    +
    + + +
    + + + + + + + + +
    + + + + + + + +
    +
    + + +
    + + +
    +
    +
    + + + + + +
    +
    + + \ No newline at end of file diff --git a/static/python-api/html/autoapi/bittensor/utils/substrate_utils/index.html b/static/python-api/html/autoapi/bittensor/extras/index.html similarity index 57% rename from static/python-api/html/autoapi/bittensor/utils/substrate_utils/index.html rename to static/python-api/html/autoapi/bittensor/extras/index.html index 97dcf73ff6..20a853269f 100644 --- a/static/python-api/html/autoapi/bittensor/utils/substrate_utils/index.html +++ b/static/python-api/html/autoapi/bittensor/extras/index.html @@ -2,13 +2,13 @@ - + - bittensor.utils.substrate_utils — Bittensor SDK Docs documentation + bittensor.extras — Bittensor SDK Docs documentation @@ -27,29 +27,29 @@ - - + + - - - - + + + + - + - - - - - - - - - - - - + + + + + + + + + + + + @@ -71,7 +71,7 @@

    @@ -147,41 +147,44 @@ + + + + + +
    +
    + + \ No newline at end of file diff --git a/static/python-api/html/autoapi/bittensor/core/subtensor_api/neurons/index.html b/static/python-api/html/autoapi/bittensor/extras/subtensor_api/neurons/index.html similarity index 70% rename from static/python-api/html/autoapi/bittensor/core/subtensor_api/neurons/index.html rename to static/python-api/html/autoapi/bittensor/extras/subtensor_api/neurons/index.html index 765941230d..2569e02e66 100644 --- a/static/python-api/html/autoapi/bittensor/core/subtensor_api/neurons/index.html +++ b/static/python-api/html/autoapi/bittensor/extras/subtensor_api/neurons/index.html @@ -8,7 +8,7 @@ - bittensor.core.subtensor_api.neurons — Bittensor SDK Docs documentation + bittensor.extras.subtensor_api.neurons — Bittensor SDK Docs documentation @@ -45,11 +45,11 @@ - + - - + + @@ -149,24 +149,28 @@
    @@ -392,33 +393,6 @@

    bittensor.utils.easy_imports

    @@ -430,180 +404,15 @@

    Contents

    bittensor.utils.easy_imports#

    -

    The Bittensor Compatibility Module is designed to ensure seamless integration and functionality with legacy versions of -the Bittensor framework, specifically up to and including version 7.3.0. This module addresses changes and deprecated -features in recent versions, allowing users to maintain compatibility with older systems and projects.

    -
    -

    Attributes#

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

    async_subtensor

    axon

    config

    dendrite

    extrinsics_subpackage

    keyfile

    metagraph

    mock_subpackage

    subtensor

    synapse

    wallet

    +

    The Bittensor Compatibility Module serves as a centralized import hub for internal and external classes, functions, +constants, and utilities that are frequently accessed via the top-level bittensor namespace +(e.g., from bittensor import Wallet).

    +

    It consolidates these widely used symbols into bittensor/__init__.py, enabling a cleaner and more intuitive public API +for developers and the broader community.

    +
    +

    Note

    +

    Direct imports from their respective submodules are recommended for improved clarity and long-term maintainability.

    -
    -
    -

    Functions#

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

    debug([on])

    Enables or disables debug logging.

    info([on])

    Enables or disables info logging.

    trace([on])

    Enables or disables trace logging.

    warning([on])

    Enables or disables warning logging.

    -
    -
    -
    -

    Module Contents#

    -
    -
    -bittensor.utils.easy_imports.async_subtensor#
    -
    - -
    -
    -bittensor.utils.easy_imports.axon#
    -
    - -
    -
    -bittensor.utils.easy_imports.config#
    -
    - -
    -
    -bittensor.utils.easy_imports.debug(on=True)[source]#
    -

    Enables or disables debug logging. -:param on: If True, enables debug logging. If False, disables debug logging. -:type on: bool

    -
    -
    Parameters:
    -

    on (bool)

    -
    -
    -
    - -
    -
    -bittensor.utils.easy_imports.dendrite#
    -
    - -
    -
    -bittensor.utils.easy_imports.extrinsics_subpackage#
    -
    - -
    -
    -bittensor.utils.easy_imports.info(on=True)[source]#
    -

    Enables or disables info logging. -:param on: If True, enables info logging. If False, disables info logging and sets default (WARNING) level. -:type on: bool

    -
    -
    Parameters:
    -

    on (bool)

    -
    -
    -
    - -
    -
    -bittensor.utils.easy_imports.keyfile#
    -
    - -
    -
    -bittensor.utils.easy_imports.metagraph#
    -
    - -
    -
    -bittensor.utils.easy_imports.mock_subpackage#
    -
    - -
    -
    -bittensor.utils.easy_imports.subtensor#
    -
    - -
    -
    -bittensor.utils.easy_imports.synapse#
    -
    - -
    -
    -bittensor.utils.easy_imports.trace(on=True)[source]#
    -

    Enables or disables trace logging. -:param on: If True, enables trace logging. If False, disables trace logging. -:type on: bool

    -
    -
    Parameters:
    -

    on (bool)

    -
    -
    -
    - -
    -
    -bittensor.utils.easy_imports.wallet#
    -
    - -
    -
    -bittensor.utils.easy_imports.warning(on=True)[source]#
    -

    Enables or disables warning logging. -:param on: If True, enables warning logging. If False, disables warning logging and sets default (WARNING) level. -:type on: bool

    -
    -
    Parameters:
    -

    on (bool)

    -
    -
    -
    - -
    @@ -642,41 +451,6 @@

    Module Contents - -

  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -444,7 +447,7 @@

    Module Contents
    Parameters:
    -

    n (int)

    +

    n (int)

    @@ -473,11 +476,11 @@

    Module Contents

    next

    -

    bittensor.utils.mock

    +

    bittensor.utils.liquidity

    diff --git a/static/python-api/html/autoapi/bittensor/utils/index.html b/static/python-api/html/autoapi/bittensor/utils/index.html index 03ceb7dca4..e3031ad38e 100644 --- a/static/python-api/html/autoapi/bittensor/utils/index.html +++ b/static/python-api/html/autoapi/bittensor/utils/index.html @@ -49,7 +49,7 @@ - + @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -402,7 +405,9 @@

    Contents

  • Classes
  • Functions
  • Package Contents
  • @@ -458,11 +470,10 @@

    Submodulesbittensor.utils.btlogging

  • bittensor.utils.easy_imports
  • bittensor.utils.formatting
  • -
  • bittensor.utils.mock
  • +
  • bittensor.utils.liquidity
  • bittensor.utils.networking
  • bittensor.utils.registration
  • bittensor.utils.subnets
  • -
  • bittensor.utils.substrate_utils
  • bittensor.utils.version
  • bittensor.utils.weight_utils
  • @@ -472,6 +483,12 @@

    Submodules#

    + + + + + + @@ -490,19 +507,22 @@

    Attributes

    - + - + - + - + + + + - + @@ -530,58 +550,81 @@

    Functions

    - + + + + - + - + + + + - + + + + - + + + + + + + - + - + - + - + - + - + - + - + + + +

    BT_DOCS_LINK

    GLOBAL_MAX_SUBNET_COUNT

    RAOPERTAO

    hex_to_bytes

    logging

    hex_to_ss58

    ss58_decode

    logging

    torch

    ss58_decode

    use_torch

    ss58_to_hex

    torch

    version_checking

    use_torch

    decode_hex_identity_dict(info_dictionary)

    Decodes a dictionary of hexadecimal identities.

    determine_chain_endpoint_and_network(network)

    deprecated_message(message)

    Shows a deprecation warning message with the given message.

    determine_chain_endpoint_and_network(network)

    Determines the chain endpoint and network from the passed network or chain_endpoint.

    float_to_u64(value)

    float_to_u64(value)

    Converts a float to a u64 int

    format_error_message(error_message)

    format_error_message(error_message)

    Formats an error message from the Subtensor error information for use in extrinsics.

    get_caller_name([depth])

    Return the name of the caller function.

    get_explorer_url_for_network(network, block_hash, ...)

    Returns the explorer url for the given block hash and network.

    get_hash(content[, encoding])

    get_function_name()

    Return the current function's name.

    get_hash(content[, encoding])

    is_valid_bittensor_address_or_public_key(address)

    get_mechid_storage_index(netuid, mechid)

    Computes the storage index for a given netuid and mechid pair.

    get_netuid_and_mechid_by_storage_index(storage_index)

    Returns the netuid and mechid from the storage index.

    is_valid_bittensor_address_or_public_key(address)

    Checks if the given address is a valid destination address.

    is_valid_ss58_address(address)

    is_valid_ss58_address(address)

    Checks if the given address is a valid ss58 address.

    ss58_address_to_bytes(ss58_address)

    ss58_address_to_bytes(ss58_address)

    Converts a ss58 address to a bytes object.

    ss58_to_vec_u8(ss58_address)

    ss58_to_vec_u8(ss58_address)

    strtobool(val)

    strtobool(val)

    Converts a string to a boolean value.

    u16_normalized_float(x)

    u16_normalized_float(x)

    u64_normalized_float(x)

    u64_normalized_float(x)

    unlock_key(wallet[, unlock_type, raise_error])

    unlock_key(wallet[, unlock_type, raise_error])

    Attempts to decrypt a wallet's coldkey or hotkey

    validate_chain_endpoint(endpoint_url)

    validate_chain_endpoint(endpoint_url)

    Validates if the provided endpoint URL is a valid WebSocket URL.

    validate_max_attempts(max_attempts, response)

    Common guard for all subtensor methods with max_attempts parameter.

    Package Contents#

    +
    + +
    +
    class bittensor.utils.Certificate[source]#
    -

    Bases: str

    +

    Bases: str

    str(object=’’) -> str str(bytes_or_buffer[, encoding[, errors]]) -> str

    Create a new string object from the given object. If encoding or @@ -594,6 +637,11 @@

    Package Contents +
    +bittensor.utils.GLOBAL_MAX_SUBNET_COUNT = 4096#
    +

    +
    bittensor.utils.RAOPERTAO = 1000000000.0#
    @@ -612,7 +660,7 @@

    Package Contents
    class bittensor.utils.UnlockStatus#
    -

    Bases: tuple

    +

    Bases: tuple

    message#
    @@ -627,12 +675,12 @@

    Package Contents
    -bittensor.utils.VersionCheckError[source]#
    +bittensor.utils.VersionCheckError#

    -bittensor.utils.check_version[source]#
    +bittensor.utils.check_version#
    @@ -641,10 +689,24 @@

    Package Contents
    Parameters:
    -

    info_dictionary (dict[str, Any])

    +

    info_dictionary (dict[str, Any])

    Return type:
    -

    dict[str, Any]

    +

    dict[str, Any]

    +
    +

    +

    + +
    +
    +bittensor.utils.deprecated_message(message)#
    +

    Shows a deprecation warning message with the given message.

    +
    +
    Parameters:
    +

    message (str)

    +
    +
    Return type:
    +

    None

    @@ -655,32 +717,28 @@

    Package Contents
    Parameters:
    -

    network (str) – The network flag. The choices are: finney (main network), archive (archive network -+300 blocks), local (local running network), test (test network).

    +

    network (str) – The network flag. The choices are: finney (main network), archive (archive network +300 blocks), +local (local running network), test (test network).

    Returns:
    -

    -
    The network and chain endpoint flag. If passed, overrides the

    network argument.

    -
    -
    -

    +

    The network and chain endpoint flag. If passed, overrides the network argument.

    Return type:
    -

    tuple[Optional[str], Optional[str]]

    +

    tuple[Optional[str], Optional[str]]

    -bittensor.utils.float_to_u64(value)#
    +bittensor.utils.float_to_u64(value)[source]#

    Converts a float to a u64 int

    Parameters:
    -

    value (float)

    +

    value (float)

    Return type:
    -

    int

    +

    int

    @@ -691,14 +749,28 @@

    Package Contents
    Parameters:
    -

    error_message (Union[dict, Exception]) – A dictionary containing the error information from Subtensor, or a SubstrateRequestException +

    error_message (Union[dict, Exception]) – A dictionary containing the error information from Subtensor, or a SubstrateRequestException containing dictionary literal args.

    Returns:

    A formatted error message string.

    Return type:
    -

    str

    +

    str

    +
    + + + +
    +
    +bittensor.utils.get_caller_name(depth=2)#
    +

    Return the name of the caller function.

    +
    +
    Parameters:
    +

    depth (int)

    +
    +
    Return type:
    +

    str

    @@ -710,17 +782,27 @@

    Package Contents
    Parameters:
      -
    • network (str) – The network to get the explorer url for.

    • -
    • block_hash (str) – The block hash to get the explorer url for.

    • -
    • network_map (dict[str, dict[str, str]]) – The network maps to get the explorer urls from.

    • +
    • network (str) – The network to get the explorer url for.

    • +
    • block_hash (str) – The block hash to get the explorer url for.

    • +
    • network_map (dict[str, dict[str, str]]) – The network maps to get the explorer urls from.

    Returns:
    -

    The explorer url for the given block hash and network. -Or None if the network is not known.

    +

    The explorer url for the given block hash and network. Or None if the network is not known.

    Return type:
    -

    Optional[dict[str, str]]

    +

    Optional[dict[str, str]]

    +
    + + + +
    +
    +bittensor.utils.get_function_name()#
    +

    Return the current function’s name.

    +
    +
    Return type:
    +

    str

    @@ -730,24 +812,72 @@

    Package Contentsbittensor.utils.get_hash(content, encoding='utf-8')[source]#
    +
    +
    +bittensor.utils.get_mechid_storage_index(netuid, mechid)#
    +

    Computes the storage index for a given netuid and mechid pair.

    +
    +
    Parameters:
    +
      +
    • netuid (int) – The netuid of the subnet.

    • +
    • mechid (int) – The mechid of the subnet.

    • +
    +
    +
    Returns:
    +

    Storage index number for the subnet and mechanism id.

    +
    +
    Return type:
    +

    int

    +
    +
    +
    + +
    +
    +bittensor.utils.get_netuid_and_mechid_by_storage_index(storage_index)#
    +

    Returns the netuid and mechid from the storage index.

    +

    Chain APIs (e.g., SubMetagraph response) returns netuid which is storage index that encodes both the netuid and +mechid. This function reverses the encoding to extract these components.

    +
    +
    Parameters:
    +

    storage_index (int) – The storage index of the subnet.

    +
    +
    Returns:
    +

      +
    • netuid - subnet identifier.

    • +
    • mechid - mechanism identifier.

    • +
    +

    +
    +
    Return type:
    +

    tuple[int, int]

    +
    +
    +
    +
    bittensor.utils.hex_to_bytes[source]#
    +
    +
    +bittensor.utils.hex_to_ss58#
    +
    +
    bittensor.utils.is_valid_bittensor_address_or_public_key(address)[source]#

    Checks if the given address is a valid destination address.

    Parameters:
    -

    address (Union[str, bytes]) – The address to check.

    +

    address (Union[str, bytes]) – The address to check.

    Returns:

    True if the address is a valid destination address, False otherwise.

    Return type:
    -

    bool

    +

    bool

    @@ -758,13 +888,13 @@

    Package Contents
    Parameters:
    -

    address (str) – The address to check.

    +

    address (str) – The address to check.

    Returns:

    True if the address is a valid ss58 address for Bittensor, False otherwise.

    Return type:
    -

    bool

    +

    bool

    @@ -780,10 +910,10 @@

    Package Contents
    Parameters:
    -

    ss58_address (str)

    +

    ss58_address (str)

    Return type:
    -

    bytes

    +

    bytes

    @@ -793,15 +923,20 @@

    Package Contentsbittensor.utils.ss58_decode[source]#
    +
    +
    +bittensor.utils.ss58_to_hex#
    +
    +
    bittensor.utils.ss58_to_vec_u8(ss58_address)[source]#
    Parameters:
    -

    ss58_address (str)

    +

    ss58_address (str)

    Return type:
    -

    list[int]

    +

    list[int]

    @@ -815,10 +950,10 @@

    Package Contents
    Parameters:
    -

    val (str)

    +

    val (str)

    Return type:
    -

    Union[bool, Literal[‘==SUPRESS==’]]

    +

    Union[bool, Literal[‘==SUPRESS==’]]

    @@ -833,10 +968,10 @@

    Package Contentsbittensor.utils.u16_normalized_float(x)[source]#
    Parameters:
    -

    x (int)

    +

    x (int)

    Return type:
    -

    float

    +

    float

    @@ -846,10 +981,10 @@

    Package Contentsbittensor.utils.u64_normalized_float(x)[source]#
    Parameters:
    -

    x (int)

    +

    x (int)

    Return type:
    -

    float

    +

    float

    @@ -861,8 +996,8 @@

    Package Contents
    Parameters:
      -
    • wallet (bittensor_wallet.Wallet) – a Wallet object

    • -
    • unlock_type – the key type, ‘coldkey’ or ‘hotkey’

    • +
    • wallet (bittensor_wallet.Wallet) – Bittensor Wallet instance.

    • +
    • unlock_type – the key type, ‘coldkey’ or ‘hotkey’.

    • raise_error – if False, will return (False, error msg), if True will raise the otherwise-caught exception.

    @@ -892,18 +1027,30 @@

    Package Contents
    Parameters:
    -

    endpoint_url (str)

    +

    endpoint_url (str)

    Return type:
    -

    tuple[bool, str]

    +

    tuple[bool, str]

    -
    -
    -bittensor.utils.version_checking[source]#
    -
    +
    +
    +bittensor.utils.validate_max_attempts(max_attempts, response)#
    +

    Common guard for all subtensor methods with max_attempts parameter.

    +
    +
    Parameters:
    +
    +
    +
    Return type:
    +

    Optional[bittensor.core.types.ExtrinsicResponse]

    +
    +
    +

    @@ -920,12 +1067,12 @@

    Package Contents

    previous

    -

    bittensor.core.types

    +

    bittensor.extras.timelock

    Package ContentsClasses
  • Functions
  • Package Contents
  • diff --git a/static/python-api/html/autoapi/bittensor/utils/liquidity/index.html b/static/python-api/html/autoapi/bittensor/utils/liquidity/index.html new file mode 100644 index 0000000000..5801a91d27 --- /dev/null +++ b/static/python-api/html/autoapi/bittensor/utils/liquidity/index.html @@ -0,0 +1,791 @@ + + + + + + + + + + + bittensor.utils.liquidity — Bittensor SDK Docs documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + +
    + +
    + + + + + +
    +
    + + + + + + +
    + + + +
    + +
    +
    + +
    +
    + +
    + +
    + +
    + + +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + + + + + + + +
    + +
    +

    bittensor.utils.liquidity#

    +

    This module provides utilities for managing liquidity positions and price conversions in the Bittensor network. The +module handles conversions between TAO and Alpha tokens while maintaining precise calculations for liquidity +provisioning and fee distribution.

    +
    +

    Attributes#

    +
    + + + + + + + + + + + +

    MAX_TICK

    MIN_TICK

    PRICE_STEP

    +
    +
    +
    +

    Classes#

    +
    + + + + + +

    LiquidityPosition

    +
    +
    +
    +

    Functions#

    +
    + + + + + + + + + + + + + + + + + +

    calculate_fees(position, global_fees_tao, ...)

    get_fees(current_tick, tick, tick_index, quote, ...)

    Returns the liquidity fee.

    get_fees_in_range(quote, global_fees_tao, ...)

    Returns the liquidity fee value in a range.

    price_to_tick(price)

    Converts a float price to the nearest Uniswap V3 tick index.

    tick_to_price(tick)

    Convert an integer Uniswap V3 tick index to float price.

    +
    +
    +
    +

    Module Contents#

    +
    +
    +class bittensor.utils.liquidity.LiquidityPosition[source]#
    +
    +
    +fees_alpha: bittensor.utils.balance.Balance#
    +
    + +
    +
    +fees_tao: bittensor.utils.balance.Balance#
    +
    + +
    +
    +id: int#
    +
    + +
    +
    +liquidity: bittensor.utils.balance.Balance#
    +
    + +
    +
    +netuid: int#
    +
    + +
    +
    +price_high: bittensor.utils.balance.Balance#
    +
    + +
    +
    +price_low: bittensor.utils.balance.Balance#
    +
    + +
    +
    +to_token_amounts(current_subnet_price)[source]#
    +

    Convert a position to token amounts.

    +
    +
    Parameters:
    +

    current_subnet_price (bittensor.utils.balance.Balance) – current subnet price in Alpha.

    +
    +
    Returns:
    +

    Amount of Alpha in liquidity +Amount of TAO in liquidity

    +
    +
    Return type:
    +

    tuple[int, int]

    +
    +
    +

    Liquidity is a combination of TAO and Alpha depending on the price of the subnet at the moment.

    +
    + +
    + +
    +
    +bittensor.utils.liquidity.MAX_TICK = 887272#
    +
    + +
    +
    +bittensor.utils.liquidity.MIN_TICK = -887272#
    +
    + +
    +
    +bittensor.utils.liquidity.PRICE_STEP = 1.0001#
    +
    + +
    +
    +bittensor.utils.liquidity.calculate_fees(position, global_fees_tao, global_fees_alpha, tao_fees_below_low, tao_fees_above_high, alpha_fees_below_low, alpha_fees_above_high, netuid)[source]#
    +
    +
    Parameters:
    +
      +
    • position (dict[str, Any])

    • +
    • global_fees_tao (float)

    • +
    • global_fees_alpha (float)

    • +
    • tao_fees_below_low (float)

    • +
    • tao_fees_above_high (float)

    • +
    • alpha_fees_below_low (float)

    • +
    • alpha_fees_above_high (float)

    • +
    • netuid (int)

    • +
    +
    +
    Return type:
    +

    tuple[bittensor.utils.balance.Balance, bittensor.utils.balance.Balance]

    +
    +
    +
    + +
    +
    +bittensor.utils.liquidity.get_fees(current_tick, tick, tick_index, quote, global_fees_tao, global_fees_alpha, above)[source]#
    +

    Returns the liquidity fee.

    +
    +
    Parameters:
    +
    +
    +
    Return type:
    +

    float

    +
    +
    +
    + +
    +
    +bittensor.utils.liquidity.get_fees_in_range(quote, global_fees_tao, global_fees_alpha, fees_below_low, fees_above_high)[source]#
    +

    Returns the liquidity fee value in a range.

    +
    +
    Parameters:
    +
    +
    +
    Return type:
    +

    float

    +
    +
    +
    + +
    +
    +bittensor.utils.liquidity.price_to_tick(price)[source]#
    +

    Converts a float price to the nearest Uniswap V3 tick index.

    +
    +
    Parameters:
    +

    price (float)

    +
    +
    Return type:
    +

    int

    +
    +
    +
    + +
    +
    +bittensor.utils.liquidity.tick_to_price(tick)[source]#
    +

    Convert an integer Uniswap V3 tick index to float price.

    +
    +
    Parameters:
    +

    tick (int)

    +
    +
    Return type:
    +

    float

    +
    +
    +
    + +
    +
    + + +
    + + + + + + + + +
    + + + + + + + +
    +
    + + +
    + + +
    +
    +
    + + + + + +
    +
    + + \ No newline at end of file diff --git a/static/python-api/html/autoapi/bittensor/utils/mock/subtensor_mock/index.html b/static/python-api/html/autoapi/bittensor/utils/mock/subtensor_mock/index.html deleted file mode 100644 index 4e00ababfb..0000000000 --- a/static/python-api/html/autoapi/bittensor/utils/mock/subtensor_mock/index.html +++ /dev/null @@ -1,1580 +0,0 @@ - - - - - - - - - - - bittensor.utils.mock.subtensor_mock — Bittensor SDK Docs documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - -
    - -
    - - - - - -
    -
    - - - - - - -
    - - - -
    - -
    -
    - -
    -
    - -
    - -
    - -
    - - -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - - - -
    -

    bittensor.utils.mock.subtensor_mock

    - -
    -
    - -
    -

    Contents

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

    bittensor.utils.mock.subtensor_mock#

    -
    -

    Attributes#

    -
    - - - - - -

    BlockNumber

    -
    -
    -
    -

    Classes#

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

    AxonInfoDict

    InfoDict

    MockChainState

    dict() -> new empty dictionary

    MockMapResult

    MockSubtensor

    A Mock Subtensor class for running tests.

    MockSubtensorState

    dict() -> new empty dictionary

    MockSubtensorValue

    MockSystemState

    dict() -> new empty dictionary

    PrometheusInfoDict

    ReusableCoroutine

    -
    -
    -
    -

    Module Contents#

    -
    -
    -class bittensor.utils.mock.subtensor_mock.AxonInfoDict[source]#
    -

    Bases: InfoDict

    -
    -
    -block: int#
    -
    - -
    -
    -classmethod default()[source]#
    -
    - -
    -
    -ip: int#
    -
    - -
    -
    -ip_type: int#
    -
    - -
    -
    -placeholder1: int#
    -
    - -
    -
    -placeholder2: int#
    -
    - -
    -
    -port: int#
    -
    - -
    -
    -protocol: int#
    -
    - -
    -
    -version: int#
    -
    - -
    - -
    -
    -bittensor.utils.mock.subtensor_mock.BlockNumber#
    -
    - -
    -
    -class bittensor.utils.mock.subtensor_mock.InfoDict[source]#
    -

    Bases: collections.abc.Mapping

    -
    -
    -classmethod default()[source]#
    -
    -
    Abstractmethod:
    -

    -
    -
    - -
    - -
    -
    -class bittensor.utils.mock.subtensor_mock.MockChainState[source]#
    -

    Bases: TypedDict

    -

    dict() -> new empty dictionary -dict(mapping) -> new dictionary initialized from a mapping object’s

    -
    -

    (key, value) pairs

    -
    -
    -
    dict(iterable) -> new dictionary initialized as if via:

    d = {} -for k, v in iterable:

    -
    -

    d[k] = v

    -
    -
    -
    dict(**kwargs) -> new dictionary initialized with the name=value pairs

    in the keyword argument list. For example: dict(one=1, two=2)

    -
    -
    -

    Initialize self. See help(type(self)) for accurate signature.

    -
    -
    -SubtensorModule: MockSubtensorState#
    -
    - -
    -
    -System: MockSystemState#
    -
    - -
    - -
    -
    -class bittensor.utils.mock.subtensor_mock.MockMapResult(records=None)[source]#
    -
    -
    Parameters:
    -

    records (Optional[list[tuple[Union[Any, MockSubtensorValue], Union[Any, MockSubtensorValue]]]])

    -
    -
    -
    -
    -records: list[tuple[MockSubtensorValue, MockSubtensorValue]] | None#
    -
    - -
    - -
    -
    -class bittensor.utils.mock.subtensor_mock.MockSubtensor(*args, **kwargs)[source]#
    -

    Bases: bittensor.core.subtensor.Subtensor

    -

    A Mock Subtensor class for running tests. -This should mock only methods that make queries to the chain. -e.g. We mock Subtensor.query_subtensor instead of all query methods.

    -

    This class will also store a local (mock) state of the chain.

    -

    Initializes an instance of the Subtensor class.

    -
    -
    Parameters:
    -
      -
    • network – The network name or type to connect to.

    • -
    • config – Configuration object for the AsyncSubtensor instance.

    • -
    • log_verbose – Enables or disables verbose logging.

    • -
    • fallback_endpoints – List of fallback endpoints to use if default or provided network is not available. Defaults to None.

    • -
    • retry_forever – Whether to retry forever on connection errors. Defaults to False.

    • -
    • _mock – Whether this is a mock instance. Mainly just for use in testing.

    • -
    -
    -
    Raises:
    -

    Any exceptions raised during the setup, configuration, or connection process.

    -
    -
    -
    -
    -block_number: int#
    -
    - -
    -
    -chain_state: MockChainState#
    -
    - -
    -
    -commit(wallet, netuid, data)[source]#
    -

    Commits arbitrary data to the Bittensor network by publishing metadata.

    -
    -
    Parameters:
    -
      -
    • wallet (bittensor_wallet.Wallet) – The wallet associated with the neuron committing the data.

    • -
    • netuid (int) – The unique identifier of the subnetwork.

    • -
    • data (str) – The data to be committed to the network.

    • -
    • period (Optional[int]) – The number of blocks during which the transaction will remain valid after it’s -submitted. If the transaction is not included in a block within that number of blocks, it will expire -and be rejected. You can think of it as an expiration date for the transaction.

    • -
    -
    -
    Returns:
    -

    True if the commitment was successful, False otherwise.

    -
    -
    Return type:
    -

    bool

    -
    -
    -
    - -
    -
    -create_subnet(netuid)[source]#
    -
    -
    Parameters:
    -

    netuid (int)

    -
    -
    Return type:
    -

    None

    -
    -
    -
    - -
    -
    -do_block_step()[source]#
    -
    -
    Return type:
    -

    None

    -
    -
    -
    - -
    -
    -do_serve_axon(wallet, call_params, wait_for_inclusion=False, wait_for_finalization=True)[source]#
    -
    -
    Parameters:
    -
    -
    -
    Return type:
    -

    tuple[bool, Optional[str]]

    -
    -
    -
    - -
    -
    -do_serve_prometheus(wallet, call_params, wait_for_inclusion=False, wait_for_finalization=True)[source]#
    -
    -
    Parameters:
    -
    -
    -
    Return type:
    -

    tuple[bool, Optional[str]]

    -
    -
    -
    - -
    -
    -do_set_weights(wallet, netuid, uids, vals, version_key, wait_for_inclusion=False, wait_for_finalization=True)[source]#
    -
    -
    Parameters:
    -
      -
    • wallet (bittensor_wallet.Wallet)

    • -
    • netuid (int)

    • -
    • uids (int)

    • -
    • vals (list[int])

    • -
    • version_key (int)

    • -
    • wait_for_inclusion (bool)

    • -
    • wait_for_finalization (bool)

    • -
    -
    -
    Return type:
    -

    tuple[bool, Optional[str]]

    -
    -
    -
    - -
    -
    -do_transfer(wallet, dest, transfer_balance, wait_for_inclusion=True, wait_for_finalization=False)[source]#
    -
    -
    Parameters:
    -
    -
    -
    Return type:
    -

    tuple[bool, Optional[str], Optional[str]]

    -
    -
    -
    - -
    -
    -force_register_neuron(netuid, hotkey, coldkey, stake=Balance(0), balance=Balance(0))#
    -

    Force register a neuron on the mock chain, returning the UID.

    -
    -
    Parameters:
    -
    -
    -
    Return type:
    -

    int

    -
    -
    -
    - -
    -
    -force_set_balance(ss58_address, balance=Balance(0))[source]#
    -
    -
    Returns:
    -

    (success, err_msg)

    -
    -
    Return type:
    -

    tuple[bool, Optional[str]]

    -
    -
    Parameters:
    -
    -
    -
    -
    - -
    -
    -get_balance(address, block=None)[source]#
    -

    Retrieves the balance for given coldkey.

    -
    -
    Parameters:
    -
      -
    • address (str) – coldkey address.

    • -
    • block (Optional[int]) – The blockchain block number for the query.

    • -
    -
    -
    Returns:
    -

    Balance object.

    -
    -
    Return type:
    -

    bittensor.utils.balance.Balance

    -
    -
    -
    - -
    -
    -get_block_hash(block=None)[source]#
    -
    -
    Retrieves the hash of a specific block on the Bittensor blockchain. The block hash is a unique identifier

    representing the cryptographic hash of the block’s content, ensuring its integrity and immutability.

    -
    -
    -
    -
    Parameters:
    -

    block (int) – The block number for which the hash is to be retrieved.

    -
    -
    Returns:
    -

    The cryptographic hash of the specified block.

    -
    -
    Return type:
    -

    str

    -
    -
    -
    -
    The block hash is a fundamental aspect of blockchain technology, providing a secure reference to each block’s

    data. It is crucial for verifying transactions, ensuring data consistency, and maintaining the -trustworthiness of the blockchain.

    -
    -
    -
    - -
    -
    -get_commitment(netuid, uid, block=None)[source]#
    -

    Retrieves the on-chain commitment for a specific neuron in the Bittensor network.

    -
    -
    Parameters:
    -
      -
    • netuid (int) – The unique identifier of the subnetwork.

    • -
    • uid (int) – The unique identifier of the neuron.

    • -
    • block (Optional[int]) – The block number to retrieve the commitment from. If None, the latest block is used. -Default is None.

    • -
    -
    -
    Returns:
    -

    The commitment data as a string.

    -
    -
    Return type:
    -

    str

    -
    -
    -
    - -
    -
    -get_current_block()[source]#
    -
    -
    Returns the current block number on the Bittensor blockchain. This function provides the latest block number,

    indicating the most recent state of the blockchain.

    -
    -
    -
    -
    Returns:
    -

    The current chain block number.

    -
    -
    Return type:
    -

    int

    -
    -
    -
    -
    Knowing the current block number is essential for querying real-time data and performing time-sensitive

    operations on the blockchain. It serves as a reference point for network activities and data -synchronization.

    -
    -
    -
    - -
    -
    -get_transfer_fee(wallet, dest, value)[source]#
    -
    -
    Calculates the transaction fee for transferring tokens from a wallet to a specified destination address. This

    function simulates the transfer to estimate the associated cost, taking into account the current network -conditions and transaction complexity.

    -
    -
    -
    -
    Parameters:
    -
      -
    • wallet (bittensor_wallet.Wallet) – The wallet from which the transfer is initiated.

    • -
    • dest (str) – The SS58 address of the destination account.

    • -
    • value (Union[bittensor.utils.balance.Balance, float, int]) – The amount of tokens to be transferred, -specified as a Balance object, or in Tao (float) or Rao (int) units.

    • -
    -
    -
    Returns:
    -

    -
    The estimated transaction fee for the transfer, represented as a Balance

    object.

    -
    -
    -

    -
    -
    Return type:
    -

    bittensor.utils.balance.Balance

    -
    -
    -
    -
    Estimating the transfer fee is essential for planning and executing token transactions, ensuring that the wallet

    has sufficient funds to cover both the transfer amount and the associated costs. This function provides a -crucial tool for managing financial operations within the Bittensor network.

    -
    -
    -
    - -
    -
    -static min_required_stake()[source]#
    -

    As the minimum required stake may change, this method allows us to dynamically -update the amount in the mock without updating the tests

    -
    - -
    -
    -neuron_for_uid(uid, netuid, block=None)[source]#
    -
    -
    Retrieves detailed information about a specific neuron identified by its unique identifier (UID) within a

    specified subnet (netuid) of the Bittensor network. This function provides a comprehensive view of a -neuron’s attributes, including its stake, rank, and operational status.

    -
    -
    -
    -
    Parameters:
    -
      -
    • uid (int) – The unique identifier of the neuron.

    • -
    • netuid (int) – The unique identifier of the subnet.

    • -
    • block (Optional[int]) – The blockchain block number for the query.

    • -
    -
    -
    Returns:
    -

    Detailed information about the neuron if found, a null neuron otherwise

    -
    -
    Return type:
    -

    Optional[bittensor.core.chain_data.NeuronInfo]

    -
    -
    -
    -
    This function is crucial for analyzing individual neurons’ contributions and status within a specific subnet,

    offering insights into their roles in the network’s consensus and validation mechanisms.

    -
    -
    -
    - -
    -
    -neuron_for_uid_lite(uid, netuid, block=None)[source]#
    -
    -
    Parameters:
    -
      -
    • uid (int)

    • -
    • netuid (int)

    • -
    • block (Optional[int])

    • -
    -
    -
    Return type:
    -

    Optional[bittensor.core.chain_data.NeuronInfoLite]

    -
    -
    -
    - -
    -
    -neurons(netuid, block=None)[source]#
    -

    Retrieves a list of all neurons within a specified subnet of the Bittensor network. -This function provides a snapshot of the subnet’s neuron population, including each neuron’s attributes and

    -
    -

    network interactions.

    -
    -
    -
    Parameters:
    -
      -
    • netuid (int) – The unique identifier of the subnet.

    • -
    • block (Optional[int]) – The blockchain block number for the query.

    • -
    -
    -
    Returns:
    -

    A list of NeuronInfo objects detailing each neuron’s characteristics in the subnet.

    -
    -
    Return type:
    -

    list[bittensor.core.chain_data.NeuronInfo]

    -
    -
    -
    -
    Understanding the distribution and status of neurons within a subnet is key to comprehending the network’s

    decentralized structure and the dynamics of its consensus and governance processes.

    -
    -
    -
    - -
    -
    -neurons_lite(netuid, block=None)[source]#
    -

    Retrieves a list of neurons in a ‘lite’ format from a specific subnet of the Bittensor network. -This function provides a streamlined view of the neurons, focusing on key attributes such as stake and network

    -
    -

    participation.

    -
    -
    -
    Parameters:
    -
      -
    • netuid (int) – The unique identifier of the subnet.

    • -
    • block (Optional[int]) – The blockchain block number for the query.

    • -
    -
    -
    Returns:
    -

    A list of simplified neuron information for the subnet.

    -
    -
    Return type:
    -

    list[bittensor.core.chain_data.NeuronInfoLite]

    -
    -
    -
    -
    This function offers a quick overview of the neuron population within a subnet, facilitating efficient analysis

    of the network’s decentralized structure and neuron dynamics.

    -
    -
    -
    - -
    -
    -query_constant(module_name, constant_name, block=None)[source]#
    -
    -
    Retrieves a constant from the specified module on the Bittensor blockchain. This function is used to access

    fixed parameters or values defined within the blockchain’s modules, which are essential for understanding -the network’s configuration and rules.

    -
    -
    -
    -
    Parameters:
    -
      -
    • module_name (str) – The name of the module containing the constant.

    • -
    • constant_name (str) – The name of the constant to retrieve.

    • -
    • block (Optional[int]) – The blockchain block number at which to query the constant.

    • -
    -
    -
    Returns:
    -

    The value of the constant if found, None otherwise.

    -
    -
    Return type:
    -

    Optional[async_substrate_interface.types.ScaleObj]

    -
    -
    -
    -
    Constants queried through this function can include critical network parameters such as inflation rates,

    consensus rules, or validation thresholds, providing a deeper understanding of the Bittensor network’s -operational parameters.

    -
    -
    -
    - -
    -
    -query_map_subtensor(name, block=None, params=None)[source]#
    -

    Note: Double map requires one param

    -
    -
    Parameters:
    -
    -
    -
    Return type:
    -

    Optional[MockMapResult]

    -
    -
    -
    - -
    -
    -query_subtensor(name, block=None, params=None)[source]#
    -
    -
    Queries named storage from the Subtensor module on the Bittensor blockchain. This function is used to retrieve

    specific data or parameters from the blockchain, such as stake, rank, or other neuron-specific attributes.

    -
    -
    -
    -
    Parameters:
    -
      -
    • name (str) – The name of the storage function to query.

    • -
    • block (Optional[int]) – The blockchain block number at which to perform the query.

    • -
    • params (Optional[list[object]]) – A list of parameters to pass to the query function.

    • -
    -
    -
    Returns:
    -

    An object containing the requested data.

    -
    -
    Return type:
    -

    query_response

    -
    -
    -
    -
    This query function is essential for accessing detailed information about the network and its neurons, providing

    valuable insights into the state and dynamics of the Bittensor ecosystem.

    -
    -
    -
    - -
    -
    -classmethod reset()[source]#
    -
    -
    Return type:
    -

    None

    -
    -
    -
    - -
    -
    -set_difficulty(netuid, difficulty)[source]#
    -
    -
    Parameters:
    -
      -
    • netuid (int)

    • -
    • difficulty (int)

    • -
    -
    -
    Return type:
    -

    None

    -
    -
    -
    - -
    -
    -setup()[source]#
    -
    -
    Return type:
    -

    None

    -
    -
    -
    - -
    -
    -sudo_force_set_balance#
    -
    - -
    - -
    -
    -class bittensor.utils.mock.subtensor_mock.MockSubtensorState[source]#
    -

    Bases: TypedDict

    -

    dict() -> new empty dictionary -dict(mapping) -> new dictionary initialized from a mapping object’s

    -
    -

    (key, value) pairs

    -
    -
    -
    dict(iterable) -> new dictionary initialized as if via:

    d = {} -for k, v in iterable:

    -
    -

    d[k] = v

    -
    -
    -
    dict(**kwargs) -> new dictionary initialized with the name=value pairs

    in the keyword argument list. For example: dict(one=1, two=2)

    -
    -
    -

    Initialize self. See help(type(self)) for accurate signature.

    -
    -
    -Active: dict[int, dict[BlockNumber, bool]]#
    -
    - -
    -
    -Delegates: dict[str, dict[int, float]]#
    -
    - -
    -
    -Difficulty: dict[int, dict[BlockNumber, int]]#
    -
    - -
    -
    -ImmunityPeriod: dict[int, dict[BlockNumber, int]]#
    -
    - -
    -
    -Kappa: dict[int, dict[BlockNumber, int]]#
    -
    - -
    -
    -NetworksAdded: dict[int, dict[BlockNumber, bool]]#
    -
    - -
    -
    -Rho: dict[int, dict[BlockNumber, int]]#
    -
    - -
    -
    -Stake: dict[str, dict[str, dict[int, int]]]#
    -
    - -
    -
    -ValidatorBatchSize: dict[int, dict[BlockNumber, int]]#
    -
    - -
    - -
    -
    -class bittensor.utils.mock.subtensor_mock.MockSubtensorValue[source]#
    -
    -
    -value: Any | None#
    -
    - -
    - -
    -
    -class bittensor.utils.mock.subtensor_mock.MockSystemState[source]#
    -

    Bases: TypedDict

    -

    dict() -> new empty dictionary -dict(mapping) -> new dictionary initialized from a mapping object’s

    -
    -

    (key, value) pairs

    -
    -
    -
    dict(iterable) -> new dictionary initialized as if via:

    d = {} -for k, v in iterable:

    -
    -

    d[k] = v

    -
    -
    -
    dict(**kwargs) -> new dictionary initialized with the name=value pairs

    in the keyword argument list. For example: dict(one=1, two=2)

    -
    -
    -

    Initialize self. See help(type(self)) for accurate signature.

    -
    -
    -Account: dict[str, dict[int, int]]#
    -
    - -
    - -
    -
    -class bittensor.utils.mock.subtensor_mock.PrometheusInfoDict[source]#
    -

    Bases: InfoDict

    -
    -
    -block: int#
    -
    - -
    -
    -classmethod default()[source]#
    -
    - -
    -
    -ip: int#
    -
    - -
    -
    -ip_type: int#
    -
    - -
    -
    -port: int#
    -
    - -
    -
    -version: int#
    -
    - -
    - -
    -
    -class bittensor.utils.mock.subtensor_mock.ReusableCoroutine(coroutine)[source]#
    -
    -
    -coroutine#
    -
    - -
    -
    -reset()[source]#
    -
    - -
    - -
    -
    - - -
    - - - - - - - - -
    - - - - -
    - - -
    -
    - - -
    - - -
    -
    -
    - - - - - -
    -
    - - \ No newline at end of file diff --git a/static/python-api/html/autoapi/bittensor/utils/networking/index.html b/static/python-api/html/autoapi/bittensor/utils/networking/index.html index 6c79152695..be61a44f82 100644 --- a/static/python-api/html/autoapi/bittensor/utils/networking/index.html +++ b/static/python-api/html/autoapi/bittensor/utils/networking/index.html @@ -49,7 +49,7 @@ - + @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -465,7 +468,7 @@

    Module Contents
    exception bittensor.utils.networking.ExternalIPNotFound[source]#
    -

    Bases: Exception

    +

    Bases: Exception

    Raised if we cannot attain your external ip from CURL/URLLIB/IPIFY/AWS

    Initialize self. See help(type(self)) for accurate signature.

    @@ -479,10 +482,10 @@

    Module Contents

    Your routers external facing ip as a string.

    Return type:
    -

    external_ip (str)

    +

    external_ip (str)

    Raises:
    -

    ExternalIPNotFound(Exception) – Raised if all external ip attempts fail.

    +

    ExternalIPNotFound(Exception) – Raised if all external ip attempts fail.

    @@ -493,17 +496,13 @@

    Module Contents
    Parameters:
    -

    endpoint_url (Optional[str]) – The endpoint url to format.

    +

    endpoint_url (Optional[str]) – The endpoint url to format.

    Returns:
    -

    -
    The formatted endpoint url. In the form of ws://<endpoint_url> or

    wss://<endpoint_url>

    -
    -
    -

    +

    The formatted endpoint url. In the form of ws://<endpoint_url> or wss://<endpoint_url>

    Return type:
    -

    formatted_endpoint_url (Optional[str])

    +

    formatted_endpoint_url

    Note: The port (or lack thereof) is left unchanged.

    @@ -515,13 +514,13 @@

    Module Contents
    Parameters:
    -

    int_val (int) – The integer representation of an ip. Must be in the range (0, 3.4028237e+38).

    +

    int_val (int) – The integer representation of an ip. Must be in the range (0, 3.4028237e+38).

    Returns:

    The string representation of an ip. Of form ..*.* for ipv4 or :::::* for ipv6

    Return type:
    -

    str_val (str)

    +

    str_val

    @@ -533,9 +532,9 @@

    Module Contents
    Parameters:
    @@ -547,13 +546,13 @@

    Module Contents
    Parameters:
    -

    str_val (str) – The string representation of an ip. Of form ..*.* for ipv4 or :::::* for ipv6

    +

    str_val (str) – The string representation of an ip. Of form ..*.* for ipv4 or :::::* for ipv6

    Returns:

    The integer representation of an ip. Must be in the range (0, 3.4028237e+38).

    Return type:
    -

    int_val (int)

    +

    int_val

    @@ -564,13 +563,13 @@

    Module Contents
    Parameters:
    -

    str_val (str) – The string representation of an ip. Of form ..*.* for ipv4 or :::::* for ipv6

    +

    str_val (str) – The string representation of an ip. Of form ..*.* for ipv4 or :::::* for ipv6

    Returns:

    The ip version (Either 4 or 6 for IPv4/IPv6)

    Return type:
    -

    int_val (int)

    +

    int_val

    @@ -590,12 +589,12 @@

    Module Contents

    previous

    -

    bittensor.utils.mock.subtensor_mock

    +

    bittensor.utils.liquidity

    bittensor.core.settings

  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -438,24 +441,24 @@

    Module Contents
    • subtensor (bittensor.core.async_subtensor.AsyncSubtensor) – The subtensor instance.

    • wallet (bittensor_wallet.Wallet) – The wallet to create a proof of work for.

    • -
    • netuid (int) – The netuid for the subnet to create a proof of work for.

    • -
    • output_in_place (bool) – If true, prints the progress of the proof of work to the console in-place. Meaning the -progress is printed on the same lines.

    • -
    • cuda (bool) – If true, uses CUDA to solve the proof of work.

    • -
    • dev_id (Union[list[int], int]) – The CUDA device id(s) to use. If cuda is true and dev_id is a list, then -multiple CUDA devices will be used to solve the proof of work.

    • -
    • tpb (int) – The number of threads per block to use when solving the proof of work. Should be a multiple of 32.

    • -
    • num_processes (int) – The number of processes to use when solving the proof of work. If None, then the number of +

    • netuid (int) – The netuid for the subnet to create a proof of work for.

    • +
    • output_in_place (bool) – If true, prints the progress of the proof of work to the console in-place. Meaning the progress +is printed on the same lines.

    • +
    • cuda (bool) – If true, uses CUDA to solve the proof of work.

    • +
    • dev_id (Union[list[int], int]) – The CUDA device id(s) to use. If cuda is true and dev_id is a list, then multiple CUDA devices will be +used to solve the proof of work.

    • +
    • tpb (int) – The number of threads per block to use when solving the proof of work. Should be a multiple of 32.

    • +
    • num_processes (int) – The number of processes to use when solving the proof of work. If None, then the number of processes is equal to the number of CPU cores.

    • -
    • update_interval (int) – The number of nonces to run before checking for a new block.

    • -
    • log_verbose (bool) – If true, prints the progress of the proof of work more verbosely.

    • +
    • update_interval (int) – The number of nonces to run before checking for a new block.

    • +
    • log_verbose (bool) – If true, prints the progress of the proof of work more verbosely.

    Returns:

    The proof of work solution or None if the wallet is already registered or there is a different error.

    Raises:
    -

    ValueError – If the subnet does not exist.

    +

    ValueError – If the subnet does not exist.

    Return type:

    bittensor.utils.registration.POWSolution

    diff --git a/static/python-api/html/autoapi/bittensor/utils/registration/index.html b/static/python-api/html/autoapi/bittensor/utils/registration/index.html index 5e7817aa86..107f1f9741 100644 --- a/static/python-api/html/autoapi/bittensor/utils/registration/index.html +++ b/static/python-api/html/autoapi/bittensor/utils/registration/index.html @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    diff --git a/static/python-api/html/autoapi/bittensor/utils/registration/pow/index.html b/static/python-api/html/autoapi/bittensor/utils/registration/pow/index.html index e5f64fe012..6359786132 100644 --- a/static/python-api/html/autoapi/bittensor/utils/registration/pow/index.html +++ b/static/python-api/html/autoapi/bittensor/utils/registration/pow/index.html @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -563,35 +566,35 @@

    Module Contents
    Parameters:
      -
    • proc_num (int) – The number of the process being created.

    • -
    • num_proc (int) – The total number of processes running.

    • -
    • update_interval (int) – The number of nonces to try to solve before checking for a new block.

    • -
    • finished_queue (multiprocessing.Queue) – The queue to put the process number when a process finishes each -update_interval. Used for calculating the average time per update_interval across all processes.

    • -
    • solution_queue (multiprocessing.Queue) – The queue to put the solution the process has found during the pow solve.

    • -
    • stopEvent (multiprocessing.Event) – The event to set by the main process when all the solver processes should -stop. The solver process will check for the event after each update_interval. The solver process will stop -when the event is set. Used to stop the solver processes when a solution is found.

    • -
    • curr_block (multiprocessing.Array) – The array containing this process’s current block hash. The main process -will set the array to the new block hash when a new block is finalized in the network. The solver process -will get the new block hash from this array when newBlockEvent is set.

    • -
    • curr_block_num (multiprocessing.Value) – The value containing this process’s current block number. The main -process will set the value to the new block number when a new block is finalized in the network. The -solver process will get the new block number from this value when newBlockEvent is set.

    • -
    • curr_diff (multiprocessing.Array) – The array containing this process’s current difficulty. The main process will -set the array to the new difficulty when a new block is finalized in the network. The solver process will -get the new difficulty from this array when newBlockEvent is set.

    • -
    • check_block (multiprocessing.Lock) – The lock to prevent this process from getting the new block data while the -main process is updating the data.

    • -
    • limit (int) – The limit of the pow solve for a valid solution.

    • -
    • dev_id (int)

    • -
    • tpb (int)

    • +
    • proc_num – The number of the process being created.

    • +
    • num_proc – The total number of processes running.

    • +
    • update_interval – The number of nonces to try to solve before checking for a new block.

    • +
    • finished_queue – The queue to put the process number when a process finishes each update_interval. Used for +calculating the average time per update_interval across all processes.

    • +
    • solution_queue – The queue to put the solution the process has found during the pow solve.

    • +
    • stopEvent – The event to set by the main process when all the solver processes should stop. The solver process +will check for the event after each update_interval. The solver process will stop when the event is set. +Used to stop the solver processes when a solution is found.

    • +
    • curr_block – The array containing this process’s current block hash. The main process will set the array to the +new block hash when a new block is finalized in the network. The solver process will get the new block hash +from this array when newBlockEvent is set.

    • +
    • curr_block_num – The value containing this process’s current block number. The main process will set the value to +the new block number when a new block is finalized in the network. The solver process will get the new block +number from this value when newBlockEvent is set.

    • +
    • curr_diff – The array containing this process’s current difficulty. The main process will set the array to the +new difficulty when a new block is finalized in the network. The solver process will get the new difficulty +from this array when newBlockEvent is set.

    • +
    • check_block – The lock to prevent this process from getting the new block data while the main process is updating +the data.

    • +
    • limit – The limit of the pow solve for a valid solution.

    • +
    • dev_id (int)

    • +
    • tpb (int)

    -dev_id: int#
    +dev_id: int#
    @@ -602,30 +605,30 @@

    Module Contents
    -tpb: int#
    +tpb: int#

    -class bittensor.utils.registration.pow.Console[source]#
    +class bittensor.utils.registration.pow.Console[source]#
    -static log(text)[source]#
    +static log(text)[source]#
    Parameters:
    -

    text (str)

    +

    text (str)

    -static status(status)[source]#
    +static status(status)[source]#
    Parameters:
    -

    status (str)

    +

    status (str)

    @@ -644,12 +647,12 @@

    Module Contents
    -block_number: int#
    +block_number: int#

    -difficulty: int#
    +difficulty: int#
    @@ -662,7 +665,7 @@

    Module Contents

    subtensor (bittensor.core.subtensor.Subtensor)

    Return type:
    -

    bool

    +

    bool

    @@ -677,19 +680,19 @@

    Module Contents

    subtensor (bittensor.core.async_subtensor.AsyncSubtensor)

    Return type:
    -

    bool

    +

    bool

    -nonce: int#
    +nonce: int#
    -seal: bytes#
    +seal: bytes#
    @@ -700,47 +703,47 @@

    Module Contents
    -block_hash: str#
    +block_hash: str#
    -block_number: int#
    +block_number: int#
    -difficulty: int#
    +difficulty: int#
    -hash_rate: float#
    +hash_rate: float#
    -hash_rate_perpetual: float#
    +hash_rate_perpetual: float#
    -rounds_total: int#
    +rounds_total: int#
    -time_average: float#
    +time_average: float#
    -time_spent: float#
    +time_spent: float#
    -time_spent_total: float#
    +time_spent_total: float#
    @@ -753,7 +756,7 @@

    Module ContentsParameters:
    @@ -770,11 +773,11 @@

    Module ContentsParameters:
    Return type:
    -

    str

    +

    str

    @@ -791,7 +794,7 @@

    Module Contents
    -status: Status | None#
    +status: Status | None#
    @@ -811,7 +814,7 @@

    Module ContentsParameters:
    Return type:
    @@ -830,27 +833,27 @@

    Module Contents
    Parameters:
      -
    • proc_num (int) – The number of the process being created.

    • -
    • num_proc (int) – The total number of processes running.

    • -
    • update_interval (int) – The number of nonces to try to solve before checking for a new block.

    • -
    • finished_queue (multiprocessing.Queue) – The queue to put the process number when a process finishes each -update_interval. Used for calculating the average time per update_interval across all processes.

    • -
    • solution_queue (multiprocessing.Queue) – The queue to put the solution the process has found during the pow solve.

    • -
    • stopEvent (multiprocessing.Event) – The event to set by the main process when all the solver processes should -stop. The solver process will check for the event after each update_interval. The solver process will stop -when the event is set. Used to stop the solver processes when a solution is found.

    • -
    • curr_block (multiprocessing.Array) – The array containing this process’s current block hash. The main process -will set the array to the new block hash when a new block is finalized in the network. The solver process -will get the new block hash from this array when newBlockEvent is set.

    • -
    • curr_block_num (multiprocessing.Value) – The value containing this process’s current block number. The main -process will set the value to the new block number when a new block is finalized in the network. The -solver process will get the new block number from this value when newBlockEvent is set.

    • -
    • curr_diff (multiprocessing.Array) – The array containing this process’s current difficulty. The main process will -set the array to the new difficulty when a new block is finalized in the network. The solver process will -get the new difficulty from this array when newBlockEvent is set.

    • -
    • check_block (multiprocessing.Lock) – The lock to prevent this process from getting the new block data while the -main process is updating the data.

    • -
    • limit (int) – The limit of the pow solve for a valid solution.

    • +
    • proc_num – The number of the process being created.

    • +
    • num_proc – The total number of processes running.

    • +
    • update_interval – The number of nonces to try to solve before checking for a new block.

    • +
    • finished_queue – The queue to put the process number when a process finishes each update_interval. Used for +calculating the average time per update_interval across all processes.

    • +
    • solution_queue – The queue to put the solution the process has found during the pow solve.

    • +
    • stopEvent – The event to set by the main process when all the solver processes should stop. The solver process +will check for the event after each update_interval. The solver process will stop when the event is set. +Used to stop the solver processes when a solution is found.

    • +
    • curr_block – The array containing this process’s current block hash. The main process will set the array to the +new block hash when a new block is finalized in the network. The solver process will get the new block hash +from this array when newBlockEvent is set.

    • +
    • curr_block_num – The value containing this process’s current block number. The main process will set the value to +the new block number when a new block is finalized in the network. The solver process will get the new block +number from this value when newBlockEvent is set.

    • +
    • curr_diff – The array containing this process’s current difficulty. The main process will set the array to the +new difficulty when a new block is finalized in the network. The solver process will get the new difficulty +from this array when newBlockEvent is set.

    • +
    • check_block – The lock to prevent this process from getting the new block data while the main process is updating +the data.

    • +
    • limit – The limit of the pow solve for a valid solution.

    @@ -864,28 +867,28 @@

    Module Contents
    -class bittensor.utils.registration.pow.Status(status)#
    +class bittensor.utils.registration.pow.Status(status)[source]#
    Parameters:
    -

    status (str)

    +

    status (str)

    -start()#
    +start()[source]#
    -stop()#
    +stop()[source]#
    -update(status)#
    +update(status)[source]#
    Parameters:
    -

    status (str)

    +

    status (str)

    @@ -897,7 +900,7 @@

    Module Contentsclass bittensor.utils.registration.pow.UsingSpawnStartMethod(force=False)[source]#
    Parameters:
    -

    force (bool)

    +

    force (bool)

    @@ -909,34 +912,29 @@

    Module Contents
    Parameters:
      -
    • subtensor (bittensor.core.subtensor.Subtensor) – The subtensor to create a proof of work for.

    • -
    • wallet (bittensor_wallet.Wallet) – The wallet to create a proof of work for.

    • -
    • netuid (int) – The netuid for the subnet to create a proof of work for.

    • -
    • output_in_place (bool) – If true, prints the progress of the proof of work to the console in-place. Meaning the -progress is printed on the same lines. Default is True.

    • -
    • cuda (bool) – If true, uses CUDA to solve the proof of work. Default is False.

    • -
    • dev_id (Union[List[int], int]) – The CUDA device id(s) to use. If cuda is true and dev_id is a list, then -multiple CUDA devices will be used to solve the proof of work. Default is 0.

    • -
    • tpb (int) – The number of threads per block to use when solving the proof of work. Should be a multiple of 32. -Default is 256.

    • -
    • num_processes (Optional[int]) – The number of processes to use when solving the proof of work. If None, then the -number of processes is equal to the number of CPU cores. Default is None.

    • -
    • update_interval (Optional[int]) – The number of nonces to run before checking for a new block. Default is None.

    • -
    • log_verbose (bool) – If true, prints the progress of the proof of work more verbosely. Default is False.

    • +
    • subtensor (bittensor.core.subtensor.Subtensor) – The Subtensor instance.

    • +
    • wallet (bittensor_wallet.Wallet) – The Bittensor Wallet instance.

    • +
    • netuid (int) – The netuid for the subnet to create a proof of work for.

    • +
    • output_in_place (bool) – If true, prints the progress of the proof of work to the console in-place. Meaning the progress +is printed on the same lines.

    • +
    • cuda (bool) – If true, uses CUDA to solve the proof of work.

    • +
    • dev_id (Union[list[int], int]) – The CUDA device id(s) to use. If cuda is true and dev_id is a list, then multiple CUDA devices will be +used to solve the proof of work.

    • +
    • tpb (int) – The number of threads per block to use when solving the proof of work. Should be a multiple of 32.

    • +
    • num_processes (Optional[int]) – The number of processes to use when solving the proof of work. If None, then the number of +processes is equal to the number of CPU cores.

    • +
    • update_interval (Optional[int]) – The number of nonces to run before checking for a new block.

    • +
    • log_verbose (bool) – If true, prints the progress of the proof of work more verbosely.

    Returns:
    -

    -
    The proof of work solution or None if the wallet is already registered or there is a

    different error.

    +

    The proof of work solution or None if the wallet is already registered or there is a different error.

    -
    -

    +
    Raises:
    +

    ValueError – If the subnet does not exist.

    -
    Return type:
    -

    Optional[Dict[str, Any]]

    -
    -
    Raises:
    -

    ValueError – If the subnet does not exist.

    +
    Return type:
    +

    Optional[POWSolution]

    @@ -947,7 +945,7 @@

    Module Contents
    Return type:
    -

    int

    +

    int

    @@ -958,13 +956,13 @@

    Module Contents
    Parameters:
    -

    func (function) – Function with numpy Input/Output to be decorated.

    +

    func – Function with numpy Input/Output to be decorated.

    Returns:

    Decorated function.

    Return type:
    -

    decorated (function)

    +

    decorated

    @@ -979,7 +977,7 @@

    Module Contentsbittensor.utils.registration.pow.terminate_workers_and_wait_for_exit(workers)[source]#
    Parameters:
    -

    workers (list[Union[multiprocessing.Process, multiprocessing.queues.Queue]])

    +

    workers (list[Union[multiprocessing.Process, multiprocessing.queues.Queue]])

    Return type:

    None

    @@ -1004,11 +1002,11 @@

    Module Contentsint) – The block number to set as the current block number.

  • -
  • block_bytes (bytes) – The block data bytes to be hashed with the hotkey.

  • -
  • diff (int) – The difficulty value to be packed into the current difficulty array.

  • -
  • hotkey_bytes (bytes) – The hotkey bytes used for hashing the block.

  • -
  • lock (multiprocessing.Lock) – A lock to ensure thread-safe updates.

  • +
  • block_number (int) – The block number to set as the current block number.

  • +
  • block_bytes (bytes) – The block data bytes to be hashed with the hotkey.

  • +
  • diff (int) – The difficulty value to be packed into the current difficulty array.

  • +
  • hotkey_bytes (bytes) – The hotkey bytes used for hashing the block.

  • +
  • lock (multiprocessing.Lock) – A lock to ensure thread-safe updates.

  • @@ -1020,7 +1018,7 @@

    Module Contents
    Return type:
    -

    bool

    +

    bool

    diff --git a/static/python-api/html/autoapi/bittensor/utils/registration/register_cuda/index.html b/static/python-api/html/autoapi/bittensor/utils/registration/register_cuda/index.html index 140896ff65..317245e2da 100644 --- a/static/python-api/html/autoapi/bittensor/utils/registration/register_cuda/index.html +++ b/static/python-api/html/autoapi/bittensor/utils/registration/register_cuda/index.html @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -443,7 +446,7 @@

    Module Contents
    Return type:
    -

    str

    +

    str

    @@ -463,22 +466,18 @@

    Module Contents
    Returns:
    -

    -
    Tuple of the nonce and the seal corresponding

    to the solution. Returns -1 for nonce if no solution is found.

    -
    -
    -

    +

    Tuple of the nonce and the seal corresponding to the solution. Returns -1 for nonce if no solution is found.

    Return type:
    -

    (Union[tuple[Any, bytes], tuple[int, bytes], tuple[Any, None]])

    +

    Union[tuple[Any, bytes], tuple[int, bytes], tuple[Any, None]]

    diff --git a/static/python-api/html/autoapi/bittensor/utils/subnets/index.html b/static/python-api/html/autoapi/bittensor/utils/subnets/index.html index e268b7e90b..ff651008e2 100644 --- a/static/python-api/html/autoapi/bittensor/utils/subnets/index.html +++ b/static/python-api/html/autoapi/bittensor/utils/subnets/index.html @@ -48,7 +48,7 @@ - + @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -438,7 +441,7 @@

    Module Contents
    class bittensor.utils.subnets.SubnetsAPI(wallet)[source]#
    -

    Bases: abc.ABC

    +

    Bases: abc.ABC

    This class is not used within the bittensor package, but is actively used by the community.

    Parameters:
    @@ -467,7 +470,7 @@

    Module Contents
    Parameters:
    -

    responses (list[Union[bittensor.core.synapse.Synapse, Any]])

    +

    responses (list[Union[bittensor.core.synapse.Synapse, Any]])

    Return type:

    Any

    @@ -482,9 +485,9 @@

    Module Contents
    Parameters:
      -
    • axons (Union[bt.axon, list[bt.axon]]) – The list of axon(s) to query.

    • -
    • deserialize (Optional[bool]) – Whether to deserialize the responses. Defaults to False.

    • -
    • timeout (Optional[int]) – The timeout in seconds for the query. Defaults to 12.

    • +
    • axons (Union[bittensor.core.axon.Axon, list[bittensor.core.axon.Axon]]) – The list of axon(s) to query.

    • +
    • deserialize (Optional[bool]) – Whether to deserialize the responses.

    • +
    • timeout (Optional[int]) – The timeout in seconds for the query.

    • **kwargs – Keyword arguments for the prepare_synapse_fn.

    @@ -528,11 +531,11 @@

    Module Contents

    next

    -

    bittensor.utils.substrate_utils

    +

    bittensor.utils.version

    diff --git a/static/python-api/html/autoapi/bittensor/utils/substrate_utils/storage/index.html b/static/python-api/html/autoapi/bittensor/utils/substrate_utils/storage/index.html deleted file mode 100644 index 2ad738c6bf..0000000000 --- a/static/python-api/html/autoapi/bittensor/utils/substrate_utils/storage/index.html +++ /dev/null @@ -1,737 +0,0 @@ - - - - - - - - - - - bittensor.utils.substrate_utils.storage — Bittensor SDK Docs documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - -
    - -
    - - - - - -
    -
    - - - - - - -
    - - - -
    - -
    -
    - -
    -
    - -
    - -
    - -
    - - -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - -
    -
    - - - - - - - - -
    - -
    -

    bittensor.utils.substrate_utils.storage#

    -
    -

    Classes#

    -
    - - - - - -

    StorageKey

    A StorageKey instance is a representation of a single state entry.

    -
    -
    -
    -

    Module Contents#

    -
    -
    -class bittensor.utils.substrate_utils.storage.StorageKey(pallet, storage_function, params, data, value_scale_type, metadata, runtime_config)[source]#
    -

    A StorageKey instance is a representation of a single state entry.

    -

    Substrate uses a simple key-value data store implemented as a database-backed, modified Merkle tree. -All of Substrate’s higher-level storage abstractions are built on top of this simple key-value store.

    -
    -
    Parameters:
    -
      -
    • pallet (Optional[str])

    • -
    • storage_function (Optional[str])

    • -
    • params (Optional[list])

    • -
    • data (Optional[bytes])

    • -
    • value_scale_type (Optional[str])

    • -
    • metadata (scalecodec.GenericMetadataVersioned)

    • -
    • runtime_config (scalecodec.base.RuntimeConfigurationObject)

    • -
    -
    -
    -
    -
    -convert_storage_parameter(scale_type, value)[source]#
    -
    -
    Parameters:
    -
      -
    • scale_type (str)

    • -
    • value (Any)

    • -
    -
    -
    -
    - -
    -
    -classmethod create_from_data(data, runtime_config, metadata, value_scale_type=None, pallet=None, storage_function=None)[source]#
    -

    Create a StorageKey instance providing raw storage key bytes

    -
    -
    Parameters:
    -
      -
    • data (bytes) – bytes representation of the storage key

    • -
    • runtime_config (scalecodec.base.RuntimeConfigurationObject) – RuntimeConfigurationObject

    • -
    • metadata (scalecodec.GenericMetadataVersioned) – GenericMetadataVersioned

    • -
    • value_scale_type (str) – type string of to decode result data

    • -
    • pallet (str) – name of pallet

    • -
    • storage_function (str) – name of storage function

    • -
    -
    -
    Returns:
    -

    StorageKey

    -
    -
    Return type:
    -

    StorageKey

    -
    -
    -
    - -
    -
    -classmethod create_from_storage_function(pallet, storage_function, params, runtime_config, metadata)[source]#
    -

    Create a StorageKey instance providing storage function details

    -
    -
    Parameters:
    -
      -
    • pallet (str) – name of pallet

    • -
    • storage_function (str) – name of storage function

    • -
    • params (list) – Optional list of parameters in case of a Mapped storage function

    • -
    • runtime_config (scalecodec.base.RuntimeConfigurationObject) – RuntimeConfigurationObject

    • -
    • metadata (scalecodec.GenericMetadataVersioned) – GenericMetadataVersioned

    • -
    -
    -
    Returns:
    -

    StorageKey

    -
    -
    Return type:
    -

    StorageKey

    -
    -
    -
    - -
    -
    -data#
    -
    - -
    -
    -decode_scale_value(data=None)[source]#
    -
    -
    Parameters:
    -

    data (Optional[scalecodec.ScaleBytes])

    -
    -
    Return type:
    -

    scalecodec.base.ScaleType

    -
    -
    -
    - -
    -
    -generate()[source]#
    -

    Generate a storage key for current specified pallet/function/params

    -
    -
    Return type:
    -

    bytes

    -
    -
    -
    - -
    -
    -metadata#
    -
    - -
    -
    -metadata_storage_function = None#
    -
    - -
    -
    -pallet#
    -
    - -
    -
    -params#
    -
    - -
    -
    -params_encoded = []#
    -
    - -
    -
    -runtime_config#
    -
    - -
    -
    -storage_function#
    -
    - -
    -
    -to_hex()[source]#
    -

    Returns a Hex-string representation of current StorageKey data

    -
    -
    Returns:
    -

    Hex string

    -
    -
    Return type:
    -

    Optional[str]

    -
    -
    -
    - -
    -
    -value_scale_type#
    -
    - -
    - -
    -
    - - -
    - - - - - - - - -
    - - - - - - - -
    -
    - - -
    - - -
    -
    -
    - - - - - -
    -
    - - \ No newline at end of file diff --git a/static/python-api/html/autoapi/bittensor/utils/version/index.html b/static/python-api/html/autoapi/bittensor/utils/version/index.html index b69af441cb..9ac19ad757 100644 --- a/static/python-api/html/autoapi/bittensor/utils/version/index.html +++ b/static/python-api/html/autoapi/bittensor/utils/version/index.html @@ -49,7 +49,7 @@ - + @@ -161,25 +161,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -406,7 +409,6 @@

    Contents

  • check_latest_version_in_pypi()
  • check_version()
  • get_and_save_latest_version()
  • -
  • version_checking()
  • @@ -457,9 +459,6 @@

    Functions

    get_and_save_latest_version([timeout])

    Retrieves and saves the latest version of Bittensor.

    -

    version_checking([timeout])

    -

    Deprecated, kept for backwards compatibility. Use check_version() instead.

    - @@ -473,8 +472,8 @@

    Module Contents
    -exception bittensor.utils.version.VersionCheckError[source]#
    -

    Bases: Exception

    +exception bittensor.utils.version.VersionCheckError# +

    Bases: Exception

    Exception raised for errors in the version check process.

    Initialize self. See help(type(self)) for accurate signature.

    @@ -487,40 +486,29 @@

    Module Contents
    -bittensor.utils.version.check_version(timeout=15)[source]#
    +bittensor.utils.version.check_version(timeout=15)#

    Check if the current version of Bittensor is up-to-date with the latest version on PyPi. Raises a VersionCheckError if the version check fails.

    Parameters:
    -

    timeout (int) – The timeout for the request to PyPI in seconds. Default is 15.

    +

    timeout (int) – The timeout for the request to PyPI in seconds.

    -bittensor.utils.version.get_and_save_latest_version(timeout=15)[source]#
    +bittensor.utils.version.get_and_save_latest_version(timeout=15)#

    Retrieves and saves the latest version of Bittensor.

    Parameters:
    -

    timeout (int) – The timeout for the request to PyPI in seconds. Default is 15.

    +

    timeout (int) – The timeout for the request to PyPI in seconds.

    Returns:

    The latest version of Bittensor.

    Return type:
    -

    str

    -
    -
    -
    - -
    -
    -bittensor.utils.version.version_checking(timeout=15)[source]#
    -

    Deprecated, kept for backwards compatibility. Use check_version() instead.

    -
    -
    Parameters:
    -

    timeout (int) – The timeout for calling :func:check_version function. Default is 15.

    +

    str

    @@ -540,12 +528,12 @@

    Module Contents

    previous

    -

    bittensor.utils.substrate_utils.storage

    +

    bittensor.utils.subnets

    Module Contentscheck_latest_version_in_pypi()
  • check_version()
  • get_and_save_latest_version()
  • -
  • version_checking()
  • diff --git a/static/python-api/html/autoapi/bittensor/utils/weight_utils/index.html b/static/python-api/html/autoapi/bittensor/utils/weight_utils/index.html index c1150fcbc7..4f271a92e6 100644 --- a/static/python-api/html/autoapi/bittensor/utils/weight_utils/index.html +++ b/static/python-api/html/autoapi/bittensor/utils/weight_utils/index.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -403,6 +406,7 @@

    Contents

  • U32_MAX
  • convert_and_normalize_weights_and_uids()
  • convert_bond_uids_and_vals_to_tensor()
  • +
  • convert_maybe_split_to_u16()
  • convert_root_weight_uids_and_vals_to_tensor()
  • convert_uids_and_weights()
  • convert_weight_uids_and_vals_to_tensor()
  • @@ -451,29 +455,32 @@

    Functions

    convert_bond_uids_and_vals_to_tensor(n, uids, bonds)

    Converts bond and uids from chain representation into a np.array.

    -

    convert_root_weight_uids_and_vals_to_tensor(n, uids, ...)

    +

    convert_maybe_split_to_u16(maybe_split)

    +

    + +

    convert_root_weight_uids_and_vals_to_tensor(n, uids, ...)

    Converts root weights and uids from chain representation into a np.array or torch FloatTensor

    -

    convert_uids_and_weights(uids, weights)

    +

    convert_uids_and_weights(uids, weights)

    Converts netuids and weights to numpy arrays if they are not already.

    -

    convert_weight_uids_and_vals_to_tensor(n, uids, weights)

    +

    convert_weight_uids_and_vals_to_tensor(n, uids, weights)

    Converts weights and uids from chain representation into a np.array (inverse operation from

    -

    convert_weights_and_uids_for_emit(uids, weights)

    +

    convert_weights_and_uids_for_emit(uids, weights)

    Converts weights into integer u32 representation that sum to MAX_INT_WEIGHT.

    -

    generate_weight_hash(address, netuid, uids, values, ...)

    +

    generate_weight_hash(address, netuid, uids, values, ...)

    Generate a valid commit hash from the provided weights.

    -

    normalize_max_weight(x[, limit])

    +

    normalize_max_weight(x[, limit])

    Normalizes the tensor x so that sum(x) = 1 and the max value is not greater than the limit.

    -

    process_weights(uids, weights, num_neurons, ...[, ...])

    -

    Processes weight tensors for a given weights and UID arrays and hyperparams, applying constraints

    +

    process_weights(uids, weights, num_neurons, ...[, ...])

    +

    Processes weight tensors for a given weights and UID arrays and hyperparams, applying constraints and normalization

    -

    process_weights_for_netuid(uids, weights, netuid, ...)

    -

    Processes weight tensors for a given subnet id using the provided weight and UID arrays, applying constraints

    +

    process_weights_for_netuid(uids, weights, netuid, ...)

    +

    Processes weight tensors for a given subnet id using the provided weight and UID arrays, applying constraints and

    @@ -493,14 +500,13 @@

    Module Contents
    -bittensor.utils.weight_utils.convert_and_normalize_weights_and_uids(uids, weights)#
    +bittensor.utils.weight_utils.convert_and_normalize_weights_and_uids(uids, weights)[source]#

    Converts weights and uids to numpy arrays if they are not already.

    Parameters:
      -
    • uids (Union[NDArray[np.int64], torch.LongTensor, list]) – The uint64 uids of destination neurons.

    • -
    • weights (Union[NDArray[np.float32], torch.FloatTensor, list]) – The weights to set. These must be float s -and correspond to the passed uid s.

    • +
    • uids (Union[numpy.typing.NDArray[numpy.int64], bittensor.utils.registration.torch.LongTensor, list]) – The uint64 uids of destination neurons.

    • +
    • weights (Union[numpy.typing.NDArray[numpy.float32], bittensor.utils.registration.torch.FloatTensor, list]) – The weights to set. These must be float s and correspond to the passed uid s.

    Returns:
    @@ -519,16 +525,29 @@

    Module Contents
    Parameters:
      -
    • n (int) – number of neurons on network.

    • -
    • uids (list[int]) – Tensor of uids as destinations for passed bonds.

    • -
    • bonds (list[int]) – Tensor of bonds.

    • +
    • n (int) – number of neurons on network.

    • +
    • uids (list[int]) – Tensor of uids as destinations for passed bonds.

    • +
    • bonds (list[int]) – Tensor of bonds.

    Returns:

    Converted row bonds.

    Return type:
    -

    row_bonds (np.float32)

    +

    Union[numpy.typing.NDArray[numpy.int64], bittensor.utils.registration.torch.LongTensor]

    +
    +

    +
    + +
    +
    +bittensor.utils.weight_utils.convert_maybe_split_to_u16(maybe_split)#
    +
    +
    Parameters:
    +

    maybe_split (bittensor.core.types.Weights)

    +
    +
    Return type:
    +

    list[int]

    @@ -541,37 +560,37 @@

    Module Contents
    Parameters:
      -
    • n (int) – number of neurons on network.

    • -
    • uids (list[int]) – Tensor of uids as destinations for passed weights.

    • -
    • weights (list[int]) – Tensor of weights.

    • -
    • subnets (list[int]) – list of subnets on the network.

    • +
    • n (int) – number of neurons on network.

    • +
    • uids (list[int]) – Tensor of uids as destinations for passed weights.

    • +
    • weights (list[int]) – Tensor of weights.

    • +
    • subnets (list[int]) – list of subnets on the network.

    Returns:

    Converted row weights.

    Return type:
    -

    row_weights (np.float32)

    +

    Union[numpy.typing.NDArray[numpy.float32], bittensor.utils.registration.torch.FloatTensor]

    -bittensor.utils.weight_utils.convert_uids_and_weights(uids, weights)#
    +bittensor.utils.weight_utils.convert_uids_and_weights(uids, weights)[source]#

    Converts netuids and weights to numpy arrays if they are not already.

    Parameters:
      -
    • uids (Union[NDArray[np.int64], list]) – The uint64 uids of destination neurons.

    • -
    • weights (Union[NDArray[np.float32], list]) – The weights to set. These must be floated.

    • +
    • uids (Union[numpy.typing.NDArray[numpy.int64], list]) – The uint64 uids of destination neurons.

    • +
    • weights (Union[numpy.typing.NDArray[numpy.float32], list]) – The weights to set. These must be floated.

    Returns:

    Bytes converted netuids and weights.

    Return type:
    -

    tuple[ndarray, ndarray]

    +

    tuple[ndarray, ndarray]

    @@ -584,16 +603,16 @@

    Module Contents
    Parameters:
      -
    • n (int) – number of neurons on network.

    • -
    • uids (list[int]) – Tensor of uids as destinations for passed weights.

    • -
    • weights (list[int]) – Tensor of weights.

    • +
    • n (int) – number of neurons on network.

    • +
    • uids (list[int]) – Tensor of uids as destinations for passed weights.

    • +
    • weights (list[int]) – Tensor of weights.

    Returns:

    Converted row weights.

    Return type:
    -

    row_weights (np.float32 or torch.FloatTensor)

    +

    Union[numpy.typing.NDArray[numpy.float32], bittensor.utils.registration.torch.FloatTensor]

    @@ -605,16 +624,16 @@

    Module Contents
    Parameters:
      -
    • uids (np.int64) – Tensor of uids as destinations for passed weights.

    • -
    • weights (np.float32) – Tensor of weights.

    • +
    • uids (Union[numpy.typing.NDArray[numpy.int64], bittensor.utils.registration.torch.LongTensor]) – Tensor of uids as destinations for passed weights.

    • +
    • weights (Union[numpy.typing.NDArray[numpy.float32], bittensor.utils.registration.torch.FloatTensor]) – Tensor of weights.

    Returns:

    Uids as a list. -weight_vals (list[int]): Weights as a list.

    +weight_vals: Weights as a list.

    Return type:
    -

    weight_uids (list[int])

    +

    weight_uids

    @@ -626,19 +645,19 @@

    Module Contents
    Parameters:
      -
    • address (str) – The account identifier. Wallet ss58_address.

    • -
    • netuid (int) – The network unique identifier.

    • -
    • uids (list[int]) – The list of UIDs.

    • -
    • salt (list[int]) – The salt to add to hash.

    • -
    • values (list[int]) – The list of weight values.

    • -
    • version_key (int) – The version key.

    • +
    • address (str) – The account identifier. Wallet ss58_address.

    • +
    • netuid (int) – The subnet unique identifier.

    • +
    • uids (list[int]) – The list of UIDs.

    • +
    • salt (list[int]) – The salt to add to hash.

    • +
    • values (list[int]) – The list of weight values.

    • +
    • version_key (int) – The version key.

    Returns:

    The generated commit hash.

    Return type:
    -

    str

    +

    str

    @@ -646,53 +665,45 @@

    Module Contents
    bittensor.utils.weight_utils.normalize_max_weight(x, limit=0.1)[source]#
    -

    Normalizes the tensor x so that sum(x) = 1 and the max value is not greater than the limit. -:param x: Tensor to be max_value normalized. -:type x: np.float32 -:param limit: float: Max value after normalization.

    +

    Normalizes the tensor x so that sum(x) = 1 and the max value is not greater than the limit.

    -
    Returns:
    -

    Normalized x tensor.

    -
    -
    Return type:
    -

    y (np.float32)

    -
    Parameters:
      -
    • x (Union[numpy.typing.NDArray[numpy.float32], bittensor.utils.registration.torch.FloatTensor])

    • -
    • limit (float)

    • +
    • x (Union[numpy.typing.NDArray[numpy.float32], bittensor.utils.registration.torch.FloatTensor]) – Tensor to be max_value normalized.

    • +
    • limit (float) – float: Max value after normalization.

    +
    Returns:
    +

    Normalized x tensor.

    +
    +
    Return type:
    +

    y

    +
    -bittensor.utils.weight_utils.process_weights(uids, weights, num_neurons, min_allowed_weights, max_weight_limit, exclude_quantile=0)#
    -

    Processes weight tensors for a given weights and UID arrays and hyperparams, applying constraints -and normalization based on the subtensor and metagraph data. This function can handle both NumPy arrays and PyTorch -tensors.

    +bittensor.utils.weight_utils.process_weights(uids, weights, num_neurons, min_allowed_weights, max_weight_limit, exclude_quantile=0)[source]# +

    Processes weight tensors for a given weights and UID arrays and hyperparams, applying constraints and normalization +based on the subtensor and metagraph data. This function can handle both NumPy arrays and PyTorch tensors.

    Parameters:
      -
    • uids (Union[NDArray[np.int64], "torch.Tensor"]) – Array of unique identifiers of the neurons.

    • -
    • weights (Union[NDArray[np.float32], "torch.Tensor"]) – Array of weights associated with the user IDs.

    • -
    • num_neurons (int) – The number of neurons in the network.

    • -
    • min_allowed_weights (Optional[int]) – Subnet hyperparam Minimum number of allowed weights.

    • -
    • max_weight_limit (Optional[float]) – Subnet hyperparam Maximum weight limit.

    • -
    • exclude_quantile (int) – Quantile threshold for excluding lower weights. Defaults to 0.

    • +
    • uids (Union[numpy.typing.NDArray[numpy.int64], bittensor.utils.registration.torch.Tensor]) – Array of unique identifiers of the neurons.

    • +
    • weights (Union[numpy.typing.NDArray[numpy.float32], bittensor.utils.registration.torch.Tensor]) – Array of weights associated with the user IDs.

    • +
    • num_neurons (int) – The number of neurons in the network.

    • +
    • min_allowed_weights (Optional[int]) – Subnet hyperparam Minimum number of allowed weights.

    • +
    • max_weight_limit (Optional[float]) – Subnet hyperparam Maximum weight limit.

    • +
    • exclude_quantile (int) – Quantile threshold for excluding lower weights.

    Returns:
    -

    -
    tuple

    containing the array of user IDs and the corresponding normalized weights. The data type of the return +

    Tuple containing the array of user IDs and the corresponding normalized weights. The data type of the return matches the type of the input weights (NumPy or PyTorch).

    -
    -

    -
    Return type:
    -

    Union[tuple[“torch.Tensor”, “torch.FloatTensor”], tuple[NDArray[np.int64], NDArray[np.float32]]]

    +

    Union[tuple[bittensor.utils.registration.torch.Tensor, bittensor.utils.registration.torch.FloatTensor], tuple[numpy.typing.NDArray[numpy.int64], numpy.typing.NDArray[numpy.float32]]]

    @@ -700,31 +711,27 @@

    Module Contents
    bittensor.utils.weight_utils.process_weights_for_netuid(uids, weights, netuid, subtensor, metagraph=None, exclude_quantile=0)[source]#
    -

    Processes weight tensors for a given subnet id using the provided weight and UID arrays, applying constraints -and normalization based on the subtensor and metagraph data. This function can handle both NumPy arrays and PyTorch +

    Processes weight tensors for a given subnet id using the provided weight and UID arrays, applying constraints and +normalization based on the subtensor and metagraph data. This function can handle both NumPy arrays and PyTorch tensors.

    Parameters:
      -
    • uids (Union[NDArray[np.int64], "torch.Tensor"]) – Array of unique identifiers of the neurons.

    • -
    • weights (Union[NDArray[np.float32], "torch.Tensor"]) – Array of weights associated with the user IDs.

    • -
    • netuid (int) – The network uid to process weights for.

    • -
    • subtensor (Subtensor) – Subtensor instance to access blockchain data.

    • -
    • metagraph (Optional[Metagraph]) – Metagraph instance for additional network data. If None, it is fetched from -the subtensor using the netuid.

    • -
    • exclude_quantile (int) – Quantile threshold for excluding lower weights. Defaults to 0.

    • +
    • uids (Union[numpy.typing.NDArray[numpy.int64], bittensor.utils.registration.torch.Tensor]) – Array of unique identifiers of the neurons.

    • +
    • weights (Union[numpy.typing.NDArray[numpy.float32], bittensor.utils.registration.torch.Tensor]) – Array of weights associated with the user IDs.

    • +
    • netuid (int) – The network uid to process weights for.

    • +
    • subtensor (bittensor.core.subtensor.Subtensor) – Subtensor instance to access blockchain data.

    • +
    • metagraph (Optional[bittensor.core.metagraph.Metagraph]) – Metagraph instance for additional network data. If None, it is fetched from the subtensor using the +netuid.

    • +
    • exclude_quantile (int) – Quantile threshold for excluding lower weights.

    Returns:
    -

    -
    tuple

    containing the array of user IDs and the corresponding normalized weights. The data type of the return +

    Tuple containing the array of user IDs and the corresponding normalized weights. The data type of the return matches the type of the input weights (NumPy or PyTorch).

    -
    -

    -
    Return type:
    -

    Union[tuple[“torch.Tensor”, “torch.FloatTensor”], tuple[NDArray[np.int64], NDArray[np.float32]]]

    +

    Union[tuple[bittensor.utils.registration.torch.Tensor, bittensor.utils.registration.torch.FloatTensor], tuple[numpy.typing.NDArray[numpy.int64], numpy.typing.NDArray[numpy.float32]]]

    @@ -776,6 +783,7 @@

    Module ContentsU32_MAX

  • convert_and_normalize_weights_and_uids()
  • convert_bond_uids_and_vals_to_tensor()
  • +
  • convert_maybe_split_to_u16()
  • convert_root_weight_uids_and_vals_to_tensor()
  • convert_uids_and_weights()
  • convert_weight_uids_and_vals_to_tensor()
  • diff --git a/static/python-api/html/autoapi/index.html b/static/python-api/html/autoapi/index.html index 696834415e..9f7630d45f 100644 --- a/static/python-api/html/autoapi/index.html +++ b/static/python-api/html/autoapi/index.html @@ -163,25 +163,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -413,6 +416,7 @@

    API Referencebittensor.core.chain_data

  • +
  • bittensor.extras +
  • bittensor.utils
  • bittensor.utils.easy_imports
  • bittensor.utils.formatting
  • -
  • bittensor.utils.mock -
  • +
  • bittensor.utils.liquidity
  • bittensor.utils.networking
  • bittensor.utils.registration diff --git a/static/python-api/html/genindex.html b/static/python-api/html/genindex.html index 97bafdcbdd..c7ffca9aac 100644 --- a/static/python-api/html/genindex.html +++ b/static/python-api/html/genindex.html @@ -160,25 +160,28 @@
  • bittensor.core.settings
  • bittensor.core.stream
  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api
  • bittensor.core.synapse
  • bittensor.core.tensor
  • bittensor.core.threadpool
  • -
  • bittensor.core.timelock
  • bittensor.core.types
  • +
  • bittensor.extras
    +
  • bittensor.utils
    @@ -360,7 +363,7 @@

    Index

    | U | V | W - | X + | Y

    _

    @@ -388,8 +391,24 @@

    _

    A

    - + - +
    +
  • ACTIVATE_SUBNET (in module bittensor.extras.dev_framework.utils) +
  • +
  • ActivateSubnet (class in bittensor.extras.dev_framework.utils) +
  • active (bittensor.core.chain_data.metagraph_info.MetagraphInfo attribute)
  • Active (bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex attribute) @@ -416,14 +439,14 @@

    A

  • (bittensor.core.metagraph.TorchMetagraph attribute)
  • -
  • Active (bittensor.utils.mock.subtensor_mock.MockSubtensorState attribute) -
  • activity_cutoff (bittensor.core.chain_data.metagraph_info.MetagraphInfo attribute)
  • ActivityCutoff (bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex attribute) @@ -431,26 +454,66 @@

    A

  • add_args() (bittensor.core.axon.Axon class method)
  • -
  • add_legacy_methods() (in module bittensor.core.subtensor_api.utils) +
  • add_legacy_methods() (in module bittensor.extras.subtensor_api.utils) +
  • +
  • add_liquidity (bittensor.extras.subtensor_api.extrinsics.Extrinsics attribute) +
  • +
  • ADD_LIQUIDITY (class in bittensor.extras.dev_framework.calls.non_sudo_calls) +
  • +
  • add_liquidity() (bittensor.core.async_subtensor.AsyncSubtensor method) + +
  • +
  • add_liquidity_extrinsic() (in module bittensor.core.extrinsics.asyncex.liquidity) + +
  • +
  • add_proxy (bittensor.extras.subtensor_api.proxy.Proxy attribute) +
  • +
  • ADD_PROXY (class in bittensor.extras.dev_framework.calls.non_sudo_calls) +
  • +
  • add_proxy() (bittensor.core.async_subtensor.AsyncSubtensor method) + +
  • +
  • add_proxy_extrinsic() (in module bittensor.core.extrinsics.asyncex.proxy) + +
  • +
  • add_stake (bittensor.extras.subtensor_api.extrinsics.Extrinsics attribute)
  • +
  • ADD_STAKE (class in bittensor.extras.dev_framework.calls.non_sudo_calls) +
  • add_stake() (bittensor.core.async_subtensor.AsyncSubtensor method)
  • @@ -460,10 +523,14 @@

    A

  • (in module bittensor.core.extrinsics.staking)
  • -
  • add_stake_multiple (bittensor.core.subtensor_api.extrinsics.Extrinsics attribute) +
  • ADD_STAKE_LIMIT (class in bittensor.extras.dev_framework.calls.non_sudo_calls) +
  • +
  • add_stake_limit() (bittensor.core.extrinsics.pallets.subtensor_module.SubtensorModule method) +
  • +
  • add_stake_multiple (bittensor.extras.subtensor_api.extrinsics.Extrinsics attribute)
  • add_stake_multiple() (bittensor.core.async_subtensor.AsyncSubtensor method) @@ -482,8 +549,14 @@

    A

  • +
  • address (bittensor.extras.dev_framework.calls.non_sudo_calls.WITHDRAW attribute) +
  • addresses (bittensor.core.metagraph.MetagraphMixin property)
  • adjustment_alpha (bittensor.core.chain_data.metagraph_info.MetagraphInfo attribute) @@ -492,6 +565,8 @@

    A

  • (bittensor.core.chain_data.metagraph_info.MetagraphInfoParams attribute)
  • (bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters attribute) +
  • +
  • (bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ADJUSTMENT_ALPHA attribute)
  • adjustment_interval (bittensor.core.chain_data.metagraph_info.MetagraphInfo attribute) @@ -500,12 +575,26 @@

    A

  • (bittensor.core.chain_data.metagraph_info.MetagraphInfoParams attribute)
  • (bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters attribute) +
  • +
  • (bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ADJUSTMENT_INTERVAL attribute)
  • AdjustmentAlpha (bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex attribute)
  • AdjustmentInterval (bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex attribute)
  • +
  • AdminUtils (class in bittensor.core.extrinsics.pallets.admin_utils) + +
  • +
  • after (bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE_AFTER attribute) + +
  • after_disable_debug() (bittensor.utils.btlogging.loggingmachine.LoggingMachine method)
  • after_disable_trace() (bittensor.utils.btlogging.loggingmachine.LoggingMachine method) @@ -528,32 +617,60 @@

    A

  • all_loggers() (in module bittensor.utils.btlogging.helpers)
  • -
  • all_subnets (bittensor.core.subtensor_api.subnets.Subnets attribute) +
  • all_subnets (bittensor.extras.subtensor_api.subnets.Subnets attribute)
  • all_subnets() (bittensor.core.async_subtensor.AsyncSubtensor method)
  • +
  • all_types() (bittensor.core.chain_data.proxy.ProxyType class method) +
  • +
  • allow_partial (bittensor.extras.dev_framework.calls.non_sudo_calls.ADD_STAKE_LIMIT attribute) + +
  • ALLOWED_DELTA (in module bittensor.utils.axon_utils)
  • -
  • alpha_out (bittensor.core.chain_data.dynamic_info.DynamicInfo attribute) @@ -596,6 +715,8 @@

    A

  • (bittensor.core.chain_data.metagraph_info.MetagraphInfoEmissions attribute)
  • +
  • alpha_sigmoid_steepness (bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters attribute) +
  • alpha_slippage (bittensor.core.chain_data.dynamic_info.DynamicInfo attribute)
  • alpha_stake (bittensor.core.chain_data.metagraph_info.MetagraphInfo attribute) @@ -629,8 +750,60 @@

    A

  • AlphaOutEmission (bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex attribute)
  • AlphaStake (bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex attribute) +
  • +
  • amount (bittensor.extras.dev_framework.calls.non_sudo_calls.BURN_ALPHA attribute) + +
  • +
  • amount_staked (bittensor.extras.dev_framework.calls.non_sudo_calls.ADD_STAKE attribute) + +
  • +
  • amount_unstaked (bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_STAKE attribute) + +
  • +
  • ANNOUNCE (class in bittensor.extras.dev_framework.calls.non_sudo_calls) +
  • +
  • announce() (bittensor.core.extrinsics.pallets.proxy.Proxy method) +
  • +
  • announce_extrinsic() (in module bittensor.core.extrinsics.asyncex.proxy) + +
  • +
  • announce_proxy (bittensor.extras.subtensor_api.proxy.Proxy attribute) +
  • +
  • announce_proxy() (bittensor.core.async_subtensor.AsyncSubtensor method) + +
  • +
  • AnnouncementDepositBase (bittensor.core.chain_data.proxy.ProxyConstants attribute) +
  • +
  • AnnouncementDepositFactor (bittensor.core.chain_data.proxy.ProxyConstants attribute) +
  • +
  • Any (bittensor.core.chain_data.proxy.ProxyType attribute)
  • app (bittensor.core.axon.Axon attribute) +
  • +
  • APPLY_AUTHORIZED_UPGRADE (class in bittensor.extras.dev_framework.calls.non_sudo_calls) +
  • +
  • apply_pure_proxy_data() (in module bittensor.core.extrinsics.utils) +
  • +
  • APPROVE_AS_MULTI (class in bittensor.extras.dev_framework.calls.non_sudo_calls)
  • aquery() (bittensor.core.dendrite.DendriteMixin method)
  • @@ -639,16 +812,54 @@

    A

  • ARCHIVE_ENTRYPOINT (in module bittensor.core.settings)
  • AS (bittensor.core.metagraph.MetagraphMixin property) +
  • +
  • AS_DERIVATIVE (class in bittensor.extras.dev_framework.calls.non_sudo_calls) +
  • +
  • as_dict() (bittensor.core.types.AxonServeCallParams method) + +
  • +
  • AS_MULTI (class in bittensor.extras.dev_framework.calls.non_sudo_calls) +
  • +
  • AS_MULTI_THRESHOLD_1 (class in bittensor.extras.dev_framework.calls.non_sudo_calls) +
  • +
  • as_origin (bittensor.extras.dev_framework.calls.non_sudo_calls.DISPATCH_AS attribute) + +
  • +
  • ASSOCIATE_EVM_KEY (class in bittensor.extras.dev_framework.calls.non_sudo_calls) +
  • +
  • async_execute_one() (bittensor.extras.dev_framework.subnet.TestSubnet method) +
  • +
  • async_execute_steps() (bittensor.extras.dev_framework.subnet.TestSubnet method)
  • async_metagraph() (in module bittensor.core.metagraph)
  • -
  • async_subtensor (in module bittensor.utils.easy_imports) +
  • async_set_hyperparameter() (bittensor.extras.dev_framework.subnet.TestSubnet method) +
  • +
  • async_wait_next_epoch() (bittensor.extras.dev_framework.subnet.TestSubnet method)
  • AsyncMetagraph (class in bittensor.core.metagraph)
  • AsyncSubtensor (class in bittensor.core.async_subtensor)
  • attach() (bittensor.core.axon.Axon method) +
  • +
  • authorization_list (bittensor.extras.dev_framework.calls.non_sudo_calls.CALL attribute) + +
  • +
  • AUTHORIZE_UPGRADE (class in bittensor.extras.dev_framework.calls.non_sudo_calls) +
  • +
  • AUTHORIZE_UPGRADE_WITHOUT_CHECKS (class in bittensor.extras.dev_framework.calls.non_sudo_calls)
  • axon (bittensor.core.axon.AxonMiddleware attribute) @@ -657,8 +868,6 @@

    A

  • Axon (class in bittensor.core.axon) -
  • -
  • axon (in module bittensor.utils.easy_imports)
  • axon_info (bittensor.core.chain_data.neuron_info.NeuronInfo attribute) @@ -672,8 +881,6 @@

    A

  • (class in bittensor.core.chain_data.axon_info)
  • -
  • AxonInfoDict (class in bittensor.utils.mock.subtensor_mock) -
  • AxonMiddleware (class in bittensor.core.axon)
  • axons (bittensor.core.chain_data.metagraph_info.MetagraphInfo attribute) @@ -695,12 +902,34 @@

    B

  • B (bittensor.core.metagraph.MetagraphMixin property)
  • Balance (class in bittensor.utils.balance) +
  • +
  • Balances (class in bittensor.core.extrinsics.pallets.balances) + +
  • +
  • BalanceTypeError +
  • +
  • BalanceUnitMismatchError
  • BASE_LOG_FORMAT (in module bittensor.utils.btlogging.defines)
  • BaseClass (in module bittensor.core.metagraph) +
  • +
  • BaseFee (in module bittensor.extras.dev_framework.calls.pallets)
  • BaseModel (in module bittensor.core.dendrite) +
  • +
  • BATCH (class in bittensor.extras.dev_framework.calls.non_sudo_calls) +
  • +
  • BATCH_ALL (class in bittensor.extras.dev_framework.calls.non_sudo_calls) +
  • +
  • BATCH_COMMIT_WEIGHTS (class in bittensor.extras.dev_framework.calls.non_sudo_calls) +
  • +
  • BATCH_REVEAL_WEIGHTS (class in bittensor.extras.dev_framework.calls.non_sudo_calls) +
  • +
  • BATCH_SET_WEIGHTS (class in bittensor.extras.dev_framework.calls.non_sudo_calls)
  • before_disable_debug() (bittensor.utils.btlogging.loggingmachine.LoggingMachine method)
  • @@ -721,6 +950,8 @@

    B

  • before_enable_warning() (bittensor.utils.btlogging.loggingmachine.LoggingMachine method)
  • before_transition() (bittensor.utils.btlogging.loggingmachine.LoggingMachine method) +
  • +
  • best_finalized_block_number (bittensor.extras.dev_framework.calls.non_sudo_calls.NOTE_STALLED attribute)
  • bits (bittensor.utils.balance.FixedPoint attribute)
  • @@ -771,6 +1002,13 @@

    B

    +
  • + bittensor.core.chain_data.crowdloan_info + +
  • @@ -841,6 +1079,20 @@

    B

  • +
  • + bittensor.core.chain_data.proxy + +
  • +
  • + bittensor.core.chain_data.root_claim + +
  • @@ -848,6 +1100,13 @@

    B

  • +
  • + bittensor.core.chain_data.sim_swap + +
  • @@ -935,10 +1194,31 @@

    B

  • - bittensor.core.extrinsics.asyncex.commit_reveal + bittensor.core.extrinsics.asyncex.children + +
  • +
  • + bittensor.core.extrinsics.asyncex.crowdloan + +
  • +
  • + bittensor.core.extrinsics.asyncex.liquidity + +
  • +
  • + bittensor.core.extrinsics.asyncex.mev_shield
  • @@ -946,6 +1226,13 @@

    B

  • +
  • + bittensor.core.extrinsics.asyncex.proxy + +
  • @@ -981,6 +1268,13 @@

    B

  • +
  • + bittensor.core.extrinsics.asyncex.sudo + +
  • @@ -1005,243 +1299,264 @@

    B

  • - bittensor.core.extrinsics.asyncex.weights + bittensor.core.extrinsics.asyncex.utils
  • - bittensor.core.extrinsics.commit_reveal + bittensor.core.extrinsics.asyncex.weights
  • - bittensor.core.extrinsics.commit_weights + bittensor.core.extrinsics.children
  • - bittensor.core.extrinsics.move_stake + bittensor.core.extrinsics.crowdloan
  • - bittensor.core.extrinsics.registration + bittensor.core.extrinsics.liquidity
  • - bittensor.core.extrinsics.root + bittensor.core.extrinsics.mev_shield
  • - bittensor.core.extrinsics.serving + bittensor.core.extrinsics.move_stake
  • - bittensor.core.extrinsics.set_weights + bittensor.core.extrinsics.pallets
  • - bittensor.core.extrinsics.staking + bittensor.core.extrinsics.pallets.admin_utils
  • - bittensor.core.extrinsics.start_call + bittensor.core.extrinsics.pallets.balances
  • - bittensor.core.extrinsics.take + bittensor.core.extrinsics.pallets.base
  • - bittensor.core.extrinsics.transfer + bittensor.core.extrinsics.pallets.commitments
  • - bittensor.core.extrinsics.unstaking + bittensor.core.extrinsics.pallets.crowdloan
  • - bittensor.core.extrinsics.utils + bittensor.core.extrinsics.pallets.mev_shield
  • - bittensor.core.metagraph + bittensor.core.extrinsics.pallets.proxy
  • - bittensor.core.settings + bittensor.core.extrinsics.pallets.subtensor_module
  • - bittensor.core.stream + bittensor.core.extrinsics.pallets.sudo
  • - bittensor.core.subtensor + bittensor.core.extrinsics.pallets.swap
  • - bittensor.core.subtensor_api + bittensor.core.extrinsics.proxy
  • - bittensor.core.subtensor_api.chain + bittensor.core.extrinsics.registration
  • - bittensor.core.subtensor_api.commitments + bittensor.core.extrinsics.root
  • - bittensor.core.subtensor_api.delegates + bittensor.core.extrinsics.serving
  • - bittensor.core.subtensor_api.extrinsics + bittensor.core.extrinsics.staking
  • -
    • - bittensor.core.subtensor_api.metagraphs + bittensor.core.extrinsics.start_call
    • - bittensor.core.subtensor_api.neurons + bittensor.core.extrinsics.sudo
    • - bittensor.core.subtensor_api.queries + bittensor.core.extrinsics.take
    • - bittensor.core.subtensor_api.staking + bittensor.core.extrinsics.transfer
    • - bittensor.core.subtensor_api.subnets + bittensor.core.extrinsics.unstaking
    • - bittensor.core.subtensor_api.utils + bittensor.core.extrinsics.utils
    • - bittensor.core.subtensor_api.wallets + bittensor.core.extrinsics.weights
    • - bittensor.core.synapse + bittensor.core.metagraph
    • +
    • - bittensor.core.tensor + bittensor.core.settings
    • - bittensor.core.threadpool + bittensor.core.stream
    • +
    • + bittensor.core.subtensor + +
    • +
    • + bittensor.core.synapse + +
    • +
    • + bittensor.core.tensor + +
    • - bittensor.core.timelock + bittensor.core.threadpool
    • @@ -1249,6 +1564,174 @@

      B

    • +
    • + bittensor.extras + +
    • +
    • + bittensor.extras.dev_framework + +
    • +
    • + bittensor.extras.dev_framework.calls + +
    • +
    • + bittensor.extras.dev_framework.calls.non_sudo_calls + +
    • +
    • + bittensor.extras.dev_framework.calls.pallets + +
    • +
    • + bittensor.extras.dev_framework.calls.sudo_calls + +
    • +
    • + bittensor.extras.dev_framework.subnet + +
    • +
    • + bittensor.extras.dev_framework.utils + +
    • +
    • + bittensor.extras.subtensor_api + +
    • +
    • + bittensor.extras.subtensor_api.chain + +
    • +
    • + bittensor.extras.subtensor_api.commitments + +
    • +
    • + bittensor.extras.subtensor_api.crowdloans + +
    • +
    • + bittensor.extras.subtensor_api.delegates + +
    • +
    • + bittensor.extras.subtensor_api.extrinsics + +
    • +
    • + bittensor.extras.subtensor_api.metagraphs + +
    • +
    • + bittensor.extras.subtensor_api.mev_shield + +
    • +
    • + bittensor.extras.subtensor_api.neurons + +
    • +
    • + bittensor.extras.subtensor_api.proxy + +
    • +
    • + bittensor.extras.subtensor_api.queries + +
    • +
    • + bittensor.extras.subtensor_api.staking + +
    • +
    • + bittensor.extras.subtensor_api.subnets + +
    • +
    • + bittensor.extras.subtensor_api.utils + +
    • +
    • + bittensor.extras.subtensor_api.wallets + +
    • +
    • + bittensor.extras.timelock + +
    • @@ -1305,6 +1788,13 @@

      B

    • +
    • + bittensor.utils.btlogging.levels + +
    • @@ -1329,17 +1819,10 @@

      B

  • - bittensor.utils.mock + bittensor.utils.liquidity
  • -
  • - bittensor.utils.mock.subtensor_mock - -
  • @@ -1382,27 +1865,6 @@

    B

  • -
  • - bittensor.utils.substrate_utils - -
  • -
  • - bittensor.utils.substrate_utils.hasher - -
  • -
  • - bittensor.utils.substrate_utils.storage - -
  • @@ -1428,12 +1890,6 @@

    B

  • blacklist_fns (bittensor.core.axon.Axon attribute)
  • BlacklistedException -
  • -
  • blake2_128() (in module bittensor.utils.substrate_utils.hasher) -
  • -
  • blake2_128_concat() (in module bittensor.utils.substrate_utils.hasher) -
  • -
  • blake2_256() (in module bittensor.utils.substrate_utils.hasher)
  • block (bittensor.core.async_subtensor.AsyncSubtensor property) @@ -1454,11 +1910,13 @@

    B

  • (bittensor.core.subtensor.Subtensor property)
  • -
  • (bittensor.core.subtensor_api.SubtensorApi property) +
  • (bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_RELEASE_DEPOSIT attribute) +
  • +
  • (bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_SLASH_DEPOSIT attribute)
  • -
  • (bittensor.utils.mock.subtensor_mock.AxonInfoDict attribute) +
  • (bittensor.extras.dev_framework.calls.non_sudo_calls.RELEASE_DEPOSIT attribute)
  • -
  • (bittensor.utils.mock.subtensor_mock.PrometheusInfoDict attribute) +
  • (bittensor.extras.subtensor_api.SubtensorApi property)
  • block_at_registration (bittensor.core.chain_data.metagraph_info.MetagraphInfo attribute) @@ -1471,9 +1929,13 @@

    B

  • block_hash (bittensor.utils.registration.pow.RegistrationStatistics attribute)
  • -
  • block_number (bittensor.utils.mock.subtensor_mock.MockSubtensor attribute) +
  • block_number (bittensor.extras.dev_framework.calls.non_sudo_calls.ASSOCIATE_EVM_KEY attribute)
  • BlockAtRegistration (bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex attribute)
  • -
  • BlockNotFound (in module bittensor.core.errors) +
  • BlockInfo (class in bittensor.core.types)
  • -
  • BlockNumber (in module bittensor.utils.mock.subtensor_mock) +
  • BlockNotFound (in module bittensor.core.errors)
  • blocks_since_epoch (bittensor.core.chain_data.subnet_info.SubnetInfo attribute)
  • @@ -1494,7 +1956,7 @@

    B

  • (bittensor.core.metagraph.MetagraphMixin attribute)
  • -
  • (bittensor.core.subtensor_api.subnets.Subnets attribute) +
  • (bittensor.extras.subtensor_api.subnets.Subnets attribute)
  • blocks_since_last_step() (bittensor.core.async_subtensor.AsyncSubtensor method) @@ -1503,12 +1965,20 @@

    B

  • (bittensor.core.subtensor.Subtensor method)
  • -
  • blocks_since_last_update (bittensor.core.subtensor_api.subnets.Subnets attribute) +
  • blocks_since_last_update (bittensor.extras.subtensor_api.subnets.Subnets attribute)
  • blocks_since_last_update() (bittensor.core.async_subtensor.AsyncSubtensor method)
  • +
  • blocks_until_next_epoch (bittensor.extras.subtensor_api.subnets.Subnets attribute) +
  • +
  • blocks_until_next_epoch() (bittensor.core.async_subtensor.AsyncSubtensor method) + +
  • BlocksSinceLastStep (bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex attribute) @@ -1528,7 +1998,7 @@

    B

  • (bittensor.core.metagraph.TorchMetagraph attribute)
  • -
  • (bittensor.core.subtensor_api.subnets.Subnets attribute) +
  • (bittensor.extras.subtensor_api.subnets.Subnets attribute)
  • bonds() (bittensor.core.async_subtensor.AsyncSubtensor method) @@ -1537,6 +2007,8 @@

    B

  • (bittensor.core.subtensor.Subtensor method)
  • +
  • bonds_moving_average (bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_BONDS_MOVING_AVERAGE attribute) +
  • bonds_moving_avg (bittensor.core.chain_data.metagraph_info.MetagraphInfo attribute)
  • +
  • bonds_penalty (bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_BONDS_PENALTY attribute) +
  • +
  • bonds_reset_enabled (bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters attribute) +
  • BondsMovingAvg (bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex attribute)
  • BrokenThreadPool +
  • +
  • BT_DOCS_LINK (in module bittensor.utils)
  • BtFileFormatter (class in bittensor.utils.btlogging.format)
  • @@ -1566,12 +2044,28 @@

    B

  • Burn (bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex attribute)
  • burn (bittensor.core.chain_data.subnet_info.SubnetInfo attribute) + +
  • +
  • BURN (class in bittensor.extras.dev_framework.calls.non_sudo_calls) +
  • +
  • BURN_ALPHA (class in bittensor.extras.dev_framework.calls.non_sudo_calls) +
  • +
  • burned_register (bittensor.extras.subtensor_api.extrinsics.Extrinsics attribute) + +
  • +
  • BURNED_REGISTER (class in bittensor.extras.dev_framework.calls.non_sudo_calls)
  • burned_register() (bittensor.core.async_subtensor.AsyncSubtensor method)
  • @@ -1581,6 +2075,8 @@

    B

  • (in module bittensor.core.extrinsics.registration)
  • +
  • bytes (bittensor.extras.dev_framework.calls.non_sudo_calls.NOTE_PREIMAGE attribute) +
  • @@ -1590,6 +2086,48 @@

    C

  • C (bittensor.core.metagraph.MetagraphMixin property)
  • calculate_diff_seconds() (in module bittensor.utils.axon_utils) +
  • +
  • calculate_fees() (in module bittensor.utils.liquidity) +
  • +
  • call (bittensor.core.chain_data.crowdloan_info.CrowdloanInfo attribute) + +
  • +
  • CALL (class in bittensor.extras.dev_framework.calls.non_sudo_calls) +
  • +
  • Call (in module bittensor.core.extrinsics.pallets.base)
  • call() (bittensor.core.dendrite.Dendrite method) @@ -1599,10 +2137,56 @@

    C

  • (in module bittensor.core.dendrite)
  • +
  • call_hash (bittensor.core.chain_data.proxy.ProxyAnnouncementInfo attribute) + +
  • +
  • CALL_RECORD (class in bittensor.extras.dev_framework.subnet) +
  • call_stream() (bittensor.core.dendrite.Dendrite method)
  • +
  • CallBuilder (class in bittensor.core.extrinsics.pallets.base) +
  • +
  • calls (bittensor.extras.dev_framework.calls.non_sudo_calls.BATCH attribute) + +
  • +
  • CANCEL (class in bittensor.extras.dev_framework.calls.non_sudo_calls) +
  • +
  • CANCEL_AS_MULTI (class in bittensor.extras.dev_framework.calls.non_sudo_calls) +
  • +
  • CANCEL_NAMED (class in bittensor.extras.dev_framework.calls.non_sudo_calls) +
  • +
  • CANCEL_RETRY (class in bittensor.extras.dev_framework.calls.non_sudo_calls) +
  • +
  • CANCEL_RETRY_NAMED (class in bittensor.extras.dev_framework.calls.non_sudo_calls) +
  • +
  • cap (bittensor.core.chain_data.crowdloan_info.CrowdloanInfo attribute) + +
  • cast_dtype() (in module bittensor.core.tensor) @@ -1614,22 +2198,26 @@

    C

  • cast_shape() (in module bittensor.core.tensor)
  • certificate (bittensor.core.types.AxonServeCallParams attribute) + +
  • Certificate (class in bittensor.utils)
  • -
  • chain (bittensor.core.subtensor_api.SubtensorApi property) +
  • chain (bittensor.extras.subtensor_api.SubtensorApi property)
  • -
  • Chain (class in bittensor.core.subtensor_api.chain) +
  • Chain (class in bittensor.extras.subtensor_api.chain)
  • chain_endpoint (bittensor.core.metagraph.MetagraphMixin attribute)
  • -
  • chain_state (bittensor.utils.mock.subtensor_mock.MockSubtensor attribute) +
  • chain_id (bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_EVM_CHAIN_ID attribute)
  • ChainConnectionError
  • @@ -1647,7 +2235,7 @@

    C

  • ChainTransactionError
  • -
  • check_and_convert_to_balance() (in module bittensor.utils.balance) +
  • check_balance_amount() (in module bittensor.utils.balance)
  • check_config() (bittensor.core.axon.Axon class method) @@ -1661,18 +2249,60 @@

    C

  • check_version() (in module bittensor.utils.version)
  • -
  • close (bittensor.core.subtensor_api.SubtensorApi attribute) +
  • ChildKeys (bittensor.core.chain_data.proxy.ProxyType attribute)
  • -
  • close() (bittensor.core.async_subtensor.AsyncSubtensor method) +
  • children (bittensor.extras.dev_framework.calls.non_sudo_calls.SET_CHILDREN attribute) +
  • +
  • claim_root (bittensor.extras.subtensor_api.extrinsics.Extrinsics attribute)
  • +
  • CLAIM_ROOT (class in bittensor.extras.dev_framework.calls.non_sudo_calls) +
  • +
  • claim_root() (bittensor.core.async_subtensor.AsyncSubtensor method) + +
  • +
  • claim_root_extrinsic() (in module bittensor.core.extrinsics.asyncex.root) + +
  • +
  • CLEAR_IDENTITY (class in bittensor.extras.dev_framework.calls.non_sudo_calls) +
  • +
  • close (bittensor.extras.subtensor_api.SubtensorApi attribute) +
  • +
  • close() (bittensor.core.async_subtensor.AsyncSubtensor method) + +
  • close_session() (bittensor.core.dendrite.Dendrite method)
  • +
  • code (bittensor.extras.dev_framework.calls.non_sudo_calls.APPLY_AUTHORIZED_UPGRADE attribute) + +
  • +
  • code_hash (bittensor.extras.dev_framework.calls.non_sudo_calls.AUTHORIZE_UPGRADE attribute) + +
  • coldkey (bittensor.core.chain_data.axon_info.AxonInfo attribute) @@ -1683,6 +2313,10 @@

    C

  • (bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite attribute)
  • (bittensor.core.types.AxonServeCallParams attribute) +
  • +
  • (bittensor.extras.dev_framework.calls.non_sudo_calls.DISSOLVE_NETWORK attribute) +
  • +
  • (bittensor.extras.dev_framework.calls.non_sudo_calls.REGISTER attribute)
  • coldkey_ss58 (bittensor.core.chain_data.stake_info.StakeInfo attribute) @@ -1699,18 +2333,40 @@

    C

  • color_map (in module bittensor.utils.btlogging.format)
  • -
  • commit() (bittensor.core.async_subtensor.AsyncSubtensor method) +
  • commit (bittensor.extras.dev_framework.calls.non_sudo_calls.COMMIT_CRV3_MECHANISM_WEIGHTS attribute)
  • +
  • commit_block (bittensor.core.chain_data.weight_commit_info.WeightCommitInfo attribute)
  • -
  • (bittensor.utils.mock.subtensor_mock.MockSubtensor method) +
  • COMMIT_CRV3_MECHANISM_WEIGHTS (class in bittensor.extras.dev_framework.calls.non_sudo_calls) +
  • +
  • commit_hash (bittensor.extras.dev_framework.calls.non_sudo_calls.COMMIT_MECHANISM_WEIGHTS attribute) + +
  • +
  • commit_hashes (bittensor.extras.dev_framework.calls.non_sudo_calls.BATCH_COMMIT_WEIGHTS attribute) +
  • commit_hex (bittensor.core.chain_data.weight_commit_info.WeightCommitInfo attribute)
  • -
  • commit_reveal_enabled (bittensor.core.subtensor_api.commitments.Commitments attribute) + + -
  • -
  • commit_weights (bittensor.core.subtensor_api.extrinsics.Extrinsics attribute) +
  • COMMIT_TIMELOCKED_MECHANISM_WEIGHTS (class in bittensor.extras.dev_framework.calls.non_sudo_calls) +
  • +
  • commit_timelocked_mechanism_weights() (bittensor.core.extrinsics.pallets.subtensor_module.SubtensorModule method) +
  • +
  • COMMIT_TIMELOCKED_WEIGHTS (class in bittensor.extras.dev_framework.calls.non_sudo_calls) +
  • +
  • commit_timelocked_weights_extrinsic() (in module bittensor.core.extrinsics.asyncex.weights) + +
  • +
  • commit_weights (bittensor.extras.subtensor_api.extrinsics.Extrinsics attribute) +
  • +
  • COMMIT_WEIGHTS (class in bittensor.extras.dev_framework.calls.non_sudo_calls)
  • commit_weights() (bittensor.core.async_subtensor.AsyncSubtensor method) @@ -1752,24 +2420,40 @@

    C

  • commit_weights_extrinsic() (in module bittensor.core.extrinsics.asyncex.weights)
  • -
  • commitments (bittensor.core.subtensor_api.SubtensorApi property) +
  • commitments (bittensor.core.chain_data.metagraph_info.MetagraphInfo attribute) +
  • +
  • Commitments (bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex attribute) +
  • +
  • commitments (bittensor.extras.subtensor_api.SubtensorApi property) +
  • +
  • Commitments (class in bittensor.core.extrinsics.pallets.commitments) + +
  • CommitRevealPeriod (bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex attribute)
  • CommitRevealWeightsEnabled (bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex attribute)
  • +
  • compose_call (bittensor.extras.subtensor_api.SubtensorApi attribute) +
  • +
  • compose_call() (bittensor.core.async_subtensor.AsyncSubtensor method) + +
  • computed_body_hash (bittensor.core.synapse.Synapse attribute)
  • -
  • config (bittensor.core.subtensor_api.SubtensorApi attribute) +
  • config (bittensor.extras.subtensor_api.SubtensorApi attribute)
  • Config (class in bittensor.core.config) -
  • -
  • config (in module bittensor.utils.easy_imports)
  • config() (bittensor.core.axon.Axon class method) @@ -1781,6 +2465,8 @@

    C

  • (bittensor.utils.btlogging.loggingmachine.LoggingMachine class method)
  • +
  • config_payload (bittensor.extras.dev_framework.calls.non_sudo_calls.SET_BEACON_CONFIG attribute) +
  • connection_requirements (bittensor.core.chain_data.subnet_info.SubnetInfo attribute)
  • consensus (bittensor.core.chain_data.metagraph_info.MetagraphInfo attribute) @@ -1808,38 +2494,108 @@

    C

  • Console (class in bittensor.utils.registration.pow) +
  • +
  • constants_names() (bittensor.core.chain_data.crowdloan_info.CrowdloanConstants class method) + +
  • +
  • CONTRIBUTE (class in bittensor.extras.dev_framework.calls.non_sudo_calls) +
  • +
  • contribute() (bittensor.core.extrinsics.pallets.crowdloan.Crowdloan method) +
  • +
  • contribute_crowdloan (bittensor.extras.subtensor_api.crowdloans.Crowdloans attribute) + +
  • +
  • contribute_crowdloan() (bittensor.core.async_subtensor.AsyncSubtensor method) + +
  • +
  • contribute_crowdloan_extrinsic() (in module bittensor.core.extrinsics.asyncex.crowdloan) + +
  • +
  • contributors_count (bittensor.core.chain_data.crowdloan_info.CrowdloanInfo attribute)
  • convert_and_normalize_weights_and_uids() (in module bittensor.utils.weight_utils)
  • convert_bond_uids_and_vals_to_tensor() (in module bittensor.utils.weight_utils)
  • -
  • convert_root_weight_uids_and_vals_to_tensor() (in module bittensor.utils.weight_utils) +
  • convert_maybe_split_to_u16() (in module bittensor.utils.weight_utils)
  • -
  • convert_storage_parameter() (bittensor.utils.substrate_utils.storage.StorageKey method) +
  • convert_root_weight_uids_and_vals_to_tensor() (in module bittensor.utils.weight_utils)
  • convert_uids_and_weights() (in module bittensor.utils.weight_utils)
  • convert_weight_uids_and_vals_to_tensor() (in module bittensor.utils.weight_utils)
  • convert_weights_and_uids_for_emit() (in module bittensor.utils.weight_utils) +
  • +
  • cooldown (bittensor.extras.dev_framework.calls.non_sudo_calls.SET_PENDING_CHILDKEY_COOLDOWN attribute)
  • copy() (bittensor.core.types.AxonServeCallParams method)
  • -
  • coroutine (bittensor.utils.mock.subtensor_mock.ReusableCoroutine attribute) +
  • CREATE (class in bittensor.extras.dev_framework.calls.non_sudo_calls), [1]
  • -
  • create_error_response() (in module bittensor.core.axon) +
  • create() (bittensor.core.extrinsics.pallets.crowdloan.Crowdloan method) +
  • +
  • CREATE2 (class in bittensor.extras.dev_framework.calls.non_sudo_calls) +
  • +
  • create_composed_call() (bittensor.core.extrinsics.pallets.base.CallBuilder method) +
  • +
  • create_crowdloan (bittensor.extras.subtensor_api.crowdloans.Crowdloans attribute) + +
  • +
  • create_crowdloan() (bittensor.core.async_subtensor.AsyncSubtensor method) + +
  • +
  • create_crowdloan_extrinsic() (in module bittensor.core.extrinsics.asyncex.crowdloan) + +
  • +
  • create_error_response() (in module bittensor.core.axon)
  • create_pow() (in module bittensor.utils.registration.pow)
  • create_pow_async() (in module bittensor.utils.registration.async_pow)
  • +
  • CREATE_PURE (class in bittensor.extras.dev_framework.calls.non_sudo_calls) +
  • +
  • create_pure() (bittensor.core.extrinsics.pallets.proxy.Proxy method) +
  • +
  • create_pure_proxy (bittensor.extras.subtensor_api.proxy.Proxy attribute) +
  • +
  • create_pure_proxy() (bittensor.core.async_subtensor.AsyncSubtensor method) + +
  • +
  • create_pure_proxy_extrinsic() (in module bittensor.core.extrinsics.asyncex.proxy) + +
  • create_streaming_response() (bittensor.core.stream.StreamingSynapse method)
  • -
  • create_subnet() (bittensor.utils.mock.subtensor_mock.MockSubtensor method) +
  • creator (bittensor.core.chain_data.crowdloan_info.CrowdloanInfo attribute)
  • critical() (bittensor.utils.btlogging.console.BittensorConsole method) @@ -1847,6 +2603,38 @@

    C

  • (bittensor.utils.btlogging.loggingmachine.LoggingMachine method)
  • +
  • Crowdloan (class in bittensor.core.extrinsics.pallets.crowdloan) + +
  • +
  • crowdloan_id (bittensor.extras.dev_framework.calls.non_sudo_calls.CONTRIBUTE attribute) + +
  • +
  • CrowdloanConstants (class in bittensor.core.chain_data.crowdloan_info) +
  • +
  • CrowdloanInfo (class in bittensor.core.chain_data.crowdloan_info) +
  • +
  • crowdloans (bittensor.extras.subtensor_api.SubtensorApi property) +
  • +
  • Crowdloans (class in bittensor.extras.subtensor_api.crowdloans) +
  • CUDASolver (class in bittensor.utils.registration.pow)
  • CUSTOM_LOGGER_METHOD_STACK_LEVEL (in module bittensor.utils.btlogging.loggingmachine) @@ -1859,7 +2647,7 @@

    D

  • Dendrite (class in bittensor.core.dendrite) -
  • -
  • dendrite (in module bittensor.utils.easy_imports)
  • DENDRITE_DEFAULT_ERROR (in module bittensor.core.dendrite)
  • DENDRITE_ERROR_MAPPING (in module bittensor.core.dendrite)
  • DendriteMixin (class in bittensor.core.dendrite) +
  • +
  • deposit (bittensor.core.chain_data.crowdloan_info.CrowdloanInfo attribute) + +
  • +
  • deprecated_message() (in module bittensor.utils)
  • deregister_primary_logger() (bittensor.utils.btlogging.loggingmachine.LoggingMachine method)
  • @@ -1983,17 +2791,51 @@

    D

    - - + +
  • direction (bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_ADJUST_TOTAL_ISSUANCE attribute) +
  • disable_debug (bittensor.utils.btlogging.loggingmachine.LoggingMachine attribute)
  • disable_info (bittensor.utils.btlogging.loggingmachine.LoggingMachine attribute) @@ -2048,6 +2888,10 @@

    D

  • disable_trace (bittensor.utils.btlogging.loggingmachine.LoggingMachine attribute)
  • disable_warning (bittensor.utils.btlogging.loggingmachine.LoggingMachine attribute) +
  • +
  • DISABLE_WHITELIST (class in bittensor.extras.dev_framework.calls.non_sudo_calls) +
  • +
  • disabled (bittensor.extras.dev_framework.calls.non_sudo_calls.DISABLE_WHITELIST attribute)
  • Disabled (bittensor.utils.btlogging.loggingmachine.LoggingMachine attribute)
  • @@ -2055,9 +2899,41 @@

    D

  • dispatch() (bittensor.core.axon.AxonMiddleware method) +
  • +
  • DISPATCH_AS (class in bittensor.extras.dev_framework.calls.non_sudo_calls) +
  • +
  • DISPATCH_AS_FALLIBLE (class in bittensor.extras.dev_framework.calls.non_sudo_calls) +
  • +
  • DISSOLVE (class in bittensor.extras.dev_framework.calls.non_sudo_calls) +
  • +
  • dissolve() (bittensor.core.extrinsics.pallets.crowdloan.Crowdloan method) +
  • +
  • dissolve_crowdloan (bittensor.extras.subtensor_api.crowdloans.Crowdloans attribute) + +
  • +
  • dissolve_crowdloan() (bittensor.core.async_subtensor.AsyncSubtensor method) + +
  • +
  • dissolve_crowdloan_extrinsic() (in module bittensor.core.extrinsics.asyncex.crowdloan) + +
  • +
  • DISSOLVE_NETWORK (class in bittensor.extras.dev_framework.calls.non_sudo_calls)
  • dividends (bittensor.core.chain_data.metagraph_info.MetagraphInfo attribute)
  • @@ -2077,23 +2953,7 @@

    D

  • (bittensor.core.metagraph.TorchMetagraph attribute)
  • -
  • do_block_step() (bittensor.utils.mock.subtensor_mock.MockSubtensor method) -
  • -
  • do_serve_axon() (bittensor.utils.mock.subtensor_mock.MockSubtensor method) - -
  • -
  • do_serve_prometheus() (bittensor.utils.mock.subtensor_mock.MockSubtensor method) -
  • -
  • do_set_weights() (bittensor.utils.mock.subtensor_mock.MockSubtensor method) -
  • -
  • do_transfer() (bittensor.utils.mock.subtensor_mock.MockSubtensor method) -
  • -
  • does_hotkey_exist (bittensor.core.subtensor_api.wallets.Wallets attribute) +
  • does_hotkey_exist (bittensor.extras.subtensor_api.wallets.Wallets attribute)
  • does_hotkey_exist() (bittensor.core.async_subtensor.AsyncSubtensor method) @@ -2102,6 +2962,8 @@

    D

  • drain (bittensor.core.chain_data.stake_info.StakeInfo attribute) +
  • +
  • Drand (in module bittensor.extras.dev_framework.calls.pallets)
  • dtype (bittensor.core.tensor.Tensor attribute)
  • @@ -2110,6 +2972,14 @@

    D

  • dtypes (in module bittensor.core.tensor)
  • DuplicateChild +
  • +
  • duration (bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_COLDKEY_SWAP_SCHEDULE_DURATION attribute) + +
  • +
  • dynamic_function (bittensor.core.extrinsics.pallets.base.CallBuilder attribute)
  • DynamicInfo (bittensor.core.chain_data.utils.ChainDataType attribute) @@ -2124,6 +2994,10 @@

    E

    - +
    @@ -2224,6 +3158,8 @@

    F

    + -
    +
  • FINALIZE (class in bittensor.extras.dev_framework.calls.non_sudo_calls) +
  • +
  • finalize() (bittensor.core.extrinsics.pallets.crowdloan.Crowdloan method) +
  • +
  • finalize_crowdloan (bittensor.extras.subtensor_api.crowdloans.Crowdloans attribute) + +
  • +
  • finalize_crowdloan() (bittensor.core.async_subtensor.AsyncSubtensor method) + +
  • +
  • finalize_crowdloan_extrinsic() (in module bittensor.core.extrinsics.asyncex.crowdloan) + +
  • +
  • finalized (bittensor.core.chain_data.crowdloan_info.CrowdloanInfo attribute) +
  • FINNEY_ENTRYPOINT (in module bittensor.core.settings)
  • FINNEY_TEST_ENTRYPOINT (in module bittensor.core.settings) @@ -2249,10 +3217,36 @@

    F

  • float_to_u64() (in module bittensor.utils)
  • -
  • force_register_neuron() (bittensor.utils.mock.subtensor_mock.MockSubtensor method) +
  • FORCE_ADJUST_TOTAL_ISSUANCE (class in bittensor.extras.dev_framework.calls.non_sudo_calls) +
  • +
  • FORCE_BATCH (class in bittensor.extras.dev_framework.calls.non_sudo_calls)
  • -
  • force_set_balance() (bittensor.utils.mock.subtensor_mock.MockSubtensor method) +
  • FORCE_ENTER (class in bittensor.extras.dev_framework.calls.non_sudo_calls)
  • +
  • FORCE_EXIT (class in bittensor.extras.dev_framework.calls.non_sudo_calls) +
  • +
  • FORCE_EXTEND (class in bittensor.extras.dev_framework.calls.non_sudo_calls) +
  • +
  • force_proxy_type (bittensor.extras.dev_framework.calls.non_sudo_calls.PROXY attribute) + +
  • +
  • FORCE_RELEASE_DEPOSIT (class in bittensor.extras.dev_framework.calls.non_sudo_calls) +
  • +
  • FORCE_SET_BALANCE (class in bittensor.extras.dev_framework.calls.non_sudo_calls) +
  • +
  • FORCE_SLASH_DEPOSIT (class in bittensor.extras.dev_framework.calls.non_sudo_calls) +
  • +
  • FORCE_TRANSFER (class in bittensor.extras.dev_framework.calls.non_sudo_calls) +
  • +
  • FORCE_UNRESERVE (class in bittensor.extras.dev_framework.calls.non_sudo_calls) +
  • +
  • forced (bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE_GRANDPA_CHANGE attribute) +
  • +
    @@ -2327,11 +3345,25 @@

    F

    G

    -
  • get_all_metagraphs_info (bittensor.core.subtensor_api.metagraphs.Metagraphs attribute) +
  • get_all_ema_tao_inflow (bittensor.extras.subtensor_api.subnets.Subnets attribute) +
  • +
  • get_all_ema_tao_inflow() (bittensor.core.async_subtensor.AsyncSubtensor method) + +
  • +
  • get_all_metagraphs_info (bittensor.extras.subtensor_api.metagraphs.Metagraphs attribute)
  • get_all_metagraphs_info() (bittensor.core.async_subtensor.AsyncSubtensor method) @@ -2347,7 +3387,7 @@

    G

  • (bittensor.core.subtensor.Subtensor method)
  • -
  • get_all_neuron_certificates (bittensor.core.subtensor_api.neurons.Neurons attribute) +
  • get_all_neuron_certificates (bittensor.extras.subtensor_api.neurons.Neurons attribute)
  • get_all_neuron_certificates() (bittensor.core.async_subtensor.AsyncSubtensor method) @@ -2355,7 +3395,7 @@

    G

  • (bittensor.core.subtensor.Subtensor method)
  • -
  • get_all_revealed_commitments (bittensor.core.subtensor_api.commitments.Commitments attribute) +
  • get_all_revealed_commitments (bittensor.extras.subtensor_api.commitments.Commitments attribute)
  • get_all_revealed_commitments() (bittensor.core.async_subtensor.AsyncSubtensor method) @@ -2363,29 +3403,43 @@

    G

  • (bittensor.core.subtensor.Subtensor method)
  • -
  • get_all_subnets_info (bittensor.core.subtensor_api.subnets.Subnets attribute) +
  • get_all_subnets_info (bittensor.extras.subtensor_api.subnets.Subnets attribute)
  • get_all_subnets_info() (bittensor.core.async_subtensor.AsyncSubtensor method)
  • +
  • get_all_subnets_netuid (bittensor.extras.subtensor_api.subnets.Subnets attribute) +
  • +
  • get_all_subnets_netuid() (bittensor.core.async_subtensor.AsyncSubtensor method) + +
  • get_and_save_latest_version() (in module bittensor.utils.version)
  • get_async_subtensor() (in module bittensor.core.async_subtensor)
  • -
  • get_balance (bittensor.core.subtensor_api.wallets.Wallets attribute) +
  • get_auto_stakes (bittensor.extras.subtensor_api.staking.Staking attribute) +
  • +
  • get_auto_stakes() (bittensor.core.async_subtensor.AsyncSubtensor method) + +
  • +
  • get_balance (bittensor.extras.subtensor_api.wallets.Wallets attribute)
  • get_balance() (bittensor.core.async_subtensor.AsyncSubtensor method)
  • -
  • get_balances (bittensor.core.subtensor_api.wallets.Wallets attribute) +
  • get_balances (bittensor.extras.subtensor_api.wallets.Wallets attribute)
  • get_balances() (bittensor.core.async_subtensor.AsyncSubtensor method) @@ -2393,20 +3447,28 @@

    G

  • (bittensor.core.subtensor.Subtensor method)
  • -
  • get_block_hash (bittensor.core.subtensor_api.chain.Chain attribute) +
  • get_block_hash (bittensor.extras.subtensor_api.chain.Chain attribute)
  • get_block_hash() (bittensor.core.async_subtensor.AsyncSubtensor method)
  • +
  • get_block_info (bittensor.extras.subtensor_api.chain.Chain attribute) +
  • +
  • get_block_info() (bittensor.core.async_subtensor.AsyncSubtensor method) + +
  • -
  • get_children (bittensor.core.subtensor_api.subnets.Subnets attribute) +
  • get_caller_name() (in module bittensor.utils) +
  • +
  • get_children (bittensor.extras.subtensor_api.subnets.Subnets attribute)
  • get_children() (bittensor.core.async_subtensor.AsyncSubtensor method) @@ -2415,10 +3477,10 @@

    G

  • (bittensor.core.subtensor.Subtensor method)
  • -
  • get_children_pending (bittensor.core.subtensor_api.subnets.Subnets attribute) +
  • get_children_pending (bittensor.extras.subtensor_api.subnets.Subnets attribute)
  • get_children_pending() (bittensor.core.async_subtensor.AsyncSubtensor method) @@ -2427,46 +3489,78 @@

    G

  • (bittensor.core.subtensor.Subtensor method)
  • -
  • get_commitment (bittensor.core.subtensor_api.commitments.Commitments attribute) +
  • get_commitment (bittensor.extras.subtensor_api.commitments.Commitments attribute)
  • get_commitment() (bittensor.core.async_subtensor.AsyncSubtensor method)
  • +
  • get_commitment_metadata (bittensor.extras.subtensor_api.commitments.Commitments attribute) +
  • +
  • get_commitment_metadata() (bittensor.core.async_subtensor.AsyncSubtensor method) + +
  • get_config() (bittensor.utils.btlogging.loggingmachine.LoggingMachine method)
  • get_cpu_count() (in module bittensor.utils.registration.pow)
  • -
  • get_current_block (bittensor.core.subtensor_api.chain.Chain attribute) +
  • get_crowdloan_by_id (bittensor.extras.subtensor_api.crowdloans.Crowdloans attribute)
  • -
  • get_current_block() (bittensor.core.async_subtensor.AsyncSubtensor method) +
  • get_crowdloan_by_id() (bittensor.core.async_subtensor.AsyncSubtensor method)
  • +
  • get_crowdloan_constants (bittensor.extras.subtensor_api.crowdloans.Crowdloans attribute) +
  • +
  • get_crowdloan_constants() (bittensor.core.async_subtensor.AsyncSubtensor method) + +
  • +
  • get_crowdloan_contributions (bittensor.extras.subtensor_api.crowdloans.Crowdloans attribute) +
  • +
  • get_crowdloan_contributions() (bittensor.core.async_subtensor.AsyncSubtensor method) + +
  • +
  • get_crowdloan_next_id (bittensor.extras.subtensor_api.crowdloans.Crowdloans attribute) +
  • +
  • get_crowdloan_next_id() (bittensor.core.async_subtensor.AsyncSubtensor method) + +
  • -
  • get_current_weight_commit_info (bittensor.core.subtensor_api.commitments.Commitments attribute) +
  • get_crowdloans (bittensor.extras.subtensor_api.crowdloans.Crowdloans attribute) +
  • +
  • get_crowdloans() (bittensor.core.async_subtensor.AsyncSubtensor method)
  • -
  • get_current_weight_commit_info() (bittensor.core.async_subtensor.AsyncSubtensor method) +
  • get_current_block (bittensor.extras.subtensor_api.chain.Chain attribute) +
  • +
  • get_current_block() (bittensor.core.async_subtensor.AsyncSubtensor method)
  • -
  • get_delegate_by_hotkey (bittensor.core.subtensor_api.delegates.Delegates attribute) +
  • get_delegate_by_hotkey (bittensor.extras.subtensor_api.delegates.Delegates attribute)
  • get_delegate_by_hotkey() (bittensor.core.async_subtensor.AsyncSubtensor method) @@ -2475,10 +3569,10 @@

    G

  • (bittensor.core.subtensor.Subtensor method)
  • -
  • get_delegate_identities (bittensor.core.subtensor_api.chain.Chain attribute) +
  • get_delegate_identities (bittensor.extras.subtensor_api.chain.Chain attribute)
  • get_delegate_identities() (bittensor.core.async_subtensor.AsyncSubtensor method) @@ -2487,10 +3581,10 @@

    G

  • (bittensor.core.subtensor.Subtensor method)
  • -
  • get_delegate_take (bittensor.core.subtensor_api.delegates.Delegates attribute) +
  • get_delegate_take (bittensor.extras.subtensor_api.delegates.Delegates attribute)
  • get_delegate_take() (bittensor.core.async_subtensor.AsyncSubtensor method) @@ -2499,10 +3593,10 @@

    G

  • (bittensor.core.subtensor.Subtensor method)
  • -
  • get_delegated (bittensor.core.subtensor_api.delegates.Delegates attribute) +
  • get_delegated (bittensor.extras.subtensor_api.delegates.Delegates attribute)
  • get_delegated() (bittensor.core.async_subtensor.AsyncSubtensor method) @@ -2511,7 +3605,7 @@

    G

  • (bittensor.core.subtensor.Subtensor method)
  • -
  • get_delegates (bittensor.core.subtensor_api.delegates.Delegates attribute) +
  • get_delegates (bittensor.extras.subtensor_api.delegates.Delegates attribute)
  • get_delegates() (bittensor.core.async_subtensor.AsyncSubtensor method) @@ -2519,7 +3613,17 @@

    G

  • (bittensor.core.subtensor.Subtensor method)
  • -
  • get_existential_deposit (bittensor.core.subtensor_api.chain.Chain attribute) +
  • get_ema_tao_inflow (bittensor.extras.subtensor_api.subnets.Subnets attribute) +
  • +
  • get_ema_tao_inflow() (bittensor.core.async_subtensor.AsyncSubtensor method) + +
  • +
  • get_event_data_by_event_name() (in module bittensor.core.extrinsics.utils) +
  • +
  • get_existential_deposit (bittensor.extras.subtensor_api.chain.Chain attribute)
  • get_existential_deposit() (bittensor.core.async_subtensor.AsyncSubtensor method) @@ -2530,12 +3634,26 @@

    G

  • get_explorer_url_for_network() (in module bittensor.utils)
  • get_external_ip() (in module bittensor.utils.networking) +
  • +
  • get_extrinsic_fee (bittensor.extras.subtensor_api.extrinsics.Extrinsics attribute) +
  • +
  • get_extrinsic_fee() (bittensor.core.async_subtensor.AsyncSubtensor method) + +
  • +
  • get_fees() (in module bittensor.utils.liquidity) +
  • +
  • get_fees_in_range() (in module bittensor.utils.liquidity)
  • get_formatted_ws_endpoint_url() (in module bittensor.utils.networking) +
  • +
  • get_function_name() (in module bittensor.utils)
  • get_hash() (in module bittensor.utils)
  • -
  • get_hotkey_owner (bittensor.core.subtensor_api.wallets.Wallets attribute) +
  • get_hotkey_owner (bittensor.extras.subtensor_api.wallets.Wallets attribute)
  • get_hotkey_owner() (bittensor.core.async_subtensor.AsyncSubtensor method) @@ -2548,32 +3666,68 @@

    G

  • get_human_readable() (in module bittensor.utils.formatting)
  • -
  • get_hyperparameter (bittensor.core.subtensor_api.subnets.Subnets attribute) +
  • get_hyperparameter (bittensor.extras.subtensor_api.subnets.Subnets attribute)
  • get_hyperparameter() (bittensor.core.async_subtensor.AsyncSubtensor method)
  • +
  • get_last_bonds_reset (bittensor.extras.subtensor_api.commitments.Commitments attribute) +
  • +
  • get_last_bonds_reset() (bittensor.core.async_subtensor.AsyncSubtensor method) + +
  • +
  • get_last_commitment_bonds_reset_block (bittensor.extras.subtensor_api.commitments.Commitments attribute) +
  • +
  • get_last_commitment_bonds_reset_block() (bittensor.core.async_subtensor.AsyncSubtensor method) + +
  • get_level() (bittensor.utils.btlogging.loggingmachine.LoggingMachine method)
  • +
  • get_liquidity_list (bittensor.extras.subtensor_api.subnets.Subnets attribute) +
  • +
  • get_liquidity_list() (bittensor.core.async_subtensor.AsyncSubtensor method) + +
  • get_max_logger_name_length() (in module bittensor.utils.btlogging.helpers)
  • -
  • get_metadata() (in module bittensor.core.extrinsics.asyncex.serving) +
  • get_mechanism_count (bittensor.extras.subtensor_api.subnets.Subnets attribute) +
  • +
  • get_mechanism_count() (bittensor.core.async_subtensor.AsyncSubtensor method) + +
  • +
  • get_mechanism_emission_split (bittensor.extras.subtensor_api.subnets.Subnets attribute) +
  • +
  • get_mechanism_emission_split() (bittensor.core.async_subtensor.AsyncSubtensor method)
  • -
  • get_metagraph_info (bittensor.core.subtensor_api.metagraphs.Metagraphs attribute) +
  • get_mechid_storage_index() (in module bittensor.utils) +
  • +
  • get_metagraph_info (bittensor.extras.subtensor_api.metagraphs.Metagraphs attribute)
  • get_metagraph_info() (bittensor.core.async_subtensor.AsyncSubtensor method) @@ -2581,23 +3735,59 @@

    G

  • (bittensor.core.subtensor.Subtensor method)
  • -
  • get_minimum_required_stake (bittensor.core.subtensor_api.chain.Chain attribute) +
  • get_mev_commitment_and_ciphertext() (in module bittensor.core.extrinsics.utils) +
  • +
  • get_mev_shield_current_key (bittensor.extras.subtensor_api.mev_shield.MevShield attribute) +
  • +
  • get_mev_shield_current_key() (bittensor.core.async_subtensor.AsyncSubtensor method)
  • +
  • get_mev_shield_next_key (bittensor.extras.subtensor_api.mev_shield.MevShield attribute)
  • -
  • (bittensor.core.subtensor_api.wallets.Wallets attribute) +
  • get_mev_shield_next_key() (bittensor.core.async_subtensor.AsyncSubtensor method) + +
  • -
  • get_minimum_required_stake() (bittensor.core.async_subtensor.AsyncSubtensor method) +
  • get_mev_shield_submission (bittensor.extras.subtensor_api.mev_shield.MevShield attribute) +
  • +
  • get_mev_shield_submission() (bittensor.core.async_subtensor.AsyncSubtensor method)
  • +
  • get_mev_shield_submissions (bittensor.extras.subtensor_api.mev_shield.MevShield attribute) +
  • +
  • get_mev_shield_submissions() (bittensor.core.async_subtensor.AsyncSubtensor method) + +
  • -
  • get_neuron_certificate (bittensor.core.subtensor_api.neurons.Neurons attribute) +
  • get_neuron_certificate (bittensor.extras.subtensor_api.neurons.Neurons attribute)
  • get_neuron_certificate() (bittensor.core.async_subtensor.AsyncSubtensor method) @@ -2613,7 +3803,7 @@

    G

  • (bittensor.core.subtensor.Subtensor method)
  • -
  • get_neuron_for_pubkey_and_subnet (bittensor.core.subtensor_api.subnets.Subnets attribute) +
  • get_neuron_for_pubkey_and_subnet (bittensor.extras.subtensor_api.subnets.Subnets attribute)
  • get_neuron_for_pubkey_and_subnet() (bittensor.core.async_subtensor.AsyncSubtensor method) @@ -2621,7 +3811,7 @@

    G

  • (bittensor.core.subtensor.Subtensor method)
  • -
  • get_next_epoch_start_block (bittensor.core.subtensor_api.subnets.Subnets attribute) +
  • get_next_epoch_start_block (bittensor.extras.subtensor_api.subnets.Subnets attribute)
  • get_next_epoch_start_block() (bittensor.core.async_subtensor.AsyncSubtensor method) @@ -2639,7 +3829,7 @@

    G

  • get_old_stakes() (in module bittensor.core.extrinsics.utils)
  • -
  • get_owned_hotkeys (bittensor.core.subtensor_api.wallets.Wallets attribute) +
  • get_owned_hotkeys (bittensor.extras.subtensor_api.wallets.Wallets attribute)
  • get_owned_hotkeys() (bittensor.core.async_subtensor.AsyncSubtensor method) @@ -2647,111 +3837,219 @@

    G

  • (bittensor.core.subtensor.Subtensor method)
  • -
  • get_queue() (bittensor.utils.btlogging.loggingmachine.LoggingMachine method) -
  • -
  • get_required_fields() (bittensor.core.synapse.Synapse method) -
  • -
  • get_revealed_commitment (bittensor.core.subtensor_api.commitments.Commitments attribute) -
  • -
  • get_revealed_commitment() (bittensor.core.async_subtensor.AsyncSubtensor method) +
  • get_parents (bittensor.extras.subtensor_api.subnets.Subnets attribute)
  • -
  • get_revealed_commitment_by_hotkey (bittensor.core.subtensor_api.commitments.Commitments attribute) -
  • -
  • get_revealed_commitment_by_hotkey() (bittensor.core.async_subtensor.AsyncSubtensor method) +
  • get_parents() (bittensor.core.async_subtensor.AsyncSubtensor method)
  • -
  • get_save_dir() (in module bittensor.core.metagraph) -
  • -
  • get_size() (in module bittensor.core.synapse) +
  • get_proxies (bittensor.extras.subtensor_api.proxy.Proxy attribute)
  • -
  • get_stake (bittensor.core.subtensor_api.staking.Staking attribute) +
  • get_proxies() (bittensor.core.async_subtensor.AsyncSubtensor method)
  • -
  • get_stake() (bittensor.core.async_subtensor.AsyncSubtensor method) +
  • get_proxies_for_real_account (bittensor.extras.subtensor_api.proxy.Proxy attribute) +
  • +
  • get_proxies_for_real_account() (bittensor.core.async_subtensor.AsyncSubtensor method)
  • -
  • get_stake_add_fee (bittensor.core.subtensor_api.staking.Staking attribute) +
  • get_proxy_announcement (bittensor.extras.subtensor_api.proxy.Proxy attribute) +
  • +
  • get_proxy_announcement() (bittensor.core.async_subtensor.AsyncSubtensor method)
  • -
  • get_stake_add_fee() (bittensor.core.async_subtensor.AsyncSubtensor method) +
  • get_proxy_announcements (bittensor.extras.subtensor_api.proxy.Proxy attribute) +
  • +
  • get_proxy_announcements() (bittensor.core.async_subtensor.AsyncSubtensor method)
  • -
  • get_stake_for_coldkey (bittensor.core.subtensor_api.staking.Staking attribute) +
  • get_proxy_constants (bittensor.extras.subtensor_api.proxy.Proxy attribute) +
  • +
  • get_proxy_constants() (bittensor.core.async_subtensor.AsyncSubtensor method)
  • -
  • get_stake_for_coldkey() (bittensor.core.async_subtensor.AsyncSubtensor method) +
  • get_queue() (bittensor.utils.btlogging.loggingmachine.LoggingMachine method) +
  • +
  • get_required_fields() (bittensor.core.synapse.Synapse method) +
  • +
  • get_revealed_commitment (bittensor.extras.subtensor_api.commitments.Commitments attribute) +
  • +
  • get_revealed_commitment() (bittensor.core.async_subtensor.AsyncSubtensor method)
  • -
  • get_stake_for_coldkey_and_hotkey (bittensor.core.subtensor_api.staking.Staking attribute) +
  • get_revealed_commitment_by_hotkey (bittensor.extras.subtensor_api.commitments.Commitments attribute) +
  • +
  • get_revealed_commitment_by_hotkey() (bittensor.core.async_subtensor.AsyncSubtensor method)
  • -
  • get_stake_for_coldkey_and_hotkey() (bittensor.core.async_subtensor.AsyncSubtensor method) +
  • get_root_alpha_dividends_per_subnet (bittensor.extras.subtensor_api.staking.Staking attribute) +
  • +
  • get_root_alpha_dividends_per_subnet() (bittensor.core.async_subtensor.AsyncSubtensor method)
  • -
  • get_stake_for_hotkey (bittensor.core.subtensor_api.wallets.Wallets attribute) +
  • get_root_claim_type (bittensor.extras.subtensor_api.staking.Staking attribute)
  • -
  • get_stake_for_hotkey() (bittensor.core.async_subtensor.AsyncSubtensor method) +
  • get_root_claim_type() (bittensor.core.async_subtensor.AsyncSubtensor method)
  • -
  • get_stake_info_for_coldkey (bittensor.core.async_subtensor.AsyncSubtensor attribute) +
  • get_root_claimable_all_rates (bittensor.extras.subtensor_api.staking.Staking attribute) +
  • +
  • get_root_claimable_all_rates() (bittensor.core.async_subtensor.AsyncSubtensor method)
  • +
  • get_root_claimable_rate (bittensor.extras.subtensor_api.staking.Staking attribute)
  • -
  • (bittensor.core.subtensor_api.wallets.Wallets attribute) +
  • get_root_claimable_rate() (bittensor.core.async_subtensor.AsyncSubtensor method) + +
  • -
  • get_stake_movement_fee (bittensor.core.subtensor_api.staking.Staking attribute) +
  • get_root_claimable_stake (bittensor.extras.subtensor_api.staking.Staking attribute) +
  • +
  • get_root_claimable_stake() (bittensor.core.async_subtensor.AsyncSubtensor method)
  • -
  • get_stake_movement_fee() (bittensor.core.async_subtensor.AsyncSubtensor method) +
  • get_root_claimed (bittensor.extras.subtensor_api.staking.Staking attribute) +
  • +
  • get_root_claimed() (bittensor.core.async_subtensor.AsyncSubtensor method)
  • -
  • get_status_message() (bittensor.utils.registration.pow.RegistrationStatisticsLogger class method) +
  • get_save_dir() (in module bittensor.core.metagraph)
  • -
  • get_subnet_burn_cost (bittensor.core.subtensor_api.subnets.Subnets attribute) +
  • get_selective_metagraph_commitments() (in module bittensor.core.chain_data.metagraph_info) +
  • +
  • get_size() (in module bittensor.core.synapse) +
  • +
  • get_stake (bittensor.extras.subtensor_api.staking.Staking attribute) + +
  • +
  • get_stake() (bittensor.core.async_subtensor.AsyncSubtensor method) + +
  • +
  • get_stake_add_fee (bittensor.extras.subtensor_api.staking.Staking attribute) + +
  • +
  • get_stake_add_fee() (bittensor.core.async_subtensor.AsyncSubtensor method) + +
  • +
  • get_stake_for_coldkey_and_hotkey (bittensor.extras.subtensor_api.staking.Staking attribute) + +
  • +
  • get_stake_for_coldkey_and_hotkey() (bittensor.core.async_subtensor.AsyncSubtensor method) + +
  • +
  • get_stake_for_hotkey (bittensor.extras.subtensor_api.wallets.Wallets attribute) +
  • +
  • get_stake_for_hotkey() (bittensor.core.async_subtensor.AsyncSubtensor method) + +
  • +
  • get_stake_info_for_coldkey (bittensor.extras.subtensor_api.staking.Staking attribute) + +
  • +
  • get_stake_info_for_coldkey() (bittensor.core.async_subtensor.AsyncSubtensor method) + +
  • +
  • get_stake_info_for_coldkeys (bittensor.extras.subtensor_api.staking.Staking attribute) +
  • +
  • get_stake_info_for_coldkeys() (bittensor.core.async_subtensor.AsyncSubtensor method) + +
  • +
  • get_stake_movement_fee (bittensor.extras.subtensor_api.staking.Staking attribute) + +
  • +
  • get_stake_movement_fee() (bittensor.core.async_subtensor.AsyncSubtensor method) + +
  • +
  • get_stake_weight (bittensor.extras.subtensor_api.staking.Staking attribute) +
  • +
  • get_stake_weight() (bittensor.core.async_subtensor.AsyncSubtensor method) + +
  • +
  • get_status_message() (bittensor.utils.registration.pow.RegistrationStatisticsLogger class method) +
  • +
  • get_subnet_burn_cost (bittensor.extras.subtensor_api.subnets.Subnets attribute)
  • get_subnet_burn_cost() (bittensor.core.async_subtensor.AsyncSubtensor method) @@ -2759,7 +4057,7 @@

    G

  • (bittensor.core.subtensor.Subtensor method)
  • -
  • get_subnet_hyperparameters (bittensor.core.subtensor_api.subnets.Subnets attribute) +
  • get_subnet_hyperparameters (bittensor.extras.subtensor_api.subnets.Subnets attribute)
  • get_subnet_hyperparameters() (bittensor.core.async_subtensor.AsyncSubtensor method) @@ -2767,7 +4065,15 @@

    G

  • (bittensor.core.subtensor.Subtensor method)
  • -
  • get_subnet_owner_hotkey (bittensor.core.subtensor_api.subnets.Subnets attribute) +
  • get_subnet_info (bittensor.extras.subtensor_api.subnets.Subnets attribute) +
  • +
  • get_subnet_info() (bittensor.core.async_subtensor.AsyncSubtensor method) + +
  • +
  • get_subnet_owner_hotkey (bittensor.extras.subtensor_api.subnets.Subnets attribute)
  • get_subnet_owner_hotkey() (bittensor.core.async_subtensor.AsyncSubtensor method) @@ -2775,7 +4081,23 @@

    G

  • (bittensor.core.subtensor.Subtensor method)
  • -
  • get_subnet_reveal_period_epochs (bittensor.core.subtensor_api.subnets.Subnets attribute) +
  • get_subnet_price (bittensor.extras.subtensor_api.subnets.Subnets attribute) +
  • +
  • get_subnet_price() (bittensor.core.async_subtensor.AsyncSubtensor method) + +
  • +
  • get_subnet_prices (bittensor.extras.subtensor_api.subnets.Subnets attribute) +
  • +
  • get_subnet_prices() (bittensor.core.async_subtensor.AsyncSubtensor method) + +
  • +
  • get_subnet_reveal_period_epochs (bittensor.extras.subtensor_api.subnets.Subnets attribute)
  • get_subnet_reveal_period_epochs() (bittensor.core.async_subtensor.AsyncSubtensor method) @@ -2783,7 +4105,7 @@

    G

  • (bittensor.core.subtensor.Subtensor method)
  • -
  • get_subnet_validator_permits (bittensor.core.subtensor_api.subnets.Subnets attribute) +
  • get_subnet_validator_permits (bittensor.extras.subtensor_api.subnets.Subnets attribute)
  • get_subnet_validator_permits() (bittensor.core.async_subtensor.AsyncSubtensor method) @@ -2791,15 +4113,15 @@

    G

  • (bittensor.core.subtensor.Subtensor method)
  • -
  • get_subnets (bittensor.core.subtensor_api.subnets.Subnets attribute) +
  • get_timelocked_weight_commits (bittensor.extras.subtensor_api.commitments.Commitments attribute)
  • -
  • get_subnets() (bittensor.core.async_subtensor.AsyncSubtensor method) +
  • get_timelocked_weight_commits() (bittensor.core.async_subtensor.AsyncSubtensor method)
  • -
  • get_timestamp (bittensor.core.subtensor_api.chain.Chain attribute) +
  • get_timestamp (bittensor.extras.subtensor_api.chain.Chain attribute)
  • get_timestamp() (bittensor.core.async_subtensor.AsyncSubtensor method) @@ -2809,7 +4131,7 @@

    G

  • get_total_size() (bittensor.core.synapse.Synapse method), [1]
  • -
  • get_total_subnets (bittensor.core.subtensor_api.subnets.Subnets attribute) +
  • get_total_subnets (bittensor.extras.subtensor_api.subnets.Subnets attribute)
  • get_total_subnets() (bittensor.core.async_subtensor.AsyncSubtensor method) @@ -2817,17 +4139,17 @@

    G

  • (bittensor.core.subtensor.Subtensor method)
  • -
  • get_transfer_fee (bittensor.core.subtensor_api.wallets.Wallets attribute) +
  • get_transfer_fee (bittensor.extras.subtensor_api.wallets.Wallets attribute)
  • get_transfer_fee() (bittensor.core.async_subtensor.AsyncSubtensor method)
  • -
  • get_uid_for_hotkey_on_subnet (bittensor.core.subtensor_api.subnets.Subnets attribute) +
  • get_transfer_fn_params() (in module bittensor.core.extrinsics.utils) +
  • +
  • get_uid_for_hotkey_on_subnet (bittensor.extras.subtensor_api.subnets.Subnets attribute)
  • get_uid_for_hotkey_on_subnet() (bittensor.core.async_subtensor.AsyncSubtensor method) @@ -2837,10 +4159,10 @@

    G

  • get_unit() (bittensor.utils.balance.Balance static method)
  • -
  • get_unstake_fee (bittensor.core.subtensor_api.staking.Staking attribute) +
  • get_unstake_fee (bittensor.extras.subtensor_api.staking.Staking attribute)
  • get_unstake_fee() (bittensor.core.async_subtensor.AsyncSubtensor method) @@ -2849,7 +4171,7 @@

    G

  • (bittensor.core.subtensor.Subtensor method)
  • -
  • get_vote_data (bittensor.core.subtensor_api.chain.Chain attribute) +
  • get_vote_data (bittensor.extras.subtensor_api.chain.Chain attribute)
  • get_vote_data() (bittensor.core.async_subtensor.AsyncSubtensor method) @@ -2860,6 +4182,18 @@

    G

  • github (bittensor.core.chain_data.chain_identity.ChainIdentity attribute)
  • github_repo (bittensor.core.chain_data.subnet_identity.SubnetIdentity attribute) + +
  • +
  • GLOBAL_MAX_SUBNET_COUNT (in module bittensor.utils) +
  • +
  • Governance (bittensor.core.chain_data.proxy.ProxyType attribute) +
  • +
  • Grandpa (in module bittensor.extras.dev_framework.calls.pallets)
  • @@ -2867,13 +4201,35 @@

    G

    H

    @@ -2929,6 +4347,28 @@

    I

    + -
  • hex_to_bytes (in module bittensor.utils) +
  • +
  • hex_to_ss58 (in module bittensor.utils)
  • HOME_DIR (in module bittensor.core.settings)
  • @@ -2897,6 +4255,66 @@

    H

  • (bittensor.core.synapse.TerminalInfo attribute)
  • (bittensor.core.types.AxonServeCallParams attribute) +
  • +
  • (bittensor.extras.dev_framework.calls.non_sudo_calls.ADD_LIQUIDITY attribute) +
  • +
  • (bittensor.extras.dev_framework.calls.non_sudo_calls.ADD_STAKE attribute) +
  • +
  • (bittensor.extras.dev_framework.calls.non_sudo_calls.ADD_STAKE_LIMIT attribute) +
  • +
  • (bittensor.extras.dev_framework.calls.non_sudo_calls.BURN_ALPHA attribute) +
  • +
  • (bittensor.extras.dev_framework.calls.non_sudo_calls.BURNED_REGISTER attribute) +
  • +
  • (bittensor.extras.dev_framework.calls.non_sudo_calls.DECREASE_TAKE attribute) +
  • +
  • (bittensor.extras.dev_framework.calls.non_sudo_calls.INCREASE_TAKE attribute) +
  • +
  • (bittensor.extras.dev_framework.calls.non_sudo_calls.MODIFY_POSITION attribute) +
  • +
  • (bittensor.extras.dev_framework.calls.non_sudo_calls.RECYCLE_ALPHA attribute) +
  • +
  • (bittensor.extras.dev_framework.calls.non_sudo_calls.REGISTER attribute) +
  • +
  • (bittensor.extras.dev_framework.calls.non_sudo_calls.REGISTER_NETWORK attribute) +
  • +
  • (bittensor.extras.dev_framework.calls.non_sudo_calls.REGISTER_NETWORK_WITH_IDENTITY attribute) +
  • +
  • (bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_LIQUIDITY attribute) +
  • +
  • (bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_STAKE attribute) +
  • +
  • (bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_STAKE_FULL_LIMIT attribute) +
  • +
  • (bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_STAKE_LIMIT attribute) +
  • +
  • (bittensor.extras.dev_framework.calls.non_sudo_calls.ROOT_REGISTER attribute) +
  • +
  • (bittensor.extras.dev_framework.calls.non_sudo_calls.SET_CHILDKEY_TAKE attribute) +
  • +
  • (bittensor.extras.dev_framework.calls.non_sudo_calls.SET_CHILDREN attribute) +
  • +
  • (bittensor.extras.dev_framework.calls.non_sudo_calls.SET_COLDKEY_AUTO_STAKE_HOTKEY attribute) +
  • +
  • (bittensor.extras.dev_framework.calls.non_sudo_calls.SWAP_HOTKEY attribute) +
  • +
  • (bittensor.extras.dev_framework.calls.non_sudo_calls.SWAP_STAKE attribute) +
  • +
  • (bittensor.extras.dev_framework.calls.non_sudo_calls.SWAP_STAKE_LIMIT attribute) +
  • +
  • (bittensor.extras.dev_framework.calls.non_sudo_calls.TERMINATE_LEASE attribute) +
  • +
  • (bittensor.extras.dev_framework.calls.non_sudo_calls.TRANSFER_STAKE attribute) +
  • +
  • (bittensor.extras.dev_framework.calls.non_sudo_calls.TRY_ASSOCIATE_HOTKEY attribute) +
  • +
  • (bittensor.extras.dev_framework.calls.non_sudo_calls.UNSTAKE_ALL attribute) +
  • +
  • (bittensor.extras.dev_framework.calls.non_sudo_calls.UNSTAKE_ALL_ALPHA attribute) +
  • +
  • (bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SN_OWNER_HOTKEY attribute) +
  • +
  • (bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SUBNET_OWNER_HOTKEY attribute)
  • immunity_period() (bittensor.core.async_subtensor.AsyncSubtensor method) @@ -2966,11 +4422,11 @@

    I

  • ImmunityPeriod (bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex attribute) - -
  • +
  • IMPORT_TEXT (in module bittensor.extras.dev_framework.calls) +
  • +
  • in_blocks (bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE_GRANDPA_CHANGE attribute) +
  • incentive (bittensor.core.chain_data.neuron_info.NeuronInfo attribute)
  • InfoBase (class in bittensor.core.chain_data.info_base)
  • -
  • InfoDict (class in bittensor.utils.mock.subtensor_mock) +
  • init (bittensor.extras.dev_framework.calls.non_sudo_calls.CREATE attribute) + +
  • +
  • initialize (bittensor.extras.subtensor_api.SubtensorApi attribute)
  • initialize() (bittensor.core.async_subtensor.AsyncSubtensor method) +
  • +
  • inner_subtensor (bittensor.extras.subtensor_api.SubtensorApi attribute) +
  • +
  • input (bittensor.extras.dev_framework.calls.non_sudo_calls.CALL attribute)
  • install_signal_handlers() (bittensor.core.axon.FastAPIThreadedServer method)
  • @@ -3025,6 +4503,14 @@

    I

  • InternalServerError
  • +
  • interval (bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_COMMIT_REVEAL_WEIGHTS_INTERVAL attribute) + +
  • +
    -
  • ip_version() (in module bittensor.utils.networking) @@ -3083,7 +4571,7 @@

    I

  • (class in bittensor.core.chain_data.ip_info)
  • -
  • is_async (bittensor.core.subtensor_api.SubtensorApi attribute) +
  • is_async (bittensor.extras.subtensor_api.SubtensorApi attribute)
  • is_blacklist (bittensor.core.synapse.Synapse property)
  • @@ -3093,7 +4581,7 @@

    I

  • is_failure (bittensor.core.synapse.Synapse property)
  • -
  • is_fast_blocks (bittensor.core.subtensor_api.chain.Chain attribute) +
  • is_fast_blocks (bittensor.extras.subtensor_api.chain.Chain attribute)
  • is_fast_blocks() (bittensor.core.async_subtensor.AsyncSubtensor method) @@ -3101,10 +4589,10 @@

    I

  • (bittensor.core.subtensor.Subtensor method)
  • -
  • is_hotkey_delegate (bittensor.core.subtensor_api.delegates.Delegates attribute) +
  • is_hotkey_delegate (bittensor.extras.subtensor_api.delegates.Delegates attribute)
  • is_hotkey_delegate() (bittensor.core.async_subtensor.AsyncSubtensor method) @@ -3113,7 +4601,7 @@

    I

  • (bittensor.core.subtensor.Subtensor method)
  • -
  • is_hotkey_registered (bittensor.core.subtensor_api.wallets.Wallets attribute) +
  • is_hotkey_registered (bittensor.extras.subtensor_api.wallets.Wallets attribute)
  • is_hotkey_registered() (bittensor.core.async_subtensor.AsyncSubtensor method) @@ -3121,7 +4609,7 @@

    I

  • (bittensor.core.subtensor.Subtensor method)
  • -
  • is_hotkey_registered_any (bittensor.core.subtensor_api.wallets.Wallets attribute) +
  • is_hotkey_registered_any (bittensor.extras.subtensor_api.wallets.Wallets attribute)
  • is_hotkey_registered_any() (bittensor.core.async_subtensor.AsyncSubtensor method) @@ -3129,14 +4617,28 @@

    I

  • (bittensor.core.subtensor.Subtensor method)
  • -
  • is_hotkey_registered_on_subnet (bittensor.core.subtensor_api.subnets.Subnets attribute) +
  • is_hotkey_registered_on_subnet (bittensor.extras.subtensor_api.subnets.Subnets attribute) + +
  • is_hotkey_registered_on_subnet() (bittensor.core.async_subtensor.AsyncSubtensor method)
  • +
  • is_in_admin_freeze_window (bittensor.extras.subtensor_api.chain.Chain attribute) +
  • +
  • is_in_admin_freeze_window() (bittensor.core.async_subtensor.AsyncSubtensor method) + +
  • +
  • is_instance_namedtuple() (in module bittensor.extras.dev_framework.utils) +
  • is_null (bittensor.core.chain_data.neuron_info.NeuronInfo attribute)
  • @@ -3187,19 +4693,59 @@

    K

  • Kappa (bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex attribute)
  • - - + @@ -3207,7 +4753,7 @@

    K

    L

  • LOCAL_ENTRYPOINT (in module bittensor.core.settings) +
  • +
  • lock_cost (bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_NETWORK_MIN_LOCK_COST attribute)
  • locked (bittensor.core.chain_data.stake_info.StakeInfo attribute)
  • @@ -3303,10 +4873,10 @@

    L

  • logger (bittensor.utils.btlogging.console.BittensorConsole attribute) @@ -3327,20 +4897,36 @@

    L

  • LoggingMachine (class in bittensor.utils.btlogging.loggingmachine)
  • +
  • logo_url (bittensor.core.chain_data.subnet_identity.SubnetIdentity attribute) + +
  • M

    +
  • max_fee_per_gas (bittensor.extras.dev_framework.calls.non_sudo_calls.CALL attribute) + +
  • max_n (bittensor.core.chain_data.subnet_info.SubnetInfo attribute) + +
  • +
  • max_priority_fee_per_gas (bittensor.extras.dev_framework.calls.non_sudo_calls.CALL attribute) + +
  • +
  • max_registrations_per_block (bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MAX_REGISTRATIONS_PER_BLOCK attribute)
  • max_regs_per_block (bittensor.core.chain_data.metagraph_info.MetagraphInfo attribute) @@ -3361,6 +4971,10 @@

    M

  • (bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters attribute)
  • +
  • max_subnets (bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SUBNET_LIMIT attribute) +
  • +
  • MAX_TICK (in module bittensor.utils.liquidity) +
  • max_uids (bittensor.core.chain_data.metagraph_info.MetagraphInfo attribute)
  • +
  • max_weight (bittensor.extras.dev_framework.calls.non_sudo_calls.APPROVE_AS_MULTI attribute) + +
  • max_weight_limit (bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters attribute) @@ -3380,7 +5000,7 @@

    M

  • max_weight_limit() (bittensor.core.async_subtensor.AsyncSubtensor method) @@ -3398,8 +5018,16 @@

    M

  • MaxAttemptsException
  • MaxBurn (bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex attribute) +
  • +
  • MaxContributors (bittensor.core.chain_data.crowdloan_info.CrowdloanConstants attribute)
  • MaxDifficulty (bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex attribute) +
  • +
  • MaximumBlockDuration (bittensor.core.chain_data.crowdloan_info.CrowdloanConstants attribute) +
  • +
  • MaxPending (bittensor.core.chain_data.proxy.ProxyConstants attribute) +
  • +
  • MaxProxies (bittensor.core.chain_data.proxy.ProxyConstants attribute)
  • MaxRegsPerBlock (bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex attribute)
  • @@ -3411,29 +5039,69 @@

    M

  • MaxWeightsLimit (bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex attribute)
  • +
  • maybe_periodic (bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE attribute) + +
  • +
  • maybe_split (bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MECHANISM_EMISSION_SPLIT attribute) +
  • +
  • maybe_timepoint (bittensor.extras.dev_framework.calls.non_sudo_calls.APPROVE_AS_MULTI attribute) + +
  • +
  • mechanism_count (bittensor.core.metagraph.MetagraphMixin attribute) + +
  • +
  • mechanisms_emissions_split (bittensor.core.metagraph.MetagraphMixin attribute) +
  • +
  • mechid (bittensor.core.chain_data.metagraph_info.MetagraphInfo attribute) + +
  • +
  • mecid (bittensor.extras.dev_framework.calls.non_sudo_calls.COMMIT_CRV3_MECHANISM_WEIGHTS attribute) + +
  • merge() (bittensor.core.config.Config method)
  • message (bittensor.core.errors.SynapseDendriteNoneException attribute)
  • -
  • metadata (bittensor.utils.substrate_utils.storage.StorageKey attribute) -
  • metadata() (bittensor.core.metagraph.MetagraphMixin method) -
  • -
  • metadata_storage_function (bittensor.utils.substrate_utils.storage.StorageKey attribute)
  • MetadataError
  • -
  • metagraph (bittensor.core.subtensor_api.metagraphs.Metagraphs attribute) +
  • metagraph (bittensor.extras.subtensor_api.metagraphs.Metagraphs attribute)
  • Metagraph (class in bittensor.core.metagraph) -
  • -
  • metagraph (in module bittensor.utils.easy_imports)
  • metagraph() (bittensor.core.async_subtensor.AsyncSubtensor method) @@ -3457,13 +5125,33 @@

    M

  • MetagraphMixin (class in bittensor.core.metagraph)
  • -
  • metagraphs (bittensor.core.subtensor_api.SubtensorApi property) +
  • metagraphs (bittensor.extras.subtensor_api.SubtensorApi property) +
  • +
  • Metagraphs (class in bittensor.extras.subtensor_api.metagraphs) +
  • +
  • mev_extrinsic (bittensor.core.types.ExtrinsicResponse attribute)
  • -
  • Metagraphs (class in bittensor.core.subtensor_api.metagraphs) +
  • mev_shield (bittensor.extras.subtensor_api.SubtensorApi property)
  • +
  • mev_submit_encrypted (bittensor.extras.subtensor_api.mev_shield.MevShield attribute) +
  • +
  • mev_submit_encrypted() (bittensor.core.async_subtensor.AsyncSubtensor method) + +
  • +
  • MevShield (class in bittensor.core.extrinsics.pallets.mev_shield) + +
  • middleware_cls (bittensor.core.axon.Axon attribute)
  • millify() (in module bittensor.utils.formatting) +
  • +
  • min_allowed_uids (bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MIN_ALLOWED_UIDS attribute)
  • min_allowed_weights (bittensor.core.chain_data.metagraph_info.MetagraphInfo attribute) @@ -3474,7 +5162,9 @@

    M

  • (bittensor.core.chain_data.subnet_info.SubnetInfo attribute)
  • -
  • (bittensor.core.subtensor_api.subnets.Subnets attribute) +
  • (bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MIN_ALLOWED_WEIGHTS attribute) +
  • +
  • (bittensor.extras.subtensor_api.subnets.Subnets attribute)
  • min_allowed_weights() (bittensor.core.async_subtensor.AsyncSubtensor method) @@ -3489,6 +5179,14 @@

    M

  • (bittensor.core.chain_data.metagraph_info.MetagraphInfoParams attribute)
  • (bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters attribute) +
  • +
  • (bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MIN_BURN attribute) +
  • + +
  • min_contribution (bittensor.core.chain_data.crowdloan_info.CrowdloanInfo attribute) + +
  • min_difficulty (bittensor.core.chain_data.metagraph_info.MetagraphInfo attribute) @@ -3497,9 +5195,17 @@

    M

  • (bittensor.core.chain_data.metagraph_info.MetagraphInfoParams attribute)
  • (bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters attribute) +
  • +
  • (bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MIN_DIFFICULTY attribute) +
  • + +
  • min_stake (bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_NOMINATOR_MIN_REQUIRED_STAKE attribute) + +
  • -
  • min_required_stake() (bittensor.utils.mock.subtensor_mock.MockSubtensor static method) +
  • MIN_TICK (in module bittensor.utils.liquidity)
  • MinAllowedWeights (bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex attribute)
  • @@ -3509,19 +5215,11 @@

    M

  • MINERS_DIR (in module bittensor.core.settings)
  • -
  • mock_subpackage (in module bittensor.utils.easy_imports) -
  • -
  • MockChainState (class in bittensor.utils.mock.subtensor_mock) -
  • -
  • MockMapResult (class in bittensor.utils.mock.subtensor_mock) -
  • -
  • MockSubtensor (class in bittensor.utils.mock.subtensor_mock) +
  • MinimumBlockDuration (bittensor.core.chain_data.crowdloan_info.CrowdloanConstants attribute)
  • -
  • MockSubtensorState (class in bittensor.utils.mock.subtensor_mock) +
  • MinimumDeposit (bittensor.core.chain_data.crowdloan_info.CrowdloanConstants attribute)
  • -
  • MockSubtensorValue (class in bittensor.utils.mock.subtensor_mock) -
  • -
  • MockSystemState (class in bittensor.utils.mock.subtensor_mock) +
  • MLKEM768_PUBLIC_KEY_SIZE (in module bittensor.core.settings)
  • modality (bittensor.core.chain_data.subnet_info.SubnetInfo attribute)
  • @@ -3535,6 +5233,24 @@

    M

  • (bittensor.core.tensor.Tensor attribute)
  • +
  • modify_liquidity (bittensor.extras.subtensor_api.extrinsics.Extrinsics attribute) +
  • +
  • modify_liquidity() (bittensor.core.async_subtensor.AsyncSubtensor method) + +
  • +
  • modify_liquidity_extrinsic() (in module bittensor.core.extrinsics.asyncex.liquidity) + +
  • +
  • MODIFY_POSITION (class in bittensor.extras.dev_framework.calls.non_sudo_calls) +
  • +
  • modify_position() (bittensor.core.extrinsics.pallets.swap.Swap method) +
  • module @@ -3552,6 +5268,8 @@

    M

  • bittensor.core.chain_data.axon_info
  • bittensor.core.chain_data.chain_identity +
  • +
  • bittensor.core.chain_data.crowdloan_info
  • bittensor.core.chain_data.delegate_info
  • @@ -3572,8 +5290,14 @@

    M

  • bittensor.core.chain_data.prometheus_info
  • bittensor.core.chain_data.proposal_vote_data +
  • +
  • bittensor.core.chain_data.proxy +
  • +
  • bittensor.core.chain_data.root_claim
  • bittensor.core.chain_data.scheduled_coldkey_swap_info +
  • +
  • bittensor.core.chain_data.sim_swap
  • bittensor.core.chain_data.stake_info
  • @@ -3599,9 +5323,17 @@

    M

  • bittensor.core.extrinsics.asyncex
  • -
  • bittensor.core.extrinsics.asyncex.commit_reveal +
  • bittensor.core.extrinsics.asyncex.children +
  • +
  • bittensor.core.extrinsics.asyncex.crowdloan +
  • +
  • bittensor.core.extrinsics.asyncex.liquidity +
  • +
  • bittensor.core.extrinsics.asyncex.mev_shield
  • bittensor.core.extrinsics.asyncex.move_stake +
  • +
  • bittensor.core.extrinsics.asyncex.proxy
  • bittensor.core.extrinsics.asyncex.registration
  • @@ -3612,32 +5344,64 @@

    M

  • bittensor.core.extrinsics.asyncex.staking
  • bittensor.core.extrinsics.asyncex.start_call +
  • +
  • bittensor.core.extrinsics.asyncex.sudo
  • bittensor.core.extrinsics.asyncex.take
  • bittensor.core.extrinsics.asyncex.transfer
  • bittensor.core.extrinsics.asyncex.unstaking +
  • +
  • bittensor.core.extrinsics.asyncex.utils
  • bittensor.core.extrinsics.asyncex.weights
  • -
  • bittensor.core.extrinsics.commit_reveal +
  • bittensor.core.extrinsics.children +
  • +
  • bittensor.core.extrinsics.crowdloan +
  • +
  • bittensor.core.extrinsics.liquidity
  • -
  • bittensor.core.extrinsics.commit_weights +
  • bittensor.core.extrinsics.mev_shield
  • bittensor.core.extrinsics.move_stake +
  • +
  • bittensor.core.extrinsics.pallets +
  • +
  • bittensor.core.extrinsics.pallets.admin_utils +
  • +
  • bittensor.core.extrinsics.pallets.balances +
  • +
  • bittensor.core.extrinsics.pallets.base +
  • +
  • bittensor.core.extrinsics.pallets.commitments +
  • +
  • bittensor.core.extrinsics.pallets.crowdloan +
  • +
  • bittensor.core.extrinsics.pallets.mev_shield +
  • +
  • bittensor.core.extrinsics.pallets.proxy +
  • +
  • bittensor.core.extrinsics.pallets.subtensor_module +
  • +
  • bittensor.core.extrinsics.pallets.sudo +
  • +
  • bittensor.core.extrinsics.pallets.swap +
  • +
  • bittensor.core.extrinsics.proxy
  • bittensor.core.extrinsics.registration
  • bittensor.core.extrinsics.root
  • bittensor.core.extrinsics.serving -
  • -
  • bittensor.core.extrinsics.set_weights
  • bittensor.core.extrinsics.staking
  • bittensor.core.extrinsics.start_call +
  • +
  • bittensor.core.extrinsics.sudo
  • bittensor.core.extrinsics.take
  • @@ -3646,6 +5410,8 @@

    M

  • bittensor.core.extrinsics.unstaking
  • bittensor.core.extrinsics.utils +
  • +
  • bittensor.core.extrinsics.weights
  • bittensor.core.metagraph
  • @@ -3655,39 +5421,61 @@

    M

  • bittensor.core.subtensor
  • -
  • bittensor.core.subtensor_api +
  • bittensor.core.synapse +
  • +
  • bittensor.core.tensor
  • -
  • bittensor.core.subtensor_api.chain +
  • bittensor.core.threadpool
  • -
  • bittensor.core.subtensor_api.commitments +
  • bittensor.core.types
  • -
  • bittensor.core.subtensor_api.delegates +
  • bittensor.extras
  • -
  • bittensor.core.subtensor_api.extrinsics +
  • bittensor.extras.dev_framework
  • -
  • bittensor.core.subtensor_api.metagraphs +
  • bittensor.extras.dev_framework.calls
  • -
  • bittensor.core.subtensor_api.neurons +
  • bittensor.extras.dev_framework.calls.non_sudo_calls
  • -
  • bittensor.core.subtensor_api.queries +
  • bittensor.extras.dev_framework.calls.pallets
  • -
  • bittensor.core.subtensor_api.staking +
  • bittensor.extras.dev_framework.calls.sudo_calls
  • -
  • bittensor.core.subtensor_api.subnets +
  • bittensor.extras.dev_framework.subnet
  • -
  • bittensor.core.subtensor_api.utils +
  • bittensor.extras.dev_framework.utils
  • -
  • bittensor.core.subtensor_api.wallets +
  • bittensor.extras.subtensor_api
  • -
  • bittensor.core.synapse +
  • bittensor.extras.subtensor_api.chain
  • -
  • bittensor.core.tensor +
  • bittensor.extras.subtensor_api.commitments
  • -
  • bittensor.core.threadpool +
  • bittensor.extras.subtensor_api.crowdloans
  • -
  • bittensor.core.timelock +
  • bittensor.extras.subtensor_api.delegates
  • -
  • bittensor.core.types +
  • bittensor.extras.subtensor_api.extrinsics +
  • +
  • bittensor.extras.subtensor_api.metagraphs +
  • +
  • bittensor.extras.subtensor_api.mev_shield +
  • +
  • bittensor.extras.subtensor_api.neurons +
  • +
  • bittensor.extras.subtensor_api.proxy +
  • +
  • bittensor.extras.subtensor_api.queries +
  • +
  • bittensor.extras.subtensor_api.staking +
  • +
  • bittensor.extras.subtensor_api.subnets +
  • +
  • bittensor.extras.subtensor_api.utils +
  • +
  • bittensor.extras.subtensor_api.wallets +
  • +
  • bittensor.extras.timelock
  • bittensor.utils
  • @@ -3704,6 +5492,8 @@

    M

  • bittensor.utils.btlogging.format
  • bittensor.utils.btlogging.helpers +
  • +
  • bittensor.utils.btlogging.levels
  • bittensor.utils.btlogging.loggingmachine
  • @@ -3711,9 +5501,7 @@

    M

  • bittensor.utils.formatting
  • -
  • bittensor.utils.mock -
  • -
  • bittensor.utils.mock.subtensor_mock +
  • bittensor.utils.liquidity
  • bittensor.utils.networking
  • @@ -3726,12 +5514,6 @@

    M

  • bittensor.utils.registration.register_cuda
  • bittensor.utils.subnets -
  • -
  • bittensor.utils.substrate_utils -
  • -
  • bittensor.utils.substrate_utils.hasher -
  • -
  • bittensor.utils.substrate_utils.storage
  • bittensor.utils.version
  • @@ -3740,11 +5522,19 @@

    M

  • MovingPrice (bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex attribute) +
  • +
  • Multisig (in module bittensor.extras.dev_framework.calls.pallets)
  • @@ -3791,7 +5583,7 @@

    N

  • NANOSECONDS_IN_SECOND (in module bittensor.utils.axon_utils) @@ -3827,1668 +5619,4248 @@

    N

  • (bittensor.core.types.PrometheusServeCallParams attribute)
  • -
  • (bittensor.utils.balance.Balance attribute) +
  • (bittensor.extras.dev_framework.calls.non_sudo_calls.ADD_LIQUIDITY attribute)
  • - -
  • network (bittensor.core.metagraph.MetagraphMixin attribute) - -
  • -
  • NETWORK_EXPLORER_MAP (in module bittensor.core.settings) +
  • (bittensor.extras.dev_framework.calls.non_sudo_calls.ASSOCIATE_EVM_KEY attribute)
  • -
  • NETWORK_MAP (in module bittensor.core.settings) +
  • (bittensor.extras.dev_framework.calls.non_sudo_calls.BATCH_REVEAL_WEIGHTS attribute)
  • -
  • network_registered_at (bittensor.core.chain_data.dynamic_info.DynamicInfo attribute) - -
  • -
  • NetworkRegisteredAt (bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex attribute) +
  • (bittensor.extras.dev_framework.calls.non_sudo_calls.COMMIT_CRV3_MECHANISM_WEIGHTS attribute)
  • -
  • NETWORKS (in module bittensor.core.settings) +
  • (bittensor.extras.dev_framework.calls.non_sudo_calls.COMMIT_MECHANISM_WEIGHTS attribute)
  • -
  • NetworksAdded (bittensor.utils.mock.subtensor_mock.MockSubtensorState attribute) +
  • (bittensor.extras.dev_framework.calls.non_sudo_calls.COMMIT_TIMELOCKED_MECHANISM_WEIGHTS attribute)
  • -
  • neuron_for_uid (bittensor.core.subtensor_api.neurons.Neurons attribute) +
  • (bittensor.extras.dev_framework.calls.non_sudo_calls.COMMIT_TIMELOCKED_WEIGHTS attribute)
  • -
  • neuron_for_uid() (bittensor.core.async_subtensor.AsyncSubtensor method) - -
  • - - - - -

    O

    - - - -
    - -

    P

    - - - + -
    + +
  • NetworkRegisteredAt (bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex attribute)
  • -
  • ProportionOverflow +
  • NETWORKS (in module bittensor.core.settings)
  • -
  • ProposalVoteData (class in bittensor.core.chain_data.proposal_vote_data) +
  • neuron_for_uid (bittensor.extras.subtensor_api.neurons.Neurons attribute)
  • -
  • protocol (bittensor.core.chain_data.axon_info.AxonInfo attribute) +
  • neuron_for_uid() (bittensor.core.async_subtensor.AsyncSubtensor method)
  • -
  • pruning_score (bittensor.core.chain_data.metagraph_info.MetagraphInfo attribute) +
  • NeuronInfo (bittensor.core.chain_data.utils.ChainDataType attribute)
  • -
  • PruningScore (bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex attribute) -
  • -
  • publish_metadata() (in module bittensor.core.extrinsics.asyncex.serving) +
  • NeuronInfoLite (bittensor.core.chain_data.utils.ChainDataType attribute)
  • -
    - -

    Q

    - - - -
    +
  • Neurons (class in bittensor.extras.subtensor_api.neurons)
  • -
  • query_constant() (bittensor.core.async_subtensor.AsyncSubtensor method) +
  • neurons() (bittensor.core.async_subtensor.AsyncSubtensor method)
  • -
  • query_identity (bittensor.core.subtensor_api.neurons.Neurons attribute) +
  • neurons_lite (bittensor.extras.subtensor_api.neurons.Neurons attribute)
  • -
  • query_identity() (bittensor.core.async_subtensor.AsyncSubtensor method) +
  • neurons_lite() (bittensor.core.async_subtensor.AsyncSubtensor method)
  • -
  • query_map (bittensor.core.subtensor_api.queries.Queries attribute) -
  • -
  • query_map() (bittensor.core.async_subtensor.AsyncSubtensor method) +
  • new (bittensor.extras.dev_framework.calls.non_sudo_calls.SET_KEY attribute)
  • -
    - -

    R

    - - +
    - +
  • bittensor.extras
    +
  • bittensor.utils
    diff --git a/static/python-api/html/searchindex.js b/static/python-api/html/searchindex.js index cf8da32cb5..a5473d2b49 100644 --- a/static/python-api/html/searchindex.js +++ b/static/python-api/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({"alltitles": {"API Reference": [[99, null]], "Attributes": [[1, "attributes"], [8, "attributes"], [23, "attributes"], [24, "attributes"], [25, "attributes"], [53, "attributes"], [54, "attributes"], [70, "attributes"], [71, "attributes"], [75, "attributes"], [78, "attributes"], [79, "attributes"], [81, "attributes"], [82, "attributes"], [83, "attributes"], [85, "attributes"], [87, "attributes"], [91, "attributes"], [97, "attributes"], [98, "attributes"]], "Bittensor SDK Documentation": [[100, null]], "Classes": [[0, "classes"], [1, "classes"], [2, "classes"], [3, "classes"], [4, "classes"], [5, "classes"], [6, "classes"], [8, "classes"], [9, "classes"], [10, "classes"], [11, "classes"], [12, "classes"], [13, "classes"], [14, "classes"], [15, "classes"], [16, "classes"], [17, "classes"], [18, "classes"], [19, "classes"], [20, "classes"], [21, "classes"], [22, "classes"], [23, "classes"], [24, "classes"], [53, "classes"], [55, "classes"], [56, "classes"], [57, "classes"], [58, "classes"], [59, "classes"], [60, "classes"], [61, "classes"], [62, "classes"], [63, "classes"], [64, "classes"], [65, "classes"], [66, "classes"], [68, "classes"], [69, "classes"], [70, "classes"], [71, "classes"], [73, "classes"], [76, "classes"], [77, "classes"], [79, "classes"], [82, "classes"], [85, "classes"], [87, "classes"], [91, "classes"], [93, "classes"], [96, "classes"]], "Example": [[0, null], [23, null], [24, null], [24, null], [53, null], [53, null], [53, null], [53, null], [53, null], [53, null], [53, null], [53, null], [53, null], [53, null], [53, null], [53, null], [53, null], [53, null], [53, null], [56, null], [61, null], [73, null], [77, null]], "Exceptions": [[23, "exceptions"], [25, "exceptions"], [71, "exceptions"], [88, "exceptions"], [97, "exceptions"]], "Functions": [[0, "functions"], [1, "functions"], [10, "functions"], [21, "functions"], [24, "functions"], [26, "functions"], [28, "functions"], [29, "functions"], [30, "functions"], [31, "functions"], [32, "functions"], [33, "functions"], [34, "functions"], [35, "functions"], [36, "functions"], [37, "functions"], [38, "functions"], [39, "functions"], [41, "functions"], [42, "functions"], [43, "functions"], [44, "functions"], [45, "functions"], [46, "functions"], [47, "functions"], [48, "functions"], [49, "functions"], [50, "functions"], [51, "functions"], [53, "functions"], [67, "functions"], [69, "functions"], [70, "functions"], [72, "functions"], [75, "functions"], [76, "functions"], [80, "functions"], [83, "functions"], [84, "functions"], [85, "functions"], [88, "functions"], [89, "functions"], [91, "functions"], [92, "functions"], [94, "functions"], [97, "functions"], [98, "functions"]], "Module Contents": [[0, "module-contents"], [1, "module-contents"], [2, "module-contents"], [3, "module-contents"], [4, "module-contents"], [5, "module-contents"], [6, "module-contents"], [8, "module-contents"], [9, "module-contents"], [10, "module-contents"], [11, "module-contents"], [12, "module-contents"], [13, "module-contents"], [14, "module-contents"], [15, "module-contents"], [16, "module-contents"], [17, "module-contents"], [18, "module-contents"], [19, "module-contents"], [20, "module-contents"], [21, "module-contents"], [22, "module-contents"], [23, "module-contents"], [24, "module-contents"], [25, "module-contents"], [26, "module-contents"], [28, "module-contents"], [29, "module-contents"], [30, "module-contents"], [31, "module-contents"], [32, "module-contents"], [33, "module-contents"], [34, "module-contents"], [35, "module-contents"], [36, "module-contents"], [37, "module-contents"], [38, "module-contents"], [39, "module-contents"], [41, "module-contents"], [42, "module-contents"], [43, "module-contents"], [44, "module-contents"], [45, "module-contents"], [46, "module-contents"], [47, "module-contents"], [48, "module-contents"], [49, "module-contents"], [50, "module-contents"], [51, "module-contents"], [53, "module-contents"], [54, "module-contents"], [55, "module-contents"], [56, "module-contents"], [57, "module-contents"], [58, "module-contents"], [59, "module-contents"], [60, "module-contents"], [62, "module-contents"], [63, "module-contents"], [64, "module-contents"], [65, "module-contents"], [66, "module-contents"], [67, "module-contents"], [68, "module-contents"], [69, "module-contents"], [70, "module-contents"], [71, "module-contents"], [72, "module-contents"], [73, "module-contents"], [75, "module-contents"], [76, "module-contents"], [77, "module-contents"], [78, "module-contents"], [79, "module-contents"], [80, "module-contents"], [82, "module-contents"], [83, "module-contents"], [84, "module-contents"], [87, "module-contents"], [88, "module-contents"], [89, "module-contents"], [91, "module-contents"], [92, "module-contents"], [93, "module-contents"], [94, "module-contents"], [96, "module-contents"], [97, "module-contents"], [98, "module-contents"]], "Package Contents": [[61, "package-contents"], [81, "package-contents"], [85, "package-contents"]], "Submodules": [[7, "submodules"], [27, "submodules"], [40, "submodules"], [52, "submodules"], [61, "submodules"], [74, "submodules"], [81, "submodules"], [85, "submodules"], [86, "submodules"], [90, "submodules"], [95, "submodules"]], "Table of Contents": [[100, null]], "bittensor": [[74, null]], "bittensor.core": [[52, null]], "bittensor.core.async_subtensor": [[0, null]], "bittensor.core.axon": [[1, null]], "bittensor.core.chain_data": [[7, null]], "bittensor.core.chain_data.axon_info": [[2, null]], "bittensor.core.chain_data.chain_identity": [[3, null]], "bittensor.core.chain_data.delegate_info": [[4, null]], "bittensor.core.chain_data.delegate_info_lite": [[5, null]], "bittensor.core.chain_data.dynamic_info": [[6, null]], "bittensor.core.chain_data.info_base": [[8, null]], "bittensor.core.chain_data.ip_info": [[9, null]], "bittensor.core.chain_data.metagraph_info": [[10, null]], "bittensor.core.chain_data.neuron_info": [[11, null]], "bittensor.core.chain_data.neuron_info_lite": [[12, null]], "bittensor.core.chain_data.prometheus_info": [[13, null]], "bittensor.core.chain_data.proposal_vote_data": [[14, null]], "bittensor.core.chain_data.scheduled_coldkey_swap_info": [[15, null]], "bittensor.core.chain_data.stake_info": [[16, null]], "bittensor.core.chain_data.subnet_hyperparameters": [[17, null]], "bittensor.core.chain_data.subnet_identity": [[18, null]], "bittensor.core.chain_data.subnet_info": [[19, null]], "bittensor.core.chain_data.subnet_state": [[20, null]], "bittensor.core.chain_data.utils": [[21, null]], "bittensor.core.chain_data.weight_commit_info": [[22, null]], "bittensor.core.config": [[23, null]], "bittensor.core.dendrite": [[24, null]], "bittensor.core.errors": [[25, null]], "bittensor.core.extrinsics": [[40, null]], "bittensor.core.extrinsics.asyncex": [[27, null]], "bittensor.core.extrinsics.asyncex.commit_reveal": [[26, null]], "bittensor.core.extrinsics.asyncex.move_stake": [[28, null]], "bittensor.core.extrinsics.asyncex.registration": [[29, null]], "bittensor.core.extrinsics.asyncex.root": [[30, null]], "bittensor.core.extrinsics.asyncex.serving": [[31, null]], "bittensor.core.extrinsics.asyncex.staking": [[32, null]], "bittensor.core.extrinsics.asyncex.start_call": [[33, null]], "bittensor.core.extrinsics.asyncex.take": [[34, null]], "bittensor.core.extrinsics.asyncex.transfer": [[35, null]], "bittensor.core.extrinsics.asyncex.unstaking": [[36, null]], "bittensor.core.extrinsics.asyncex.weights": [[37, null]], "bittensor.core.extrinsics.commit_reveal": [[38, null]], "bittensor.core.extrinsics.commit_weights": [[39, null]], "bittensor.core.extrinsics.move_stake": [[41, null]], "bittensor.core.extrinsics.registration": [[42, null]], "bittensor.core.extrinsics.root": [[43, null]], "bittensor.core.extrinsics.serving": [[44, null]], "bittensor.core.extrinsics.set_weights": [[45, null]], "bittensor.core.extrinsics.staking": [[46, null]], "bittensor.core.extrinsics.start_call": [[47, null]], "bittensor.core.extrinsics.take": [[48, null]], "bittensor.core.extrinsics.transfer": [[49, null]], "bittensor.core.extrinsics.unstaking": [[50, null]], "bittensor.core.extrinsics.utils": [[51, null]], "bittensor.core.metagraph": [[53, null]], "bittensor.core.settings": [[54, null]], "bittensor.core.stream": [[55, null]], "bittensor.core.subtensor": [[56, null]], "bittensor.core.subtensor_api": [[61, null]], "bittensor.core.subtensor_api.chain": [[57, null]], "bittensor.core.subtensor_api.commitments": [[58, null]], "bittensor.core.subtensor_api.delegates": [[59, null]], "bittensor.core.subtensor_api.extrinsics": [[60, null]], "bittensor.core.subtensor_api.metagraphs": [[62, null]], "bittensor.core.subtensor_api.neurons": [[63, null]], "bittensor.core.subtensor_api.queries": [[64, null]], "bittensor.core.subtensor_api.staking": [[65, null]], "bittensor.core.subtensor_api.subnets": [[66, null]], "bittensor.core.subtensor_api.utils": [[67, null]], "bittensor.core.subtensor_api.wallets": [[68, null]], "bittensor.core.synapse": [[69, null]], "bittensor.core.tensor": [[70, null]], "bittensor.core.threadpool": [[71, null]], "bittensor.core.timelock": [[72, null]], "bittensor.core.types": [[73, null]], "bittensor.utils": [[85, null]], "bittensor.utils.axon_utils": [[75, null]], "bittensor.utils.balance": [[76, null]], "bittensor.utils.btlogging": [[81, null]], "bittensor.utils.btlogging.console": [[77, null]], "bittensor.utils.btlogging.defines": [[78, null]], "bittensor.utils.btlogging.format": [[79, null]], "bittensor.utils.btlogging.helpers": [[80, null]], "bittensor.utils.btlogging.loggingmachine": [[82, null]], "bittensor.utils.easy_imports": [[83, null]], "bittensor.utils.formatting": [[84, null]], "bittensor.utils.mock": [[86, null]], "bittensor.utils.mock.subtensor_mock": [[87, null]], "bittensor.utils.networking": [[88, null]], "bittensor.utils.registration": [[90, null]], "bittensor.utils.registration.async_pow": [[89, null]], "bittensor.utils.registration.pow": [[91, null]], "bittensor.utils.registration.register_cuda": [[92, null]], "bittensor.utils.subnets": [[93, null]], "bittensor.utils.substrate_utils": [[95, null]], "bittensor.utils.substrate_utils.hasher": [[94, null]], "bittensor.utils.substrate_utils.storage": [[96, null]], "bittensor.utils.version": [[97, null]], "bittensor.utils.weight_utils": [[98, null]]}, "docnames": ["autoapi/bittensor/core/async_subtensor/index", "autoapi/bittensor/core/axon/index", "autoapi/bittensor/core/chain_data/axon_info/index", "autoapi/bittensor/core/chain_data/chain_identity/index", "autoapi/bittensor/core/chain_data/delegate_info/index", "autoapi/bittensor/core/chain_data/delegate_info_lite/index", "autoapi/bittensor/core/chain_data/dynamic_info/index", "autoapi/bittensor/core/chain_data/index", "autoapi/bittensor/core/chain_data/info_base/index", "autoapi/bittensor/core/chain_data/ip_info/index", "autoapi/bittensor/core/chain_data/metagraph_info/index", "autoapi/bittensor/core/chain_data/neuron_info/index", "autoapi/bittensor/core/chain_data/neuron_info_lite/index", "autoapi/bittensor/core/chain_data/prometheus_info/index", "autoapi/bittensor/core/chain_data/proposal_vote_data/index", "autoapi/bittensor/core/chain_data/scheduled_coldkey_swap_info/index", "autoapi/bittensor/core/chain_data/stake_info/index", "autoapi/bittensor/core/chain_data/subnet_hyperparameters/index", "autoapi/bittensor/core/chain_data/subnet_identity/index", "autoapi/bittensor/core/chain_data/subnet_info/index", "autoapi/bittensor/core/chain_data/subnet_state/index", "autoapi/bittensor/core/chain_data/utils/index", "autoapi/bittensor/core/chain_data/weight_commit_info/index", "autoapi/bittensor/core/config/index", "autoapi/bittensor/core/dendrite/index", "autoapi/bittensor/core/errors/index", "autoapi/bittensor/core/extrinsics/asyncex/commit_reveal/index", "autoapi/bittensor/core/extrinsics/asyncex/index", "autoapi/bittensor/core/extrinsics/asyncex/move_stake/index", "autoapi/bittensor/core/extrinsics/asyncex/registration/index", "autoapi/bittensor/core/extrinsics/asyncex/root/index", "autoapi/bittensor/core/extrinsics/asyncex/serving/index", "autoapi/bittensor/core/extrinsics/asyncex/staking/index", "autoapi/bittensor/core/extrinsics/asyncex/start_call/index", "autoapi/bittensor/core/extrinsics/asyncex/take/index", "autoapi/bittensor/core/extrinsics/asyncex/transfer/index", "autoapi/bittensor/core/extrinsics/asyncex/unstaking/index", "autoapi/bittensor/core/extrinsics/asyncex/weights/index", "autoapi/bittensor/core/extrinsics/commit_reveal/index", "autoapi/bittensor/core/extrinsics/commit_weights/index", "autoapi/bittensor/core/extrinsics/index", "autoapi/bittensor/core/extrinsics/move_stake/index", "autoapi/bittensor/core/extrinsics/registration/index", "autoapi/bittensor/core/extrinsics/root/index", "autoapi/bittensor/core/extrinsics/serving/index", "autoapi/bittensor/core/extrinsics/set_weights/index", "autoapi/bittensor/core/extrinsics/staking/index", "autoapi/bittensor/core/extrinsics/start_call/index", "autoapi/bittensor/core/extrinsics/take/index", "autoapi/bittensor/core/extrinsics/transfer/index", "autoapi/bittensor/core/extrinsics/unstaking/index", "autoapi/bittensor/core/extrinsics/utils/index", "autoapi/bittensor/core/index", "autoapi/bittensor/core/metagraph/index", "autoapi/bittensor/core/settings/index", "autoapi/bittensor/core/stream/index", "autoapi/bittensor/core/subtensor/index", "autoapi/bittensor/core/subtensor_api/chain/index", "autoapi/bittensor/core/subtensor_api/commitments/index", "autoapi/bittensor/core/subtensor_api/delegates/index", "autoapi/bittensor/core/subtensor_api/extrinsics/index", "autoapi/bittensor/core/subtensor_api/index", "autoapi/bittensor/core/subtensor_api/metagraphs/index", "autoapi/bittensor/core/subtensor_api/neurons/index", "autoapi/bittensor/core/subtensor_api/queries/index", "autoapi/bittensor/core/subtensor_api/staking/index", "autoapi/bittensor/core/subtensor_api/subnets/index", "autoapi/bittensor/core/subtensor_api/utils/index", "autoapi/bittensor/core/subtensor_api/wallets/index", "autoapi/bittensor/core/synapse/index", "autoapi/bittensor/core/tensor/index", "autoapi/bittensor/core/threadpool/index", "autoapi/bittensor/core/timelock/index", "autoapi/bittensor/core/types/index", "autoapi/bittensor/index", "autoapi/bittensor/utils/axon_utils/index", "autoapi/bittensor/utils/balance/index", "autoapi/bittensor/utils/btlogging/console/index", "autoapi/bittensor/utils/btlogging/defines/index", "autoapi/bittensor/utils/btlogging/format/index", "autoapi/bittensor/utils/btlogging/helpers/index", "autoapi/bittensor/utils/btlogging/index", "autoapi/bittensor/utils/btlogging/loggingmachine/index", "autoapi/bittensor/utils/easy_imports/index", "autoapi/bittensor/utils/formatting/index", "autoapi/bittensor/utils/index", "autoapi/bittensor/utils/mock/index", "autoapi/bittensor/utils/mock/subtensor_mock/index", "autoapi/bittensor/utils/networking/index", "autoapi/bittensor/utils/registration/async_pow/index", "autoapi/bittensor/utils/registration/index", "autoapi/bittensor/utils/registration/pow/index", "autoapi/bittensor/utils/registration/register_cuda/index", "autoapi/bittensor/utils/subnets/index", "autoapi/bittensor/utils/substrate_utils/hasher/index", "autoapi/bittensor/utils/substrate_utils/index", "autoapi/bittensor/utils/substrate_utils/storage/index", "autoapi/bittensor/utils/version/index", "autoapi/bittensor/utils/weight_utils/index", "autoapi/index", "index"], "envversion": {"sphinx": 62, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx.ext.viewcode": 1}, "filenames": ["autoapi/bittensor/core/async_subtensor/index.rst", "autoapi/bittensor/core/axon/index.rst", "autoapi/bittensor/core/chain_data/axon_info/index.rst", "autoapi/bittensor/core/chain_data/chain_identity/index.rst", "autoapi/bittensor/core/chain_data/delegate_info/index.rst", "autoapi/bittensor/core/chain_data/delegate_info_lite/index.rst", "autoapi/bittensor/core/chain_data/dynamic_info/index.rst", "autoapi/bittensor/core/chain_data/index.rst", "autoapi/bittensor/core/chain_data/info_base/index.rst", "autoapi/bittensor/core/chain_data/ip_info/index.rst", "autoapi/bittensor/core/chain_data/metagraph_info/index.rst", "autoapi/bittensor/core/chain_data/neuron_info/index.rst", "autoapi/bittensor/core/chain_data/neuron_info_lite/index.rst", "autoapi/bittensor/core/chain_data/prometheus_info/index.rst", "autoapi/bittensor/core/chain_data/proposal_vote_data/index.rst", "autoapi/bittensor/core/chain_data/scheduled_coldkey_swap_info/index.rst", "autoapi/bittensor/core/chain_data/stake_info/index.rst", "autoapi/bittensor/core/chain_data/subnet_hyperparameters/index.rst", "autoapi/bittensor/core/chain_data/subnet_identity/index.rst", "autoapi/bittensor/core/chain_data/subnet_info/index.rst", "autoapi/bittensor/core/chain_data/subnet_state/index.rst", "autoapi/bittensor/core/chain_data/utils/index.rst", "autoapi/bittensor/core/chain_data/weight_commit_info/index.rst", "autoapi/bittensor/core/config/index.rst", "autoapi/bittensor/core/dendrite/index.rst", "autoapi/bittensor/core/errors/index.rst", "autoapi/bittensor/core/extrinsics/asyncex/commit_reveal/index.rst", "autoapi/bittensor/core/extrinsics/asyncex/index.rst", "autoapi/bittensor/core/extrinsics/asyncex/move_stake/index.rst", "autoapi/bittensor/core/extrinsics/asyncex/registration/index.rst", "autoapi/bittensor/core/extrinsics/asyncex/root/index.rst", "autoapi/bittensor/core/extrinsics/asyncex/serving/index.rst", "autoapi/bittensor/core/extrinsics/asyncex/staking/index.rst", "autoapi/bittensor/core/extrinsics/asyncex/start_call/index.rst", "autoapi/bittensor/core/extrinsics/asyncex/take/index.rst", "autoapi/bittensor/core/extrinsics/asyncex/transfer/index.rst", "autoapi/bittensor/core/extrinsics/asyncex/unstaking/index.rst", "autoapi/bittensor/core/extrinsics/asyncex/weights/index.rst", "autoapi/bittensor/core/extrinsics/commit_reveal/index.rst", "autoapi/bittensor/core/extrinsics/commit_weights/index.rst", "autoapi/bittensor/core/extrinsics/index.rst", "autoapi/bittensor/core/extrinsics/move_stake/index.rst", "autoapi/bittensor/core/extrinsics/registration/index.rst", "autoapi/bittensor/core/extrinsics/root/index.rst", "autoapi/bittensor/core/extrinsics/serving/index.rst", "autoapi/bittensor/core/extrinsics/set_weights/index.rst", "autoapi/bittensor/core/extrinsics/staking/index.rst", "autoapi/bittensor/core/extrinsics/start_call/index.rst", "autoapi/bittensor/core/extrinsics/take/index.rst", "autoapi/bittensor/core/extrinsics/transfer/index.rst", "autoapi/bittensor/core/extrinsics/unstaking/index.rst", "autoapi/bittensor/core/extrinsics/utils/index.rst", "autoapi/bittensor/core/index.rst", "autoapi/bittensor/core/metagraph/index.rst", "autoapi/bittensor/core/settings/index.rst", "autoapi/bittensor/core/stream/index.rst", "autoapi/bittensor/core/subtensor/index.rst", "autoapi/bittensor/core/subtensor_api/chain/index.rst", "autoapi/bittensor/core/subtensor_api/commitments/index.rst", "autoapi/bittensor/core/subtensor_api/delegates/index.rst", "autoapi/bittensor/core/subtensor_api/extrinsics/index.rst", "autoapi/bittensor/core/subtensor_api/index.rst", "autoapi/bittensor/core/subtensor_api/metagraphs/index.rst", "autoapi/bittensor/core/subtensor_api/neurons/index.rst", "autoapi/bittensor/core/subtensor_api/queries/index.rst", "autoapi/bittensor/core/subtensor_api/staking/index.rst", "autoapi/bittensor/core/subtensor_api/subnets/index.rst", "autoapi/bittensor/core/subtensor_api/utils/index.rst", "autoapi/bittensor/core/subtensor_api/wallets/index.rst", "autoapi/bittensor/core/synapse/index.rst", "autoapi/bittensor/core/tensor/index.rst", "autoapi/bittensor/core/threadpool/index.rst", "autoapi/bittensor/core/timelock/index.rst", "autoapi/bittensor/core/types/index.rst", "autoapi/bittensor/index.rst", "autoapi/bittensor/utils/axon_utils/index.rst", "autoapi/bittensor/utils/balance/index.rst", "autoapi/bittensor/utils/btlogging/console/index.rst", "autoapi/bittensor/utils/btlogging/defines/index.rst", "autoapi/bittensor/utils/btlogging/format/index.rst", "autoapi/bittensor/utils/btlogging/helpers/index.rst", "autoapi/bittensor/utils/btlogging/index.rst", "autoapi/bittensor/utils/btlogging/loggingmachine/index.rst", "autoapi/bittensor/utils/easy_imports/index.rst", "autoapi/bittensor/utils/formatting/index.rst", "autoapi/bittensor/utils/index.rst", "autoapi/bittensor/utils/mock/index.rst", "autoapi/bittensor/utils/mock/subtensor_mock/index.rst", "autoapi/bittensor/utils/networking/index.rst", "autoapi/bittensor/utils/registration/async_pow/index.rst", "autoapi/bittensor/utils/registration/index.rst", "autoapi/bittensor/utils/registration/pow/index.rst", "autoapi/bittensor/utils/registration/register_cuda/index.rst", "autoapi/bittensor/utils/subnets/index.rst", "autoapi/bittensor/utils/substrate_utils/hasher/index.rst", "autoapi/bittensor/utils/substrate_utils/index.rst", "autoapi/bittensor/utils/substrate_utils/storage/index.rst", "autoapi/bittensor/utils/version/index.rst", "autoapi/bittensor/utils/weight_utils/index.rst", "autoapi/index.rst", "index.rst"], "indexentries": {"__repr__() (bittensor.core.dendrite.dendrite method)": [[24, "bittensor.core.dendrite.Dendrite.__repr__", false]], "__repr__() (bittensor.core.dendrite.dendritemixin method)": [[24, "bittensor.core.dendrite.DendriteMixin.__repr__", false]], "__setattr__() (bittensor.core.synapse.synapse method)": [[69, "bittensor.core.synapse.Synapse.__setattr__", false]], "__str__() (bittensor.core.dendrite.dendrite method)": [[24, "bittensor.core.dendrite.Dendrite.__str__", false]], "__str__() (bittensor.core.dendrite.dendritemixin method)": [[24, "bittensor.core.dendrite.DendriteMixin.__str__", false]], "account (bittensor.utils.mock.subtensor_mock.mocksystemstate attribute)": [[87, "bittensor.utils.mock.subtensor_mock.MockSystemState.Account", false]], "accountid (bittensor.core.chain_data.utils.chaindatatype attribute)": [[21, "bittensor.core.chain_data.utils.ChainDataType.AccountId", false]], "aclose_session() (bittensor.core.dendrite.dendrite method)": [[24, "bittensor.core.dendrite.Dendrite.aclose_session", false]], "aclose_session() (bittensor.core.dendrite.dendritemixin method)": [[24, "bittensor.core.dendrite.DendriteMixin.aclose_session", false], [24, "id0", false]], "active (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.active", false]], "active (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.Active", false]], "active (bittensor.core.chain_data.neuron_info.neuroninfo attribute)": [[11, "bittensor.core.chain_data.neuron_info.NeuronInfo.active", false]], "active (bittensor.core.chain_data.neuron_info_lite.neuroninfolite attribute)": [[12, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite.active", false]], "active (bittensor.core.chain_data.subnet_state.subnetstate attribute)": [[20, "bittensor.core.chain_data.subnet_state.SubnetState.active", false]], "active (bittensor.core.metagraph.metagraphmixin attribute)": [[53, "bittensor.core.metagraph.MetagraphMixin.active", false]], "active (bittensor.core.metagraph.nontorchmetagraph attribute)": [[53, "bittensor.core.metagraph.NonTorchMetagraph.active", false]], "active (bittensor.core.metagraph.torchmetagraph attribute)": [[53, "bittensor.core.metagraph.TorchMetagraph.active", false]], "active (bittensor.utils.mock.subtensor_mock.mocksubtensorstate attribute)": [[87, "bittensor.utils.mock.subtensor_mock.MockSubtensorState.Active", false]], "activity_cutoff (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.activity_cutoff", false]], "activity_cutoff (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.activity_cutoff", false]], "activity_cutoff (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[17, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.activity_cutoff", false]], "activitycutoff (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.ActivityCutoff", false]], "add_args() (bittensor.core.axon.axon class method)": [[1, "bittensor.core.axon.Axon.add_args", false]], "add_args() (bittensor.core.subtensor_api.subtensorapi class method)": [[61, "bittensor.core.subtensor_api.SubtensorApi.add_args", false]], "add_args() (bittensor.core.threadpool.prioritythreadpoolexecutor class method)": [[71, "bittensor.core.threadpool.PriorityThreadPoolExecutor.add_args", false]], "add_args() (bittensor.core.types.subtensormixin class method)": [[73, "bittensor.core.types.SubtensorMixin.add_args", false]], "add_args() (bittensor.utils.btlogging.loggingmachine.loggingmachine class method)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.add_args", false]], "add_legacy_methods() (in module bittensor.core.subtensor_api.utils)": [[67, "bittensor.core.subtensor_api.utils.add_legacy_methods", false]], "add_stake (bittensor.core.subtensor_api.extrinsics.extrinsics attribute)": [[60, "bittensor.core.subtensor_api.extrinsics.Extrinsics.add_stake", false]], "add_stake (bittensor.core.subtensor_api.staking.staking attribute)": [[65, "bittensor.core.subtensor_api.staking.Staking.add_stake", false]], "add_stake() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.add_stake", false]], "add_stake() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.add_stake", false]], "add_stake_extrinsic() (in module bittensor.core.extrinsics.asyncex.staking)": [[32, "bittensor.core.extrinsics.asyncex.staking.add_stake_extrinsic", false]], "add_stake_extrinsic() (in module bittensor.core.extrinsics.staking)": [[46, "bittensor.core.extrinsics.staking.add_stake_extrinsic", false]], "add_stake_multiple (bittensor.core.subtensor_api.extrinsics.extrinsics attribute)": [[60, "bittensor.core.subtensor_api.extrinsics.Extrinsics.add_stake_multiple", false]], "add_stake_multiple (bittensor.core.subtensor_api.staking.staking attribute)": [[65, "bittensor.core.subtensor_api.staking.Staking.add_stake_multiple", false]], "add_stake_multiple() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.add_stake_multiple", false]], "add_stake_multiple() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.add_stake_multiple", false]], "add_stake_multiple_extrinsic() (in module bittensor.core.extrinsics.asyncex.staking)": [[32, "bittensor.core.extrinsics.asyncex.staking.add_stake_multiple_extrinsic", false]], "add_stake_multiple_extrinsic() (in module bittensor.core.extrinsics.staking)": [[46, "bittensor.core.extrinsics.staking.add_stake_multiple_extrinsic", false]], "additional (bittensor.core.chain_data.chain_identity.chainidentity attribute)": [[3, "bittensor.core.chain_data.chain_identity.ChainIdentity.additional", false]], "additional (bittensor.core.chain_data.subnet_identity.subnetidentity attribute)": [[18, "bittensor.core.chain_data.subnet_identity.SubnetIdentity.additional", false]], "addresses (bittensor.core.metagraph.metagraphmixin property)": [[53, "bittensor.core.metagraph.MetagraphMixin.addresses", false]], "adjustment_alpha (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.adjustment_alpha", false]], "adjustment_alpha (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.adjustment_alpha", false]], "adjustment_alpha (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[17, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.adjustment_alpha", false]], "adjustment_interval (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.adjustment_interval", false]], "adjustment_interval (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.adjustment_interval", false]], "adjustment_interval (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[17, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.adjustment_interval", false]], "adjustmentalpha (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.AdjustmentAlpha", false]], "adjustmentinterval (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.AdjustmentInterval", false]], "after_disable_debug() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.after_disable_debug", false]], "after_disable_trace() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.after_disable_trace", false]], "after_enable_debug() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.after_enable_debug", false]], "after_enable_default() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.after_enable_default", false]], "after_enable_info() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.after_enable_info", false]], "after_enable_trace() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.after_enable_trace", false]], "after_enable_warning() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.after_enable_warning", false]], "after_transition() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.after_transition", false]], "all_indices() (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex static method)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.all_indices", false]], "all_logger_names() (in module bittensor.utils.btlogging.helpers)": [[80, "bittensor.utils.btlogging.helpers.all_logger_names", false]], "all_loggers() (in module bittensor.utils.btlogging.helpers)": [[80, "bittensor.utils.btlogging.helpers.all_loggers", false]], "all_subnets (bittensor.core.subtensor_api.subnets.subnets attribute)": [[66, "bittensor.core.subtensor_api.subnets.Subnets.all_subnets", false]], "all_subnets() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.all_subnets", false]], "all_subnets() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.all_subnets", false]], "allowed_delta (in module bittensor.utils.axon_utils)": [[75, "bittensor.utils.axon_utils.ALLOWED_DELTA", false]], "allowed_nonce_window_ns() (in module bittensor.utils.axon_utils)": [[75, "bittensor.utils.axon_utils.allowed_nonce_window_ns", false]], "alpha_dividends_per_hotkey (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.alpha_dividends_per_hotkey", false]], "alpha_dividends_per_hotkey (bittensor.core.metagraph.metagraphmixin attribute)": [[53, "bittensor.core.metagraph.MetagraphMixin.alpha_dividends_per_hotkey", false]], "alpha_high (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.alpha_high", false]], "alpha_high (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.alpha_high", false]], "alpha_high (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[17, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.alpha_high", false]], "alpha_in (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[6, "bittensor.core.chain_data.dynamic_info.DynamicInfo.alpha_in", false]], "alpha_in (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.alpha_in", false]], "alpha_in (bittensor.core.chain_data.metagraph_info.metagraphinfopool attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfoPool.alpha_in", false]], "alpha_in_emission (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[6, "bittensor.core.chain_data.dynamic_info.DynamicInfo.alpha_in_emission", false]], "alpha_in_emission (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.alpha_in_emission", false]], "alpha_in_emission (bittensor.core.chain_data.metagraph_info.metagraphinfoemissions attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfoEmissions.alpha_in_emission", false]], "alpha_low (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.alpha_low", false]], "alpha_low (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.alpha_low", false]], "alpha_low (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[17, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.alpha_low", false]], "alpha_out (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[6, "bittensor.core.chain_data.dynamic_info.DynamicInfo.alpha_out", false]], "alpha_out (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.alpha_out", false]], "alpha_out (bittensor.core.chain_data.metagraph_info.metagraphinfopool attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfoPool.alpha_out", false]], "alpha_out_emission (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[6, "bittensor.core.chain_data.dynamic_info.DynamicInfo.alpha_out_emission", false]], "alpha_out_emission (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.alpha_out_emission", false]], "alpha_out_emission (bittensor.core.chain_data.metagraph_info.metagraphinfoemissions attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfoEmissions.alpha_out_emission", false]], "alpha_slippage (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[6, "bittensor.core.chain_data.dynamic_info.DynamicInfo.alpha_slippage", false]], "alpha_stake (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.alpha_stake", false]], "alpha_stake (bittensor.core.chain_data.subnet_state.subnetstate attribute)": [[20, "bittensor.core.chain_data.subnet_state.SubnetState.alpha_stake", false]], "alpha_stake (bittensor.core.metagraph.metagraphmixin attribute)": [[53, "bittensor.core.metagraph.MetagraphMixin.alpha_stake", false]], "alpha_stake (bittensor.core.metagraph.nontorchmetagraph attribute)": [[53, "bittensor.core.metagraph.NonTorchMetagraph.alpha_stake", false]], "alpha_stake (bittensor.core.metagraph.torchmetagraph attribute)": [[53, "bittensor.core.metagraph.TorchMetagraph.alpha_stake", false]], "alpha_to_tao() (bittensor.core.chain_data.dynamic_info.dynamicinfo method)": [[6, "bittensor.core.chain_data.dynamic_info.DynamicInfo.alpha_to_tao", false]], "alpha_to_tao_with_slippage() (bittensor.core.chain_data.dynamic_info.dynamicinfo method)": [[6, "bittensor.core.chain_data.dynamic_info.DynamicInfo.alpha_to_tao_with_slippage", false]], "alphadividendsperhotkey (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.AlphaDividendsPerHotkey", false]], "alphahigh (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.AlphaHigh", false]], "alphain (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.AlphaIn", false]], "alphainemission (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.AlphaInEmission", false]], "alphalow (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.AlphaLow", false]], "alphaout (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.AlphaOut", false]], "alphaoutemission (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.AlphaOutEmission", false]], "alphastake (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.AlphaStake", false]], "app (bittensor.core.axon.axon attribute)": [[1, "bittensor.core.axon.Axon.app", false]], "aquery() (bittensor.core.dendrite.dendritemixin method)": [[24, "bittensor.core.dendrite.DendriteMixin.aquery", false]], "arbitration_block (bittensor.core.chain_data.scheduled_coldkey_swap_info.scheduledcoldkeyswapinfo attribute)": [[15, "bittensor.core.chain_data.scheduled_coldkey_swap_info.ScheduledColdkeySwapInfo.arbitration_block", false]], "archive_entrypoint (in module bittensor.core.settings)": [[54, "bittensor.core.settings.ARCHIVE_ENTRYPOINT", false]], "as (bittensor.core.metagraph.metagraphmixin property)": [[53, "bittensor.core.metagraph.MetagraphMixin.AS", false]], "async_metagraph() (in module bittensor.core.metagraph)": [[53, "bittensor.core.metagraph.async_metagraph", false]], "async_subtensor (in module bittensor.utils.easy_imports)": [[83, "bittensor.utils.easy_imports.async_subtensor", false]], "asyncmetagraph (class in bittensor.core.metagraph)": [[53, "bittensor.core.metagraph.AsyncMetagraph", false]], "asyncsubtensor (class in bittensor.core.async_subtensor)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor", false]], "attach() (bittensor.core.axon.axon method)": [[1, "bittensor.core.axon.Axon.attach", false]], "axon (bittensor.core.axon.axonmiddleware attribute)": [[1, "bittensor.core.axon.AxonMiddleware.axon", false]], "axon (bittensor.core.synapse.synapse attribute)": [[69, "bittensor.core.synapse.Synapse.axon", false]], "axon (class in bittensor.core.axon)": [[1, "bittensor.core.axon.Axon", false]], "axon (in module bittensor.utils.easy_imports)": [[83, "bittensor.utils.easy_imports.axon", false]], "axon_info (bittensor.core.chain_data.neuron_info.neuroninfo attribute)": [[11, "bittensor.core.chain_data.neuron_info.NeuronInfo.axon_info", false]], "axon_info (bittensor.core.chain_data.neuron_info_lite.neuroninfolite attribute)": [[12, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite.axon_info", false]], "axoninfo (bittensor.core.chain_data.utils.chaindatatype attribute)": [[21, "bittensor.core.chain_data.utils.ChainDataType.AxonInfo", false]], "axoninfo (class in bittensor.core.chain_data.axon_info)": [[2, "bittensor.core.chain_data.axon_info.AxonInfo", false]], "axoninfodict (class in bittensor.utils.mock.subtensor_mock)": [[87, "bittensor.utils.mock.subtensor_mock.AxonInfoDict", false]], "axonmiddleware (class in bittensor.core.axon)": [[1, "bittensor.core.axon.AxonMiddleware", false]], "axons (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.axons", false]], "axons (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.Axons", false]], "axons (bittensor.core.metagraph.metagraphmixin attribute)": [[53, "bittensor.core.metagraph.MetagraphMixin.axons", false]], "axonservecallparams (class in bittensor.core.types)": [[73, "bittensor.core.types.AxonServeCallParams", false]], "ayes (bittensor.core.chain_data.proposal_vote_data.proposalvotedata attribute)": [[14, "bittensor.core.chain_data.proposal_vote_data.ProposalVoteData.ayes", false]], "b (bittensor.core.metagraph.metagraphmixin property)": [[53, "bittensor.core.metagraph.MetagraphMixin.B", false]], "balance (class in bittensor.utils.balance)": [[76, "bittensor.utils.balance.Balance", false]], "base_log_format (in module bittensor.utils.btlogging.defines)": [[78, "bittensor.utils.btlogging.defines.BASE_LOG_FORMAT", false]], "baseclass (in module bittensor.core.metagraph)": [[53, "bittensor.core.metagraph.BaseClass", false]], "basemodel (in module bittensor.core.dendrite)": [[24, "bittensor.core.dendrite.BaseModel", false]], "before_disable_debug() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.before_disable_debug", false]], "before_disable_logging() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.before_disable_logging", false]], "before_disable_trace() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.before_disable_trace", false]], "before_enable_console() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.before_enable_console", false]], "before_enable_debug() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.before_enable_debug", false]], "before_enable_default() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.before_enable_default", false]], "before_enable_info() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.before_enable_info", false]], "before_enable_trace() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.before_enable_trace", false]], "before_enable_warning() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.before_enable_warning", false]], "before_transition() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.before_transition", false]], "bits (bittensor.utils.balance.fixedpoint attribute)": [[76, "bittensor.utils.balance.FixedPoint.bits", false]], "bittensor": [[74, "module-bittensor", false]], "bittensor.core": [[52, "module-bittensor.core", false]], "bittensor.core.async_subtensor": [[0, "module-bittensor.core.async_subtensor", false]], "bittensor.core.axon": [[1, "module-bittensor.core.axon", false]], "bittensor.core.chain_data": [[7, "module-bittensor.core.chain_data", false]], "bittensor.core.chain_data.axon_info": [[2, "module-bittensor.core.chain_data.axon_info", false]], "bittensor.core.chain_data.chain_identity": [[3, "module-bittensor.core.chain_data.chain_identity", false]], "bittensor.core.chain_data.delegate_info": [[4, "module-bittensor.core.chain_data.delegate_info", false]], "bittensor.core.chain_data.delegate_info_lite": [[5, "module-bittensor.core.chain_data.delegate_info_lite", false]], "bittensor.core.chain_data.dynamic_info": [[6, "module-bittensor.core.chain_data.dynamic_info", false]], "bittensor.core.chain_data.info_base": [[8, "module-bittensor.core.chain_data.info_base", false]], "bittensor.core.chain_data.ip_info": [[9, "module-bittensor.core.chain_data.ip_info", false]], "bittensor.core.chain_data.metagraph_info": [[10, "module-bittensor.core.chain_data.metagraph_info", false]], "bittensor.core.chain_data.neuron_info": [[11, "module-bittensor.core.chain_data.neuron_info", false]], "bittensor.core.chain_data.neuron_info_lite": [[12, "module-bittensor.core.chain_data.neuron_info_lite", false]], "bittensor.core.chain_data.prometheus_info": [[13, "module-bittensor.core.chain_data.prometheus_info", false]], "bittensor.core.chain_data.proposal_vote_data": [[14, "module-bittensor.core.chain_data.proposal_vote_data", false]], "bittensor.core.chain_data.scheduled_coldkey_swap_info": [[15, "module-bittensor.core.chain_data.scheduled_coldkey_swap_info", false]], "bittensor.core.chain_data.stake_info": [[16, "module-bittensor.core.chain_data.stake_info", false]], "bittensor.core.chain_data.subnet_hyperparameters": [[17, "module-bittensor.core.chain_data.subnet_hyperparameters", false]], "bittensor.core.chain_data.subnet_identity": [[18, "module-bittensor.core.chain_data.subnet_identity", false]], "bittensor.core.chain_data.subnet_info": [[19, "module-bittensor.core.chain_data.subnet_info", false]], "bittensor.core.chain_data.subnet_state": [[20, "module-bittensor.core.chain_data.subnet_state", false]], "bittensor.core.chain_data.utils": [[21, "module-bittensor.core.chain_data.utils", false]], "bittensor.core.chain_data.weight_commit_info": [[22, "module-bittensor.core.chain_data.weight_commit_info", false]], "bittensor.core.config": [[23, "module-bittensor.core.config", false]], "bittensor.core.dendrite": [[24, "module-bittensor.core.dendrite", false]], "bittensor.core.errors": [[25, "module-bittensor.core.errors", false]], "bittensor.core.extrinsics": [[40, "module-bittensor.core.extrinsics", false]], "bittensor.core.extrinsics.asyncex": [[27, "module-bittensor.core.extrinsics.asyncex", false]], "bittensor.core.extrinsics.asyncex.commit_reveal": [[26, "module-bittensor.core.extrinsics.asyncex.commit_reveal", false]], "bittensor.core.extrinsics.asyncex.move_stake": [[28, "module-bittensor.core.extrinsics.asyncex.move_stake", false]], "bittensor.core.extrinsics.asyncex.registration": [[29, "module-bittensor.core.extrinsics.asyncex.registration", false]], "bittensor.core.extrinsics.asyncex.root": [[30, "module-bittensor.core.extrinsics.asyncex.root", false]], "bittensor.core.extrinsics.asyncex.serving": [[31, "module-bittensor.core.extrinsics.asyncex.serving", false]], "bittensor.core.extrinsics.asyncex.staking": [[32, "module-bittensor.core.extrinsics.asyncex.staking", false]], "bittensor.core.extrinsics.asyncex.start_call": [[33, "module-bittensor.core.extrinsics.asyncex.start_call", false]], "bittensor.core.extrinsics.asyncex.take": [[34, "module-bittensor.core.extrinsics.asyncex.take", false]], "bittensor.core.extrinsics.asyncex.transfer": [[35, "module-bittensor.core.extrinsics.asyncex.transfer", false]], "bittensor.core.extrinsics.asyncex.unstaking": [[36, "module-bittensor.core.extrinsics.asyncex.unstaking", false]], "bittensor.core.extrinsics.asyncex.weights": [[37, "module-bittensor.core.extrinsics.asyncex.weights", false]], "bittensor.core.extrinsics.commit_reveal": [[38, "module-bittensor.core.extrinsics.commit_reveal", false]], "bittensor.core.extrinsics.commit_weights": [[39, "module-bittensor.core.extrinsics.commit_weights", false]], "bittensor.core.extrinsics.move_stake": [[41, "module-bittensor.core.extrinsics.move_stake", false]], "bittensor.core.extrinsics.registration": [[42, "module-bittensor.core.extrinsics.registration", false]], "bittensor.core.extrinsics.root": [[43, "module-bittensor.core.extrinsics.root", false]], "bittensor.core.extrinsics.serving": [[44, "module-bittensor.core.extrinsics.serving", false]], "bittensor.core.extrinsics.set_weights": [[45, "module-bittensor.core.extrinsics.set_weights", false]], "bittensor.core.extrinsics.staking": [[46, "module-bittensor.core.extrinsics.staking", false]], "bittensor.core.extrinsics.start_call": [[47, "module-bittensor.core.extrinsics.start_call", false]], "bittensor.core.extrinsics.take": [[48, "module-bittensor.core.extrinsics.take", false]], "bittensor.core.extrinsics.transfer": [[49, "module-bittensor.core.extrinsics.transfer", false]], "bittensor.core.extrinsics.unstaking": [[50, "module-bittensor.core.extrinsics.unstaking", false]], "bittensor.core.extrinsics.utils": [[51, "module-bittensor.core.extrinsics.utils", false]], "bittensor.core.metagraph": [[53, "module-bittensor.core.metagraph", false]], "bittensor.core.settings": [[54, "module-bittensor.core.settings", false]], "bittensor.core.stream": [[55, "module-bittensor.core.stream", false]], "bittensor.core.subtensor": [[56, "module-bittensor.core.subtensor", false]], "bittensor.core.subtensor_api": [[61, "module-bittensor.core.subtensor_api", false]], "bittensor.core.subtensor_api.chain": [[57, "module-bittensor.core.subtensor_api.chain", false]], "bittensor.core.subtensor_api.commitments": [[58, "module-bittensor.core.subtensor_api.commitments", false]], "bittensor.core.subtensor_api.delegates": [[59, "module-bittensor.core.subtensor_api.delegates", false]], "bittensor.core.subtensor_api.extrinsics": [[60, "module-bittensor.core.subtensor_api.extrinsics", false]], "bittensor.core.subtensor_api.metagraphs": [[62, "module-bittensor.core.subtensor_api.metagraphs", false]], "bittensor.core.subtensor_api.neurons": [[63, "module-bittensor.core.subtensor_api.neurons", false]], "bittensor.core.subtensor_api.queries": [[64, "module-bittensor.core.subtensor_api.queries", false]], "bittensor.core.subtensor_api.staking": [[65, "module-bittensor.core.subtensor_api.staking", false]], "bittensor.core.subtensor_api.subnets": [[66, "module-bittensor.core.subtensor_api.subnets", false]], "bittensor.core.subtensor_api.utils": [[67, "module-bittensor.core.subtensor_api.utils", false]], "bittensor.core.subtensor_api.wallets": [[68, "module-bittensor.core.subtensor_api.wallets", false]], "bittensor.core.synapse": [[69, "module-bittensor.core.synapse", false]], "bittensor.core.tensor": [[70, "module-bittensor.core.tensor", false]], "bittensor.core.threadpool": [[71, "module-bittensor.core.threadpool", false]], "bittensor.core.timelock": [[72, "module-bittensor.core.timelock", false]], "bittensor.core.types": [[73, "module-bittensor.core.types", false]], "bittensor.utils": [[85, "module-bittensor.utils", false]], "bittensor.utils.axon_utils": [[75, "module-bittensor.utils.axon_utils", false]], "bittensor.utils.balance": [[76, "module-bittensor.utils.balance", false]], "bittensor.utils.btlogging": [[81, "module-bittensor.utils.btlogging", false]], "bittensor.utils.btlogging.console": [[77, "module-bittensor.utils.btlogging.console", false]], "bittensor.utils.btlogging.defines": [[78, "module-bittensor.utils.btlogging.defines", false]], "bittensor.utils.btlogging.format": [[79, "module-bittensor.utils.btlogging.format", false]], "bittensor.utils.btlogging.helpers": [[80, "module-bittensor.utils.btlogging.helpers", false]], "bittensor.utils.btlogging.loggingmachine": [[82, "module-bittensor.utils.btlogging.loggingmachine", false]], "bittensor.utils.easy_imports": [[83, "module-bittensor.utils.easy_imports", false]], "bittensor.utils.formatting": [[84, "module-bittensor.utils.formatting", false]], "bittensor.utils.mock": [[86, "module-bittensor.utils.mock", false]], "bittensor.utils.mock.subtensor_mock": [[87, "module-bittensor.utils.mock.subtensor_mock", false]], "bittensor.utils.networking": [[88, "module-bittensor.utils.networking", false]], "bittensor.utils.registration": [[90, "module-bittensor.utils.registration", false]], "bittensor.utils.registration.async_pow": [[89, "module-bittensor.utils.registration.async_pow", false]], "bittensor.utils.registration.pow": [[91, "module-bittensor.utils.registration.pow", false]], "bittensor.utils.registration.register_cuda": [[92, "module-bittensor.utils.registration.register_cuda", false]], "bittensor.utils.subnets": [[93, "module-bittensor.utils.subnets", false]], "bittensor.utils.substrate_utils": [[95, "module-bittensor.utils.substrate_utils", false]], "bittensor.utils.substrate_utils.hasher": [[94, "module-bittensor.utils.substrate_utils.hasher", false]], "bittensor.utils.substrate_utils.storage": [[96, "module-bittensor.utils.substrate_utils.storage", false]], "bittensor.utils.version": [[97, "module-bittensor.utils.version", false]], "bittensor.utils.weight_utils": [[98, "module-bittensor.utils.weight_utils", false]], "bittensor_logger_name (in module bittensor.utils.btlogging.defines)": [[78, "bittensor.utils.btlogging.defines.BITTENSOR_LOGGER_NAME", false]], "bittensorconsole (class in bittensor.utils.btlogging.console)": [[77, "bittensor.utils.btlogging.console.BittensorConsole", false]], "blacklist() (bittensor.core.axon.axonmiddleware method)": [[1, "bittensor.core.axon.AxonMiddleware.blacklist", false]], "blacklist_fns (bittensor.core.axon.axon attribute)": [[1, "bittensor.core.axon.Axon.blacklist_fns", false]], "blacklistedexception": [[25, "bittensor.core.errors.BlacklistedException", false]], "blake2_128() (in module bittensor.utils.substrate_utils.hasher)": [[94, "bittensor.utils.substrate_utils.hasher.blake2_128", false]], "blake2_128_concat() (in module bittensor.utils.substrate_utils.hasher)": [[94, "bittensor.utils.substrate_utils.hasher.blake2_128_concat", false]], "blake2_256() (in module bittensor.utils.substrate_utils.hasher)": [[94, "bittensor.utils.substrate_utils.hasher.blake2_256", false]], "block (bittensor.core.async_subtensor.asyncsubtensor property)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.block", false]], "block (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.block", false]], "block (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.Block", false]], "block (bittensor.core.chain_data.prometheus_info.prometheusinfo attribute)": [[13, "bittensor.core.chain_data.prometheus_info.PrometheusInfo.block", false]], "block (bittensor.core.metagraph.metagraphmixin attribute)": [[53, "bittensor.core.metagraph.MetagraphMixin.block", false]], "block (bittensor.core.metagraph.nontorchmetagraph attribute)": [[53, "bittensor.core.metagraph.NonTorchMetagraph.block", false]], "block (bittensor.core.metagraph.torchmetagraph attribute)": [[53, "bittensor.core.metagraph.TorchMetagraph.block", false]], "block (bittensor.core.subtensor.subtensor property)": [[56, "bittensor.core.subtensor.Subtensor.block", false]], "block (bittensor.core.subtensor_api.subtensorapi property)": [[61, "bittensor.core.subtensor_api.SubtensorApi.block", false]], "block (bittensor.utils.mock.subtensor_mock.axoninfodict attribute)": [[87, "bittensor.utils.mock.subtensor_mock.AxonInfoDict.block", false]], "block (bittensor.utils.mock.subtensor_mock.prometheusinfodict attribute)": [[87, "bittensor.utils.mock.subtensor_mock.PrometheusInfoDict.block", false]], "block_at_registration (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.block_at_registration", false]], "block_at_registration (bittensor.core.chain_data.subnet_state.subnetstate attribute)": [[20, "bittensor.core.chain_data.subnet_state.SubnetState.block_at_registration", false]], "block_at_registration (bittensor.core.metagraph.metagraphmixin attribute)": [[53, "bittensor.core.metagraph.MetagraphMixin.block_at_registration", false]], "block_hash (bittensor.utils.registration.pow.registrationstatistics attribute)": [[91, "bittensor.utils.registration.pow.RegistrationStatistics.block_hash", false]], "block_number (bittensor.utils.mock.subtensor_mock.mocksubtensor attribute)": [[87, "bittensor.utils.mock.subtensor_mock.MockSubtensor.block_number", false]], "block_number (bittensor.utils.registration.pow.powsolution attribute)": [[91, "bittensor.utils.registration.pow.POWSolution.block_number", false]], "block_number (bittensor.utils.registration.pow.registrationstatistics attribute)": [[91, "bittensor.utils.registration.pow.RegistrationStatistics.block_number", false]], "blockatregistration (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.BlockAtRegistration", false]], "blocknotfound (in module bittensor.core.errors)": [[25, "bittensor.core.errors.BlockNotFound", false]], "blocknumber (in module bittensor.utils.mock.subtensor_mock)": [[87, "bittensor.utils.mock.subtensor_mock.BlockNumber", false]], "blocks_since_epoch (bittensor.core.chain_data.subnet_info.subnetinfo attribute)": [[19, "bittensor.core.chain_data.subnet_info.SubnetInfo.blocks_since_epoch", false]], "blocks_since_last_step (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[6, "bittensor.core.chain_data.dynamic_info.DynamicInfo.blocks_since_last_step", false]], "blocks_since_last_step (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.blocks_since_last_step", false]], "blocks_since_last_step (bittensor.core.metagraph.metagraphmixin attribute)": [[53, "bittensor.core.metagraph.MetagraphMixin.blocks_since_last_step", false]], "blocks_since_last_step (bittensor.core.subtensor_api.subnets.subnets attribute)": [[66, "bittensor.core.subtensor_api.subnets.Subnets.blocks_since_last_step", false]], "blocks_since_last_step() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.blocks_since_last_step", false]], "blocks_since_last_step() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.blocks_since_last_step", false]], "blocks_since_last_update (bittensor.core.subtensor_api.subnets.subnets attribute)": [[66, "bittensor.core.subtensor_api.subnets.Subnets.blocks_since_last_update", false]], "blocks_since_last_update() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.blocks_since_last_update", false]], "blocks_since_last_update() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.blocks_since_last_update", false]], "blockssincelaststep (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.BlocksSinceLastStep", false]], "blocktime (in module bittensor.core.settings)": [[54, "bittensor.core.settings.BLOCKTIME", false]], "body_hash (bittensor.core.synapse.synapse property)": [[69, "id0", false]], "body_hash() (bittensor.core.synapse.synapse method)": [[69, "bittensor.core.synapse.Synapse.body_hash", false]], "bonds (bittensor.core.chain_data.neuron_info.neuroninfo attribute)": [[11, "bittensor.core.chain_data.neuron_info.NeuronInfo.bonds", false]], "bonds (bittensor.core.metagraph.metagraphmixin attribute)": [[53, "bittensor.core.metagraph.MetagraphMixin.bonds", false]], "bonds (bittensor.core.metagraph.nontorchmetagraph attribute)": [[53, "bittensor.core.metagraph.NonTorchMetagraph.bonds", false]], "bonds (bittensor.core.metagraph.torchmetagraph attribute)": [[53, "bittensor.core.metagraph.TorchMetagraph.bonds", false]], "bonds (bittensor.core.subtensor_api.subnets.subnets attribute)": [[66, "bittensor.core.subtensor_api.subnets.Subnets.bonds", false]], "bonds() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.bonds", false]], "bonds() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.bonds", false]], "bonds_moving_avg (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.bonds_moving_avg", false]], "bonds_moving_avg (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.bonds_moving_avg", false]], "bonds_moving_avg (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[17, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.bonds_moving_avg", false]], "bondsmovingavg (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.BondsMovingAvg", false]], "brokenthreadpool": [[71, "bittensor.core.threadpool.BrokenThreadPool", false]], "btfileformatter (class in bittensor.utils.btlogging.format)": [[79, "bittensor.utils.btlogging.format.BtFileFormatter", false]], "btstreamformatter (class in bittensor.utils.btlogging.format)": [[79, "bittensor.utils.btlogging.format.BtStreamFormatter", false]], "btstreamingresponsemodel (class in bittensor.core.stream)": [[55, "bittensor.core.stream.BTStreamingResponseModel", false]], "buffer (bittensor.core.tensor.tensor attribute)": [[70, "bittensor.core.tensor.Tensor.buffer", false]], "burn (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.burn", false]], "burn (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.burn", false]], "burn (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.Burn", false]], "burn (bittensor.core.chain_data.subnet_info.subnetinfo attribute)": [[19, "bittensor.core.chain_data.subnet_info.SubnetInfo.burn", false]], "burned_register (bittensor.core.subtensor_api.extrinsics.extrinsics attribute)": [[60, "bittensor.core.subtensor_api.extrinsics.Extrinsics.burned_register", false]], "burned_register() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.burned_register", false]], "burned_register() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.burned_register", false]], "burned_register_extrinsic() (in module bittensor.core.extrinsics.asyncex.registration)": [[29, "bittensor.core.extrinsics.asyncex.registration.burned_register_extrinsic", false]], "burned_register_extrinsic() (in module bittensor.core.extrinsics.registration)": [[42, "bittensor.core.extrinsics.registration.burned_register_extrinsic", false]], "c (bittensor.core.metagraph.metagraphmixin property)": [[53, "bittensor.core.metagraph.MetagraphMixin.C", false]], "calculate_diff_seconds() (in module bittensor.utils.axon_utils)": [[75, "bittensor.utils.axon_utils.calculate_diff_seconds", false]], "call() (bittensor.core.dendrite.dendrite method)": [[24, "bittensor.core.dendrite.Dendrite.call", false]], "call() (bittensor.core.dendrite.dendritemixin method)": [[24, "bittensor.core.dendrite.DendriteMixin.call", false], [24, "id3", false]], "call() (in module bittensor.core.dendrite)": [[24, "bittensor.core.dendrite.call", false]], "call_stream() (bittensor.core.dendrite.dendrite method)": [[24, "bittensor.core.dendrite.Dendrite.call_stream", false]], "call_stream() (bittensor.core.dendrite.dendritemixin method)": [[24, "bittensor.core.dendrite.DendriteMixin.call_stream", false], [24, "id4", false]], "cast_dtype() (in module bittensor.core.tensor)": [[70, "bittensor.core.tensor.cast_dtype", false]], "cast_float() (in module bittensor.core.synapse)": [[69, "bittensor.core.synapse.cast_float", false]], "cast_int() (in module bittensor.core.synapse)": [[69, "bittensor.core.synapse.cast_int", false]], "cast_shape() (in module bittensor.core.tensor)": [[70, "bittensor.core.tensor.cast_shape", false]], "certificate (bittensor.core.types.axonservecallparams attribute)": [[73, "bittensor.core.types.AxonServeCallParams.certificate", false]], "certificate (class in bittensor.utils)": [[85, "bittensor.utils.Certificate", false]], "chain (bittensor.core.subtensor_api.subtensorapi property)": [[61, "bittensor.core.subtensor_api.SubtensorApi.chain", false]], "chain (class in bittensor.core.subtensor_api.chain)": [[57, "bittensor.core.subtensor_api.chain.Chain", false]], "chain_endpoint (bittensor.core.metagraph.metagraphmixin attribute)": [[53, "bittensor.core.metagraph.MetagraphMixin.chain_endpoint", false]], "chain_endpoint (bittensor.core.subtensor_api.subtensorapi attribute)": [[61, "bittensor.core.subtensor_api.SubtensorApi.chain_endpoint", false]], "chain_endpoint (bittensor.core.types.subtensormixin attribute)": [[73, "bittensor.core.types.SubtensorMixin.chain_endpoint", false]], "chain_state (bittensor.utils.mock.subtensor_mock.mocksubtensor attribute)": [[87, "bittensor.utils.mock.subtensor_mock.MockSubtensor.chain_state", false]], "chainconnectionerror": [[25, "bittensor.core.errors.ChainConnectionError", false]], "chaindatatype (class in bittensor.core.chain_data.utils)": [[21, "bittensor.core.chain_data.utils.ChainDataType", false]], "chainerror": [[25, "bittensor.core.errors.ChainError", false]], "chainidentity (bittensor.core.chain_data.utils.chaindatatype attribute)": [[21, "bittensor.core.chain_data.utils.ChainDataType.ChainIdentity", false]], "chainidentity (class in bittensor.core.chain_data.chain_identity)": [[3, "bittensor.core.chain_data.chain_identity.ChainIdentity", false]], "chainqueryerror": [[25, "bittensor.core.errors.ChainQueryError", false]], "chaintransactionerror": [[25, "bittensor.core.errors.ChainTransactionError", false]], "check_and_convert_to_balance() (in module bittensor.utils.balance)": [[76, "bittensor.utils.balance.check_and_convert_to_balance", false]], "check_config() (bittensor.core.axon.axon class method)": [[1, "bittensor.core.axon.Axon.check_config", false]], "check_config() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.check_config", false]], "check_latest_version_in_pypi() (in module bittensor.utils.version)": [[97, "bittensor.utils.version.check_latest_version_in_pypi", false]], "check_version (in module bittensor.utils)": [[85, "bittensor.utils.check_version", false]], "check_version() (in module bittensor.utils.version)": [[97, "bittensor.utils.version.check_version", false]], "close (bittensor.core.subtensor_api.subtensorapi attribute)": [[61, "bittensor.core.subtensor_api.SubtensorApi.close", false]], "close() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.close", false]], "close() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.close", false]], "close_session() (bittensor.core.dendrite.dendrite method)": [[24, "bittensor.core.dendrite.Dendrite.close_session", false]], "close_session() (bittensor.core.dendrite.dendritemixin method)": [[24, "bittensor.core.dendrite.DendriteMixin.close_session", false], [24, "id5", false]], "coldkey (bittensor.core.chain_data.axon_info.axoninfo attribute)": [[2, "bittensor.core.chain_data.axon_info.AxonInfo.coldkey", false]], "coldkey (bittensor.core.chain_data.neuron_info.neuroninfo attribute)": [[11, "bittensor.core.chain_data.neuron_info.NeuronInfo.coldkey", false]], "coldkey (bittensor.core.chain_data.neuron_info_lite.neuroninfolite attribute)": [[12, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite.coldkey", false]], "coldkey (bittensor.core.types.axonservecallparams attribute)": [[73, "bittensor.core.types.AxonServeCallParams.coldkey", false]], "coldkey_ss58 (bittensor.core.chain_data.stake_info.stakeinfo attribute)": [[16, "bittensor.core.chain_data.stake_info.StakeInfo.coldkey_ss58", false]], "coldkeys (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.coldkeys", false]], "coldkeys (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.Coldkeys", false]], "coldkeys (bittensor.core.chain_data.subnet_state.subnetstate attribute)": [[20, "bittensor.core.chain_data.subnet_state.SubnetState.coldkeys", false]], "coldkeys (bittensor.core.metagraph.metagraphmixin property)": [[53, "bittensor.core.metagraph.MetagraphMixin.coldkeys", false]], "color_map (in module bittensor.utils.btlogging.format)": [[79, "bittensor.utils.btlogging.format.color_map", false]], "commit() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.commit", false]], "commit() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.commit", false]], "commit() (bittensor.utils.mock.subtensor_mock.mocksubtensor method)": [[87, "bittensor.utils.mock.subtensor_mock.MockSubtensor.commit", false]], "commit_hex (bittensor.core.chain_data.weight_commit_info.weightcommitinfo attribute)": [[22, "bittensor.core.chain_data.weight_commit_info.WeightCommitInfo.commit_hex", false]], "commit_reveal_enabled (bittensor.core.subtensor_api.commitments.commitments attribute)": [[58, "bittensor.core.subtensor_api.commitments.Commitments.commit_reveal_enabled", false]], "commit_reveal_enabled() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.commit_reveal_enabled", false]], "commit_reveal_enabled() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.commit_reveal_enabled", false]], "commit_reveal_period (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.commit_reveal_period", false]], "commit_reveal_period (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.commit_reveal_period", false]], "commit_reveal_period (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[17, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.commit_reveal_period", false]], "commit_reveal_v3_extrinsic() (in module bittensor.core.extrinsics.asyncex.commit_reveal)": [[26, "bittensor.core.extrinsics.asyncex.commit_reveal.commit_reveal_v3_extrinsic", false]], "commit_reveal_v3_extrinsic() (in module bittensor.core.extrinsics.commit_reveal)": [[38, "bittensor.core.extrinsics.commit_reveal.commit_reveal_v3_extrinsic", false]], "commit_reveal_weights_enabled (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.commit_reveal_weights_enabled", false]], "commit_reveal_weights_enabled (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.commit_reveal_weights_enabled", false]], "commit_reveal_weights_enabled (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[17, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.commit_reveal_weights_enabled", false]], "commit_weights (bittensor.core.subtensor_api.extrinsics.extrinsics attribute)": [[60, "bittensor.core.subtensor_api.extrinsics.Extrinsics.commit_weights", false]], "commit_weights() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.commit_weights", false]], "commit_weights() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.commit_weights", false]], "commit_weights_extrinsic() (in module bittensor.core.extrinsics.asyncex.weights)": [[37, "bittensor.core.extrinsics.asyncex.weights.commit_weights_extrinsic", false]], "commit_weights_extrinsic() (in module bittensor.core.extrinsics.commit_weights)": [[39, "bittensor.core.extrinsics.commit_weights.commit_weights_extrinsic", false]], "commitments (bittensor.core.subtensor_api.subtensorapi property)": [[61, "bittensor.core.subtensor_api.SubtensorApi.commitments", false]], "commitments (class in bittensor.core.subtensor_api.commitments)": [[58, "bittensor.core.subtensor_api.commitments.Commitments", false]], "commitrevealperiod (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.CommitRevealPeriod", false]], "commitrevealweightsenabled (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.CommitRevealWeightsEnabled", false]], "computed_body_hash (bittensor.core.synapse.synapse attribute)": [[69, "bittensor.core.synapse.Synapse.computed_body_hash", false]], "config (bittensor.core.subtensor_api.subtensorapi attribute)": [[61, "bittensor.core.subtensor_api.SubtensorApi.config", false]], "config (class in bittensor.core.config)": [[23, "bittensor.core.config.Config", false]], "config (in module bittensor.utils.easy_imports)": [[83, "bittensor.utils.easy_imports.config", false]], "config() (bittensor.core.axon.axon class method)": [[1, "bittensor.core.axon.Axon.config", false]], "config() (bittensor.core.threadpool.prioritythreadpoolexecutor class method)": [[71, "bittensor.core.threadpool.PriorityThreadPoolExecutor.config", false]], "config() (bittensor.core.types.subtensormixin static method)": [[73, "bittensor.core.types.SubtensorMixin.config", false]], "config() (bittensor.utils.btlogging.loggingmachine.loggingmachine class method)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.config", false]], "connection_requirements (bittensor.core.chain_data.subnet_info.subnetinfo attribute)": [[19, "bittensor.core.chain_data.subnet_info.SubnetInfo.connection_requirements", false]], "consensus (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.consensus", false]], "consensus (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.Consensus", false]], "consensus (bittensor.core.chain_data.neuron_info.neuroninfo attribute)": [[11, "bittensor.core.chain_data.neuron_info.NeuronInfo.consensus", false]], "consensus (bittensor.core.chain_data.neuron_info_lite.neuroninfolite attribute)": [[12, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite.consensus", false]], "consensus (bittensor.core.chain_data.subnet_state.subnetstate attribute)": [[20, "bittensor.core.chain_data.subnet_state.SubnetState.consensus", false]], "consensus (bittensor.core.metagraph.metagraphmixin attribute)": [[53, "bittensor.core.metagraph.MetagraphMixin.consensus", false]], "consensus (bittensor.core.metagraph.nontorchmetagraph attribute)": [[53, "bittensor.core.metagraph.NonTorchMetagraph.consensus", false]], "consensus (bittensor.core.metagraph.torchmetagraph attribute)": [[53, "bittensor.core.metagraph.TorchMetagraph.consensus", false]], "console (bittensor.utils.btlogging.loggingmachine.loggingmachine attribute)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.console", false]], "console (bittensor.utils.registration.pow.registrationstatisticslogger attribute)": [[91, "bittensor.utils.registration.pow.RegistrationStatisticsLogger.console", false]], "console (class in bittensor.utils.registration.pow)": [[91, "bittensor.utils.registration.pow.Console", false]], "convert_and_normalize_weights_and_uids() (in module bittensor.utils.weight_utils)": [[98, "bittensor.utils.weight_utils.convert_and_normalize_weights_and_uids", false]], "convert_bond_uids_and_vals_to_tensor() (in module bittensor.utils.weight_utils)": [[98, "bittensor.utils.weight_utils.convert_bond_uids_and_vals_to_tensor", false]], "convert_root_weight_uids_and_vals_to_tensor() (in module bittensor.utils.weight_utils)": [[98, "bittensor.utils.weight_utils.convert_root_weight_uids_and_vals_to_tensor", false]], "convert_storage_parameter() (bittensor.utils.substrate_utils.storage.storagekey method)": [[96, "bittensor.utils.substrate_utils.storage.StorageKey.convert_storage_parameter", false]], "convert_uids_and_weights() (in module bittensor.utils.weight_utils)": [[98, "bittensor.utils.weight_utils.convert_uids_and_weights", false]], "convert_weight_uids_and_vals_to_tensor() (in module bittensor.utils.weight_utils)": [[98, "bittensor.utils.weight_utils.convert_weight_uids_and_vals_to_tensor", false]], "convert_weights_and_uids_for_emit() (in module bittensor.utils.weight_utils)": [[98, "bittensor.utils.weight_utils.convert_weights_and_uids_for_emit", false]], "copy() (bittensor.core.types.axonservecallparams method)": [[73, "bittensor.core.types.AxonServeCallParams.copy", false]], "coroutine (bittensor.utils.mock.subtensor_mock.reusablecoroutine attribute)": [[87, "bittensor.utils.mock.subtensor_mock.ReusableCoroutine.coroutine", false]], "create_error_response() (in module bittensor.core.axon)": [[1, "bittensor.core.axon.create_error_response", false]], "create_from_data() (bittensor.utils.substrate_utils.storage.storagekey class method)": [[96, "bittensor.utils.substrate_utils.storage.StorageKey.create_from_data", false]], "create_from_storage_function() (bittensor.utils.substrate_utils.storage.storagekey class method)": [[96, "bittensor.utils.substrate_utils.storage.StorageKey.create_from_storage_function", false]], "create_pow() (in module bittensor.utils.registration.pow)": [[91, "bittensor.utils.registration.pow.create_pow", false]], "create_pow_async() (in module bittensor.utils.registration.async_pow)": [[89, "bittensor.utils.registration.async_pow.create_pow_async", false]], "create_streaming_response() (bittensor.core.stream.streamingsynapse method)": [[55, "bittensor.core.stream.StreamingSynapse.create_streaming_response", false]], "create_subnet() (bittensor.utils.mock.subtensor_mock.mocksubtensor method)": [[87, "bittensor.utils.mock.subtensor_mock.MockSubtensor.create_subnet", false]], "critical() (bittensor.utils.btlogging.console.bittensorconsole method)": [[77, "bittensor.utils.btlogging.console.BittensorConsole.critical", false]], "critical() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.critical", false]], "cudasolver (class in bittensor.utils.registration.pow)": [[91, "bittensor.utils.registration.pow.CUDASolver", false]], "custom_logger_method_stack_level (in module bittensor.utils.btlogging.loggingmachine)": [[82, "bittensor.utils.btlogging.loggingmachine.CUSTOM_LOGGER_METHOD_STACK_LEVEL", false]], "d (bittensor.core.metagraph.metagraphmixin property)": [[53, "bittensor.core.metagraph.MetagraphMixin.D", false]], "data (bittensor.utils.substrate_utils.storage.storagekey attribute)": [[96, "bittensor.utils.substrate_utils.storage.StorageKey.data", false]], "date_format (in module bittensor.utils.btlogging.defines)": [[78, "bittensor.utils.btlogging.defines.DATE_FORMAT", false]], "debug (bittensor.utils.btlogging.loggingmachine.loggingconfig attribute)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingConfig.debug", false]], "debug (bittensor.utils.btlogging.loggingmachine.loggingmachine attribute)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.Debug", false]], "debug() (bittensor.utils.btlogging.console.bittensorconsole method)": [[77, "bittensor.utils.btlogging.console.BittensorConsole.debug", false]], "debug() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.debug", false]], "debug() (in module bittensor.utils.easy_imports)": [[83, "bittensor.utils.easy_imports.debug", false]], "decode_account_id() (in module bittensor.core.chain_data.utils)": [[21, "bittensor.core.chain_data.utils.decode_account_id", false]], "decode_account_id_list() (bittensor.core.chain_data.scheduled_coldkey_swap_info.scheduledcoldkeyswapinfo class method)": [[15, "bittensor.core.chain_data.scheduled_coldkey_swap_info.ScheduledColdkeySwapInfo.decode_account_id_list", false]], "decode_hex_identity_dict() (in module bittensor.utils)": [[85, "bittensor.utils.decode_hex_identity_dict", false]], "decode_metadata() (in module bittensor.core.chain_data.utils)": [[21, "bittensor.core.chain_data.utils.decode_metadata", false]], "decode_revealed_commitment() (in module bittensor.core.chain_data.utils)": [[21, "bittensor.core.chain_data.utils.decode_revealed_commitment", false]], "decode_revealed_commitment_with_hotkey() (in module bittensor.core.chain_data.utils)": [[21, "bittensor.core.chain_data.utils.decode_revealed_commitment_with_hotkey", false]], "decode_scale_value() (bittensor.utils.substrate_utils.storage.storagekey method)": [[96, "bittensor.utils.substrate_utils.storage.StorageKey.decode_scale_value", false]], "decrease_take_extrinsic() (in module bittensor.core.extrinsics.asyncex.take)": [[34, "bittensor.core.extrinsics.asyncex.take.decrease_take_extrinsic", false]], "decrease_take_extrinsic() (in module bittensor.core.extrinsics.take)": [[48, "bittensor.core.extrinsics.take.decrease_take_extrinsic", false]], "decrypt() (in module bittensor.core.timelock)": [[72, "bittensor.core.timelock.decrypt", false]], "default (bittensor.utils.btlogging.loggingmachine.loggingmachine attribute)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.Default", false]], "default() (bittensor.core.config.defaultconfig class method)": [[23, "bittensor.core.config.DefaultConfig.default", false]], "default() (bittensor.utils.mock.subtensor_mock.axoninfodict class method)": [[87, "bittensor.utils.mock.subtensor_mock.AxonInfoDict.default", false]], "default() (bittensor.utils.mock.subtensor_mock.infodict class method)": [[87, "bittensor.utils.mock.subtensor_mock.InfoDict.default", false]], "default() (bittensor.utils.mock.subtensor_mock.prometheusinfodict class method)": [[87, "bittensor.utils.mock.subtensor_mock.PrometheusInfoDict.default", false]], "default_endpoint (in module bittensor.core.settings)": [[54, "bittensor.core.settings.DEFAULT_ENDPOINT", false]], "default_log_backup_count (in module bittensor.utils.btlogging.defines)": [[78, "bittensor.utils.btlogging.defines.DEFAULT_LOG_BACKUP_COUNT", false]], "default_log_file_name (in module bittensor.utils.btlogging.defines)": [[78, "bittensor.utils.btlogging.defines.DEFAULT_LOG_FILE_NAME", false]], "default_log_format (in module bittensor.utils.btlogging.format)": [[79, "bittensor.utils.btlogging.format.DEFAULT_LOG_FORMAT", false]], "default_max_rotating_log_file_size (in module bittensor.utils.btlogging.defines)": [[78, "bittensor.utils.btlogging.defines.DEFAULT_MAX_ROTATING_LOG_FILE_SIZE", false]], "default_network (in module bittensor.core.settings)": [[54, "bittensor.core.settings.DEFAULT_NETWORK", false]], "default_trace_format (in module bittensor.utils.btlogging.format)": [[79, "bittensor.utils.btlogging.format.DEFAULT_TRACE_FORMAT", false]], "default_verify() (bittensor.core.axon.axon method)": [[1, "bittensor.core.axon.Axon.default_verify", false]], "defaultconfig (class in bittensor.core.config)": [[23, "bittensor.core.config.DefaultConfig", false]], "defaults (in module bittensor.core.settings)": [[54, "bittensor.core.settings.DEFAULTS", false]], "delegate_ss58 (bittensor.core.chain_data.delegate_info_lite.delegateinfolite attribute)": [[5, "bittensor.core.chain_data.delegate_info_lite.DelegateInfoLite.delegate_ss58", false]], "delegatedinfo (bittensor.core.chain_data.utils.chaindatatype attribute)": [[21, "bittensor.core.chain_data.utils.ChainDataType.DelegatedInfo", false]], "delegatedinfo (class in bittensor.core.chain_data.delegate_info)": [[4, "bittensor.core.chain_data.delegate_info.DelegatedInfo", false]], "delegateinfo (bittensor.core.chain_data.utils.chaindatatype attribute)": [[21, "bittensor.core.chain_data.utils.ChainDataType.DelegateInfo", false]], "delegateinfo (class in bittensor.core.chain_data.delegate_info)": [[4, "bittensor.core.chain_data.delegate_info.DelegateInfo", false]], "delegateinfobase (class in bittensor.core.chain_data.delegate_info)": [[4, "bittensor.core.chain_data.delegate_info.DelegateInfoBase", false]], "delegateinfolite (class in bittensor.core.chain_data.delegate_info_lite)": [[5, "bittensor.core.chain_data.delegate_info_lite.DelegateInfoLite", false]], "delegates (bittensor.core.subtensor_api.subtensorapi property)": [[61, "bittensor.core.subtensor_api.SubtensorApi.delegates", false]], "delegates (bittensor.utils.mock.subtensor_mock.mocksubtensorstate attribute)": [[87, "bittensor.utils.mock.subtensor_mock.MockSubtensorState.Delegates", false]], "delegates (class in bittensor.core.subtensor_api.delegates)": [[59, "bittensor.core.subtensor_api.delegates.Delegates", false]], "delegatetaketoohigh": [[25, "bittensor.core.errors.DelegateTakeTooHigh", false]], "delegatetaketoolow": [[25, "bittensor.core.errors.DelegateTakeTooLow", false]], "delegatetxratelimitexceeded": [[25, "bittensor.core.errors.DelegateTxRateLimitExceeded", false]], "dendrite (bittensor.core.synapse.synapse attribute)": [[69, "bittensor.core.synapse.Synapse.dendrite", false]], "dendrite (bittensor.utils.subnets.subnetsapi attribute)": [[93, "bittensor.utils.subnets.SubnetsAPI.dendrite", false]], "dendrite (class in bittensor.core.dendrite)": [[24, "bittensor.core.dendrite.Dendrite", false]], "dendrite (in module bittensor.utils.easy_imports)": [[83, "bittensor.utils.easy_imports.dendrite", false]], "dendrite_default_error (in module bittensor.core.dendrite)": [[24, "bittensor.core.dendrite.DENDRITE_DEFAULT_ERROR", false]], "dendrite_error_mapping (in module bittensor.core.dendrite)": [[24, "bittensor.core.dendrite.DENDRITE_ERROR_MAPPING", false]], "dendritemixin (class in bittensor.core.dendrite)": [[24, "bittensor.core.dendrite.DendriteMixin", false]], "deregister_primary_logger() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.deregister_primary_logger", false]], "description (bittensor.core.chain_data.chain_identity.chainidentity attribute)": [[3, "bittensor.core.chain_data.chain_identity.ChainIdentity.description", false]], "description (bittensor.core.chain_data.subnet_identity.subnetidentity attribute)": [[18, "bittensor.core.chain_data.subnet_identity.SubnetIdentity.description", false]], "deserialize() (bittensor.core.synapse.synapse method)": [[69, "bittensor.core.synapse.Synapse.deserialize", false], [69, "id1", false]], "deserialize() (bittensor.core.tensor.tensor method)": [[70, "bittensor.core.tensor.Tensor.deserialize", false]], "determine_block_hash (bittensor.core.subtensor_api.subtensorapi attribute)": [[61, "bittensor.core.subtensor_api.SubtensorApi.determine_block_hash", false]], "determine_block_hash() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.determine_block_hash", false]], "determine_block_hash() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.determine_block_hash", false]], "determine_chain_endpoint_and_network() (in module bittensor.utils)": [[85, "bittensor.utils.determine_chain_endpoint_and_network", false]], "dev_id (bittensor.utils.registration.pow.cudasolver attribute)": [[91, "bittensor.utils.registration.pow.CUDASolver.dev_id", false]], "dict() (bittensor.core.types.axonservecallparams method)": [[73, "bittensor.core.types.AxonServeCallParams.dict", false]], "difficulty (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.difficulty", false]], "difficulty (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.difficulty", false]], "difficulty (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.Difficulty", false]], "difficulty (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[17, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.difficulty", false]], "difficulty (bittensor.core.chain_data.subnet_info.subnetinfo attribute)": [[19, "bittensor.core.chain_data.subnet_info.SubnetInfo.difficulty", false]], "difficulty (bittensor.core.subtensor_api.subnets.subnets attribute)": [[66, "bittensor.core.subtensor_api.subnets.Subnets.difficulty", false]], "difficulty (bittensor.utils.mock.subtensor_mock.mocksubtensorstate attribute)": [[87, "bittensor.utils.mock.subtensor_mock.MockSubtensorState.Difficulty", false]], "difficulty (bittensor.utils.registration.pow.powsolution attribute)": [[91, "bittensor.utils.registration.pow.POWSolution.difficulty", false]], "difficulty (bittensor.utils.registration.pow.registrationstatistics attribute)": [[91, "bittensor.utils.registration.pow.RegistrationStatistics.difficulty", false]], "difficulty() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.difficulty", false]], "difficulty() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.difficulty", false]], "disable_debug (bittensor.utils.btlogging.loggingmachine.loggingmachine attribute)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.disable_debug", false]], "disable_info (bittensor.utils.btlogging.loggingmachine.loggingmachine attribute)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.disable_info", false]], "disable_logging (bittensor.utils.btlogging.loggingmachine.loggingmachine attribute)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.disable_logging", false]], "disable_third_party_loggers() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.disable_third_party_loggers", false]], "disable_trace (bittensor.utils.btlogging.loggingmachine.loggingmachine attribute)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.disable_trace", false]], "disable_warning (bittensor.utils.btlogging.loggingmachine.loggingmachine attribute)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.disable_warning", false]], "disabled (bittensor.utils.btlogging.loggingmachine.loggingmachine attribute)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.Disabled", false]], "discord (bittensor.core.chain_data.chain_identity.chainidentity attribute)": [[3, "bittensor.core.chain_data.chain_identity.ChainIdentity.discord", false]], "discord (bittensor.core.chain_data.subnet_identity.subnetidentity attribute)": [[18, "bittensor.core.chain_data.subnet_identity.SubnetIdentity.discord", false]], "dispatch() (bittensor.core.axon.axonmiddleware method)": [[1, "bittensor.core.axon.AxonMiddleware.dispatch", false]], "dividends (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.dividends", false]], "dividends (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.Dividends", false]], "dividends (bittensor.core.chain_data.neuron_info.neuroninfo attribute)": [[11, "bittensor.core.chain_data.neuron_info.NeuronInfo.dividends", false]], "dividends (bittensor.core.chain_data.neuron_info_lite.neuroninfolite attribute)": [[12, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite.dividends", false]], "dividends (bittensor.core.chain_data.subnet_state.subnetstate attribute)": [[20, "bittensor.core.chain_data.subnet_state.SubnetState.dividends", false]], "dividends (bittensor.core.metagraph.metagraphmixin attribute)": [[53, "bittensor.core.metagraph.MetagraphMixin.dividends", false]], "dividends (bittensor.core.metagraph.nontorchmetagraph attribute)": [[53, "bittensor.core.metagraph.NonTorchMetagraph.dividends", false]], "dividends (bittensor.core.metagraph.torchmetagraph attribute)": [[53, "bittensor.core.metagraph.TorchMetagraph.dividends", false]], "do_block_step() (bittensor.utils.mock.subtensor_mock.mocksubtensor method)": [[87, "bittensor.utils.mock.subtensor_mock.MockSubtensor.do_block_step", false]], "do_serve_axon() (bittensor.utils.mock.subtensor_mock.mocksubtensor method)": [[87, "bittensor.utils.mock.subtensor_mock.MockSubtensor.do_serve_axon", false]], "do_serve_axon() (in module bittensor.core.extrinsics.asyncex.serving)": [[31, "bittensor.core.extrinsics.asyncex.serving.do_serve_axon", false]], "do_serve_axon() (in module bittensor.core.extrinsics.serving)": [[44, "bittensor.core.extrinsics.serving.do_serve_axon", false]], "do_serve_prometheus() (bittensor.utils.mock.subtensor_mock.mocksubtensor method)": [[87, "bittensor.utils.mock.subtensor_mock.MockSubtensor.do_serve_prometheus", false]], "do_set_weights() (bittensor.utils.mock.subtensor_mock.mocksubtensor method)": [[87, "bittensor.utils.mock.subtensor_mock.MockSubtensor.do_set_weights", false]], "do_transfer() (bittensor.utils.mock.subtensor_mock.mocksubtensor method)": [[87, "bittensor.utils.mock.subtensor_mock.MockSubtensor.do_transfer", false]], "does_hotkey_exist (bittensor.core.subtensor_api.wallets.wallets attribute)": [[68, "bittensor.core.subtensor_api.wallets.Wallets.does_hotkey_exist", false]], "does_hotkey_exist() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.does_hotkey_exist", false]], "does_hotkey_exist() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.does_hotkey_exist", false]], "drain (bittensor.core.chain_data.stake_info.stakeinfo attribute)": [[16, "bittensor.core.chain_data.stake_info.StakeInfo.drain", false]], "dtype (bittensor.core.tensor.tensor attribute)": [[70, "bittensor.core.tensor.Tensor.dtype", false]], "dtypes (class in bittensor.core.tensor)": [[70, "bittensor.core.tensor.DTypes", false]], "dtypes (in module bittensor.core.tensor)": [[70, "bittensor.core.tensor.dtypes", false]], "duplicatechild": [[25, "bittensor.core.errors.DuplicateChild", false]], "dynamicinfo (bittensor.core.chain_data.utils.chaindatatype attribute)": [[21, "bittensor.core.chain_data.utils.ChainDataType.DynamicInfo", false]], "dynamicinfo (class in bittensor.core.chain_data.dynamic_info)": [[6, "bittensor.core.chain_data.dynamic_info.DynamicInfo", false]], "e (bittensor.core.metagraph.metagraphmixin property)": [[53, "bittensor.core.metagraph.MetagraphMixin.E", false]], "emission (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[6, "bittensor.core.chain_data.dynamic_info.DynamicInfo.emission", false]], "emission (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.emission", false]], "emission (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.Emission", false]], "emission (bittensor.core.chain_data.neuron_info.neuroninfo attribute)": [[11, "bittensor.core.chain_data.neuron_info.NeuronInfo.emission", false]], "emission (bittensor.core.chain_data.neuron_info_lite.neuroninfolite attribute)": [[12, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite.emission", false]], "emission (bittensor.core.chain_data.stake_info.stakeinfo attribute)": [[16, "bittensor.core.chain_data.stake_info.StakeInfo.emission", false]], "emission (bittensor.core.chain_data.subnet_state.subnetstate attribute)": [[20, "bittensor.core.chain_data.subnet_state.SubnetState.emission", false]], "emission (bittensor.core.metagraph.metagraphmixin attribute)": [[53, "bittensor.core.metagraph.MetagraphMixin.emission", false]], "emission (bittensor.core.metagraph.nontorchmetagraph attribute)": [[53, "bittensor.core.metagraph.NonTorchMetagraph.emission", false]], "emission (bittensor.core.metagraph.torchmetagraph attribute)": [[53, "bittensor.core.metagraph.TorchMetagraph.emission", false]], "emission_history (bittensor.core.chain_data.subnet_state.subnetstate attribute)": [[20, "bittensor.core.chain_data.subnet_state.SubnetState.emission_history", false]], "emission_value (bittensor.core.chain_data.subnet_info.subnetinfo attribute)": [[19, "bittensor.core.chain_data.subnet_info.SubnetInfo.emission_value", false]], "emissions (bittensor.core.metagraph.metagraphmixin attribute)": [[53, "bittensor.core.metagraph.MetagraphMixin.emissions", false]], "emoji_map (in module bittensor.utils.btlogging.format)": [[79, "bittensor.utils.btlogging.format.emoji_map", false]], "enable_console (bittensor.utils.btlogging.loggingmachine.loggingmachine attribute)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.enable_console", false]], "enable_debug (bittensor.utils.btlogging.loggingmachine.loggingmachine attribute)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.enable_debug", false]], "enable_default (bittensor.utils.btlogging.loggingmachine.loggingmachine attribute)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.enable_default", false]], "enable_info (bittensor.utils.btlogging.loggingmachine.loggingmachine attribute)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.enable_info", false]], "enable_third_party_loggers() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.enable_third_party_loggers", false]], "enable_trace (bittensor.utils.btlogging.loggingmachine.loggingmachine attribute)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.enable_trace", false]], "enable_warning (bittensor.utils.btlogging.loggingmachine.loggingmachine attribute)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.enable_warning", false]], "encode() (bittensor.core.chain_data.ip_info.ipinfo method)": [[9, "bittensor.core.chain_data.ip_info.IPInfo.encode", false]], "encode_params (bittensor.core.subtensor_api.subtensorapi attribute)": [[61, "bittensor.core.subtensor_api.SubtensorApi.encode_params", false]], "encode_params() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.encode_params", false]], "encode_params() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.encode_params", false]], "encrypt() (in module bittensor.core.timelock)": [[72, "bittensor.core.timelock.encrypt", false]], "end (bittensor.core.chain_data.proposal_vote_data.proposalvotedata attribute)": [[14, "bittensor.core.chain_data.proposal_vote_data.ProposalVoteData.end", false]], "error() (bittensor.utils.btlogging.console.bittensorconsole method)": [[77, "bittensor.utils.btlogging.console.BittensorConsole.error", false]], "error() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.error", false]], "event_loop_is_running() (in module bittensor.core.dendrite)": [[24, "bittensor.core.dendrite.event_loop_is_running", false]], "exception() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.exception", false]], "external_ip (bittensor.core.axon.axon attribute)": [[1, "bittensor.core.axon.Axon.external_ip", false]], "external_ip (bittensor.core.dendrite.dendritemixin attribute)": [[24, "bittensor.core.dendrite.DendriteMixin.external_ip", false]], "external_port (bittensor.core.axon.axon attribute)": [[1, "bittensor.core.axon.Axon.external_port", false]], "externalipnotfound": [[88, "bittensor.utils.networking.ExternalIPNotFound", false]], "extract_response_json() (bittensor.core.stream.streamingsynapse method)": [[55, "bittensor.core.stream.StreamingSynapse.extract_response_json", false]], "extrinsicnotfound (in module bittensor.core.errors)": [[25, "bittensor.core.errors.ExtrinsicNotFound", false]], "extrinsics (bittensor.core.subtensor_api.subtensorapi property)": [[61, "bittensor.core.subtensor_api.SubtensorApi.extrinsics", false]], "extrinsics (class in bittensor.core.subtensor_api.extrinsics)": [[60, "bittensor.core.subtensor_api.extrinsics.Extrinsics", false]], "extrinsics_subpackage (in module bittensor.utils.easy_imports)": [[83, "bittensor.utils.easy_imports.extrinsics_subpackage", false]], "failed_verification (bittensor.core.synapse.synapse property)": [[69, "bittensor.core.synapse.Synapse.failed_verification", false]], "fast_config (bittensor.core.axon.axon attribute)": [[1, "bittensor.core.axon.Axon.fast_config", false]], "fast_server (bittensor.core.axon.axon attribute)": [[1, "bittensor.core.axon.Axon.fast_server", false]], "fastapithreadedserver (class in bittensor.core.axon)": [[1, "bittensor.core.axon.FastAPIThreadedServer", false]], "filter_netuids_by_registered_hotkeys (bittensor.core.subtensor_api.wallets.wallets attribute)": [[68, "bittensor.core.subtensor_api.wallets.Wallets.filter_netuids_by_registered_hotkeys", false]], "filter_netuids_by_registered_hotkeys() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.filter_netuids_by_registered_hotkeys", false]], "filter_netuids_by_registered_hotkeys() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.filter_netuids_by_registered_hotkeys", false]], "finney_entrypoint (in module bittensor.core.settings)": [[54, "bittensor.core.settings.FINNEY_ENTRYPOINT", false]], "finney_test_entrypoint (in module bittensor.core.settings)": [[54, "bittensor.core.settings.FINNEY_TEST_ENTRYPOINT", false]], "fixed_to_float() (in module bittensor.utils.balance)": [[76, "bittensor.utils.balance.fixed_to_float", false]], "fixedpoint (class in bittensor.utils.balance)": [[76, "bittensor.utils.balance.FixedPoint", false]], "float_to_u64() (in module bittensor.utils)": [[85, "bittensor.utils.float_to_u64", false]], "force_register_neuron() (bittensor.utils.mock.subtensor_mock.mocksubtensor method)": [[87, "bittensor.utils.mock.subtensor_mock.MockSubtensor.force_register_neuron", false]], "force_set_balance() (bittensor.utils.mock.subtensor_mock.mocksubtensor method)": [[87, "bittensor.utils.mock.subtensor_mock.MockSubtensor.force_set_balance", false]], "format() (bittensor.utils.btlogging.format.btfileformatter method)": [[79, "bittensor.utils.btlogging.format.BtFileFormatter.format", false]], "format() (bittensor.utils.btlogging.format.btstreamformatter method)": [[79, "bittensor.utils.btlogging.format.BtStreamFormatter.format", false]], "format_error_message() (in module bittensor.utils)": [[85, "bittensor.utils.format_error_message", false]], "formattime() (bittensor.utils.btlogging.format.btfileformatter method)": [[79, "bittensor.utils.btlogging.format.BtFileFormatter.formatTime", false]], "formattime() (bittensor.utils.btlogging.format.btstreamformatter method)": [[79, "bittensor.utils.btlogging.format.BtStreamFormatter.formatTime", false]], "forward() (bittensor.core.dendrite.dendrite method)": [[24, "bittensor.core.dendrite.Dendrite.forward", false]], "forward() (bittensor.core.dendrite.dendritemixin method)": [[24, "bittensor.core.dendrite.DendriteMixin.forward", false], [24, "id7", false]], "forward_class_types (bittensor.core.axon.axon attribute)": [[1, "bittensor.core.axon.Axon.forward_class_types", false]], "forward_fns (bittensor.core.axon.axon attribute)": [[1, "bittensor.core.axon.Axon.forward_fns", false]], "from_dict() (bittensor.core.chain_data.info_base.infobase class method)": [[8, "bittensor.core.chain_data.info_base.InfoBase.from_dict", false]], "from_dict() (bittensor.core.chain_data.proposal_vote_data.proposalvotedata class method)": [[14, "bittensor.core.chain_data.proposal_vote_data.ProposalVoteData.from_dict", false]], "from_dict() (bittensor.core.chain_data.stake_info.stakeinfo class method)": [[16, "bittensor.core.chain_data.stake_info.StakeInfo.from_dict", false]], "from_error() (bittensor.core.errors.chainerror class method)": [[25, "bittensor.core.errors.ChainError.from_error", false]], "from_float() (bittensor.utils.balance.balance static method)": [[76, "bittensor.utils.balance.Balance.from_float", false]], "from_headers() (bittensor.core.synapse.synapse class method)": [[69, "id2", false]], "from_headers() (bittensor.core.synapse.synapse method)": [[69, "bittensor.core.synapse.Synapse.from_headers", false]], "from_neuron_info() (bittensor.core.chain_data.axon_info.axoninfo class method)": [[2, "bittensor.core.chain_data.axon_info.AxonInfo.from_neuron_info", false]], "from_parameter_dict() (bittensor.core.chain_data.axon_info.axoninfo class method)": [[2, "bittensor.core.chain_data.axon_info.AxonInfo.from_parameter_dict", false]], "from_parameter_dict() (bittensor.core.chain_data.ip_info.ipinfo class method)": [[9, "bittensor.core.chain_data.ip_info.IPInfo.from_parameter_dict", false]], "from_rao() (bittensor.utils.balance.balance static method)": [[76, "bittensor.utils.balance.Balance.from_rao", false]], "from_scale_encoding() (in module bittensor.core.chain_data.utils)": [[21, "bittensor.core.chain_data.utils.from_scale_encoding", false]], "from_scale_encoding_using_type_string() (in module bittensor.core.chain_data.utils)": [[21, "bittensor.core.chain_data.utils.from_scale_encoding_using_type_string", false]], "from_string() (bittensor.core.chain_data.axon_info.axoninfo class method)": [[2, "bittensor.core.chain_data.axon_info.AxonInfo.from_string", false]], "from_tao() (bittensor.utils.balance.balance static method)": [[76, "bittensor.utils.balance.Balance.from_tao", false]], "from_vec_u8() (bittensor.core.chain_data.weight_commit_info.weightcommitinfo class method)": [[22, "bittensor.core.chain_data.weight_commit_info.WeightCommitInfo.from_vec_u8", false]], "from_weights_bonds_and_neuron_lite() (bittensor.core.chain_data.neuron_info.neuroninfo class method)": [[11, "bittensor.core.chain_data.neuron_info.NeuronInfo.from_weights_bonds_and_neuron_lite", false]], "full_address (bittensor.core.axon.axon attribute)": [[1, "bittensor.core.axon.Axon.full_address", false]], "generate() (bittensor.utils.substrate_utils.storage.storagekey method)": [[96, "bittensor.utils.substrate_utils.storage.StorageKey.generate", false]], "generate_weight_hash() (in module bittensor.utils.weight_utils)": [[98, "bittensor.utils.weight_utils.generate_weight_hash", false]], "get_all_commitments (bittensor.core.subtensor_api.commitments.commitments attribute)": [[58, "bittensor.core.subtensor_api.commitments.Commitments.get_all_commitments", false]], "get_all_commitments() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_all_commitments", false]], "get_all_commitments() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_all_commitments", false]], "get_all_metagraphs_info (bittensor.core.subtensor_api.metagraphs.metagraphs attribute)": [[62, "bittensor.core.subtensor_api.metagraphs.Metagraphs.get_all_metagraphs_info", false]], "get_all_metagraphs_info() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_all_metagraphs_info", false]], "get_all_metagraphs_info() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_all_metagraphs_info", false]], "get_all_neuron_certificates (bittensor.core.subtensor_api.neurons.neurons attribute)": [[63, "bittensor.core.subtensor_api.neurons.Neurons.get_all_neuron_certificates", false]], "get_all_neuron_certificates() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_all_neuron_certificates", false]], "get_all_neuron_certificates() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_all_neuron_certificates", false]], "get_all_revealed_commitments (bittensor.core.subtensor_api.commitments.commitments attribute)": [[58, "bittensor.core.subtensor_api.commitments.Commitments.get_all_revealed_commitments", false]], "get_all_revealed_commitments() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_all_revealed_commitments", false]], "get_all_revealed_commitments() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_all_revealed_commitments", false]], "get_all_subnets_info (bittensor.core.subtensor_api.subnets.subnets attribute)": [[66, "bittensor.core.subtensor_api.subnets.Subnets.get_all_subnets_info", false]], "get_all_subnets_info() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_all_subnets_info", false]], "get_all_subnets_info() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_all_subnets_info", false]], "get_and_save_latest_version() (in module bittensor.utils.version)": [[97, "bittensor.utils.version.get_and_save_latest_version", false]], "get_async_subtensor() (in module bittensor.core.async_subtensor)": [[0, "bittensor.core.async_subtensor.get_async_subtensor", false]], "get_balance (bittensor.core.subtensor_api.wallets.wallets attribute)": [[68, "bittensor.core.subtensor_api.wallets.Wallets.get_balance", false]], "get_balance() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_balance", false]], "get_balance() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_balance", false]], "get_balance() (bittensor.utils.mock.subtensor_mock.mocksubtensor method)": [[87, "bittensor.utils.mock.subtensor_mock.MockSubtensor.get_balance", false]], "get_balances (bittensor.core.subtensor_api.wallets.wallets attribute)": [[68, "bittensor.core.subtensor_api.wallets.Wallets.get_balances", false]], "get_balances() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_balances", false]], "get_balances() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_balances", false]], "get_block_hash (bittensor.core.subtensor_api.chain.chain attribute)": [[57, "bittensor.core.subtensor_api.chain.Chain.get_block_hash", false]], "get_block_hash() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_block_hash", false]], "get_block_hash() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_block_hash", false]], "get_block_hash() (bittensor.utils.mock.subtensor_mock.mocksubtensor method)": [[87, "bittensor.utils.mock.subtensor_mock.MockSubtensor.get_block_hash", false]], "get_children (bittensor.core.subtensor_api.subnets.subnets attribute)": [[66, "bittensor.core.subtensor_api.subnets.Subnets.get_children", false]], "get_children (bittensor.core.subtensor_api.wallets.wallets attribute)": [[68, "bittensor.core.subtensor_api.wallets.Wallets.get_children", false]], "get_children() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_children", false]], "get_children() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_children", false]], "get_children_pending (bittensor.core.subtensor_api.subnets.subnets attribute)": [[66, "bittensor.core.subtensor_api.subnets.Subnets.get_children_pending", false]], "get_children_pending (bittensor.core.subtensor_api.wallets.wallets attribute)": [[68, "bittensor.core.subtensor_api.wallets.Wallets.get_children_pending", false]], "get_children_pending() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_children_pending", false]], "get_children_pending() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_children_pending", false]], "get_commitment (bittensor.core.subtensor_api.commitments.commitments attribute)": [[58, "bittensor.core.subtensor_api.commitments.Commitments.get_commitment", false]], "get_commitment() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_commitment", false]], "get_commitment() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_commitment", false]], "get_commitment() (bittensor.utils.mock.subtensor_mock.mocksubtensor method)": [[87, "bittensor.utils.mock.subtensor_mock.MockSubtensor.get_commitment", false]], "get_config() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.get_config", false]], "get_cpu_count() (in module bittensor.utils.registration.pow)": [[91, "bittensor.utils.registration.pow.get_cpu_count", false]], "get_current_block (bittensor.core.subtensor_api.chain.chain attribute)": [[57, "bittensor.core.subtensor_api.chain.Chain.get_current_block", false]], "get_current_block() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_current_block", false]], "get_current_block() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_current_block", false]], "get_current_block() (bittensor.utils.mock.subtensor_mock.mocksubtensor method)": [[87, "bittensor.utils.mock.subtensor_mock.MockSubtensor.get_current_block", false]], "get_current_weight_commit_info (bittensor.core.subtensor_api.commitments.commitments attribute)": [[58, "bittensor.core.subtensor_api.commitments.Commitments.get_current_weight_commit_info", false]], "get_current_weight_commit_info (bittensor.core.subtensor_api.subnets.subnets attribute)": [[66, "bittensor.core.subtensor_api.subnets.Subnets.get_current_weight_commit_info", false]], "get_current_weight_commit_info() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_current_weight_commit_info", false]], "get_current_weight_commit_info() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_current_weight_commit_info", false]], "get_delegate_by_hotkey (bittensor.core.subtensor_api.delegates.delegates attribute)": [[59, "bittensor.core.subtensor_api.delegates.Delegates.get_delegate_by_hotkey", false]], "get_delegate_by_hotkey (bittensor.core.subtensor_api.wallets.wallets attribute)": [[68, "bittensor.core.subtensor_api.wallets.Wallets.get_delegate_by_hotkey", false]], "get_delegate_by_hotkey() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_delegate_by_hotkey", false]], "get_delegate_by_hotkey() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_delegate_by_hotkey", false]], "get_delegate_identities (bittensor.core.subtensor_api.chain.chain attribute)": [[57, "bittensor.core.subtensor_api.chain.Chain.get_delegate_identities", false]], "get_delegate_identities (bittensor.core.subtensor_api.delegates.delegates attribute)": [[59, "bittensor.core.subtensor_api.delegates.Delegates.get_delegate_identities", false]], "get_delegate_identities() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_delegate_identities", false]], "get_delegate_identities() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_delegate_identities", false]], "get_delegate_take (bittensor.core.subtensor_api.delegates.delegates attribute)": [[59, "bittensor.core.subtensor_api.delegates.Delegates.get_delegate_take", false]], "get_delegate_take (bittensor.core.subtensor_api.wallets.wallets attribute)": [[68, "bittensor.core.subtensor_api.wallets.Wallets.get_delegate_take", false]], "get_delegate_take() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_delegate_take", false]], "get_delegate_take() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_delegate_take", false]], "get_delegated (bittensor.core.subtensor_api.delegates.delegates attribute)": [[59, "bittensor.core.subtensor_api.delegates.Delegates.get_delegated", false]], "get_delegated (bittensor.core.subtensor_api.wallets.wallets attribute)": [[68, "bittensor.core.subtensor_api.wallets.Wallets.get_delegated", false]], "get_delegated() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_delegated", false]], "get_delegated() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_delegated", false]], "get_delegates (bittensor.core.subtensor_api.delegates.delegates attribute)": [[59, "bittensor.core.subtensor_api.delegates.Delegates.get_delegates", false]], "get_delegates() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_delegates", false]], "get_delegates() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_delegates", false]], "get_existential_deposit (bittensor.core.subtensor_api.chain.chain attribute)": [[57, "bittensor.core.subtensor_api.chain.Chain.get_existential_deposit", false]], "get_existential_deposit() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_existential_deposit", false]], "get_existential_deposit() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_existential_deposit", false]], "get_explorer_url_for_network() (in module bittensor.utils)": [[85, "bittensor.utils.get_explorer_url_for_network", false]], "get_external_ip() (in module bittensor.utils.networking)": [[88, "bittensor.utils.networking.get_external_ip", false]], "get_formatted_ws_endpoint_url() (in module bittensor.utils.networking)": [[88, "bittensor.utils.networking.get_formatted_ws_endpoint_url", false]], "get_hash() (in module bittensor.utils)": [[85, "bittensor.utils.get_hash", false]], "get_hotkey_owner (bittensor.core.subtensor_api.wallets.wallets attribute)": [[68, "bittensor.core.subtensor_api.wallets.Wallets.get_hotkey_owner", false]], "get_hotkey_owner() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_hotkey_owner", false]], "get_hotkey_owner() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_hotkey_owner", false]], "get_hotkey_stake (bittensor.core.async_subtensor.asyncsubtensor attribute)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_hotkey_stake", false]], "get_hotkey_stake (bittensor.core.subtensor.subtensor attribute)": [[56, "bittensor.core.subtensor.Subtensor.get_hotkey_stake", false]], "get_hotkey_stake (bittensor.core.subtensor_api.staking.staking attribute)": [[65, "bittensor.core.subtensor_api.staking.Staking.get_hotkey_stake", false]], "get_hotkey_stake (bittensor.core.subtensor_api.wallets.wallets attribute)": [[68, "bittensor.core.subtensor_api.wallets.Wallets.get_hotkey_stake", false]], "get_human_readable() (in module bittensor.utils.formatting)": [[84, "bittensor.utils.formatting.get_human_readable", false]], "get_hyperparameter (bittensor.core.subtensor_api.subnets.subnets attribute)": [[66, "bittensor.core.subtensor_api.subnets.Subnets.get_hyperparameter", false]], "get_hyperparameter() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_hyperparameter", false]], "get_hyperparameter() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_hyperparameter", false]], "get_level() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.get_level", false]], "get_max_logger_name_length() (in module bittensor.utils.btlogging.helpers)": [[80, "bittensor.utils.btlogging.helpers.get_max_logger_name_length", false]], "get_metadata() (in module bittensor.core.extrinsics.asyncex.serving)": [[31, "bittensor.core.extrinsics.asyncex.serving.get_metadata", false]], "get_metadata() (in module bittensor.core.extrinsics.serving)": [[44, "bittensor.core.extrinsics.serving.get_metadata", false]], "get_metagraph_info (bittensor.core.subtensor_api.metagraphs.metagraphs attribute)": [[62, "bittensor.core.subtensor_api.metagraphs.Metagraphs.get_metagraph_info", false]], "get_metagraph_info() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_metagraph_info", false]], "get_metagraph_info() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_metagraph_info", false]], "get_minimum_required_stake (bittensor.core.subtensor_api.chain.chain attribute)": [[57, "bittensor.core.subtensor_api.chain.Chain.get_minimum_required_stake", false]], "get_minimum_required_stake (bittensor.core.subtensor_api.staking.staking attribute)": [[65, "bittensor.core.subtensor_api.staking.Staking.get_minimum_required_stake", false]], "get_minimum_required_stake (bittensor.core.subtensor_api.wallets.wallets attribute)": [[68, "bittensor.core.subtensor_api.wallets.Wallets.get_minimum_required_stake", false]], "get_minimum_required_stake() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_minimum_required_stake", false]], "get_minimum_required_stake() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_minimum_required_stake", false]], "get_netuids_for_hotkey (bittensor.core.subtensor_api.wallets.wallets attribute)": [[68, "bittensor.core.subtensor_api.wallets.Wallets.get_netuids_for_hotkey", false]], "get_netuids_for_hotkey() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_netuids_for_hotkey", false]], "get_netuids_for_hotkey() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_netuids_for_hotkey", false]], "get_neuron_certificate (bittensor.core.subtensor_api.neurons.neurons attribute)": [[63, "bittensor.core.subtensor_api.neurons.Neurons.get_neuron_certificate", false]], "get_neuron_certificate() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_neuron_certificate", false]], "get_neuron_certificate() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_neuron_certificate", false]], "get_neuron_for_pubkey_and_subnet (bittensor.core.subtensor_api.subnets.subnets attribute)": [[66, "bittensor.core.subtensor_api.subnets.Subnets.get_neuron_for_pubkey_and_subnet", false]], "get_neuron_for_pubkey_and_subnet() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_neuron_for_pubkey_and_subnet", false]], "get_neuron_for_pubkey_and_subnet() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_neuron_for_pubkey_and_subnet", false]], "get_next_epoch_start_block (bittensor.core.subtensor_api.subnets.subnets attribute)": [[66, "bittensor.core.subtensor_api.subnets.Subnets.get_next_epoch_start_block", false]], "get_next_epoch_start_block() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_next_epoch_start_block", false]], "get_next_epoch_start_block() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_next_epoch_start_block", false]], "get_null_neuron() (bittensor.core.chain_data.neuron_info.neuroninfo static method)": [[11, "bittensor.core.chain_data.neuron_info.NeuronInfo.get_null_neuron", false]], "get_null_neuron() (bittensor.core.chain_data.neuron_info_lite.neuroninfolite method)": [[12, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite.get_null_neuron", false]], "get_null_neuron() (bittensor.core.chain_data.neuron_info_lite.neuroninfolite static method)": [[12, "id0", false]], "get_old_stakes() (in module bittensor.core.extrinsics.utils)": [[51, "bittensor.core.extrinsics.utils.get_old_stakes", false]], "get_owned_hotkeys (bittensor.core.subtensor_api.wallets.wallets attribute)": [[68, "bittensor.core.subtensor_api.wallets.Wallets.get_owned_hotkeys", false]], "get_owned_hotkeys() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_owned_hotkeys", false]], "get_owned_hotkeys() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_owned_hotkeys", false]], "get_queue() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.get_queue", false]], "get_required_fields() (bittensor.core.synapse.synapse method)": [[69, "bittensor.core.synapse.Synapse.get_required_fields", false]], "get_revealed_commitment (bittensor.core.subtensor_api.commitments.commitments attribute)": [[58, "bittensor.core.subtensor_api.commitments.Commitments.get_revealed_commitment", false]], "get_revealed_commitment() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_revealed_commitment", false]], "get_revealed_commitment() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_revealed_commitment", false]], "get_revealed_commitment_by_hotkey (bittensor.core.subtensor_api.commitments.commitments attribute)": [[58, "bittensor.core.subtensor_api.commitments.Commitments.get_revealed_commitment_by_hotkey", false]], "get_revealed_commitment_by_hotkey() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_revealed_commitment_by_hotkey", false]], "get_revealed_commitment_by_hotkey() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_revealed_commitment_by_hotkey", false]], "get_save_dir() (in module bittensor.core.metagraph)": [[53, "bittensor.core.metagraph.get_save_dir", false]], "get_size() (in module bittensor.core.synapse)": [[69, "bittensor.core.synapse.get_size", false]], "get_stake (bittensor.core.subtensor_api.staking.staking attribute)": [[65, "bittensor.core.subtensor_api.staking.Staking.get_stake", false]], "get_stake (bittensor.core.subtensor_api.wallets.wallets attribute)": [[68, "bittensor.core.subtensor_api.wallets.Wallets.get_stake", false]], "get_stake() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_stake", false]], "get_stake() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_stake", false]], "get_stake_add_fee (bittensor.core.subtensor_api.staking.staking attribute)": [[65, "bittensor.core.subtensor_api.staking.Staking.get_stake_add_fee", false]], "get_stake_add_fee (bittensor.core.subtensor_api.wallets.wallets attribute)": [[68, "bittensor.core.subtensor_api.wallets.Wallets.get_stake_add_fee", false]], "get_stake_add_fee() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_stake_add_fee", false]], "get_stake_add_fee() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_stake_add_fee", false]], "get_stake_for_coldkey (bittensor.core.subtensor_api.staking.staking attribute)": [[65, "bittensor.core.subtensor_api.staking.Staking.get_stake_for_coldkey", false]], "get_stake_for_coldkey (bittensor.core.subtensor_api.wallets.wallets attribute)": [[68, "bittensor.core.subtensor_api.wallets.Wallets.get_stake_for_coldkey", false]], "get_stake_for_coldkey() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_stake_for_coldkey", false]], "get_stake_for_coldkey() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_stake_for_coldkey", false]], "get_stake_for_coldkey_and_hotkey (bittensor.core.subtensor_api.staking.staking attribute)": [[65, "bittensor.core.subtensor_api.staking.Staking.get_stake_for_coldkey_and_hotkey", false]], "get_stake_for_coldkey_and_hotkey (bittensor.core.subtensor_api.wallets.wallets attribute)": [[68, "bittensor.core.subtensor_api.wallets.Wallets.get_stake_for_coldkey_and_hotkey", false]], "get_stake_for_coldkey_and_hotkey() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_stake_for_coldkey_and_hotkey", false]], "get_stake_for_coldkey_and_hotkey() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_stake_for_coldkey_and_hotkey", false]], "get_stake_for_hotkey (bittensor.core.subtensor_api.wallets.wallets attribute)": [[68, "bittensor.core.subtensor_api.wallets.Wallets.get_stake_for_hotkey", false]], "get_stake_for_hotkey() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_stake_for_hotkey", false]], "get_stake_for_hotkey() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_stake_for_hotkey", false]], "get_stake_info_for_coldkey (bittensor.core.async_subtensor.asyncsubtensor attribute)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_stake_info_for_coldkey", false]], "get_stake_info_for_coldkey (bittensor.core.subtensor.subtensor attribute)": [[56, "bittensor.core.subtensor.Subtensor.get_stake_info_for_coldkey", false]], "get_stake_info_for_coldkey (bittensor.core.subtensor_api.staking.staking attribute)": [[65, "bittensor.core.subtensor_api.staking.Staking.get_stake_info_for_coldkey", false]], "get_stake_info_for_coldkey (bittensor.core.subtensor_api.wallets.wallets attribute)": [[68, "bittensor.core.subtensor_api.wallets.Wallets.get_stake_info_for_coldkey", false]], "get_stake_movement_fee (bittensor.core.subtensor_api.staking.staking attribute)": [[65, "bittensor.core.subtensor_api.staking.Staking.get_stake_movement_fee", false]], "get_stake_movement_fee (bittensor.core.subtensor_api.wallets.wallets attribute)": [[68, "bittensor.core.subtensor_api.wallets.Wallets.get_stake_movement_fee", false]], "get_stake_movement_fee() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_stake_movement_fee", false]], "get_stake_movement_fee() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_stake_movement_fee", false]], "get_status_message() (bittensor.utils.registration.pow.registrationstatisticslogger class method)": [[91, "bittensor.utils.registration.pow.RegistrationStatisticsLogger.get_status_message", false]], "get_subnet_burn_cost (bittensor.core.subtensor_api.subnets.subnets attribute)": [[66, "bittensor.core.subtensor_api.subnets.Subnets.get_subnet_burn_cost", false]], "get_subnet_burn_cost() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_subnet_burn_cost", false]], "get_subnet_burn_cost() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_subnet_burn_cost", false]], "get_subnet_hyperparameters (bittensor.core.subtensor_api.subnets.subnets attribute)": [[66, "bittensor.core.subtensor_api.subnets.Subnets.get_subnet_hyperparameters", false]], "get_subnet_hyperparameters() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_subnet_hyperparameters", false]], "get_subnet_hyperparameters() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_subnet_hyperparameters", false]], "get_subnet_owner_hotkey (bittensor.core.subtensor_api.subnets.subnets attribute)": [[66, "bittensor.core.subtensor_api.subnets.Subnets.get_subnet_owner_hotkey", false]], "get_subnet_owner_hotkey() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_subnet_owner_hotkey", false]], "get_subnet_owner_hotkey() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_subnet_owner_hotkey", false]], "get_subnet_reveal_period_epochs (bittensor.core.subtensor_api.subnets.subnets attribute)": [[66, "bittensor.core.subtensor_api.subnets.Subnets.get_subnet_reveal_period_epochs", false]], "get_subnet_reveal_period_epochs() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_subnet_reveal_period_epochs", false]], "get_subnet_reveal_period_epochs() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_subnet_reveal_period_epochs", false]], "get_subnet_validator_permits (bittensor.core.subtensor_api.subnets.subnets attribute)": [[66, "bittensor.core.subtensor_api.subnets.Subnets.get_subnet_validator_permits", false]], "get_subnet_validator_permits() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_subnet_validator_permits", false]], "get_subnet_validator_permits() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_subnet_validator_permits", false]], "get_subnets (bittensor.core.subtensor_api.subnets.subnets attribute)": [[66, "bittensor.core.subtensor_api.subnets.Subnets.get_subnets", false]], "get_subnets() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_subnets", false]], "get_subnets() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_subnets", false]], "get_timestamp (bittensor.core.subtensor_api.chain.chain attribute)": [[57, "bittensor.core.subtensor_api.chain.Chain.get_timestamp", false]], "get_timestamp() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_timestamp", false]], "get_timestamp() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_timestamp", false]], "get_total_size() (bittensor.core.synapse.synapse method)": [[69, "bittensor.core.synapse.Synapse.get_total_size", false], [69, "id3", false]], "get_total_subnets (bittensor.core.subtensor_api.subnets.subnets attribute)": [[66, "bittensor.core.subtensor_api.subnets.Subnets.get_total_subnets", false]], "get_total_subnets() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_total_subnets", false]], "get_total_subnets() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_total_subnets", false]], "get_transfer_fee (bittensor.core.subtensor_api.wallets.wallets attribute)": [[68, "bittensor.core.subtensor_api.wallets.Wallets.get_transfer_fee", false]], "get_transfer_fee() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_transfer_fee", false]], "get_transfer_fee() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_transfer_fee", false]], "get_transfer_fee() (bittensor.utils.mock.subtensor_mock.mocksubtensor method)": [[87, "bittensor.utils.mock.subtensor_mock.MockSubtensor.get_transfer_fee", false]], "get_uid_for_hotkey_on_subnet (bittensor.core.subtensor_api.subnets.subnets attribute)": [[66, "bittensor.core.subtensor_api.subnets.Subnets.get_uid_for_hotkey_on_subnet", false]], "get_uid_for_hotkey_on_subnet() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_uid_for_hotkey_on_subnet", false]], "get_uid_for_hotkey_on_subnet() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_uid_for_hotkey_on_subnet", false]], "get_unit() (bittensor.utils.balance.balance static method)": [[76, "bittensor.utils.balance.Balance.get_unit", false]], "get_unstake_fee (bittensor.core.subtensor_api.staking.staking attribute)": [[65, "bittensor.core.subtensor_api.staking.Staking.get_unstake_fee", false]], "get_unstake_fee (bittensor.core.subtensor_api.wallets.wallets attribute)": [[68, "bittensor.core.subtensor_api.wallets.Wallets.get_unstake_fee", false]], "get_unstake_fee() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_unstake_fee", false]], "get_unstake_fee() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_unstake_fee", false]], "get_vote_data (bittensor.core.subtensor_api.chain.chain attribute)": [[57, "bittensor.core.subtensor_api.chain.Chain.get_vote_data", false]], "get_vote_data() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_vote_data", false]], "get_vote_data() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.get_vote_data", false]], "github (bittensor.core.chain_data.chain_identity.chainidentity attribute)": [[3, "bittensor.core.chain_data.chain_identity.ChainIdentity.github", false]], "github_repo (bittensor.core.chain_data.subnet_identity.subnetidentity attribute)": [[18, "bittensor.core.chain_data.subnet_identity.SubnetIdentity.github_repo", false]], "hash_rate (bittensor.utils.registration.pow.registrationstatistics attribute)": [[91, "bittensor.utils.registration.pow.RegistrationStatistics.hash_rate", false]], "hash_rate_perpetual (bittensor.utils.registration.pow.registrationstatistics attribute)": [[91, "bittensor.utils.registration.pow.RegistrationStatistics.hash_rate_perpetual", false]], "header_size (bittensor.core.synapse.synapse attribute)": [[69, "bittensor.core.synapse.Synapse.header_size", false]], "help (bittensor.core.subtensor_api.subtensorapi attribute)": [[61, "bittensor.core.subtensor_api.SubtensorApi.help", false]], "help() (bittensor.core.axon.axon class method)": [[1, "bittensor.core.axon.Axon.help", false]], "help() (bittensor.core.types.subtensormixin class method)": [[73, "bittensor.core.types.SubtensorMixin.help", false]], "help() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.help", false]], "hex_to_bytes (in module bittensor.utils)": [[85, "bittensor.utils.hex_to_bytes", false]], "home_dir (in module bittensor.core.settings)": [[54, "bittensor.core.settings.HOME_DIR", false]], "hotkey (bittensor.core.chain_data.axon_info.axoninfo attribute)": [[2, "bittensor.core.chain_data.axon_info.AxonInfo.hotkey", false]], "hotkey (bittensor.core.chain_data.neuron_info.neuroninfo attribute)": [[11, "bittensor.core.chain_data.neuron_info.NeuronInfo.hotkey", false]], "hotkey (bittensor.core.chain_data.neuron_info_lite.neuroninfolite attribute)": [[12, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite.hotkey", false]], "hotkey (bittensor.core.synapse.terminalinfo attribute)": [[69, "bittensor.core.synapse.TerminalInfo.hotkey", false]], "hotkey (bittensor.core.types.axonservecallparams attribute)": [[73, "bittensor.core.types.AxonServeCallParams.hotkey", false]], "hotkey_ss58 (bittensor.core.chain_data.delegate_info.delegateinfobase attribute)": [[4, "bittensor.core.chain_data.delegate_info.DelegateInfoBase.hotkey_ss58", false]], "hotkey_ss58 (bittensor.core.chain_data.stake_info.stakeinfo attribute)": [[16, "bittensor.core.chain_data.stake_info.StakeInfo.hotkey_ss58", false]], "hotkeyaccountnotexists": [[25, "bittensor.core.errors.HotKeyAccountNotExists", false]], "hotkeys (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.hotkeys", false]], "hotkeys (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.Hotkeys", false]], "hotkeys (bittensor.core.chain_data.subnet_state.subnetstate attribute)": [[20, "bittensor.core.chain_data.subnet_state.SubnetState.hotkeys", false]], "hotkeys (bittensor.core.metagraph.metagraphmixin property)": [[53, "bittensor.core.metagraph.MetagraphMixin.hotkeys", false]], "hparams (bittensor.core.metagraph.metagraphmixin attribute)": [[53, "bittensor.core.metagraph.MetagraphMixin.hparams", false]], "i (bittensor.core.metagraph.metagraphmixin property)": [[53, "bittensor.core.metagraph.MetagraphMixin.I", false]], "identities (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.identities", false]], "identities (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.Identities", false]], "identities (bittensor.core.metagraph.metagraphmixin attribute)": [[53, "bittensor.core.metagraph.MetagraphMixin.identities", false]], "identity (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.identity", false]], "identity (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.Identity", false]], "identity (bittensor.core.metagraph.metagraphmixin attribute)": [[53, "bittensor.core.metagraph.MetagraphMixin.identity", false]], "identity() (in module bittensor.utils.substrate_utils.hasher)": [[94, "bittensor.utils.substrate_utils.hasher.identity", false]], "identityerror": [[25, "bittensor.core.errors.IdentityError", false]], "image (bittensor.core.chain_data.chain_identity.chainidentity attribute)": [[3, "bittensor.core.chain_data.chain_identity.ChainIdentity.image", false]], "immunity_period (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.immunity_period", false]], "immunity_period (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.immunity_period", false]], "immunity_period (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[17, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.immunity_period", false]], "immunity_period (bittensor.core.chain_data.subnet_info.subnetinfo attribute)": [[19, "bittensor.core.chain_data.subnet_info.SubnetInfo.immunity_period", false]], "immunity_period (bittensor.core.subtensor_api.subnets.subnets attribute)": [[66, "bittensor.core.subtensor_api.subnets.Subnets.immunity_period", false]], "immunity_period() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.immunity_period", false]], "immunity_period() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.immunity_period", false]], "immunityperiod (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.ImmunityPeriod", false]], "immunityperiod (bittensor.utils.mock.subtensor_mock.mocksubtensorstate attribute)": [[87, "bittensor.utils.mock.subtensor_mock.MockSubtensorState.ImmunityPeriod", false]], "incentive (bittensor.core.chain_data.neuron_info.neuroninfo attribute)": [[11, "bittensor.core.chain_data.neuron_info.NeuronInfo.incentive", false]], "incentive (bittensor.core.chain_data.neuron_info_lite.neuroninfolite attribute)": [[12, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite.incentive", false]], "incentive (bittensor.core.metagraph.metagraphmixin attribute)": [[53, "bittensor.core.metagraph.MetagraphMixin.incentive", false]], "incentive (bittensor.core.metagraph.nontorchmetagraph attribute)": [[53, "bittensor.core.metagraph.NonTorchMetagraph.incentive", false]], "incentive (bittensor.core.metagraph.torchmetagraph attribute)": [[53, "bittensor.core.metagraph.TorchMetagraph.incentive", false]], "incentives (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.incentives", false]], "incentives (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.Incentives", false]], "incentives (bittensor.core.chain_data.subnet_state.subnetstate attribute)": [[20, "bittensor.core.chain_data.subnet_state.SubnetState.incentives", false]], "increase_take_extrinsic() (in module bittensor.core.extrinsics.asyncex.take)": [[34, "bittensor.core.extrinsics.asyncex.take.increase_take_extrinsic", false]], "increase_take_extrinsic() (in module bittensor.core.extrinsics.take)": [[48, "bittensor.core.extrinsics.take.increase_take_extrinsic", false]], "index (bittensor.core.chain_data.proposal_vote_data.proposalvotedata attribute)": [[14, "bittensor.core.chain_data.proposal_vote_data.ProposalVoteData.index", false]], "info (bittensor.utils.btlogging.loggingmachine.loggingconfig attribute)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingConfig.info", false]], "info (bittensor.utils.btlogging.loggingmachine.loggingmachine attribute)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.Info", false]], "info() (bittensor.core.axon.axon method)": [[1, "bittensor.core.axon.Axon.info", false]], "info() (bittensor.utils.btlogging.console.bittensorconsole method)": [[77, "bittensor.utils.btlogging.console.BittensorConsole.info", false]], "info() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.info", false]], "info() (in module bittensor.utils.easy_imports)": [[83, "bittensor.utils.easy_imports.info", false]], "infobase (class in bittensor.core.chain_data.info_base)": [[8, "bittensor.core.chain_data.info_base.InfoBase", false]], "infodict (class in bittensor.utils.mock.subtensor_mock)": [[87, "bittensor.utils.mock.subtensor_mock.InfoDict", false]], "initialize (bittensor.core.subtensor_api.subtensorapi attribute)": [[61, "bittensor.core.subtensor_api.SubtensorApi.initialize", false]], "initialize() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.initialize", false]], "install_signal_handlers() (bittensor.core.axon.fastapithreadedserver method)": [[1, "bittensor.core.axon.FastAPIThreadedServer.install_signal_handlers", false]], "int_to_ip() (in module bittensor.utils.networking)": [[88, "bittensor.utils.networking.int_to_ip", false]], "internalservererror": [[25, "bittensor.core.errors.InternalServerError", false]], "invalidchild": [[25, "bittensor.core.errors.InvalidChild", false]], "invalidconfigfile": [[23, "bittensor.core.config.InvalidConfigFile", false]], "invalidrequestnameerror": [[25, "bittensor.core.errors.InvalidRequestNameError", false]], "ip (bittensor.core.axon.axon attribute)": [[1, "bittensor.core.axon.Axon.ip", false]], "ip (bittensor.core.chain_data.axon_info.axoninfo attribute)": [[2, "bittensor.core.chain_data.axon_info.AxonInfo.ip", false]], "ip (bittensor.core.chain_data.ip_info.ipinfo attribute)": [[9, "bittensor.core.chain_data.ip_info.IPInfo.ip", false]], "ip (bittensor.core.chain_data.prometheus_info.prometheusinfo attribute)": [[13, "bittensor.core.chain_data.prometheus_info.PrometheusInfo.ip", false]], "ip (bittensor.core.synapse.terminalinfo attribute)": [[69, "bittensor.core.synapse.TerminalInfo.ip", false]], "ip (bittensor.core.types.axonservecallparams attribute)": [[73, "bittensor.core.types.AxonServeCallParams.ip", false]], "ip (bittensor.core.types.prometheusservecallparams attribute)": [[73, "bittensor.core.types.PrometheusServeCallParams.ip", false]], "ip (bittensor.utils.mock.subtensor_mock.axoninfodict attribute)": [[87, "bittensor.utils.mock.subtensor_mock.AxonInfoDict.ip", false]], "ip (bittensor.utils.mock.subtensor_mock.prometheusinfodict attribute)": [[87, "bittensor.utils.mock.subtensor_mock.PrometheusInfoDict.ip", false]], "ip__str__() (in module bittensor.utils.networking)": [[88, "bittensor.utils.networking.ip__str__", false]], "ip_str() (bittensor.core.chain_data.axon_info.axoninfo method)": [[2, "bittensor.core.chain_data.axon_info.AxonInfo.ip_str", false]], "ip_to_int() (in module bittensor.utils.networking)": [[88, "bittensor.utils.networking.ip_to_int", false]], "ip_type (bittensor.core.chain_data.axon_info.axoninfo attribute)": [[2, "bittensor.core.chain_data.axon_info.AxonInfo.ip_type", false]], "ip_type (bittensor.core.chain_data.ip_info.ipinfo attribute)": [[9, "bittensor.core.chain_data.ip_info.IPInfo.ip_type", false]], "ip_type (bittensor.core.chain_data.prometheus_info.prometheusinfo attribute)": [[13, "bittensor.core.chain_data.prometheus_info.PrometheusInfo.ip_type", false]], "ip_type (bittensor.core.types.axonservecallparams attribute)": [[73, "bittensor.core.types.AxonServeCallParams.ip_type", false]], "ip_type (bittensor.core.types.prometheusservecallparams attribute)": [[73, "bittensor.core.types.PrometheusServeCallParams.ip_type", false]], "ip_type (bittensor.utils.mock.subtensor_mock.axoninfodict attribute)": [[87, "bittensor.utils.mock.subtensor_mock.AxonInfoDict.ip_type", false]], "ip_type (bittensor.utils.mock.subtensor_mock.prometheusinfodict attribute)": [[87, "bittensor.utils.mock.subtensor_mock.PrometheusInfoDict.ip_type", false]], "ip_version() (in module bittensor.utils.networking)": [[88, "bittensor.utils.networking.ip_version", false]], "ipinfo (bittensor.core.chain_data.utils.chaindatatype attribute)": [[21, "bittensor.core.chain_data.utils.ChainDataType.IPInfo", false]], "ipinfo (class in bittensor.core.chain_data.ip_info)": [[9, "bittensor.core.chain_data.ip_info.IPInfo", false]], "is_async (bittensor.core.subtensor_api.subtensorapi attribute)": [[61, "bittensor.core.subtensor_api.SubtensorApi.is_async", false]], "is_blacklist (bittensor.core.synapse.synapse property)": [[69, "bittensor.core.synapse.Synapse.is_blacklist", false]], "is_dynamic (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[6, "bittensor.core.chain_data.dynamic_info.DynamicInfo.is_dynamic", false]], "is_empty (bittensor.core.threadpool.prioritythreadpoolexecutor property)": [[71, "bittensor.core.threadpool.PriorityThreadPoolExecutor.is_empty", false]], "is_failure (bittensor.core.synapse.synapse property)": [[69, "bittensor.core.synapse.Synapse.is_failure", false]], "is_fast_blocks (bittensor.core.subtensor_api.chain.chain attribute)": [[57, "bittensor.core.subtensor_api.chain.Chain.is_fast_blocks", false]], "is_fast_blocks() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.is_fast_blocks", false]], "is_fast_blocks() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.is_fast_blocks", false]], "is_hotkey_delegate (bittensor.core.subtensor_api.delegates.delegates attribute)": [[59, "bittensor.core.subtensor_api.delegates.Delegates.is_hotkey_delegate", false]], "is_hotkey_delegate (bittensor.core.subtensor_api.wallets.wallets attribute)": [[68, "bittensor.core.subtensor_api.wallets.Wallets.is_hotkey_delegate", false]], "is_hotkey_delegate() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.is_hotkey_delegate", false]], "is_hotkey_delegate() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.is_hotkey_delegate", false]], "is_hotkey_registered (bittensor.core.subtensor_api.wallets.wallets attribute)": [[68, "bittensor.core.subtensor_api.wallets.Wallets.is_hotkey_registered", false]], "is_hotkey_registered() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.is_hotkey_registered", false]], "is_hotkey_registered() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.is_hotkey_registered", false]], "is_hotkey_registered_any (bittensor.core.subtensor_api.wallets.wallets attribute)": [[68, "bittensor.core.subtensor_api.wallets.Wallets.is_hotkey_registered_any", false]], "is_hotkey_registered_any() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.is_hotkey_registered_any", false]], "is_hotkey_registered_any() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.is_hotkey_registered_any", false]], "is_hotkey_registered_on_subnet (bittensor.core.subtensor_api.subnets.subnets attribute)": [[66, "bittensor.core.subtensor_api.subnets.Subnets.is_hotkey_registered_on_subnet", false]], "is_hotkey_registered_on_subnet() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.is_hotkey_registered_on_subnet", false]], "is_hotkey_registered_on_subnet() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.is_hotkey_registered_on_subnet", false]], "is_null (bittensor.core.chain_data.neuron_info.neuroninfo attribute)": [[11, "bittensor.core.chain_data.neuron_info.NeuronInfo.is_null", false]], "is_null (bittensor.core.chain_data.neuron_info_lite.neuroninfolite attribute)": [[12, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite.is_null", false]], "is_registered (bittensor.core.chain_data.stake_info.stakeinfo attribute)": [[16, "bittensor.core.chain_data.stake_info.StakeInfo.is_registered", false]], "is_running (bittensor.core.axon.fastapithreadedserver attribute)": [[1, "bittensor.core.axon.FastAPIThreadedServer.is_running", false]], "is_serving (bittensor.core.chain_data.axon_info.axoninfo property)": [[2, "bittensor.core.chain_data.axon_info.AxonInfo.is_serving", false]], "is_set() (bittensor.core.config.config method)": [[23, "bittensor.core.config.Config.is_set", false]], "is_stale() (bittensor.utils.registration.pow.powsolution method)": [[91, "bittensor.utils.registration.pow.POWSolution.is_stale", false]], "is_stale_async() (bittensor.utils.registration.pow.powsolution method)": [[91, "bittensor.utils.registration.pow.POWSolution.is_stale_async", false]], "is_subnet_active (bittensor.core.subtensor_api.subnets.subnets attribute)": [[66, "bittensor.core.subtensor_api.subnets.Subnets.is_subnet_active", false]], "is_subnet_active() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.is_subnet_active", false]], "is_subnet_active() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.is_subnet_active", false]], "is_success (bittensor.core.synapse.synapse property)": [[69, "bittensor.core.synapse.Synapse.is_success", false]], "is_timeout (bittensor.core.synapse.synapse property)": [[69, "bittensor.core.synapse.Synapse.is_timeout", false]], "is_valid_bittensor_address_or_public_key() (in module bittensor.utils)": [[85, "bittensor.utils.is_valid_bittensor_address_or_public_key", false]], "is_valid_ss58_address() (in module bittensor.utils)": [[85, "bittensor.utils.is_valid_ss58_address", false]], "k (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[6, "bittensor.core.chain_data.dynamic_info.DynamicInfo.k", false]], "kappa (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.kappa", false]], "kappa (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.kappa", false]], "kappa (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.Kappa", false]], "kappa (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[17, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.kappa", false]], "kappa (bittensor.core.chain_data.subnet_info.subnetinfo attribute)": [[19, "bittensor.core.chain_data.subnet_info.SubnetInfo.kappa", false]], "kappa (bittensor.utils.mock.subtensor_mock.mocksubtensorstate attribute)": [[87, "bittensor.utils.mock.subtensor_mock.MockSubtensorState.Kappa", false]], "keyfile (in module bittensor.utils.easy_imports)": [[83, "bittensor.utils.easy_imports.keyfile", false]], "keypair (bittensor.core.dendrite.dendritemixin attribute)": [[24, "bittensor.core.dendrite.DendriteMixin.keypair", false]], "last_drand_round (bittensor.core.subtensor_api.chain.chain attribute)": [[57, "bittensor.core.subtensor_api.chain.Chain.last_drand_round", false]], "last_drand_round() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.last_drand_round", false]], "last_drand_round() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.last_drand_round", false]], "last_step (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[6, "bittensor.core.chain_data.dynamic_info.DynamicInfo.last_step", false]], "last_step (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.last_step", false]], "last_step (bittensor.core.metagraph.metagraphmixin attribute)": [[53, "bittensor.core.metagraph.MetagraphMixin.last_step", false]], "last_update (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.last_update", false]], "last_update (bittensor.core.chain_data.neuron_info.neuroninfo attribute)": [[11, "bittensor.core.chain_data.neuron_info.NeuronInfo.last_update", false]], "last_update (bittensor.core.chain_data.neuron_info_lite.neuroninfolite attribute)": [[12, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite.last_update", false]], "last_update (bittensor.core.chain_data.subnet_state.subnetstate attribute)": [[20, "bittensor.core.chain_data.subnet_state.SubnetState.last_update", false]], "last_update (bittensor.core.metagraph.metagraphmixin attribute)": [[53, "bittensor.core.metagraph.MetagraphMixin.last_update", false]], "last_update (bittensor.core.metagraph.nontorchmetagraph attribute)": [[53, "bittensor.core.metagraph.NonTorchMetagraph.last_update", false]], "last_update (bittensor.core.metagraph.torchmetagraph attribute)": [[53, "bittensor.core.metagraph.TorchMetagraph.last_update", false]], "laststep (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.LastStep", false]], "lastupdate (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.LastUpdate", false]], "latent_lite_entrypoint (in module bittensor.core.settings)": [[54, "bittensor.core.settings.LATENT_LITE_ENTRYPOINT", false]], "latest_block_path() (in module bittensor.core.metagraph)": [[53, "bittensor.core.metagraph.latest_block_path", false]], "lazyloadedtorch (class in bittensor.utils.registration.pow)": [[91, "bittensor.utils.registration.pow.LazyLoadedTorch", false]], "legacy_torch_api_compat() (in module bittensor.utils.registration.pow)": [[91, "bittensor.utils.registration.pow.legacy_torch_api_compat", false]], "liquid_alpha_enabled (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.liquid_alpha_enabled", false]], "liquid_alpha_enabled (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.liquid_alpha_enabled", false]], "liquid_alpha_enabled (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[17, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.liquid_alpha_enabled", false]], "liquidalphaenabled (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.LiquidAlphaEnabled", false]], "list_from_dicts() (bittensor.core.chain_data.info_base.infobase class method)": [[8, "bittensor.core.chain_data.info_base.InfoBase.list_from_dicts", false]], "list_from_vec_u8() (bittensor.core.chain_data.neuron_info_lite.neuroninfolite method)": [[12, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite.list_from_vec_u8", false]], "lite (bittensor.core.metagraph.metagraphmixin attribute)": [[53, "bittensor.core.metagraph.MetagraphMixin.lite", false]], "load() (bittensor.core.metagraph.metagraphmixin method)": [[53, "bittensor.core.metagraph.MetagraphMixin.load", false]], "load_from_path() (bittensor.core.metagraph.metagraphmixin method)": [[53, "bittensor.core.metagraph.MetagraphMixin.load_from_path", false]], "load_from_path() (bittensor.core.metagraph.nontorchmetagraph method)": [[53, "bittensor.core.metagraph.NonTorchMetagraph.load_from_path", false]], "load_from_path() (bittensor.core.metagraph.torchmetagraph method)": [[53, "bittensor.core.metagraph.TorchMetagraph.load_from_path", false]], "local_entrypoint (in module bittensor.core.settings)": [[54, "bittensor.core.settings.LOCAL_ENTRYPOINT", false]], "locked (bittensor.core.chain_data.stake_info.stakeinfo attribute)": [[16, "bittensor.core.chain_data.stake_info.StakeInfo.locked", false]], "log() (bittensor.utils.registration.pow.console static method)": [[91, "bittensor.utils.registration.pow.Console.log", false]], "log_and_handle_error() (in module bittensor.core.axon)": [[1, "bittensor.core.axon.log_and_handle_error", false]], "log_cuda_errors() (in module bittensor.utils.registration.register_cuda)": [[92, "bittensor.utils.registration.register_cuda.log_cuda_errors", false]], "log_exception() (bittensor.core.dendrite.dendritemixin method)": [[24, "bittensor.core.dendrite.DendriteMixin.log_exception", false]], "log_formats (in module bittensor.utils.btlogging.format)": [[79, "bittensor.utils.btlogging.format.LOG_FORMATS", false]], "log_level_color_prefix (in module bittensor.utils.btlogging.format)": [[79, "bittensor.utils.btlogging.format.log_level_color_prefix", false]], "log_no_torch_error() (in module bittensor.utils.registration.pow)": [[91, "bittensor.utils.registration.pow.log_no_torch_error", false]], "log_trace_formats (in module bittensor.utils.btlogging.format)": [[79, "bittensor.utils.btlogging.format.LOG_TRACE_FORMATS", false]], "log_verbose (bittensor.core.async_subtensor.asyncsubtensor attribute)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.log_verbose", false]], "log_verbose (bittensor.core.subtensor.subtensor attribute)": [[56, "bittensor.core.subtensor.Subtensor.log_verbose", false]], "log_verbose (bittensor.core.subtensor_api.subtensorapi attribute)": [[61, "bittensor.core.subtensor_api.SubtensorApi.log_verbose", false]], "log_verbose (bittensor.core.types.subtensormixin attribute)": [[73, "bittensor.core.types.SubtensorMixin.log_verbose", false]], "logger (bittensor.utils.btlogging.console.bittensorconsole attribute)": [[77, "bittensor.utils.btlogging.console.BittensorConsole.logger", false]], "logger (in module bittensor.core.threadpool)": [[71, "bittensor.core.threadpool.logger", false]], "logging (in module bittensor.utils)": [[85, "bittensor.utils.logging", false]], "logging (in module bittensor.utils.btlogging)": [[81, "bittensor.utils.btlogging.logging", false]], "logging_dir (bittensor.utils.btlogging.loggingmachine.loggingconfig attribute)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingConfig.logging_dir", false]], "loggingconfig (class in bittensor.utils.btlogging.loggingmachine)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingConfig", false]], "loggingmachine (class in bittensor.utils.btlogging.loggingmachine)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine", false]], "max_allowed_validators (bittensor.core.chain_data.subnet_info.subnetinfo attribute)": [[19, "bittensor.core.chain_data.subnet_info.SubnetInfo.max_allowed_validators", false]], "max_burn (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.max_burn", false]], "max_burn (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.max_burn", false]], "max_burn (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[17, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.max_burn", false]], "max_difficulty (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.max_difficulty", false]], "max_difficulty (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.max_difficulty", false]], "max_difficulty (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[17, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.max_difficulty", false]], "max_n (bittensor.core.chain_data.subnet_info.subnetinfo attribute)": [[19, "bittensor.core.chain_data.subnet_info.SubnetInfo.max_n", false]], "max_regs_per_block (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.max_regs_per_block", false]], "max_regs_per_block (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.max_regs_per_block", false]], "max_regs_per_block (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[17, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.max_regs_per_block", false]], "max_uids (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.max_uids", false]], "max_uids (bittensor.core.metagraph.metagraphmixin attribute)": [[53, "bittensor.core.metagraph.MetagraphMixin.max_uids", false]], "max_validators (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.max_validators", false]], "max_validators (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.max_validators", false]], "max_validators (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[17, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.max_validators", false]], "max_weight_limit (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[17, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.max_weight_limit", false]], "max_weight_limit (bittensor.core.chain_data.subnet_info.subnetinfo attribute)": [[19, "bittensor.core.chain_data.subnet_info.SubnetInfo.max_weight_limit", false]], "max_weight_limit (bittensor.core.subtensor_api.subnets.subnets attribute)": [[66, "bittensor.core.subtensor_api.subnets.Subnets.max_weight_limit", false]], "max_weight_limit() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.max_weight_limit", false]], "max_weight_limit() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.max_weight_limit", false]], "max_weights_limit (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.max_weights_limit", false]], "max_weights_limit (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.max_weights_limit", false]], "maxattemptsexception": [[25, "bittensor.core.errors.MaxAttemptsException", false]], "maxburn (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.MaxBurn", false]], "maxdifficulty (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.MaxDifficulty", false]], "maxregsperblock (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.MaxRegsPerBlock", false]], "maxsuccessexception": [[25, "bittensor.core.errors.MaxSuccessException", false]], "maxuids (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.MaxUids", false]], "maxvalidators (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.MaxValidators", false]], "maxweightslimit (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.MaxWeightsLimit", false]], "merge() (bittensor.core.config.config method)": [[23, "bittensor.core.config.Config.merge", false]], "message (bittensor.core.errors.synapsedendritenoneexception attribute)": [[25, "bittensor.core.errors.SynapseDendriteNoneException.message", false]], "message (bittensor.core.errors.synapseexception attribute)": [[25, "bittensor.core.errors.SynapseException.message", false]], "message (bittensor.utils.unlockstatus attribute)": [[85, "bittensor.utils.UnlockStatus.message", false]], "metadata (bittensor.utils.substrate_utils.storage.storagekey attribute)": [[96, "bittensor.utils.substrate_utils.storage.StorageKey.metadata", false]], "metadata() (bittensor.core.metagraph.metagraphmixin method)": [[53, "bittensor.core.metagraph.MetagraphMixin.metadata", false]], "metadata_storage_function (bittensor.utils.substrate_utils.storage.storagekey attribute)": [[96, "bittensor.utils.substrate_utils.storage.StorageKey.metadata_storage_function", false]], "metadataerror": [[25, "bittensor.core.errors.MetadataError", false]], "metagraph (bittensor.core.subtensor_api.metagraphs.metagraphs attribute)": [[62, "bittensor.core.subtensor_api.metagraphs.Metagraphs.metagraph", false]], "metagraph (class in bittensor.core.metagraph)": [[53, "bittensor.core.metagraph.Metagraph", false]], "metagraph (in module bittensor.utils.easy_imports)": [[83, "bittensor.utils.easy_imports.metagraph", false]], "metagraph() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.metagraph", false]], "metagraph() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.metagraph", false]], "metagraph_state_dict_ndarray_keys (in module bittensor.core.metagraph)": [[53, "bittensor.core.metagraph.METAGRAPH_STATE_DICT_NDARRAY_KEYS", false]], "metagraphinfo (bittensor.core.chain_data.utils.chaindatatype attribute)": [[21, "bittensor.core.chain_data.utils.ChainDataType.MetagraphInfo", false]], "metagraphinfo (class in bittensor.core.chain_data.metagraph_info)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo", false]], "metagraphinfoemissions (class in bittensor.core.chain_data.metagraph_info)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfoEmissions", false]], "metagraphinfoparams (class in bittensor.core.chain_data.metagraph_info)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams", false]], "metagraphinfopool (class in bittensor.core.chain_data.metagraph_info)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfoPool", false]], "metagraphmixin (class in bittensor.core.metagraph)": [[53, "bittensor.core.metagraph.MetagraphMixin", false]], "metagraphs (bittensor.core.subtensor_api.subtensorapi property)": [[61, "bittensor.core.subtensor_api.SubtensorApi.metagraphs", false]], "metagraphs (class in bittensor.core.subtensor_api.metagraphs)": [[62, "bittensor.core.subtensor_api.metagraphs.Metagraphs", false]], "middleware_cls (bittensor.core.axon.axon attribute)": [[1, "bittensor.core.axon.Axon.middleware_cls", false]], "millify() (in module bittensor.utils.formatting)": [[84, "bittensor.utils.formatting.millify", false]], "min_allowed_weights (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.min_allowed_weights", false]], "min_allowed_weights (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.min_allowed_weights", false]], "min_allowed_weights (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[17, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.min_allowed_weights", false]], "min_allowed_weights (bittensor.core.chain_data.subnet_info.subnetinfo attribute)": [[19, "bittensor.core.chain_data.subnet_info.SubnetInfo.min_allowed_weights", false]], "min_allowed_weights (bittensor.core.subtensor_api.subnets.subnets attribute)": [[66, "bittensor.core.subtensor_api.subnets.Subnets.min_allowed_weights", false]], "min_allowed_weights() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.min_allowed_weights", false]], "min_allowed_weights() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.min_allowed_weights", false]], "min_burn (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.min_burn", false]], "min_burn (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.min_burn", false]], "min_burn (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[17, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.min_burn", false]], "min_difficulty (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.min_difficulty", false]], "min_difficulty (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.min_difficulty", false]], "min_difficulty (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[17, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.min_difficulty", false]], "min_required_stake() (bittensor.utils.mock.subtensor_mock.mocksubtensor static method)": [[87, "bittensor.utils.mock.subtensor_mock.MockSubtensor.min_required_stake", false]], "minallowedweights (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.MinAllowedWeights", false]], "minburn (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.MinBurn", false]], "mindifficulty (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.MinDifficulty", false]], "miners_dir (in module bittensor.core.settings)": [[54, "bittensor.core.settings.MINERS_DIR", false]], "mock_subpackage (in module bittensor.utils.easy_imports)": [[83, "bittensor.utils.easy_imports.mock_subpackage", false]], "mockchainstate (class in bittensor.utils.mock.subtensor_mock)": [[87, "bittensor.utils.mock.subtensor_mock.MockChainState", false]], "mockmapresult (class in bittensor.utils.mock.subtensor_mock)": [[87, "bittensor.utils.mock.subtensor_mock.MockMapResult", false]], "mocksubtensor (class in bittensor.utils.mock.subtensor_mock)": [[87, "bittensor.utils.mock.subtensor_mock.MockSubtensor", false]], "mocksubtensorstate (class in bittensor.utils.mock.subtensor_mock)": [[87, "bittensor.utils.mock.subtensor_mock.MockSubtensorState", false]], "mocksubtensorvalue (class in bittensor.utils.mock.subtensor_mock)": [[87, "bittensor.utils.mock.subtensor_mock.MockSubtensorValue", false]], "mocksystemstate (class in bittensor.utils.mock.subtensor_mock)": [[87, "bittensor.utils.mock.subtensor_mock.MockSystemState", false]], "modality (bittensor.core.chain_data.subnet_info.subnetinfo attribute)": [[19, "bittensor.core.chain_data.subnet_info.SubnetInfo.modality", false]], "model_config (bittensor.core.stream.streamingsynapse attribute)": [[55, "bittensor.core.stream.StreamingSynapse.model_config", false]], "model_config (bittensor.core.synapse.synapse attribute)": [[69, "bittensor.core.synapse.Synapse.model_config", false]], "model_config (bittensor.core.synapse.terminalinfo attribute)": [[69, "bittensor.core.synapse.TerminalInfo.model_config", false]], "model_config (bittensor.core.tensor.tensor attribute)": [[70, "bittensor.core.tensor.Tensor.model_config", false]], "module": [[0, "module-bittensor.core.async_subtensor", false], [1, "module-bittensor.core.axon", false], [2, "module-bittensor.core.chain_data.axon_info", false], [3, "module-bittensor.core.chain_data.chain_identity", false], [4, "module-bittensor.core.chain_data.delegate_info", false], [5, "module-bittensor.core.chain_data.delegate_info_lite", false], [6, "module-bittensor.core.chain_data.dynamic_info", false], [7, "module-bittensor.core.chain_data", false], [8, "module-bittensor.core.chain_data.info_base", false], [9, "module-bittensor.core.chain_data.ip_info", false], [10, "module-bittensor.core.chain_data.metagraph_info", false], [11, "module-bittensor.core.chain_data.neuron_info", false], [12, "module-bittensor.core.chain_data.neuron_info_lite", false], [13, "module-bittensor.core.chain_data.prometheus_info", false], [14, "module-bittensor.core.chain_data.proposal_vote_data", false], [15, "module-bittensor.core.chain_data.scheduled_coldkey_swap_info", false], [16, "module-bittensor.core.chain_data.stake_info", false], [17, "module-bittensor.core.chain_data.subnet_hyperparameters", false], [18, "module-bittensor.core.chain_data.subnet_identity", false], [19, "module-bittensor.core.chain_data.subnet_info", false], [20, "module-bittensor.core.chain_data.subnet_state", false], [21, "module-bittensor.core.chain_data.utils", false], [22, "module-bittensor.core.chain_data.weight_commit_info", false], [23, "module-bittensor.core.config", false], [24, "module-bittensor.core.dendrite", false], [25, "module-bittensor.core.errors", false], [26, "module-bittensor.core.extrinsics.asyncex.commit_reveal", false], [27, "module-bittensor.core.extrinsics.asyncex", false], [28, "module-bittensor.core.extrinsics.asyncex.move_stake", false], [29, "module-bittensor.core.extrinsics.asyncex.registration", false], [30, "module-bittensor.core.extrinsics.asyncex.root", false], [31, "module-bittensor.core.extrinsics.asyncex.serving", false], [32, "module-bittensor.core.extrinsics.asyncex.staking", false], [33, "module-bittensor.core.extrinsics.asyncex.start_call", false], [34, "module-bittensor.core.extrinsics.asyncex.take", false], [35, "module-bittensor.core.extrinsics.asyncex.transfer", false], [36, "module-bittensor.core.extrinsics.asyncex.unstaking", false], [37, "module-bittensor.core.extrinsics.asyncex.weights", false], [38, "module-bittensor.core.extrinsics.commit_reveal", false], [39, "module-bittensor.core.extrinsics.commit_weights", false], [40, "module-bittensor.core.extrinsics", false], [41, "module-bittensor.core.extrinsics.move_stake", false], [42, "module-bittensor.core.extrinsics.registration", false], [43, "module-bittensor.core.extrinsics.root", false], [44, "module-bittensor.core.extrinsics.serving", false], [45, "module-bittensor.core.extrinsics.set_weights", false], [46, "module-bittensor.core.extrinsics.staking", false], [47, "module-bittensor.core.extrinsics.start_call", false], [48, "module-bittensor.core.extrinsics.take", false], [49, "module-bittensor.core.extrinsics.transfer", false], [50, "module-bittensor.core.extrinsics.unstaking", false], [51, "module-bittensor.core.extrinsics.utils", false], [52, "module-bittensor.core", false], [53, "module-bittensor.core.metagraph", false], [54, "module-bittensor.core.settings", false], [55, "module-bittensor.core.stream", false], [56, "module-bittensor.core.subtensor", false], [57, "module-bittensor.core.subtensor_api.chain", false], [58, "module-bittensor.core.subtensor_api.commitments", false], [59, "module-bittensor.core.subtensor_api.delegates", false], [60, "module-bittensor.core.subtensor_api.extrinsics", false], [61, "module-bittensor.core.subtensor_api", false], [62, "module-bittensor.core.subtensor_api.metagraphs", false], [63, "module-bittensor.core.subtensor_api.neurons", false], [64, "module-bittensor.core.subtensor_api.queries", false], [65, "module-bittensor.core.subtensor_api.staking", false], [66, "module-bittensor.core.subtensor_api.subnets", false], [67, "module-bittensor.core.subtensor_api.utils", false], [68, "module-bittensor.core.subtensor_api.wallets", false], [69, "module-bittensor.core.synapse", false], [70, "module-bittensor.core.tensor", false], [71, "module-bittensor.core.threadpool", false], [72, "module-bittensor.core.timelock", false], [73, "module-bittensor.core.types", false], [74, "module-bittensor", false], [75, "module-bittensor.utils.axon_utils", false], [76, "module-bittensor.utils.balance", false], [77, "module-bittensor.utils.btlogging.console", false], [78, "module-bittensor.utils.btlogging.defines", false], [79, "module-bittensor.utils.btlogging.format", false], [80, "module-bittensor.utils.btlogging.helpers", false], [81, "module-bittensor.utils.btlogging", false], [82, "module-bittensor.utils.btlogging.loggingmachine", false], [83, "module-bittensor.utils.easy_imports", false], [84, "module-bittensor.utils.formatting", false], [85, "module-bittensor.utils", false], [86, "module-bittensor.utils.mock", false], [87, "module-bittensor.utils.mock.subtensor_mock", false], [88, "module-bittensor.utils.networking", false], [89, "module-bittensor.utils.registration.async_pow", false], [90, "module-bittensor.utils.registration", false], [91, "module-bittensor.utils.registration.pow", false], [92, "module-bittensor.utils.registration.register_cuda", false], [93, "module-bittensor.utils.subnets", false], [94, "module-bittensor.utils.substrate_utils.hasher", false], [95, "module-bittensor.utils.substrate_utils", false], [96, "module-bittensor.utils.substrate_utils.storage", false], [97, "module-bittensor.utils.version", false], [98, "module-bittensor.utils.weight_utils", false]], "move_stake (bittensor.core.subtensor_api.extrinsics.extrinsics attribute)": [[60, "bittensor.core.subtensor_api.extrinsics.Extrinsics.move_stake", false]], "move_stake() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.move_stake", false]], "move_stake() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.move_stake", false]], "move_stake_extrinsic() (in module bittensor.core.extrinsics.asyncex.move_stake)": [[28, "bittensor.core.extrinsics.asyncex.move_stake.move_stake_extrinsic", false]], "move_stake_extrinsic() (in module bittensor.core.extrinsics.move_stake)": [[41, "bittensor.core.extrinsics.move_stake.move_stake_extrinsic", false]], "moving_price (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[6, "bittensor.core.chain_data.dynamic_info.DynamicInfo.moving_price", false]], "moving_price (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.moving_price", false]], "moving_price (bittensor.core.chain_data.metagraph_info.metagraphinfopool attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfoPool.moving_price", false]], "movingprice (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.MovingPrice", false]], "n (bittensor.core.metagraph.metagraphmixin attribute)": [[53, "bittensor.core.metagraph.MetagraphMixin.n", false]], "n (bittensor.core.metagraph.nontorchmetagraph attribute)": [[53, "bittensor.core.metagraph.NonTorchMetagraph.n", false]], "n (bittensor.core.metagraph.torchmetagraph attribute)": [[53, "bittensor.core.metagraph.TorchMetagraph.n", false]], "name (bittensor.core.chain_data.chain_identity.chainidentity attribute)": [[3, "bittensor.core.chain_data.chain_identity.ChainIdentity.name", false]], "name (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.name", false]], "name (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.Name", false]], "name (bittensor.core.metagraph.metagraphmixin attribute)": [[53, "bittensor.core.metagraph.MetagraphMixin.name", false]], "name (bittensor.core.synapse.synapse attribute)": [[69, "bittensor.core.synapse.Synapse.name", false]], "name (bittensor.core.types.paramwithtypes attribute)": [[73, "bittensor.core.types.ParamWithTypes.name", false]], "nanoseconds_in_second (in module bittensor.utils.axon_utils)": [[75, "bittensor.utils.axon_utils.NANOSECONDS_IN_SECOND", false]], "nays (bittensor.core.chain_data.proposal_vote_data.proposalvotedata attribute)": [[14, "bittensor.core.chain_data.proposal_vote_data.ProposalVoteData.nays", false]], "netuid (bittensor.core.chain_data.delegate_info.delegatedinfo attribute)": [[4, "bittensor.core.chain_data.delegate_info.DelegatedInfo.netuid", false]], "netuid (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[6, "bittensor.core.chain_data.dynamic_info.DynamicInfo.netuid", false]], "netuid (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.netuid", false]], "netuid (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.Netuid", false]], "netuid (bittensor.core.chain_data.neuron_info.neuroninfo attribute)": [[11, "bittensor.core.chain_data.neuron_info.NeuronInfo.netuid", false]], "netuid (bittensor.core.chain_data.neuron_info_lite.neuroninfolite attribute)": [[12, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite.netuid", false]], "netuid (bittensor.core.chain_data.stake_info.stakeinfo attribute)": [[16, "bittensor.core.chain_data.stake_info.StakeInfo.netuid", false]], "netuid (bittensor.core.chain_data.subnet_info.subnetinfo attribute)": [[19, "bittensor.core.chain_data.subnet_info.SubnetInfo.netuid", false]], "netuid (bittensor.core.chain_data.subnet_state.subnetstate attribute)": [[20, "bittensor.core.chain_data.subnet_state.SubnetState.netuid", false]], "netuid (bittensor.core.metagraph.metagraphmixin attribute)": [[53, "bittensor.core.metagraph.MetagraphMixin.netuid", false]], "netuid (bittensor.core.metagraph.nontorchmetagraph attribute)": [[53, "bittensor.core.metagraph.NonTorchMetagraph.netuid", false]], "netuid (bittensor.core.types.axonservecallparams attribute)": [[73, "bittensor.core.types.AxonServeCallParams.netuid", false]], "netuid (bittensor.core.types.prometheusservecallparams attribute)": [[73, "bittensor.core.types.PrometheusServeCallParams.netuid", false]], "netuid (bittensor.utils.balance.balance attribute)": [[76, "bittensor.utils.balance.Balance.netuid", false]], "network (bittensor.core.metagraph.metagraphmixin attribute)": [[53, "bittensor.core.metagraph.MetagraphMixin.network", false]], "network (bittensor.core.subtensor_api.subtensorapi attribute)": [[61, "bittensor.core.subtensor_api.SubtensorApi.network", false]], "network (bittensor.core.types.subtensormixin attribute)": [[73, "bittensor.core.types.SubtensorMixin.network", false]], "network_explorer_map (in module bittensor.core.settings)": [[54, "bittensor.core.settings.NETWORK_EXPLORER_MAP", false]], "network_map (in module bittensor.core.settings)": [[54, "bittensor.core.settings.NETWORK_MAP", false]], "network_registered_at (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[6, "bittensor.core.chain_data.dynamic_info.DynamicInfo.network_registered_at", false]], "network_registered_at (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.network_registered_at", false]], "network_registered_at (bittensor.core.metagraph.metagraphmixin attribute)": [[53, "bittensor.core.metagraph.MetagraphMixin.network_registered_at", false]], "networkregisteredat (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.NetworkRegisteredAt", false]], "networks (in module bittensor.core.settings)": [[54, "bittensor.core.settings.NETWORKS", false]], "networksadded (bittensor.utils.mock.subtensor_mock.mocksubtensorstate attribute)": [[87, "bittensor.utils.mock.subtensor_mock.MockSubtensorState.NetworksAdded", false]], "neuron_for_uid (bittensor.core.subtensor_api.neurons.neurons attribute)": [[63, "bittensor.core.subtensor_api.neurons.Neurons.neuron_for_uid", false]], "neuron_for_uid() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.neuron_for_uid", false]], "neuron_for_uid() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.neuron_for_uid", false]], "neuron_for_uid() (bittensor.utils.mock.subtensor_mock.mocksubtensor method)": [[87, "bittensor.utils.mock.subtensor_mock.MockSubtensor.neuron_for_uid", false]], "neuron_for_uid_lite() (bittensor.utils.mock.subtensor_mock.mocksubtensor method)": [[87, "bittensor.utils.mock.subtensor_mock.MockSubtensor.neuron_for_uid_lite", false]], "neuroninfo (bittensor.core.chain_data.utils.chaindatatype attribute)": [[21, "bittensor.core.chain_data.utils.ChainDataType.NeuronInfo", false]], "neuroninfo (class in bittensor.core.chain_data.neuron_info)": [[11, "bittensor.core.chain_data.neuron_info.NeuronInfo", false]], "neuroninfolite (bittensor.core.chain_data.utils.chaindatatype attribute)": [[21, "bittensor.core.chain_data.utils.ChainDataType.NeuronInfoLite", false]], "neuroninfolite (class in bittensor.core.chain_data.neuron_info_lite)": [[12, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite", false]], "neurons (bittensor.core.metagraph.metagraphmixin attribute)": [[53, "bittensor.core.metagraph.MetagraphMixin.neurons", false]], "neurons (bittensor.core.subtensor_api.neurons.neurons attribute)": [[63, "bittensor.core.subtensor_api.neurons.Neurons.neurons", false]], "neurons (bittensor.core.subtensor_api.subtensorapi property)": [[61, "bittensor.core.subtensor_api.SubtensorApi.neurons", false]], "neurons (class in bittensor.core.subtensor_api.neurons)": [[63, "bittensor.core.subtensor_api.neurons.Neurons", false]], "neurons() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.neurons", false]], "neurons() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.neurons", false]], "neurons() (bittensor.utils.mock.subtensor_mock.mocksubtensor method)": [[87, "bittensor.utils.mock.subtensor_mock.MockSubtensor.neurons", false]], "neurons_lite (bittensor.core.subtensor_api.neurons.neurons attribute)": [[63, "bittensor.core.subtensor_api.neurons.Neurons.neurons_lite", false]], "neurons_lite() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.neurons_lite", false]], "neurons_lite() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.neurons_lite", false]], "neurons_lite() (bittensor.utils.mock.subtensor_mock.mocksubtensor method)": [[87, "bittensor.utils.mock.subtensor_mock.MockSubtensor.neurons_lite", false]], "new_coldkey (bittensor.core.chain_data.scheduled_coldkey_swap_info.scheduledcoldkeyswapinfo attribute)": [[15, "bittensor.core.chain_data.scheduled_coldkey_swap_info.ScheduledColdkeySwapInfo.new_coldkey", false]], "nominationerror": [[25, "bittensor.core.errors.NominationError", false]], "nominators (bittensor.core.chain_data.delegate_info.delegateinfo attribute)": [[4, "bittensor.core.chain_data.delegate_info.DelegateInfo.nominators", false]], "nominators (bittensor.core.chain_data.delegate_info_lite.delegateinfolite attribute)": [[5, "bittensor.core.chain_data.delegate_info_lite.DelegateInfoLite.nominators", false]], "nonassociatedcoldkey": [[25, "bittensor.core.errors.NonAssociatedColdKey", false]], "nonce (bittensor.core.synapse.terminalinfo attribute)": [[69, "bittensor.core.synapse.TerminalInfo.nonce", false]], "nonce (bittensor.utils.registration.pow.powsolution attribute)": [[91, "bittensor.utils.registration.pow.POWSolution.nonce", false]], "nonces (bittensor.core.axon.axon attribute)": [[1, "bittensor.core.axon.Axon.nonces", false]], "nontorchmetagraph (class in bittensor.core.metagraph)": [[53, "bittensor.core.metagraph.NonTorchMetagraph", false]], "normalize_max_weight() (in module bittensor.utils.weight_utils)": [[98, "bittensor.utils.weight_utils.normalize_max_weight", false]], "notdelegateerror": [[25, "bittensor.core.errors.NotDelegateError", false]], "notenoughstaketosetchildkeys": [[25, "bittensor.core.errors.NotEnoughStakeToSetChildkeys", false]], "notregisterederror": [[25, "bittensor.core.errors.NotRegisteredError", false]], "notverifiedexception": [[25, "bittensor.core.errors.NotVerifiedException", false]], "null_entry (in module bittensor.core.threadpool)": [[71, "bittensor.core.threadpool.NULL_ENTRY", false]], "num_uids (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.num_uids", false]], "num_uids (bittensor.core.metagraph.metagraphmixin attribute)": [[53, "bittensor.core.metagraph.MetagraphMixin.num_uids", false]], "numpy() (bittensor.core.tensor.tensor method)": [[70, "bittensor.core.tensor.Tensor.numpy", false]], "numpyortorch (in module bittensor.core.metagraph)": [[53, "bittensor.core.metagraph.NumpyOrTorch", false]], "numuids (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.NumUids", false]], "off() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.off", false]], "old_coldkey (bittensor.core.chain_data.scheduled_coldkey_swap_info.scheduledcoldkeyswapinfo attribute)": [[15, "bittensor.core.chain_data.scheduled_coldkey_swap_info.ScheduledColdkeySwapInfo.old_coldkey", false]], "on() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.on", false]], "owner_coldkey (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[6, "bittensor.core.chain_data.dynamic_info.DynamicInfo.owner_coldkey", false]], "owner_coldkey (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.owner_coldkey", false]], "owner_coldkey (bittensor.core.metagraph.metagraphmixin attribute)": [[53, "bittensor.core.metagraph.MetagraphMixin.owner_coldkey", false]], "owner_hotkey (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[6, "bittensor.core.chain_data.dynamic_info.DynamicInfo.owner_hotkey", false]], "owner_hotkey (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.owner_hotkey", false]], "owner_hotkey (bittensor.core.metagraph.metagraphmixin attribute)": [[53, "bittensor.core.metagraph.MetagraphMixin.owner_hotkey", false]], "owner_ss58 (bittensor.core.chain_data.delegate_info.delegateinfobase attribute)": [[4, "bittensor.core.chain_data.delegate_info.DelegateInfoBase.owner_ss58", false]], "owner_ss58 (bittensor.core.chain_data.delegate_info_lite.delegateinfolite attribute)": [[5, "bittensor.core.chain_data.delegate_info_lite.DelegateInfoLite.owner_ss58", false]], "owner_ss58 (bittensor.core.chain_data.subnet_info.subnetinfo attribute)": [[19, "bittensor.core.chain_data.subnet_info.SubnetInfo.owner_ss58", false]], "ownercoldkey (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.OwnerColdkey", false]], "ownerhotkey (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.OwnerHotkey", false]], "pallet (bittensor.utils.substrate_utils.storage.storagekey attribute)": [[96, "bittensor.utils.substrate_utils.storage.StorageKey.pallet", false]], "params (bittensor.utils.substrate_utils.storage.storagekey attribute)": [[96, "bittensor.utils.substrate_utils.storage.StorageKey.params", false]], "params_encoded (bittensor.utils.substrate_utils.storage.storagekey attribute)": [[96, "bittensor.utils.substrate_utils.storage.StorageKey.params_encoded", false]], "paramwithtypes (class in bittensor.core.types)": [[73, "bittensor.core.types.ParamWithTypes", false]], "parse_headers_to_inputs() (bittensor.core.synapse.synapse class method)": [[69, "id4", false]], "parse_headers_to_inputs() (bittensor.core.synapse.synapse method)": [[69, "bittensor.core.synapse.Synapse.parse_headers_to_inputs", false]], "pending_alpha_emission (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[6, "bittensor.core.chain_data.dynamic_info.DynamicInfo.pending_alpha_emission", false]], "pending_alpha_emission (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.pending_alpha_emission", false]], "pending_alpha_emission (bittensor.core.chain_data.metagraph_info.metagraphinfoemissions attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfoEmissions.pending_alpha_emission", false]], "pending_root_emission (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[6, "bittensor.core.chain_data.dynamic_info.DynamicInfo.pending_root_emission", false]], "pending_root_emission (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.pending_root_emission", false]], "pending_root_emission (bittensor.core.chain_data.metagraph_info.metagraphinfoemissions attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfoEmissions.pending_root_emission", false]], "pendingalphaemission (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.PendingAlphaEmission", false]], "pendingrootemission (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.PendingRootEmission", false]], "pipaddress (in module bittensor.core.settings)": [[54, "bittensor.core.settings.PIPADDRESS", false]], "placeholder1 (bittensor.core.chain_data.axon_info.axoninfo attribute)": [[2, "bittensor.core.chain_data.axon_info.AxonInfo.placeholder1", false]], "placeholder1 (bittensor.core.types.axonservecallparams attribute)": [[73, "bittensor.core.types.AxonServeCallParams.placeholder1", false]], "placeholder1 (bittensor.utils.mock.subtensor_mock.axoninfodict attribute)": [[87, "bittensor.utils.mock.subtensor_mock.AxonInfoDict.placeholder1", false]], "placeholder2 (bittensor.core.chain_data.axon_info.axoninfo attribute)": [[2, "bittensor.core.chain_data.axon_info.AxonInfo.placeholder2", false]], "placeholder2 (bittensor.core.types.axonservecallparams attribute)": [[73, "bittensor.core.types.AxonServeCallParams.placeholder2", false]], "placeholder2 (bittensor.utils.mock.subtensor_mock.axoninfodict attribute)": [[87, "bittensor.utils.mock.subtensor_mock.AxonInfoDict.placeholder2", false]], "pool (bittensor.core.metagraph.metagraphmixin attribute)": [[53, "bittensor.core.metagraph.MetagraphMixin.pool", false]], "port (bittensor.core.axon.axon attribute)": [[1, "bittensor.core.axon.Axon.port", false]], "port (bittensor.core.chain_data.axon_info.axoninfo attribute)": [[2, "bittensor.core.chain_data.axon_info.AxonInfo.port", false]], "port (bittensor.core.chain_data.prometheus_info.prometheusinfo attribute)": [[13, "bittensor.core.chain_data.prometheus_info.PrometheusInfo.port", false]], "port (bittensor.core.synapse.terminalinfo attribute)": [[69, "bittensor.core.synapse.TerminalInfo.port", false]], "port (bittensor.core.types.axonservecallparams attribute)": [[73, "bittensor.core.types.AxonServeCallParams.port", false]], "port (bittensor.core.types.prometheusservecallparams attribute)": [[73, "bittensor.core.types.PrometheusServeCallParams.port", false]], "port (bittensor.utils.mock.subtensor_mock.axoninfodict attribute)": [[87, "bittensor.utils.mock.subtensor_mock.AxonInfoDict.port", false]], "port (bittensor.utils.mock.subtensor_mock.prometheusinfodict attribute)": [[87, "bittensor.utils.mock.subtensor_mock.PrometheusInfoDict.port", false]], "postprocessexception": [[25, "bittensor.core.errors.PostProcessException", false]], "pow_registration_allowed (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.pow_registration_allowed", false]], "pow_registration_allowed (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.pow_registration_allowed", false]], "powregistrationallowed (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.PowRegistrationAllowed", false]], "powsolution (class in bittensor.utils.registration.pow)": [[91, "bittensor.utils.registration.pow.POWSolution", false]], "prepare_synapse() (bittensor.utils.subnets.subnetsapi method)": [[93, "bittensor.utils.subnets.SubnetsAPI.prepare_synapse", false]], "preprocess() (bittensor.core.axon.axonmiddleware method)": [[1, "bittensor.core.axon.AxonMiddleware.preprocess", false]], "preprocess_synapse_for_request() (bittensor.core.dendrite.dendrite method)": [[24, "bittensor.core.dendrite.Dendrite.preprocess_synapse_for_request", false]], "preprocess_synapse_for_request() (bittensor.core.dendrite.dendritemixin method)": [[24, "bittensor.core.dendrite.DendriteMixin.preprocess_synapse_for_request", false], [24, "id8", false]], "price (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[6, "bittensor.core.chain_data.dynamic_info.DynamicInfo.price", false]], "priority() (bittensor.core.axon.axonmiddleware method)": [[1, "bittensor.core.axon.AxonMiddleware.priority", false]], "priority_fns (bittensor.core.axon.axon attribute)": [[1, "bittensor.core.axon.Axon.priority_fns", false]], "priorityexception": [[25, "bittensor.core.errors.PriorityException", false]], "prioritythreadpoolexecutor (class in bittensor.core.threadpool)": [[71, "bittensor.core.threadpool.PriorityThreadPoolExecutor", false]], "process_error_message() (bittensor.core.dendrite.dendritemixin method)": [[24, "bittensor.core.dendrite.DendriteMixin.process_error_message", false]], "process_nested() (in module bittensor.core.chain_data.metagraph_info)": [[10, "bittensor.core.chain_data.metagraph_info.process_nested", false]], "process_responses() (bittensor.utils.subnets.subnetsapi method)": [[93, "bittensor.utils.subnets.SubnetsAPI.process_responses", false]], "process_server_response() (bittensor.core.dendrite.dendrite method)": [[24, "bittensor.core.dendrite.Dendrite.process_server_response", false]], "process_server_response() (bittensor.core.dendrite.dendritemixin method)": [[24, "bittensor.core.dendrite.DendriteMixin.process_server_response", false], [24, "id9", false]], "process_stake_data() (in module bittensor.core.chain_data.utils)": [[21, "bittensor.core.chain_data.utils.process_stake_data", false]], "process_streaming_response() (bittensor.core.stream.streamingsynapse method)": [[55, "bittensor.core.stream.StreamingSynapse.process_streaming_response", false]], "process_time (bittensor.core.synapse.terminalinfo attribute)": [[69, "bittensor.core.synapse.TerminalInfo.process_time", false]], "process_weights() (in module bittensor.utils.weight_utils)": [[98, "bittensor.utils.weight_utils.process_weights", false]], "process_weights_for_netuid() (in module bittensor.utils.weight_utils)": [[98, "bittensor.utils.weight_utils.process_weights_for_netuid", false]], "prometheus_info (bittensor.core.chain_data.neuron_info.neuroninfo attribute)": [[11, "bittensor.core.chain_data.neuron_info.NeuronInfo.prometheus_info", false]], "prometheus_info (bittensor.core.chain_data.neuron_info_lite.neuroninfolite attribute)": [[12, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite.prometheus_info", false]], "prometheusinfo (class in bittensor.core.chain_data.prometheus_info)": [[13, "bittensor.core.chain_data.prometheus_info.PrometheusInfo", false]], "prometheusinfodict (class in bittensor.utils.mock.subtensor_mock)": [[87, "bittensor.utils.mock.subtensor_mock.PrometheusInfoDict", false]], "prometheusservecallparams (class in bittensor.core.types)": [[73, "bittensor.core.types.PrometheusServeCallParams", false]], "proportionoverflow": [[25, "bittensor.core.errors.ProportionOverflow", false]], "proposalvotedata (class in bittensor.core.chain_data.proposal_vote_data)": [[14, "bittensor.core.chain_data.proposal_vote_data.ProposalVoteData", false]], "protocol (bittensor.core.chain_data.axon_info.axoninfo attribute)": [[2, "bittensor.core.chain_data.axon_info.AxonInfo.protocol", false]], "protocol (bittensor.core.chain_data.ip_info.ipinfo attribute)": [[9, "bittensor.core.chain_data.ip_info.IPInfo.protocol", false]], "protocol (bittensor.core.types.axonservecallparams attribute)": [[73, "bittensor.core.types.AxonServeCallParams.protocol", false]], "protocol (bittensor.utils.mock.subtensor_mock.axoninfodict attribute)": [[87, "bittensor.utils.mock.subtensor_mock.AxonInfoDict.protocol", false]], "pruning_score (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.pruning_score", false]], "pruning_score (bittensor.core.chain_data.neuron_info.neuroninfo attribute)": [[11, "bittensor.core.chain_data.neuron_info.NeuronInfo.pruning_score", false]], "pruning_score (bittensor.core.chain_data.neuron_info_lite.neuroninfolite attribute)": [[12, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite.pruning_score", false]], "pruning_score (bittensor.core.chain_data.subnet_state.subnetstate attribute)": [[20, "bittensor.core.chain_data.subnet_state.SubnetState.pruning_score", false]], "pruning_score (bittensor.core.metagraph.metagraphmixin attribute)": [[53, "bittensor.core.metagraph.MetagraphMixin.pruning_score", false]], "pruningscore (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.PruningScore", false]], "publish_metadata() (in module bittensor.core.extrinsics.asyncex.serving)": [[31, "bittensor.core.extrinsics.asyncex.serving.publish_metadata", false]], "publish_metadata() (in module bittensor.core.extrinsics.serving)": [[44, "bittensor.core.extrinsics.serving.publish_metadata", false]], "queries (bittensor.core.subtensor_api.subtensorapi property)": [[61, "bittensor.core.subtensor_api.SubtensorApi.queries", false]], "queries (class in bittensor.core.subtensor_api.queries)": [[64, "bittensor.core.subtensor_api.queries.Queries", false]], "query() (bittensor.core.dendrite.dendrite method)": [[24, "bittensor.core.dendrite.Dendrite.query", false]], "query() (bittensor.core.dendrite.dendritemixin method)": [[24, "bittensor.core.dendrite.DendriteMixin.query", false], [24, "id11", false]], "query_api() (bittensor.utils.subnets.subnetsapi method)": [[93, "bittensor.utils.subnets.SubnetsAPI.query_api", false]], "query_constant (bittensor.core.subtensor_api.queries.queries attribute)": [[64, "bittensor.core.subtensor_api.queries.Queries.query_constant", false]], "query_constant() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.query_constant", false]], "query_constant() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.query_constant", false]], "query_constant() (bittensor.utils.mock.subtensor_mock.mocksubtensor method)": [[87, "bittensor.utils.mock.subtensor_mock.MockSubtensor.query_constant", false]], "query_identity (bittensor.core.subtensor_api.neurons.neurons attribute)": [[63, "bittensor.core.subtensor_api.neurons.Neurons.query_identity", false]], "query_identity() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.query_identity", false]], "query_identity() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.query_identity", false]], "query_map (bittensor.core.subtensor_api.queries.queries attribute)": [[64, "bittensor.core.subtensor_api.queries.Queries.query_map", false]], "query_map() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.query_map", false]], "query_map() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.query_map", false]], "query_map_subtensor (bittensor.core.subtensor_api.queries.queries attribute)": [[64, "bittensor.core.subtensor_api.queries.Queries.query_map_subtensor", false]], "query_map_subtensor() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.query_map_subtensor", false]], "query_map_subtensor() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.query_map_subtensor", false]], "query_map_subtensor() (bittensor.utils.mock.subtensor_mock.mocksubtensor method)": [[87, "bittensor.utils.mock.subtensor_mock.MockSubtensor.query_map_subtensor", false]], "query_module (bittensor.core.subtensor_api.queries.queries attribute)": [[64, "bittensor.core.subtensor_api.queries.Queries.query_module", false]], "query_module() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.query_module", false]], "query_module() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.query_module", false]], "query_runtime_api (bittensor.core.subtensor_api.queries.queries attribute)": [[64, "bittensor.core.subtensor_api.queries.Queries.query_runtime_api", false]], "query_runtime_api() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.query_runtime_api", false]], "query_runtime_api() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.query_runtime_api", false]], "query_subtensor (bittensor.core.subtensor_api.queries.queries attribute)": [[64, "bittensor.core.subtensor_api.queries.Queries.query_subtensor", false]], "query_subtensor() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.query_subtensor", false]], "query_subtensor() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.query_subtensor", false]], "query_subtensor() (bittensor.utils.mock.subtensor_mock.mocksubtensor method)": [[87, "bittensor.utils.mock.subtensor_mock.MockSubtensor.query_subtensor", false]], "r (bittensor.core.metagraph.metagraphmixin property)": [[53, "bittensor.core.metagraph.MetagraphMixin.R", false]], "rank (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.rank", false]], "rank (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.Rank", false]], "rank (bittensor.core.chain_data.neuron_info.neuroninfo attribute)": [[11, "bittensor.core.chain_data.neuron_info.NeuronInfo.rank", false]], "rank (bittensor.core.chain_data.neuron_info_lite.neuroninfolite attribute)": [[12, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite.rank", false]], "rank (bittensor.core.chain_data.subnet_state.subnetstate attribute)": [[20, "bittensor.core.chain_data.subnet_state.SubnetState.rank", false]], "ranks (bittensor.core.metagraph.metagraphmixin attribute)": [[53, "bittensor.core.metagraph.MetagraphMixin.ranks", false]], "ranks (bittensor.core.metagraph.nontorchmetagraph attribute)": [[53, "bittensor.core.metagraph.NonTorchMetagraph.ranks", false]], "ranks (bittensor.core.metagraph.torchmetagraph attribute)": [[53, "bittensor.core.metagraph.TorchMetagraph.ranks", false]], "rao (bittensor.utils.balance.balance attribute)": [[76, "bittensor.utils.balance.Balance.rao", false]], "rao() (in module bittensor.utils.balance)": [[76, "bittensor.utils.balance.rao", false]], "rao_symbol (in module bittensor.core.settings)": [[54, "bittensor.core.settings.RAO_SYMBOL", false]], "rao_unit (bittensor.utils.balance.balance attribute)": [[76, "bittensor.utils.balance.Balance.rao_unit", false]], "raopertao (in module bittensor.utils)": [[85, "bittensor.utils.RAOPERTAO", false]], "read_only (in module bittensor.core.settings)": [[54, "bittensor.core.settings.READ_ONLY", false]], "record_log (bittensor.utils.btlogging.loggingmachine.loggingconfig attribute)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingConfig.record_log", false]], "records (bittensor.utils.mock.subtensor_mock.mockmapresult attribute)": [[87, "bittensor.utils.mock.subtensor_mock.MockMapResult.records", false]], "recycle (bittensor.core.subtensor_api.subnets.subnets attribute)": [[66, "bittensor.core.subtensor_api.subnets.Subnets.recycle", false]], "recycle() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.recycle", false]], "recycle() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.recycle", false]], "register (bittensor.core.subtensor_api.extrinsics.extrinsics attribute)": [[60, "bittensor.core.subtensor_api.extrinsics.Extrinsics.register", false]], "register() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.register", false]], "register() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.register", false]], "register_extrinsic() (in module bittensor.core.extrinsics.asyncex.registration)": [[29, "bittensor.core.extrinsics.asyncex.registration.register_extrinsic", false]], "register_extrinsic() (in module bittensor.core.extrinsics.registration)": [[42, "bittensor.core.extrinsics.registration.register_extrinsic", false]], "register_primary_logger() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.register_primary_logger", false]], "register_subnet (bittensor.core.subtensor_api.extrinsics.extrinsics attribute)": [[60, "bittensor.core.subtensor_api.extrinsics.Extrinsics.register_subnet", false]], "register_subnet (bittensor.core.subtensor_api.subnets.subnets attribute)": [[66, "bittensor.core.subtensor_api.subnets.Subnets.register_subnet", false]], "register_subnet() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.register_subnet", false]], "register_subnet() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.register_subnet", false]], "register_subnet_extrinsic() (in module bittensor.core.extrinsics.asyncex.registration)": [[29, "bittensor.core.extrinsics.asyncex.registration.register_subnet_extrinsic", false]], "register_subnet_extrinsic() (in module bittensor.core.extrinsics.registration)": [[42, "bittensor.core.extrinsics.registration.register_subnet_extrinsic", false]], "registration_allowed (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.registration_allowed", false]], "registration_allowed (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.registration_allowed", false]], "registration_allowed (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[17, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.registration_allowed", false]], "registrationallowed (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.RegistrationAllowed", false]], "registrationerror": [[25, "bittensor.core.errors.RegistrationError", false]], "registrationnotpermittedonrootsubnet": [[25, "bittensor.core.errors.RegistrationNotPermittedOnRootSubnet", false]], "registrations (bittensor.core.chain_data.delegate_info.delegateinfobase attribute)": [[4, "bittensor.core.chain_data.delegate_info.DelegateInfoBase.registrations", false]], "registrations (bittensor.core.chain_data.delegate_info_lite.delegateinfolite attribute)": [[5, "bittensor.core.chain_data.delegate_info_lite.DelegateInfoLite.registrations", false]], "registrationstatistics (class in bittensor.utils.registration.pow)": [[91, "bittensor.utils.registration.pow.RegistrationStatistics", false]], "registrationstatisticslogger (class in bittensor.utils.registration.pow)": [[91, "bittensor.utils.registration.pow.RegistrationStatisticsLogger", false]], "required_hash_fields (bittensor.core.synapse.synapse attribute)": [[69, "bittensor.core.synapse.Synapse.required_hash_fields", false]], "reset() (bittensor.utils.mock.subtensor_mock.mocksubtensor class method)": [[87, "bittensor.utils.mock.subtensor_mock.MockSubtensor.reset", false]], "reset() (bittensor.utils.mock.subtensor_mock.reusablecoroutine method)": [[87, "bittensor.utils.mock.subtensor_mock.ReusableCoroutine.reset", false]], "reset_cuda() (in module bittensor.utils.registration.register_cuda)": [[92, "bittensor.utils.registration.register_cuda.reset_cuda", false]], "return_per_1000 (bittensor.core.chain_data.delegate_info.delegateinfobase attribute)": [[4, "bittensor.core.chain_data.delegate_info.DelegateInfoBase.return_per_1000", false]], "return_per_1000 (bittensor.core.chain_data.delegate_info_lite.delegateinfolite attribute)": [[5, "bittensor.core.chain_data.delegate_info_lite.DelegateInfoLite.return_per_1000", false]], "reusablecoroutine (class in bittensor.utils.mock.subtensor_mock)": [[87, "bittensor.utils.mock.subtensor_mock.ReusableCoroutine", false]], "reveal_round (bittensor.core.chain_data.weight_commit_info.weightcommitinfo attribute)": [[22, "bittensor.core.chain_data.weight_commit_info.WeightCommitInfo.reveal_round", false]], "reveal_weights (bittensor.core.subtensor_api.extrinsics.extrinsics attribute)": [[60, "bittensor.core.subtensor_api.extrinsics.Extrinsics.reveal_weights", false]], "reveal_weights() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.reveal_weights", false]], "reveal_weights() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.reveal_weights", false]], "reveal_weights_extrinsic() (in module bittensor.core.extrinsics.asyncex.weights)": [[37, "bittensor.core.extrinsics.asyncex.weights.reveal_weights_extrinsic", false]], "reveal_weights_extrinsic() (in module bittensor.core.extrinsics.commit_weights)": [[39, "bittensor.core.extrinsics.commit_weights.reveal_weights_extrinsic", false]], "reverse_network_map (in module bittensor.core.settings)": [[54, "bittensor.core.settings.REVERSE_NETWORK_MAP", false]], "rho (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.rho", false]], "rho (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.rho", false]], "rho (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.Rho", false]], "rho (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[17, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.rho", false]], "rho (bittensor.core.chain_data.subnet_info.subnetinfo attribute)": [[19, "bittensor.core.chain_data.subnet_info.SubnetInfo.rho", false]], "rho (bittensor.utils.mock.subtensor_mock.mocksubtensorstate attribute)": [[87, "bittensor.utils.mock.subtensor_mock.MockSubtensorState.Rho", false]], "root_register (bittensor.core.subtensor_api.extrinsics.extrinsics attribute)": [[60, "bittensor.core.subtensor_api.extrinsics.Extrinsics.root_register", false]], "root_register() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.root_register", false]], "root_register() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.root_register", false]], "root_register_extrinsic() (in module bittensor.core.extrinsics.asyncex.root)": [[30, "bittensor.core.extrinsics.asyncex.root.root_register_extrinsic", false]], "root_register_extrinsic() (in module bittensor.core.extrinsics.root)": [[43, "bittensor.core.extrinsics.root.root_register_extrinsic", false]], "root_set_weights (bittensor.core.subtensor_api.extrinsics.extrinsics attribute)": [[60, "bittensor.core.subtensor_api.extrinsics.Extrinsics.root_set_weights", false]], "root_set_weights() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.root_set_weights", false]], "root_set_weights() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.root_set_weights", false]], "root_tao_stake_weight (in module bittensor.core.settings)": [[54, "bittensor.core.settings.ROOT_TAO_STAKE_WEIGHT", false]], "rounds_total (bittensor.utils.registration.pow.registrationstatistics attribute)": [[91, "bittensor.utils.registration.pow.RegistrationStatistics.rounds_total", false]], "router (bittensor.core.axon.axon attribute)": [[1, "bittensor.core.axon.Axon.router", false]], "run() (bittensor.core.axon.axonmiddleware method)": [[1, "bittensor.core.axon.AxonMiddleware.run", false]], "run() (bittensor.utils.registration.pow.cudasolver method)": [[91, "bittensor.utils.registration.pow.CUDASolver.run", false]], "run() (bittensor.utils.registration.pow.solver method)": [[91, "bittensor.utils.registration.pow.Solver.run", false]], "run_in_thread() (bittensor.core.axon.fastapithreadedserver method)": [[1, "bittensor.core.axon.FastAPIThreadedServer.run_in_thread", false]], "runexception": [[25, "bittensor.core.errors.RunException", false]], "runtime_config (bittensor.utils.substrate_utils.storage.storagekey attribute)": [[96, "bittensor.utils.substrate_utils.storage.StorageKey.runtime_config", false]], "s (bittensor.core.metagraph.metagraphmixin property)": [[53, "bittensor.core.metagraph.MetagraphMixin.S", false]], "safe_globals() (in module bittensor.core.metagraph)": [[53, "bittensor.core.metagraph.safe_globals", false]], "save() (bittensor.core.metagraph.metagraphmixin method)": [[53, "bittensor.core.metagraph.MetagraphMixin.save", false]], "scaling_law_power (bittensor.core.chain_data.subnet_info.subnetinfo attribute)": [[19, "bittensor.core.chain_data.subnet_info.SubnetInfo.scaling_law_power", false]], "scheduledcoldkeyswapinfo (bittensor.core.chain_data.utils.chaindatatype attribute)": [[21, "bittensor.core.chain_data.utils.ChainDataType.ScheduledColdkeySwapInfo", false]], "scheduledcoldkeyswapinfo (class in bittensor.core.chain_data.scheduled_coldkey_swap_info)": [[15, "bittensor.core.chain_data.scheduled_coldkey_swap_info.ScheduledColdkeySwapInfo", false]], "seal (bittensor.utils.registration.pow.powsolution attribute)": [[91, "bittensor.utils.registration.pow.POWSolution.seal", false]], "selectivemetagraphindex (class in bittensor.core.chain_data.metagraph_info)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex", false]], "serialize() (bittensor.core.tensor.tensor static method)": [[70, "bittensor.core.tensor.Tensor.serialize", false]], "serve() (bittensor.core.axon.axon method)": [[1, "bittensor.core.axon.Axon.serve", false]], "serve_axon (bittensor.core.subtensor_api.extrinsics.extrinsics attribute)": [[60, "bittensor.core.subtensor_api.extrinsics.Extrinsics.serve_axon", false]], "serve_axon() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.serve_axon", false]], "serve_axon() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.serve_axon", false]], "serve_axon_extrinsic() (in module bittensor.core.extrinsics.asyncex.serving)": [[31, "bittensor.core.extrinsics.asyncex.serving.serve_axon_extrinsic", false]], "serve_axon_extrinsic() (in module bittensor.core.extrinsics.serving)": [[44, "bittensor.core.extrinsics.serving.serve_axon_extrinsic", false]], "serve_extrinsic() (in module bittensor.core.extrinsics.asyncex.serving)": [[31, "bittensor.core.extrinsics.asyncex.serving.serve_extrinsic", false]], "serve_extrinsic() (in module bittensor.core.extrinsics.serving)": [[44, "bittensor.core.extrinsics.serving.serve_extrinsic", false]], "serving_rate_limit (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.serving_rate_limit", false]], "serving_rate_limit (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.serving_rate_limit", false]], "serving_rate_limit (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[17, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.serving_rate_limit", false]], "servingratelimit (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.ServingRateLimit", false]], "session (bittensor.core.dendrite.dendritemixin property)": [[24, "bittensor.core.dendrite.DendriteMixin.session", false]], "set_children (bittensor.core.subtensor_api.extrinsics.extrinsics attribute)": [[60, "bittensor.core.subtensor_api.extrinsics.Extrinsics.set_children", false]], "set_children() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.set_children", false]], "set_children() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.set_children", false]], "set_commitment (bittensor.core.async_subtensor.asyncsubtensor attribute)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.set_commitment", false]], "set_commitment (bittensor.core.subtensor.subtensor attribute)": [[56, "bittensor.core.subtensor.Subtensor.set_commitment", false]], "set_commitment (bittensor.core.subtensor_api.commitments.commitments attribute)": [[58, "bittensor.core.subtensor_api.commitments.Commitments.set_commitment", false]], "set_config() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.set_config", false]], "set_console() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.set_console", false]], "set_debug() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.set_debug", false]], "set_default() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.set_default", false]], "set_delegate_take (bittensor.core.subtensor_api.delegates.delegates attribute)": [[59, "bittensor.core.subtensor_api.delegates.Delegates.set_delegate_take", false]], "set_delegate_take() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.set_delegate_take", false]], "set_delegate_take() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.set_delegate_take", false]], "set_difficulty() (bittensor.utils.mock.subtensor_mock.mocksubtensor method)": [[87, "bittensor.utils.mock.subtensor_mock.MockSubtensor.set_difficulty", false]], "set_info() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.set_info", false]], "set_name_type() (bittensor.core.synapse.synapse method)": [[69, "bittensor.core.synapse.Synapse.set_name_type", false]], "set_reveal_commitment (bittensor.core.subtensor_api.commitments.commitments attribute)": [[58, "bittensor.core.subtensor_api.commitments.Commitments.set_reveal_commitment", false]], "set_reveal_commitment() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.set_reveal_commitment", false]], "set_reveal_commitment() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.set_reveal_commitment", false]], "set_root_weights_extrinsic() (in module bittensor.core.extrinsics.asyncex.root)": [[30, "bittensor.core.extrinsics.asyncex.root.set_root_weights_extrinsic", false]], "set_root_weights_extrinsic() (in module bittensor.core.extrinsics.root)": [[43, "bittensor.core.extrinsics.root.set_root_weights_extrinsic", false]], "set_subnet_identity (bittensor.core.subtensor_api.extrinsics.extrinsics attribute)": [[60, "bittensor.core.subtensor_api.extrinsics.Extrinsics.set_subnet_identity", false]], "set_subnet_identity (bittensor.core.subtensor_api.subnets.subnets attribute)": [[66, "bittensor.core.subtensor_api.subnets.Subnets.set_subnet_identity", false]], "set_subnet_identity() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.set_subnet_identity", false]], "set_subnet_identity() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.set_subnet_identity", false]], "set_subnet_identity_extrinsic() (in module bittensor.core.extrinsics.asyncex.registration)": [[29, "bittensor.core.extrinsics.asyncex.registration.set_subnet_identity_extrinsic", false]], "set_subnet_identity_extrinsic() (in module bittensor.core.extrinsics.registration)": [[42, "bittensor.core.extrinsics.registration.set_subnet_identity_extrinsic", false]], "set_trace() (bittensor.utils.btlogging.format.btstreamformatter method)": [[79, "bittensor.utils.btlogging.format.BtStreamFormatter.set_trace", false]], "set_trace() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.set_trace", false]], "set_unit() (bittensor.utils.balance.balance method)": [[76, "bittensor.utils.balance.Balance.set_unit", false]], "set_warning() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.set_warning", false]], "set_weights (bittensor.core.subtensor_api.extrinsics.extrinsics attribute)": [[60, "bittensor.core.subtensor_api.extrinsics.Extrinsics.set_weights", false]], "set_weights() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.set_weights", false]], "set_weights() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.set_weights", false]], "set_weights_extrinsic() (in module bittensor.core.extrinsics.asyncex.weights)": [[37, "bittensor.core.extrinsics.asyncex.weights.set_weights_extrinsic", false]], "set_weights_extrinsic() (in module bittensor.core.extrinsics.set_weights)": [[45, "bittensor.core.extrinsics.set_weights.set_weights_extrinsic", false]], "setlevel() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.setLevel", false]], "setup() (bittensor.utils.mock.subtensor_mock.mocksubtensor method)": [[87, "bittensor.utils.mock.subtensor_mock.MockSubtensor.setup", false]], "setup_config (bittensor.core.subtensor_api.subtensorapi attribute)": [[61, "bittensor.core.subtensor_api.SubtensorApi.setup_config", false]], "setup_config() (bittensor.core.types.subtensormixin static method)": [[73, "bittensor.core.types.SubtensorMixin.setup_config", false]], "shape (bittensor.core.tensor.tensor attribute)": [[70, "bittensor.core.tensor.Tensor.shape", false]], "should_exit (bittensor.core.axon.fastapithreadedserver attribute)": [[1, "bittensor.core.axon.FastAPIThreadedServer.should_exit", false]], "should_sync (bittensor.core.metagraph.metagraphmixin attribute)": [[53, "bittensor.core.metagraph.MetagraphMixin.should_sync", false]], "should_sync (bittensor.core.metagraph.nontorchmetagraph attribute)": [[53, "bittensor.core.metagraph.NonTorchMetagraph.should_sync", false]], "shutdown() (bittensor.core.threadpool.prioritythreadpoolexecutor method)": [[71, "bittensor.core.threadpool.PriorityThreadPoolExecutor.shutdown", false]], "sign_and_send_extrinsic (bittensor.core.subtensor_api.subtensorapi attribute)": [[61, "bittensor.core.subtensor_api.SubtensorApi.sign_and_send_extrinsic", false]], "sign_and_send_extrinsic() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.sign_and_send_extrinsic", false]], "sign_and_send_extrinsic() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.sign_and_send_extrinsic", false]], "signature (bittensor.core.synapse.terminalinfo attribute)": [[69, "bittensor.core.synapse.TerminalInfo.signature", false]], "slippage (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[6, "bittensor.core.chain_data.dynamic_info.DynamicInfo.slippage", false]], "solve_cuda() (in module bittensor.utils.registration.register_cuda)": [[92, "bittensor.utils.registration.register_cuda.solve_cuda", false]], "solver (class in bittensor.utils.registration.pow)": [[91, "bittensor.utils.registration.pow.Solver", false]], "ss58 (bittensor.core.chain_data.weight_commit_info.weightcommitinfo attribute)": [[22, "bittensor.core.chain_data.weight_commit_info.WeightCommitInfo.ss58", false]], "ss58_address_length (in module bittensor.core.settings)": [[54, "bittensor.core.settings.SS58_ADDRESS_LENGTH", false]], "ss58_address_to_bytes() (in module bittensor.utils)": [[85, "bittensor.utils.ss58_address_to_bytes", false]], "ss58_decode (in module bittensor.utils)": [[85, "bittensor.utils.ss58_decode", false]], "ss58_format (in module bittensor.core.settings)": [[54, "bittensor.core.settings.SS58_FORMAT", false]], "ss58_to_vec_u8() (in module bittensor.utils)": [[85, "bittensor.utils.ss58_to_vec_u8", false]], "stake (bittensor.core.chain_data.delegate_info.delegatedinfo attribute)": [[4, "bittensor.core.chain_data.delegate_info.DelegatedInfo.stake", false]], "stake (bittensor.core.chain_data.neuron_info.neuroninfo attribute)": [[11, "bittensor.core.chain_data.neuron_info.NeuronInfo.stake", false]], "stake (bittensor.core.chain_data.neuron_info_lite.neuroninfolite attribute)": [[12, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite.stake", false]], "stake (bittensor.core.chain_data.stake_info.stakeinfo attribute)": [[16, "bittensor.core.chain_data.stake_info.StakeInfo.stake", false]], "stake (bittensor.core.metagraph.metagraphmixin attribute)": [[53, "bittensor.core.metagraph.MetagraphMixin.stake", false]], "stake (bittensor.core.metagraph.nontorchmetagraph attribute)": [[53, "bittensor.core.metagraph.NonTorchMetagraph.stake", false]], "stake (bittensor.core.metagraph.torchmetagraph attribute)": [[53, "bittensor.core.metagraph.TorchMetagraph.stake", false]], "stake (bittensor.utils.mock.subtensor_mock.mocksubtensorstate attribute)": [[87, "bittensor.utils.mock.subtensor_mock.MockSubtensorState.Stake", false]], "stake_dict (bittensor.core.chain_data.neuron_info.neuroninfo attribute)": [[11, "bittensor.core.chain_data.neuron_info.NeuronInfo.stake_dict", false]], "stake_dict (bittensor.core.chain_data.neuron_info_lite.neuroninfolite attribute)": [[12, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite.stake_dict", false]], "stakeerror": [[25, "bittensor.core.errors.StakeError", false]], "stakeinfo (bittensor.core.chain_data.utils.chaindatatype attribute)": [[21, "bittensor.core.chain_data.utils.ChainDataType.StakeInfo", false]], "stakeinfo (class in bittensor.core.chain_data.stake_info)": [[16, "bittensor.core.chain_data.stake_info.StakeInfo", false]], "staking (bittensor.core.subtensor_api.subtensorapi property)": [[61, "bittensor.core.subtensor_api.SubtensorApi.staking", false]], "staking (class in bittensor.core.subtensor_api.staking)": [[65, "bittensor.core.subtensor_api.staking.Staking", false]], "start() (bittensor.core.axon.axon method)": [[1, "bittensor.core.axon.Axon.start", false]], "start() (bittensor.core.axon.fastapithreadedserver method)": [[1, "bittensor.core.axon.FastAPIThreadedServer.start", false]], "start() (bittensor.utils.registration.pow.registrationstatisticslogger method)": [[91, "bittensor.utils.registration.pow.RegistrationStatisticsLogger.start", false]], "start() (bittensor.utils.registration.pow.status method)": [[91, "bittensor.utils.registration.pow.Status.start", false]], "start_call (bittensor.core.subtensor_api.extrinsics.extrinsics attribute)": [[60, "bittensor.core.subtensor_api.extrinsics.Extrinsics.start_call", false]], "start_call (bittensor.core.subtensor_api.subtensorapi attribute)": [[61, "bittensor.core.subtensor_api.SubtensorApi.start_call", false]], "start_call() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.start_call", false]], "start_call() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.start_call", false]], "start_call_extrinsic() (in module bittensor.core.extrinsics.asyncex.start_call)": [[33, "bittensor.core.extrinsics.asyncex.start_call.start_call_extrinsic", false]], "start_call_extrinsic() (in module bittensor.core.extrinsics.start_call)": [[47, "bittensor.core.extrinsics.start_call.start_call_extrinsic", false]], "started (bittensor.core.axon.axon attribute)": [[1, "bittensor.core.axon.Axon.started", false]], "state_call (bittensor.core.subtensor_api.chain.chain attribute)": [[57, "bittensor.core.subtensor_api.chain.Chain.state_call", false]], "state_call() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.state_call", false]], "state_call() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.state_call", false]], "state_dict() (bittensor.core.metagraph.metagraphmixin method)": [[53, "bittensor.core.metagraph.MetagraphMixin.state_dict", false]], "status (bittensor.utils.registration.pow.registrationstatisticslogger attribute)": [[91, "bittensor.utils.registration.pow.RegistrationStatisticsLogger.status", false]], "status (class in bittensor.utils.registration.pow)": [[91, "bittensor.utils.registration.pow.Status", false]], "status() (bittensor.utils.registration.pow.console static method)": [[91, "bittensor.utils.registration.pow.Console.status", false]], "status_code (bittensor.core.synapse.terminalinfo attribute)": [[69, "bittensor.core.synapse.TerminalInfo.status_code", false]], "status_message (bittensor.core.synapse.terminalinfo attribute)": [[69, "bittensor.core.synapse.TerminalInfo.status_message", false]], "stop() (bittensor.core.axon.axon method)": [[1, "bittensor.core.axon.Axon.stop", false]], "stop() (bittensor.core.axon.fastapithreadedserver method)": [[1, "bittensor.core.axon.FastAPIThreadedServer.stop", false]], "stop() (bittensor.utils.registration.pow.registrationstatisticslogger method)": [[91, "bittensor.utils.registration.pow.RegistrationStatisticsLogger.stop", false]], "stop() (bittensor.utils.registration.pow.status method)": [[91, "bittensor.utils.registration.pow.Status.stop", false]], "storage_function (bittensor.utils.substrate_utils.storage.storagekey attribute)": [[96, "bittensor.utils.substrate_utils.storage.StorageKey.storage_function", false]], "storagefunctionnotfound (in module bittensor.core.errors)": [[25, "bittensor.core.errors.StorageFunctionNotFound", false]], "storagekey (class in bittensor.utils.substrate_utils.storage)": [[96, "bittensor.utils.substrate_utils.storage.StorageKey", false]], "stream_response() (bittensor.core.stream.streamingsynapse.btstreamingresponse method)": [[55, "bittensor.core.stream.StreamingSynapse.BTStreamingResponse.stream_response", false]], "streamingsynapse (class in bittensor.core.stream)": [[55, "bittensor.core.stream.StreamingSynapse", false]], "streamingsynapse.btstreamingresponse (class in bittensor.core.stream)": [[55, "bittensor.core.stream.StreamingSynapse.BTStreamingResponse", false]], "strtobool() (in module bittensor.utils)": [[85, "bittensor.utils.strtobool", false]], "submit() (bittensor.core.threadpool.prioritythreadpoolexecutor method)": [[71, "bittensor.core.threadpool.PriorityThreadPoolExecutor.submit", false]], "subnet (bittensor.core.subtensor_api.subnets.subnets attribute)": [[66, "bittensor.core.subtensor_api.subnets.Subnets.subnet", false]], "subnet() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.subnet", false]], "subnet() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.subnet", false]], "subnet_contact (bittensor.core.chain_data.subnet_identity.subnetidentity attribute)": [[18, "bittensor.core.chain_data.subnet_identity.SubnetIdentity.subnet_contact", false]], "subnet_emission (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.subnet_emission", false]], "subnet_emission (bittensor.core.chain_data.metagraph_info.metagraphinfoemissions attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfoEmissions.subnet_emission", false]], "subnet_exists (bittensor.core.subtensor_api.subnets.subnets attribute)": [[66, "bittensor.core.subtensor_api.subnets.Subnets.subnet_exists", false]], "subnet_exists() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.subnet_exists", false]], "subnet_exists() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.subnet_exists", false]], "subnet_identity (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[6, "bittensor.core.chain_data.dynamic_info.DynamicInfo.subnet_identity", false]], "subnet_name (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[6, "bittensor.core.chain_data.dynamic_info.DynamicInfo.subnet_name", false]], "subnet_name (bittensor.core.chain_data.subnet_identity.subnetidentity attribute)": [[18, "bittensor.core.chain_data.subnet_identity.SubnetIdentity.subnet_name", false]], "subnet_url (bittensor.core.chain_data.subnet_identity.subnetidentity attribute)": [[18, "bittensor.core.chain_data.subnet_identity.SubnetIdentity.subnet_url", false]], "subnet_volume (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[6, "bittensor.core.chain_data.dynamic_info.DynamicInfo.subnet_volume", false]], "subnet_volume (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.subnet_volume", false]], "subnet_volume (bittensor.core.chain_data.metagraph_info.metagraphinfopool attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfoPool.subnet_volume", false]], "subnetemission (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.SubnetEmission", false]], "subnethyperparameters (bittensor.core.chain_data.utils.chaindatatype attribute)": [[21, "bittensor.core.chain_data.utils.ChainDataType.SubnetHyperparameters", false]], "subnethyperparameters (class in bittensor.core.chain_data.subnet_hyperparameters)": [[17, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters", false]], "subnetidentity (bittensor.core.chain_data.utils.chaindatatype attribute)": [[21, "bittensor.core.chain_data.utils.ChainDataType.SubnetIdentity", false]], "subnetidentity (class in bittensor.core.chain_data.subnet_identity)": [[18, "bittensor.core.chain_data.subnet_identity.SubnetIdentity", false]], "subnetinfo (bittensor.core.chain_data.utils.chaindatatype attribute)": [[21, "bittensor.core.chain_data.utils.ChainDataType.SubnetInfo", false]], "subnetinfo (class in bittensor.core.chain_data.subnet_info)": [[19, "bittensor.core.chain_data.subnet_info.SubnetInfo", false]], "subnets (bittensor.core.subtensor_api.subtensorapi property)": [[61, "bittensor.core.subtensor_api.SubtensorApi.subnets", false]], "subnets (class in bittensor.core.subtensor_api.subnets)": [[66, "bittensor.core.subtensor_api.subnets.Subnets", false]], "subnetsapi (class in bittensor.utils.subnets)": [[93, "bittensor.utils.subnets.SubnetsAPI", false]], "subnetstate (bittensor.core.chain_data.utils.chaindatatype attribute)": [[21, "bittensor.core.chain_data.utils.ChainDataType.SubnetState", false]], "subnetstate (class in bittensor.core.chain_data.subnet_state)": [[20, "bittensor.core.chain_data.subnet_state.SubnetState", false]], "subnetvolume (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.SubnetVolume", false]], "subnetwork_n (bittensor.core.chain_data.subnet_info.subnetinfo attribute)": [[19, "bittensor.core.chain_data.subnet_info.SubnetInfo.subnetwork_n", false]], "subnetwork_n (bittensor.core.subtensor_api.subnets.subnets attribute)": [[66, "bittensor.core.subtensor_api.subnets.Subnets.subnetwork_n", false]], "subnetwork_n() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.subnetwork_n", false]], "subnetwork_n() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.subnetwork_n", false]], "subnetworkdoesnotexist": [[25, "bittensor.core.errors.SubNetworkDoesNotExist", false]], "substrate (bittensor.core.async_subtensor.asyncsubtensor attribute)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.substrate", false]], "substrate (bittensor.core.subtensor.subtensor attribute)": [[56, "bittensor.core.subtensor.Subtensor.substrate", false]], "substrate (bittensor.core.subtensor_api.subtensorapi attribute)": [[61, "bittensor.core.subtensor_api.SubtensorApi.substrate", false]], "substraterequestexception (in module bittensor.core.errors)": [[25, "bittensor.core.errors.SubstrateRequestException", false]], "subtensor (bittensor.core.metagraph.metagraphmixin attribute)": [[53, "bittensor.core.metagraph.MetagraphMixin.subtensor", false]], "subtensor (bittensor.core.metagraph.nontorchmetagraph attribute)": [[53, "bittensor.core.metagraph.NonTorchMetagraph.subtensor", false]], "subtensor (class in bittensor.core.subtensor)": [[56, "bittensor.core.subtensor.Subtensor", false]], "subtensor (in module bittensor.utils.easy_imports)": [[83, "bittensor.utils.easy_imports.subtensor", false]], "subtensorapi (class in bittensor.core.subtensor_api)": [[61, "bittensor.core.subtensor_api.SubtensorApi", false]], "subtensormixin (class in bittensor.core.types)": [[73, "bittensor.core.types.SubtensorMixin", false]], "subtensormodule (bittensor.utils.mock.subtensor_mock.mockchainstate attribute)": [[87, "bittensor.utils.mock.subtensor_mock.MockChainState.SubtensorModule", false]], "subvortex_entrypoint (in module bittensor.core.settings)": [[54, "bittensor.core.settings.SUBVORTEX_ENTRYPOINT", false]], "success (bittensor.utils.unlockstatus attribute)": [[85, "bittensor.utils.UnlockStatus.success", false]], "success() (bittensor.utils.btlogging.console.bittensorconsole method)": [[77, "bittensor.utils.btlogging.console.BittensorConsole.success", false]], "success() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.success", false]], "success_level_num (in module bittensor.utils.btlogging.format)": [[79, "bittensor.utils.btlogging.format.SUCCESS_LEVEL_NUM", false]], "sudo_force_set_balance (bittensor.utils.mock.subtensor_mock.mocksubtensor attribute)": [[87, "bittensor.utils.mock.subtensor_mock.MockSubtensor.sudo_force_set_balance", false]], "swap_stake (bittensor.core.subtensor_api.extrinsics.extrinsics attribute)": [[60, "bittensor.core.subtensor_api.extrinsics.Extrinsics.swap_stake", false]], "swap_stake() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.swap_stake", false]], "swap_stake() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.swap_stake", false]], "swap_stake_extrinsic() (in module bittensor.core.extrinsics.asyncex.move_stake)": [[28, "bittensor.core.extrinsics.asyncex.move_stake.swap_stake_extrinsic", false]], "swap_stake_extrinsic() (in module bittensor.core.extrinsics.move_stake)": [[41, "bittensor.core.extrinsics.move_stake.swap_stake_extrinsic", false]], "symbol (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[6, "bittensor.core.chain_data.dynamic_info.DynamicInfo.symbol", false]], "symbol (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.symbol", false]], "symbol (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.Symbol", false]], "symbol (bittensor.core.metagraph.metagraphmixin attribute)": [[53, "bittensor.core.metagraph.MetagraphMixin.symbol", false]], "synapse (bittensor.core.errors.synapseexception attribute)": [[25, "bittensor.core.errors.SynapseException.synapse", false]], "synapse (bittensor.core.stream.streamingsynapse.btstreamingresponse attribute)": [[55, "bittensor.core.stream.StreamingSynapse.BTStreamingResponse.synapse", false]], "synapse (class in bittensor.core.synapse)": [[69, "bittensor.core.synapse.Synapse", false]], "synapse (in module bittensor.utils.easy_imports)": [[83, "bittensor.utils.easy_imports.synapse", false]], "synapse_history (bittensor.core.dendrite.dendritemixin attribute)": [[24, "bittensor.core.dendrite.DendriteMixin.synapse_history", false]], "synapse_to_response() (bittensor.core.axon.axonmiddleware class method)": [[1, "bittensor.core.axon.AxonMiddleware.synapse_to_response", false]], "synapsedendritenoneexception": [[25, "bittensor.core.errors.SynapseDendriteNoneException", false]], "synapseexception": [[25, "bittensor.core.errors.SynapseException", false]], "synapseparsingerror": [[25, "bittensor.core.errors.SynapseParsingError", false]], "sync() (bittensor.core.metagraph.asyncmetagraph method)": [[53, "bittensor.core.metagraph.AsyncMetagraph.sync", false]], "sync() (bittensor.core.metagraph.metagraph method)": [[53, "bittensor.core.metagraph.Metagraph.sync", false]], "system (bittensor.utils.mock.subtensor_mock.mockchainstate attribute)": [[87, "bittensor.utils.mock.subtensor_mock.MockChainState.System", false]], "t (bittensor.core.metagraph.metagraphmixin property)": [[53, "bittensor.core.metagraph.MetagraphMixin.T", false]], "t (in module bittensor.core.chain_data.info_base)": [[8, "bittensor.core.chain_data.info_base.T", false]], "t (in module bittensor.core.config)": [[23, "bittensor.core.config.T", false]], "take (bittensor.core.chain_data.delegate_info.delegateinfobase attribute)": [[4, "bittensor.core.chain_data.delegate_info.DelegateInfoBase.take", false]], "take (bittensor.core.chain_data.delegate_info_lite.delegateinfolite attribute)": [[5, "bittensor.core.chain_data.delegate_info_lite.DelegateInfoLite.take", false]], "takeerror": [[25, "bittensor.core.errors.TakeError", false]], "tao (bittensor.utils.balance.balance property)": [[76, "bittensor.utils.balance.Balance.tao", false]], "tao() (in module bittensor.utils.balance)": [[76, "bittensor.utils.balance.tao", false]], "tao_dividends_per_hotkey (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.tao_dividends_per_hotkey", false]], "tao_dividends_per_hotkey (bittensor.core.metagraph.metagraphmixin attribute)": [[53, "bittensor.core.metagraph.MetagraphMixin.tao_dividends_per_hotkey", false]], "tao_in (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[6, "bittensor.core.chain_data.dynamic_info.DynamicInfo.tao_in", false]], "tao_in (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.tao_in", false]], "tao_in (bittensor.core.chain_data.metagraph_info.metagraphinfopool attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfoPool.tao_in", false]], "tao_in_emission (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[6, "bittensor.core.chain_data.dynamic_info.DynamicInfo.tao_in_emission", false]], "tao_in_emission (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.tao_in_emission", false]], "tao_in_emission (bittensor.core.chain_data.metagraph_info.metagraphinfoemissions attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfoEmissions.tao_in_emission", false]], "tao_slippage (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[6, "bittensor.core.chain_data.dynamic_info.DynamicInfo.tao_slippage", false]], "tao_stake (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.tao_stake", false]], "tao_stake (bittensor.core.chain_data.subnet_state.subnetstate attribute)": [[20, "bittensor.core.chain_data.subnet_state.SubnetState.tao_stake", false]], "tao_stake (bittensor.core.metagraph.metagraphmixin attribute)": [[53, "bittensor.core.metagraph.MetagraphMixin.tao_stake", false]], "tao_stake (bittensor.core.metagraph.nontorchmetagraph attribute)": [[53, "bittensor.core.metagraph.NonTorchMetagraph.tao_stake", false]], "tao_stake (bittensor.core.metagraph.torchmetagraph attribute)": [[53, "bittensor.core.metagraph.TorchMetagraph.tao_stake", false]], "tao_symbol (in module bittensor.core.settings)": [[54, "bittensor.core.settings.TAO_SYMBOL", false]], "tao_to_alpha() (bittensor.core.chain_data.dynamic_info.dynamicinfo method)": [[6, "bittensor.core.chain_data.dynamic_info.DynamicInfo.tao_to_alpha", false]], "tao_to_alpha_with_slippage() (bittensor.core.chain_data.dynamic_info.dynamicinfo method)": [[6, "bittensor.core.chain_data.dynamic_info.DynamicInfo.tao_to_alpha_with_slippage", false]], "taodividendsperhotkey (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.TaoDividendsPerHotkey", false]], "taoin (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.TaoIn", false]], "taoinemission (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.TaoInEmission", false]], "taostake (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.TaoStake", false]], "target_regs_per_interval (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.target_regs_per_interval", false]], "target_regs_per_interval (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.target_regs_per_interval", false]], "target_regs_per_interval (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[17, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.target_regs_per_interval", false]], "targetregsperinterval (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.TargetRegsPerInterval", false]], "tempo (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[6, "bittensor.core.chain_data.dynamic_info.DynamicInfo.tempo", false]], "tempo (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.tempo", false]], "tempo (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.tempo", false]], "tempo (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.Tempo", false]], "tempo (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[17, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.tempo", false]], "tempo (bittensor.core.chain_data.subnet_info.subnetinfo attribute)": [[19, "bittensor.core.chain_data.subnet_info.SubnetInfo.tempo", false]], "tempo (bittensor.core.metagraph.metagraphmixin attribute)": [[53, "bittensor.core.metagraph.MetagraphMixin.tempo", false]], "tempo (bittensor.core.subtensor_api.subnets.subnets attribute)": [[66, "bittensor.core.subtensor_api.subnets.Subnets.tempo", false]], "tempo() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.tempo", false]], "tempo() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.tempo", false]], "tensor (class in bittensor.core.tensor)": [[70, "bittensor.core.tensor.Tensor", false], [70, "bittensor.core.tensor.tensor", false]], "tensor (in module bittensor.core.metagraph)": [[53, "bittensor.core.metagraph.Tensor", false]], "tensor() (bittensor.core.tensor.tensor method)": [[70, "bittensor.core.tensor.Tensor.tensor", false]], "terminalinfo (class in bittensor.core.synapse)": [[69, "bittensor.core.synapse.TerminalInfo", false]], "terminate_workers_and_wait_for_exit() (in module bittensor.utils.registration.pow)": [[91, "bittensor.utils.registration.pow.terminate_workers_and_wait_for_exit", false]], "thread_pool (bittensor.core.axon.axon attribute)": [[1, "bittensor.core.axon.Axon.thread_pool", false]], "threshold (bittensor.core.chain_data.proposal_vote_data.proposalvotedata attribute)": [[14, "bittensor.core.chain_data.proposal_vote_data.ProposalVoteData.threshold", false]], "time_average (bittensor.utils.registration.pow.registrationstatistics attribute)": [[91, "bittensor.utils.registration.pow.RegistrationStatistics.time_average", false]], "time_spent (bittensor.utils.registration.pow.registrationstatistics attribute)": [[91, "bittensor.utils.registration.pow.RegistrationStatistics.time_spent", false]], "time_spent_total (bittensor.utils.registration.pow.registrationstatistics attribute)": [[91, "bittensor.utils.registration.pow.RegistrationStatistics.time_spent_total", false]], "timeout (bittensor.core.synapse.synapse attribute)": [[69, "bittensor.core.synapse.Synapse.timeout", false]], "to_dict() (bittensor.core.config.config method)": [[23, "bittensor.core.config.Config.to_dict", false]], "to_headers() (bittensor.core.synapse.synapse method)": [[69, "bittensor.core.synapse.Synapse.to_headers", false], [69, "id5", false]], "to_hex() (bittensor.utils.substrate_utils.storage.storagekey method)": [[96, "bittensor.utils.substrate_utils.storage.StorageKey.to_hex", false]], "to_parameter_dict() (bittensor.core.chain_data.axon_info.axoninfo method)": [[2, "bittensor.core.chain_data.axon_info.AxonInfo.to_parameter_dict", false]], "to_parameter_dict() (bittensor.core.chain_data.ip_info.ipinfo method)": [[9, "bittensor.core.chain_data.ip_info.IPInfo.to_parameter_dict", false]], "to_string() (bittensor.core.axon.axon method)": [[1, "bittensor.core.axon.Axon.to_string", false]], "to_string() (bittensor.core.chain_data.axon_info.axoninfo method)": [[2, "bittensor.core.chain_data.axon_info.AxonInfo.to_string", false]], "token_streamer (bittensor.core.stream.btstreamingresponsemodel attribute)": [[55, "bittensor.core.stream.BTStreamingResponseModel.token_streamer", false]], "token_streamer (bittensor.core.stream.streamingsynapse.btstreamingresponse attribute)": [[55, "bittensor.core.stream.StreamingSynapse.BTStreamingResponse.token_streamer", false]], "tolist() (bittensor.core.tensor.tensor method)": [[70, "bittensor.core.tensor.Tensor.tolist", false]], "toomanychildren": [[25, "bittensor.core.errors.TooManyChildren", false]], "torch (bittensor.core.tensor.dtypes attribute)": [[70, "bittensor.core.tensor.DTypes.torch", false]], "torch (in module bittensor.utils)": [[85, "bittensor.utils.torch", false]], "torch (in module bittensor.utils.registration.pow)": [[91, "bittensor.utils.registration.pow.torch", false]], "torchmetagraph (class in bittensor.core.metagraph)": [[53, "bittensor.core.metagraph.TorchMetagraph", false]], "total_daily_return (bittensor.core.chain_data.delegate_info.delegateinfobase attribute)": [[4, "bittensor.core.chain_data.delegate_info.DelegateInfoBase.total_daily_return", false]], "total_daily_return (bittensor.core.chain_data.delegate_info_lite.delegateinfolite attribute)": [[5, "bittensor.core.chain_data.delegate_info_lite.DelegateInfoLite.total_daily_return", false]], "total_size (bittensor.core.synapse.synapse attribute)": [[69, "bittensor.core.synapse.Synapse.total_size", false]], "total_stake (bittensor.core.chain_data.delegate_info.delegateinfo attribute)": [[4, "bittensor.core.chain_data.delegate_info.DelegateInfo.total_stake", false]], "total_stake (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.total_stake", false]], "total_stake (bittensor.core.chain_data.neuron_info.neuroninfo attribute)": [[11, "bittensor.core.chain_data.neuron_info.NeuronInfo.total_stake", false]], "total_stake (bittensor.core.chain_data.neuron_info_lite.neuroninfolite attribute)": [[12, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite.total_stake", false]], "total_stake (bittensor.core.chain_data.subnet_state.subnetstate attribute)": [[20, "bittensor.core.chain_data.subnet_state.SubnetState.total_stake", false]], "total_stake (bittensor.core.metagraph.nontorchmetagraph attribute)": [[53, "bittensor.core.metagraph.NonTorchMetagraph.total_stake", false]], "total_stake (bittensor.core.metagraph.torchmetagraph attribute)": [[53, "bittensor.core.metagraph.TorchMetagraph.total_stake", false]], "totalstake (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.TotalStake", false]], "tpb (bittensor.utils.registration.pow.cudasolver attribute)": [[91, "bittensor.utils.registration.pow.CUDASolver.tpb", false]], "trace (bittensor.utils.btlogging.format.btstreamformatter attribute)": [[79, "bittensor.utils.btlogging.format.BtStreamFormatter.trace", false]], "trace (bittensor.utils.btlogging.loggingmachine.loggingconfig attribute)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingConfig.trace", false]], "trace (bittensor.utils.btlogging.loggingmachine.loggingmachine attribute)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.Trace", false]], "trace() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.trace", false]], "trace() (in module bittensor.utils.easy_imports)": [[83, "bittensor.utils.easy_imports.trace", false]], "trace_level_num (in module bittensor.utils.btlogging.format)": [[79, "bittensor.utils.btlogging.format.TRACE_LEVEL_NUM", false]], "trace_log_format (in module bittensor.utils.btlogging.defines)": [[78, "bittensor.utils.btlogging.defines.TRACE_LOG_FORMAT", false]], "transfer (bittensor.core.subtensor_api.extrinsics.extrinsics attribute)": [[60, "bittensor.core.subtensor_api.extrinsics.Extrinsics.transfer", false]], "transfer() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.transfer", false]], "transfer() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.transfer", false]], "transfer_extrinsic() (in module bittensor.core.extrinsics.asyncex.transfer)": [[35, "bittensor.core.extrinsics.asyncex.transfer.transfer_extrinsic", false]], "transfer_extrinsic() (in module bittensor.core.extrinsics.transfer)": [[49, "bittensor.core.extrinsics.transfer.transfer_extrinsic", false]], "transfer_stake (bittensor.core.subtensor_api.extrinsics.extrinsics attribute)": [[60, "bittensor.core.subtensor_api.extrinsics.Extrinsics.transfer_stake", false]], "transfer_stake() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.transfer_stake", false]], "transfer_stake() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.transfer_stake", false]], "transfer_stake_extrinsic() (in module bittensor.core.extrinsics.asyncex.move_stake)": [[28, "bittensor.core.extrinsics.asyncex.move_stake.transfer_stake_extrinsic", false]], "transfer_stake_extrinsic() (in module bittensor.core.extrinsics.move_stake)": [[41, "bittensor.core.extrinsics.move_stake.transfer_stake_extrinsic", false]], "transfererror": [[25, "bittensor.core.errors.TransferError", false]], "trust (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.trust", false]], "trust (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.Trust", false]], "trust (bittensor.core.chain_data.neuron_info.neuroninfo attribute)": [[11, "bittensor.core.chain_data.neuron_info.NeuronInfo.trust", false]], "trust (bittensor.core.chain_data.neuron_info_lite.neuroninfolite attribute)": [[12, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite.trust", false]], "trust (bittensor.core.chain_data.subnet_state.subnetstate attribute)": [[20, "bittensor.core.chain_data.subnet_state.SubnetState.trust", false]], "trust (bittensor.core.metagraph.metagraphmixin attribute)": [[53, "bittensor.core.metagraph.MetagraphMixin.trust", false]], "trust (bittensor.core.metagraph.nontorchmetagraph attribute)": [[53, "bittensor.core.metagraph.NonTorchMetagraph.trust", false]], "trust (bittensor.core.metagraph.torchmetagraph attribute)": [[53, "bittensor.core.metagraph.TorchMetagraph.trust", false]], "ts (bittensor.core.metagraph.metagraphmixin property)": [[53, "bittensor.core.metagraph.MetagraphMixin.TS", false]], "tv (bittensor.core.metagraph.metagraphmixin property)": [[53, "bittensor.core.metagraph.MetagraphMixin.Tv", false]], "two_x64_concat() (in module bittensor.utils.substrate_utils.hasher)": [[94, "bittensor.utils.substrate_utils.hasher.two_x64_concat", false]], "tx_rate_limit (bittensor.core.subtensor_api.chain.chain attribute)": [[57, "bittensor.core.subtensor_api.chain.Chain.tx_rate_limit", false]], "tx_rate_limit() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.tx_rate_limit", false]], "tx_rate_limit() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.tx_rate_limit", false]], "txratelimitexceeded": [[25, "bittensor.core.errors.TxRateLimitExceeded", false]], "type (bittensor.core.types.paramwithtypes attribute)": [[73, "bittensor.core.types.ParamWithTypes.type", false]], "type_registry (in module bittensor.core.settings)": [[54, "bittensor.core.settings.TYPE_REGISTRY", false]], "u16_max (in module bittensor.utils)": [[85, "bittensor.utils.U16_MAX", false]], "u16_max (in module bittensor.utils.weight_utils)": [[98, "bittensor.utils.weight_utils.U16_MAX", false]], "u16_normalized_float() (in module bittensor.utils)": [[85, "bittensor.utils.u16_normalized_float", false]], "u32_max (in module bittensor.utils.weight_utils)": [[98, "bittensor.utils.weight_utils.U32_MAX", false]], "u64_max (in module bittensor.utils)": [[85, "bittensor.utils.U64_MAX", false]], "u64_normalized_float() (in module bittensor.utils)": [[85, "bittensor.utils.u64_normalized_float", false]], "uid (bittensor.core.chain_data.neuron_info.neuroninfo attribute)": [[11, "bittensor.core.chain_data.neuron_info.NeuronInfo.uid", false]], "uid (bittensor.core.chain_data.neuron_info_lite.neuroninfolite attribute)": [[12, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite.uid", false]], "uids (bittensor.core.metagraph.metagraphmixin attribute)": [[53, "bittensor.core.metagraph.MetagraphMixin.uids", false]], "uids (bittensor.core.metagraph.nontorchmetagraph attribute)": [[53, "bittensor.core.metagraph.NonTorchMetagraph.uids", false]], "uids (bittensor.core.metagraph.torchmetagraph attribute)": [[53, "bittensor.core.metagraph.TorchMetagraph.uids", false]], "unit (bittensor.utils.balance.balance attribute)": [[76, "bittensor.utils.balance.Balance.unit", false]], "unknownsynapseerror": [[25, "bittensor.core.errors.UnknownSynapseError", false]], "unlock_key() (in module bittensor.utils)": [[85, "bittensor.utils.unlock_key", false]], "unlockstatus (class in bittensor.utils)": [[85, "bittensor.utils.UnlockStatus", false]], "unstake (bittensor.core.subtensor_api.extrinsics.extrinsics attribute)": [[60, "bittensor.core.subtensor_api.extrinsics.Extrinsics.unstake", false]], "unstake (bittensor.core.subtensor_api.staking.staking attribute)": [[65, "bittensor.core.subtensor_api.staking.Staking.unstake", false]], "unstake() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.unstake", false]], "unstake() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.unstake", false]], "unstake_extrinsic() (in module bittensor.core.extrinsics.asyncex.unstaking)": [[36, "bittensor.core.extrinsics.asyncex.unstaking.unstake_extrinsic", false]], "unstake_extrinsic() (in module bittensor.core.extrinsics.unstaking)": [[50, "bittensor.core.extrinsics.unstaking.unstake_extrinsic", false]], "unstake_multiple (bittensor.core.subtensor_api.extrinsics.extrinsics attribute)": [[60, "bittensor.core.subtensor_api.extrinsics.Extrinsics.unstake_multiple", false]], "unstake_multiple (bittensor.core.subtensor_api.staking.staking attribute)": [[65, "bittensor.core.subtensor_api.staking.Staking.unstake_multiple", false]], "unstake_multiple() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.unstake_multiple", false]], "unstake_multiple() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.unstake_multiple", false]], "unstake_multiple_extrinsic() (in module bittensor.core.extrinsics.asyncex.unstaking)": [[36, "bittensor.core.extrinsics.asyncex.unstaking.unstake_multiple_extrinsic", false]], "unstake_multiple_extrinsic() (in module bittensor.core.extrinsics.unstaking)": [[50, "bittensor.core.extrinsics.unstaking.unstake_multiple_extrinsic", false]], "unstakeerror": [[25, "bittensor.core.errors.UnstakeError", false]], "update() (bittensor.utils.registration.pow.registrationstatisticslogger method)": [[91, "bittensor.utils.registration.pow.RegistrationStatisticsLogger.update", false]], "update() (bittensor.utils.registration.pow.status method)": [[91, "bittensor.utils.registration.pow.Status.update", false]], "update_curr_block() (in module bittensor.utils.registration.pow)": [[91, "bittensor.utils.registration.pow.update_curr_block", false]], "url (bittensor.core.chain_data.chain_identity.chainidentity attribute)": [[3, "bittensor.core.chain_data.chain_identity.ChainIdentity.url", false]], "use_torch (in module bittensor.utils)": [[85, "bittensor.utils.use_torch", false]], "use_torch() (in module bittensor.utils.registration.pow)": [[91, "bittensor.utils.registration.pow.use_torch", false]], "user_bittensor_dir (in module bittensor.core.settings)": [[54, "bittensor.core.settings.USER_BITTENSOR_DIR", false]], "usingspawnstartmethod (class in bittensor.utils.registration.pow)": [[91, "bittensor.utils.registration.pow.UsingSpawnStartMethod", false]], "uuid (bittensor.core.axon.axon attribute)": [[1, "bittensor.core.axon.Axon.uuid", false]], "uuid (bittensor.core.dendrite.dendritemixin attribute)": [[24, "bittensor.core.dendrite.DendriteMixin.uuid", false]], "uuid (bittensor.core.synapse.terminalinfo attribute)": [[69, "bittensor.core.synapse.TerminalInfo.uuid", false]], "v_7_2_0 (in module bittensor.core.axon)": [[1, "bittensor.core.axon.V_7_2_0", false]], "validate_chain_endpoint() (in module bittensor.utils)": [[85, "bittensor.utils.validate_chain_endpoint", false]], "validator_permit (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.validator_permit", false]], "validator_permit (bittensor.core.chain_data.neuron_info.neuroninfo attribute)": [[11, "bittensor.core.chain_data.neuron_info.NeuronInfo.validator_permit", false]], "validator_permit (bittensor.core.chain_data.neuron_info_lite.neuroninfolite attribute)": [[12, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite.validator_permit", false]], "validator_permit (bittensor.core.chain_data.subnet_state.subnetstate attribute)": [[20, "bittensor.core.chain_data.subnet_state.SubnetState.validator_permit", false]], "validator_permit (bittensor.core.metagraph.metagraphmixin attribute)": [[53, "bittensor.core.metagraph.MetagraphMixin.validator_permit", false]], "validator_permit (bittensor.core.metagraph.nontorchmetagraph attribute)": [[53, "bittensor.core.metagraph.NonTorchMetagraph.validator_permit", false]], "validator_permit (bittensor.core.metagraph.torchmetagraph attribute)": [[53, "bittensor.core.metagraph.TorchMetagraph.validator_permit", false]], "validator_permits (bittensor.core.chain_data.delegate_info.delegateinfobase attribute)": [[4, "bittensor.core.chain_data.delegate_info.DelegateInfoBase.validator_permits", false]], "validator_permits (bittensor.core.chain_data.delegate_info_lite.delegateinfolite attribute)": [[5, "bittensor.core.chain_data.delegate_info_lite.DelegateInfoLite.validator_permits", false]], "validator_trust (bittensor.core.chain_data.neuron_info.neuroninfo attribute)": [[11, "bittensor.core.chain_data.neuron_info.NeuronInfo.validator_trust", false]], "validator_trust (bittensor.core.chain_data.neuron_info_lite.neuroninfolite attribute)": [[12, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite.validator_trust", false]], "validator_trust (bittensor.core.metagraph.metagraphmixin attribute)": [[53, "bittensor.core.metagraph.MetagraphMixin.validator_trust", false]], "validator_trust (bittensor.core.metagraph.nontorchmetagraph attribute)": [[53, "bittensor.core.metagraph.NonTorchMetagraph.validator_trust", false]], "validator_trust (bittensor.core.metagraph.torchmetagraph attribute)": [[53, "bittensor.core.metagraph.TorchMetagraph.validator_trust", false]], "validatorbatchsize (bittensor.utils.mock.subtensor_mock.mocksubtensorstate attribute)": [[87, "bittensor.utils.mock.subtensor_mock.MockSubtensorState.ValidatorBatchSize", false]], "validatorpermit (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.ValidatorPermit", false]], "value (bittensor.utils.mock.subtensor_mock.mocksubtensorvalue attribute)": [[87, "bittensor.utils.mock.subtensor_mock.MockSubtensorValue.value", false]], "value_scale_type (bittensor.utils.substrate_utils.storage.storagekey attribute)": [[96, "bittensor.utils.substrate_utils.storage.StorageKey.value_scale_type", false]], "verify() (bittensor.core.axon.axonmiddleware method)": [[1, "bittensor.core.axon.AxonMiddleware.verify", false]], "verify_body_integrity() (bittensor.core.axon.axon method)": [[1, "bittensor.core.axon.Axon.verify_body_integrity", false]], "verify_fns (bittensor.core.axon.axon attribute)": [[1, "bittensor.core.axon.Axon.verify_fns", false]], "version (bittensor.core.chain_data.axon_info.axoninfo attribute)": [[2, "bittensor.core.chain_data.axon_info.AxonInfo.version", false]], "version (bittensor.core.chain_data.prometheus_info.prometheusinfo attribute)": [[13, "bittensor.core.chain_data.prometheus_info.PrometheusInfo.version", false]], "version (bittensor.core.metagraph.metagraphmixin attribute)": [[53, "bittensor.core.metagraph.MetagraphMixin.version", false]], "version (bittensor.core.metagraph.nontorchmetagraph attribute)": [[53, "bittensor.core.metagraph.NonTorchMetagraph.version", false]], "version (bittensor.core.metagraph.torchmetagraph attribute)": [[53, "bittensor.core.metagraph.TorchMetagraph.version", false]], "version (bittensor.core.synapse.terminalinfo attribute)": [[69, "bittensor.core.synapse.TerminalInfo.version", false]], "version (bittensor.core.types.axonservecallparams attribute)": [[73, "bittensor.core.types.AxonServeCallParams.version", false]], "version (bittensor.core.types.prometheusservecallparams attribute)": [[73, "bittensor.core.types.PrometheusServeCallParams.version", false]], "version (bittensor.utils.mock.subtensor_mock.axoninfodict attribute)": [[87, "bittensor.utils.mock.subtensor_mock.AxonInfoDict.version", false]], "version (bittensor.utils.mock.subtensor_mock.prometheusinfodict attribute)": [[87, "bittensor.utils.mock.subtensor_mock.PrometheusInfoDict.version", false]], "version_as_int (in module bittensor.core.settings)": [[54, "bittensor.core.settings.version_as_int", false]], "version_check_threshold (in module bittensor.utils.version)": [[97, "bittensor.utils.version.VERSION_CHECK_THRESHOLD", false]], "version_checking (in module bittensor.utils)": [[85, "bittensor.utils.version_checking", false]], "version_checking() (in module bittensor.utils.version)": [[97, "bittensor.utils.version.version_checking", false]], "version_split (in module bittensor.core.settings)": [[54, "bittensor.core.settings.version_split", false]], "versioncheckerror": [[97, "bittensor.utils.version.VersionCheckError", false]], "versioncheckerror (in module bittensor.utils)": [[85, "bittensor.utils.VersionCheckError", false]], "w (bittensor.core.metagraph.metagraphmixin property)": [[53, "bittensor.core.metagraph.MetagraphMixin.W", false]], "wait_for_block (bittensor.core.subtensor_api.subtensorapi attribute)": [[61, "bittensor.core.subtensor_api.SubtensorApi.wait_for_block", false]], "wait_for_block() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.wait_for_block", false]], "wait_for_block() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.wait_for_block", false]], "wait_reveal_and_decrypt() (in module bittensor.core.timelock)": [[72, "bittensor.core.timelock.wait_reveal_and_decrypt", false]], "wallet (bittensor.core.axon.axon attribute)": [[1, "bittensor.core.axon.Axon.wallet", false]], "wallet (bittensor.utils.subnets.subnetsapi attribute)": [[93, "bittensor.utils.subnets.SubnetsAPI.wallet", false]], "wallet (in module bittensor.utils.easy_imports)": [[83, "bittensor.utils.easy_imports.wallet", false]], "wallets (bittensor.core.subtensor_api.subtensorapi property)": [[61, "bittensor.core.subtensor_api.SubtensorApi.wallets", false]], "wallets (class in bittensor.core.subtensor_api.wallets)": [[68, "bittensor.core.subtensor_api.wallets.Wallets", false]], "wallets_dir (in module bittensor.core.settings)": [[54, "bittensor.core.settings.WALLETS_DIR", false]], "warning (bittensor.utils.btlogging.loggingmachine.loggingmachine attribute)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.Warning", false]], "warning() (bittensor.utils.btlogging.console.bittensorconsole method)": [[77, "bittensor.utils.btlogging.console.BittensorConsole.warning", false]], "warning() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[82, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.warning", false]], "warning() (in module bittensor.utils.easy_imports)": [[83, "bittensor.utils.easy_imports.warning", false]], "weightcommitinfo (class in bittensor.core.chain_data.weight_commit_info)": [[22, "bittensor.core.chain_data.weight_commit_info.WeightCommitInfo", false]], "weights (bittensor.core.chain_data.neuron_info.neuroninfo attribute)": [[11, "bittensor.core.chain_data.neuron_info.NeuronInfo.weights", false]], "weights (bittensor.core.metagraph.metagraphmixin attribute)": [[53, "bittensor.core.metagraph.MetagraphMixin.weights", false]], "weights (bittensor.core.metagraph.nontorchmetagraph attribute)": [[53, "bittensor.core.metagraph.NonTorchMetagraph.weights", false]], "weights (bittensor.core.metagraph.torchmetagraph attribute)": [[53, "bittensor.core.metagraph.TorchMetagraph.weights", false]], "weights (bittensor.core.subtensor_api.subnets.subnets attribute)": [[66, "bittensor.core.subtensor_api.subnets.Subnets.weights", false]], "weights() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.weights", false]], "weights() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.weights", false]], "weights_rate_limit (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.weights_rate_limit", false]], "weights_rate_limit (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.weights_rate_limit", false]], "weights_rate_limit (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[17, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.weights_rate_limit", false]], "weights_rate_limit (bittensor.core.subtensor_api.subnets.subnets attribute)": [[66, "bittensor.core.subtensor_api.subnets.Subnets.weights_rate_limit", false]], "weights_rate_limit() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.weights_rate_limit", false]], "weights_rate_limit() (bittensor.core.subtensor.subtensor method)": [[56, "bittensor.core.subtensor.Subtensor.weights_rate_limit", false]], "weights_version (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.weights_version", false]], "weights_version (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[10, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.weights_version", false]], "weights_version (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[17, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.weights_version", false]], "weightsratelimit (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.WeightsRateLimit", false]], "weightsversion (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[10, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.WeightsVersion", false]], "xxh128() (in module bittensor.utils.substrate_utils.hasher)": [[94, "bittensor.utils.substrate_utils.hasher.xxh128", false]], "xxh64() (in module bittensor.utils.substrate_utils.hasher)": [[94, "bittensor.utils.substrate_utils.hasher.xxh64", false]]}, "objects": {"": [[74, 0, 0, "-", "bittensor"]], "bittensor": [[52, 0, 0, "-", "core"], [85, 0, 0, "-", "utils"]], "bittensor.core": [[0, 0, 0, "-", "async_subtensor"], [1, 0, 0, "-", "axon"], [7, 0, 0, "-", "chain_data"], [23, 0, 0, "-", "config"], [24, 0, 0, "-", "dendrite"], [25, 0, 0, "-", "errors"], [40, 0, 0, "-", "extrinsics"], [53, 0, 0, "-", "metagraph"], [54, 0, 0, "-", "settings"], [55, 0, 0, "-", "stream"], [56, 0, 0, "-", "subtensor"], [61, 0, 0, "-", "subtensor_api"], [69, 0, 0, "-", "synapse"], [70, 0, 0, "-", "tensor"], [71, 0, 0, "-", "threadpool"], [72, 0, 0, "-", "timelock"], [73, 0, 0, "-", "types"]], "bittensor.core.async_subtensor": [[0, 1, 1, "", "AsyncSubtensor"], [0, 5, 1, "", "get_async_subtensor"]], "bittensor.core.async_subtensor.AsyncSubtensor": [[0, 2, 1, "", "add_stake"], [0, 2, 1, "", "add_stake_multiple"], [0, 2, 1, "", "all_subnets"], [0, 3, 1, "", "block"], [0, 2, 1, "", "blocks_since_last_step"], [0, 2, 1, "", "blocks_since_last_update"], [0, 2, 1, "", "bonds"], [0, 2, 1, "", "burned_register"], [0, 2, 1, "", "close"], [0, 2, 1, "", "commit"], [0, 2, 1, "", "commit_reveal_enabled"], [0, 2, 1, "", "commit_weights"], [0, 2, 1, "", "determine_block_hash"], [0, 2, 1, "", "difficulty"], [0, 2, 1, "", "does_hotkey_exist"], [0, 2, 1, "", "encode_params"], [0, 2, 1, "", "filter_netuids_by_registered_hotkeys"], [0, 2, 1, "", "get_all_commitments"], [0, 2, 1, "", "get_all_metagraphs_info"], [0, 2, 1, "", "get_all_neuron_certificates"], [0, 2, 1, "", "get_all_revealed_commitments"], [0, 2, 1, "", "get_all_subnets_info"], [0, 2, 1, "", "get_balance"], [0, 2, 1, "", "get_balances"], [0, 2, 1, "", "get_block_hash"], [0, 2, 1, "", "get_children"], [0, 2, 1, "", "get_children_pending"], [0, 2, 1, "", "get_commitment"], [0, 2, 1, "", "get_current_block"], [0, 2, 1, "", "get_current_weight_commit_info"], [0, 2, 1, "", "get_delegate_by_hotkey"], [0, 2, 1, "", "get_delegate_identities"], [0, 2, 1, "", "get_delegate_take"], [0, 2, 1, "", "get_delegated"], [0, 2, 1, "", "get_delegates"], [0, 2, 1, "", "get_existential_deposit"], [0, 2, 1, "", "get_hotkey_owner"], [0, 4, 1, "", "get_hotkey_stake"], [0, 2, 1, "", "get_hyperparameter"], [0, 2, 1, "", "get_metagraph_info"], [0, 2, 1, "", "get_minimum_required_stake"], [0, 2, 1, "", "get_netuids_for_hotkey"], [0, 2, 1, "", "get_neuron_certificate"], [0, 2, 1, "", "get_neuron_for_pubkey_and_subnet"], [0, 2, 1, "", "get_next_epoch_start_block"], [0, 2, 1, "", "get_owned_hotkeys"], [0, 2, 1, "", "get_revealed_commitment"], [0, 2, 1, "", "get_revealed_commitment_by_hotkey"], [0, 2, 1, "", "get_stake"], [0, 2, 1, "", "get_stake_add_fee"], [0, 2, 1, "", "get_stake_for_coldkey"], [0, 2, 1, "", "get_stake_for_coldkey_and_hotkey"], [0, 2, 1, "", "get_stake_for_hotkey"], [0, 4, 1, "", "get_stake_info_for_coldkey"], [0, 2, 1, "", "get_stake_movement_fee"], [0, 2, 1, "", "get_subnet_burn_cost"], [0, 2, 1, "", "get_subnet_hyperparameters"], [0, 2, 1, "", "get_subnet_owner_hotkey"], [0, 2, 1, "", "get_subnet_reveal_period_epochs"], [0, 2, 1, "", "get_subnet_validator_permits"], [0, 2, 1, "", "get_subnets"], [0, 2, 1, "", "get_timestamp"], [0, 2, 1, "", "get_total_subnets"], [0, 2, 1, "", "get_transfer_fee"], [0, 2, 1, "", "get_uid_for_hotkey_on_subnet"], [0, 2, 1, "", "get_unstake_fee"], [0, 2, 1, "", "get_vote_data"], [0, 2, 1, "", "immunity_period"], [0, 2, 1, "", "initialize"], [0, 2, 1, "", "is_fast_blocks"], [0, 2, 1, "", "is_hotkey_delegate"], [0, 2, 1, "", "is_hotkey_registered"], [0, 2, 1, "", "is_hotkey_registered_any"], [0, 2, 1, "", "is_hotkey_registered_on_subnet"], [0, 2, 1, "", "is_subnet_active"], [0, 2, 1, "", "last_drand_round"], [0, 4, 1, "", "log_verbose"], [0, 2, 1, "", "max_weight_limit"], [0, 2, 1, "", "metagraph"], [0, 2, 1, "", "min_allowed_weights"], [0, 2, 1, "", "move_stake"], [0, 2, 1, "", "neuron_for_uid"], [0, 2, 1, "", "neurons"], [0, 2, 1, "", "neurons_lite"], [0, 2, 1, "", "query_constant"], [0, 2, 1, "", "query_identity"], [0, 2, 1, "", "query_map"], [0, 2, 1, "", "query_map_subtensor"], [0, 2, 1, "", "query_module"], [0, 2, 1, "", "query_runtime_api"], [0, 2, 1, "", "query_subtensor"], [0, 2, 1, "", "recycle"], [0, 2, 1, "", "register"], [0, 2, 1, "", "register_subnet"], [0, 2, 1, "", "reveal_weights"], [0, 2, 1, "", "root_register"], [0, 2, 1, "", "root_set_weights"], [0, 2, 1, "", "serve_axon"], [0, 2, 1, "", "set_children"], [0, 4, 1, "", "set_commitment"], [0, 2, 1, "", "set_delegate_take"], [0, 2, 1, "", "set_reveal_commitment"], [0, 2, 1, "", "set_subnet_identity"], [0, 2, 1, "", "set_weights"], [0, 2, 1, "", "sign_and_send_extrinsic"], [0, 2, 1, "", "start_call"], [0, 2, 1, "", "state_call"], [0, 2, 1, "", "subnet"], [0, 2, 1, "", "subnet_exists"], [0, 2, 1, "", "subnetwork_n"], [0, 4, 1, "", "substrate"], [0, 2, 1, "", "swap_stake"], [0, 2, 1, "", "tempo"], [0, 2, 1, "", "transfer"], [0, 2, 1, "", "transfer_stake"], [0, 2, 1, "", "tx_rate_limit"], [0, 2, 1, "", "unstake"], [0, 2, 1, "", "unstake_multiple"], [0, 2, 1, "", "wait_for_block"], [0, 2, 1, "", "weights"], [0, 2, 1, "", "weights_rate_limit"]], "bittensor.core.axon": [[1, 1, 1, "", "Axon"], [1, 1, 1, "", "AxonMiddleware"], [1, 1, 1, "", "FastAPIThreadedServer"], [1, 6, 1, "", "V_7_2_0"], [1, 5, 1, "", "create_error_response"], [1, 5, 1, "", "log_and_handle_error"]], "bittensor.core.axon.Axon": [[1, 2, 1, "", "add_args"], [1, 4, 1, "", "app"], [1, 2, 1, "", "attach"], [1, 4, 1, "", "blacklist_fns"], [1, 2, 1, "", "check_config"], [1, 2, 1, "", "config"], [1, 2, 1, "", "default_verify"], [1, 4, 1, "", "external_ip"], [1, 4, 1, "", "external_port"], [1, 4, 1, "", "fast_config"], [1, 4, 1, "", "fast_server"], [1, 4, 1, "", "forward_class_types"], [1, 4, 1, "", "forward_fns"], [1, 4, 1, "", "full_address"], [1, 2, 1, "", "help"], [1, 2, 1, "", "info"], [1, 4, 1, "", "ip"], [1, 4, 1, "", "middleware_cls"], [1, 4, 1, "", "nonces"], [1, 4, 1, "", "port"], [1, 4, 1, "", "priority_fns"], [1, 4, 1, "", "router"], [1, 2, 1, "", "serve"], [1, 2, 1, "", "start"], [1, 4, 1, "", "started"], [1, 2, 1, "", "stop"], [1, 4, 1, "", "thread_pool"], [1, 2, 1, "", "to_string"], [1, 4, 1, "", "uuid"], [1, 2, 1, "", "verify_body_integrity"], [1, 4, 1, "", "verify_fns"], [1, 4, 1, "", "wallet"]], "bittensor.core.axon.AxonMiddleware": [[1, 4, 1, "", "axon"], [1, 2, 1, "", "blacklist"], [1, 2, 1, "", "dispatch"], [1, 2, 1, "", "preprocess"], [1, 2, 1, "", "priority"], [1, 2, 1, "", "run"], [1, 2, 1, "", "synapse_to_response"], [1, 2, 1, "", "verify"]], "bittensor.core.axon.FastAPIThreadedServer": [[1, 2, 1, "", "install_signal_handlers"], [1, 4, 1, "", "is_running"], [1, 2, 1, "", "run_in_thread"], [1, 4, 1, "", "should_exit"], [1, 2, 1, "", "start"], [1, 2, 1, "", "stop"]], "bittensor.core.chain_data": [[2, 0, 0, "-", "axon_info"], [3, 0, 0, "-", "chain_identity"], [4, 0, 0, "-", "delegate_info"], [5, 0, 0, "-", "delegate_info_lite"], [6, 0, 0, "-", "dynamic_info"], [8, 0, 0, "-", "info_base"], [9, 0, 0, "-", "ip_info"], [10, 0, 0, "-", "metagraph_info"], [11, 0, 0, "-", "neuron_info"], [12, 0, 0, "-", "neuron_info_lite"], [13, 0, 0, "-", "prometheus_info"], [14, 0, 0, "-", "proposal_vote_data"], [15, 0, 0, "-", "scheduled_coldkey_swap_info"], [16, 0, 0, "-", "stake_info"], [17, 0, 0, "-", "subnet_hyperparameters"], [18, 0, 0, "-", "subnet_identity"], [19, 0, 0, "-", "subnet_info"], [20, 0, 0, "-", "subnet_state"], [21, 0, 0, "-", "utils"], [22, 0, 0, "-", "weight_commit_info"]], "bittensor.core.chain_data.axon_info": [[2, 1, 1, "", "AxonInfo"]], "bittensor.core.chain_data.axon_info.AxonInfo": [[2, 4, 1, "", "coldkey"], [2, 2, 1, "", "from_neuron_info"], [2, 2, 1, "", "from_parameter_dict"], [2, 2, 1, "", "from_string"], [2, 4, 1, "", "hotkey"], [2, 4, 1, "", "ip"], [2, 2, 1, "", "ip_str"], [2, 4, 1, "", "ip_type"], [2, 3, 1, "", "is_serving"], [2, 4, 1, "", "placeholder1"], [2, 4, 1, "", "placeholder2"], [2, 4, 1, "", "port"], [2, 4, 1, "", "protocol"], [2, 2, 1, "", "to_parameter_dict"], [2, 2, 1, "", "to_string"], [2, 4, 1, "", "version"]], "bittensor.core.chain_data.chain_identity": [[3, 1, 1, "", "ChainIdentity"]], "bittensor.core.chain_data.chain_identity.ChainIdentity": [[3, 4, 1, "", "additional"], [3, 4, 1, "", "description"], [3, 4, 1, "", "discord"], [3, 4, 1, "", "github"], [3, 4, 1, "", "image"], [3, 4, 1, "", "name"], [3, 4, 1, "", "url"]], "bittensor.core.chain_data.delegate_info": [[4, 1, 1, "", "DelegateInfo"], [4, 1, 1, "", "DelegateInfoBase"], [4, 1, 1, "", "DelegatedInfo"]], "bittensor.core.chain_data.delegate_info.DelegateInfo": [[4, 4, 1, "", "nominators"], [4, 4, 1, "", "total_stake"]], "bittensor.core.chain_data.delegate_info.DelegateInfoBase": [[4, 4, 1, "", "hotkey_ss58"], [4, 4, 1, "", "owner_ss58"], [4, 4, 1, "", "registrations"], [4, 4, 1, "", "return_per_1000"], [4, 4, 1, "", "take"], [4, 4, 1, "", "total_daily_return"], [4, 4, 1, "", "validator_permits"]], "bittensor.core.chain_data.delegate_info.DelegatedInfo": [[4, 4, 1, "", "netuid"], [4, 4, 1, "", "stake"]], "bittensor.core.chain_data.delegate_info_lite": [[5, 1, 1, "", "DelegateInfoLite"]], "bittensor.core.chain_data.delegate_info_lite.DelegateInfoLite": [[5, 4, 1, "", "delegate_ss58"], [5, 4, 1, "", "nominators"], [5, 4, 1, "", "owner_ss58"], [5, 4, 1, "", "registrations"], [5, 4, 1, "", "return_per_1000"], [5, 4, 1, "", "take"], [5, 4, 1, "", "total_daily_return"], [5, 4, 1, "", "validator_permits"]], "bittensor.core.chain_data.dynamic_info": [[6, 1, 1, "", "DynamicInfo"]], "bittensor.core.chain_data.dynamic_info.DynamicInfo": [[6, 4, 1, "", "alpha_in"], [6, 4, 1, "", "alpha_in_emission"], [6, 4, 1, "", "alpha_out"], [6, 4, 1, "", "alpha_out_emission"], [6, 4, 1, "", "alpha_slippage"], [6, 2, 1, "", "alpha_to_tao"], [6, 2, 1, "", "alpha_to_tao_with_slippage"], [6, 4, 1, "", "blocks_since_last_step"], [6, 4, 1, "", "emission"], [6, 4, 1, "", "is_dynamic"], [6, 4, 1, "", "k"], [6, 4, 1, "", "last_step"], [6, 4, 1, "", "moving_price"], [6, 4, 1, "", "netuid"], [6, 4, 1, "", "network_registered_at"], [6, 4, 1, "", "owner_coldkey"], [6, 4, 1, "", "owner_hotkey"], [6, 4, 1, "", "pending_alpha_emission"], [6, 4, 1, "", "pending_root_emission"], [6, 4, 1, "", "price"], [6, 4, 1, "", "slippage"], [6, 4, 1, "", "subnet_identity"], [6, 4, 1, "", "subnet_name"], [6, 4, 1, "", "subnet_volume"], [6, 4, 1, "", "symbol"], [6, 4, 1, "", "tao_in"], [6, 4, 1, "", "tao_in_emission"], [6, 4, 1, "", "tao_slippage"], [6, 2, 1, "", "tao_to_alpha"], [6, 2, 1, "", "tao_to_alpha_with_slippage"], [6, 4, 1, "", "tempo"]], "bittensor.core.chain_data.info_base": [[8, 1, 1, "", "InfoBase"], [8, 6, 1, "", "T"]], "bittensor.core.chain_data.info_base.InfoBase": [[8, 2, 1, "", "from_dict"], [8, 2, 1, "", "list_from_dicts"]], "bittensor.core.chain_data.ip_info": [[9, 1, 1, "", "IPInfo"]], "bittensor.core.chain_data.ip_info.IPInfo": [[9, 2, 1, "", "encode"], [9, 2, 1, "", "from_parameter_dict"], [9, 4, 1, "", "ip"], [9, 4, 1, "", "ip_type"], [9, 4, 1, "", "protocol"], [9, 2, 1, "", "to_parameter_dict"]], "bittensor.core.chain_data.metagraph_info": [[10, 1, 1, "", "MetagraphInfo"], [10, 1, 1, "", "MetagraphInfoEmissions"], [10, 1, 1, "", "MetagraphInfoParams"], [10, 1, 1, "", "MetagraphInfoPool"], [10, 1, 1, "", "SelectiveMetagraphIndex"], [10, 5, 1, "", "process_nested"]], "bittensor.core.chain_data.metagraph_info.MetagraphInfo": [[10, 4, 1, "", "active"], [10, 4, 1, "", "activity_cutoff"], [10, 4, 1, "", "adjustment_alpha"], [10, 4, 1, "", "adjustment_interval"], [10, 4, 1, "", "alpha_dividends_per_hotkey"], [10, 4, 1, "", "alpha_high"], [10, 4, 1, "", "alpha_in"], [10, 4, 1, "", "alpha_in_emission"], [10, 4, 1, "", "alpha_low"], [10, 4, 1, "", "alpha_out"], [10, 4, 1, "", "alpha_out_emission"], [10, 4, 1, "", "alpha_stake"], [10, 4, 1, "", "axons"], [10, 4, 1, "", "block"], [10, 4, 1, "", "block_at_registration"], [10, 4, 1, "", "blocks_since_last_step"], [10, 4, 1, "", "bonds_moving_avg"], [10, 4, 1, "", "burn"], [10, 4, 1, "", "coldkeys"], [10, 4, 1, "", "commit_reveal_period"], [10, 4, 1, "", "commit_reveal_weights_enabled"], [10, 4, 1, "", "consensus"], [10, 4, 1, "", "difficulty"], [10, 4, 1, "", "dividends"], [10, 4, 1, "", "emission"], [10, 4, 1, "", "hotkeys"], [10, 4, 1, "", "identities"], [10, 4, 1, "", "identity"], [10, 4, 1, "", "immunity_period"], [10, 4, 1, "", "incentives"], [10, 4, 1, "", "kappa"], [10, 4, 1, "", "last_step"], [10, 4, 1, "", "last_update"], [10, 4, 1, "", "liquid_alpha_enabled"], [10, 4, 1, "", "max_burn"], [10, 4, 1, "", "max_difficulty"], [10, 4, 1, "", "max_regs_per_block"], [10, 4, 1, "", "max_uids"], [10, 4, 1, "", "max_validators"], [10, 4, 1, "", "max_weights_limit"], [10, 4, 1, "", "min_allowed_weights"], [10, 4, 1, "", "min_burn"], [10, 4, 1, "", "min_difficulty"], [10, 4, 1, "", "moving_price"], [10, 4, 1, "", "name"], [10, 4, 1, "", "netuid"], [10, 4, 1, "", "network_registered_at"], [10, 4, 1, "", "num_uids"], [10, 4, 1, "", "owner_coldkey"], [10, 4, 1, "", "owner_hotkey"], [10, 4, 1, "", "pending_alpha_emission"], [10, 4, 1, "", "pending_root_emission"], [10, 4, 1, "", "pow_registration_allowed"], [10, 4, 1, "", "pruning_score"], [10, 4, 1, "", "rank"], [10, 4, 1, "", "registration_allowed"], [10, 4, 1, "", "rho"], [10, 4, 1, "", "serving_rate_limit"], [10, 4, 1, "", "subnet_emission"], [10, 4, 1, "", "subnet_volume"], [10, 4, 1, "", "symbol"], [10, 4, 1, "", "tao_dividends_per_hotkey"], [10, 4, 1, "", "tao_in"], [10, 4, 1, "", "tao_in_emission"], [10, 4, 1, "", "tao_stake"], [10, 4, 1, "", "target_regs_per_interval"], [10, 4, 1, "", "tempo"], [10, 4, 1, "", "total_stake"], [10, 4, 1, "", "trust"], [10, 4, 1, "", "validator_permit"], [10, 4, 1, "", "weights_rate_limit"], [10, 4, 1, "", "weights_version"]], "bittensor.core.chain_data.metagraph_info.MetagraphInfoEmissions": [[10, 4, 1, "", "alpha_in_emission"], [10, 4, 1, "", "alpha_out_emission"], [10, 4, 1, "", "pending_alpha_emission"], [10, 4, 1, "", "pending_root_emission"], [10, 4, 1, "", "subnet_emission"], [10, 4, 1, "", "tao_in_emission"]], "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams": [[10, 4, 1, "", "activity_cutoff"], [10, 4, 1, "", "adjustment_alpha"], [10, 4, 1, "", "adjustment_interval"], [10, 4, 1, "", "alpha_high"], [10, 4, 1, "", "alpha_low"], [10, 4, 1, "", "bonds_moving_avg"], [10, 4, 1, "", "burn"], [10, 4, 1, "", "commit_reveal_period"], [10, 4, 1, "", "commit_reveal_weights_enabled"], [10, 4, 1, "", "difficulty"], [10, 4, 1, "", "immunity_period"], [10, 4, 1, "", "kappa"], [10, 4, 1, "", "liquid_alpha_enabled"], [10, 4, 1, "", "max_burn"], [10, 4, 1, "", "max_difficulty"], [10, 4, 1, "", "max_regs_per_block"], [10, 4, 1, "", "max_validators"], [10, 4, 1, "", "max_weights_limit"], [10, 4, 1, "", "min_allowed_weights"], [10, 4, 1, "", "min_burn"], [10, 4, 1, "", "min_difficulty"], [10, 4, 1, "", "pow_registration_allowed"], [10, 4, 1, "", "registration_allowed"], [10, 4, 1, "", "rho"], [10, 4, 1, "", "serving_rate_limit"], [10, 4, 1, "", "target_regs_per_interval"], [10, 4, 1, "", "tempo"], [10, 4, 1, "", "weights_rate_limit"], [10, 4, 1, "", "weights_version"]], "bittensor.core.chain_data.metagraph_info.MetagraphInfoPool": [[10, 4, 1, "", "alpha_in"], [10, 4, 1, "", "alpha_out"], [10, 4, 1, "", "moving_price"], [10, 4, 1, "", "subnet_volume"], [10, 4, 1, "", "tao_in"]], "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex": [[10, 4, 1, "", "Active"], [10, 4, 1, "", "ActivityCutoff"], [10, 4, 1, "", "AdjustmentAlpha"], [10, 4, 1, "", "AdjustmentInterval"], [10, 4, 1, "", "AlphaDividendsPerHotkey"], [10, 4, 1, "", "AlphaHigh"], [10, 4, 1, "", "AlphaIn"], [10, 4, 1, "", "AlphaInEmission"], [10, 4, 1, "", "AlphaLow"], [10, 4, 1, "", "AlphaOut"], [10, 4, 1, "", "AlphaOutEmission"], [10, 4, 1, "", "AlphaStake"], [10, 4, 1, "", "Axons"], [10, 4, 1, "", "Block"], [10, 4, 1, "", "BlockAtRegistration"], [10, 4, 1, "", "BlocksSinceLastStep"], [10, 4, 1, "", "BondsMovingAvg"], [10, 4, 1, "", "Burn"], [10, 4, 1, "", "Coldkeys"], [10, 4, 1, "", "CommitRevealPeriod"], [10, 4, 1, "", "CommitRevealWeightsEnabled"], [10, 4, 1, "", "Consensus"], [10, 4, 1, "", "Difficulty"], [10, 4, 1, "", "Dividends"], [10, 4, 1, "", "Emission"], [10, 4, 1, "", "Hotkeys"], [10, 4, 1, "", "Identities"], [10, 4, 1, "", "Identity"], [10, 4, 1, "", "ImmunityPeriod"], [10, 4, 1, "", "Incentives"], [10, 4, 1, "", "Kappa"], [10, 4, 1, "", "LastStep"], [10, 4, 1, "", "LastUpdate"], [10, 4, 1, "", "LiquidAlphaEnabled"], [10, 4, 1, "", "MaxBurn"], [10, 4, 1, "", "MaxDifficulty"], [10, 4, 1, "", "MaxRegsPerBlock"], [10, 4, 1, "", "MaxUids"], [10, 4, 1, "", "MaxValidators"], [10, 4, 1, "", "MaxWeightsLimit"], [10, 4, 1, "", "MinAllowedWeights"], [10, 4, 1, "", "MinBurn"], [10, 4, 1, "", "MinDifficulty"], [10, 4, 1, "", "MovingPrice"], [10, 4, 1, "", "Name"], [10, 4, 1, "", "Netuid"], [10, 4, 1, "", "NetworkRegisteredAt"], [10, 4, 1, "", "NumUids"], [10, 4, 1, "", "OwnerColdkey"], [10, 4, 1, "", "OwnerHotkey"], [10, 4, 1, "", "PendingAlphaEmission"], [10, 4, 1, "", "PendingRootEmission"], [10, 4, 1, "", "PowRegistrationAllowed"], [10, 4, 1, "", "PruningScore"], [10, 4, 1, "", "Rank"], [10, 4, 1, "", "RegistrationAllowed"], [10, 4, 1, "", "Rho"], [10, 4, 1, "", "ServingRateLimit"], [10, 4, 1, "", "SubnetEmission"], [10, 4, 1, "", "SubnetVolume"], [10, 4, 1, "", "Symbol"], [10, 4, 1, "", "TaoDividendsPerHotkey"], [10, 4, 1, "", "TaoIn"], [10, 4, 1, "", "TaoInEmission"], [10, 4, 1, "", "TaoStake"], [10, 4, 1, "", "TargetRegsPerInterval"], [10, 4, 1, "", "Tempo"], [10, 4, 1, "", "TotalStake"], [10, 4, 1, "", "Trust"], [10, 4, 1, "", "ValidatorPermit"], [10, 4, 1, "", "WeightsRateLimit"], [10, 4, 1, "", "WeightsVersion"], [10, 2, 1, "", "all_indices"]], "bittensor.core.chain_data.neuron_info": [[11, 1, 1, "", "NeuronInfo"]], "bittensor.core.chain_data.neuron_info.NeuronInfo": [[11, 4, 1, "", "active"], [11, 4, 1, "", "axon_info"], [11, 4, 1, "", "bonds"], [11, 4, 1, "", "coldkey"], [11, 4, 1, "", "consensus"], [11, 4, 1, "", "dividends"], [11, 4, 1, "", "emission"], [11, 2, 1, "", "from_weights_bonds_and_neuron_lite"], [11, 2, 1, "", "get_null_neuron"], [11, 4, 1, "", "hotkey"], [11, 4, 1, "", "incentive"], [11, 4, 1, "", "is_null"], [11, 4, 1, "", "last_update"], [11, 4, 1, "", "netuid"], [11, 4, 1, "", "prometheus_info"], [11, 4, 1, "", "pruning_score"], [11, 4, 1, "", "rank"], [11, 4, 1, "", "stake"], [11, 4, 1, "", "stake_dict"], [11, 4, 1, "", "total_stake"], [11, 4, 1, "", "trust"], [11, 4, 1, "", "uid"], [11, 4, 1, "", "validator_permit"], [11, 4, 1, "", "validator_trust"], [11, 4, 1, "", "weights"]], "bittensor.core.chain_data.neuron_info_lite": [[12, 1, 1, "", "NeuronInfoLite"]], "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite": [[12, 4, 1, "", "active"], [12, 4, 1, "", "axon_info"], [12, 4, 1, "", "coldkey"], [12, 4, 1, "", "consensus"], [12, 4, 1, "", "dividends"], [12, 4, 1, "", "emission"], [12, 2, 1, "id0", "get_null_neuron"], [12, 4, 1, "", "hotkey"], [12, 4, 1, "", "incentive"], [12, 4, 1, "", "is_null"], [12, 4, 1, "", "last_update"], [12, 2, 1, "", "list_from_vec_u8"], [12, 4, 1, "", "netuid"], [12, 4, 1, "", "prometheus_info"], [12, 4, 1, "", "pruning_score"], [12, 4, 1, "", "rank"], [12, 4, 1, "", "stake"], [12, 4, 1, "", "stake_dict"], [12, 4, 1, "", "total_stake"], [12, 4, 1, "", "trust"], [12, 4, 1, "", "uid"], [12, 4, 1, "", "validator_permit"], [12, 4, 1, "", "validator_trust"]], "bittensor.core.chain_data.prometheus_info": [[13, 1, 1, "", "PrometheusInfo"]], "bittensor.core.chain_data.prometheus_info.PrometheusInfo": [[13, 4, 1, "", "block"], [13, 4, 1, "", "ip"], [13, 4, 1, "", "ip_type"], [13, 4, 1, "", "port"], [13, 4, 1, "", "version"]], "bittensor.core.chain_data.proposal_vote_data": [[14, 1, 1, "", "ProposalVoteData"]], "bittensor.core.chain_data.proposal_vote_data.ProposalVoteData": [[14, 4, 1, "", "ayes"], [14, 4, 1, "", "end"], [14, 2, 1, "", "from_dict"], [14, 4, 1, "", "index"], [14, 4, 1, "", "nays"], [14, 4, 1, "", "threshold"]], "bittensor.core.chain_data.scheduled_coldkey_swap_info": [[15, 1, 1, "", "ScheduledColdkeySwapInfo"]], "bittensor.core.chain_data.scheduled_coldkey_swap_info.ScheduledColdkeySwapInfo": [[15, 4, 1, "", "arbitration_block"], [15, 2, 1, "", "decode_account_id_list"], [15, 4, 1, "", "new_coldkey"], [15, 4, 1, "", "old_coldkey"]], "bittensor.core.chain_data.stake_info": [[16, 1, 1, "", "StakeInfo"]], "bittensor.core.chain_data.stake_info.StakeInfo": [[16, 4, 1, "", "coldkey_ss58"], [16, 4, 1, "", "drain"], [16, 4, 1, "", "emission"], [16, 2, 1, "", "from_dict"], [16, 4, 1, "", "hotkey_ss58"], [16, 4, 1, "", "is_registered"], [16, 4, 1, "", "locked"], [16, 4, 1, "", "netuid"], [16, 4, 1, "", "stake"]], "bittensor.core.chain_data.subnet_hyperparameters": [[17, 1, 1, "", "SubnetHyperparameters"]], "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters": [[17, 4, 1, "", "activity_cutoff"], [17, 4, 1, "", "adjustment_alpha"], [17, 4, 1, "", "adjustment_interval"], [17, 4, 1, "", "alpha_high"], [17, 4, 1, "", "alpha_low"], [17, 4, 1, "", "bonds_moving_avg"], [17, 4, 1, "", "commit_reveal_period"], [17, 4, 1, "", "commit_reveal_weights_enabled"], [17, 4, 1, "", "difficulty"], [17, 4, 1, "", "immunity_period"], [17, 4, 1, "", "kappa"], [17, 4, 1, "", "liquid_alpha_enabled"], [17, 4, 1, "", "max_burn"], [17, 4, 1, "", "max_difficulty"], [17, 4, 1, "", "max_regs_per_block"], [17, 4, 1, "", "max_validators"], [17, 4, 1, "", "max_weight_limit"], [17, 4, 1, "", "min_allowed_weights"], [17, 4, 1, "", "min_burn"], [17, 4, 1, "", "min_difficulty"], [17, 4, 1, "", "registration_allowed"], [17, 4, 1, "", "rho"], [17, 4, 1, "", "serving_rate_limit"], [17, 4, 1, "", "target_regs_per_interval"], [17, 4, 1, "", "tempo"], [17, 4, 1, "", "weights_rate_limit"], [17, 4, 1, "", "weights_version"]], "bittensor.core.chain_data.subnet_identity": [[18, 1, 1, "", "SubnetIdentity"]], "bittensor.core.chain_data.subnet_identity.SubnetIdentity": [[18, 4, 1, "", "additional"], [18, 4, 1, "", "description"], [18, 4, 1, "", "discord"], [18, 4, 1, "", "github_repo"], [18, 4, 1, "", "subnet_contact"], [18, 4, 1, "", "subnet_name"], [18, 4, 1, "", "subnet_url"]], "bittensor.core.chain_data.subnet_info": [[19, 1, 1, "", "SubnetInfo"]], "bittensor.core.chain_data.subnet_info.SubnetInfo": [[19, 4, 1, "", "blocks_since_epoch"], [19, 4, 1, "", "burn"], [19, 4, 1, "", "connection_requirements"], [19, 4, 1, "", "difficulty"], [19, 4, 1, "", "emission_value"], [19, 4, 1, "", "immunity_period"], [19, 4, 1, "", "kappa"], [19, 4, 1, "", "max_allowed_validators"], [19, 4, 1, "", "max_n"], [19, 4, 1, "", "max_weight_limit"], [19, 4, 1, "", "min_allowed_weights"], [19, 4, 1, "", "modality"], [19, 4, 1, "", "netuid"], [19, 4, 1, "", "owner_ss58"], [19, 4, 1, "", "rho"], [19, 4, 1, "", "scaling_law_power"], [19, 4, 1, "", "subnetwork_n"], [19, 4, 1, "", "tempo"]], "bittensor.core.chain_data.subnet_state": [[20, 1, 1, "", "SubnetState"]], "bittensor.core.chain_data.subnet_state.SubnetState": [[20, 4, 1, "", "active"], [20, 4, 1, "", "alpha_stake"], [20, 4, 1, "", "block_at_registration"], [20, 4, 1, "", "coldkeys"], [20, 4, 1, "", "consensus"], [20, 4, 1, "", "dividends"], [20, 4, 1, "", "emission"], [20, 4, 1, "", "emission_history"], [20, 4, 1, "", "hotkeys"], [20, 4, 1, "", "incentives"], [20, 4, 1, "", "last_update"], [20, 4, 1, "", "netuid"], [20, 4, 1, "", "pruning_score"], [20, 4, 1, "", "rank"], [20, 4, 1, "", "tao_stake"], [20, 4, 1, "", "total_stake"], [20, 4, 1, "", "trust"], [20, 4, 1, "", "validator_permit"]], "bittensor.core.chain_data.utils": [[21, 1, 1, "", "ChainDataType"], [21, 5, 1, "", "decode_account_id"], [21, 5, 1, "", "decode_metadata"], [21, 5, 1, "", "decode_revealed_commitment"], [21, 5, 1, "", "decode_revealed_commitment_with_hotkey"], [21, 5, 1, "", "from_scale_encoding"], [21, 5, 1, "", "from_scale_encoding_using_type_string"], [21, 5, 1, "", "process_stake_data"]], "bittensor.core.chain_data.utils.ChainDataType": [[21, 4, 1, "", "AccountId"], [21, 4, 1, "", "AxonInfo"], [21, 4, 1, "", "ChainIdentity"], [21, 4, 1, "", "DelegateInfo"], [21, 4, 1, "", "DelegatedInfo"], [21, 4, 1, "", "DynamicInfo"], [21, 4, 1, "", "IPInfo"], [21, 4, 1, "", "MetagraphInfo"], [21, 4, 1, "", "NeuronInfo"], [21, 4, 1, "", "NeuronInfoLite"], [21, 4, 1, "", "ScheduledColdkeySwapInfo"], [21, 4, 1, "", "StakeInfo"], [21, 4, 1, "", "SubnetHyperparameters"], [21, 4, 1, "", "SubnetIdentity"], [21, 4, 1, "", "SubnetInfo"], [21, 4, 1, "", "SubnetState"]], "bittensor.core.chain_data.weight_commit_info": [[22, 1, 1, "", "WeightCommitInfo"]], "bittensor.core.chain_data.weight_commit_info.WeightCommitInfo": [[22, 4, 1, "", "commit_hex"], [22, 2, 1, "", "from_vec_u8"], [22, 4, 1, "", "reveal_round"], [22, 4, 1, "", "ss58"]], "bittensor.core.config": [[23, 1, 1, "", "Config"], [23, 1, 1, "", "DefaultConfig"], [23, 7, 1, "", "InvalidConfigFile"], [23, 6, 1, "", "T"]], "bittensor.core.config.Config": [[23, 2, 1, "", "is_set"], [23, 2, 1, "", "merge"], [23, 2, 1, "", "to_dict"]], "bittensor.core.config.DefaultConfig": [[23, 2, 1, "", "default"]], "bittensor.core.dendrite": [[24, 6, 1, "", "BaseModel"], [24, 6, 1, "", "DENDRITE_DEFAULT_ERROR"], [24, 6, 1, "", "DENDRITE_ERROR_MAPPING"], [24, 1, 1, "", "Dendrite"], [24, 1, 1, "", "DendriteMixin"], [24, 5, 1, "", "call"], [24, 5, 1, "", "event_loop_is_running"]], "bittensor.core.dendrite.Dendrite": [[24, 2, 1, "", "__repr__"], [24, 2, 1, "", "__str__"], [24, 2, 1, "", "aclose_session"], [24, 2, 1, "", "call"], [24, 2, 1, "", "call_stream"], [24, 2, 1, "", "close_session"], [24, 2, 1, "", "forward"], [24, 2, 1, "", "preprocess_synapse_for_request"], [24, 2, 1, "", "process_server_response"], [24, 2, 1, "", "query"]], "bittensor.core.dendrite.DendriteMixin": [[24, 2, 1, "", "__repr__"], [24, 2, 1, "", "__str__"], [24, 2, 1, "id0", "aclose_session"], [24, 2, 1, "", "aquery"], [24, 2, 1, "id3", "call"], [24, 2, 1, "id4", "call_stream"], [24, 2, 1, "id5", "close_session"], [24, 4, 1, "", "external_ip"], [24, 2, 1, "id7", "forward"], [24, 4, 1, "", "keypair"], [24, 2, 1, "", "log_exception"], [24, 2, 1, "id8", "preprocess_synapse_for_request"], [24, 2, 1, "", "process_error_message"], [24, 2, 1, "id9", "process_server_response"], [24, 2, 1, "id11", "query"], [24, 3, 1, "", "session"], [24, 4, 1, "", "synapse_history"], [24, 4, 1, "", "uuid"]], "bittensor.core.errors": [[25, 7, 1, "", "BlacklistedException"], [25, 6, 1, "", "BlockNotFound"], [25, 7, 1, "", "ChainConnectionError"], [25, 7, 1, "", "ChainError"], [25, 7, 1, "", "ChainQueryError"], [25, 7, 1, "", "ChainTransactionError"], [25, 7, 1, "", "DelegateTakeTooHigh"], [25, 7, 1, "", "DelegateTakeTooLow"], [25, 7, 1, "", "DelegateTxRateLimitExceeded"], [25, 7, 1, "", "DuplicateChild"], [25, 6, 1, "", "ExtrinsicNotFound"], [25, 7, 1, "", "HotKeyAccountNotExists"], [25, 7, 1, "", "IdentityError"], [25, 7, 1, "", "InternalServerError"], [25, 7, 1, "", "InvalidChild"], [25, 7, 1, "", "InvalidRequestNameError"], [25, 7, 1, "", "MaxAttemptsException"], [25, 7, 1, "", "MaxSuccessException"], [25, 7, 1, "", "MetadataError"], [25, 7, 1, "", "NominationError"], [25, 7, 1, "", "NonAssociatedColdKey"], [25, 7, 1, "", "NotDelegateError"], [25, 7, 1, "", "NotEnoughStakeToSetChildkeys"], [25, 7, 1, "", "NotRegisteredError"], [25, 7, 1, "", "NotVerifiedException"], [25, 7, 1, "", "PostProcessException"], [25, 7, 1, "", "PriorityException"], [25, 7, 1, "", "ProportionOverflow"], [25, 7, 1, "", "RegistrationError"], [25, 7, 1, "", "RegistrationNotPermittedOnRootSubnet"], [25, 7, 1, "", "RunException"], [25, 7, 1, "", "StakeError"], [25, 6, 1, "", "StorageFunctionNotFound"], [25, 7, 1, "", "SubNetworkDoesNotExist"], [25, 6, 1, "", "SubstrateRequestException"], [25, 7, 1, "", "SynapseDendriteNoneException"], [25, 7, 1, "", "SynapseException"], [25, 7, 1, "", "SynapseParsingError"], [25, 7, 1, "", "TakeError"], [25, 7, 1, "", "TooManyChildren"], [25, 7, 1, "", "TransferError"], [25, 7, 1, "", "TxRateLimitExceeded"], [25, 7, 1, "", "UnknownSynapseError"], [25, 7, 1, "", "UnstakeError"]], "bittensor.core.errors.ChainError": [[25, 2, 1, "", "from_error"]], "bittensor.core.errors.SynapseDendriteNoneException": [[25, 4, 1, "", "message"]], "bittensor.core.errors.SynapseException": [[25, 4, 1, "", "message"], [25, 4, 1, "", "synapse"]], "bittensor.core.extrinsics": [[27, 0, 0, "-", "asyncex"], [38, 0, 0, "-", "commit_reveal"], [39, 0, 0, "-", "commit_weights"], [41, 0, 0, "-", "move_stake"], [42, 0, 0, "-", "registration"], [43, 0, 0, "-", "root"], [44, 0, 0, "-", "serving"], [45, 0, 0, "-", "set_weights"], [46, 0, 0, "-", "staking"], [47, 0, 0, "-", "start_call"], [48, 0, 0, "-", "take"], [49, 0, 0, "-", "transfer"], [50, 0, 0, "-", "unstaking"], [51, 0, 0, "-", "utils"]], "bittensor.core.extrinsics.asyncex": [[26, 0, 0, "-", "commit_reveal"], [28, 0, 0, "-", "move_stake"], [29, 0, 0, "-", "registration"], [30, 0, 0, "-", "root"], [31, 0, 0, "-", "serving"], [32, 0, 0, "-", "staking"], [33, 0, 0, "-", "start_call"], [34, 0, 0, "-", "take"], [35, 0, 0, "-", "transfer"], [36, 0, 0, "-", "unstaking"], [37, 0, 0, "-", "weights"]], "bittensor.core.extrinsics.asyncex.commit_reveal": [[26, 5, 1, "", "commit_reveal_v3_extrinsic"]], "bittensor.core.extrinsics.asyncex.move_stake": [[28, 5, 1, "", "move_stake_extrinsic"], [28, 5, 1, "", "swap_stake_extrinsic"], [28, 5, 1, "", "transfer_stake_extrinsic"]], "bittensor.core.extrinsics.asyncex.registration": [[29, 5, 1, "", "burned_register_extrinsic"], [29, 5, 1, "", "register_extrinsic"], [29, 5, 1, "", "register_subnet_extrinsic"], [29, 5, 1, "", "set_subnet_identity_extrinsic"]], "bittensor.core.extrinsics.asyncex.root": [[30, 5, 1, "", "root_register_extrinsic"], [30, 5, 1, "", "set_root_weights_extrinsic"]], "bittensor.core.extrinsics.asyncex.serving": [[31, 5, 1, "", "do_serve_axon"], [31, 5, 1, "", "get_metadata"], [31, 5, 1, "", "publish_metadata"], [31, 5, 1, "", "serve_axon_extrinsic"], [31, 5, 1, "", "serve_extrinsic"]], "bittensor.core.extrinsics.asyncex.staking": [[32, 5, 1, "", "add_stake_extrinsic"], [32, 5, 1, "", "add_stake_multiple_extrinsic"]], "bittensor.core.extrinsics.asyncex.start_call": [[33, 5, 1, "", "start_call_extrinsic"]], "bittensor.core.extrinsics.asyncex.take": [[34, 5, 1, "", "decrease_take_extrinsic"], [34, 5, 1, "", "increase_take_extrinsic"]], "bittensor.core.extrinsics.asyncex.transfer": [[35, 5, 1, "", "transfer_extrinsic"]], "bittensor.core.extrinsics.asyncex.unstaking": [[36, 5, 1, "", "unstake_extrinsic"], [36, 5, 1, "", "unstake_multiple_extrinsic"]], "bittensor.core.extrinsics.asyncex.weights": [[37, 5, 1, "", "commit_weights_extrinsic"], [37, 5, 1, "", "reveal_weights_extrinsic"], [37, 5, 1, "", "set_weights_extrinsic"]], "bittensor.core.extrinsics.commit_reveal": [[38, 5, 1, "", "commit_reveal_v3_extrinsic"]], "bittensor.core.extrinsics.commit_weights": [[39, 5, 1, "", "commit_weights_extrinsic"], [39, 5, 1, "", "reveal_weights_extrinsic"]], "bittensor.core.extrinsics.move_stake": [[41, 5, 1, "", "move_stake_extrinsic"], [41, 5, 1, "", "swap_stake_extrinsic"], [41, 5, 1, "", "transfer_stake_extrinsic"]], "bittensor.core.extrinsics.registration": [[42, 5, 1, "", "burned_register_extrinsic"], [42, 5, 1, "", "register_extrinsic"], [42, 5, 1, "", "register_subnet_extrinsic"], [42, 5, 1, "", "set_subnet_identity_extrinsic"]], "bittensor.core.extrinsics.root": [[43, 5, 1, "", "root_register_extrinsic"], [43, 5, 1, "", "set_root_weights_extrinsic"]], "bittensor.core.extrinsics.serving": [[44, 5, 1, "", "do_serve_axon"], [44, 5, 1, "", "get_metadata"], [44, 5, 1, "", "publish_metadata"], [44, 5, 1, "", "serve_axon_extrinsic"], [44, 5, 1, "", "serve_extrinsic"]], "bittensor.core.extrinsics.set_weights": [[45, 5, 1, "", "set_weights_extrinsic"]], "bittensor.core.extrinsics.staking": [[46, 5, 1, "", "add_stake_extrinsic"], [46, 5, 1, "", "add_stake_multiple_extrinsic"]], "bittensor.core.extrinsics.start_call": [[47, 5, 1, "", "start_call_extrinsic"]], "bittensor.core.extrinsics.take": [[48, 5, 1, "", "decrease_take_extrinsic"], [48, 5, 1, "", "increase_take_extrinsic"]], "bittensor.core.extrinsics.transfer": [[49, 5, 1, "", "transfer_extrinsic"]], "bittensor.core.extrinsics.unstaking": [[50, 5, 1, "", "unstake_extrinsic"], [50, 5, 1, "", "unstake_multiple_extrinsic"]], "bittensor.core.extrinsics.utils": [[51, 5, 1, "", "get_old_stakes"]], "bittensor.core.metagraph": [[53, 1, 1, "", "AsyncMetagraph"], [53, 6, 1, "", "BaseClass"], [53, 6, 1, "", "METAGRAPH_STATE_DICT_NDARRAY_KEYS"], [53, 1, 1, "", "Metagraph"], [53, 1, 1, "", "MetagraphMixin"], [53, 1, 1, "", "NonTorchMetagraph"], [53, 6, 1, "", "NumpyOrTorch"], [53, 6, 1, "", "Tensor"], [53, 1, 1, "", "TorchMetagraph"], [53, 5, 1, "", "async_metagraph"], [53, 5, 1, "", "get_save_dir"], [53, 5, 1, "", "latest_block_path"], [53, 5, 1, "", "safe_globals"]], "bittensor.core.metagraph.AsyncMetagraph": [[53, 2, 1, "", "sync"]], "bittensor.core.metagraph.Metagraph": [[53, 2, 1, "", "sync"]], "bittensor.core.metagraph.MetagraphMixin": [[53, 3, 1, "", "AS"], [53, 3, 1, "", "B"], [53, 3, 1, "", "C"], [53, 3, 1, "", "D"], [53, 3, 1, "", "E"], [53, 3, 1, "", "I"], [53, 3, 1, "", "R"], [53, 3, 1, "", "S"], [53, 3, 1, "", "T"], [53, 3, 1, "", "TS"], [53, 3, 1, "", "Tv"], [53, 3, 1, "", "W"], [53, 4, 1, "", "active"], [53, 3, 1, "", "addresses"], [53, 4, 1, "", "alpha_dividends_per_hotkey"], [53, 4, 1, "", "alpha_stake"], [53, 4, 1, "", "axons"], [53, 4, 1, "", "block"], [53, 4, 1, "", "block_at_registration"], [53, 4, 1, "", "blocks_since_last_step"], [53, 4, 1, "", "bonds"], [53, 4, 1, "", "chain_endpoint"], [53, 3, 1, "", "coldkeys"], [53, 4, 1, "", "consensus"], [53, 4, 1, "", "dividends"], [53, 4, 1, "", "emission"], [53, 4, 1, "", "emissions"], [53, 3, 1, "", "hotkeys"], [53, 4, 1, "", "hparams"], [53, 4, 1, "", "identities"], [53, 4, 1, "", "identity"], [53, 4, 1, "", "incentive"], [53, 4, 1, "", "last_step"], [53, 4, 1, "", "last_update"], [53, 4, 1, "", "lite"], [53, 2, 1, "", "load"], [53, 2, 1, "", "load_from_path"], [53, 4, 1, "", "max_uids"], [53, 2, 1, "", "metadata"], [53, 4, 1, "", "n"], [53, 4, 1, "", "name"], [53, 4, 1, "", "netuid"], [53, 4, 1, "", "network"], [53, 4, 1, "", "network_registered_at"], [53, 4, 1, "", "neurons"], [53, 4, 1, "", "num_uids"], [53, 4, 1, "", "owner_coldkey"], [53, 4, 1, "", "owner_hotkey"], [53, 4, 1, "", "pool"], [53, 4, 1, "", "pruning_score"], [53, 4, 1, "", "ranks"], [53, 2, 1, "", "save"], [53, 4, 1, "", "should_sync"], [53, 4, 1, "", "stake"], [53, 2, 1, "", "state_dict"], [53, 4, 1, "", "subtensor"], [53, 4, 1, "", "symbol"], [53, 4, 1, "", "tao_dividends_per_hotkey"], [53, 4, 1, "", "tao_stake"], [53, 4, 1, "", "tempo"], [53, 4, 1, "", "trust"], [53, 4, 1, "", "uids"], [53, 4, 1, "", "validator_permit"], [53, 4, 1, "", "validator_trust"], [53, 4, 1, "", "version"], [53, 4, 1, "", "weights"]], "bittensor.core.metagraph.NonTorchMetagraph": [[53, 4, 1, "", "active"], [53, 4, 1, "", "alpha_stake"], [53, 4, 1, "", "block"], [53, 4, 1, "", "bonds"], [53, 4, 1, "", "consensus"], [53, 4, 1, "", "dividends"], [53, 4, 1, "", "emission"], [53, 4, 1, "", "incentive"], [53, 4, 1, "", "last_update"], [53, 2, 1, "", "load_from_path"], [53, 4, 1, "", "n"], [53, 4, 1, "", "netuid"], [53, 4, 1, "", "ranks"], [53, 4, 1, "", "should_sync"], [53, 4, 1, "", "stake"], [53, 4, 1, "", "subtensor"], [53, 4, 1, "", "tao_stake"], [53, 4, 1, "", "total_stake"], [53, 4, 1, "", "trust"], [53, 4, 1, "", "uids"], [53, 4, 1, "", "validator_permit"], [53, 4, 1, "", "validator_trust"], [53, 4, 1, "", "version"], [53, 4, 1, "", "weights"]], "bittensor.core.metagraph.TorchMetagraph": [[53, 4, 1, "", "active"], [53, 4, 1, "", "alpha_stake"], [53, 4, 1, "", "block"], [53, 4, 1, "", "bonds"], [53, 4, 1, "", "consensus"], [53, 4, 1, "", "dividends"], [53, 4, 1, "", "emission"], [53, 4, 1, "", "incentive"], [53, 4, 1, "", "last_update"], [53, 2, 1, "", "load_from_path"], [53, 4, 1, "", "n"], [53, 4, 1, "", "ranks"], [53, 4, 1, "", "stake"], [53, 4, 1, "", "tao_stake"], [53, 4, 1, "", "total_stake"], [53, 4, 1, "", "trust"], [53, 4, 1, "", "uids"], [53, 4, 1, "", "validator_permit"], [53, 4, 1, "", "validator_trust"], [53, 4, 1, "", "version"], [53, 4, 1, "", "weights"]], "bittensor.core.settings": [[54, 6, 1, "", "ARCHIVE_ENTRYPOINT"], [54, 6, 1, "", "BLOCKTIME"], [54, 6, 1, "", "DEFAULTS"], [54, 6, 1, "", "DEFAULT_ENDPOINT"], [54, 6, 1, "", "DEFAULT_NETWORK"], [54, 6, 1, "", "FINNEY_ENTRYPOINT"], [54, 6, 1, "", "FINNEY_TEST_ENTRYPOINT"], [54, 6, 1, "", "HOME_DIR"], [54, 6, 1, "", "LATENT_LITE_ENTRYPOINT"], [54, 6, 1, "", "LOCAL_ENTRYPOINT"], [54, 6, 1, "", "MINERS_DIR"], [54, 6, 1, "", "NETWORKS"], [54, 6, 1, "", "NETWORK_EXPLORER_MAP"], [54, 6, 1, "", "NETWORK_MAP"], [54, 6, 1, "", "PIPADDRESS"], [54, 6, 1, "", "RAO_SYMBOL"], [54, 6, 1, "", "READ_ONLY"], [54, 6, 1, "", "REVERSE_NETWORK_MAP"], [54, 6, 1, "", "ROOT_TAO_STAKE_WEIGHT"], [54, 6, 1, "", "SS58_ADDRESS_LENGTH"], [54, 6, 1, "", "SS58_FORMAT"], [54, 6, 1, "", "SUBVORTEX_ENTRYPOINT"], [54, 6, 1, "", "TAO_SYMBOL"], [54, 6, 1, "", "TYPE_REGISTRY"], [54, 6, 1, "", "USER_BITTENSOR_DIR"], [54, 6, 1, "", "WALLETS_DIR"], [54, 6, 1, "", "version_as_int"], [54, 6, 1, "", "version_split"]], "bittensor.core.stream": [[55, 1, 1, "", "BTStreamingResponseModel"], [55, 1, 1, "", "StreamingSynapse"]], "bittensor.core.stream.BTStreamingResponseModel": [[55, 4, 1, "", "token_streamer"]], "bittensor.core.stream.StreamingSynapse": [[55, 1, 1, "", "BTStreamingResponse"], [55, 2, 1, "", "create_streaming_response"], [55, 2, 1, "", "extract_response_json"], [55, 4, 1, "", "model_config"], [55, 2, 1, "", "process_streaming_response"]], "bittensor.core.stream.StreamingSynapse.BTStreamingResponse": [[55, 2, 1, "", "stream_response"], [55, 4, 1, "", "synapse"], [55, 4, 1, "", "token_streamer"]], "bittensor.core.subtensor": [[56, 1, 1, "", "Subtensor"]], "bittensor.core.subtensor.Subtensor": [[56, 2, 1, "", "add_stake"], [56, 2, 1, "", "add_stake_multiple"], [56, 2, 1, "", "all_subnets"], [56, 3, 1, "", "block"], [56, 2, 1, "", "blocks_since_last_step"], [56, 2, 1, "", "blocks_since_last_update"], [56, 2, 1, "", "bonds"], [56, 2, 1, "", "burned_register"], [56, 2, 1, "", "close"], [56, 2, 1, "", "commit"], [56, 2, 1, "", "commit_reveal_enabled"], [56, 2, 1, "", "commit_weights"], [56, 2, 1, "", "determine_block_hash"], [56, 2, 1, "", "difficulty"], [56, 2, 1, "", "does_hotkey_exist"], [56, 2, 1, "", "encode_params"], [56, 2, 1, "", "filter_netuids_by_registered_hotkeys"], [56, 2, 1, "", "get_all_commitments"], [56, 2, 1, "", "get_all_metagraphs_info"], [56, 2, 1, "", "get_all_neuron_certificates"], [56, 2, 1, "", "get_all_revealed_commitments"], [56, 2, 1, "", "get_all_subnets_info"], [56, 2, 1, "", "get_balance"], [56, 2, 1, "", "get_balances"], [56, 2, 1, "", "get_block_hash"], [56, 2, 1, "", "get_children"], [56, 2, 1, "", "get_children_pending"], [56, 2, 1, "", "get_commitment"], [56, 2, 1, "", "get_current_block"], [56, 2, 1, "", "get_current_weight_commit_info"], [56, 2, 1, "", "get_delegate_by_hotkey"], [56, 2, 1, "", "get_delegate_identities"], [56, 2, 1, "", "get_delegate_take"], [56, 2, 1, "", "get_delegated"], [56, 2, 1, "", "get_delegates"], [56, 2, 1, "", "get_existential_deposit"], [56, 2, 1, "", "get_hotkey_owner"], [56, 4, 1, "", "get_hotkey_stake"], [56, 2, 1, "", "get_hyperparameter"], [56, 2, 1, "", "get_metagraph_info"], [56, 2, 1, "", "get_minimum_required_stake"], [56, 2, 1, "", "get_netuids_for_hotkey"], [56, 2, 1, "", "get_neuron_certificate"], [56, 2, 1, "", "get_neuron_for_pubkey_and_subnet"], [56, 2, 1, "", "get_next_epoch_start_block"], [56, 2, 1, "", "get_owned_hotkeys"], [56, 2, 1, "", "get_revealed_commitment"], [56, 2, 1, "", "get_revealed_commitment_by_hotkey"], [56, 2, 1, "", "get_stake"], [56, 2, 1, "", "get_stake_add_fee"], [56, 2, 1, "", "get_stake_for_coldkey"], [56, 2, 1, "", "get_stake_for_coldkey_and_hotkey"], [56, 2, 1, "", "get_stake_for_hotkey"], [56, 4, 1, "", "get_stake_info_for_coldkey"], [56, 2, 1, "", "get_stake_movement_fee"], [56, 2, 1, "", "get_subnet_burn_cost"], [56, 2, 1, "", "get_subnet_hyperparameters"], [56, 2, 1, "", "get_subnet_owner_hotkey"], [56, 2, 1, "", "get_subnet_reveal_period_epochs"], [56, 2, 1, "", "get_subnet_validator_permits"], [56, 2, 1, "", "get_subnets"], [56, 2, 1, "", "get_timestamp"], [56, 2, 1, "", "get_total_subnets"], [56, 2, 1, "", "get_transfer_fee"], [56, 2, 1, "", "get_uid_for_hotkey_on_subnet"], [56, 2, 1, "", "get_unstake_fee"], [56, 2, 1, "", "get_vote_data"], [56, 2, 1, "", "immunity_period"], [56, 2, 1, "", "is_fast_blocks"], [56, 2, 1, "", "is_hotkey_delegate"], [56, 2, 1, "", "is_hotkey_registered"], [56, 2, 1, "", "is_hotkey_registered_any"], [56, 2, 1, "", "is_hotkey_registered_on_subnet"], [56, 2, 1, "", "is_subnet_active"], [56, 2, 1, "", "last_drand_round"], [56, 4, 1, "", "log_verbose"], [56, 2, 1, "", "max_weight_limit"], [56, 2, 1, "", "metagraph"], [56, 2, 1, "", "min_allowed_weights"], [56, 2, 1, "", "move_stake"], [56, 2, 1, "", "neuron_for_uid"], [56, 2, 1, "", "neurons"], [56, 2, 1, "", "neurons_lite"], [56, 2, 1, "", "query_constant"], [56, 2, 1, "", "query_identity"], [56, 2, 1, "", "query_map"], [56, 2, 1, "", "query_map_subtensor"], [56, 2, 1, "", "query_module"], [56, 2, 1, "", "query_runtime_api"], [56, 2, 1, "", "query_subtensor"], [56, 2, 1, "", "recycle"], [56, 2, 1, "", "register"], [56, 2, 1, "", "register_subnet"], [56, 2, 1, "", "reveal_weights"], [56, 2, 1, "", "root_register"], [56, 2, 1, "", "root_set_weights"], [56, 2, 1, "", "serve_axon"], [56, 2, 1, "", "set_children"], [56, 4, 1, "", "set_commitment"], [56, 2, 1, "", "set_delegate_take"], [56, 2, 1, "", "set_reveal_commitment"], [56, 2, 1, "", "set_subnet_identity"], [56, 2, 1, "", "set_weights"], [56, 2, 1, "", "sign_and_send_extrinsic"], [56, 2, 1, "", "start_call"], [56, 2, 1, "", "state_call"], [56, 2, 1, "", "subnet"], [56, 2, 1, "", "subnet_exists"], [56, 2, 1, "", "subnetwork_n"], [56, 4, 1, "", "substrate"], [56, 2, 1, "", "swap_stake"], [56, 2, 1, "", "tempo"], [56, 2, 1, "", "transfer"], [56, 2, 1, "", "transfer_stake"], [56, 2, 1, "", "tx_rate_limit"], [56, 2, 1, "", "unstake"], [56, 2, 1, "", "unstake_multiple"], [56, 2, 1, "", "wait_for_block"], [56, 2, 1, "", "weights"], [56, 2, 1, "", "weights_rate_limit"]], "bittensor.core.subtensor_api": [[61, 1, 1, "", "SubtensorApi"], [57, 0, 0, "-", "chain"], [58, 0, 0, "-", "commitments"], [59, 0, 0, "-", "delegates"], [60, 0, 0, "-", "extrinsics"], [62, 0, 0, "-", "metagraphs"], [63, 0, 0, "-", "neurons"], [64, 0, 0, "-", "queries"], [65, 0, 0, "-", "staking"], [66, 0, 0, "-", "subnets"], [67, 0, 0, "-", "utils"], [68, 0, 0, "-", "wallets"]], "bittensor.core.subtensor_api.SubtensorApi": [[61, 2, 1, "", "add_args"], [61, 3, 1, "", "block"], [61, 3, 1, "", "chain"], [61, 4, 1, "", "chain_endpoint"], [61, 4, 1, "", "close"], [61, 3, 1, "", "commitments"], [61, 4, 1, "", "config"], [61, 3, 1, "", "delegates"], [61, 4, 1, "", "determine_block_hash"], [61, 4, 1, "", "encode_params"], [61, 3, 1, "", "extrinsics"], [61, 4, 1, "", "help"], [61, 4, 1, "", "initialize"], [61, 4, 1, "", "is_async"], [61, 4, 1, "", "log_verbose"], [61, 3, 1, "", "metagraphs"], [61, 4, 1, "", "network"], [61, 3, 1, "", "neurons"], [61, 3, 1, "", "queries"], [61, 4, 1, "", "setup_config"], [61, 4, 1, "", "sign_and_send_extrinsic"], [61, 3, 1, "", "staking"], [61, 4, 1, "", "start_call"], [61, 3, 1, "", "subnets"], [61, 4, 1, "", "substrate"], [61, 4, 1, "", "wait_for_block"], [61, 3, 1, "", "wallets"]], "bittensor.core.subtensor_api.chain": [[57, 1, 1, "", "Chain"]], "bittensor.core.subtensor_api.chain.Chain": [[57, 4, 1, "", "get_block_hash"], [57, 4, 1, "", "get_current_block"], [57, 4, 1, "", "get_delegate_identities"], [57, 4, 1, "", "get_existential_deposit"], [57, 4, 1, "", "get_minimum_required_stake"], [57, 4, 1, "", "get_timestamp"], [57, 4, 1, "", "get_vote_data"], [57, 4, 1, "", "is_fast_blocks"], [57, 4, 1, "", "last_drand_round"], [57, 4, 1, "", "state_call"], [57, 4, 1, "", "tx_rate_limit"]], "bittensor.core.subtensor_api.commitments": [[58, 1, 1, "", "Commitments"]], "bittensor.core.subtensor_api.commitments.Commitments": [[58, 4, 1, "", "commit_reveal_enabled"], [58, 4, 1, "", "get_all_commitments"], [58, 4, 1, "", "get_all_revealed_commitments"], [58, 4, 1, "", "get_commitment"], [58, 4, 1, "", "get_current_weight_commit_info"], [58, 4, 1, "", "get_revealed_commitment"], [58, 4, 1, "", "get_revealed_commitment_by_hotkey"], [58, 4, 1, "", "set_commitment"], [58, 4, 1, "", "set_reveal_commitment"]], "bittensor.core.subtensor_api.delegates": [[59, 1, 1, "", "Delegates"]], "bittensor.core.subtensor_api.delegates.Delegates": [[59, 4, 1, "", "get_delegate_by_hotkey"], [59, 4, 1, "", "get_delegate_identities"], [59, 4, 1, "", "get_delegate_take"], [59, 4, 1, "", "get_delegated"], [59, 4, 1, "", "get_delegates"], [59, 4, 1, "", "is_hotkey_delegate"], [59, 4, 1, "", "set_delegate_take"]], "bittensor.core.subtensor_api.extrinsics": [[60, 1, 1, "", "Extrinsics"]], "bittensor.core.subtensor_api.extrinsics.Extrinsics": [[60, 4, 1, "", "add_stake"], [60, 4, 1, "", "add_stake_multiple"], [60, 4, 1, "", "burned_register"], [60, 4, 1, "", "commit_weights"], [60, 4, 1, "", "move_stake"], [60, 4, 1, "", "register"], [60, 4, 1, "", "register_subnet"], [60, 4, 1, "", "reveal_weights"], [60, 4, 1, "", "root_register"], [60, 4, 1, "", "root_set_weights"], [60, 4, 1, "", "serve_axon"], [60, 4, 1, "", "set_children"], [60, 4, 1, "", "set_subnet_identity"], [60, 4, 1, "", "set_weights"], [60, 4, 1, "", "start_call"], [60, 4, 1, "", "swap_stake"], [60, 4, 1, "", "transfer"], [60, 4, 1, "", "transfer_stake"], [60, 4, 1, "", "unstake"], [60, 4, 1, "", "unstake_multiple"]], "bittensor.core.subtensor_api.metagraphs": [[62, 1, 1, "", "Metagraphs"]], "bittensor.core.subtensor_api.metagraphs.Metagraphs": [[62, 4, 1, "", "get_all_metagraphs_info"], [62, 4, 1, "", "get_metagraph_info"], [62, 4, 1, "", "metagraph"]], "bittensor.core.subtensor_api.neurons": [[63, 1, 1, "", "Neurons"]], "bittensor.core.subtensor_api.neurons.Neurons": [[63, 4, 1, "", "get_all_neuron_certificates"], [63, 4, 1, "", "get_neuron_certificate"], [63, 4, 1, "", "neuron_for_uid"], [63, 4, 1, "", "neurons"], [63, 4, 1, "", "neurons_lite"], [63, 4, 1, "", "query_identity"]], "bittensor.core.subtensor_api.queries": [[64, 1, 1, "", "Queries"]], "bittensor.core.subtensor_api.queries.Queries": [[64, 4, 1, "", "query_constant"], [64, 4, 1, "", "query_map"], [64, 4, 1, "", "query_map_subtensor"], [64, 4, 1, "", "query_module"], [64, 4, 1, "", "query_runtime_api"], [64, 4, 1, "", "query_subtensor"]], "bittensor.core.subtensor_api.staking": [[65, 1, 1, "", "Staking"]], "bittensor.core.subtensor_api.staking.Staking": [[65, 4, 1, "", "add_stake"], [65, 4, 1, "", "add_stake_multiple"], [65, 4, 1, "", "get_hotkey_stake"], [65, 4, 1, "", "get_minimum_required_stake"], [65, 4, 1, "", "get_stake"], [65, 4, 1, "", "get_stake_add_fee"], [65, 4, 1, "", "get_stake_for_coldkey"], [65, 4, 1, "", "get_stake_for_coldkey_and_hotkey"], [65, 4, 1, "", "get_stake_info_for_coldkey"], [65, 4, 1, "", "get_stake_movement_fee"], [65, 4, 1, "", "get_unstake_fee"], [65, 4, 1, "", "unstake"], [65, 4, 1, "", "unstake_multiple"]], "bittensor.core.subtensor_api.subnets": [[66, 1, 1, "", "Subnets"]], "bittensor.core.subtensor_api.subnets.Subnets": [[66, 4, 1, "", "all_subnets"], [66, 4, 1, "", "blocks_since_last_step"], [66, 4, 1, "", "blocks_since_last_update"], [66, 4, 1, "", "bonds"], [66, 4, 1, "", "difficulty"], [66, 4, 1, "", "get_all_subnets_info"], [66, 4, 1, "", "get_children"], [66, 4, 1, "", "get_children_pending"], [66, 4, 1, "", "get_current_weight_commit_info"], [66, 4, 1, "", "get_hyperparameter"], [66, 4, 1, "", "get_neuron_for_pubkey_and_subnet"], [66, 4, 1, "", "get_next_epoch_start_block"], [66, 4, 1, "", "get_subnet_burn_cost"], [66, 4, 1, "", "get_subnet_hyperparameters"], [66, 4, 1, "", "get_subnet_owner_hotkey"], [66, 4, 1, "", "get_subnet_reveal_period_epochs"], [66, 4, 1, "", "get_subnet_validator_permits"], [66, 4, 1, "", "get_subnets"], [66, 4, 1, "", "get_total_subnets"], [66, 4, 1, "", "get_uid_for_hotkey_on_subnet"], [66, 4, 1, "", "immunity_period"], [66, 4, 1, "", "is_hotkey_registered_on_subnet"], [66, 4, 1, "", "is_subnet_active"], [66, 4, 1, "", "max_weight_limit"], [66, 4, 1, "", "min_allowed_weights"], [66, 4, 1, "", "recycle"], [66, 4, 1, "", "register_subnet"], [66, 4, 1, "", "set_subnet_identity"], [66, 4, 1, "", "subnet"], [66, 4, 1, "", "subnet_exists"], [66, 4, 1, "", "subnetwork_n"], [66, 4, 1, "", "tempo"], [66, 4, 1, "", "weights"], [66, 4, 1, "", "weights_rate_limit"]], "bittensor.core.subtensor_api.utils": [[67, 5, 1, "", "add_legacy_methods"]], "bittensor.core.subtensor_api.wallets": [[68, 1, 1, "", "Wallets"]], "bittensor.core.subtensor_api.wallets.Wallets": [[68, 4, 1, "", "does_hotkey_exist"], [68, 4, 1, "", "filter_netuids_by_registered_hotkeys"], [68, 4, 1, "", "get_balance"], [68, 4, 1, "", "get_balances"], [68, 4, 1, "", "get_children"], [68, 4, 1, "", "get_children_pending"], [68, 4, 1, "", "get_delegate_by_hotkey"], [68, 4, 1, "", "get_delegate_take"], [68, 4, 1, "", "get_delegated"], [68, 4, 1, "", "get_hotkey_owner"], [68, 4, 1, "", "get_hotkey_stake"], [68, 4, 1, "", "get_minimum_required_stake"], [68, 4, 1, "", "get_netuids_for_hotkey"], [68, 4, 1, "", "get_owned_hotkeys"], [68, 4, 1, "", "get_stake"], [68, 4, 1, "", "get_stake_add_fee"], [68, 4, 1, "", "get_stake_for_coldkey"], [68, 4, 1, "", "get_stake_for_coldkey_and_hotkey"], [68, 4, 1, "", "get_stake_for_hotkey"], [68, 4, 1, "", "get_stake_info_for_coldkey"], [68, 4, 1, "", "get_stake_movement_fee"], [68, 4, 1, "", "get_transfer_fee"], [68, 4, 1, "", "get_unstake_fee"], [68, 4, 1, "", "is_hotkey_delegate"], [68, 4, 1, "", "is_hotkey_registered"], [68, 4, 1, "", "is_hotkey_registered_any"]], "bittensor.core.synapse": [[69, 1, 1, "", "Synapse"], [69, 1, 1, "", "TerminalInfo"], [69, 5, 1, "", "cast_float"], [69, 5, 1, "", "cast_int"], [69, 5, 1, "", "get_size"]], "bittensor.core.synapse.Synapse": [[69, 2, 1, "", "__setattr__"], [69, 4, 1, "", "axon"], [69, 3, 1, "id0", "body_hash"], [69, 4, 1, "", "computed_body_hash"], [69, 4, 1, "", "dendrite"], [69, 2, 1, "id1", "deserialize"], [69, 3, 1, "", "failed_verification"], [69, 2, 1, "id2", "from_headers"], [69, 2, 1, "", "get_required_fields"], [69, 2, 1, "id3", "get_total_size"], [69, 4, 1, "", "header_size"], [69, 3, 1, "", "is_blacklist"], [69, 3, 1, "", "is_failure"], [69, 3, 1, "", "is_success"], [69, 3, 1, "", "is_timeout"], [69, 4, 1, "", "model_config"], [69, 4, 1, "", "name"], [69, 2, 1, "id4", "parse_headers_to_inputs"], [69, 4, 1, "", "required_hash_fields"], [69, 2, 1, "", "set_name_type"], [69, 4, 1, "", "timeout"], [69, 2, 1, "id5", "to_headers"], [69, 4, 1, "", "total_size"]], "bittensor.core.synapse.TerminalInfo": [[69, 4, 1, "", "hotkey"], [69, 4, 1, "", "ip"], [69, 4, 1, "", "model_config"], [69, 4, 1, "", "nonce"], [69, 4, 1, "", "port"], [69, 4, 1, "", "process_time"], [69, 4, 1, "", "signature"], [69, 4, 1, "", "status_code"], [69, 4, 1, "", "status_message"], [69, 4, 1, "", "uuid"], [69, 4, 1, "", "version"]], "bittensor.core.tensor": [[70, 1, 1, "", "DTypes"], [70, 1, 1, "", "Tensor"], [70, 5, 1, "", "cast_dtype"], [70, 5, 1, "", "cast_shape"], [70, 6, 1, "", "dtypes"], [70, 1, 1, "", "tensor"]], "bittensor.core.tensor.DTypes": [[70, 4, 1, "", "torch"]], "bittensor.core.tensor.Tensor": [[70, 4, 1, "", "buffer"], [70, 2, 1, "", "deserialize"], [70, 4, 1, "", "dtype"], [70, 4, 1, "", "model_config"], [70, 2, 1, "", "numpy"], [70, 2, 1, "", "serialize"], [70, 4, 1, "", "shape"], [70, 2, 1, "", "tensor"], [70, 2, 1, "", "tolist"]], "bittensor.core.threadpool": [[71, 7, 1, "", "BrokenThreadPool"], [71, 6, 1, "", "NULL_ENTRY"], [71, 1, 1, "", "PriorityThreadPoolExecutor"], [71, 6, 1, "", "logger"]], "bittensor.core.threadpool.PriorityThreadPoolExecutor": [[71, 2, 1, "", "add_args"], [71, 2, 1, "", "config"], [71, 3, 1, "", "is_empty"], [71, 2, 1, "", "shutdown"], [71, 2, 1, "", "submit"]], "bittensor.core.timelock": [[72, 5, 1, "", "decrypt"], [72, 5, 1, "", "encrypt"], [72, 5, 1, "", "wait_reveal_and_decrypt"]], "bittensor.core.types": [[73, 1, 1, "", "AxonServeCallParams"], [73, 1, 1, "", "ParamWithTypes"], [73, 1, 1, "", "PrometheusServeCallParams"], [73, 1, 1, "", "SubtensorMixin"]], "bittensor.core.types.AxonServeCallParams": [[73, 4, 1, "", "certificate"], [73, 4, 1, "", "coldkey"], [73, 2, 1, "", "copy"], [73, 2, 1, "", "dict"], [73, 4, 1, "", "hotkey"], [73, 4, 1, "", "ip"], [73, 4, 1, "", "ip_type"], [73, 4, 1, "", "netuid"], [73, 4, 1, "", "placeholder1"], [73, 4, 1, "", "placeholder2"], [73, 4, 1, "", "port"], [73, 4, 1, "", "protocol"], [73, 4, 1, "", "version"]], "bittensor.core.types.ParamWithTypes": [[73, 4, 1, "", "name"], [73, 4, 1, "", "type"]], "bittensor.core.types.PrometheusServeCallParams": [[73, 4, 1, "", "ip"], [73, 4, 1, "", "ip_type"], [73, 4, 1, "", "netuid"], [73, 4, 1, "", "port"], [73, 4, 1, "", "version"]], "bittensor.core.types.SubtensorMixin": [[73, 2, 1, "", "add_args"], [73, 4, 1, "", "chain_endpoint"], [73, 2, 1, "", "config"], [73, 2, 1, "", "help"], [73, 4, 1, "", "log_verbose"], [73, 4, 1, "", "network"], [73, 2, 1, "", "setup_config"]], "bittensor.utils": [[85, 1, 1, "", "Certificate"], [85, 6, 1, "", "RAOPERTAO"], [85, 6, 1, "", "U16_MAX"], [85, 6, 1, "", "U64_MAX"], [85, 1, 1, "", "UnlockStatus"], [85, 6, 1, "", "VersionCheckError"], [75, 0, 0, "-", "axon_utils"], [76, 0, 0, "-", "balance"], [81, 0, 0, "-", "btlogging"], [85, 6, 1, "", "check_version"], [85, 5, 1, "", "decode_hex_identity_dict"], [85, 5, 1, "", "determine_chain_endpoint_and_network"], [83, 0, 0, "-", "easy_imports"], [85, 5, 1, "", "float_to_u64"], [85, 5, 1, "", "format_error_message"], [84, 0, 0, "-", "formatting"], [85, 5, 1, "", "get_explorer_url_for_network"], [85, 5, 1, "", "get_hash"], [85, 6, 1, "", "hex_to_bytes"], [85, 5, 1, "", "is_valid_bittensor_address_or_public_key"], [85, 5, 1, "", "is_valid_ss58_address"], [85, 6, 1, "", "logging"], [86, 0, 0, "-", "mock"], [88, 0, 0, "-", "networking"], [90, 0, 0, "-", "registration"], [85, 5, 1, "", "ss58_address_to_bytes"], [85, 6, 1, "", "ss58_decode"], [85, 5, 1, "", "ss58_to_vec_u8"], [85, 5, 1, "", "strtobool"], [93, 0, 0, "-", "subnets"], [95, 0, 0, "-", "substrate_utils"], [85, 6, 1, "", "torch"], [85, 5, 1, "", "u16_normalized_float"], [85, 5, 1, "", "u64_normalized_float"], [85, 5, 1, "", "unlock_key"], [85, 6, 1, "", "use_torch"], [85, 5, 1, "", "validate_chain_endpoint"], [97, 0, 0, "-", "version"], [85, 6, 1, "", "version_checking"], [98, 0, 0, "-", "weight_utils"]], "bittensor.utils.UnlockStatus": [[85, 4, 1, "", "message"], [85, 4, 1, "", "success"]], "bittensor.utils.axon_utils": [[75, 6, 1, "", "ALLOWED_DELTA"], [75, 6, 1, "", "NANOSECONDS_IN_SECOND"], [75, 5, 1, "", "allowed_nonce_window_ns"], [75, 5, 1, "", "calculate_diff_seconds"]], "bittensor.utils.balance": [[76, 1, 1, "", "Balance"], [76, 1, 1, "", "FixedPoint"], [76, 5, 1, "", "check_and_convert_to_balance"], [76, 5, 1, "", "fixed_to_float"], [76, 5, 1, "", "rao"], [76, 5, 1, "", "tao"]], "bittensor.utils.balance.Balance": [[76, 2, 1, "", "from_float"], [76, 2, 1, "", "from_rao"], [76, 2, 1, "", "from_tao"], [76, 2, 1, "", "get_unit"], [76, 4, 1, "", "netuid"], [76, 4, 1, "", "rao"], [76, 4, 1, "", "rao_unit"], [76, 2, 1, "", "set_unit"], [76, 3, 1, "", "tao"], [76, 4, 1, "", "unit"]], "bittensor.utils.balance.FixedPoint": [[76, 4, 1, "", "bits"]], "bittensor.utils.btlogging": [[77, 0, 0, "-", "console"], [78, 0, 0, "-", "defines"], [79, 0, 0, "-", "format"], [80, 0, 0, "-", "helpers"], [81, 6, 1, "", "logging"], [82, 0, 0, "-", "loggingmachine"]], "bittensor.utils.btlogging.console": [[77, 1, 1, "", "BittensorConsole"]], "bittensor.utils.btlogging.console.BittensorConsole": [[77, 2, 1, "", "critical"], [77, 2, 1, "", "debug"], [77, 2, 1, "", "error"], [77, 2, 1, "", "info"], [77, 4, 1, "", "logger"], [77, 2, 1, "", "success"], [77, 2, 1, "", "warning"]], "bittensor.utils.btlogging.defines": [[78, 6, 1, "", "BASE_LOG_FORMAT"], [78, 6, 1, "", "BITTENSOR_LOGGER_NAME"], [78, 6, 1, "", "DATE_FORMAT"], [78, 6, 1, "", "DEFAULT_LOG_BACKUP_COUNT"], [78, 6, 1, "", "DEFAULT_LOG_FILE_NAME"], [78, 6, 1, "", "DEFAULT_MAX_ROTATING_LOG_FILE_SIZE"], [78, 6, 1, "", "TRACE_LOG_FORMAT"]], "bittensor.utils.btlogging.format": [[79, 1, 1, "", "BtFileFormatter"], [79, 1, 1, "", "BtStreamFormatter"], [79, 6, 1, "", "DEFAULT_LOG_FORMAT"], [79, 6, 1, "", "DEFAULT_TRACE_FORMAT"], [79, 6, 1, "", "LOG_FORMATS"], [79, 6, 1, "", "LOG_TRACE_FORMATS"], [79, 6, 1, "", "SUCCESS_LEVEL_NUM"], [79, 6, 1, "", "TRACE_LEVEL_NUM"], [79, 6, 1, "", "color_map"], [79, 6, 1, "", "emoji_map"], [79, 6, 1, "", "log_level_color_prefix"]], "bittensor.utils.btlogging.format.BtFileFormatter": [[79, 2, 1, "", "format"], [79, 2, 1, "", "formatTime"]], "bittensor.utils.btlogging.format.BtStreamFormatter": [[79, 2, 1, "", "format"], [79, 2, 1, "", "formatTime"], [79, 2, 1, "", "set_trace"], [79, 4, 1, "", "trace"]], "bittensor.utils.btlogging.helpers": [[80, 5, 1, "", "all_logger_names"], [80, 5, 1, "", "all_loggers"], [80, 5, 1, "", "get_max_logger_name_length"]], "bittensor.utils.btlogging.loggingmachine": [[82, 6, 1, "", "CUSTOM_LOGGER_METHOD_STACK_LEVEL"], [82, 1, 1, "", "LoggingConfig"], [82, 1, 1, "", "LoggingMachine"]], "bittensor.utils.btlogging.loggingmachine.LoggingConfig": [[82, 4, 1, "", "debug"], [82, 4, 1, "", "info"], [82, 4, 1, "", "logging_dir"], [82, 4, 1, "", "record_log"], [82, 4, 1, "", "trace"]], "bittensor.utils.btlogging.loggingmachine.LoggingMachine": [[82, 4, 1, "", "Debug"], [82, 4, 1, "", "Default"], [82, 4, 1, "", "Disabled"], [82, 4, 1, "", "Info"], [82, 4, 1, "", "Trace"], [82, 4, 1, "", "Warning"], [82, 2, 1, "", "add_args"], [82, 2, 1, "", "after_disable_debug"], [82, 2, 1, "", "after_disable_trace"], [82, 2, 1, "", "after_enable_debug"], [82, 2, 1, "", "after_enable_default"], [82, 2, 1, "", "after_enable_info"], [82, 2, 1, "", "after_enable_trace"], [82, 2, 1, "", "after_enable_warning"], [82, 2, 1, "", "after_transition"], [82, 2, 1, "", "before_disable_debug"], [82, 2, 1, "", "before_disable_logging"], [82, 2, 1, "", "before_disable_trace"], [82, 2, 1, "", "before_enable_console"], [82, 2, 1, "", "before_enable_debug"], [82, 2, 1, "", "before_enable_default"], [82, 2, 1, "", "before_enable_info"], [82, 2, 1, "", "before_enable_trace"], [82, 2, 1, "", "before_enable_warning"], [82, 2, 1, "", "before_transition"], [82, 2, 1, "", "check_config"], [82, 2, 1, "", "config"], [82, 4, 1, "", "console"], [82, 2, 1, "", "critical"], [82, 2, 1, "", "debug"], [82, 2, 1, "", "deregister_primary_logger"], [82, 4, 1, "", "disable_debug"], [82, 4, 1, "", "disable_info"], [82, 4, 1, "", "disable_logging"], [82, 2, 1, "", "disable_third_party_loggers"], [82, 4, 1, "", "disable_trace"], [82, 4, 1, "", "disable_warning"], [82, 4, 1, "", "enable_console"], [82, 4, 1, "", "enable_debug"], [82, 4, 1, "", "enable_default"], [82, 4, 1, "", "enable_info"], [82, 2, 1, "", "enable_third_party_loggers"], [82, 4, 1, "", "enable_trace"], [82, 4, 1, "", "enable_warning"], [82, 2, 1, "", "error"], [82, 2, 1, "", "exception"], [82, 2, 1, "", "get_config"], [82, 2, 1, "", "get_level"], [82, 2, 1, "", "get_queue"], [82, 2, 1, "", "help"], [82, 2, 1, "", "info"], [82, 2, 1, "", "off"], [82, 2, 1, "", "on"], [82, 2, 1, "", "register_primary_logger"], [82, 2, 1, "", "setLevel"], [82, 2, 1, "", "set_config"], [82, 2, 1, "", "set_console"], [82, 2, 1, "", "set_debug"], [82, 2, 1, "", "set_default"], [82, 2, 1, "", "set_info"], [82, 2, 1, "", "set_trace"], [82, 2, 1, "", "set_warning"], [82, 2, 1, "", "success"], [82, 2, 1, "", "trace"], [82, 2, 1, "", "warning"]], "bittensor.utils.easy_imports": [[83, 6, 1, "", "async_subtensor"], [83, 6, 1, "", "axon"], [83, 6, 1, "", "config"], [83, 5, 1, "", "debug"], [83, 6, 1, "", "dendrite"], [83, 6, 1, "", "extrinsics_subpackage"], [83, 5, 1, "", "info"], [83, 6, 1, "", "keyfile"], [83, 6, 1, "", "metagraph"], [83, 6, 1, "", "mock_subpackage"], [83, 6, 1, "", "subtensor"], [83, 6, 1, "", "synapse"], [83, 5, 1, "", "trace"], [83, 6, 1, "", "wallet"], [83, 5, 1, "", "warning"]], "bittensor.utils.formatting": [[84, 5, 1, "", "get_human_readable"], [84, 5, 1, "", "millify"]], "bittensor.utils.mock": [[87, 0, 0, "-", "subtensor_mock"]], "bittensor.utils.mock.subtensor_mock": [[87, 1, 1, "", "AxonInfoDict"], [87, 6, 1, "", "BlockNumber"], [87, 1, 1, "", "InfoDict"], [87, 1, 1, "", "MockChainState"], [87, 1, 1, "", "MockMapResult"], [87, 1, 1, "", "MockSubtensor"], [87, 1, 1, "", "MockSubtensorState"], [87, 1, 1, "", "MockSubtensorValue"], [87, 1, 1, "", "MockSystemState"], [87, 1, 1, "", "PrometheusInfoDict"], [87, 1, 1, "", "ReusableCoroutine"]], "bittensor.utils.mock.subtensor_mock.AxonInfoDict": [[87, 4, 1, "", "block"], [87, 2, 1, "", "default"], [87, 4, 1, "", "ip"], [87, 4, 1, "", "ip_type"], [87, 4, 1, "", "placeholder1"], [87, 4, 1, "", "placeholder2"], [87, 4, 1, "", "port"], [87, 4, 1, "", "protocol"], [87, 4, 1, "", "version"]], "bittensor.utils.mock.subtensor_mock.InfoDict": [[87, 2, 1, "", "default"]], "bittensor.utils.mock.subtensor_mock.MockChainState": [[87, 4, 1, "", "SubtensorModule"], [87, 4, 1, "", "System"]], "bittensor.utils.mock.subtensor_mock.MockMapResult": [[87, 4, 1, "", "records"]], "bittensor.utils.mock.subtensor_mock.MockSubtensor": [[87, 4, 1, "", "block_number"], [87, 4, 1, "", "chain_state"], [87, 2, 1, "", "commit"], [87, 2, 1, "", "create_subnet"], [87, 2, 1, "", "do_block_step"], [87, 2, 1, "", "do_serve_axon"], [87, 2, 1, "", "do_serve_prometheus"], [87, 2, 1, "", "do_set_weights"], [87, 2, 1, "", "do_transfer"], [87, 2, 1, "", "force_register_neuron"], [87, 2, 1, "", "force_set_balance"], [87, 2, 1, "", "get_balance"], [87, 2, 1, "", "get_block_hash"], [87, 2, 1, "", "get_commitment"], [87, 2, 1, "", "get_current_block"], [87, 2, 1, "", "get_transfer_fee"], [87, 2, 1, "", "min_required_stake"], [87, 2, 1, "", "neuron_for_uid"], [87, 2, 1, "", "neuron_for_uid_lite"], [87, 2, 1, "", "neurons"], [87, 2, 1, "", "neurons_lite"], [87, 2, 1, "", "query_constant"], [87, 2, 1, "", "query_map_subtensor"], [87, 2, 1, "", "query_subtensor"], [87, 2, 1, "", "reset"], [87, 2, 1, "", "set_difficulty"], [87, 2, 1, "", "setup"], [87, 4, 1, "", "sudo_force_set_balance"]], "bittensor.utils.mock.subtensor_mock.MockSubtensorState": [[87, 4, 1, "", "Active"], [87, 4, 1, "", "Delegates"], [87, 4, 1, "", "Difficulty"], [87, 4, 1, "", "ImmunityPeriod"], [87, 4, 1, "", "Kappa"], [87, 4, 1, "", "NetworksAdded"], [87, 4, 1, "", "Rho"], [87, 4, 1, "", "Stake"], [87, 4, 1, "", "ValidatorBatchSize"]], "bittensor.utils.mock.subtensor_mock.MockSubtensorValue": [[87, 4, 1, "", "value"]], "bittensor.utils.mock.subtensor_mock.MockSystemState": [[87, 4, 1, "", "Account"]], "bittensor.utils.mock.subtensor_mock.PrometheusInfoDict": [[87, 4, 1, "", "block"], [87, 2, 1, "", "default"], [87, 4, 1, "", "ip"], [87, 4, 1, "", "ip_type"], [87, 4, 1, "", "port"], [87, 4, 1, "", "version"]], "bittensor.utils.mock.subtensor_mock.ReusableCoroutine": [[87, 4, 1, "", "coroutine"], [87, 2, 1, "", "reset"]], "bittensor.utils.networking": [[88, 7, 1, "", "ExternalIPNotFound"], [88, 5, 1, "", "get_external_ip"], [88, 5, 1, "", "get_formatted_ws_endpoint_url"], [88, 5, 1, "", "int_to_ip"], [88, 5, 1, "", "ip__str__"], [88, 5, 1, "", "ip_to_int"], [88, 5, 1, "", "ip_version"]], "bittensor.utils.registration": [[89, 0, 0, "-", "async_pow"], [91, 0, 0, "-", "pow"], [92, 0, 0, "-", "register_cuda"]], "bittensor.utils.registration.async_pow": [[89, 5, 1, "", "create_pow_async"]], "bittensor.utils.registration.pow": [[91, 1, 1, "", "CUDASolver"], [91, 1, 1, "", "Console"], [91, 1, 1, "", "LazyLoadedTorch"], [91, 1, 1, "", "POWSolution"], [91, 1, 1, "", "RegistrationStatistics"], [91, 1, 1, "", "RegistrationStatisticsLogger"], [91, 1, 1, "", "Solver"], [91, 1, 1, "", "Status"], [91, 1, 1, "", "UsingSpawnStartMethod"], [91, 5, 1, "", "create_pow"], [91, 5, 1, "", "get_cpu_count"], [91, 5, 1, "", "legacy_torch_api_compat"], [91, 5, 1, "", "log_no_torch_error"], [91, 5, 1, "", "terminate_workers_and_wait_for_exit"], [91, 6, 1, "", "torch"], [91, 5, 1, "", "update_curr_block"], [91, 5, 1, "", "use_torch"]], "bittensor.utils.registration.pow.CUDASolver": [[91, 4, 1, "", "dev_id"], [91, 2, 1, "", "run"], [91, 4, 1, "", "tpb"]], "bittensor.utils.registration.pow.Console": [[91, 2, 1, "", "log"], [91, 2, 1, "", "status"]], "bittensor.utils.registration.pow.POWSolution": [[91, 4, 1, "", "block_number"], [91, 4, 1, "", "difficulty"], [91, 2, 1, "", "is_stale"], [91, 2, 1, "", "is_stale_async"], [91, 4, 1, "", "nonce"], [91, 4, 1, "", "seal"]], "bittensor.utils.registration.pow.RegistrationStatistics": [[91, 4, 1, "", "block_hash"], [91, 4, 1, "", "block_number"], [91, 4, 1, "", "difficulty"], [91, 4, 1, "", "hash_rate"], [91, 4, 1, "", "hash_rate_perpetual"], [91, 4, 1, "", "rounds_total"], [91, 4, 1, "", "time_average"], [91, 4, 1, "", "time_spent"], [91, 4, 1, "", "time_spent_total"]], "bittensor.utils.registration.pow.RegistrationStatisticsLogger": [[91, 4, 1, "", "console"], [91, 2, 1, "", "get_status_message"], [91, 2, 1, "", "start"], [91, 4, 1, "", "status"], [91, 2, 1, "", "stop"], [91, 2, 1, "", "update"]], "bittensor.utils.registration.pow.Solver": [[91, 2, 1, "", "run"]], "bittensor.utils.registration.pow.Status": [[91, 2, 1, "", "start"], [91, 2, 1, "", "stop"], [91, 2, 1, "", "update"]], "bittensor.utils.registration.register_cuda": [[92, 5, 1, "", "log_cuda_errors"], [92, 5, 1, "", "reset_cuda"], [92, 5, 1, "", "solve_cuda"]], "bittensor.utils.subnets": [[93, 1, 1, "", "SubnetsAPI"]], "bittensor.utils.subnets.SubnetsAPI": [[93, 4, 1, "", "dendrite"], [93, 2, 1, "", "prepare_synapse"], [93, 2, 1, "", "process_responses"], [93, 2, 1, "", "query_api"], [93, 4, 1, "", "wallet"]], "bittensor.utils.substrate_utils": [[94, 0, 0, "-", "hasher"], [96, 0, 0, "-", "storage"]], "bittensor.utils.substrate_utils.hasher": [[94, 5, 1, "", "blake2_128"], [94, 5, 1, "", "blake2_128_concat"], [94, 5, 1, "", "blake2_256"], [94, 5, 1, "", "identity"], [94, 5, 1, "", "two_x64_concat"], [94, 5, 1, "", "xxh128"], [94, 5, 1, "", "xxh64"]], "bittensor.utils.substrate_utils.storage": [[96, 1, 1, "", "StorageKey"]], "bittensor.utils.substrate_utils.storage.StorageKey": [[96, 2, 1, "", "convert_storage_parameter"], [96, 2, 1, "", "create_from_data"], [96, 2, 1, "", "create_from_storage_function"], [96, 4, 1, "", "data"], [96, 2, 1, "", "decode_scale_value"], [96, 2, 1, "", "generate"], [96, 4, 1, "", "metadata"], [96, 4, 1, "", "metadata_storage_function"], [96, 4, 1, "", "pallet"], [96, 4, 1, "", "params"], [96, 4, 1, "", "params_encoded"], [96, 4, 1, "", "runtime_config"], [96, 4, 1, "", "storage_function"], [96, 2, 1, "", "to_hex"], [96, 4, 1, "", "value_scale_type"]], "bittensor.utils.version": [[97, 6, 1, "", "VERSION_CHECK_THRESHOLD"], [97, 7, 1, "", "VersionCheckError"], [97, 5, 1, "", "check_latest_version_in_pypi"], [97, 5, 1, "", "check_version"], [97, 5, 1, "", "get_and_save_latest_version"], [97, 5, 1, "", "version_checking"]], "bittensor.utils.weight_utils": [[98, 6, 1, "", "U16_MAX"], [98, 6, 1, "", "U32_MAX"], [98, 5, 1, "", "convert_and_normalize_weights_and_uids"], [98, 5, 1, "", "convert_bond_uids_and_vals_to_tensor"], [98, 5, 1, "", "convert_root_weight_uids_and_vals_to_tensor"], [98, 5, 1, "", "convert_uids_and_weights"], [98, 5, 1, "", "convert_weight_uids_and_vals_to_tensor"], [98, 5, 1, "", "convert_weights_and_uids_for_emit"], [98, 5, 1, "", "generate_weight_hash"], [98, 5, 1, "", "normalize_max_weight"], [98, 5, 1, "", "process_weights"], [98, 5, 1, "", "process_weights_for_netuid"]]}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "method", "Python method"], "3": ["py", "property", "Python property"], "4": ["py", "attribute", "Python attribute"], "5": ["py", "function", "Python function"], "6": ["py", "data", "Python data"], "7": ["py", "exception", "Python exception"]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method", "3": "py:property", "4": "py:attribute", "5": "py:function", "6": "py:data", "7": "py:exception"}, "terms": {"": [0, 1, 4, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 53, 55, 56, 69, 70, 73, 76, 78, 79, 80, 85, 87, 89, 91, 93, 96, 98], "0": [0, 1, 2, 10, 24, 26, 28, 29, 30, 31, 32, 36, 37, 38, 41, 42, 43, 44, 45, 46, 50, 54, 56, 61, 69, 72, 75, 76, 83, 85, 87, 88, 89, 91, 92, 98], "005": [0, 28, 32, 36, 41, 46, 50, 56], "0x0813029319030129u4120u10841824y0182u091u230912u": 69, "1": [0, 1, 10, 21, 53, 56, 69, 70, 71, 72, 73, 82, 85, 87, 92, 98, 99], "10": [10, 21, 24, 69, 72, 76, 78], "1000": [4, 5], "1000000000": [75, 85], "1024": 1, "11": [10, 21], "111": 69, "111111": 69, "113": 1, "11ee": 69, "12": [0, 10, 21, 24, 26, 38, 54, 56, 72, 93], "1200": 53, "122": [31, 44], "123": [53, 69, 72], "1234": [0, 56], "12345": 53, "127": 69, "128": [31, 44, 76], "13": [10, 21], "137": 79, "14": [10, 21], "147": [0, 56], "15": [10, 21, 69, 72, 97], "152": [0, 56], "16": [0, 10, 21, 56, 94], "17": 10, "18": [10, 54], "18446744073709551615": 85, "19": 10, "192": [1, 31, 44], "198": 69, "1cec": 69, "2": [0, 1, 10, 21, 53, 56, 69, 70, 73, 79, 82, 87, 94], "20": 10, "200": 69, "203": 1, "21": [10, 79], "22": 10, "23": [10, 69], "24": 10, "25": [10, 72], "256": [0, 29, 42, 56, 69, 89, 91], "26": 10, "26214400": 78, "27": 10, "28": 10, "29": 10, "3": [0, 10, 21, 29, 42, 56, 69, 72, 73, 79, 82, 83, 88, 91], "30": [10, 69], "300": [53, 85], "31": [10, 31, 44], "32": [10, 89, 91, 94], "33": 10, "3339": 79, "34": [10, 79], "35": 10, "36": 10, "360": [0, 56], "37": 10, "38": [10, 88], "39": 10, "3rd": 82, "4": [2, 10, 21, 31, 44, 69, 73, 88], "40": 10, "400": 1, "4000000000": 75, "401": 69, "4028237e": 88, "403": 69, "408": 69, "41": 10, "42": [10, 54], "422": 24, "4294967295": 98, "43": 10, "44": 10, "443": 54, "45": 10, "46": 10, "47": 10, "48": [10, 54], "49": 10, "5": [0, 10, 21, 25, 28, 36, 41, 46, 50, 56, 72, 73, 79], "50": 10, "51": 10, "52": 10, "53": 10, "54": 10, "55": 10, "56": 10, "57": 10, "58": 10, "59": 10, "5ecbd69c": 69, "5enjdgnqqwnul2hcadxeetn2oqtxzw6bmbe936kfy2pfz1j1": 69, "5fhnew46xgxgs5muiveu4sbtygbzmstuspzc92uhjjm694ti": [0, 56], "5grwvaef5zxb26fz9rcqpdws57cterhpnehxcpcnohgkutqi": [0, 56], "6": [10, 21, 53, 88], "60": 10, "61": 10, "62": 10, "63": 10, "64": [10, 76, 92], "65": 10, "65535": [1, 85, 98], "66": 10, "67": 10, "68": 10, "69": 10, "7": [10, 21, 83], "70": 10, "7002000": 1, "7070": 1, "71": 10, "8": [0, 10, 21, 37, 45, 56, 69, 85], "8080": 69, "81": 0, "86400": 97, "9": [10, 21, 76], "9090": 1, "9221": [31, 44], "9282": 69, "9944": 54, "9945": 61, "A": [0, 1, 2, 11, 12, 17, 21, 22, 23, 24, 25, 26, 29, 31, 38, 42, 44, 51, 53, 55, 56, 69, 71, 72, 73, 75, 76, 79, 82, 85, 87, 91, 96], "AS": 53, "And": [0, 56], "As": 87, "Being": [0, 56], "But": 24, "By": [0, 1, 36, 50, 56, 69], "For": [0, 24, 53, 56, 69, 70, 72, 73, 87], "If": [0, 1, 2, 6, 21, 24, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 53, 56, 61, 67, 69, 70, 71, 72, 73, 75, 76, 79, 83, 85, 87, 89, 91, 98], "In": [24, 53, 69, 88], "It": [0, 1, 24, 31, 44, 53, 55, 56, 69, 71, 72, 73, 76, 80, 81, 82, 87, 91], "Not": 69, "Of": 88, "Or": 85, "The": [0, 1, 2, 9, 11, 12, 13, 15, 16, 17, 21, 22, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 53, 55, 56, 61, 69, 70, 71, 72, 73, 75, 76, 79, 80, 83, 85, 87, 88, 89, 91, 92, 93, 97, 98], "Then": 56, "There": [0, 56], "These": [0, 1, 30, 37, 43, 45, 53, 56, 69, 98], "To": 82, "With": [0, 56], "__repr__": 24, "__setattr__": 69, "__str__": [24, 85], "_base": 71, "_do_reveal_weight": [37, 39], "_mock": [0, 56, 73, 87], "_primary_logg": 82, "_solverbas": 91, "abc": [53, 55, 73, 87, 93], "abil": [1, 53, 77], "abl": 24, "about": [0, 1, 2, 15, 53, 56, 69, 87], "abov": [24, 35, 49, 79], "absolut": 24, "abstract": [24, 53, 55, 93, 96], "abstractmethod": [23, 87], "abus": 1, "accept": [1, 71, 82], "access": [0, 1, 24, 53, 56, 61, 69, 87, 98], "accord": [1, 31, 44, 55, 69], "account": [0, 21, 25, 30, 32, 35, 37, 43, 45, 46, 49, 56, 87, 98], "account_id_byt": 21, "accountid": [15, 21, 22], "accru": 53, "accrual": [0, 56], "accumul": [53, 55], "accur": [23, 25, 53, 69, 70, 71, 73, 76, 85, 87, 88, 97], "achiev": 53, "aclose_sess": 24, "across": [0, 51, 53, 56, 69, 91], "act": [0, 1, 24, 53, 56], "action": [0, 56, 82], "activ": [0, 1, 10, 11, 12, 17, 20, 24, 53, 56, 80, 87, 93], "activity_cutoff": [10, 17], "activitycutoff": 10, "actual": [0, 1, 31, 44, 56], "ad": [0, 1, 32, 56, 61, 67, 73, 79, 82], "adapt": [1, 53], "add": [0, 1, 32, 46, 56, 69, 73, 79, 82, 98], "add_arg": [1, 23, 61, 71, 73, 82], "add_legacy_method": 67, "add_stak": [0, 56, 60, 65], "add_stake_extrins": [32, 46], "add_stake_multipl": [0, 56, 60, 65], "add_stake_multiple_extrins": [32, 46], "addit": [0, 3, 4, 18, 29, 42, 53, 55, 56, 69, 98], "addition": [1, 69], "additional_data": 69, "address": [0, 1, 2, 4, 9, 13, 16, 21, 22, 24, 28, 32, 34, 35, 36, 41, 46, 48, 49, 50, 51, 53, 56, 69, 83, 85, 87, 98], "adher": 24, "adjust": [0, 17, 56], "adjustment_alpha": [10, 17], "adjustment_interv": [10, 17], "adjustmentalpha": 10, "adjustmentinterv": 10, "advanc": [0, 56], "adversari": 1, "advis": [1, 24, 53], "after": [0, 1, 15, 24, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 53, 55, 56, 69, 71, 72, 82, 87, 91, 98], "after_disable_debug": 82, "after_disable_trac": 82, "after_enable_debug": 82, "after_enable_default": 82, "after_enable_info": 82, "after_enable_trac": 82, "after_enable_warn": 82, "after_transit": 82, "ag": 72, "against": [0, 1, 28, 41, 56], "agre": 53, "agreement": 53, "ai": [53, 54], "aid": [0, 56, 69], "aiohttp": [24, 55], "akin": 53, "algorithm": [0, 1, 31, 44, 53, 56], "alic": [0, 56], "align": [0, 53, 56], "aliv": [0, 35, 49, 56], "all": [0, 1, 24, 25, 32, 35, 36, 46, 49, 50, 51, 53, 56, 61, 67, 71, 80, 82, 87, 88, 91, 96], "all_hotkei": [0, 56], "all_indic": 10, "all_logg": 80, "all_logger_nam": 80, "all_netuid": [0, 56], "all_stak": 51, "all_subnet": [0, 56, 66], "alloc": [0, 53, 56], "allow": [0, 1, 4, 5, 17, 28, 32, 36, 41, 46, 50, 53, 55, 56, 69, 70, 75, 79, 83, 87, 98], "allow_partial_stak": [0, 28, 32, 36, 41, 46, 50, 56], "allowed_delta": 75, "allowed_nonce_window_n": 75, "along": [29, 42, 72], "alpha": [0, 6, 17, 53, 56, 76], "alpha_dividends_per_hotkei": [10, 53], "alpha_high": [10, 17], "alpha_in": [6, 10], "alpha_in_emiss": [6, 10], "alpha_low": [10, 17], "alpha_out": [6, 10], "alpha_out_emiss": [6, 10], "alpha_slippag": 6, "alpha_stak": [10, 20, 53], "alpha_to_tao": 6, "alpha_to_tao_with_slippag": 6, "alphadividendsperhotkei": 10, "alphahigh": 10, "alphain": 10, "alphainemiss": 10, "alphalow": 10, "alphaout": 10, "alphaoutemiss": 10, "alphastak": 10, "alreadi": [1, 89, 91, 98], "also": [0, 1, 24, 55, 56, 69, 75, 76, 82, 87], "alter": 1, "among": [0, 53, 56], "amount": [0, 4, 6, 11, 12, 28, 32, 35, 36, 41, 46, 49, 50, 51, 53, 56, 72, 76, 87], "an": [0, 1, 2, 6, 11, 21, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 53, 55, 56, 69, 70, 71, 73, 76, 79, 80, 82, 85, 87, 88], "analogi": 24, "analys": 53, "analysi": [0, 53, 56, 69, 87], "analyz": [0, 53, 56, 87], "ani": [0, 1, 2, 8, 9, 23, 24, 25, 29, 32, 36, 42, 46, 50, 53, 55, 56, 58, 69, 70, 72, 85, 87, 91, 92, 93, 96], "announc": [31, 44], "anoth": [0, 23, 28, 41, 53, 56], "any_list": 8, "anyth": 85, "api": [0, 1, 56, 61, 91, 93, 100], "app": 1, "appear": 72, "appli": [1, 10, 69, 79, 98], "applic": [0, 1, 24, 53, 55, 56, 69, 80], "approach": [0, 56], "appropri": [1, 24, 53, 55, 73], "aqueri": 24, "ar": [0, 1, 17, 23, 24, 25, 37, 39, 51, 53, 56, 69, 70, 71, 72, 73, 80, 85, 87, 96, 98], "arbitr": 15, "arbitrari": [0, 24, 56, 87], "arbitration_block": 15, "architectur": [0, 1, 53, 56], "archiv": [53, 54, 73, 85], "archive_entrypoint": 54, "arg": [23, 24, 70, 71, 79, 82, 85, 87, 93], "argpars": [1, 23, 71, 73, 82], "argument": [0, 1, 23, 53, 55, 67, 69, 70, 71, 73, 79, 82, 85, 87, 93], "argumentpars": [1, 23, 71, 73, 82], "aris": 1, "arithmet": 76, "around": [37, 39], "arrai": [0, 53, 56, 70, 91, 98], "asctim": [78, 79], "asgi": 55, "aspect": [0, 1, 53, 56, 69, 87], "assert": [1, 72], "assertionerror": 1, "assess": [0, 1, 53, 56], "asset": 53, "assign": [0, 1, 29, 42, 53, 56, 69], "assist": [0, 56], "associ": [0, 1, 2, 6, 9, 11, 12, 13, 16, 20, 24, 25, 26, 28, 31, 37, 38, 39, 41, 44, 51, 53, 56, 69, 71, 82, 87, 98], "assum": [1, 53, 76], "assur": 1, "asymmetr": 1, "async": [0, 1, 24, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 53, 55, 61, 89, 91, 93], "async_metagraph": 53, "async_pow": [90, 99], "async_substrate_interfac": [0, 21, 56, 87], "async_subtensor": [23, 26, 29, 30, 31, 32, 35, 36, 37, 45, 52, 53, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 68, 83, 89, 91, 99], "asyncex": [40, 99], "asyncgener": 24, "asynchron": [0, 1, 24, 29, 55, 91], "asyncio": 24, "asyncmetagraph": 53, "asyncquerymapresult": 0, "asyncsubtensor": [0, 26, 28, 29, 30, 31, 32, 35, 36, 37, 45, 53, 56, 57, 58, 59, 60, 62, 63, 64, 65, 66, 68, 87, 89, 91], "attach": [1, 69], "attack": 1, "attain": 88, "attempt": [0, 25, 29, 42, 53, 56, 69, 85, 88], "attribut": [0, 4, 11, 56, 69], "authent": [1, 31, 44, 53, 69], "author": [0, 28, 53, 56], "auto": 99, "autoapi": 99, "automat": [0, 24, 53, 56, 69], "avail": [0, 1, 56, 61, 87], "averag": [17, 91], "aw": 88, "await": [0, 24, 55, 61], "axon": [0, 2, 10, 11, 12, 23, 24, 25, 31, 44, 52, 53, 56, 69, 83, 93, 99], "axon_hotkei": 69, "axon_info": [7, 10, 11, 12, 24, 99], "axon_util": [85, 99], "axoninfo": [1, 2, 10, 11, 12, 21, 24, 53], "axoninfodict": 87, "axonmiddlewar": 1, "axonserv": 1, "axonservecallparam": [31, 44, 73, 87], "ay": 14, "b": 53, "b0dc": 69, "b64decod": 69, "back": [1, 24, 55, 69, 72, 96], "backbon": 53, "background": 1, "backoff": [0, 56], "backward": [1, 76, 97], "balanc": [0, 4, 5, 6, 10, 11, 12, 16, 19, 20, 21, 28, 32, 35, 36, 41, 46, 49, 50, 51, 56, 61, 85, 87, 99], "bandwidth": 69, "base": [0, 1, 2, 3, 4, 5, 6, 8, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20, 21, 23, 24, 25, 53, 55, 56, 69, 70, 71, 72, 73, 76, 79, 82, 85, 87, 88, 91, 93, 96, 97, 98], "base64": [21, 69], "base_log_format": 78, "baseclass": 53, "basehttpmiddlewar": 1, "basemodel": [24, 55, 69, 70], "basic": [11, 53, 69], "batch": [0, 56], "becaus": 69, "becom": [0, 56], "been": [1, 24, 55, 69, 71], "befor": [0, 1, 15, 24, 29, 30, 31, 32, 34, 35, 36, 37, 41, 42, 43, 44, 45, 46, 48, 49, 50, 56, 82, 89, 91, 92], "before_disable_debug": 82, "before_disable_log": 82, "before_disable_trac": 82, "before_enable_consol": 82, "before_enable_debug": 82, "before_enable_default": 82, "before_enable_info": 82, "before_enable_trac": 82, "before_enable_warn": 82, "before_transit": 82, "begin": [0, 1, 56], "behavior": [0, 1, 53, 56, 69], "being": [0, 1, 5, 21, 31, 33, 37, 39, 44, 47, 55, 56, 82, 91], "belief": 53, "belong": 56, "below": [0, 56], "benefici": 53, "benefit": [24, 53], "bespok": 93, "between": [0, 1, 6, 29, 41, 42, 53, 56, 69, 75, 76, 82, 98], "beyond": 53, "bind": 1, "bit": 76, "bittensor": 99, "bittensor_logger_nam": [78, 82], "bittensor_wallet": [0, 1, 24, 26, 29, 30, 31, 32, 35, 36, 37, 38, 39, 42, 43, 44, 45, 46, 49, 50, 51, 56, 85, 87, 89, 91, 93], "bittensorconsol": 77, "blacklist": [1, 25, 69], "blacklist_custom": 1, "blacklist_fn": 1, "blacklist_my_synaps": 1, "blacklist_my_synapse_2": 1, "blacklistedexcept": 25, "blake256": [31, 44], "blake2_128": 94, "blake2_128_concat": 94, "blake2_256": 94, "blake2b": 94, "block": [0, 1, 10, 13, 15, 17, 21, 24, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 53, 56, 61, 72, 85, 87, 89, 91, 92], "block_and_hotkey_hash_byt": 92, "block_at_registr": [10, 20, 53], "block_byt": 91, "block_hash": [0, 31, 56, 85, 91], "block_numb": [0, 87, 91], "block_tim": [0, 26, 38, 56, 72], "blockatregistr": 10, "blockchain": [0, 28, 29, 31, 33, 34, 37, 39, 42, 44, 47, 48, 53, 56, 87, 98], "blocknotfound": 25, "blocknumb": 87, "blocks_since_epoch": 19, "blocks_since_last_step": [0, 6, 10, 53, 56, 66], "blocks_since_last_upd": [0, 56, 66], "blocks_until_rev": [0, 56], "blockssincelaststep": 10, "blocktim": 54, "bob": [0, 56], "bodi": [0, 1, 24, 55, 56, 69], "body_hash": 69, "bond": [0, 11, 12, 17, 53, 56, 61, 66, 98], "bonds_as_dict": 11, "bonds_moving_avg": [10, 17], "bondsmovingavg": 10, "bool": [0, 1, 2, 6, 10, 11, 12, 16, 17, 20, 21, 23, 24, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 53, 56, 61, 69, 70, 72, 73, 79, 82, 83, 85, 87, 89, 91, 93], "boolean": [0, 1, 26, 38, 53, 56, 85], "both": [0, 1, 56, 82, 87, 98], "brain": 24, "bridg": 24, "broadcast": 1, "broader": 1, "broken": 25, "brokenexecutor": 71, "brokenthreadpool": 71, "bt": [1, 23, 61, 72, 93], "bt_header_axon_address": 69, "bt_header_dendrite_port": 69, "btfileformatt": 79, "btlog": [85, 99], "btstreamformatt": 79, "btstreamingrespons": 55, "btstreamingresponsemodel": 55, "buffer": [24, 70, 85], "build": 24, "built": 96, "bulk": [0, 56], "burn": [0, 10, 17, 19, 56], "burned_regist": [0, 56, 60], "burned_register_extrins": [29, 42], "byte": [0, 12, 21, 31, 44, 56, 69, 72, 85, 91, 92, 94, 96, 98], "byte_data": 72, "bytes_or_buff": 85, "c": 53, "calcul": [0, 1, 17, 53, 56, 69, 75, 80, 87, 91, 94], "calculate_diff_second": 75, "call": [0, 1, 24, 31, 33, 44, 47, 55, 56, 69, 71, 73, 82, 97], "call_definit": [0, 56], "call_next": 1, "call_param": [31, 44, 87], "call_stream": 24, "callabl": [1, 55, 71], "caller": 1, "can": [0, 1, 9, 24, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 53, 55, 56, 69, 71, 72, 87, 91, 98], "cancel": 71, "cancel_futur": 71, "cannot": [0, 25, 33, 47, 55, 56, 69, 70, 88], "capabl": [1, 31, 44], "captur": 53, "carrier": 69, "case": [0, 1, 24, 56, 96], "cast": 70, "cast_dtyp": 70, "cast_float": 69, "cast_int": 69, "cast_shap": 70, "categori": 69, "caught": [24, 85], "ceas": 1, "center": 79, "central": [1, 53], "certain": [0, 1, 56, 91], "certif": [0, 1, 31, 44, 56, 73, 85], "chain": [0, 1, 3, 16, 21, 25, 29, 30, 31, 32, 35, 36, 37, 42, 43, 44, 45, 46, 49, 50, 54, 56, 61, 73, 85, 87, 98, 99], "chain_data": [0, 1, 24, 51, 52, 53, 56, 87, 99], "chain_endpoint": [53, 61, 73, 85], "chain_ident": [0, 7, 10, 56, 99], "chain_stat": 87, "chainconnectionerror": 25, "chaindatatyp": 21, "chainerror": 25, "chainident": [0, 3, 10, 21, 53, 56], "chainqueryerror": 25, "chaintransactionerror": 25, "challeng": [0, 56, 89, 91], "chang": [0, 41, 56, 77, 79, 83, 87], "characterist": [0, 56, 87], "check": [0, 1, 23, 24, 28, 36, 41, 46, 50, 56, 69, 76, 85, 88, 89, 91, 97], "check_and_convert_to_bal": 76, "check_block": 91, "check_config": [1, 82], "check_latest_version_in_pypi": 97, "check_vers": [85, 97], "child": [0, 25, 56], "childkei": [0, 25, 56], "children": [0, 25, 56], "choic": 85, "chr_transform": 10, "chunk": [24, 55], "claim": [0, 1, 34, 48, 56], "class": [25, 29, 42, 72], "classic": 67, "classmethod": [1, 2, 8, 9, 11, 14, 15, 16, 22, 23, 25, 61, 69, 71, 73, 82, 87, 91, 96], "classvar": 69, "clean": 71, "cleanup": 24, "clear": 55, "cli": [0, 56], "client": [1, 24, 33, 47, 55], "clientrespons": [24, 55], "clientsess": 24, "close": [0, 24, 56, 61], "close_sess": 24, "closur": 24, "code": [1, 24, 69], "cold": [15, 61], "coldkei": [0, 2, 4, 5, 10, 11, 12, 16, 20, 25, 28, 32, 36, 41, 46, 50, 51, 53, 56, 68, 73, 85, 87], "coldkey_ss58": [0, 16, 56], "coldkeypub": [0, 1, 56], "collabor": [0, 53, 56], "collat": 24, "collect": [0, 23, 51, 53, 56, 87], "color": 79, "color_map": 79, "combin": 51, "come": 1, "command": [1, 73], "commit": [0, 17, 21, 22, 25, 26, 37, 38, 39, 56, 61, 87, 98, 99], "commit_data": 22, "commit_hash": [37, 39], "commit_hex": 22, "commit_rev": [27, 40, 99], "commit_reveal_en": [0, 56, 58], "commit_reveal_period": [10, 17], "commit_reveal_v3_extrins": [26, 38], "commit_reveal_weights_en": [10, 17], "commit_weight": [0, 40, 56, 60, 99], "commit_weights_extrins": [37, 39], "commitrevealperiod": 10, "commitrevealweightsen": 10, "committ": 22, "committe": [0, 56], "common": [4, 24, 25, 32, 36, 46, 50], "commun": [0, 1, 53, 56, 69, 93], "compar": [1, 51], "comparison": [1, 76], "compat": [0, 37, 39, 56, 69, 76, 83, 97], "complet": [1, 24, 53, 71], "complex": [0, 1, 53, 56, 69, 87], "compon": [0, 1, 53, 56], "composit": [0, 56], "comprehend": [0, 56, 87], "comprehens": [0, 56, 87], "compress": 69, "comput": [0, 31, 44, 53, 56, 69], "computed_body_hash": 69, "concaten": [69, 94], "concept": 53, "concern": 1, "concurr": [1, 24, 71], "condit": [0, 1, 56, 87], "confid": 1, "config": [0, 1, 52, 53, 55, 56, 61, 69, 70, 71, 73, 82, 83, 87, 99], "configdict": [55, 69, 70], "configur": [0, 1, 23, 53, 55, 56, 61, 69, 70, 73, 82, 87], "confirm": 1, "conflict": 1, "conform": [55, 69, 70], "congest": [0, 56], "connect": [0, 1, 24, 25, 31, 34, 44, 48, 53, 56, 61, 69, 73, 87], "connection_requir": 19, "consensu": [0, 10, 11, 12, 20, 53, 56, 87], "conserv": [0, 56], "consist": [0, 53, 56, 69, 81, 87], "consol": [0, 29, 42, 56, 81, 82, 89, 91, 99], "constant": [0, 17, 56, 78, 87], "constant_nam": [0, 56, 87], "constantli": 53, "constrain": 69, "constraint": 98, "construct": [23, 53, 69], "contact": [0, 29, 42, 56], "contain": [0, 1, 2, 4, 11, 21, 22, 24, 28, 29, 31, 42, 44, 51, 53, 55, 56, 69, 72, 73, 75, 85, 87, 91, 98, 99], "context": [0, 1, 24, 53, 56, 69], "continu": [1, 53], "contribut": [0, 1, 53, 56, 87], "control": [0, 1, 56, 69], "conveni": 69, "convers": [69, 98], "convert": [1, 2, 21, 69, 72, 76, 84, 85, 91, 98], "convert_and_normalize_weights_and_uid": 98, "convert_bond_uids_and_vals_to_tensor": 98, "convert_root_weight_uids_and_vals_to_tensor": 98, "convert_storage_paramet": 96, "convert_uids_and_weight": 98, "convert_weight_uids_and_vals_to_tensor": 98, "convert_weights_and_uids_for_emit": 98, "cool": [0, 56], "copi": [53, 73], "core": [74, 82, 87, 89, 91, 93, 99], "cornerston": [1, 69], "coroutin": 87, "correct": [1, 53, 69], "correctli": [1, 53], "correl": [0, 56], "correspond": [0, 1, 21, 24, 30, 37, 39, 43, 45, 51, 53, 56, 92, 98], "corrupt": 85, "cortex": 72, "cost": [0, 56, 87], "count": 5, "counterpart": 24, "cover": [0, 24, 53, 56, 87], "cpu": [89, 91], "creat": [0, 1, 2, 9, 11, 22, 24, 31, 44, 53, 55, 56, 69, 70, 73, 76, 85, 89, 91, 96, 99], "create_error_respons": 1, "create_from_data": 96, "create_from_storage_funct": 96, "create_pow": 91, "create_pow_async": 89, "create_streaming_respons": 55, "create_subnet": 87, "creation": [1, 69], "criteria": 1, "critic": [0, 1, 53, 56, 69, 77, 82, 87], "crucial": [0, 1, 24, 31, 44, 53, 56, 69, 87], "crv3": [0, 56], "cryptocurr": 53, "cryptograph": [0, 1, 53, 56, 87], "cuda": [0, 29, 42, 56, 89, 91, 92], "cudasolv": 91, "cumul": 53, "curl": 88, "curr_block": 91, "curr_block_num": 91, "curr_diff": 91, "currenc": 76, "current": [0, 1, 6, 53, 56, 61, 69, 75, 87, 91, 96, 97], "current_block": 53, "current_tim": 75, "current_time_n": 75, "custom": [1, 7, 53, 69, 72, 79, 81], "custom_logger_method_stack_level": 82, "custom_synaps": 69, "customiz": 1, "customsynaps": 69, "cutoff": 17, "d": [24, 53, 70, 73, 78, 87], "dai": [4, 5], "daili": [4, 5], "data": [0, 1, 2, 6, 7, 10, 13, 14, 16, 20, 21, 22, 24, 31, 44, 51, 53, 55, 56, 69, 70, 72, 85, 87, 91, 94, 96, 98], "data_typ": [31, 44], "databas": 96, "dataclass": [0, 3, 4, 5, 6, 8, 9, 10, 12, 13, 15, 16, 18, 19, 20, 56, 72], "date": [0, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 56, 79, 87, 97], "date_format": 78, "datefmt": 79, "datetim": [0, 56], "de": 82, "deal": 1, "debug": [69, 77, 82, 83], "decai": 17, "deceiv": 1, "decentr": [0, 1, 31, 44, 53, 56, 69, 87], "decis": [0, 53, 56], "decod": [0, 1, 2, 6, 7, 8, 12, 15, 16, 20, 21, 22, 56, 69, 72, 85, 96], "decode_account_id": 21, "decode_account_id_list": 15, "decode_hex_identity_dict": 85, "decode_metadata": 21, "decode_revealed_commit": 21, "decode_revealed_commitment_with_hotkei": 21, "decode_scale_valu": 96, "decor": 91, "decreas": [0, 25, 36, 50, 56], "decrease_take_extrins": [34, 48], "decrypt": [0, 56, 72, 85], "decrypted_data": 72, "deepcopi": 53, "deeper": [0, 56, 87], "def": [1, 69], "default": [0, 1, 2, 21, 23, 24, 25, 26, 28, 29, 31, 32, 33, 34, 36, 38, 42, 44, 46, 47, 48, 50, 51, 53, 54, 56, 61, 69, 72, 73, 75, 76, 79, 82, 83, 85, 87, 91, 92, 93, 97, 98], "default_endpoint": 54, "default_log_backup_count": 78, "default_log_file_nam": 78, "default_log_format": 79, "default_max_rotating_log_file_s": 78, "default_network": [53, 54], "default_trace_format": 79, "default_verifi": 1, "defaultconfig": 23, "defaultdict": 23, "defaultmunch": 23, "defin": [0, 1, 2, 6, 10, 20, 21, 53, 56, 69, 79, 81, 85, 87, 99], "definit": 78, "deiniti": 82, "delai": 1, "deleg": [0, 4, 5, 25, 34, 48, 53, 56, 61, 87, 99], "delegate_info": [7, 99], "delegate_info_lit": [7, 99], "delegate_ss58": 5, "delegatedinfo": [4, 21], "delegateinfo": [0, 4, 5, 21, 56], "delegateinfobas": 4, "delegateinfolit": 5, "delegateliteinfo": 5, "delegatetaketoohigh": [0, 25, 56], "delegatetaketoolow": [0, 25, 56], "delegatetxratelimitexceed": [0, 25, 56], "delta": [1, 75], "dendrit": [1, 25, 52, 69, 83, 93, 99], "dendrite_default_error": 24, "dendrite_error_map": 24, "dendrite_hotkei": 69, "dendrite_inst": 24, "dendritemixin": 24, "denot": 53, "depend": 2, "deposit": [0, 35, 49, 56], "deprec": [76, 83, 97], "deregister_primary_logg": 82, "deriv": [10, 21], "describ": [0, 37, 39, 56, 79], "descript": [0, 1, 3, 18, 29, 42, 56, 69], "deseri": [24, 53, 55, 69, 70, 93], "deserialized_synaps": 69, "design": [0, 1, 24, 55, 56, 69, 83], "desir": [69, 82], "dest": [0, 35, 49, 56, 87], "destin": [0, 28, 35, 37, 41, 45, 49, 56, 85, 87, 98], "destination_coldkey_ss58": [0, 28, 41, 56], "destination_hotkei": [0, 28, 41, 56], "destination_hotkey_ss58": [0, 56], "destination_netuid": [0, 28, 41, 56], "destination_pric": [0, 56], "destination_subnet_pric": [0, 56], "detail": [0, 1, 53, 56, 69, 87, 96], "detect": 69, "determin": [0, 1, 24, 53, 56, 69, 73, 80, 85], "determine_block_hash": [0, 56, 61], "determine_chain_endpoint_and_network": 85, "dev_id": [0, 29, 42, 56, 89, 91, 92], "develop": [1, 55, 69, 100], "devic": [0, 29, 42, 56, 89, 91, 92], "dict": [0, 1, 2, 4, 8, 9, 10, 11, 12, 14, 16, 19, 21, 23, 24, 31, 44, 53, 54, 55, 56, 69, 70, 73, 79, 85, 87, 91], "dictionari": [0, 1, 2, 9, 11, 21, 23, 25, 53, 55, 56, 69, 70, 73, 80, 85, 87], "did": [29, 30, 31, 32, 35, 36, 42, 43, 44, 45, 46, 49, 50], "diff": 91, "differ": [0, 1, 6, 23, 24, 41, 53, 56, 69, 75, 76, 82, 89, 91], "difficulti": [0, 10, 17, 19, 56, 66, 87, 91, 92], "digit": [1, 53, 69], "dir": 53, "dir_path": 53, "direct": [0, 53, 56], "directli": [0, 24, 55, 56, 69], "directori": 53, "disabl": [0, 56, 61, 82, 83, 87], "disable_debug": 82, "disable_info": 82, "disable_log": 82, "disable_third_party_logg": 82, "disable_trac": 82, "disable_warn": 82, "disallow": 1, "discord": [0, 3, 18, 29, 42, 56], "discoveri": [0, 56], "disk": 53, "dispatch": 1, "distinguish": 53, "distribut": [0, 53, 56, 69, 87], "divers": [0, 56], "dividend": [10, 11, 12, 20, 53], "do": [0, 1, 56], "do_block_step": 87, "do_commit_weight": [37, 39], "do_serve_axon": [31, 44, 87], "do_serve_prometheu": 87, "do_set_weight": 87, "do_transf": 87, "docstr": 53, "document": [0, 56, 99], "doe": [0, 1, 25, 56, 69, 72, 89, 91], "does_hotkey_exist": [0, 56, 68], "doesn": [0, 1, 25, 53, 56, 82], "don": 0, "doubl": 87, "down": [0, 1, 56], "drain": 16, "drand": [0, 56, 72], "dtype": 70, "due": 1, "dummy_input": 69, "dump": 72, "duplic": [0, 25, 56], "duplicatechild": [0, 25, 56], "durat": [0, 24, 26, 38, 56, 69], "dure": [0, 1, 17, 24, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 53, 56, 69, 72, 87, 91], "dust": [0, 56], "dynam": [0, 1, 6, 53, 56, 87], "dynamic_info": [7, 99], "dynamicinfo": [0, 6, 21, 56], "e": [0, 2, 9, 13, 29, 31, 42, 44, 53, 56, 69, 87], "e29ce36fec1a": 69, "each": [0, 1, 21, 24, 32, 36, 37, 39, 46, 50, 51, 53, 56, 69, 72, 73, 82, 87, 91], "earn": [0, 53, 56], "easi": 69, "easy_import": [85, 99], "econom": [0, 56], "ecosystem": [0, 53, 56, 69, 87], "ed25519": [35, 49], "effect": [0, 1, 56], "effici": [0, 1, 24, 53, 56, 69, 87], "effort": [0, 56], "either": [0, 56, 76, 79, 88], "element": [0, 10, 24, 26, 29, 38, 42, 53, 56, 70], "elig": [0, 56], "ellipsi": 69, "els": 85, "email": [29, 42], "embodi": 53, "emiss": [0, 6, 10, 11, 12, 16, 20, 33, 47, 53, 56], "emission_histori": 20, "emission_valu": 19, "emit": [0, 56], "emoji": 79, "emoji_map": 79, "emploi": 53, "empti": [0, 56, 70, 73, 87], "enabl": [0, 1, 17, 28, 31, 36, 41, 44, 46, 50, 53, 56, 61, 69, 82, 83, 87], "enable_consol": 82, "enable_debug": 82, "enable_default": 82, "enable_info": 82, "enable_third_party_logg": 82, "enable_trac": 82, "enable_warn": 82, "encapsul": [1, 24, 55, 69], "encod": [0, 7, 9, 16, 21, 56, 69, 72, 85], "encode_param": [0, 56, 61], "encoded_data": 21, "encompass": 69, "encount": [1, 70], "encourag": 53, "encrypt": [1, 72], "encrypted_data": 72, "end": [1, 14, 24, 69], "endpoint": [0, 1, 2, 24, 31, 44, 56, 61, 69, 73, 85, 87, 88], "endpoint_url": [85, 88], "enforc": 69, "enhanc": [0, 31, 44, 53, 56, 69], "enough": 25, "ensur": [0, 1, 24, 37, 39, 53, 55, 56, 69, 81, 82, 83, 87, 91], "enter": [0, 29, 30, 31, 32, 35, 36, 37, 42, 43, 44, 45, 46, 49, 50, 56], "entir": [0, 24, 56], "entiti": [1, 53], "entri": [0, 53, 56, 96], "entrypoint": 54, "enum": [10, 21], "enumer": [10, 21], "environ": [0, 1, 53, 56, 69, 92], "epoch": [0, 56], "equal": [89, 91], "equip": 1, "err_msg": 87, "error": [0, 1, 2, 23, 24, 31, 33, 34, 37, 39, 44, 47, 48, 52, 53, 56, 61, 69, 70, 72, 77, 82, 85, 87, 89, 91, 92, 97, 99], "error_messag": 85, "especi": [1, 24, 69], "essenti": [0, 1, 24, 53, 56, 69, 87], "establish": [0, 1, 24, 56, 69], "estim": [0, 6, 56, 87], "etc": [1, 55, 61, 69], "evalu": [1, 73], "event": [24, 55, 82, 91], "event_loop_is_run": 24, "everi": 69, "everyth": 53, "evolut": 53, "exact": 53, "examin": 53, "exampl": [1, 69, 70, 72, 87], "examplerout": 69, "examplesynaps": 69, "exce": [0, 28, 41, 56], "exceed": [0, 25, 36, 46, 50, 56], "except": [0, 1, 24, 56, 70, 82, 85, 87], "exchang": [1, 53, 69], "exclud": 98, "exclude_quantil": 98, "execut": [0, 1, 25, 53, 56, 71, 87], "executor": 71, "exhaust": 24, "exist": [0, 1, 24, 25, 56, 85, 89, 91], "existenti": [0, 35, 49, 56], "exit": [1, 25], "expect": [1, 24, 53, 55], "expir": [0, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 56, 87], "explicitli": [23, 53, 55, 69, 70], "explor": 85, "exponenti": [0, 56], "expos": 85, "express": 72, "extend": 1, "extent": [0, 56], "extern": [1, 24, 88], "external_ip": [1, 24, 88], "external_port": 1, "externalipnotfound": 88, "extract": [1, 24, 55], "extract_response_json": 55, "extrem": 1, "extrins": [0, 52, 56, 61, 85, 99], "extrinsicnotfound": 25, "extrinsics_subpackag": 83, "f": 85, "face": [0, 1, 56, 88], "facilit": [0, 1, 53, 56, 69, 87], "factor": [0, 56], "factori": [0, 53], "fail": [0, 1, 2, 21, 24, 25, 29, 30, 31, 32, 33, 35, 36, 37, 42, 43, 44, 45, 46, 47, 49, 50, 56, 69, 71, 72, 88, 97], "failed_verif": 69, "failur": [0, 1, 26, 29, 31, 34, 38, 42, 44, 48, 56, 69], "fallback": [0, 24, 56, 61, 87], "fallback_endpoint": [0, 56, 61, 87], "fals": [0, 1, 6, 11, 12, 21, 23, 24, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 53, 56, 61, 69, 70, 72, 79, 83, 85, 87, 89, 91, 93], "fast": [0, 56, 72], "fast_config": 1, "fast_serv": 1, "fastapi": 1, "fastapithreadedserv": 1, "feasibl": 24, "featur": [0, 1, 56, 69, 83], "fee": [0, 56, 87], "fetch": [0, 5, 31, 44, 56, 98], "field": [1, 2, 4, 55, 67, 69, 70], "file": [23, 53], "filenam": [78, 79], "fill": [1, 24], "filter": [0, 1, 56], "filter_for_netuid": [0, 56], "filter_netuids_by_registered_hotkei": [0, 56, 68], "final": [0, 1, 24, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 56, 69, 91], "financi": [0, 56, 87], "find": [51, 69], "fingerprint": 69, "finish": [24, 71, 91], "finished_queu": 91, "finnei": [53, 54, 61, 73, 85], "finney_entrypoint": 54, "finney_test_entrypoint": 54, "first": [0, 1, 6, 23, 24, 26, 29, 32, 38, 42, 46, 53, 56, 69], "fix": [0, 56, 76, 87], "fixed_to_float": 76, "fixedpoint": [56, 76], "flag": [0, 1, 2, 17, 24, 29, 31, 32, 34, 35, 36, 42, 44, 45, 46, 48, 49, 50, 53, 56, 73, 79, 85], "flexibl": [0, 1, 56], "float": [0, 1, 4, 5, 6, 10, 11, 12, 17, 19, 20, 24, 26, 28, 30, 32, 36, 37, 38, 41, 43, 45, 46, 50, 53, 56, 69, 72, 75, 76, 85, 87, 91, 98], "float32": [0, 26, 30, 37, 38, 43, 45, 56, 98], "float_to_u64": 85, "floattensor": [0, 26, 37, 38, 45, 56, 98], "flow": [1, 69], "fluctuat": [0, 56], "fmt": 79, "fn": [53, 71], "focus": [0, 56, 87], "follow": [31, 44, 69, 73, 82], "forbidden": 69, "forc": [87, 91], "force_register_neuron": 87, "force_set_bal": 87, "forev": [0, 56, 61, 87], "form": [1, 53, 55, 69, 70, 72, 88], "format": [0, 1, 24, 31, 44, 53, 55, 56, 69, 73, 81, 85, 87, 88, 99], "format_error_messag": 85, "formatt": [79, 81, 82], "formatted_endpoint_url": 88, "formattim": 79, "forward": [1, 24], "forward_class_typ": 1, "forward_custom": 1, "forward_fn": [1, 25], "forward_my_synaps": 1, "forward_my_synapse_2": 1, "foster": 1, "found": [0, 1, 25, 51, 56, 87, 91, 92], "foundat": 1, "frac_bit": 76, "frame": [0, 56], "framework": [1, 24, 69, 82, 83], "frequent": [0, 56], "fresh": 1, "friendli": [1, 37, 39], "fro": 82, "from": [0, 1, 2, 9, 10, 11, 15, 16, 21, 24, 28, 31, 32, 34, 35, 36, 41, 44, 46, 48, 49, 50, 53, 55, 56, 61, 69, 70, 71, 72, 73, 76, 77, 82, 85, 87, 88, 91, 93, 98], "from_dict": [8, 14, 16], "from_error": 25, "from_float": 76, "from_head": 69, "from_neuron_info": 2, "from_parameter_dict": [2, 9], "from_rao": 76, "from_scale_encod": 21, "from_scale_encoding_using_type_str": 21, "from_str": 2, "from_tao": 76, "from_vec_u8": 22, "from_weights_bonds_and_neuron_lit": 11, "full": [0, 28, 41, 53, 56], "full_address": 1, "func": [5, 91, 97], "function": [7, 25, 55, 56, 81, 82, 87, 93, 96], "fund": [0, 35, 49, 56, 87], "fundament": [0, 1, 53, 56, 69, 87], "further": 1, "futur": [31, 44, 53, 71], "g": [2, 9, 13, 29, 42, 69, 87], "gain": [0, 56], "gather": 1, "gener": [0, 1, 10, 21, 24, 55, 56, 80, 91, 96, 98, 99], "generate_weight_hash": 98, "genericcal": [0, 56], "genericmetadatavers": 96, "genuin": 1, "get": [0, 23, 24, 53, 56, 67, 69, 71, 72, 79, 82, 85, 91], "get_all_commit": [0, 56, 58], "get_all_metagraphs_info": [0, 56, 62], "get_all_neuron_certif": [0, 56, 63], "get_all_revealed_commit": [0, 56, 58], "get_all_subnets_info": [0, 56, 66], "get_and_save_latest_vers": 97, "get_async_subtensor": 0, "get_bal": [0, 56, 68, 87], "get_block_hash": [0, 56, 57, 87], "get_children": [0, 56, 66, 68], "get_children_pend": [0, 56, 66, 68], "get_commit": [0, 56, 58, 87], "get_config": 82, "get_cpu_count": 91, "get_current_block": [0, 53, 56, 57, 87], "get_current_weight_commit_info": [0, 56, 58, 66], "get_deleg": [0, 56, 59, 68], "get_delegate_by_hotkei": [0, 56, 59, 68], "get_delegate_ident": [0, 56, 57, 59, 61], "get_delegate_tak": [0, 56, 59, 68], "get_existential_deposit": [0, 56, 57], "get_explorer_url_for_network": 85, "get_external_ip": 88, "get_formatted_ws_endpoint_url": 88, "get_hash": 85, "get_hotkey_own": [0, 56, 68], "get_hotkey_stak": [0, 56, 65, 68], "get_human_read": 84, "get_hyperparamet": [0, 56, 66], "get_level": 82, "get_max_logger_name_length": 80, "get_metadata": [31, 44], "get_metagraph_info": [0, 56, 62], "get_minimum_required_stak": [0, 56, 57, 65, 68], "get_netuids_for_hotkei": [0, 56, 68], "get_neuron_certif": [0, 56, 63], "get_neuron_for_pubkey_and_subnet": [0, 56, 66], "get_next_epoch_start_block": [0, 56, 66], "get_null_neuron": [11, 12], "get_old_stak": 51, "get_owned_hotkei": [0, 56, 68], "get_queu": 82, "get_required_field": 69, "get_revealed_commit": [0, 56, 58], "get_revealed_commitment_by_hotkei": [0, 56, 58], "get_save_dir": 53, "get_siz": 69, "get_stak": [0, 56, 65, 68], "get_stake_add_fe": [0, 56, 65, 68], "get_stake_for_coldkei": [0, 56, 65, 68], "get_stake_for_coldkey_and_hotkei": [0, 56, 65, 68], "get_stake_for_hotkei": [0, 56, 68], "get_stake_info_for_coldkei": [0, 56, 65, 68], "get_stake_movement_fe": [0, 56, 65, 68], "get_status_messag": 91, "get_subnet": [0, 56, 66], "get_subnet_burn_cost": [0, 56, 66], "get_subnet_hyperparamet": [0, 56, 66], "get_subnet_owner_hotkei": [0, 56, 66], "get_subnet_reveal_period_epoch": [0, 56, 66], "get_subnet_validator_permit": [0, 56, 66], "get_timestamp": [0, 56, 57], "get_total_s": 69, "get_total_subnet": [0, 56, 66], "get_transfer_fe": [0, 56, 68, 87], "get_uid_for_hotkey_on_subnet": [0, 56, 66], "get_unit": 76, "get_unstake_fe": [0, 56, 65, 68], "get_vote_data": [0, 56, 57], "getdefaultencod": 85, "github": [0, 3, 29, 42, 56], "github_repo": [18, 29, 42], "give": [71, 76, 77], "given": [0, 1, 21, 26, 28, 29, 30, 31, 37, 38, 42, 43, 44, 45, 51, 53, 55, 56, 69, 70, 71, 76, 85, 87, 89, 91, 93, 98], "global": [0, 56], "glorifi": 69, "go": 1, "goe": [29, 42], "govern": [0, 53, 56, 87], "grace": [0, 56], "gracefulli": 1, "graph": 53, "great": 1, "greater": [53, 98], "growth": [0, 56], "grpc": 1, "guard": 1, "h": [78, 84], "ha": [0, 1, 12, 24, 25, 53, 55, 56, 87, 91], "halt": 1, "handl": [0, 1, 6, 20, 24, 37, 39, 55, 56, 69, 72, 82, 88, 98], "handler": [1, 81, 82, 85], "hash": [0, 1, 31, 37, 39, 44, 56, 69, 85, 87, 91, 92, 94, 98], "hash_rat": 91, "hash_rate_perpetu": 91, "hash_valu": 69, "hasher": [95, 99], "hasn": 1, "have": [0, 1, 25, 56, 69, 71], "header": [1, 24, 25, 55, 69], "header_s": 69, "height": [0, 56], "held": 53, "hello": 69, "help": [0, 1, 23, 25, 56, 61, 69, 70, 71, 73, 76, 82, 85, 87, 88, 97], "helper": [0, 21, 51, 56, 69, 73, 76, 81, 94, 99], "here": 24, "hex": [0, 22, 56, 96], "hex_to_byt": 85, "hexadecim": [69, 85], "high": [0, 17, 25, 56], "higher": [53, 96], "histor": [24, 53], "history_block": 53, "hit": [0, 56], "hold": [1, 53, 82], "holder": [0, 56], "home_dir": 54, "hop": [0, 56], "host": [1, 31, 44], "hot": [0, 56], "hotkei": [0, 1, 2, 4, 5, 10, 11, 12, 16, 20, 21, 24, 25, 28, 30, 31, 32, 34, 36, 37, 41, 43, 44, 45, 46, 48, 50, 51, 53, 56, 61, 68, 69, 73, 85, 87, 91, 92], "hotkey_byt": 91, "hotkey_ss58": [0, 4, 16, 28, 32, 34, 36, 41, 46, 48, 50, 51, 56], "hotkey_ss58_address": [0, 56], "hotkeyaccountnotexist": [0, 25, 56], "how": [0, 1, 6, 53, 56], "howev": [24, 53], "hparam": 53, "http": [1, 24, 54, 69], "human": [1, 84], "hyperparam": 98, "hyperparamet": [0, 17, 56], "i": [0, 1, 2, 4, 5, 6, 11, 12, 15, 17, 21, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 53, 55, 56, 61, 69, 70, 71, 72, 73, 76, 79, 82, 83, 85, 87, 88, 89, 91, 92, 93, 96, 97, 98, 100], "id": [0, 1, 4, 21, 24, 26, 29, 38, 42, 46, 50, 56, 69, 89, 91, 92, 98], "ideal": 6, "ident": [0, 3, 10, 18, 25, 29, 42, 53, 56, 69, 85, 94], "identif": [53, 69], "identifi": [0, 1, 11, 12, 24, 31, 34, 37, 39, 44, 48, 51, 53, 56, 69, 87, 98], "identityerror": 25, "ignor": 24, "ij": 53, "imag": 3, "immedi": [0, 1, 56], "immun": 17, "immunity_period": [0, 10, 17, 19, 56, 66], "immunityperiod": [0, 10, 56, 87], "immut": [0, 56, 87], "impact": [0, 28, 41, 53, 56], "implement": [1, 23, 24, 55, 69, 71, 91, 96], "impli": 53, "import": [0, 1, 23, 24, 53, 56, 61, 69, 72, 77], "importerror": 53, "improv": 69, "inact": 53, "incent": [0, 10, 11, 12, 20, 53, 56], "incentiv": 53, "includ": [0, 1, 2, 7, 11, 24, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 53, 55, 56, 69, 72, 73, 79, 81, 83, 87], "inclus": [0, 26, 28, 29, 30, 31, 32, 34, 35, 36, 38, 41, 42, 43, 44, 45, 46, 48, 49, 50, 56], "incom": [0, 1, 56], "incorrect": 85, "increas": [0, 1, 25, 28, 41, 46, 56, 69], "increase_take_extrins": [34, 48], "inde": 1, "index": 14, "indexerror": 72, "indic": [0, 1, 11, 12, 17, 24, 25, 26, 29, 31, 38, 42, 44, 53, 56, 69, 82, 87], "indispens": 69, "individu": [0, 24, 53, 56, 87], "infer": 53, "inflat": [0, 56, 87], "influenc": [0, 53, 56], "info": [0, 1, 2, 6, 8, 9, 10, 19, 20, 54, 77, 82, 83], "info_bas": [2, 3, 4, 5, 6, 7, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20, 99], "info_dictionari": 85, "infobas": [2, 3, 4, 5, 6, 8, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20], "infodict": 87, "inform": [0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 12, 13, 15, 16, 18, 22, 24, 29, 31, 42, 44, 51, 53, 56, 69, 82, 85, 87, 91, 92], "infrastructur": [0, 53, 56], "inherit": [69, 73], "init": 53, "initarg": 71, "initi": [0, 1, 23, 24, 25, 29, 31, 32, 33, 35, 44, 46, 47, 53, 55, 56, 61, 70, 71, 72, 73, 76, 79, 82, 85, 87, 88, 97], "input": [0, 1, 21, 24, 53, 55, 56, 69, 70, 91, 98], "input_": 21, "input_obj": 69, "insight": [0, 56, 87], "inspect": 1, "instal": 53, "install_signal_handl": 1, "instanc": [0, 1, 2, 9, 11, 12, 22, 24, 26, 28, 29, 31, 33, 36, 37, 38, 39, 41, 42, 44, 47, 50, 53, 55, 56, 61, 69, 71, 72, 80, 82, 87, 89, 96, 98], "instanti": [0, 53, 55], "instead": [1, 55, 87, 97], "instrument": [0, 53, 56], "insuffici": [0, 56], "int": [0, 1, 2, 4, 5, 6, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 53, 54, 56, 69, 70, 72, 73, 75, 76, 79, 80, 82, 84, 85, 87, 88, 89, 91, 92, 93, 97, 98], "int64": [0, 26, 30, 37, 38, 43, 45, 56, 92, 98], "int_to_ip": 88, "int_val": 88, "intact": 1, "integ": [0, 56, 69, 76, 88, 98], "integr": [0, 1, 53, 56, 69, 83, 87], "intellig": [0, 1, 53, 56], "intend": [55, 69], "intent": 1, "inter": [0, 53, 56], "interact": [0, 1, 24, 28, 29, 33, 37, 39, 42, 47, 53, 56, 61, 69, 76, 87], "intercept": 1, "interconnect": 0, "interconnected": 53, "interfac": [0, 1, 29, 37, 39, 42, 53, 55, 56], "interfer": 1, "intermediari": 1, "intern": [1, 24, 31, 44, 55], "internalservererror": 25, "interneuron": [0, 56], "interpret": [24, 36, 69], "interv": 17, "invalid": [25, 70], "invalidchild": [0, 25, 56], "invalidconfigfil": 23, "invalidrequestnameerror": 25, "invers": 98, "invest": [0, 53, 56], "invok": 1, "involv": [0, 1, 53, 56, 69], "ip": [1, 2, 9, 13, 24, 31, 44, 53, 69, 73, 87, 88], "ip__str__": 88, "ip_address": 69, "ip_info": [7, 99], "ip_str": [2, 88], "ip_to_int": 88, "ip_typ": [2, 9, 13, 73, 87, 88], "ip_vers": 88, "ipifi": 88, "ipinfo": [9, 21], "ipv4": [2, 9, 13, 88], "ipv6": [2, 9, 13, 88], "is_async": 61, "is_blacklist": 69, "is_dynam": 6, "is_empti": 71, "is_failur": 69, "is_fast_block": [0, 56, 57], "is_hotkey_deleg": [0, 56, 59, 68], "is_hotkey_regist": [0, 56, 68], "is_hotkey_registered_ani": [0, 56, 68], "is_hotkey_registered_on_subnet": [0, 56, 66], "is_nul": [11, 12], "is_opt": 21, "is_regist": 16, "is_run": 1, "is_serv": 2, "is_set": 23, "is_stal": 91, "is_stale_async": 91, "is_subnet_act": [0, 56, 66], "is_success": 69, "is_timeout": 69, "is_valid_bittensor_address_or_public_kei": 85, "is_valid_ss58_address": 85, "is_vec": 21, "iso8601": 79, "issu": [1, 24], "item": [69, 94], "iter": [0, 24, 53, 56, 69, 70, 73, 80, 87], "its": [0, 1, 2, 24, 34, 35, 48, 49, 53, 56, 69, 82, 87, 91], "itself": [1, 69], "j": 53, "json": [1, 2, 24, 54, 55, 69], "json_respons": 24, "json_str": 2, "jsondecodeerror": 2, "jsonrespons": 1, "judgment": 53, "just": [0, 53, 56, 61, 87], "k": [6, 70, 73, 87], "kappa": [10, 17, 19, 87], "keccak": 92, "keccak256": [31, 44], "keep": [0, 35, 41, 49, 56, 69], "keep_al": [0, 35, 49, 56], "kei": [0, 1, 2, 11, 15, 21, 26, 30, 35, 37, 38, 39, 43, 45, 49, 53, 56, 69, 70, 73, 85, 87, 94, 96, 98], "kept": 97, "keyfil": [0, 56, 83, 85], "keyfileerror": [0, 56, 85], "keypair": [0, 24, 56], "keyword": [55, 69, 70, 73, 87, 93], "know": [0, 1, 56, 87], "known": [0, 56, 85], "kwarg": [24, 55, 70, 71, 73, 79, 82, 87, 93], "lack": 88, "larg": 24, "larger": 1, "last": [0, 1, 11, 12, 53, 56], "last_drand_round": [0, 56, 57], "last_step": [6, 10, 53], "last_upd": [10, 11, 12, 20, 53], "laststep": 10, "lastupd": 10, "latenc": 69, "latent": 54, "latent_lite_entrypoint": 54, "later": 53, "latest": [0, 53, 56, 87, 97], "latest_block_path": 53, "layer": [0, 1, 53, 56], "lazi": 91, "lazili": 24, "lazyloadedtorch": 91, "lead": 1, "leakag": 24, "learn": [0, 53, 56, 69], "least": 1, "ledger": 53, "left": 88, "legaci": [83, 91], "legacy_method": 61, "legacy_torch_api_compat": 91, "length": [31, 44, 69, 80], "less": 53, "level": [0, 1, 17, 53, 56, 61, 67, 77, 79, 82, 83, 96], "levelnam": [78, 79], "leverag": [53, 82], "librari": 82, "lifecycl": 1, "lifespan": 69, "light": 53, "lighter": 5, "lightweight": 0, "like": [0, 1, 23, 24, 56, 69, 79], "limit": [0, 17, 25, 56, 91, 92, 98], "line": [0, 1, 56, 73, 89, 91], "lineno": [78, 79], "link": [0, 1, 16, 29, 42, 56], "liquid": 17, "liquid_alpha_en": [10, 17], "liquidalphaen": 10, "list": [0, 1, 4, 5, 8, 10, 11, 12, 14, 15, 20, 21, 23, 24, 26, 29, 30, 32, 36, 37, 38, 39, 42, 43, 45, 46, 50, 51, 53, 56, 61, 69, 70, 73, 85, 87, 89, 91, 93, 96, 98], "list_from_dict": 8, "list_from_vec_u8": 12, "listen": [1, 82], "lite": [0, 11, 53, 54, 56, 87], "liter": 85, "live": 53, "load": [0, 1, 23, 53, 56, 72, 91], "load_from_path": 53, "local": [1, 24, 53, 54, 73, 85, 87, 88], "local_entrypoint": 54, "local_synaps": 24, "localhost": 61, "locat": 53, "lock": [0, 16, 56, 91], "log": [0, 1, 23, 24, 29, 42, 56, 61, 77, 78, 79, 80, 81, 82, 83, 85, 87, 91, 92], "log_and_handle_error": 1, "log_cuda_error": 92, "log_except": 24, "log_format": 79, "log_level": 1, "log_level_color_prefix": 79, "log_no_torch_error": 91, "log_trace_format": 79, "log_verbos": [0, 29, 42, 56, 61, 73, 87, 89, 91], "logger": [71, 77, 80, 81, 82], "logging_dir": 82, "loggingconfig": 82, "loggingmachin": [77, 81, 99], "logic": [1, 32, 55, 69, 72], "logrecord": 79, "long": [0, 56], "longer": 24, "longest": 80, "longtensor": [0, 26, 37, 38, 45, 56, 98], "loop": 24, "low": [0, 17, 25, 56], "lower": 98, "lynch": 72, "m": 78, "machin": [0, 1, 53, 56, 69], "made": [0, 17, 25, 56], "mai": [53, 87], "main": [0, 1, 56, 72, 85, 91], "mainli": [0, 53, 56, 61, 87], "maintain": [0, 1, 53, 56, 69, 83, 87], "mainten": 1, "major": 53, "make": [0, 1, 24, 35, 49, 53, 56, 69, 72, 87], "malici": 1, "manag": [0, 1, 23, 24, 53, 55, 56, 57, 58, 59, 60, 62, 63, 64, 65, 66, 68, 69, 80, 82, 87], "mani": [0, 25, 56], "manipul": 1, "manner": [1, 91], "map": [0, 4, 11, 12, 56, 70, 73, 85, 87, 88, 96], "mark": 1, "market": [0, 56], "match": [1, 51, 76, 98], "math": 53, "matrix": 53, "max": [1, 25, 31, 44, 98], "max_allowed_attempt": [0, 29, 42, 56], "max_allowed_valid": 19, "max_burn": [10, 17], "max_difficulti": [10, 17], "max_int_weight": 98, "max_length": 80, "max_n": 19, "max_regs_per_block": [10, 17], "max_retri": [0, 56], "max_uid": [10, 53], "max_valid": [10, 17], "max_valu": 98, "max_weight_limit": [0, 17, 19, 56, 66, 98], "max_weights_limit": 10, "max_work": [1, 71], "maxattemptsexcept": 25, "maxburn": 10, "maxdifficulti": 10, "maximum": [0, 17, 24, 28, 29, 36, 41, 42, 46, 50, 56, 69, 71, 98], "maxregsperblock": 10, "maxsiz": 71, "maxsuccessexcept": 25, "maxuid": 10, "maxvalid": 10, "maxweightslimit": [0, 10, 56], "mean": [0, 1, 56, 69, 89, 91], "measur": [0, 53, 56], "mechan": [0, 1, 33, 47, 53, 56, 69, 72, 87], "meet": 1, "member": [0, 56], "merg": [23, 24], "merkl": 96, "messag": [0, 1, 21, 24, 25, 26, 29, 31, 33, 34, 38, 42, 44, 47, 48, 56, 69, 77, 78, 79, 82, 85, 91], "met": 25, "metadata": [0, 11, 12, 21, 25, 29, 31, 42, 44, 53, 56, 69, 87, 96], "metadata_storage_funct": 96, "metadataerror": [25, 31, 44], "metagraph": [0, 24, 52, 56, 61, 83, 98, 99], "metagraph_info": [7, 99], "metagraph_state_dict_ndarray_kei": 53, "metagraphinfo": [0, 10, 21, 56], "metagraphinfoemiss": [10, 53], "metagraphinfoparam": [10, 53], "metagraphinfopool": [10, 53], "metagraphmixin": 53, "method": [0, 1, 6, 20, 24, 31, 37, 39, 44, 53, 55, 56, 61, 69, 71, 73, 76, 79, 82, 87, 91], "metric": [53, 69], "middlewar": 1, "middleware_cl": 1, "might": 1, "millifi": 84, "millisecond": 79, "min_allowed_weight": [0, 10, 17, 19, 56, 66, 98], "min_burn": [10, 17], "min_difficulti": [10, 17], "min_required_stak": 87, "minallowedweight": [0, 10, 56], "minburn": 10, "mindifficulti": 10, "mine": [0, 56], "miner": [23, 53], "miners_dir": 54, "minimum": [0, 17, 56, 87, 98], "mismatch": 1, "ml": 69, "mock": [0, 56, 61, 73, 85, 99], "mock_subpackag": 83, "mockchainst": 87, "mockmapresult": 87, "mocksubtensor": 87, "mocksubtensorst": 87, "mocksubtensorvalu": 87, "mocksystemst": 87, "modal": 19, "mode": [0, 56, 82], "model": [53, 55, 69, 70], "model_config": [55, 69, 70], "model_dump_json": 69, "model_validate_json": 69, "modern": 1, "modif": 69, "modifi": [21, 55, 96], "modul": [7, 81], "module_nam": [0, 56, 87], "monitor": 69, "monoton": 69, "more": [0, 29, 42, 53, 56, 84, 89, 91], "most": [0, 53, 56, 87], "mostli": [0, 56], "move": [0, 17, 28, 41, 56], "move_stak": [0, 27, 40, 56, 60, 99], "move_stake_extrins": [28, 41], "movement": [0, 56], "moving_pric": [6, 10], "movingpric": 10, "msg": [0, 37, 39, 56, 82, 85], "much": [6, 53], "multi": 1, "multipl": [0, 1, 24, 53, 56, 89, 91], "multipli": 17, "multiprocess": 91, "munch": 23, "must": [0, 30, 33, 37, 43, 45, 47, 53, 55, 56, 82, 85, 88, 98], "mutat": 1, "mutual": [0, 56], "my_axon": 1, "my_config": 1, "my_wallet": 1, "mycustomsynaps": 1, "mysynaps": [1, 69], "n": [53, 84, 85, 98], "n_block": 72, "nai": 14, "name": [0, 1, 3, 10, 21, 24, 25, 29, 42, 53, 55, 56, 69, 70, 71, 72, 73, 78, 79, 80, 82, 87, 96], "namedtupl": 82, "namespac": 23, "nanosecond": 75, "nanoseconds_in_second": 75, "nativ": 69, "natur": [0, 24, 53, 56], "ndarrai": [0, 26, 30, 37, 38, 43, 45, 53, 56, 70, 98], "necessari": [1, 24, 53, 69], "need": [0, 1, 21, 56, 69, 72], "nest": [10, 23], "netuid": [0, 1, 4, 6, 10, 11, 12, 16, 19, 20, 24, 26, 29, 30, 31, 32, 33, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 50, 51, 53, 56, 73, 76, 87, 89, 91, 98], "network": [0, 1, 2, 4, 6, 7, 11, 12, 20, 24, 25, 26, 28, 29, 30, 31, 37, 38, 39, 42, 43, 44, 51, 53, 54, 55, 56, 61, 69, 73, 85, 87, 89, 91, 93, 98, 99], "network_explorer_map": 54, "network_map": [54, 85], "network_registered_at": [6, 10, 53], "networkregisteredat": 10, "networksad": 87, "neural": 53, "neurip": 53, "neuron": [0, 1, 2, 7, 11, 12, 24, 25, 31, 34, 37, 39, 44, 45, 48, 53, 56, 61, 69, 87, 98, 99], "neuron_for_uid": [0, 56, 63, 87], "neuron_for_uid_lit": 87, "neuron_incent": 53, "neuron_info": [0, 2, 7, 56, 99], "neuron_info_lit": [7, 99], "neuron_lit": 11, "neuron_rank": 53, "neuroninfo": [0, 11, 21, 53, 56, 87], "neuroninfolit": [0, 11, 12, 21, 53, 56, 87], "neurons_lit": [0, 56, 63, 87], "new": [0, 1, 10, 15, 21, 22, 23, 24, 29, 33, 42, 47, 53, 55, 56, 69, 70, 71, 73, 85, 87, 89, 91], "new_coldkei": 15, "newblockev": 91, "next": [0, 1, 56], "nich": [0, 56], "nn": [2, 9, 24, 53], "no_error": 72, "node": [0, 1, 53, 56, 69, 72, 93], "nomin": [0, 4, 5, 25, 34, 48, 56], "nominationerror": 25, "non": [0, 1, 25, 56, 69, 85], "nonassociatedcoldkei": [0, 25, 56], "nonc": [0, 1, 29, 42, 56, 69, 75, 89, 91, 92], "nonce_kei": [0, 56], "nonce_start": 92, "none": [0, 1, 6, 10, 11, 12, 21, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 46, 47, 48, 49, 50, 53, 55, 56, 61, 69, 70, 71, 72, 73, 75, 79, 80, 82, 85, 87, 89, 91, 92, 96, 98], "nontorchmetagraph": 53, "normal": 98, "normalize_max_weight": 98, "notdelegateerror": 25, "note": [0, 31, 44, 56, 72, 87, 88], "notenoughstaketosetchildkei": [0, 25, 56], "notic": 76, "notregisterederror": 25, "notverifiedexcept": 25, "now": [0, 1, 53, 56, 69], "np": [0, 30, 37, 43, 45, 56, 70, 98], "null": [0, 11, 12, 56, 87], "null_entri": 71, "num": 84, "num_neuron": 98, "num_proc": 91, "num_process": [0, 29, 42, 56, 89, 91], "num_uid": [10, 53], "number": [0, 1, 2, 13, 15, 17, 21, 22, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 53, 56, 61, 69, 71, 72, 76, 84, 87, 89, 91, 92, 98], "numer": 1, "numpi": [0, 26, 38, 53, 56, 70, 91, 92, 98], "numpyortorch": 53, "numuid": 10, "obj": 69, "object": [0, 1, 2, 6, 8, 9, 10, 12, 16, 20, 21, 24, 28, 29, 30, 31, 32, 35, 36, 37, 42, 43, 44, 45, 46, 49, 50, 53, 55, 56, 61, 69, 70, 71, 73, 76, 82, 85, 87], "occur": [0, 1, 24, 56], "off": [24, 82, 85], "offer": [0, 1, 24, 56, 87], "offlin": [1, 53], "often": 53, "old": 15, "old_bal": 32, "old_coldkei": 15, "older": 83, "omit": 79, "onc": [0, 56], "one": [0, 1, 23, 24, 28, 31, 41, 44, 53, 56, 70, 71, 73, 79, 87], "ongo": 1, "onli": [0, 1, 24, 53, 55, 56, 69, 70, 72, 82, 87], "open": 24, "opentensor": 54, "oper": [0, 1, 17, 24, 25, 53, 56, 57, 58, 59, 60, 62, 63, 64, 65, 66, 68, 69, 76, 87, 91, 98], "optim": 69, "option": [0, 1, 11, 12, 15, 21, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 53, 56, 61, 69, 70, 71, 72, 73, 75, 76, 79, 82, 85, 87, 88, 91, 93, 96, 98], "order": [69, 73], "org": 54, "origin": [1, 28, 56, 69, 79], "origin_coldkey_ss58": [0, 56], "origin_hotkei": [0, 28, 41, 56], "origin_hotkey_ss58": [0, 56], "origin_netuid": [0, 28, 41, 56], "origin_pric": [0, 56], "origin_subnet_pric": [0, 56], "other": [0, 1, 11, 23, 24, 53, 56, 61, 69, 71, 80, 87], "otherwis": [0, 24, 28, 29, 31, 37, 39, 42, 44, 56, 69, 71, 85, 87], "our": 71, "out": 1, "outcom": 69, "outlin": 53, "output": [1, 29, 42, 91], "output_in_plac": [0, 29, 42, 56, 89, 91], "over": [4, 5, 24, 53, 69, 91], "overal": [0, 56], "overflow": 25, "overhead": 53, "overload": 69, "overrid": [1, 69, 73, 79, 85], "overridden": [69, 91], "overview": [0, 56, 87], "own": [0, 25, 53, 56, 69], "owner": [0, 4, 5, 41, 56], "owner_coldkei": [6, 10, 53], "owner_hotkei": [6, 10, 53], "owner_ss58": [4, 5, 19], "ownercoldkei": 10, "ownerhotkei": 10, "ownership": [0, 41, 56], "pack": 91, "packag": [69, 82, 93, 97], "page": 99, "pair": [0, 16, 41, 56, 69, 70, 73, 87], "pallet": 96, "paper": 53, "param": [0, 24, 56, 76, 83, 87, 96, 98], "param_nam": [0, 23, 56], "paramet": [0, 1, 2, 5, 6, 8, 9, 10, 11, 14, 15, 16, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 75, 76, 77, 79, 82, 83, 84, 85, 87, 88, 89, 91, 92, 93, 96, 97, 98], "parameter_dict": [2, 9], "parameterdict": [2, 9], "params_encod": 96, "paramwithtyp": [0, 56, 73], "parent": [0, 25, 55, 56], "pars": [1, 24, 25, 55, 69, 70, 72], "parse_headers_to_input": 69, "parser": [1, 23, 61, 71, 73, 82], "part": [0, 1, 6, 53, 56, 69], "parti": 82, "partial": [0, 28, 32, 36, 41, 46, 50, 56], "particip": [0, 1, 53, 56, 87], "particular": [0, 4, 51, 56], "particularli": [0, 53, 56, 69], "pass": [0, 1, 24, 30, 32, 37, 43, 45, 46, 55, 56, 71, 72, 85, 87, 98], "password": [0, 56, 85], "passworderror": [0, 56, 85], "past": 53, "path": [1, 53], "payload": [1, 69, 93], "peer": 53, "penalti": [0, 56], "pend": [0, 56, 71], "pending_alpha_emiss": [6, 10], "pending_root_emiss": [6, 10], "pendingalphaemiss": 10, "pendingchildkei": [0, 56], "pendingrootemiss": 10, "per": [0, 1, 4, 5, 17, 29, 42, 53, 56, 89, 91, 92], "perceiv": [0, 56], "percentag": [0, 4, 5, 6, 34, 36, 46, 48, 50, 56], "perform": [0, 1, 24, 53, 56, 69, 76, 82, 87], "period": [0, 17, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 56, 87], "permit": [0, 11, 12, 25, 53, 56], "persist": 53, "person": 72, "pickl": [53, 72], "piec": 24, "ping": 24, "pipaddress": 54, "pipelin": 1, "pivot": [1, 53, 69], "place": [0, 1, 15, 24, 53, 56, 89, 91], "placehold": [31, 44, 80], "placeholder1": [2, 31, 44, 73, 87], "placeholder2": [2, 31, 44, 73, 87], "plai": [1, 53, 69], "plan": [0, 56, 87], "point": [0, 53, 56, 76, 87], "pool": [1, 6, 10, 53], "popul": [0, 11, 56, 87], "port": [1, 2, 13, 31, 44, 69, 73, 87, 88], "portal": [29, 42], "posit": [1, 55, 69, 70], "possibl": 73, "post": 24, "postprocess": 1, "postprocessexcept": 25, "potenti": [0, 1, 37, 39, 53, 56], "pow": [25, 29, 42, 76, 89, 90, 92, 99], "pow_registration_allow": 10, "power": 72, "powregistrationallow": 10, "powsolut": [89, 91], "practic": 53, "preced": 73, "predefin": 1, "prefix": [1, 69, 71, 73, 82], "prepar": [0, 56, 82, 93], "prepare_synaps": 93, "prepare_synapse_fn": 93, "prepend": 73, "preprocess": [1, 24], "preprocess_synapse_for_request": 24, "presenc": [0, 1, 56], "present": [0, 10, 56, 69], "preserv": 69, "prevent": [0, 1, 24, 56, 91], "previou": [1, 51, 53], "previous": [0, 56], "price": [0, 6, 28, 36, 41, 46, 50, 56], "primari": [29, 42, 69, 82], "primarili": 53, "principl": 53, "print": [0, 1, 23, 24, 56, 61, 69, 73, 89, 91], "prior": [32, 69], "priorit": 1, "prioriti": [1, 25, 71], "prioritize_my_synaps": 1, "prioritize_my_synapse_2": 1, "priority_custom": 1, "priority_fn": 1, "priorityexcept": 25, "prioritythreadpoolexecutor": [23, 71], "privat": 1, "problem": [91, 92], "proc_num": 91, "proce": 1, "process": [0, 1, 10, 17, 21, 24, 29, 33, 42, 47, 53, 55, 56, 69, 70, 72, 82, 87, 89, 91, 93, 97, 98], "process_error_messag": 24, "process_nest": 10, "process_respons": 93, "process_responses_fn": 93, "process_server_respons": 24, "process_stake_data": 21, "process_streaming_respons": 55, "process_tim": 69, "process_weight": 98, "process_weights_for_netuid": 98, "processing_dur": 69, "processor": 1, "produc": 69, "program": 1, "progress": [0, 56, 89, 91], "prohibit": 1, "project": [79, 81, 83], "prolifer": [0, 56], "prometheu": [11, 12, 13, 73], "prometheus_info": [7, 11, 12, 99], "prometheusinfo": [11, 12, 13], "prometheusinfodict": 87, "prometheusservecallparam": [73, 87], "promptli": 1, "proof": [0, 29, 42, 56, 89, 91, 92], "propag": 53, "proper": [24, 37, 39, 53, 69], "properli": [1, 24], "properti": [0, 2, 24, 53, 56, 61, 69, 71, 76], "proport": [0, 25, 53, 56], "proportionoverflow": [0, 25, 56], "propos": [0, 14, 56], "proposal_dict": 14, "proposal_hash": [0, 56], "proposal_vote_data": [7, 99], "proposalvotedata": [0, 14, 56], "protect": [0, 28, 41, 53, 56], "protocol": [1, 2, 9, 31, 44, 69, 73, 87], "provid": [0, 1, 7, 11, 21, 24, 26, 29, 37, 38, 39, 42, 51, 53, 55, 56, 61, 69, 72, 73, 76, 80, 81, 82, 85, 87, 89, 91, 92, 94, 96, 98], "proxi": 91, "prune": [11, 12], "pruning_scor": [10, 11, 12, 20, 53], "pruningscor": 10, "public": [0, 1, 35, 49, 53, 56], "publish": [0, 31, 44, 56, 82, 87], "publish_metadata": [31, 44], "punit": [0, 56], "put": 91, "pydant": [55, 69, 70], "pydantic_cor": [55, 69, 70], "pypi": [54, 97], "python": 72, "pytorch": [53, 98], "pyvalueerror": 72, "quantil": 98, "queri": [0, 24, 25, 53, 56, 61, 69, 87, 93, 99], "query_api": 93, "query_const": [0, 56, 64, 87], "query_ident": [0, 56, 63], "query_map": [0, 56, 64], "query_map_subtensor": [0, 56, 64, 87], "query_modul": [0, 56, 64], "query_respons": [0, 56, 87], "query_runtime_api": [0, 56, 64], "query_subtensor": [0, 56, 64, 87], "querymapresult": [21, 56], "queue": [1, 71, 82, 91], "queuehandl": 82, "queuelisten": 82, "quick": [0, 56, 69, 87], "quicker": 53, "quicknet": 72, "r": 53, "rais": [0, 1, 2, 21, 23, 24, 25, 31, 32, 34, 44, 46, 48, 53, 55, 56, 69, 70, 71, 72, 85, 87, 88, 89, 91, 97], "raise_error": [0, 34, 48, 56, 85], "randomli": [0, 56], "rang": [0, 1, 56, 88], "rank": [0, 1, 10, 11, 12, 20, 53, 56, 87], "rao": [0, 21, 56, 76, 87], "rao_symbol": 54, "rao_unit": 76, "raopertao": 85, "rate": [0, 11, 17, 25, 32, 53, 56, 87], "rate_toler": [0, 28, 32, 36, 41, 46, 50, 56], "rather": [0, 24, 56, 69], "ratio": [0, 28, 41, 56], "raw": [69, 70, 96], "raw0": [31, 44], "re": [0, 56, 69], "reach": [0, 25, 56, 72], "read": 69, "read_onli": 54, "readabl": [1, 84, 85], "readi": [1, 55], "real": [0, 56, 87], "realli": 1, "realloc": [0, 56], "reap": [0, 56], "receiv": [0, 1, 6, 24, 53, 56, 69], "received_head": 69, "receiver_hotkei": 1, "recent": [0, 56, 83, 87], "recipi": [35, 49], "reclaim": 71, "recogn": [0, 56], "recommend": [24, 69], "recomput": 1, "reconstitut": 53, "reconstruct": [1, 69], "record": [0, 53, 56, 79, 87], "record_log": 82, "recurs": 69, "recycl": [0, 29, 42, 56, 66], "redeploi": 1, "reduc": [0, 53, 56], "refer": [0, 53, 56, 87, 100], "reflect": [0, 53, 56], "regardless": [35, 49], "regist": [0, 1, 4, 5, 25, 29, 30, 42, 43, 56, 60, 82, 87, 89, 91], "register_cuda": [90, 99], "register_extrins": [29, 42], "register_primary_logg": 82, "register_subnet": [0, 56, 60, 66], "register_subnet_extrins": [29, 42], "registr": [0, 1, 2, 4, 5, 9, 17, 24, 25, 26, 27, 38, 40, 53, 56, 70, 85, 98, 99], "registration_allow": [10, 17], "registrationallow": 10, "registrationerror": 25, "registrationnotpermittedonrootsubnet": [0, 25, 56], "registrationstatist": 91, "registrationstatisticslogg": 91, "registri": 7, "reject": [0, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 56, 87], "relat": [0, 11, 13, 25, 29, 42, 56], "relationship": [0, 53, 56], "releas": [1, 24, 53], "relev": [0, 1, 2, 56], "reli": 1, "reliabl": [1, 53, 69], "relianc": 1, "reload": 53, "remain": [0, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 53, 56, 87], "remov": [0, 1, 36, 50, 56, 82], "replac": 79, "replai": 1, "replic": 69, "repositori": [0, 29, 42, 56], "repr": 85, "repres": [0, 1, 2, 4, 6, 9, 11, 12, 13, 15, 16, 17, 22, 24, 31, 44, 51, 53, 56, 69, 70, 71, 76, 87], "represent": [0, 1, 2, 24, 31, 44, 53, 56, 69, 73, 76, 88, 96, 98], "reput": 53, "request": [0, 1, 24, 25, 31, 44, 56, 69, 87, 97], "request_nam": 24, "requestresponseendpoint": 1, "requir": [0, 1, 25, 31, 37, 39, 44, 53, 55, 56, 69, 87], "required_hash_field": 69, "reserv": 2, "reset": [0, 56, 87, 92], "reset_cuda": 92, "resourc": [0, 1, 24, 53, 56, 71], "respect": 53, "respond": 1, "respons": [1, 24, 25, 29, 30, 31, 32, 35, 36, 42, 43, 44, 45, 46, 49, 50, 53, 55, 69, 93], "response_overrid": 1, "restart": 53, "restor": 53, "restrict": [0, 56], "result": [0, 1, 26, 38, 56, 69, 79, 85, 93, 96], "retri": [0, 56, 61, 87], "retriev": [0, 1, 51, 53, 55, 56, 87, 97], "retry_forev": [0, 56, 61, 87], "return": [0, 1, 2, 4, 5, 6, 8, 9, 10, 11, 12, 14, 15, 16, 21, 22, 23, 24, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 53, 55, 56, 61, 69, 70, 71, 72, 73, 75, 76, 79, 80, 82, 85, 87, 88, 89, 91, 92, 93, 96, 97, 98], "return_per_1000": [4, 5], "return_str": 72, "reus": [0, 1, 24, 56], "reusablecoroutin": 87, "reuse_block": [0, 31, 56], "reveal": [0, 17, 21, 22, 26, 37, 38, 39, 56, 72], "reveal_round": [0, 22, 56, 72], "reveal_weight": [0, 56, 60], "reveal_weights_extrins": [37, 39], "revel": [0, 56, 72], "reverse_network_map": 54, "reward": [0, 34, 48, 53, 56], "rfc": 79, "rho": [10, 17, 19, 87], "robust": 69, "role": [0, 1, 53, 56, 69, 87], "root": [0, 25, 27, 40, 53, 56, 61, 67, 69, 80, 98, 99], "root_dir": 53, "root_regist": [0, 56, 60], "root_register_extrins": [30, 43], "root_set_weight": [0, 56, 60], "root_tao_stake_weight": 54, "round": [0, 22, 56, 72], "round_numb": 22, "rounds_tot": 91, "rout": 69, "router": [1, 88], "row": [53, 98], "row_bond": 98, "row_weight": 98, "rpc": [0, 7, 56], "rule": [0, 1, 56, 87], "run": [0, 1, 56, 69, 71, 85, 87, 89, 91], "run_async": 24, "run_in_thread": 1, "runexcept": 25, "runtim": [0, 1, 53, 56], "runtime_api": [0, 56], "runtime_config": 96, "runtimeconfigurationobject": 96, "runtimeerror": 53, "s0": 79, "s39": 79, "safe": [0, 24, 32, 56, 69, 71, 91], "safe_glob": 53, "safe_stak": [0, 28, 32, 36, 41, 46, 50, 56], "safeti": [0, 28, 36, 41, 46, 50, 56], "salt": [0, 37, 39, 56, 98], "same": [0, 1, 23, 41, 56, 69, 72, 89, 91], "sanit": 69, "save": [53, 79, 97], "scalabl": [0, 1, 56], "scale": [0, 7, 21, 56], "scale_typ": 96, "scalebyt": [21, 96], "scalecodec": [0, 21, 56, 76, 96], "scaleobj": [0, 56, 87], "scaletyp": [76, 96], "scaling_law_pow": 19, "scenario": [1, 24], "schedul": [15, 71], "scheduled_coldkey_swap_info": [7, 99], "scheduledcoldkeyswapinfo": [15, 21], "schema": 69, "score": [11, 12, 53], "seal": [91, 92], "seamless": [1, 83], "seamlessli": 1, "search": 51, "second": [0, 6, 24, 26, 29, 38, 42, 56, 72, 75, 93, 97], "secur": [0, 1, 53, 56, 69, 87], "see": [0, 23, 25, 56, 70, 71, 73, 76, 85, 87, 88, 97], "seen": [1, 69], "selectivemetagraphindex": 10, "self": [1, 23, 24, 25, 55, 69, 70, 71, 73, 76, 85, 87, 88, 97], "senat": [0, 14, 56], "send": [24, 29, 42, 53, 55, 69], "sender": 1, "sensit": [0, 53, 56, 69, 87], "sent": [1, 24, 55, 69], "separ": [1, 69, 82], "sequenti": 24, "serial": [1, 22, 53, 69, 70], "serialized_commit": [0, 56], "serialized_data": 69, "serv": [0, 1, 2, 27, 40, 53, 56, 69, 73, 87, 99], "serve_axon": [0, 56, 60], "serve_axon_extrins": [31, 44], "serve_extrins": [31, 44], "server": [1, 24, 25, 29, 42, 55], "server_respons": 24, "servic": [1, 17, 31, 44], "serving_rate_limit": [10, 17], "servingratelimit": 10, "session": [24, 53], "set": [0, 1, 2, 23, 24, 25, 29, 30, 31, 32, 34, 35, 36, 37, 42, 43, 44, 45, 46, 48, 49, 50, 52, 53, 56, 69, 72, 73, 76, 82, 83, 91, 98, 99], "set_children": [0, 56, 60], "set_commit": [0, 56, 58], "set_config": 82, "set_consol": 82, "set_debug": 82, "set_default": 82, "set_delegate_tak": [0, 56, 59], "set_difficulti": 87, "set_info": 82, "set_name_typ": 69, "set_reveal_commit": [0, 56, 58], "set_root_weights_extrins": [30, 43], "set_subnet_ident": [0, 56, 60, 66], "set_subnet_identity_extrins": [29, 42], "set_trac": [79, 82], "set_unit": 76, "set_warn": 82, "set_weight": [0, 40, 56, 60, 99], "set_weights_extrins": [37, 45], "setlevel": 82, "setup": [0, 1, 56, 87], "setup_config": [61, 73], "sever": [1, 71, 94], "sgvsbg8gv29ybgq": 69, "sha256": [31, 44], "sha3": 69, "shape": [0, 56, 70], "share": [53, 76, 91], "should": [0, 1, 24, 29, 31, 42, 44, 53, 55, 56, 69, 70, 87, 89, 91], "should_exit": 1, "should_sync": 53, "shut": 1, "shutdown": [1, 71], "side": 1, "sign": [0, 1, 24, 29, 33, 34, 42, 47, 48, 53, 56], "sign_and_send_extrins": [0, 56, 61], "sign_with": [0, 56], "signal": [1, 24], "signatur": [1, 23, 25, 55, 69, 70, 71, 73, 76, 85, 87, 88, 97], "signifi": 53, "signific": [0, 56], "silent": 24, "similar": [24, 53], "simpl": [69, 96], "simpli": 69, "simplifi": [0, 53, 56, 87], "simul": [0, 56, 87], "sinc": [0, 56], "singl": [0, 24, 56, 96], "size": [53, 69], "skip": 80, "slippag": 6, "snapshot": [0, 53, 56, 87], "so": [69, 98], "softwar": 53, "solut": [25, 89, 91, 92], "solution_queu": 91, "solv": [0, 29, 42, 56, 89, 91, 92], "solve_cuda": 92, "solver": [25, 91], "some": [0, 17, 56, 61], "someth": 1, "sort": 1, "sourc": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 49, 50, 51, 53, 55, 56, 69, 70, 71, 73, 75, 76, 77, 79, 80, 82, 83, 84, 85, 87, 88, 89, 91, 92, 93, 94, 96, 97, 98], "spam": 1, "special": [1, 53, 55, 79], "specif": [0, 1, 4, 37, 39, 53, 55, 56, 69, 71, 72, 82, 83, 87, 93], "specifi": [0, 1, 21, 24, 31, 32, 36, 44, 46, 50, 51, 53, 56, 69, 79, 82, 85, 87, 96], "specul": 53, "sphinx": 99, "ss58": [0, 4, 16, 21, 22, 28, 32, 34, 36, 41, 46, 48, 50, 51, 56, 85, 87], "ss58_address": [0, 35, 49, 56, 85, 87, 98], "ss58_address_length": 54, "ss58_address_to_byt": 85, "ss58_decod": 85, "ss58_format": 54, "ss58_to_vec_u8": 85, "stabil": [0, 53, 56], "stabl": 1, "stacklevel": 82, "stage": 1, "stake": [0, 4, 6, 11, 12, 16, 21, 25, 27, 28, 35, 36, 40, 41, 49, 50, 51, 53, 56, 61, 87, 99], "stake_data": 21, "stake_dict": [11, 12], "stake_info": [7, 99], "stakeerror": 25, "stakeinfo": [0, 16, 21, 51, 56], "staker": 6, "stale": 91, "standard": [0, 53, 56, 69, 73, 81], "starlett": [1, 55], "start": [0, 1, 33, 47, 56, 69, 82, 91, 92], "start_cal": [0, 27, 40, 56, 60, 61, 99], "start_call_extrins": [33, 47], "start_tim": 1, "stat": 91, "state": [0, 1, 6, 20, 24, 53, 56, 57, 69, 79, 82, 87, 96], "state_cal": [0, 56, 57], "state_dict": 53, "statemachin": 82, "static": [10, 11, 12, 53, 70, 73, 76, 87, 91], "statist": 91, "statu": [0, 1, 11, 24, 34, 48, 53, 56, 69, 82, 85, 87, 91], "status_cod": [1, 69], "status_messag": 69, "stdout": [1, 73], "step": [0, 1, 56], "stop": [1, 82, 91], "stopev": 91, "storag": [0, 56, 87, 94, 95, 99], "storage_funct": 96, "storagefunctionnotfound": 25, "storagekei": 96, "store": [53, 69, 76, 87, 91, 96], "str": [0, 1, 2, 3, 4, 5, 6, 9, 10, 11, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22, 23, 24, 26, 28, 29, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 44, 46, 47, 48, 49, 50, 51, 53, 54, 56, 61, 69, 70, 71, 72, 73, 76, 77, 79, 80, 82, 85, 87, 88, 91, 92, 96, 97, 98], "str_val": 88, "strateg": [0, 56], "stream": [24, 52, 82, 99], "stream_respons": 55, "streamer": 55, "streamingrespons": 55, "streamingsynaps": [1, 24, 55], "streamlin": [0, 56, 87], "strict": [23, 85], "string": [0, 2, 9, 12, 21, 22, 24, 37, 39, 53, 56, 69, 70, 72, 73, 76, 79, 85, 87, 88, 96], "stronger": 53, "strtobool": 85, "struct": 72, "structur": [0, 2, 7, 10, 21, 53, 55, 56, 69, 87], "style": 79, "sub": [54, 81, 91], "subclass": [55, 69], "submiss": [0, 33, 47, 56], "submit": [0, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 56, 71, 87], "subnet": [0, 1, 2, 4, 5, 7, 9, 17, 18, 19, 24, 25, 28, 29, 30, 33, 36, 37, 39, 41, 42, 43, 45, 46, 47, 50, 56, 61, 76, 85, 87, 89, 91, 98, 99], "subnet_contact": [18, 29, 42], "subnet_emiss": 10, "subnet_exist": [0, 56, 66], "subnet_hyperparamet": [7, 99], "subnet_ident": [0, 6, 7, 10, 56, 99], "subnet_info": [7, 99], "subnet_nam": [6, 18, 29, 42], "subnet_st": [7, 99], "subnet_url": [18, 29, 42], "subnet_volum": [6, 10], "subnetemiss": 10, "subnethyperparamet": [0, 17, 21, 56], "subnetident": [0, 6, 10, 18, 21, 53, 56], "subnetinfo": [0, 19, 21, 56], "subnetrevealperiodepoch": [0, 56], "subnetsapi": 93, "subnetst": [20, 21], "subnetvolum": 10, "subnetwork": [0, 20, 29, 42, 56, 87], "subnetwork_n": [0, 19, 56, 66], "subnetworkdoesnotexist": [0, 25, 56], "subnetworkn": [0, 56], "subscrib": [0, 25, 31, 44, 56], "subsequ": [1, 23, 24], "subset": [0, 56], "substrat": [0, 56, 61, 94, 96], "substrate_util": [85, 99], "substraterequestexcept": [0, 25, 32, 46, 56, 85], "subtensor": [0, 1, 23, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 52, 53, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 73, 83, 85, 87, 89, 91, 98, 99], "subtensor_api": [52, 99], "subtensor_field": 67, "subtensor_mock": [86, 99], "subtensorapi": [61, 67], "subtensorinterfac": [32, 46], "subtensormixin": [0, 56, 73], "subtensormodul": [0, 56, 87], "subvortex": 54, "subvortex_entrypoint": 54, "succeed": 69, "success": [0, 1, 25, 26, 28, 29, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 44, 45, 46, 47, 48, 49, 50, 56, 69, 77, 82, 85, 87], "success_level_num": 79, "successfulli": [0, 31, 33, 44, 47, 56], "sudo_force_set_bal": 87, "suffici": [0, 56, 87], "suffix": [82, 84], "suggest": 53, "suitabl": 69, "sum": [0, 53, 56, 69, 98], "superclass": 69, "suppli": 53, "support": [0, 1, 23, 56, 76], "supress": 85, "sure": 72, "swap": [0, 15, 28, 41, 56], "swap_stak": [0, 56, 60], "swap_stake_extrins": [28, 41], "sy": 85, "symbol": [6, 10, 53, 76], "synaps": [1, 24, 25, 52, 55, 75, 83, 93, 99], "synapse_dict": 69, "synapse_histori": 24, "synapse_nonc": 75, "synapse_timeout": 75, "synapse_to_respons": 1, "synapsedendritenoneexcept": 25, "synapseexcept": 25, "synapseparsingerror": 25, "sync": [0, 37, 38, 39, 45, 53, 61], "sync_substr": [21, 56], "synchron": [0, 24, 53, 56, 87, 91], "system": [0, 24, 53, 56, 80, 82, 83, 87, 91], "t": [0, 1, 8, 23, 25, 53, 56, 82, 85], "tailor": [1, 69], "take": [0, 1, 4, 5, 15, 25, 27, 40, 55, 56, 87, 99], "takeerror": 25, "taken": 69, "tamper": [0, 1, 56, 69], "tao": [0, 4, 5, 6, 10, 29, 36, 42, 53, 56, 76, 87], "tao_dividends_per_hotkei": [10, 53], "tao_in": [6, 10], "tao_in_emiss": [6, 10], "tao_slippag": 6, "tao_stak": [10, 20, 53], "tao_symbol": 54, "tao_to_alpha": 6, "tao_to_alpha_with_slippag": 6, "taodividendsperhotkei": 10, "taoin": 10, "taoinemiss": 10, "taostak": 10, "target": [0, 17, 24, 33, 47, 56], "target_axon": 24, "target_axon_info": 24, "target_regs_per_interv": [10, 17], "targetregsperinterv": 10, "task": [0, 1, 56, 69], "tcp": 9, "technic": [0, 56], "techniqu": 1, "technologi": [0, 56, 87], "templat": 79, "tempo": [0, 6, 10, 17, 19, 53, 56, 66], "temporarili": 1, "tensor": [2, 9, 52, 53, 69, 98, 99], "tensor_": 70, "term": [0, 56], "termin": [1, 69, 77], "terminal_info": 69, "terminalinfo": 69, "terminate_workers_and_wait_for_exit": 91, "test": [0, 53, 54, 56, 61, 73, 77, 85, 87], "text": [1, 79, 91], "textual": [29, 42], "th": [0, 53], "than": [0, 1, 24, 56, 98], "thei": [0, 1, 6, 53, 56, 69, 98], "them": [0, 1, 24, 55, 56, 69], "themselv": [0, 56], "therebi": [0, 1, 56], "thereof": 88, "thi": [0, 1, 2, 4, 5, 6, 7, 10, 11, 12, 17, 20, 21, 23, 24, 25, 26, 29, 31, 35, 37, 38, 39, 42, 44, 49, 51, 53, 55, 56, 61, 69, 71, 72, 73, 76, 79, 80, 81, 82, 83, 87, 89, 91, 92, 93, 96, 98, 99, 100], "thin": [0, 56], "think": [0, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 56, 69, 87], "third": 82, "those": [23, 24], "thread": [0, 1, 29, 42, 56, 71, 89, 91, 92], "thread_name_prefix": 71, "thread_pool": 1, "threadpool": [1, 52, 99], "threadpoolexecutor": 71, "three": [0, 56], "threshold": [0, 14, 17, 56, 87, 98], "through": [0, 1, 24, 51, 56, 80, 87], "throughout": 81, "time": [0, 1, 53, 56, 69, 71, 72, 75, 79, 87, 91], "time_averag": 91, "time_sp": 91, "time_spent_tot": 91, "timelock": [52, 99], "timeout": [0, 1, 24, 29, 30, 31, 32, 35, 36, 37, 42, 43, 44, 45, 46, 49, 50, 56, 69, 75, 93, 97], "timestamp": [0, 1, 11, 12, 53, 56], "tl": [0, 31, 44, 56], "tle": 72, "tmp": 53, "to_dict": 23, "to_head": 69, "to_hex": 96, "to_parameter_dict": [2, 9], "to_str": [1, 2], "todo": 53, "token": [0, 53, 55, 56, 87], "token_stream": 55, "toler": [0, 28, 32, 36, 41, 46, 50, 56], "tolist": 70, "too": [0, 25, 56], "tool": [0, 56, 69, 87], "toomanychildren": [0, 25, 56], "top": 96, "topologi": [0, 1], "torch": [0, 2, 9, 24, 26, 37, 38, 45, 53, 56, 70, 85, 91, 98], "torchmetagraph": 53, "total": [0, 4, 5, 11, 12, 53, 56, 69, 91], "total_bit": 76, "total_daily_return": [4, 5], "total_s": 69, "total_stak": [4, 10, 11, 12, 20, 53], "totalstak": 10, "toward": [0, 53, 56], "tpb": [0, 29, 42, 56, 89, 91, 92], "trace": [1, 79, 82, 83], "trace_level_num": 79, "trace_log_format": 78, "track": [0, 53, 56, 69], "transact": [0, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 53, 56, 69, 87], "transactor": [0, 25, 56], "transfer": [0, 25, 27, 28, 40, 41, 56, 60, 87, 99], "transfer_al": [0, 35, 49, 56], "transfer_bal": 87, "transfer_extrins": [35, 49], "transfer_stak": [0, 56, 60], "transfer_stake_extrins": [28, 41], "transfererror": 25, "transform": [10, 69], "transit": [1, 82], "transmiss": [1, 69], "transmit": [24, 69], "transpar": [0, 56, 69], "transport": 69, "travers": 69, "tree": 96, "trigger": [0, 1, 33, 47, 56], "true": [0, 1, 2, 6, 24, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 53, 56, 61, 67, 69, 71, 72, 73, 79, 82, 83, 85, 87, 89, 91], "trust": [0, 1, 10, 11, 12, 20, 53, 56], "trustworthi": [0, 1, 53, 56, 87], "truth": 85, "try": [25, 91], "tupl": [0, 1, 6, 10, 11, 21, 22, 24, 26, 29, 31, 33, 34, 37, 38, 39, 42, 44, 47, 48, 53, 56, 69, 71, 72, 73, 75, 82, 85, 87, 92, 98], "tv": 53, "two": [70, 73, 76, 87], "two_x64_concat": 94, "tx_rate_limit": [0, 56, 57, 61], "txratelimitexceed": [0, 25, 56], "type": [0, 1, 2, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 55, 56, 69, 70, 71, 72, 75, 76, 79, 80, 82, 83, 85, 87, 88, 89, 91, 92, 93, 96, 97, 98, 99], "type_nam": 21, "type_registri": 54, "type_str": 21, "typeddict": [73, 76, 87], "typeerror": [2, 21, 72], "typic": [0, 1, 53, 55, 56, 69], "u": 87, "u128": 76, "u16_max": [85, 98], "u16_normalized_float": 85, "u32": 98, "u32_max": 98, "u64": 85, "u64_max": 85, "u64_normalized_float": 85, "u64f64": 76, "udp": 9, "uid": [0, 11, 12, 26, 28, 31, 32, 33, 36, 37, 38, 39, 41, 44, 45, 46, 47, 50, 53, 56, 76, 87, 98], "uint64": [0, 37, 45, 56, 98], "unabl": 25, "unauthor": [1, 69], "unchang": 88, "under": [0, 56], "underli": [0, 1, 24, 53, 56, 82], "understand": [0, 53, 56, 87], "undesir": 1, "unifi": 24, "union": [0, 2, 6, 9, 10, 21, 24, 26, 29, 30, 31, 36, 37, 38, 41, 42, 43, 44, 45, 50, 53, 56, 57, 58, 59, 60, 62, 63, 64, 65, 66, 68, 70, 72, 76, 85, 87, 89, 91, 92, 93, 98], "uniqu": [0, 1, 11, 12, 24, 29, 37, 39, 42, 46, 50, 51, 53, 56, 69, 87, 88, 98], "unit": [0, 1, 53, 56, 76, 87], "unknownsynapseerror": 25, "unless": 24, "unlock": [0, 33, 47, 56, 85], "unlock_kei": 85, "unlock_typ": 85, "unlockstatu": 85, "unmet": 1, "unpickl": 53, "unpicklingerror": 53, "unstak": [0, 6, 25, 27, 40, 46, 56, 60, 65, 99], "unstake_extrins": [36, 50], "unstake_multipl": [0, 56, 60, 65], "unstake_multiple_extrins": [36, 50], "unstakeerror": 25, "unsuccess": [0, 56, 85], "until": [0, 56, 71], "up": [0, 1, 24, 53, 56, 71, 73, 82, 83, 97], "updat": [0, 1, 11, 12, 24, 25, 29, 42, 53, 55, 56, 87, 91, 92], "update_curr_block": 91, "update_interv": [0, 29, 42, 56, 89, 91, 92], "upon": [0, 24, 53, 56], "upper": 92, "urgenc": 1, "url": [0, 1, 3, 24, 25, 29, 42, 56, 73, 85, 88], "urllib": 88, "us": [0, 1, 2, 6, 17, 21, 24, 26, 29, 31, 32, 33, 35, 36, 37, 38, 39, 42, 44, 46, 47, 49, 50, 53, 55, 56, 61, 69, 70, 71, 72, 73, 76, 79, 85, 87, 89, 91, 92, 93, 94, 96, 97, 98], "usag": [0, 1, 24, 56, 69, 72], "use_nonc": [0, 56], "use_torch": [2, 85, 91], "user": [0, 1, 24, 37, 39, 53, 56, 69, 83, 98], "user_bittensor_dir": 54, "using_new_loop": 24, "usingspawnstartmethod": 91, "usual": 25, "utf": [69, 85], "util": [0, 1, 2, 4, 5, 6, 7, 9, 10, 11, 12, 16, 19, 20, 24, 26, 31, 32, 35, 38, 40, 44, 46, 49, 53, 56, 61, 70, 73, 74, 99], "uuid": [1, 24, 69], "uvicorn": 1, "v": [70, 73, 87], "v10": 0, "v_7_2_0": 1, "val": [85, 87], "valid": [0, 1, 4, 5, 11, 12, 17, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 53, 55, 56, 69, 70, 79, 85, 87, 91, 98], "validate_chain_endpoint": 85, "validationerror": [55, 69, 70], "validator_permit": [4, 5, 10, 11, 12, 20, 53], "validator_trust": [11, 12, 53], "validatorbatchs": 87, "validatorpermit": 10, "valu": [0, 1, 2, 10, 11, 12, 17, 21, 23, 30, 37, 39, 43, 45, 53, 56, 69, 70, 73, 75, 85, 87, 91, 96, 98], "valuabl": [0, 53, 56, 69, 87], "value_scale_typ": 96, "valueerror": [2, 85, 89, 91], "variabl": [1, 2, 4, 9, 11, 12, 13, 15, 16, 17, 22, 53, 55, 69, 76], "variou": [0, 1, 53, 56], "vec_u8": 15, "vector": 21, "verbos": [0, 56, 61, 87, 89, 91], "verif": [1, 69], "verifi": [0, 1, 25, 56, 69, 87], "verify_body_integr": 1, "verify_custom": 1, "verify_fn": 1, "verify_my_synaps": 1, "verify_my_synapse_2": 1, "versatil": [0, 56], "version": [0, 2, 5, 11, 13, 17, 26, 30, 37, 38, 39, 43, 45, 53, 56, 61, 69, 73, 79, 83, 85, 87, 88, 98, 99], "version_as_int": [0, 26, 38, 54, 56], "version_check": [85, 97], "version_check_threshold": 97, "version_kei": [0, 26, 30, 37, 38, 39, 43, 45, 56, 87, 98], "version_split": 54, "versioncheckerror": [85, 97], "via": [1, 70, 73, 87], "viabil": [0, 56], "view": [0, 56, 87], "vital": [1, 53, 69], "vote": [0, 56], "w": [53, 54, 88], "w_": 53, "wa": [0, 1, 6, 23, 28, 29, 30, 31, 32, 35, 36, 41, 42, 43, 44, 45, 46, 49, 50, 53, 56, 69, 87], "wai": [0, 24, 56, 69, 73, 76], "wait": [0, 24, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 56, 71, 72], "wait_for_block": [0, 56, 61], "wait_for_fin": [0, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 56, 87], "wait_for_inclus": [0, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 56, 87], "wait_reveal_and_decrypt": 72, "wallet": [0, 1, 23, 24, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 56, 61, 69, 76, 83, 85, 87, 89, 91, 93, 98, 99], "wallets_dir": 54, "want": [0, 53, 79], "warn": [77, 82, 83], "we": [29, 30, 31, 32, 35, 36, 42, 43, 44, 45, 46, 49, 50, 87, 88], "web": [29, 42], "websocket": [56, 73, 85, 88], "weight": [0, 11, 12, 17, 22, 26, 27, 30, 38, 39, 43, 45, 53, 56, 66, 98, 99], "weight_commit_info": [7, 99], "weight_uid": 98, "weight_util": [85, 99], "weight_val": 98, "weightcommitinfo": 22, "weights_as_dict": 11, "weights_rate_limit": [0, 10, 17, 56, 66], "weights_vers": [10, 17], "weightsratelimit": 10, "weightssetratelimit": [0, 56], "weightsvers": 10, "well": [53, 76], "when": [0, 1, 2, 23, 24, 25, 28, 37, 39, 41, 53, 56, 69, 71, 72, 82, 89, 91], "where": [0, 1, 6, 11, 21, 24, 26, 29, 38, 42, 53, 56, 76], "whether": [0, 1, 12, 21, 24, 26, 29, 33, 35, 38, 42, 47, 49, 53, 56, 61, 87, 93], "which": [0, 1, 5, 15, 17, 23, 24, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 53, 55, 56, 69, 73, 87], "while": [0, 1, 41, 53, 56, 76, 91], "who": [0, 56, 69], "whole": 2, "whose": [0, 56], "wide": [0, 53, 56], "window": 75, "withdraw": [0, 56], "withdrawn": [0, 56], "within": [0, 1, 24, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 53, 55, 56, 69, 87, 91, 93], "without": [0, 1, 12, 24, 56, 69, 77, 87], "work": [0, 7, 24, 29, 37, 42, 56, 89, 91, 92], "worker": [1, 71, 91], "world": 69, "would": [0, 6, 28, 41, 56, 69], "wrap": 82, "wrapper": [37, 39, 69], "writabl": 85, "wrong": [0, 56, 72], "wss": [54, 61, 88], "x": [72, 85, 98], "x_person": 72, "x_person_2": 72, "xxh128": 94, "xxh64": 94, "y": [78, 85, 98], "ye": 85, "yield": [1, 24, 80], "you": [0, 1, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 53, 56, 69, 72, 79, 87], "your": [1, 24, 53, 69, 72, 79, 88], "yoursynaps": 1, "yuma": 53, "zero": [0, 51, 56]}, "titles": ["bittensor.core.async_subtensor", "bittensor.core.axon", "bittensor.core.chain_data.axon_info", "bittensor.core.chain_data.chain_identity", "bittensor.core.chain_data.delegate_info", "bittensor.core.chain_data.delegate_info_lite", "bittensor.core.chain_data.dynamic_info", "bittensor.core.chain_data", "bittensor.core.chain_data.info_base", "bittensor.core.chain_data.ip_info", "bittensor.core.chain_data.metagraph_info", "bittensor.core.chain_data.neuron_info", "bittensor.core.chain_data.neuron_info_lite", "bittensor.core.chain_data.prometheus_info", "bittensor.core.chain_data.proposal_vote_data", "bittensor.core.chain_data.scheduled_coldkey_swap_info", "bittensor.core.chain_data.stake_info", "bittensor.core.chain_data.subnet_hyperparameters", "bittensor.core.chain_data.subnet_identity", "bittensor.core.chain_data.subnet_info", "bittensor.core.chain_data.subnet_state", "bittensor.core.chain_data.utils", "bittensor.core.chain_data.weight_commit_info", "bittensor.core.config", "bittensor.core.dendrite", "bittensor.core.errors", "bittensor.core.extrinsics.asyncex.commit_reveal", "bittensor.core.extrinsics.asyncex", "bittensor.core.extrinsics.asyncex.move_stake", "bittensor.core.extrinsics.asyncex.registration", "bittensor.core.extrinsics.asyncex.root", "bittensor.core.extrinsics.asyncex.serving", "bittensor.core.extrinsics.asyncex.staking", "bittensor.core.extrinsics.asyncex.start_call", "bittensor.core.extrinsics.asyncex.take", "bittensor.core.extrinsics.asyncex.transfer", "bittensor.core.extrinsics.asyncex.unstaking", "bittensor.core.extrinsics.asyncex.weights", "bittensor.core.extrinsics.commit_reveal", "bittensor.core.extrinsics.commit_weights", "bittensor.core.extrinsics", "bittensor.core.extrinsics.move_stake", "bittensor.core.extrinsics.registration", "bittensor.core.extrinsics.root", "bittensor.core.extrinsics.serving", "bittensor.core.extrinsics.set_weights", "bittensor.core.extrinsics.staking", "bittensor.core.extrinsics.start_call", "bittensor.core.extrinsics.take", "bittensor.core.extrinsics.transfer", "bittensor.core.extrinsics.unstaking", "bittensor.core.extrinsics.utils", "bittensor.core", "bittensor.core.metagraph", "bittensor.core.settings", "bittensor.core.stream", "bittensor.core.subtensor", "bittensor.core.subtensor_api.chain", "bittensor.core.subtensor_api.commitments", "bittensor.core.subtensor_api.delegates", "bittensor.core.subtensor_api.extrinsics", "bittensor.core.subtensor_api", "bittensor.core.subtensor_api.metagraphs", "bittensor.core.subtensor_api.neurons", "bittensor.core.subtensor_api.queries", "bittensor.core.subtensor_api.staking", "bittensor.core.subtensor_api.subnets", "bittensor.core.subtensor_api.utils", "bittensor.core.subtensor_api.wallets", "bittensor.core.synapse", "bittensor.core.tensor", "bittensor.core.threadpool", "bittensor.core.timelock", "bittensor.core.types", "bittensor", "bittensor.utils.axon_utils", "bittensor.utils.balance", "bittensor.utils.btlogging.console", "bittensor.utils.btlogging.defines", "bittensor.utils.btlogging.format", "bittensor.utils.btlogging.helpers", "bittensor.utils.btlogging", "bittensor.utils.btlogging.loggingmachine", "bittensor.utils.easy_imports", "bittensor.utils.formatting", "bittensor.utils", "bittensor.utils.mock", "bittensor.utils.mock.subtensor_mock", "bittensor.utils.networking", "bittensor.utils.registration.async_pow", "bittensor.utils.registration", "bittensor.utils.registration.pow", "bittensor.utils.registration.register_cuda", "bittensor.utils.subnets", "bittensor.utils.substrate_utils.hasher", "bittensor.utils.substrate_utils", "bittensor.utils.substrate_utils.storage", "bittensor.utils.version", "bittensor.utils.weight_utils", "API Reference", "Bittensor SDK Documentation"], "titleterms": {"api": 99, "async_pow": 89, "async_subtensor": 0, "asyncex": [26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37], "attribut": [1, 8, 23, 24, 25, 53, 54, 70, 71, 75, 78, 79, 81, 82, 83, 85, 87, 91, 97, 98], "axon": 1, "axon_info": 2, "axon_util": 75, "balanc": 76, "bittensor": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 100], "btlog": [77, 78, 79, 80, 81, 82], "chain": 57, "chain_data": [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "chain_ident": 3, "class": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 53, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 68, 69, 70, 71, 73, 76, 77, 79, 82, 85, 87, 91, 93, 96], "commit": 58, "commit_rev": [26, 38], "commit_weight": 39, "config": 23, "consol": 77, "content": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 87, 88, 89, 91, 92, 93, 94, 96, 97, 98, 100], "core": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73], "defin": 78, "deleg": 59, "delegate_info": 4, "delegate_info_lit": 5, "dendrit": 24, "document": 100, "dynamic_info": 6, "easy_import": 83, "error": 25, "exampl": [0, 23, 24, 53, 56, 61, 73, 77], "except": [23, 25, 71, 88, 97], "extrins": [26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 60], "format": [79, 84], "function": [0, 1, 10, 21, 24, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 53, 67, 69, 70, 72, 75, 76, 80, 83, 84, 85, 88, 89, 91, 92, 94, 97, 98], "hasher": 94, "helper": 80, "info_bas": 8, "ip_info": 9, "loggingmachin": 82, "metagraph": [53, 62], "metagraph_info": 10, "mock": [86, 87], "modul": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 53, 54, 55, 56, 57, 58, 59, 60, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 75, 76, 77, 78, 79, 80, 82, 83, 84, 87, 88, 89, 91, 92, 93, 94, 96, 97, 98], "move_stak": [28, 41], "network": 88, "neuron": 63, "neuron_info": 11, "neuron_info_lit": 12, "packag": [61, 81, 85], "pow": 91, "prometheus_info": 13, "proposal_vote_data": 14, "queri": 64, "refer": 99, "register_cuda": 92, "registr": [29, 42, 89, 90, 91, 92], "root": [30, 43], "scheduled_coldkey_swap_info": 15, "sdk": 100, "serv": [31, 44], "set": 54, "set_weight": 45, "stake": [32, 46, 65], "stake_info": 16, "start_cal": [33, 47], "storag": 96, "stream": 55, "submodul": [7, 27, 40, 52, 61, 74, 81, 85, 86, 90, 95], "subnet": [66, 93], "subnet_hyperparamet": 17, "subnet_ident": 18, "subnet_info": 19, "subnet_st": 20, "substrate_util": [94, 95, 96], "subtensor": 56, "subtensor_api": [57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68], "subtensor_mock": 87, "synaps": 69, "tabl": 100, "take": [34, 48], "tensor": 70, "threadpool": 71, "timelock": 72, "transfer": [35, 49], "type": 73, "unstak": [36, 50], "util": [21, 51, 67, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98], "version": 97, "wallet": 68, "weight": 37, "weight_commit_info": 22, "weight_util": 98}}) \ No newline at end of file +Search.setIndex({"alltitles": {"API Reference": [[132, null]], "Attributes": [[1, "attributes"], [8, "attributes"], [9, "attributes"], [11, "attributes"], [28, "attributes"], [29, "attributes"], [56, "attributes"], [78, "attributes"], [79, "attributes"], [83, "attributes"], [84, "attributes"], [85, "attributes"], [86, "attributes"], [88, "attributes"], [91, "attributes"], [92, "attributes"], [111, "attributes"], [114, "attributes"], [115, "attributes"], [117, "attributes"], [119, "attributes"], [122, "attributes"], [123, "attributes"], [127, "attributes"], [130, "attributes"], [131, "attributes"]], "Bittensor SDK Documentation": [[133, null]], "Classes": [[0, "classes"], [1, "classes"], [2, "classes"], [3, "classes"], [4, "classes"], [5, "classes"], [6, "classes"], [7, "classes"], [9, "classes"], [10, "classes"], [11, "classes"], [12, "classes"], [13, "classes"], [14, "classes"], [15, "classes"], [16, "classes"], [17, "classes"], [18, "classes"], [19, "classes"], [20, "classes"], [21, "classes"], [22, "classes"], [23, "classes"], [24, "classes"], [25, "classes"], [26, "classes"], [27, "classes"], [28, "classes"], [54, "classes"], [55, "classes"], [56, "classes"], [57, "classes"], [58, "classes"], [60, "classes"], [61, "classes"], [62, "classes"], [63, "classes"], [64, "classes"], [78, "classes"], [80, "classes"], [81, "classes"], [82, "classes"], [83, "classes"], [84, "classes"], [85, "classes"], [87, "classes"], [89, "classes"], [91, "classes"], [92, "classes"], [94, "classes"], [95, "classes"], [96, "classes"], [97, "classes"], [98, "classes"], [99, "classes"], [100, "classes"], [101, "classes"], [102, "classes"], [103, "classes"], [104, "classes"], [105, "classes"], [106, "classes"], [108, "classes"], [112, "classes"], [113, "classes"], [115, "classes"], [119, "classes"], [122, "classes"], [123, "classes"], [127, "classes"], [129, "classes"]], "Example": [[1, null], [1, null], [1, null], [27, null], [28, null], [28, null], [28, null], [28, null], [36, null], [54, null], [55, null], [57, null], [58, null], [60, null], [61, null], [62, null], [63, null], [64, null], [65, null], [78, null], [78, null], [78, null], [78, null], [78, null], [78, null], [78, null], [78, null], [78, null], [78, null], [78, null], [78, null], [78, null], [78, null], [78, null], [78, null], [82, null], [82, null], [82, null], [82, null], [85, null], [85, null], [99, null], [109, null], [112, null], [113, null]], "Examples": [[112, null]], "Exceptions": [[27, "exceptions"], [29, "exceptions"], [84, "exceptions"], [124, "exceptions"], [130, "exceptions"]], "Functions": [[0, "functions"], [1, "functions"], [11, "functions"], [25, "functions"], [28, "functions"], [30, "functions"], [31, "functions"], [33, "functions"], [34, "functions"], [35, "functions"], [36, "functions"], [37, "functions"], [38, "functions"], [39, "functions"], [40, "functions"], [41, "functions"], [42, "functions"], [43, "functions"], [44, "functions"], [45, "functions"], [46, "functions"], [47, "functions"], [48, "functions"], [49, "functions"], [51, "functions"], [52, "functions"], [53, "functions"], [65, "functions"], [66, "functions"], [67, "functions"], [68, "functions"], [69, "functions"], [70, "functions"], [71, "functions"], [72, "functions"], [73, "functions"], [74, "functions"], [75, "functions"], [76, "functions"], [78, "functions"], [82, "functions"], [83, "functions"], [86, "functions"], [92, "functions"], [107, "functions"], [109, "functions"], [111, "functions"], [112, "functions"], [116, "functions"], [118, "functions"], [121, "functions"], [122, "functions"], [123, "functions"], [124, "functions"], [125, "functions"], [127, "functions"], [128, "functions"], [130, "functions"], [131, "functions"]], "Module Contents": [[0, "module-contents"], [1, "module-contents"], [2, "module-contents"], [3, "module-contents"], [4, "module-contents"], [5, "module-contents"], [6, "module-contents"], [7, "module-contents"], [9, "module-contents"], [10, "module-contents"], [11, "module-contents"], [12, "module-contents"], [13, "module-contents"], [14, "module-contents"], [15, "module-contents"], [16, "module-contents"], [17, "module-contents"], [18, "module-contents"], [19, "module-contents"], [20, "module-contents"], [21, "module-contents"], [22, "module-contents"], [23, "module-contents"], [24, "module-contents"], [25, "module-contents"], [26, "module-contents"], [27, "module-contents"], [28, "module-contents"], [29, "module-contents"], [30, "module-contents"], [31, "module-contents"], [33, "module-contents"], [34, "module-contents"], [35, "module-contents"], [36, "module-contents"], [37, "module-contents"], [38, "module-contents"], [39, "module-contents"], [40, "module-contents"], [41, "module-contents"], [42, "module-contents"], [43, "module-contents"], [44, "module-contents"], [45, "module-contents"], [46, "module-contents"], [47, "module-contents"], [48, "module-contents"], [49, "module-contents"], [51, "module-contents"], [52, "module-contents"], [53, "module-contents"], [54, "module-contents"], [55, "module-contents"], [56, "module-contents"], [57, "module-contents"], [58, "module-contents"], [60, "module-contents"], [61, "module-contents"], [62, "module-contents"], [63, "module-contents"], [64, "module-contents"], [65, "module-contents"], [66, "module-contents"], [67, "module-contents"], [68, "module-contents"], [69, "module-contents"], [70, "module-contents"], [71, "module-contents"], [72, "module-contents"], [73, "module-contents"], [74, "module-contents"], [75, "module-contents"], [76, "module-contents"], [78, "module-contents"], [79, "module-contents"], [80, "module-contents"], [81, "module-contents"], [82, "module-contents"], [83, "module-contents"], [84, "module-contents"], [85, "module-contents"], [87, "module-contents"], [88, "module-contents"], [89, "module-contents"], [91, "module-contents"], [92, "module-contents"], [94, "module-contents"], [95, "module-contents"], [96, "module-contents"], [97, "module-contents"], [98, "module-contents"], [100, "module-contents"], [101, "module-contents"], [102, "module-contents"], [103, "module-contents"], [104, "module-contents"], [105, "module-contents"], [106, "module-contents"], [107, "module-contents"], [108, "module-contents"], [109, "module-contents"], [111, "module-contents"], [112, "module-contents"], [113, "module-contents"], [114, "module-contents"], [115, "module-contents"], [116, "module-contents"], [118, "module-contents"], [119, "module-contents"], [121, "module-contents"], [123, "module-contents"], [124, "module-contents"], [125, "module-contents"], [127, "module-contents"], [128, "module-contents"], [129, "module-contents"], [130, "module-contents"], [131, "module-contents"]], "Notes": [[0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [0, null], [16, null], [16, null], [16, null], [16, null], [16, null], [16, null], [16, null], [31, null], [31, null], [31, null], [31, null], [31, null], [36, null], [36, null], [36, null], [36, null], [36, null], [36, null], [36, null], [36, null], [36, null], [36, null], [36, null], [40, null], [49, null], [49, null], [49, null], [49, null], [49, null], [61, null], [61, null], [61, null], [61, null], [61, null], [61, null], [61, null], [61, null], [61, null], [61, null], [61, null], [65, null], [65, null], [65, null], [65, null], [65, null], [65, null], [65, null], [65, null], [65, null], [65, null], [65, null], [69, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [81, null], [103, null]], "Package Contents": [[8, "package-contents"], [86, "package-contents"], [99, "package-contents"], [117, "package-contents"], [122, "package-contents"]], "Submodules": [[8, "submodules"], [32, "submodules"], [50, "submodules"], [59, "submodules"], [77, "submodules"], [86, "submodules"], [90, "submodules"], [93, "submodules"], [99, "submodules"], [110, "submodules"], [117, "submodules"], [122, "submodules"], [126, "submodules"]], "Table of Contents": [[133, null]], "bittensor": [[110, null]], "bittensor.core": [[77, null]], "bittensor.core.async_subtensor": [[0, null]], "bittensor.core.axon": [[1, null]], "bittensor.core.chain_data": [[8, null]], "bittensor.core.chain_data.axon_info": [[2, null]], "bittensor.core.chain_data.chain_identity": [[3, null]], "bittensor.core.chain_data.crowdloan_info": [[4, null]], "bittensor.core.chain_data.delegate_info": [[5, null]], "bittensor.core.chain_data.delegate_info_lite": [[6, null]], "bittensor.core.chain_data.dynamic_info": [[7, null]], "bittensor.core.chain_data.info_base": [[9, null]], "bittensor.core.chain_data.ip_info": [[10, null]], "bittensor.core.chain_data.metagraph_info": [[11, null]], "bittensor.core.chain_data.neuron_info": [[12, null]], "bittensor.core.chain_data.neuron_info_lite": [[13, null]], "bittensor.core.chain_data.prometheus_info": [[14, null]], "bittensor.core.chain_data.proposal_vote_data": [[15, null]], "bittensor.core.chain_data.proxy": [[16, null]], "bittensor.core.chain_data.root_claim": [[17, null]], "bittensor.core.chain_data.scheduled_coldkey_swap_info": [[18, null]], "bittensor.core.chain_data.sim_swap": [[19, null]], "bittensor.core.chain_data.stake_info": [[20, null]], "bittensor.core.chain_data.subnet_hyperparameters": [[21, null]], "bittensor.core.chain_data.subnet_identity": [[22, null]], "bittensor.core.chain_data.subnet_info": [[23, null]], "bittensor.core.chain_data.subnet_state": [[24, null]], "bittensor.core.chain_data.utils": [[25, null]], "bittensor.core.chain_data.weight_commit_info": [[26, null]], "bittensor.core.config": [[27, null]], "bittensor.core.dendrite": [[28, null]], "bittensor.core.errors": [[29, null]], "bittensor.core.extrinsics": [[50, null]], "bittensor.core.extrinsics.asyncex": [[32, null]], "bittensor.core.extrinsics.asyncex.children": [[30, null]], "bittensor.core.extrinsics.asyncex.crowdloan": [[31, null]], "bittensor.core.extrinsics.asyncex.liquidity": [[33, null]], "bittensor.core.extrinsics.asyncex.mev_shield": [[34, null]], "bittensor.core.extrinsics.asyncex.move_stake": [[35, null]], "bittensor.core.extrinsics.asyncex.proxy": [[36, null]], "bittensor.core.extrinsics.asyncex.registration": [[37, null]], "bittensor.core.extrinsics.asyncex.root": [[38, null]], "bittensor.core.extrinsics.asyncex.serving": [[39, null]], "bittensor.core.extrinsics.asyncex.staking": [[40, null]], "bittensor.core.extrinsics.asyncex.start_call": [[41, null]], "bittensor.core.extrinsics.asyncex.sudo": [[42, null]], "bittensor.core.extrinsics.asyncex.take": [[43, null]], "bittensor.core.extrinsics.asyncex.transfer": [[44, null]], "bittensor.core.extrinsics.asyncex.unstaking": [[45, null]], "bittensor.core.extrinsics.asyncex.utils": [[46, null]], "bittensor.core.extrinsics.asyncex.weights": [[47, null]], "bittensor.core.extrinsics.children": [[48, null]], "bittensor.core.extrinsics.crowdloan": [[49, null]], "bittensor.core.extrinsics.liquidity": [[51, null]], "bittensor.core.extrinsics.mev_shield": [[52, null]], "bittensor.core.extrinsics.move_stake": [[53, null]], "bittensor.core.extrinsics.pallets": [[59, null]], "bittensor.core.extrinsics.pallets.admin_utils": [[54, null]], "bittensor.core.extrinsics.pallets.balances": [[55, null]], "bittensor.core.extrinsics.pallets.base": [[56, null]], "bittensor.core.extrinsics.pallets.commitments": [[57, null]], "bittensor.core.extrinsics.pallets.crowdloan": [[58, null]], "bittensor.core.extrinsics.pallets.mev_shield": [[60, null]], "bittensor.core.extrinsics.pallets.proxy": [[61, null]], "bittensor.core.extrinsics.pallets.subtensor_module": [[62, null]], "bittensor.core.extrinsics.pallets.sudo": [[63, null]], "bittensor.core.extrinsics.pallets.swap": [[64, null]], "bittensor.core.extrinsics.proxy": [[65, null]], "bittensor.core.extrinsics.registration": [[66, null]], "bittensor.core.extrinsics.root": [[67, null]], "bittensor.core.extrinsics.serving": [[68, null]], "bittensor.core.extrinsics.staking": [[69, null]], "bittensor.core.extrinsics.start_call": [[70, null]], "bittensor.core.extrinsics.sudo": [[71, null]], "bittensor.core.extrinsics.take": [[72, null]], "bittensor.core.extrinsics.transfer": [[73, null]], "bittensor.core.extrinsics.unstaking": [[74, null]], "bittensor.core.extrinsics.utils": [[75, null]], "bittensor.core.extrinsics.weights": [[76, null]], "bittensor.core.metagraph": [[78, null]], "bittensor.core.settings": [[79, null]], "bittensor.core.stream": [[80, null]], "bittensor.core.subtensor": [[81, null]], "bittensor.core.synapse": [[82, null]], "bittensor.core.tensor": [[83, null]], "bittensor.core.threadpool": [[84, null]], "bittensor.core.types": [[85, null]], "bittensor.extras": [[93, null]], "bittensor.extras.dev_framework": [[90, null]], "bittensor.extras.dev_framework.calls": [[86, null]], "bittensor.extras.dev_framework.calls.non_sudo_calls": [[87, null]], "bittensor.extras.dev_framework.calls.pallets": [[88, null]], "bittensor.extras.dev_framework.calls.sudo_calls": [[89, null]], "bittensor.extras.dev_framework.subnet": [[91, null]], "bittensor.extras.dev_framework.utils": [[92, null]], "bittensor.extras.subtensor_api": [[99, null]], "bittensor.extras.subtensor_api.chain": [[94, null]], "bittensor.extras.subtensor_api.commitments": [[95, null]], "bittensor.extras.subtensor_api.crowdloans": [[96, null]], "bittensor.extras.subtensor_api.delegates": [[97, null]], "bittensor.extras.subtensor_api.extrinsics": [[98, null]], "bittensor.extras.subtensor_api.metagraphs": [[100, null]], "bittensor.extras.subtensor_api.mev_shield": [[101, null]], "bittensor.extras.subtensor_api.neurons": [[102, null]], "bittensor.extras.subtensor_api.proxy": [[103, null]], "bittensor.extras.subtensor_api.queries": [[104, null]], "bittensor.extras.subtensor_api.staking": [[105, null]], "bittensor.extras.subtensor_api.subnets": [[106, null]], "bittensor.extras.subtensor_api.utils": [[107, null]], "bittensor.extras.subtensor_api.wallets": [[108, null]], "bittensor.extras.timelock": [[109, null]], "bittensor.utils": [[122, null]], "bittensor.utils.axon_utils": [[111, null]], "bittensor.utils.balance": [[112, null]], "bittensor.utils.btlogging": [[117, null]], "bittensor.utils.btlogging.console": [[113, null]], "bittensor.utils.btlogging.defines": [[114, null]], "bittensor.utils.btlogging.format": [[115, null]], "bittensor.utils.btlogging.helpers": [[116, null]], "bittensor.utils.btlogging.levels": [[118, null]], "bittensor.utils.btlogging.loggingmachine": [[119, null]], "bittensor.utils.easy_imports": [[120, null]], "bittensor.utils.formatting": [[121, null]], "bittensor.utils.liquidity": [[123, null]], "bittensor.utils.networking": [[124, null]], "bittensor.utils.registration": [[126, null]], "bittensor.utils.registration.async_pow": [[125, null]], "bittensor.utils.registration.pow": [[127, null]], "bittensor.utils.registration.register_cuda": [[128, null]], "bittensor.utils.subnets": [[129, null]], "bittensor.utils.version": [[130, null]], "bittensor.utils.weight_utils": [[131, null]]}, "docnames": ["autoapi/bittensor/core/async_subtensor/index", "autoapi/bittensor/core/axon/index", "autoapi/bittensor/core/chain_data/axon_info/index", "autoapi/bittensor/core/chain_data/chain_identity/index", "autoapi/bittensor/core/chain_data/crowdloan_info/index", "autoapi/bittensor/core/chain_data/delegate_info/index", "autoapi/bittensor/core/chain_data/delegate_info_lite/index", "autoapi/bittensor/core/chain_data/dynamic_info/index", "autoapi/bittensor/core/chain_data/index", "autoapi/bittensor/core/chain_data/info_base/index", "autoapi/bittensor/core/chain_data/ip_info/index", "autoapi/bittensor/core/chain_data/metagraph_info/index", "autoapi/bittensor/core/chain_data/neuron_info/index", "autoapi/bittensor/core/chain_data/neuron_info_lite/index", "autoapi/bittensor/core/chain_data/prometheus_info/index", "autoapi/bittensor/core/chain_data/proposal_vote_data/index", "autoapi/bittensor/core/chain_data/proxy/index", "autoapi/bittensor/core/chain_data/root_claim/index", "autoapi/bittensor/core/chain_data/scheduled_coldkey_swap_info/index", "autoapi/bittensor/core/chain_data/sim_swap/index", "autoapi/bittensor/core/chain_data/stake_info/index", "autoapi/bittensor/core/chain_data/subnet_hyperparameters/index", "autoapi/bittensor/core/chain_data/subnet_identity/index", "autoapi/bittensor/core/chain_data/subnet_info/index", "autoapi/bittensor/core/chain_data/subnet_state/index", "autoapi/bittensor/core/chain_data/utils/index", "autoapi/bittensor/core/chain_data/weight_commit_info/index", "autoapi/bittensor/core/config/index", "autoapi/bittensor/core/dendrite/index", "autoapi/bittensor/core/errors/index", "autoapi/bittensor/core/extrinsics/asyncex/children/index", "autoapi/bittensor/core/extrinsics/asyncex/crowdloan/index", "autoapi/bittensor/core/extrinsics/asyncex/index", "autoapi/bittensor/core/extrinsics/asyncex/liquidity/index", "autoapi/bittensor/core/extrinsics/asyncex/mev_shield/index", "autoapi/bittensor/core/extrinsics/asyncex/move_stake/index", "autoapi/bittensor/core/extrinsics/asyncex/proxy/index", "autoapi/bittensor/core/extrinsics/asyncex/registration/index", "autoapi/bittensor/core/extrinsics/asyncex/root/index", "autoapi/bittensor/core/extrinsics/asyncex/serving/index", "autoapi/bittensor/core/extrinsics/asyncex/staking/index", "autoapi/bittensor/core/extrinsics/asyncex/start_call/index", "autoapi/bittensor/core/extrinsics/asyncex/sudo/index", "autoapi/bittensor/core/extrinsics/asyncex/take/index", "autoapi/bittensor/core/extrinsics/asyncex/transfer/index", "autoapi/bittensor/core/extrinsics/asyncex/unstaking/index", "autoapi/bittensor/core/extrinsics/asyncex/utils/index", "autoapi/bittensor/core/extrinsics/asyncex/weights/index", "autoapi/bittensor/core/extrinsics/children/index", "autoapi/bittensor/core/extrinsics/crowdloan/index", "autoapi/bittensor/core/extrinsics/index", "autoapi/bittensor/core/extrinsics/liquidity/index", "autoapi/bittensor/core/extrinsics/mev_shield/index", "autoapi/bittensor/core/extrinsics/move_stake/index", "autoapi/bittensor/core/extrinsics/pallets/admin_utils/index", "autoapi/bittensor/core/extrinsics/pallets/balances/index", "autoapi/bittensor/core/extrinsics/pallets/base/index", "autoapi/bittensor/core/extrinsics/pallets/commitments/index", "autoapi/bittensor/core/extrinsics/pallets/crowdloan/index", "autoapi/bittensor/core/extrinsics/pallets/index", "autoapi/bittensor/core/extrinsics/pallets/mev_shield/index", "autoapi/bittensor/core/extrinsics/pallets/proxy/index", "autoapi/bittensor/core/extrinsics/pallets/subtensor_module/index", "autoapi/bittensor/core/extrinsics/pallets/sudo/index", "autoapi/bittensor/core/extrinsics/pallets/swap/index", "autoapi/bittensor/core/extrinsics/proxy/index", "autoapi/bittensor/core/extrinsics/registration/index", "autoapi/bittensor/core/extrinsics/root/index", "autoapi/bittensor/core/extrinsics/serving/index", "autoapi/bittensor/core/extrinsics/staking/index", "autoapi/bittensor/core/extrinsics/start_call/index", "autoapi/bittensor/core/extrinsics/sudo/index", "autoapi/bittensor/core/extrinsics/take/index", "autoapi/bittensor/core/extrinsics/transfer/index", "autoapi/bittensor/core/extrinsics/unstaking/index", "autoapi/bittensor/core/extrinsics/utils/index", "autoapi/bittensor/core/extrinsics/weights/index", "autoapi/bittensor/core/index", "autoapi/bittensor/core/metagraph/index", "autoapi/bittensor/core/settings/index", "autoapi/bittensor/core/stream/index", "autoapi/bittensor/core/subtensor/index", "autoapi/bittensor/core/synapse/index", "autoapi/bittensor/core/tensor/index", "autoapi/bittensor/core/threadpool/index", "autoapi/bittensor/core/types/index", "autoapi/bittensor/extras/dev_framework/calls/index", "autoapi/bittensor/extras/dev_framework/calls/non_sudo_calls/index", "autoapi/bittensor/extras/dev_framework/calls/pallets/index", "autoapi/bittensor/extras/dev_framework/calls/sudo_calls/index", "autoapi/bittensor/extras/dev_framework/index", "autoapi/bittensor/extras/dev_framework/subnet/index", "autoapi/bittensor/extras/dev_framework/utils/index", "autoapi/bittensor/extras/index", "autoapi/bittensor/extras/subtensor_api/chain/index", "autoapi/bittensor/extras/subtensor_api/commitments/index", "autoapi/bittensor/extras/subtensor_api/crowdloans/index", "autoapi/bittensor/extras/subtensor_api/delegates/index", "autoapi/bittensor/extras/subtensor_api/extrinsics/index", "autoapi/bittensor/extras/subtensor_api/index", "autoapi/bittensor/extras/subtensor_api/metagraphs/index", "autoapi/bittensor/extras/subtensor_api/mev_shield/index", "autoapi/bittensor/extras/subtensor_api/neurons/index", "autoapi/bittensor/extras/subtensor_api/proxy/index", "autoapi/bittensor/extras/subtensor_api/queries/index", "autoapi/bittensor/extras/subtensor_api/staking/index", "autoapi/bittensor/extras/subtensor_api/subnets/index", "autoapi/bittensor/extras/subtensor_api/utils/index", "autoapi/bittensor/extras/subtensor_api/wallets/index", "autoapi/bittensor/extras/timelock/index", "autoapi/bittensor/index", "autoapi/bittensor/utils/axon_utils/index", "autoapi/bittensor/utils/balance/index", "autoapi/bittensor/utils/btlogging/console/index", "autoapi/bittensor/utils/btlogging/defines/index", "autoapi/bittensor/utils/btlogging/format/index", "autoapi/bittensor/utils/btlogging/helpers/index", "autoapi/bittensor/utils/btlogging/index", "autoapi/bittensor/utils/btlogging/levels/index", "autoapi/bittensor/utils/btlogging/loggingmachine/index", "autoapi/bittensor/utils/easy_imports/index", "autoapi/bittensor/utils/formatting/index", "autoapi/bittensor/utils/index", "autoapi/bittensor/utils/liquidity/index", "autoapi/bittensor/utils/networking/index", "autoapi/bittensor/utils/registration/async_pow/index", "autoapi/bittensor/utils/registration/index", "autoapi/bittensor/utils/registration/pow/index", "autoapi/bittensor/utils/registration/register_cuda/index", "autoapi/bittensor/utils/subnets/index", "autoapi/bittensor/utils/version/index", "autoapi/bittensor/utils/weight_utils/index", "autoapi/index", "index"], "envversion": {"sphinx": 62, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx.ext.viewcode": 1}, "filenames": ["autoapi/bittensor/core/async_subtensor/index.rst", "autoapi/bittensor/core/axon/index.rst", "autoapi/bittensor/core/chain_data/axon_info/index.rst", "autoapi/bittensor/core/chain_data/chain_identity/index.rst", "autoapi/bittensor/core/chain_data/crowdloan_info/index.rst", "autoapi/bittensor/core/chain_data/delegate_info/index.rst", "autoapi/bittensor/core/chain_data/delegate_info_lite/index.rst", "autoapi/bittensor/core/chain_data/dynamic_info/index.rst", "autoapi/bittensor/core/chain_data/index.rst", "autoapi/bittensor/core/chain_data/info_base/index.rst", "autoapi/bittensor/core/chain_data/ip_info/index.rst", "autoapi/bittensor/core/chain_data/metagraph_info/index.rst", "autoapi/bittensor/core/chain_data/neuron_info/index.rst", "autoapi/bittensor/core/chain_data/neuron_info_lite/index.rst", "autoapi/bittensor/core/chain_data/prometheus_info/index.rst", "autoapi/bittensor/core/chain_data/proposal_vote_data/index.rst", "autoapi/bittensor/core/chain_data/proxy/index.rst", "autoapi/bittensor/core/chain_data/root_claim/index.rst", "autoapi/bittensor/core/chain_data/scheduled_coldkey_swap_info/index.rst", "autoapi/bittensor/core/chain_data/sim_swap/index.rst", "autoapi/bittensor/core/chain_data/stake_info/index.rst", "autoapi/bittensor/core/chain_data/subnet_hyperparameters/index.rst", "autoapi/bittensor/core/chain_data/subnet_identity/index.rst", "autoapi/bittensor/core/chain_data/subnet_info/index.rst", "autoapi/bittensor/core/chain_data/subnet_state/index.rst", "autoapi/bittensor/core/chain_data/utils/index.rst", "autoapi/bittensor/core/chain_data/weight_commit_info/index.rst", "autoapi/bittensor/core/config/index.rst", "autoapi/bittensor/core/dendrite/index.rst", "autoapi/bittensor/core/errors/index.rst", "autoapi/bittensor/core/extrinsics/asyncex/children/index.rst", "autoapi/bittensor/core/extrinsics/asyncex/crowdloan/index.rst", "autoapi/bittensor/core/extrinsics/asyncex/index.rst", "autoapi/bittensor/core/extrinsics/asyncex/liquidity/index.rst", "autoapi/bittensor/core/extrinsics/asyncex/mev_shield/index.rst", "autoapi/bittensor/core/extrinsics/asyncex/move_stake/index.rst", "autoapi/bittensor/core/extrinsics/asyncex/proxy/index.rst", "autoapi/bittensor/core/extrinsics/asyncex/registration/index.rst", "autoapi/bittensor/core/extrinsics/asyncex/root/index.rst", "autoapi/bittensor/core/extrinsics/asyncex/serving/index.rst", "autoapi/bittensor/core/extrinsics/asyncex/staking/index.rst", "autoapi/bittensor/core/extrinsics/asyncex/start_call/index.rst", "autoapi/bittensor/core/extrinsics/asyncex/sudo/index.rst", "autoapi/bittensor/core/extrinsics/asyncex/take/index.rst", "autoapi/bittensor/core/extrinsics/asyncex/transfer/index.rst", "autoapi/bittensor/core/extrinsics/asyncex/unstaking/index.rst", "autoapi/bittensor/core/extrinsics/asyncex/utils/index.rst", "autoapi/bittensor/core/extrinsics/asyncex/weights/index.rst", "autoapi/bittensor/core/extrinsics/children/index.rst", "autoapi/bittensor/core/extrinsics/crowdloan/index.rst", "autoapi/bittensor/core/extrinsics/index.rst", "autoapi/bittensor/core/extrinsics/liquidity/index.rst", "autoapi/bittensor/core/extrinsics/mev_shield/index.rst", "autoapi/bittensor/core/extrinsics/move_stake/index.rst", "autoapi/bittensor/core/extrinsics/pallets/admin_utils/index.rst", "autoapi/bittensor/core/extrinsics/pallets/balances/index.rst", "autoapi/bittensor/core/extrinsics/pallets/base/index.rst", "autoapi/bittensor/core/extrinsics/pallets/commitments/index.rst", "autoapi/bittensor/core/extrinsics/pallets/crowdloan/index.rst", "autoapi/bittensor/core/extrinsics/pallets/index.rst", "autoapi/bittensor/core/extrinsics/pallets/mev_shield/index.rst", "autoapi/bittensor/core/extrinsics/pallets/proxy/index.rst", "autoapi/bittensor/core/extrinsics/pallets/subtensor_module/index.rst", "autoapi/bittensor/core/extrinsics/pallets/sudo/index.rst", "autoapi/bittensor/core/extrinsics/pallets/swap/index.rst", "autoapi/bittensor/core/extrinsics/proxy/index.rst", "autoapi/bittensor/core/extrinsics/registration/index.rst", "autoapi/bittensor/core/extrinsics/root/index.rst", "autoapi/bittensor/core/extrinsics/serving/index.rst", "autoapi/bittensor/core/extrinsics/staking/index.rst", "autoapi/bittensor/core/extrinsics/start_call/index.rst", "autoapi/bittensor/core/extrinsics/sudo/index.rst", "autoapi/bittensor/core/extrinsics/take/index.rst", "autoapi/bittensor/core/extrinsics/transfer/index.rst", "autoapi/bittensor/core/extrinsics/unstaking/index.rst", "autoapi/bittensor/core/extrinsics/utils/index.rst", "autoapi/bittensor/core/extrinsics/weights/index.rst", "autoapi/bittensor/core/index.rst", "autoapi/bittensor/core/metagraph/index.rst", "autoapi/bittensor/core/settings/index.rst", "autoapi/bittensor/core/stream/index.rst", "autoapi/bittensor/core/subtensor/index.rst", "autoapi/bittensor/core/synapse/index.rst", "autoapi/bittensor/core/tensor/index.rst", "autoapi/bittensor/core/threadpool/index.rst", "autoapi/bittensor/core/types/index.rst", "autoapi/bittensor/extras/dev_framework/calls/index.rst", "autoapi/bittensor/extras/dev_framework/calls/non_sudo_calls/index.rst", "autoapi/bittensor/extras/dev_framework/calls/pallets/index.rst", "autoapi/bittensor/extras/dev_framework/calls/sudo_calls/index.rst", "autoapi/bittensor/extras/dev_framework/index.rst", "autoapi/bittensor/extras/dev_framework/subnet/index.rst", "autoapi/bittensor/extras/dev_framework/utils/index.rst", "autoapi/bittensor/extras/index.rst", "autoapi/bittensor/extras/subtensor_api/chain/index.rst", "autoapi/bittensor/extras/subtensor_api/commitments/index.rst", "autoapi/bittensor/extras/subtensor_api/crowdloans/index.rst", "autoapi/bittensor/extras/subtensor_api/delegates/index.rst", "autoapi/bittensor/extras/subtensor_api/extrinsics/index.rst", "autoapi/bittensor/extras/subtensor_api/index.rst", "autoapi/bittensor/extras/subtensor_api/metagraphs/index.rst", "autoapi/bittensor/extras/subtensor_api/mev_shield/index.rst", "autoapi/bittensor/extras/subtensor_api/neurons/index.rst", "autoapi/bittensor/extras/subtensor_api/proxy/index.rst", "autoapi/bittensor/extras/subtensor_api/queries/index.rst", "autoapi/bittensor/extras/subtensor_api/staking/index.rst", "autoapi/bittensor/extras/subtensor_api/subnets/index.rst", "autoapi/bittensor/extras/subtensor_api/utils/index.rst", "autoapi/bittensor/extras/subtensor_api/wallets/index.rst", "autoapi/bittensor/extras/timelock/index.rst", "autoapi/bittensor/index.rst", "autoapi/bittensor/utils/axon_utils/index.rst", "autoapi/bittensor/utils/balance/index.rst", "autoapi/bittensor/utils/btlogging/console/index.rst", "autoapi/bittensor/utils/btlogging/defines/index.rst", "autoapi/bittensor/utils/btlogging/format/index.rst", "autoapi/bittensor/utils/btlogging/helpers/index.rst", "autoapi/bittensor/utils/btlogging/index.rst", "autoapi/bittensor/utils/btlogging/levels/index.rst", "autoapi/bittensor/utils/btlogging/loggingmachine/index.rst", "autoapi/bittensor/utils/easy_imports/index.rst", "autoapi/bittensor/utils/formatting/index.rst", "autoapi/bittensor/utils/index.rst", "autoapi/bittensor/utils/liquidity/index.rst", "autoapi/bittensor/utils/networking/index.rst", "autoapi/bittensor/utils/registration/async_pow/index.rst", "autoapi/bittensor/utils/registration/index.rst", "autoapi/bittensor/utils/registration/pow/index.rst", "autoapi/bittensor/utils/registration/register_cuda/index.rst", "autoapi/bittensor/utils/subnets/index.rst", "autoapi/bittensor/utils/version/index.rst", "autoapi/bittensor/utils/weight_utils/index.rst", "autoapi/index.rst", "index.rst"], "indexentries": {"__repr__() (bittensor.core.dendrite.dendrite method)": [[28, "bittensor.core.dendrite.Dendrite.__repr__", false]], "__repr__() (bittensor.core.dendrite.dendritemixin method)": [[28, "bittensor.core.dendrite.DendriteMixin.__repr__", false]], "__setattr__() (bittensor.core.synapse.synapse method)": [[82, "bittensor.core.synapse.Synapse.__setattr__", false]], "__str__() (bittensor.core.dendrite.dendrite method)": [[28, "bittensor.core.dendrite.Dendrite.__str__", false]], "__str__() (bittensor.core.dendrite.dendritemixin method)": [[28, "bittensor.core.dendrite.DendriteMixin.__str__", false]], "absoluteminimumcontribution (bittensor.core.chain_data.crowdloan_info.crowdloanconstants attribute)": [[4, "bittensor.core.chain_data.crowdloan_info.CrowdloanConstants.AbsoluteMinimumContribution", false]], "access_list (bittensor.extras.dev_framework.calls.non_sudo_calls.call attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CALL.access_list", false]], "access_list (bittensor.extras.dev_framework.calls.non_sudo_calls.create attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CREATE.access_list", false]], "access_list (bittensor.extras.dev_framework.calls.non_sudo_calls.create2 attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CREATE2.access_list", false]], "account (bittensor.extras.dev_framework.calls.non_sudo_calls.force_release_deposit attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_RELEASE_DEPOSIT.account", false]], "account (bittensor.extras.dev_framework.calls.non_sudo_calls.force_slash_deposit attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_SLASH_DEPOSIT.account", false]], "account (bittensor.extras.dev_framework.calls.non_sudo_calls.release_deposit attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.RELEASE_DEPOSIT.account", false]], "accountid (bittensor.core.chain_data.utils.chaindatatype attribute)": [[25, "bittensor.core.chain_data.utils.ChainDataType.AccountId", false]], "aclose_session() (bittensor.core.dendrite.dendrite method)": [[28, "bittensor.core.dendrite.Dendrite.aclose_session", false]], "aclose_session() (bittensor.core.dendrite.dendritemixin method)": [[28, "bittensor.core.dendrite.DendriteMixin.aclose_session", false], [28, "id0", false]], "activate_subnet (in module bittensor.extras.dev_framework.utils)": [[92, "bittensor.extras.dev_framework.utils.ACTIVATE_SUBNET", false]], "activatesubnet (class in bittensor.extras.dev_framework.utils)": [[92, "bittensor.extras.dev_framework.utils.ActivateSubnet", false]], "active (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.active", false]], "active (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.Active", false]], "active (bittensor.core.chain_data.neuron_info.neuroninfo attribute)": [[12, "bittensor.core.chain_data.neuron_info.NeuronInfo.active", false]], "active (bittensor.core.chain_data.neuron_info_lite.neuroninfolite attribute)": [[13, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite.active", false]], "active (bittensor.core.chain_data.subnet_state.subnetstate attribute)": [[24, "bittensor.core.chain_data.subnet_state.SubnetState.active", false]], "active (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.active", false]], "active (bittensor.core.metagraph.nontorchmetagraph attribute)": [[78, "bittensor.core.metagraph.NonTorchMetagraph.active", false]], "active (bittensor.core.metagraph.torchmetagraph attribute)": [[78, "bittensor.core.metagraph.TorchMetagraph.active", false]], "activity_cutoff (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.activity_cutoff", false]], "activity_cutoff (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.activity_cutoff", false]], "activity_cutoff (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[21, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.activity_cutoff", false]], "activity_cutoff (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_activity_cutoff attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ACTIVITY_CUTOFF.activity_cutoff", false]], "activitycutoff (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.ActivityCutoff", false]], "add_args() (bittensor.core.axon.axon class method)": [[1, "bittensor.core.axon.Axon.add_args", false]], "add_args() (bittensor.core.threadpool.prioritythreadpoolexecutor class method)": [[84, "bittensor.core.threadpool.PriorityThreadPoolExecutor.add_args", false]], "add_args() (bittensor.core.types.subtensormixin class method)": [[85, "bittensor.core.types.SubtensorMixin.add_args", false]], "add_args() (bittensor.extras.subtensor_api.subtensorapi class method)": [[99, "bittensor.extras.subtensor_api.SubtensorApi.add_args", false]], "add_args() (bittensor.utils.btlogging.loggingmachine.loggingmachine class method)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.add_args", false]], "add_legacy_methods() (in module bittensor.extras.subtensor_api.utils)": [[107, "bittensor.extras.subtensor_api.utils.add_legacy_methods", false]], "add_liquidity (bittensor.extras.subtensor_api.extrinsics.extrinsics attribute)": [[98, "bittensor.extras.subtensor_api.extrinsics.Extrinsics.add_liquidity", false]], "add_liquidity (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ADD_LIQUIDITY", false]], "add_liquidity() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.add_liquidity", false]], "add_liquidity() (bittensor.core.extrinsics.pallets.swap.swap method)": [[64, "bittensor.core.extrinsics.pallets.swap.Swap.add_liquidity", false]], "add_liquidity() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.add_liquidity", false]], "add_liquidity_extrinsic() (in module bittensor.core.extrinsics.asyncex.liquidity)": [[33, "bittensor.core.extrinsics.asyncex.liquidity.add_liquidity_extrinsic", false]], "add_liquidity_extrinsic() (in module bittensor.core.extrinsics.liquidity)": [[51, "bittensor.core.extrinsics.liquidity.add_liquidity_extrinsic", false]], "add_proxy (bittensor.extras.subtensor_api.proxy.proxy attribute)": [[103, "bittensor.extras.subtensor_api.proxy.Proxy.add_proxy", false]], "add_proxy (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ADD_PROXY", false]], "add_proxy() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.add_proxy", false]], "add_proxy() (bittensor.core.extrinsics.pallets.proxy.proxy method)": [[61, "bittensor.core.extrinsics.pallets.proxy.Proxy.add_proxy", false]], "add_proxy() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.add_proxy", false]], "add_proxy_extrinsic() (in module bittensor.core.extrinsics.asyncex.proxy)": [[36, "bittensor.core.extrinsics.asyncex.proxy.add_proxy_extrinsic", false]], "add_proxy_extrinsic() (in module bittensor.core.extrinsics.proxy)": [[65, "bittensor.core.extrinsics.proxy.add_proxy_extrinsic", false]], "add_stake (bittensor.extras.subtensor_api.extrinsics.extrinsics attribute)": [[98, "bittensor.extras.subtensor_api.extrinsics.Extrinsics.add_stake", false]], "add_stake (bittensor.extras.subtensor_api.staking.staking attribute)": [[105, "bittensor.extras.subtensor_api.staking.Staking.add_stake", false]], "add_stake (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ADD_STAKE", false]], "add_stake() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.add_stake", false]], "add_stake() (bittensor.core.extrinsics.pallets.subtensor_module.subtensormodule method)": [[62, "bittensor.core.extrinsics.pallets.subtensor_module.SubtensorModule.add_stake", false]], "add_stake() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.add_stake", false]], "add_stake_extrinsic() (in module bittensor.core.extrinsics.asyncex.staking)": [[40, "bittensor.core.extrinsics.asyncex.staking.add_stake_extrinsic", false]], "add_stake_extrinsic() (in module bittensor.core.extrinsics.staking)": [[69, "bittensor.core.extrinsics.staking.add_stake_extrinsic", false]], "add_stake_limit (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ADD_STAKE_LIMIT", false]], "add_stake_limit() (bittensor.core.extrinsics.pallets.subtensor_module.subtensormodule method)": [[62, "bittensor.core.extrinsics.pallets.subtensor_module.SubtensorModule.add_stake_limit", false]], "add_stake_multiple (bittensor.extras.subtensor_api.extrinsics.extrinsics attribute)": [[98, "bittensor.extras.subtensor_api.extrinsics.Extrinsics.add_stake_multiple", false]], "add_stake_multiple (bittensor.extras.subtensor_api.staking.staking attribute)": [[105, "bittensor.extras.subtensor_api.staking.Staking.add_stake_multiple", false]], "add_stake_multiple() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.add_stake_multiple", false]], "add_stake_multiple() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.add_stake_multiple", false]], "add_stake_multiple_extrinsic() (in module bittensor.core.extrinsics.asyncex.staking)": [[40, "bittensor.core.extrinsics.asyncex.staking.add_stake_multiple_extrinsic", false]], "add_stake_multiple_extrinsic() (in module bittensor.core.extrinsics.staking)": [[69, "bittensor.core.extrinsics.staking.add_stake_multiple_extrinsic", false]], "additional (bittensor.core.chain_data.chain_identity.chainidentity attribute)": [[3, "bittensor.core.chain_data.chain_identity.ChainIdentity.additional", false]], "additional (bittensor.core.chain_data.subnet_identity.subnetidentity attribute)": [[22, "bittensor.core.chain_data.subnet_identity.SubnetIdentity.additional", false]], "additional (bittensor.extras.dev_framework.calls.non_sudo_calls.set_identity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_IDENTITY.additional", false]], "additional (bittensor.extras.dev_framework.calls.non_sudo_calls.set_subnet_identity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_SUBNET_IDENTITY.additional", false]], "address (bittensor.extras.dev_framework.calls.non_sudo_calls.withdraw attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.WITHDRAW.address", false]], "addresses (bittensor.core.metagraph.metagraphmixin property)": [[78, "bittensor.core.metagraph.MetagraphMixin.addresses", false]], "adjustment_alpha (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.adjustment_alpha", false]], "adjustment_alpha (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.adjustment_alpha", false]], "adjustment_alpha (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[21, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.adjustment_alpha", false]], "adjustment_alpha (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_adjustment_alpha attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ADJUSTMENT_ALPHA.adjustment_alpha", false]], "adjustment_interval (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.adjustment_interval", false]], "adjustment_interval (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.adjustment_interval", false]], "adjustment_interval (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[21, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.adjustment_interval", false]], "adjustment_interval (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_adjustment_interval attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ADJUSTMENT_INTERVAL.adjustment_interval", false]], "adjustmentalpha (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.AdjustmentAlpha", false]], "adjustmentinterval (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.AdjustmentInterval", false]], "adminutils (class in bittensor.core.extrinsics.pallets.admin_utils)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils", false]], "adminutils (in module bittensor.extras.dev_framework.calls.pallets)": [[88, "bittensor.extras.dev_framework.calls.pallets.AdminUtils", false]], "after (bittensor.extras.dev_framework.calls.non_sudo_calls.schedule_after attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE_AFTER.after", false]], "after (bittensor.extras.dev_framework.calls.non_sudo_calls.schedule_named_after attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE_NAMED_AFTER.after", false]], "after_disable_debug() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.after_disable_debug", false]], "after_disable_trace() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.after_disable_trace", false]], "after_enable_debug() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.after_enable_debug", false]], "after_enable_default() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.after_enable_default", false]], "after_enable_info() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.after_enable_info", false]], "after_enable_trace() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.after_enable_trace", false]], "after_enable_warning() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.after_enable_warning", false]], "after_transition() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.after_transition", false]], "all_indices() (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex static method)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.all_indices", false]], "all_logger_names() (in module bittensor.utils.btlogging.helpers)": [[116, "bittensor.utils.btlogging.helpers.all_logger_names", false]], "all_loggers() (in module bittensor.utils.btlogging.helpers)": [[116, "bittensor.utils.btlogging.helpers.all_loggers", false]], "all_subnets (bittensor.extras.subtensor_api.subnets.subnets attribute)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets.all_subnets", false]], "all_subnets() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.all_subnets", false]], "all_subnets() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.all_subnets", false]], "all_types() (bittensor.core.chain_data.proxy.proxytype class method)": [[16, "bittensor.core.chain_data.proxy.ProxyType.all_types", false]], "allow_partial (bittensor.extras.dev_framework.calls.non_sudo_calls.add_stake_limit attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ADD_STAKE_LIMIT.allow_partial", false]], "allow_partial (bittensor.extras.dev_framework.calls.non_sudo_calls.remove_stake_limit attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_STAKE_LIMIT.allow_partial", false]], "allow_partial (bittensor.extras.dev_framework.calls.non_sudo_calls.swap_stake_limit attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SWAP_STAKE_LIMIT.allow_partial", false]], "allowed_delta (in module bittensor.utils.axon_utils)": [[111, "bittensor.utils.axon_utils.ALLOWED_DELTA", false]], "allowed_nonce_window_ns() (in module bittensor.utils.axon_utils)": [[111, "bittensor.utils.axon_utils.allowed_nonce_window_ns", false]], "alpha (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_subnet_moving_alpha attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SUBNET_MOVING_ALPHA.alpha", false]], "alpha_amount (bittensor.core.chain_data.sim_swap.simswapresult attribute)": [[19, "bittensor.core.chain_data.sim_swap.SimSwapResult.alpha_amount", false]], "alpha_amount (bittensor.extras.dev_framework.calls.non_sudo_calls.move_stake attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.MOVE_STAKE.alpha_amount", false]], "alpha_amount (bittensor.extras.dev_framework.calls.non_sudo_calls.swap_stake attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SWAP_STAKE.alpha_amount", false]], "alpha_amount (bittensor.extras.dev_framework.calls.non_sudo_calls.swap_stake_limit attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SWAP_STAKE_LIMIT.alpha_amount", false]], "alpha_amount (bittensor.extras.dev_framework.calls.non_sudo_calls.transfer_stake attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.TRANSFER_STAKE.alpha_amount", false]], "alpha_dividends_per_hotkey (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.alpha_dividends_per_hotkey", false]], "alpha_dividends_per_hotkey (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.alpha_dividends_per_hotkey", false]], "alpha_fee (bittensor.core.chain_data.sim_swap.simswapresult attribute)": [[19, "bittensor.core.chain_data.sim_swap.SimSwapResult.alpha_fee", false]], "alpha_high (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.alpha_high", false]], "alpha_high (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.alpha_high", false]], "alpha_high (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[21, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.alpha_high", false]], "alpha_high (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_alpha_values attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ALPHA_VALUES.alpha_high", false]], "alpha_in (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[7, "bittensor.core.chain_data.dynamic_info.DynamicInfo.alpha_in", false]], "alpha_in (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.alpha_in", false]], "alpha_in (bittensor.core.chain_data.metagraph_info.metagraphinfopool attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfoPool.alpha_in", false]], "alpha_in_emission (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[7, "bittensor.core.chain_data.dynamic_info.DynamicInfo.alpha_in_emission", false]], "alpha_in_emission (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.alpha_in_emission", false]], "alpha_in_emission (bittensor.core.chain_data.metagraph_info.metagraphinfoemissions attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfoEmissions.alpha_in_emission", false]], "alpha_low (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.alpha_low", false]], "alpha_low (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.alpha_low", false]], "alpha_low (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[21, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.alpha_low", false]], "alpha_low (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_alpha_values attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ALPHA_VALUES.alpha_low", false]], "alpha_out (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[7, "bittensor.core.chain_data.dynamic_info.DynamicInfo.alpha_out", false]], "alpha_out (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.alpha_out", false]], "alpha_out (bittensor.core.chain_data.metagraph_info.metagraphinfopool attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfoPool.alpha_out", false]], "alpha_out_emission (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[7, "bittensor.core.chain_data.dynamic_info.DynamicInfo.alpha_out_emission", false]], "alpha_out_emission (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.alpha_out_emission", false]], "alpha_out_emission (bittensor.core.chain_data.metagraph_info.metagraphinfoemissions attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfoEmissions.alpha_out_emission", false]], "alpha_sigmoid_steepness (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[21, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.alpha_sigmoid_steepness", false]], "alpha_slippage (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[7, "bittensor.core.chain_data.dynamic_info.DynamicInfo.alpha_slippage", false]], "alpha_stake (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.alpha_stake", false]], "alpha_stake (bittensor.core.chain_data.subnet_state.subnetstate attribute)": [[24, "bittensor.core.chain_data.subnet_state.SubnetState.alpha_stake", false]], "alpha_stake (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.alpha_stake", false]], "alpha_stake (bittensor.core.metagraph.nontorchmetagraph attribute)": [[78, "bittensor.core.metagraph.NonTorchMetagraph.alpha_stake", false]], "alpha_stake (bittensor.core.metagraph.torchmetagraph attribute)": [[78, "bittensor.core.metagraph.TorchMetagraph.alpha_stake", false]], "alpha_to_tao() (bittensor.core.chain_data.dynamic_info.dynamicinfo method)": [[7, "bittensor.core.chain_data.dynamic_info.DynamicInfo.alpha_to_tao", false]], "alpha_to_tao_with_slippage() (bittensor.core.chain_data.dynamic_info.dynamicinfo method)": [[7, "bittensor.core.chain_data.dynamic_info.DynamicInfo.alpha_to_tao_with_slippage", false]], "alphadividendsperhotkey (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.AlphaDividendsPerHotkey", false]], "alphahigh (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.AlphaHigh", false]], "alphain (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.AlphaIn", false]], "alphainemission (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.AlphaInEmission", false]], "alphalow (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.AlphaLow", false]], "alphaout (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.AlphaOut", false]], "alphaoutemission (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.AlphaOutEmission", false]], "alphastake (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.AlphaStake", false]], "amount (bittensor.extras.dev_framework.calls.non_sudo_calls.burn_alpha attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.BURN_ALPHA.amount", false]], "amount (bittensor.extras.dev_framework.calls.non_sudo_calls.contribute attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CONTRIBUTE.amount", false]], "amount (bittensor.extras.dev_framework.calls.non_sudo_calls.force_unreserve attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_UNRESERVE.amount", false]], "amount (bittensor.extras.dev_framework.calls.non_sudo_calls.recycle_alpha attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.RECYCLE_ALPHA.amount", false]], "amount_staked (bittensor.extras.dev_framework.calls.non_sudo_calls.add_stake attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ADD_STAKE.amount_staked", false]], "amount_staked (bittensor.extras.dev_framework.calls.non_sudo_calls.add_stake_limit attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ADD_STAKE_LIMIT.amount_staked", false]], "amount_unstaked (bittensor.extras.dev_framework.calls.non_sudo_calls.remove_stake attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_STAKE.amount_unstaked", false]], "amount_unstaked (bittensor.extras.dev_framework.calls.non_sudo_calls.remove_stake_limit attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_STAKE_LIMIT.amount_unstaked", false]], "announce (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ANNOUNCE", false]], "announce() (bittensor.core.extrinsics.pallets.proxy.proxy method)": [[61, "bittensor.core.extrinsics.pallets.proxy.Proxy.announce", false]], "announce_extrinsic() (in module bittensor.core.extrinsics.asyncex.proxy)": [[36, "bittensor.core.extrinsics.asyncex.proxy.announce_extrinsic", false]], "announce_extrinsic() (in module bittensor.core.extrinsics.proxy)": [[65, "bittensor.core.extrinsics.proxy.announce_extrinsic", false]], "announce_proxy (bittensor.extras.subtensor_api.proxy.proxy attribute)": [[103, "bittensor.extras.subtensor_api.proxy.Proxy.announce_proxy", false]], "announce_proxy() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.announce_proxy", false]], "announce_proxy() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.announce_proxy", false]], "announcementdepositbase (bittensor.core.chain_data.proxy.proxyconstants attribute)": [[16, "bittensor.core.chain_data.proxy.ProxyConstants.AnnouncementDepositBase", false]], "announcementdepositfactor (bittensor.core.chain_data.proxy.proxyconstants attribute)": [[16, "bittensor.core.chain_data.proxy.ProxyConstants.AnnouncementDepositFactor", false]], "any (bittensor.core.chain_data.proxy.proxytype attribute)": [[16, "bittensor.core.chain_data.proxy.ProxyType.Any", false]], "app (bittensor.core.axon.axon attribute)": [[1, "bittensor.core.axon.Axon.app", false]], "apply_authorized_upgrade (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.APPLY_AUTHORIZED_UPGRADE", false]], "apply_pure_proxy_data() (in module bittensor.core.extrinsics.utils)": [[75, "bittensor.core.extrinsics.utils.apply_pure_proxy_data", false]], "approve_as_multi (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.APPROVE_AS_MULTI", false]], "aquery() (bittensor.core.dendrite.dendritemixin method)": [[28, "bittensor.core.dendrite.DendriteMixin.aquery", false]], "arbitration_block (bittensor.core.chain_data.scheduled_coldkey_swap_info.scheduledcoldkeyswapinfo attribute)": [[18, "bittensor.core.chain_data.scheduled_coldkey_swap_info.ScheduledColdkeySwapInfo.arbitration_block", false]], "archive_entrypoint (in module bittensor.core.settings)": [[79, "bittensor.core.settings.ARCHIVE_ENTRYPOINT", false]], "as (bittensor.core.metagraph.metagraphmixin property)": [[78, "bittensor.core.metagraph.MetagraphMixin.AS", false]], "as_derivative (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.AS_DERIVATIVE", false]], "as_dict() (bittensor.core.types.axonservecallparams method)": [[85, "bittensor.core.types.AxonServeCallParams.as_dict", false]], "as_dict() (bittensor.core.types.extrinsicresponse method)": [[85, "bittensor.core.types.ExtrinsicResponse.as_dict", false]], "as_multi (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.AS_MULTI", false]], "as_multi_threshold_1 (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.AS_MULTI_THRESHOLD_1", false]], "as_origin (bittensor.extras.dev_framework.calls.non_sudo_calls.dispatch_as attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.DISPATCH_AS.as_origin", false]], "as_origin (bittensor.extras.dev_framework.calls.non_sudo_calls.dispatch_as_fallible attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.DISPATCH_AS_FALLIBLE.as_origin", false]], "associate_evm_key (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ASSOCIATE_EVM_KEY", false]], "async_execute_one() (bittensor.extras.dev_framework.subnet.testsubnet method)": [[91, "bittensor.extras.dev_framework.subnet.TestSubnet.async_execute_one", false]], "async_execute_steps() (bittensor.extras.dev_framework.subnet.testsubnet method)": [[91, "bittensor.extras.dev_framework.subnet.TestSubnet.async_execute_steps", false]], "async_metagraph() (in module bittensor.core.metagraph)": [[78, "bittensor.core.metagraph.async_metagraph", false]], "async_set_hyperparameter() (bittensor.extras.dev_framework.subnet.testsubnet method)": [[91, "bittensor.extras.dev_framework.subnet.TestSubnet.async_set_hyperparameter", false]], "async_wait_next_epoch() (bittensor.extras.dev_framework.subnet.testsubnet method)": [[91, "bittensor.extras.dev_framework.subnet.TestSubnet.async_wait_next_epoch", false]], "asyncmetagraph (class in bittensor.core.metagraph)": [[78, "bittensor.core.metagraph.AsyncMetagraph", false]], "asyncsubtensor (class in bittensor.core.async_subtensor)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor", false]], "attach() (bittensor.core.axon.axon method)": [[1, "bittensor.core.axon.Axon.attach", false]], "authorization_list (bittensor.extras.dev_framework.calls.non_sudo_calls.call attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CALL.authorization_list", false]], "authorization_list (bittensor.extras.dev_framework.calls.non_sudo_calls.create attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CREATE.authorization_list", false]], "authorization_list (bittensor.extras.dev_framework.calls.non_sudo_calls.create2 attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CREATE2.authorization_list", false]], "authorize_upgrade (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.AUTHORIZE_UPGRADE", false]], "authorize_upgrade_without_checks (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.AUTHORIZE_UPGRADE_WITHOUT_CHECKS", false]], "axon (bittensor.core.axon.axonmiddleware attribute)": [[1, "bittensor.core.axon.AxonMiddleware.axon", false]], "axon (bittensor.core.synapse.synapse attribute)": [[82, "bittensor.core.synapse.Synapse.axon", false]], "axon (class in bittensor.core.axon)": [[1, "bittensor.core.axon.Axon", false]], "axon_info (bittensor.core.chain_data.neuron_info.neuroninfo attribute)": [[12, "bittensor.core.chain_data.neuron_info.NeuronInfo.axon_info", false]], "axon_info (bittensor.core.chain_data.neuron_info_lite.neuroninfolite attribute)": [[13, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite.axon_info", false]], "axoninfo (bittensor.core.chain_data.utils.chaindatatype attribute)": [[25, "bittensor.core.chain_data.utils.ChainDataType.AxonInfo", false]], "axoninfo (class in bittensor.core.chain_data.axon_info)": [[2, "bittensor.core.chain_data.axon_info.AxonInfo", false]], "axonmiddleware (class in bittensor.core.axon)": [[1, "bittensor.core.axon.AxonMiddleware", false]], "axons (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.axons", false]], "axons (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.Axons", false]], "axons (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.axons", false]], "axonservecallparams (class in bittensor.core.types)": [[85, "bittensor.core.types.AxonServeCallParams", false]], "ayes (bittensor.core.chain_data.proposal_vote_data.proposalvotedata attribute)": [[15, "bittensor.core.chain_data.proposal_vote_data.ProposalVoteData.ayes", false]], "b (bittensor.core.metagraph.metagraphmixin property)": [[78, "bittensor.core.metagraph.MetagraphMixin.B", false]], "balance (class in bittensor.utils.balance)": [[112, "bittensor.utils.balance.Balance", false]], "balances (class in bittensor.core.extrinsics.pallets.balances)": [[55, "bittensor.core.extrinsics.pallets.balances.Balances", false]], "balances (in module bittensor.extras.dev_framework.calls.pallets)": [[88, "bittensor.extras.dev_framework.calls.pallets.Balances", false]], "balancetypeerror": [[29, "bittensor.core.errors.BalanceTypeError", false]], "balanceunitmismatcherror": [[29, "bittensor.core.errors.BalanceUnitMismatchError", false]], "base_log_format (in module bittensor.utils.btlogging.defines)": [[114, "bittensor.utils.btlogging.defines.BASE_LOG_FORMAT", false]], "baseclass (in module bittensor.core.metagraph)": [[78, "bittensor.core.metagraph.BaseClass", false]], "basefee (in module bittensor.extras.dev_framework.calls.pallets)": [[88, "bittensor.extras.dev_framework.calls.pallets.BaseFee", false]], "basemodel (in module bittensor.core.dendrite)": [[28, "bittensor.core.dendrite.BaseModel", false]], "batch (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.BATCH", false]], "batch_all (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.BATCH_ALL", false]], "batch_commit_weights (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.BATCH_COMMIT_WEIGHTS", false]], "batch_reveal_weights (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.BATCH_REVEAL_WEIGHTS", false]], "batch_set_weights (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.BATCH_SET_WEIGHTS", false]], "before_disable_debug() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.before_disable_debug", false]], "before_disable_logging() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.before_disable_logging", false]], "before_disable_trace() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.before_disable_trace", false]], "before_enable_console() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.before_enable_console", false]], "before_enable_debug() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.before_enable_debug", false]], "before_enable_default() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.before_enable_default", false]], "before_enable_info() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.before_enable_info", false]], "before_enable_trace() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.before_enable_trace", false]], "before_enable_warning() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.before_enable_warning", false]], "before_transition() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.before_transition", false]], "best_finalized_block_number (bittensor.extras.dev_framework.calls.non_sudo_calls.note_stalled attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.NOTE_STALLED.best_finalized_block_number", false]], "bits (bittensor.utils.balance.fixedpoint attribute)": [[112, "bittensor.utils.balance.FixedPoint.bits", false]], "bittensor": [[110, "module-bittensor", false]], "bittensor.core": [[77, "module-bittensor.core", false]], "bittensor.core.async_subtensor": [[0, "module-bittensor.core.async_subtensor", false]], "bittensor.core.axon": [[1, "module-bittensor.core.axon", false]], "bittensor.core.chain_data": [[8, "module-bittensor.core.chain_data", false]], "bittensor.core.chain_data.axon_info": [[2, "module-bittensor.core.chain_data.axon_info", false]], "bittensor.core.chain_data.chain_identity": [[3, "module-bittensor.core.chain_data.chain_identity", false]], "bittensor.core.chain_data.crowdloan_info": [[4, "module-bittensor.core.chain_data.crowdloan_info", false]], "bittensor.core.chain_data.delegate_info": [[5, "module-bittensor.core.chain_data.delegate_info", false]], "bittensor.core.chain_data.delegate_info_lite": [[6, "module-bittensor.core.chain_data.delegate_info_lite", false]], "bittensor.core.chain_data.dynamic_info": [[7, "module-bittensor.core.chain_data.dynamic_info", false]], "bittensor.core.chain_data.info_base": [[9, "module-bittensor.core.chain_data.info_base", false]], "bittensor.core.chain_data.ip_info": [[10, "module-bittensor.core.chain_data.ip_info", false]], "bittensor.core.chain_data.metagraph_info": [[11, "module-bittensor.core.chain_data.metagraph_info", false]], "bittensor.core.chain_data.neuron_info": [[12, "module-bittensor.core.chain_data.neuron_info", false]], "bittensor.core.chain_data.neuron_info_lite": [[13, "module-bittensor.core.chain_data.neuron_info_lite", false]], "bittensor.core.chain_data.prometheus_info": [[14, "module-bittensor.core.chain_data.prometheus_info", false]], "bittensor.core.chain_data.proposal_vote_data": [[15, "module-bittensor.core.chain_data.proposal_vote_data", false]], "bittensor.core.chain_data.proxy": [[16, "module-bittensor.core.chain_data.proxy", false]], "bittensor.core.chain_data.root_claim": [[17, "module-bittensor.core.chain_data.root_claim", false]], "bittensor.core.chain_data.scheduled_coldkey_swap_info": [[18, "module-bittensor.core.chain_data.scheduled_coldkey_swap_info", false]], "bittensor.core.chain_data.sim_swap": [[19, "module-bittensor.core.chain_data.sim_swap", false]], "bittensor.core.chain_data.stake_info": [[20, "module-bittensor.core.chain_data.stake_info", false]], "bittensor.core.chain_data.subnet_hyperparameters": [[21, "module-bittensor.core.chain_data.subnet_hyperparameters", false]], "bittensor.core.chain_data.subnet_identity": [[22, "module-bittensor.core.chain_data.subnet_identity", false]], "bittensor.core.chain_data.subnet_info": [[23, "module-bittensor.core.chain_data.subnet_info", false]], "bittensor.core.chain_data.subnet_state": [[24, "module-bittensor.core.chain_data.subnet_state", false]], "bittensor.core.chain_data.utils": [[25, "module-bittensor.core.chain_data.utils", false]], "bittensor.core.chain_data.weight_commit_info": [[26, "module-bittensor.core.chain_data.weight_commit_info", false]], "bittensor.core.config": [[27, "module-bittensor.core.config", false]], "bittensor.core.dendrite": [[28, "module-bittensor.core.dendrite", false]], "bittensor.core.errors": [[29, "module-bittensor.core.errors", false]], "bittensor.core.extrinsics": [[50, "module-bittensor.core.extrinsics", false]], "bittensor.core.extrinsics.asyncex": [[32, "module-bittensor.core.extrinsics.asyncex", false]], "bittensor.core.extrinsics.asyncex.children": [[30, "module-bittensor.core.extrinsics.asyncex.children", false]], "bittensor.core.extrinsics.asyncex.crowdloan": [[31, "module-bittensor.core.extrinsics.asyncex.crowdloan", false]], "bittensor.core.extrinsics.asyncex.liquidity": [[33, "module-bittensor.core.extrinsics.asyncex.liquidity", false]], "bittensor.core.extrinsics.asyncex.mev_shield": [[34, "module-bittensor.core.extrinsics.asyncex.mev_shield", false]], "bittensor.core.extrinsics.asyncex.move_stake": [[35, "module-bittensor.core.extrinsics.asyncex.move_stake", false]], "bittensor.core.extrinsics.asyncex.proxy": [[36, "module-bittensor.core.extrinsics.asyncex.proxy", false]], "bittensor.core.extrinsics.asyncex.registration": [[37, "module-bittensor.core.extrinsics.asyncex.registration", false]], "bittensor.core.extrinsics.asyncex.root": [[38, "module-bittensor.core.extrinsics.asyncex.root", false]], "bittensor.core.extrinsics.asyncex.serving": [[39, "module-bittensor.core.extrinsics.asyncex.serving", false]], "bittensor.core.extrinsics.asyncex.staking": [[40, "module-bittensor.core.extrinsics.asyncex.staking", false]], "bittensor.core.extrinsics.asyncex.start_call": [[41, "module-bittensor.core.extrinsics.asyncex.start_call", false]], "bittensor.core.extrinsics.asyncex.sudo": [[42, "module-bittensor.core.extrinsics.asyncex.sudo", false]], "bittensor.core.extrinsics.asyncex.take": [[43, "module-bittensor.core.extrinsics.asyncex.take", false]], "bittensor.core.extrinsics.asyncex.transfer": [[44, "module-bittensor.core.extrinsics.asyncex.transfer", false]], "bittensor.core.extrinsics.asyncex.unstaking": [[45, "module-bittensor.core.extrinsics.asyncex.unstaking", false]], "bittensor.core.extrinsics.asyncex.utils": [[46, "module-bittensor.core.extrinsics.asyncex.utils", false]], "bittensor.core.extrinsics.asyncex.weights": [[47, "module-bittensor.core.extrinsics.asyncex.weights", false]], "bittensor.core.extrinsics.children": [[48, "module-bittensor.core.extrinsics.children", false]], "bittensor.core.extrinsics.crowdloan": [[49, "module-bittensor.core.extrinsics.crowdloan", false]], "bittensor.core.extrinsics.liquidity": [[51, "module-bittensor.core.extrinsics.liquidity", false]], "bittensor.core.extrinsics.mev_shield": [[52, "module-bittensor.core.extrinsics.mev_shield", false]], "bittensor.core.extrinsics.move_stake": [[53, "module-bittensor.core.extrinsics.move_stake", false]], "bittensor.core.extrinsics.pallets": [[59, "module-bittensor.core.extrinsics.pallets", false]], "bittensor.core.extrinsics.pallets.admin_utils": [[54, "module-bittensor.core.extrinsics.pallets.admin_utils", false]], "bittensor.core.extrinsics.pallets.balances": [[55, "module-bittensor.core.extrinsics.pallets.balances", false]], "bittensor.core.extrinsics.pallets.base": [[56, "module-bittensor.core.extrinsics.pallets.base", false]], "bittensor.core.extrinsics.pallets.commitments": [[57, "module-bittensor.core.extrinsics.pallets.commitments", false]], "bittensor.core.extrinsics.pallets.crowdloan": [[58, "module-bittensor.core.extrinsics.pallets.crowdloan", false]], "bittensor.core.extrinsics.pallets.mev_shield": [[60, "module-bittensor.core.extrinsics.pallets.mev_shield", false]], "bittensor.core.extrinsics.pallets.proxy": [[61, "module-bittensor.core.extrinsics.pallets.proxy", false]], "bittensor.core.extrinsics.pallets.subtensor_module": [[62, "module-bittensor.core.extrinsics.pallets.subtensor_module", false]], "bittensor.core.extrinsics.pallets.sudo": [[63, "module-bittensor.core.extrinsics.pallets.sudo", false]], "bittensor.core.extrinsics.pallets.swap": [[64, "module-bittensor.core.extrinsics.pallets.swap", false]], "bittensor.core.extrinsics.proxy": [[65, "module-bittensor.core.extrinsics.proxy", false]], "bittensor.core.extrinsics.registration": [[66, "module-bittensor.core.extrinsics.registration", false]], "bittensor.core.extrinsics.root": [[67, "module-bittensor.core.extrinsics.root", false]], "bittensor.core.extrinsics.serving": [[68, "module-bittensor.core.extrinsics.serving", false]], "bittensor.core.extrinsics.staking": [[69, "module-bittensor.core.extrinsics.staking", false]], "bittensor.core.extrinsics.start_call": [[70, "module-bittensor.core.extrinsics.start_call", false]], "bittensor.core.extrinsics.sudo": [[71, "module-bittensor.core.extrinsics.sudo", false]], "bittensor.core.extrinsics.take": [[72, "module-bittensor.core.extrinsics.take", false]], "bittensor.core.extrinsics.transfer": [[73, "module-bittensor.core.extrinsics.transfer", false]], "bittensor.core.extrinsics.unstaking": [[74, "module-bittensor.core.extrinsics.unstaking", false]], "bittensor.core.extrinsics.utils": [[75, "module-bittensor.core.extrinsics.utils", false]], "bittensor.core.extrinsics.weights": [[76, "module-bittensor.core.extrinsics.weights", false]], "bittensor.core.metagraph": [[78, "module-bittensor.core.metagraph", false]], "bittensor.core.settings": [[79, "module-bittensor.core.settings", false]], "bittensor.core.stream": [[80, "module-bittensor.core.stream", false]], "bittensor.core.subtensor": [[81, "module-bittensor.core.subtensor", false]], "bittensor.core.synapse": [[82, "module-bittensor.core.synapse", false]], "bittensor.core.tensor": [[83, "module-bittensor.core.tensor", false]], "bittensor.core.threadpool": [[84, "module-bittensor.core.threadpool", false]], "bittensor.core.types": [[85, "module-bittensor.core.types", false]], "bittensor.extras": [[93, "module-bittensor.extras", false]], "bittensor.extras.dev_framework": [[90, "module-bittensor.extras.dev_framework", false]], "bittensor.extras.dev_framework.calls": [[86, "module-bittensor.extras.dev_framework.calls", false]], "bittensor.extras.dev_framework.calls.non_sudo_calls": [[87, "module-bittensor.extras.dev_framework.calls.non_sudo_calls", false]], "bittensor.extras.dev_framework.calls.pallets": [[88, "module-bittensor.extras.dev_framework.calls.pallets", false]], "bittensor.extras.dev_framework.calls.sudo_calls": [[89, "module-bittensor.extras.dev_framework.calls.sudo_calls", false]], "bittensor.extras.dev_framework.subnet": [[91, "module-bittensor.extras.dev_framework.subnet", false]], "bittensor.extras.dev_framework.utils": [[92, "module-bittensor.extras.dev_framework.utils", false]], "bittensor.extras.subtensor_api": [[99, "module-bittensor.extras.subtensor_api", false]], "bittensor.extras.subtensor_api.chain": [[94, "module-bittensor.extras.subtensor_api.chain", false]], "bittensor.extras.subtensor_api.commitments": [[95, "module-bittensor.extras.subtensor_api.commitments", false]], "bittensor.extras.subtensor_api.crowdloans": [[96, "module-bittensor.extras.subtensor_api.crowdloans", false]], "bittensor.extras.subtensor_api.delegates": [[97, "module-bittensor.extras.subtensor_api.delegates", false]], "bittensor.extras.subtensor_api.extrinsics": [[98, "module-bittensor.extras.subtensor_api.extrinsics", false]], "bittensor.extras.subtensor_api.metagraphs": [[100, "module-bittensor.extras.subtensor_api.metagraphs", false]], "bittensor.extras.subtensor_api.mev_shield": [[101, "module-bittensor.extras.subtensor_api.mev_shield", false]], "bittensor.extras.subtensor_api.neurons": [[102, "module-bittensor.extras.subtensor_api.neurons", false]], "bittensor.extras.subtensor_api.proxy": [[103, "module-bittensor.extras.subtensor_api.proxy", false]], "bittensor.extras.subtensor_api.queries": [[104, "module-bittensor.extras.subtensor_api.queries", false]], "bittensor.extras.subtensor_api.staking": [[105, "module-bittensor.extras.subtensor_api.staking", false]], "bittensor.extras.subtensor_api.subnets": [[106, "module-bittensor.extras.subtensor_api.subnets", false]], "bittensor.extras.subtensor_api.utils": [[107, "module-bittensor.extras.subtensor_api.utils", false]], "bittensor.extras.subtensor_api.wallets": [[108, "module-bittensor.extras.subtensor_api.wallets", false]], "bittensor.extras.timelock": [[109, "module-bittensor.extras.timelock", false]], "bittensor.utils": [[122, "module-bittensor.utils", false]], "bittensor.utils.axon_utils": [[111, "module-bittensor.utils.axon_utils", false]], "bittensor.utils.balance": [[112, "module-bittensor.utils.balance", false]], "bittensor.utils.btlogging": [[117, "module-bittensor.utils.btlogging", false]], "bittensor.utils.btlogging.console": [[113, "module-bittensor.utils.btlogging.console", false]], "bittensor.utils.btlogging.defines": [[114, "module-bittensor.utils.btlogging.defines", false]], "bittensor.utils.btlogging.format": [[115, "module-bittensor.utils.btlogging.format", false]], "bittensor.utils.btlogging.helpers": [[116, "module-bittensor.utils.btlogging.helpers", false]], "bittensor.utils.btlogging.levels": [[118, "module-bittensor.utils.btlogging.levels", false]], "bittensor.utils.btlogging.loggingmachine": [[119, "module-bittensor.utils.btlogging.loggingmachine", false]], "bittensor.utils.easy_imports": [[120, "module-bittensor.utils.easy_imports", false]], "bittensor.utils.formatting": [[121, "module-bittensor.utils.formatting", false]], "bittensor.utils.liquidity": [[123, "module-bittensor.utils.liquidity", false]], "bittensor.utils.networking": [[124, "module-bittensor.utils.networking", false]], "bittensor.utils.registration": [[126, "module-bittensor.utils.registration", false]], "bittensor.utils.registration.async_pow": [[125, "module-bittensor.utils.registration.async_pow", false]], "bittensor.utils.registration.pow": [[127, "module-bittensor.utils.registration.pow", false]], "bittensor.utils.registration.register_cuda": [[128, "module-bittensor.utils.registration.register_cuda", false]], "bittensor.utils.subnets": [[129, "module-bittensor.utils.subnets", false]], "bittensor.utils.version": [[130, "module-bittensor.utils.version", false]], "bittensor.utils.weight_utils": [[131, "module-bittensor.utils.weight_utils", false]], "bittensor_logger_name (in module bittensor.utils.btlogging.defines)": [[114, "bittensor.utils.btlogging.defines.BITTENSOR_LOGGER_NAME", false]], "bittensorconsole (class in bittensor.utils.btlogging.console)": [[113, "bittensor.utils.btlogging.console.BittensorConsole", false]], "blacklist() (bittensor.core.axon.axonmiddleware method)": [[1, "bittensor.core.axon.AxonMiddleware.blacklist", false]], "blacklist_fns (bittensor.core.axon.axon attribute)": [[1, "bittensor.core.axon.Axon.blacklist_fns", false]], "blacklistedexception": [[29, "bittensor.core.errors.BlacklistedException", false]], "block (bittensor.core.async_subtensor.asyncsubtensor property)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.block", false]], "block (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.block", false]], "block (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.Block", false]], "block (bittensor.core.chain_data.prometheus_info.prometheusinfo attribute)": [[14, "bittensor.core.chain_data.prometheus_info.PrometheusInfo.block", false]], "block (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.block", false]], "block (bittensor.core.metagraph.nontorchmetagraph attribute)": [[78, "bittensor.core.metagraph.NonTorchMetagraph.block", false]], "block (bittensor.core.metagraph.torchmetagraph attribute)": [[78, "bittensor.core.metagraph.TorchMetagraph.block", false]], "block (bittensor.core.subtensor.subtensor property)": [[81, "bittensor.core.subtensor.Subtensor.block", false]], "block (bittensor.extras.dev_framework.calls.non_sudo_calls.force_release_deposit attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_RELEASE_DEPOSIT.block", false]], "block (bittensor.extras.dev_framework.calls.non_sudo_calls.force_slash_deposit attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_SLASH_DEPOSIT.block", false]], "block (bittensor.extras.dev_framework.calls.non_sudo_calls.release_deposit attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.RELEASE_DEPOSIT.block", false]], "block (bittensor.extras.subtensor_api.subtensorapi property)": [[99, "bittensor.extras.subtensor_api.SubtensorApi.block", false]], "block_at_registration (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.block_at_registration", false]], "block_at_registration (bittensor.core.chain_data.subnet_state.subnetstate attribute)": [[24, "bittensor.core.chain_data.subnet_state.SubnetState.block_at_registration", false]], "block_at_registration (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.block_at_registration", false]], "block_hash (bittensor.utils.registration.pow.registrationstatistics attribute)": [[127, "bittensor.utils.registration.pow.RegistrationStatistics.block_hash", false]], "block_number (bittensor.extras.dev_framework.calls.non_sudo_calls.associate_evm_key attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ASSOCIATE_EVM_KEY.block_number", false]], "block_number (bittensor.extras.dev_framework.calls.non_sudo_calls.faucet attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FAUCET.block_number", false]], "block_number (bittensor.extras.dev_framework.calls.non_sudo_calls.register attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REGISTER.block_number", false]], "block_number (bittensor.utils.registration.pow.powsolution attribute)": [[127, "bittensor.utils.registration.pow.POWSolution.block_number", false]], "block_number (bittensor.utils.registration.pow.registrationstatistics attribute)": [[127, "bittensor.utils.registration.pow.RegistrationStatistics.block_number", false]], "blockatregistration (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.BlockAtRegistration", false]], "blockinfo (class in bittensor.core.types)": [[85, "bittensor.core.types.BlockInfo", false]], "blocknotfound (in module bittensor.core.errors)": [[29, "bittensor.core.errors.BlockNotFound", false]], "blocks_since_epoch (bittensor.core.chain_data.subnet_info.subnetinfo attribute)": [[23, "bittensor.core.chain_data.subnet_info.SubnetInfo.blocks_since_epoch", false]], "blocks_since_last_step (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[7, "bittensor.core.chain_data.dynamic_info.DynamicInfo.blocks_since_last_step", false]], "blocks_since_last_step (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.blocks_since_last_step", false]], "blocks_since_last_step (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.blocks_since_last_step", false]], "blocks_since_last_step (bittensor.extras.subtensor_api.subnets.subnets attribute)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets.blocks_since_last_step", false]], "blocks_since_last_step() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.blocks_since_last_step", false]], "blocks_since_last_step() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.blocks_since_last_step", false]], "blocks_since_last_update (bittensor.extras.subtensor_api.subnets.subnets attribute)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets.blocks_since_last_update", false]], "blocks_since_last_update() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.blocks_since_last_update", false]], "blocks_since_last_update() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.blocks_since_last_update", false]], "blocks_until_next_epoch (bittensor.extras.subtensor_api.subnets.subnets attribute)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets.blocks_until_next_epoch", false]], "blocks_until_next_epoch() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.blocks_until_next_epoch", false]], "blocks_until_next_epoch() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.blocks_until_next_epoch", false]], "blockssincelaststep (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.BlocksSinceLastStep", false]], "blocktime (in module bittensor.core.settings)": [[79, "bittensor.core.settings.BLOCKTIME", false]], "body_hash (bittensor.core.synapse.synapse property)": [[82, "id0", false]], "body_hash() (bittensor.core.synapse.synapse method)": [[82, "bittensor.core.synapse.Synapse.body_hash", false]], "bonds (bittensor.core.chain_data.neuron_info.neuroninfo attribute)": [[12, "bittensor.core.chain_data.neuron_info.NeuronInfo.bonds", false]], "bonds (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.bonds", false]], "bonds (bittensor.core.metagraph.nontorchmetagraph attribute)": [[78, "bittensor.core.metagraph.NonTorchMetagraph.bonds", false]], "bonds (bittensor.core.metagraph.torchmetagraph attribute)": [[78, "bittensor.core.metagraph.TorchMetagraph.bonds", false]], "bonds (bittensor.extras.subtensor_api.subnets.subnets attribute)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets.bonds", false]], "bonds() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.bonds", false]], "bonds() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.bonds", false]], "bonds_moving_average (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_bonds_moving_average attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_BONDS_MOVING_AVERAGE.bonds_moving_average", false]], "bonds_moving_avg (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.bonds_moving_avg", false]], "bonds_moving_avg (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.bonds_moving_avg", false]], "bonds_moving_avg (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[21, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.bonds_moving_avg", false]], "bonds_penalty (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_bonds_penalty attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_BONDS_PENALTY.bonds_penalty", false]], "bonds_reset_enabled (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[21, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.bonds_reset_enabled", false]], "bondsmovingavg (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.BondsMovingAvg", false]], "brokenthreadpool": [[84, "bittensor.core.threadpool.BrokenThreadPool", false]], "bt_docs_link (in module bittensor.utils)": [[122, "bittensor.utils.BT_DOCS_LINK", false]], "btfileformatter (class in bittensor.utils.btlogging.format)": [[115, "bittensor.utils.btlogging.format.BtFileFormatter", false]], "btstreamformatter (class in bittensor.utils.btlogging.format)": [[115, "bittensor.utils.btlogging.format.BtStreamFormatter", false]], "btstreamingresponsemodel (class in bittensor.core.stream)": [[80, "bittensor.core.stream.BTStreamingResponseModel", false]], "buffer (bittensor.core.tensor.tensor attribute)": [[83, "bittensor.core.tensor.Tensor.buffer", false]], "burn (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.burn", false]], "burn (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.burn", false]], "burn (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.Burn", false]], "burn (bittensor.core.chain_data.subnet_info.subnetinfo attribute)": [[23, "bittensor.core.chain_data.subnet_info.SubnetInfo.burn", false]], "burn (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_ck_burn attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_CK_BURN.burn", false]], "burn (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.BURN", false]], "burn_alpha (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.BURN_ALPHA", false]], "burned_register (bittensor.extras.subtensor_api.extrinsics.extrinsics attribute)": [[98, "bittensor.extras.subtensor_api.extrinsics.Extrinsics.burned_register", false]], "burned_register (bittensor.extras.subtensor_api.subnets.subnets attribute)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets.burned_register", false]], "burned_register (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.BURNED_REGISTER", false]], "burned_register() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.burned_register", false]], "burned_register() (bittensor.core.extrinsics.pallets.subtensor_module.subtensormodule method)": [[62, "bittensor.core.extrinsics.pallets.subtensor_module.SubtensorModule.burned_register", false]], "burned_register() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.burned_register", false]], "burned_register_extrinsic() (in module bittensor.core.extrinsics.asyncex.registration)": [[37, "bittensor.core.extrinsics.asyncex.registration.burned_register_extrinsic", false]], "burned_register_extrinsic() (in module bittensor.core.extrinsics.registration)": [[66, "bittensor.core.extrinsics.registration.burned_register_extrinsic", false]], "bytes (bittensor.extras.dev_framework.calls.non_sudo_calls.note_preimage attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.NOTE_PREIMAGE.bytes", false]], "c (bittensor.core.metagraph.metagraphmixin property)": [[78, "bittensor.core.metagraph.MetagraphMixin.C", false]], "calculate_diff_seconds() (in module bittensor.utils.axon_utils)": [[111, "bittensor.utils.axon_utils.calculate_diff_seconds", false]], "calculate_fees() (in module bittensor.utils.liquidity)": [[123, "bittensor.utils.liquidity.calculate_fees", false]], "call (bittensor.core.chain_data.crowdloan_info.crowdloaninfo attribute)": [[4, "bittensor.core.chain_data.crowdloan_info.CrowdloanInfo.call", false]], "call (bittensor.extras.dev_framework.calls.non_sudo_calls.as_derivative attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.AS_DERIVATIVE.call", false]], "call (bittensor.extras.dev_framework.calls.non_sudo_calls.as_multi attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.AS_MULTI.call", false]], "call (bittensor.extras.dev_framework.calls.non_sudo_calls.as_multi_threshold_1 attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.AS_MULTI_THRESHOLD_1.call", false]], "call (bittensor.extras.dev_framework.calls.non_sudo_calls.create attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CREATE.call", false]], "call (bittensor.extras.dev_framework.calls.non_sudo_calls.dispatch_as attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.DISPATCH_AS.call", false]], "call (bittensor.extras.dev_framework.calls.non_sudo_calls.dispatch_as_fallible attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.DISPATCH_AS_FALLIBLE.call", false]], "call (bittensor.extras.dev_framework.calls.non_sudo_calls.proxy attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.PROXY.call", false]], "call (bittensor.extras.dev_framework.calls.non_sudo_calls.proxy_announced attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.PROXY_ANNOUNCED.call", false]], "call (bittensor.extras.dev_framework.calls.non_sudo_calls.schedule attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE.call", false]], "call (bittensor.extras.dev_framework.calls.non_sudo_calls.schedule_after attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE_AFTER.call", false]], "call (bittensor.extras.dev_framework.calls.non_sudo_calls.schedule_named attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE_NAMED.call", false]], "call (bittensor.extras.dev_framework.calls.non_sudo_calls.schedule_named_after attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE_NAMED_AFTER.call", false]], "call (bittensor.extras.dev_framework.calls.non_sudo_calls.sudo attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SUDO.call", false]], "call (bittensor.extras.dev_framework.calls.non_sudo_calls.with_weight attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.WITH_WEIGHT.call", false]], "call (bittensor.extras.dev_framework.calls.sudo_calls.sudo_as attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_AS.call", false]], "call (bittensor.extras.dev_framework.calls.sudo_calls.sudo_unchecked_weight attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_UNCHECKED_WEIGHT.call", false]], "call (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CALL", false]], "call (in module bittensor.core.extrinsics.pallets.base)": [[56, "bittensor.core.extrinsics.pallets.base.Call", false]], "call() (bittensor.core.dendrite.dendrite method)": [[28, "bittensor.core.dendrite.Dendrite.call", false]], "call() (bittensor.core.dendrite.dendritemixin method)": [[28, "bittensor.core.dendrite.DendriteMixin.call", false], [28, "id3", false]], "call() (in module bittensor.core.dendrite)": [[28, "bittensor.core.dendrite.call", false]], "call_hash (bittensor.core.chain_data.proxy.proxyannouncementinfo attribute)": [[16, "bittensor.core.chain_data.proxy.ProxyAnnouncementInfo.call_hash", false]], "call_hash (bittensor.extras.dev_framework.calls.non_sudo_calls.announce attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ANNOUNCE.call_hash", false]], "call_hash (bittensor.extras.dev_framework.calls.non_sudo_calls.approve_as_multi attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.APPROVE_AS_MULTI.call_hash", false]], "call_hash (bittensor.extras.dev_framework.calls.non_sudo_calls.cancel_as_multi attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CANCEL_AS_MULTI.call_hash", false]], "call_hash (bittensor.extras.dev_framework.calls.non_sudo_calls.poke_deposit attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.POKE_DEPOSIT.call_hash", false]], "call_hash (bittensor.extras.dev_framework.calls.non_sudo_calls.reject_announcement attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REJECT_ANNOUNCEMENT.call_hash", false]], "call_hash (bittensor.extras.dev_framework.calls.non_sudo_calls.remove_announcement attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_ANNOUNCEMENT.call_hash", false]], "call_record (class in bittensor.extras.dev_framework.subnet)": [[91, "bittensor.extras.dev_framework.subnet.CALL_RECORD", false]], "call_stream() (bittensor.core.dendrite.dendrite method)": [[28, "bittensor.core.dendrite.Dendrite.call_stream", false]], "call_stream() (bittensor.core.dendrite.dendritemixin method)": [[28, "bittensor.core.dendrite.DendriteMixin.call_stream", false], [28, "id4", false]], "callbuilder (class in bittensor.core.extrinsics.pallets.base)": [[56, "bittensor.core.extrinsics.pallets.base.CallBuilder", false]], "calls (bittensor.extras.dev_framework.calls.non_sudo_calls.batch attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.BATCH.calls", false]], "calls (bittensor.extras.dev_framework.calls.non_sudo_calls.batch_all attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.BATCH_ALL.calls", false]], "calls (bittensor.extras.dev_framework.calls.non_sudo_calls.force_batch attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_BATCH.calls", false]], "calls (bittensor.extras.dev_framework.subnet.testsubnet property)": [[91, "bittensor.extras.dev_framework.subnet.TestSubnet.calls", false]], "cancel (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CANCEL", false]], "cancel_as_multi (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CANCEL_AS_MULTI", false]], "cancel_named (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CANCEL_NAMED", false]], "cancel_retry (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CANCEL_RETRY", false]], "cancel_retry_named (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CANCEL_RETRY_NAMED", false]], "cap (bittensor.core.chain_data.crowdloan_info.crowdloaninfo attribute)": [[4, "bittensor.core.chain_data.crowdloan_info.CrowdloanInfo.cap", false]], "cap (bittensor.extras.dev_framework.calls.non_sudo_calls.create attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CREATE.cap", false]], "cast_dtype() (in module bittensor.core.tensor)": [[83, "bittensor.core.tensor.cast_dtype", false]], "cast_float() (in module bittensor.core.synapse)": [[82, "bittensor.core.synapse.cast_float", false]], "cast_int() (in module bittensor.core.synapse)": [[82, "bittensor.core.synapse.cast_int", false]], "cast_shape() (in module bittensor.core.tensor)": [[83, "bittensor.core.tensor.cast_shape", false]], "certificate (bittensor.core.types.axonservecallparams attribute)": [[85, "bittensor.core.types.AxonServeCallParams.certificate", false]], "certificate (bittensor.extras.dev_framework.calls.non_sudo_calls.serve_axon_tls attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SERVE_AXON_TLS.certificate", false]], "certificate (class in bittensor.utils)": [[122, "bittensor.utils.Certificate", false]], "chain (bittensor.extras.subtensor_api.subtensorapi property)": [[99, "bittensor.extras.subtensor_api.SubtensorApi.chain", false]], "chain (class in bittensor.extras.subtensor_api.chain)": [[94, "bittensor.extras.subtensor_api.chain.Chain", false]], "chain_endpoint (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.chain_endpoint", false]], "chain_endpoint (bittensor.core.types.subtensormixin attribute)": [[85, "bittensor.core.types.SubtensorMixin.chain_endpoint", false]], "chain_endpoint (bittensor.extras.subtensor_api.subtensorapi attribute)": [[99, "bittensor.extras.subtensor_api.SubtensorApi.chain_endpoint", false]], "chain_id (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_evm_chain_id attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_EVM_CHAIN_ID.chain_id", false]], "chainconnectionerror": [[29, "bittensor.core.errors.ChainConnectionError", false]], "chaindatatype (class in bittensor.core.chain_data.utils)": [[25, "bittensor.core.chain_data.utils.ChainDataType", false]], "chainerror": [[29, "bittensor.core.errors.ChainError", false]], "chainidentity (bittensor.core.chain_data.utils.chaindatatype attribute)": [[25, "bittensor.core.chain_data.utils.ChainDataType.ChainIdentity", false]], "chainidentity (class in bittensor.core.chain_data.chain_identity)": [[3, "bittensor.core.chain_data.chain_identity.ChainIdentity", false]], "chainqueryerror": [[29, "bittensor.core.errors.ChainQueryError", false]], "chaintransactionerror": [[29, "bittensor.core.errors.ChainTransactionError", false]], "check_balance_amount() (in module bittensor.utils.balance)": [[112, "bittensor.utils.balance.check_balance_amount", false]], "check_config() (bittensor.core.axon.axon class method)": [[1, "bittensor.core.axon.Axon.check_config", false]], "check_config() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.check_config", false]], "check_latest_version_in_pypi() (in module bittensor.utils.version)": [[130, "bittensor.utils.version.check_latest_version_in_pypi", false]], "check_version (in module bittensor.utils)": [[122, "bittensor.utils.check_version", false]], "check_version() (in module bittensor.utils.version)": [[130, "bittensor.utils.version.check_version", false]], "childkeys (bittensor.core.chain_data.proxy.proxytype attribute)": [[16, "bittensor.core.chain_data.proxy.ProxyType.ChildKeys", false]], "children (bittensor.extras.dev_framework.calls.non_sudo_calls.set_children attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_CHILDREN.children", false]], "claim_root (bittensor.extras.subtensor_api.extrinsics.extrinsics attribute)": [[98, "bittensor.extras.subtensor_api.extrinsics.Extrinsics.claim_root", false]], "claim_root (bittensor.extras.subtensor_api.staking.staking attribute)": [[105, "bittensor.extras.subtensor_api.staking.Staking.claim_root", false]], "claim_root (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CLAIM_ROOT", false]], "claim_root() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.claim_root", false]], "claim_root() (bittensor.core.extrinsics.pallets.subtensor_module.subtensormodule method)": [[62, "bittensor.core.extrinsics.pallets.subtensor_module.SubtensorModule.claim_root", false]], "claim_root() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.claim_root", false]], "claim_root_extrinsic() (in module bittensor.core.extrinsics.asyncex.root)": [[38, "bittensor.core.extrinsics.asyncex.root.claim_root_extrinsic", false]], "claim_root_extrinsic() (in module bittensor.core.extrinsics.root)": [[67, "bittensor.core.extrinsics.root.claim_root_extrinsic", false]], "clear_identity (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CLEAR_IDENTITY", false]], "close (bittensor.extras.subtensor_api.subtensorapi attribute)": [[99, "bittensor.extras.subtensor_api.SubtensorApi.close", false]], "close() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.close", false]], "close() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.close", false]], "close_session() (bittensor.core.dendrite.dendrite method)": [[28, "bittensor.core.dendrite.Dendrite.close_session", false]], "close_session() (bittensor.core.dendrite.dendritemixin method)": [[28, "bittensor.core.dendrite.DendriteMixin.close_session", false], [28, "id5", false]], "code (bittensor.extras.dev_framework.calls.non_sudo_calls.apply_authorized_upgrade attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.APPLY_AUTHORIZED_UPGRADE.code", false]], "code (bittensor.extras.dev_framework.calls.non_sudo_calls.set_code attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_CODE.code", false]], "code (bittensor.extras.dev_framework.calls.non_sudo_calls.set_code_without_checks attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_CODE_WITHOUT_CHECKS.code", false]], "code_hash (bittensor.extras.dev_framework.calls.non_sudo_calls.authorize_upgrade attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.AUTHORIZE_UPGRADE.code_hash", false]], "code_hash (bittensor.extras.dev_framework.calls.non_sudo_calls.authorize_upgrade_without_checks attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.AUTHORIZE_UPGRADE_WITHOUT_CHECKS.code_hash", false]], "coldkey (bittensor.core.chain_data.axon_info.axoninfo attribute)": [[2, "bittensor.core.chain_data.axon_info.AxonInfo.coldkey", false]], "coldkey (bittensor.core.chain_data.neuron_info.neuroninfo attribute)": [[12, "bittensor.core.chain_data.neuron_info.NeuronInfo.coldkey", false]], "coldkey (bittensor.core.chain_data.neuron_info_lite.neuroninfolite attribute)": [[13, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite.coldkey", false]], "coldkey (bittensor.core.types.axonservecallparams attribute)": [[85, "bittensor.core.types.AxonServeCallParams.coldkey", false]], "coldkey (bittensor.extras.dev_framework.calls.non_sudo_calls.dissolve_network attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.DISSOLVE_NETWORK.coldkey", false]], "coldkey (bittensor.extras.dev_framework.calls.non_sudo_calls.register attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REGISTER.coldkey", false]], "coldkey_ss58 (bittensor.core.chain_data.stake_info.stakeinfo attribute)": [[20, "bittensor.core.chain_data.stake_info.StakeInfo.coldkey_ss58", false]], "coldkeys (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.coldkeys", false]], "coldkeys (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.Coldkeys", false]], "coldkeys (bittensor.core.chain_data.subnet_state.subnetstate attribute)": [[24, "bittensor.core.chain_data.subnet_state.SubnetState.coldkeys", false]], "coldkeys (bittensor.core.metagraph.metagraphmixin property)": [[78, "bittensor.core.metagraph.MetagraphMixin.coldkeys", false]], "color_map (in module bittensor.utils.btlogging.format)": [[115, "bittensor.utils.btlogging.format.color_map", false]], "commit (bittensor.extras.dev_framework.calls.non_sudo_calls.commit_crv3_mechanism_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.COMMIT_CRV3_MECHANISM_WEIGHTS.commit", false]], "commit (bittensor.extras.dev_framework.calls.non_sudo_calls.commit_timelocked_mechanism_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.COMMIT_TIMELOCKED_MECHANISM_WEIGHTS.commit", false]], "commit (bittensor.extras.dev_framework.calls.non_sudo_calls.commit_timelocked_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.COMMIT_TIMELOCKED_WEIGHTS.commit", false]], "commit_block (bittensor.core.chain_data.weight_commit_info.weightcommitinfo attribute)": [[26, "bittensor.core.chain_data.weight_commit_info.WeightCommitInfo.commit_block", false]], "commit_crv3_mechanism_weights (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.COMMIT_CRV3_MECHANISM_WEIGHTS", false]], "commit_hash (bittensor.extras.dev_framework.calls.non_sudo_calls.commit_mechanism_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.COMMIT_MECHANISM_WEIGHTS.commit_hash", false]], "commit_hash (bittensor.extras.dev_framework.calls.non_sudo_calls.commit_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.COMMIT_WEIGHTS.commit_hash", false]], "commit_hashes (bittensor.extras.dev_framework.calls.non_sudo_calls.batch_commit_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.BATCH_COMMIT_WEIGHTS.commit_hashes", false]], "commit_hex (bittensor.core.chain_data.weight_commit_info.weightcommitinfo attribute)": [[26, "bittensor.core.chain_data.weight_commit_info.WeightCommitInfo.commit_hex", false]], "commit_mechanism_weights (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.COMMIT_MECHANISM_WEIGHTS", false]], "commit_mechanism_weights() (bittensor.core.extrinsics.pallets.subtensor_module.subtensormodule method)": [[62, "bittensor.core.extrinsics.pallets.subtensor_module.SubtensorModule.commit_mechanism_weights", false]], "commit_reveal_enabled (bittensor.extras.subtensor_api.commitments.commitments attribute)": [[95, "bittensor.extras.subtensor_api.commitments.Commitments.commit_reveal_enabled", false]], "commit_reveal_enabled (bittensor.extras.subtensor_api.subnets.subnets attribute)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets.commit_reveal_enabled", false]], "commit_reveal_enabled() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.commit_reveal_enabled", false]], "commit_reveal_enabled() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.commit_reveal_enabled", false]], "commit_reveal_period (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.commit_reveal_period", false]], "commit_reveal_period (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.commit_reveal_period", false]], "commit_reveal_period (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[21, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.commit_reveal_period", false]], "commit_reveal_version (bittensor.extras.dev_framework.calls.non_sudo_calls.commit_timelocked_mechanism_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.COMMIT_TIMELOCKED_MECHANISM_WEIGHTS.commit_reveal_version", false]], "commit_reveal_version (bittensor.extras.dev_framework.calls.non_sudo_calls.commit_timelocked_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.COMMIT_TIMELOCKED_WEIGHTS.commit_reveal_version", false]], "commit_reveal_weights_enabled (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.commit_reveal_weights_enabled", false]], "commit_reveal_weights_enabled (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.commit_reveal_weights_enabled", false]], "commit_reveal_weights_enabled (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[21, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.commit_reveal_weights_enabled", false]], "commit_timelocked_mechanism_weights (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.COMMIT_TIMELOCKED_MECHANISM_WEIGHTS", false]], "commit_timelocked_mechanism_weights() (bittensor.core.extrinsics.pallets.subtensor_module.subtensormodule method)": [[62, "bittensor.core.extrinsics.pallets.subtensor_module.SubtensorModule.commit_timelocked_mechanism_weights", false]], "commit_timelocked_weights (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.COMMIT_TIMELOCKED_WEIGHTS", false]], "commit_timelocked_weights_extrinsic() (in module bittensor.core.extrinsics.asyncex.weights)": [[47, "bittensor.core.extrinsics.asyncex.weights.commit_timelocked_weights_extrinsic", false]], "commit_timelocked_weights_extrinsic() (in module bittensor.core.extrinsics.weights)": [[76, "bittensor.core.extrinsics.weights.commit_timelocked_weights_extrinsic", false]], "commit_weights (bittensor.extras.subtensor_api.extrinsics.extrinsics attribute)": [[98, "bittensor.extras.subtensor_api.extrinsics.Extrinsics.commit_weights", false]], "commit_weights (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.COMMIT_WEIGHTS", false]], "commit_weights() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.commit_weights", false]], "commit_weights() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.commit_weights", false]], "commit_weights_extrinsic() (in module bittensor.core.extrinsics.asyncex.weights)": [[47, "bittensor.core.extrinsics.asyncex.weights.commit_weights_extrinsic", false]], "commit_weights_extrinsic() (in module bittensor.core.extrinsics.weights)": [[76, "bittensor.core.extrinsics.weights.commit_weights_extrinsic", false]], "commitments (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.commitments", false]], "commitments (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.Commitments", false]], "commitments (bittensor.extras.subtensor_api.subtensorapi property)": [[99, "bittensor.extras.subtensor_api.SubtensorApi.commitments", false]], "commitments (class in bittensor.core.extrinsics.pallets.commitments)": [[57, "bittensor.core.extrinsics.pallets.commitments.Commitments", false]], "commitments (class in bittensor.extras.subtensor_api.commitments)": [[95, "bittensor.extras.subtensor_api.commitments.Commitments", false]], "commitments (in module bittensor.extras.dev_framework.calls.pallets)": [[88, "bittensor.extras.dev_framework.calls.pallets.Commitments", false]], "commitrevealperiod (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.CommitRevealPeriod", false]], "commitrevealweightsenabled (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.CommitRevealWeightsEnabled", false]], "compose_call (bittensor.extras.subtensor_api.subtensorapi attribute)": [[99, "bittensor.extras.subtensor_api.SubtensorApi.compose_call", false]], "compose_call() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.compose_call", false]], "compose_call() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.compose_call", false]], "computed_body_hash (bittensor.core.synapse.synapse attribute)": [[82, "bittensor.core.synapse.Synapse.computed_body_hash", false]], "config (bittensor.extras.subtensor_api.subtensorapi attribute)": [[99, "bittensor.extras.subtensor_api.SubtensorApi.config", false]], "config (class in bittensor.core.config)": [[27, "bittensor.core.config.Config", false]], "config() (bittensor.core.axon.axon class method)": [[1, "bittensor.core.axon.Axon.config", false]], "config() (bittensor.core.threadpool.prioritythreadpoolexecutor class method)": [[84, "bittensor.core.threadpool.PriorityThreadPoolExecutor.config", false]], "config() (bittensor.core.types.subtensormixin static method)": [[85, "bittensor.core.types.SubtensorMixin.config", false]], "config() (bittensor.utils.btlogging.loggingmachine.loggingmachine class method)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.config", false]], "config_payload (bittensor.extras.dev_framework.calls.non_sudo_calls.set_beacon_config attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_BEACON_CONFIG.config_payload", false]], "connection_requirements (bittensor.core.chain_data.subnet_info.subnetinfo attribute)": [[23, "bittensor.core.chain_data.subnet_info.SubnetInfo.connection_requirements", false]], "consensus (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.consensus", false]], "consensus (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.Consensus", false]], "consensus (bittensor.core.chain_data.neuron_info.neuroninfo attribute)": [[12, "bittensor.core.chain_data.neuron_info.NeuronInfo.consensus", false]], "consensus (bittensor.core.chain_data.neuron_info_lite.neuroninfolite attribute)": [[13, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite.consensus", false]], "consensus (bittensor.core.chain_data.subnet_state.subnetstate attribute)": [[24, "bittensor.core.chain_data.subnet_state.SubnetState.consensus", false]], "consensus (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.consensus", false]], "consensus (bittensor.core.metagraph.nontorchmetagraph attribute)": [[78, "bittensor.core.metagraph.NonTorchMetagraph.consensus", false]], "consensus (bittensor.core.metagraph.torchmetagraph attribute)": [[78, "bittensor.core.metagraph.TorchMetagraph.consensus", false]], "console (bittensor.utils.btlogging.loggingmachine.loggingmachine attribute)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.console", false]], "console (bittensor.utils.registration.pow.registrationstatisticslogger attribute)": [[127, "bittensor.utils.registration.pow.RegistrationStatisticsLogger.console", false]], "console (class in bittensor.utils.registration.pow)": [[127, "bittensor.utils.registration.pow.Console", false]], "constants_names() (bittensor.core.chain_data.crowdloan_info.crowdloanconstants class method)": [[4, "bittensor.core.chain_data.crowdloan_info.CrowdloanConstants.constants_names", false]], "constants_names() (bittensor.core.chain_data.proxy.proxyconstants class method)": [[16, "bittensor.core.chain_data.proxy.ProxyConstants.constants_names", false]], "contribute (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CONTRIBUTE", false]], "contribute() (bittensor.core.extrinsics.pallets.crowdloan.crowdloan method)": [[58, "bittensor.core.extrinsics.pallets.crowdloan.Crowdloan.contribute", false]], "contribute_crowdloan (bittensor.extras.subtensor_api.crowdloans.crowdloans attribute)": [[96, "bittensor.extras.subtensor_api.crowdloans.Crowdloans.contribute_crowdloan", false]], "contribute_crowdloan (bittensor.extras.subtensor_api.extrinsics.extrinsics attribute)": [[98, "bittensor.extras.subtensor_api.extrinsics.Extrinsics.contribute_crowdloan", false]], "contribute_crowdloan() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.contribute_crowdloan", false]], "contribute_crowdloan() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.contribute_crowdloan", false]], "contribute_crowdloan_extrinsic() (in module bittensor.core.extrinsics.asyncex.crowdloan)": [[31, "bittensor.core.extrinsics.asyncex.crowdloan.contribute_crowdloan_extrinsic", false]], "contribute_crowdloan_extrinsic() (in module bittensor.core.extrinsics.crowdloan)": [[49, "bittensor.core.extrinsics.crowdloan.contribute_crowdloan_extrinsic", false]], "contributors_count (bittensor.core.chain_data.crowdloan_info.crowdloaninfo attribute)": [[4, "bittensor.core.chain_data.crowdloan_info.CrowdloanInfo.contributors_count", false]], "convert_and_normalize_weights_and_uids() (in module bittensor.utils.weight_utils)": [[131, "bittensor.utils.weight_utils.convert_and_normalize_weights_and_uids", false]], "convert_bond_uids_and_vals_to_tensor() (in module bittensor.utils.weight_utils)": [[131, "bittensor.utils.weight_utils.convert_bond_uids_and_vals_to_tensor", false]], "convert_maybe_split_to_u16() (in module bittensor.utils.weight_utils)": [[131, "bittensor.utils.weight_utils.convert_maybe_split_to_u16", false]], "convert_root_weight_uids_and_vals_to_tensor() (in module bittensor.utils.weight_utils)": [[131, "bittensor.utils.weight_utils.convert_root_weight_uids_and_vals_to_tensor", false]], "convert_uids_and_weights() (in module bittensor.utils.weight_utils)": [[131, "bittensor.utils.weight_utils.convert_uids_and_weights", false]], "convert_weight_uids_and_vals_to_tensor() (in module bittensor.utils.weight_utils)": [[131, "bittensor.utils.weight_utils.convert_weight_uids_and_vals_to_tensor", false]], "convert_weights_and_uids_for_emit() (in module bittensor.utils.weight_utils)": [[131, "bittensor.utils.weight_utils.convert_weights_and_uids_for_emit", false]], "cooldown (bittensor.extras.dev_framework.calls.non_sudo_calls.set_pending_childkey_cooldown attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_PENDING_CHILDKEY_COOLDOWN.cooldown", false]], "copy() (bittensor.core.types.axonservecallparams method)": [[85, "bittensor.core.types.AxonServeCallParams.copy", false]], "create (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CREATE", false], [87, "id0", false]], "create() (bittensor.core.extrinsics.pallets.crowdloan.crowdloan method)": [[58, "bittensor.core.extrinsics.pallets.crowdloan.Crowdloan.create", false]], "create2 (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CREATE2", false]], "create_composed_call() (bittensor.core.extrinsics.pallets.base.callbuilder method)": [[56, "bittensor.core.extrinsics.pallets.base.CallBuilder.create_composed_call", false]], "create_crowdloan (bittensor.extras.subtensor_api.crowdloans.crowdloans attribute)": [[96, "bittensor.extras.subtensor_api.crowdloans.Crowdloans.create_crowdloan", false]], "create_crowdloan (bittensor.extras.subtensor_api.extrinsics.extrinsics attribute)": [[98, "bittensor.extras.subtensor_api.extrinsics.Extrinsics.create_crowdloan", false]], "create_crowdloan() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.create_crowdloan", false]], "create_crowdloan() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.create_crowdloan", false]], "create_crowdloan_extrinsic() (in module bittensor.core.extrinsics.asyncex.crowdloan)": [[31, "bittensor.core.extrinsics.asyncex.crowdloan.create_crowdloan_extrinsic", false]], "create_crowdloan_extrinsic() (in module bittensor.core.extrinsics.crowdloan)": [[49, "bittensor.core.extrinsics.crowdloan.create_crowdloan_extrinsic", false]], "create_error_response() (in module bittensor.core.axon)": [[1, "bittensor.core.axon.create_error_response", false]], "create_pow() (in module bittensor.utils.registration.pow)": [[127, "bittensor.utils.registration.pow.create_pow", false]], "create_pow_async() (in module bittensor.utils.registration.async_pow)": [[125, "bittensor.utils.registration.async_pow.create_pow_async", false]], "create_pure (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CREATE_PURE", false]], "create_pure() (bittensor.core.extrinsics.pallets.proxy.proxy method)": [[61, "bittensor.core.extrinsics.pallets.proxy.Proxy.create_pure", false]], "create_pure_proxy (bittensor.extras.subtensor_api.proxy.proxy attribute)": [[103, "bittensor.extras.subtensor_api.proxy.Proxy.create_pure_proxy", false]], "create_pure_proxy() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.create_pure_proxy", false]], "create_pure_proxy() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.create_pure_proxy", false]], "create_pure_proxy_extrinsic() (in module bittensor.core.extrinsics.asyncex.proxy)": [[36, "bittensor.core.extrinsics.asyncex.proxy.create_pure_proxy_extrinsic", false]], "create_pure_proxy_extrinsic() (in module bittensor.core.extrinsics.proxy)": [[65, "bittensor.core.extrinsics.proxy.create_pure_proxy_extrinsic", false]], "create_streaming_response() (bittensor.core.stream.streamingsynapse method)": [[80, "bittensor.core.stream.StreamingSynapse.create_streaming_response", false]], "creator (bittensor.core.chain_data.crowdloan_info.crowdloaninfo attribute)": [[4, "bittensor.core.chain_data.crowdloan_info.CrowdloanInfo.creator", false]], "critical() (bittensor.utils.btlogging.console.bittensorconsole method)": [[113, "bittensor.utils.btlogging.console.BittensorConsole.critical", false]], "critical() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.critical", false]], "crowdloan (class in bittensor.core.extrinsics.pallets.crowdloan)": [[58, "bittensor.core.extrinsics.pallets.crowdloan.Crowdloan", false]], "crowdloan (in module bittensor.extras.dev_framework.calls.pallets)": [[88, "bittensor.extras.dev_framework.calls.pallets.Crowdloan", false]], "crowdloan_id (bittensor.extras.dev_framework.calls.non_sudo_calls.contribute attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CONTRIBUTE.crowdloan_id", false]], "crowdloan_id (bittensor.extras.dev_framework.calls.non_sudo_calls.dissolve attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.DISSOLVE.crowdloan_id", false]], "crowdloan_id (bittensor.extras.dev_framework.calls.non_sudo_calls.finalize attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FINALIZE.crowdloan_id", false]], "crowdloan_id (bittensor.extras.dev_framework.calls.non_sudo_calls.refund attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REFUND.crowdloan_id", false]], "crowdloan_id (bittensor.extras.dev_framework.calls.non_sudo_calls.update_cap attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.UPDATE_CAP.crowdloan_id", false]], "crowdloan_id (bittensor.extras.dev_framework.calls.non_sudo_calls.update_end attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.UPDATE_END.crowdloan_id", false]], "crowdloan_id (bittensor.extras.dev_framework.calls.non_sudo_calls.update_min_contribution attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.UPDATE_MIN_CONTRIBUTION.crowdloan_id", false]], "crowdloan_id (bittensor.extras.dev_framework.calls.non_sudo_calls.withdraw attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.WITHDRAW.crowdloan_id", false]], "crowdloanconstants (class in bittensor.core.chain_data.crowdloan_info)": [[4, "bittensor.core.chain_data.crowdloan_info.CrowdloanConstants", false]], "crowdloaninfo (class in bittensor.core.chain_data.crowdloan_info)": [[4, "bittensor.core.chain_data.crowdloan_info.CrowdloanInfo", false]], "crowdloans (bittensor.extras.subtensor_api.subtensorapi property)": [[99, "bittensor.extras.subtensor_api.SubtensorApi.crowdloans", false]], "crowdloans (class in bittensor.extras.subtensor_api.crowdloans)": [[96, "bittensor.extras.subtensor_api.crowdloans.Crowdloans", false]], "cudasolver (class in bittensor.utils.registration.pow)": [[127, "bittensor.utils.registration.pow.CUDASolver", false]], "custom_logger_method_stack_level (in module bittensor.utils.btlogging.loggingmachine)": [[119, "bittensor.utils.btlogging.loggingmachine.CUSTOM_LOGGER_METHOD_STACK_LEVEL", false]], "d (bittensor.core.metagraph.metagraphmixin property)": [[78, "bittensor.core.metagraph.MetagraphMixin.D", false]], "data (bittensor.core.types.extrinsicresponse attribute)": [[85, "bittensor.core.types.ExtrinsicResponse.data", false]], "date_format (in module bittensor.utils.btlogging.defines)": [[114, "bittensor.utils.btlogging.defines.DATE_FORMAT", false]], "debug (bittensor.utils.btlogging.loggingmachine.loggingconfig attribute)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingConfig.debug", false]], "debug (bittensor.utils.btlogging.loggingmachine.loggingmachine attribute)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.Debug", false]], "debug() (bittensor.utils.btlogging.console.bittensorconsole method)": [[113, "bittensor.utils.btlogging.console.BittensorConsole.debug", false]], "debug() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.debug", false]], "debug() (in module bittensor.utils.btlogging.levels)": [[118, "bittensor.utils.btlogging.levels.debug", false]], "decode_account_id() (in module bittensor.core.chain_data.utils)": [[25, "bittensor.core.chain_data.utils.decode_account_id", false]], "decode_account_id_list() (bittensor.core.chain_data.scheduled_coldkey_swap_info.scheduledcoldkeyswapinfo class method)": [[18, "bittensor.core.chain_data.scheduled_coldkey_swap_info.ScheduledColdkeySwapInfo.decode_account_id_list", false]], "decode_block() (in module bittensor.core.chain_data.utils)": [[25, "bittensor.core.chain_data.utils.decode_block", false]], "decode_hex_identity_dict() (in module bittensor.utils)": [[122, "bittensor.utils.decode_hex_identity_dict", false]], "decode_metadata() (in module bittensor.core.chain_data.utils)": [[25, "bittensor.core.chain_data.utils.decode_metadata", false]], "decode_revealed_commitment() (in module bittensor.core.chain_data.utils)": [[25, "bittensor.core.chain_data.utils.decode_revealed_commitment", false]], "decode_revealed_commitment_with_hotkey() (in module bittensor.core.chain_data.utils)": [[25, "bittensor.core.chain_data.utils.decode_revealed_commitment_with_hotkey", false]], "decrease_take (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.DECREASE_TAKE", false]], "decrease_take() (bittensor.core.extrinsics.pallets.subtensor_module.subtensormodule method)": [[62, "bittensor.core.extrinsics.pallets.subtensor_module.SubtensorModule.decrease_take", false]], "decrypt() (in module bittensor.extras.timelock)": [[109, "bittensor.extras.timelock.decrypt", false]], "default (bittensor.utils.btlogging.loggingmachine.loggingmachine attribute)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.Default", false]], "default_endpoint (in module bittensor.core.settings)": [[79, "bittensor.core.settings.DEFAULT_ENDPOINT", false]], "default_log_backup_count (in module bittensor.utils.btlogging.defines)": [[114, "bittensor.utils.btlogging.defines.DEFAULT_LOG_BACKUP_COUNT", false]], "default_log_file_name (in module bittensor.utils.btlogging.defines)": [[114, "bittensor.utils.btlogging.defines.DEFAULT_LOG_FILE_NAME", false]], "default_log_format (in module bittensor.utils.btlogging.format)": [[115, "bittensor.utils.btlogging.format.DEFAULT_LOG_FORMAT", false]], "default_max_rotating_log_file_size (in module bittensor.utils.btlogging.defines)": [[114, "bittensor.utils.btlogging.defines.DEFAULT_MAX_ROTATING_LOG_FILE_SIZE", false]], "default_mev_protection (in module bittensor.core.settings)": [[79, "bittensor.core.settings.DEFAULT_MEV_PROTECTION", false]], "default_network (in module bittensor.core.settings)": [[79, "bittensor.core.settings.DEFAULT_NETWORK", false]], "default_period (in module bittensor.core.settings)": [[79, "bittensor.core.settings.DEFAULT_PERIOD", false]], "default_take (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_default_take attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_DEFAULT_TAKE.default_take", false]], "default_trace_format (in module bittensor.utils.btlogging.format)": [[115, "bittensor.utils.btlogging.format.DEFAULT_TRACE_FORMAT", false]], "default_verify() (bittensor.core.axon.axon method)": [[1, "bittensor.core.axon.Axon.default_verify", false]], "defaults (in module bittensor.core.settings)": [[79, "bittensor.core.settings.DEFAULTS", false]], "delay (bittensor.core.chain_data.proxy.proxyinfo attribute)": [[16, "bittensor.core.chain_data.proxy.ProxyInfo.delay", false]], "delay (bittensor.extras.dev_framework.calls.non_sudo_calls.add_proxy attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ADD_PROXY.delay", false]], "delay (bittensor.extras.dev_framework.calls.non_sudo_calls.create_pure attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CREATE_PURE.delay", false]], "delay (bittensor.extras.dev_framework.calls.non_sudo_calls.note_stalled attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.NOTE_STALLED.delay", false]], "delay (bittensor.extras.dev_framework.calls.non_sudo_calls.remove_proxy attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_PROXY.delay", false]], "delegate (bittensor.core.chain_data.proxy.proxyinfo attribute)": [[16, "bittensor.core.chain_data.proxy.ProxyInfo.delegate", false]], "delegate (bittensor.extras.dev_framework.calls.non_sudo_calls.add_proxy attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ADD_PROXY.delegate", false]], "delegate (bittensor.extras.dev_framework.calls.non_sudo_calls.proxy_announced attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.PROXY_ANNOUNCED.delegate", false]], "delegate (bittensor.extras.dev_framework.calls.non_sudo_calls.reject_announcement attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REJECT_ANNOUNCEMENT.delegate", false]], "delegate (bittensor.extras.dev_framework.calls.non_sudo_calls.remove_proxy attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_PROXY.delegate", false]], "delegate_ss58 (bittensor.core.chain_data.delegate_info_lite.delegateinfolite attribute)": [[6, "bittensor.core.chain_data.delegate_info_lite.DelegateInfoLite.delegate_ss58", false]], "delegatedinfo (bittensor.core.chain_data.utils.chaindatatype attribute)": [[25, "bittensor.core.chain_data.utils.ChainDataType.DelegatedInfo", false]], "delegatedinfo (class in bittensor.core.chain_data.delegate_info)": [[5, "bittensor.core.chain_data.delegate_info.DelegatedInfo", false]], "delegateinfo (bittensor.core.chain_data.utils.chaindatatype attribute)": [[25, "bittensor.core.chain_data.utils.ChainDataType.DelegateInfo", false]], "delegateinfo (class in bittensor.core.chain_data.delegate_info)": [[5, "bittensor.core.chain_data.delegate_info.DelegateInfo", false]], "delegateinfobase (class in bittensor.core.chain_data.delegate_info)": [[5, "bittensor.core.chain_data.delegate_info.DelegateInfoBase", false]], "delegateinfolite (class in bittensor.core.chain_data.delegate_info_lite)": [[6, "bittensor.core.chain_data.delegate_info_lite.DelegateInfoLite", false]], "delegates (bittensor.extras.subtensor_api.subtensorapi property)": [[99, "bittensor.extras.subtensor_api.SubtensorApi.delegates", false]], "delegates (class in bittensor.extras.subtensor_api.delegates)": [[97, "bittensor.extras.subtensor_api.delegates.Delegates", false]], "delegatetaketoohigh": [[29, "bittensor.core.errors.DelegateTakeTooHigh", false]], "delegatetaketoolow": [[29, "bittensor.core.errors.DelegateTakeTooLow", false]], "delegatetxratelimitexceeded": [[29, "bittensor.core.errors.DelegateTxRateLimitExceeded", false]], "delta (bittensor.extras.dev_framework.calls.non_sudo_calls.force_adjust_total_issuance attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_ADJUST_TOTAL_ISSUANCE.delta", false]], "dendrite (bittensor.core.synapse.synapse attribute)": [[82, "bittensor.core.synapse.Synapse.dendrite", false]], "dendrite (bittensor.utils.subnets.subnetsapi attribute)": [[129, "bittensor.utils.subnets.SubnetsAPI.dendrite", false]], "dendrite (class in bittensor.core.dendrite)": [[28, "bittensor.core.dendrite.Dendrite", false]], "dendrite_default_error (in module bittensor.core.dendrite)": [[28, "bittensor.core.dendrite.DENDRITE_DEFAULT_ERROR", false]], "dendrite_error_mapping (in module bittensor.core.dendrite)": [[28, "bittensor.core.dendrite.DENDRITE_ERROR_MAPPING", false]], "dendritemixin (class in bittensor.core.dendrite)": [[28, "bittensor.core.dendrite.DendriteMixin", false]], "deposit (bittensor.core.chain_data.crowdloan_info.crowdloaninfo attribute)": [[4, "bittensor.core.chain_data.crowdloan_info.CrowdloanInfo.deposit", false]], "deposit (bittensor.extras.dev_framework.calls.non_sudo_calls.create attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CREATE.deposit", false]], "deprecated_message() (in module bittensor.utils)": [[122, "bittensor.utils.deprecated_message", false]], "deregister_primary_logger() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.deregister_primary_logger", false]], "description (bittensor.core.chain_data.chain_identity.chainidentity attribute)": [[3, "bittensor.core.chain_data.chain_identity.ChainIdentity.description", false]], "description (bittensor.core.chain_data.subnet_identity.subnetidentity attribute)": [[22, "bittensor.core.chain_data.subnet_identity.SubnetIdentity.description", false]], "description (bittensor.extras.dev_framework.calls.non_sudo_calls.set_identity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_IDENTITY.description", false]], "description (bittensor.extras.dev_framework.calls.non_sudo_calls.set_subnet_identity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_SUBNET_IDENTITY.description", false]], "deserialize() (bittensor.core.synapse.synapse method)": [[82, "bittensor.core.synapse.Synapse.deserialize", false], [82, "id1", false]], "deserialize() (bittensor.core.tensor.tensor method)": [[83, "bittensor.core.tensor.Tensor.deserialize", false]], "dest (bittensor.extras.dev_framework.calls.non_sudo_calls.force_transfer attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_TRANSFER.dest", false]], "dest (bittensor.extras.dev_framework.calls.non_sudo_calls.transfer_all attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.TRANSFER_ALL.dest", false]], "dest (bittensor.extras.dev_framework.calls.non_sudo_calls.transfer_allow_death attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.TRANSFER_ALLOW_DEATH.dest", false]], "dest (bittensor.extras.dev_framework.calls.non_sudo_calls.transfer_keep_alive attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.TRANSFER_KEEP_ALIVE.dest", false]], "destination_coldkey (bittensor.extras.dev_framework.calls.non_sudo_calls.transfer_stake attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.TRANSFER_STAKE.destination_coldkey", false]], "destination_hotkey (bittensor.extras.dev_framework.calls.non_sudo_calls.move_stake attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.MOVE_STAKE.destination_hotkey", false]], "destination_netuid (bittensor.extras.dev_framework.calls.non_sudo_calls.move_stake attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.MOVE_STAKE.destination_netuid", false]], "destination_netuid (bittensor.extras.dev_framework.calls.non_sudo_calls.swap_stake attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SWAP_STAKE.destination_netuid", false]], "destination_netuid (bittensor.extras.dev_framework.calls.non_sudo_calls.swap_stake_limit attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SWAP_STAKE_LIMIT.destination_netuid", false]], "destination_netuid (bittensor.extras.dev_framework.calls.non_sudo_calls.transfer_stake attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.TRANSFER_STAKE.destination_netuid", false]], "dests (bittensor.extras.dev_framework.calls.non_sudo_calls.set_mechanism_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_MECHANISM_WEIGHTS.dests", false]], "dests (bittensor.extras.dev_framework.calls.non_sudo_calls.set_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_WEIGHTS.dests", false]], "determine_block_hash (bittensor.extras.subtensor_api.subtensorapi attribute)": [[99, "bittensor.extras.subtensor_api.SubtensorApi.determine_block_hash", false]], "determine_block_hash() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.determine_block_hash", false]], "determine_block_hash() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.determine_block_hash", false]], "determine_chain_endpoint_and_network() (in module bittensor.utils)": [[122, "bittensor.utils.determine_chain_endpoint_and_network", false]], "dev_id (bittensor.utils.registration.pow.cudasolver attribute)": [[127, "bittensor.utils.registration.pow.CUDASolver.dev_id", false]], "difficulty (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.difficulty", false]], "difficulty (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.difficulty", false]], "difficulty (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.Difficulty", false]], "difficulty (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[21, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.difficulty", false]], "difficulty (bittensor.core.chain_data.subnet_info.subnetinfo attribute)": [[23, "bittensor.core.chain_data.subnet_info.SubnetInfo.difficulty", false]], "difficulty (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_difficulty attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_DIFFICULTY.difficulty", false]], "difficulty (bittensor.extras.subtensor_api.subnets.subnets attribute)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets.difficulty", false]], "difficulty (bittensor.utils.registration.pow.powsolution attribute)": [[127, "bittensor.utils.registration.pow.POWSolution.difficulty", false]], "difficulty (bittensor.utils.registration.pow.registrationstatistics attribute)": [[127, "bittensor.utils.registration.pow.RegistrationStatistics.difficulty", false]], "difficulty() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.difficulty", false]], "difficulty() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.difficulty", false]], "direction (bittensor.extras.dev_framework.calls.non_sudo_calls.force_adjust_total_issuance attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_ADJUST_TOTAL_ISSUANCE.direction", false]], "disable_debug (bittensor.utils.btlogging.loggingmachine.loggingmachine attribute)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.disable_debug", false]], "disable_info (bittensor.utils.btlogging.loggingmachine.loggingmachine attribute)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.disable_info", false]], "disable_logging (bittensor.utils.btlogging.loggingmachine.loggingmachine attribute)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.disable_logging", false]], "disable_third_party_loggers() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.disable_third_party_loggers", false]], "disable_trace (bittensor.utils.btlogging.loggingmachine.loggingmachine attribute)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.disable_trace", false]], "disable_warning (bittensor.utils.btlogging.loggingmachine.loggingmachine attribute)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.disable_warning", false]], "disable_whitelist (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.DISABLE_WHITELIST", false]], "disabled (bittensor.extras.dev_framework.calls.non_sudo_calls.disable_whitelist attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.DISABLE_WHITELIST.disabled", false]], "disabled (bittensor.utils.btlogging.loggingmachine.loggingmachine attribute)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.Disabled", false]], "discord (bittensor.core.chain_data.chain_identity.chainidentity attribute)": [[3, "bittensor.core.chain_data.chain_identity.ChainIdentity.discord", false]], "discord (bittensor.core.chain_data.subnet_identity.subnetidentity attribute)": [[22, "bittensor.core.chain_data.subnet_identity.SubnetIdentity.discord", false]], "discord (bittensor.extras.dev_framework.calls.non_sudo_calls.set_identity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_IDENTITY.discord", false]], "discord (bittensor.extras.dev_framework.calls.non_sudo_calls.set_subnet_identity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_SUBNET_IDENTITY.discord", false]], "dispatch() (bittensor.core.axon.axonmiddleware method)": [[1, "bittensor.core.axon.AxonMiddleware.dispatch", false]], "dispatch_as (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.DISPATCH_AS", false]], "dispatch_as_fallible (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.DISPATCH_AS_FALLIBLE", false]], "dissolve (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.DISSOLVE", false]], "dissolve() (bittensor.core.extrinsics.pallets.crowdloan.crowdloan method)": [[58, "bittensor.core.extrinsics.pallets.crowdloan.Crowdloan.dissolve", false]], "dissolve_crowdloan (bittensor.extras.subtensor_api.crowdloans.crowdloans attribute)": [[96, "bittensor.extras.subtensor_api.crowdloans.Crowdloans.dissolve_crowdloan", false]], "dissolve_crowdloan (bittensor.extras.subtensor_api.extrinsics.extrinsics attribute)": [[98, "bittensor.extras.subtensor_api.extrinsics.Extrinsics.dissolve_crowdloan", false]], "dissolve_crowdloan() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.dissolve_crowdloan", false]], "dissolve_crowdloan() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.dissolve_crowdloan", false]], "dissolve_crowdloan_extrinsic() (in module bittensor.core.extrinsics.asyncex.crowdloan)": [[31, "bittensor.core.extrinsics.asyncex.crowdloan.dissolve_crowdloan_extrinsic", false]], "dissolve_crowdloan_extrinsic() (in module bittensor.core.extrinsics.crowdloan)": [[49, "bittensor.core.extrinsics.crowdloan.dissolve_crowdloan_extrinsic", false]], "dissolve_network (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.DISSOLVE_NETWORK", false]], "dividends (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.dividends", false]], "dividends (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.Dividends", false]], "dividends (bittensor.core.chain_data.neuron_info.neuroninfo attribute)": [[12, "bittensor.core.chain_data.neuron_info.NeuronInfo.dividends", false]], "dividends (bittensor.core.chain_data.neuron_info_lite.neuroninfolite attribute)": [[13, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite.dividends", false]], "dividends (bittensor.core.chain_data.subnet_state.subnetstate attribute)": [[24, "bittensor.core.chain_data.subnet_state.SubnetState.dividends", false]], "dividends (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.dividends", false]], "dividends (bittensor.core.metagraph.nontorchmetagraph attribute)": [[78, "bittensor.core.metagraph.NonTorchMetagraph.dividends", false]], "dividends (bittensor.core.metagraph.torchmetagraph attribute)": [[78, "bittensor.core.metagraph.TorchMetagraph.dividends", false]], "does_hotkey_exist (bittensor.extras.subtensor_api.wallets.wallets attribute)": [[108, "bittensor.extras.subtensor_api.wallets.Wallets.does_hotkey_exist", false]], "does_hotkey_exist() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.does_hotkey_exist", false]], "does_hotkey_exist() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.does_hotkey_exist", false]], "drain (bittensor.core.chain_data.stake_info.stakeinfo attribute)": [[20, "bittensor.core.chain_data.stake_info.StakeInfo.drain", false]], "drand (in module bittensor.extras.dev_framework.calls.pallets)": [[88, "bittensor.extras.dev_framework.calls.pallets.Drand", false]], "dtype (bittensor.core.tensor.tensor attribute)": [[83, "bittensor.core.tensor.Tensor.dtype", false]], "dtypes (class in bittensor.core.tensor)": [[83, "bittensor.core.tensor.DTypes", false]], "dtypes (in module bittensor.core.tensor)": [[83, "bittensor.core.tensor.dtypes", false]], "duplicatechild": [[29, "bittensor.core.errors.DuplicateChild", false]], "duration (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_coldkey_swap_schedule_duration attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_COLDKEY_SWAP_SCHEDULE_DURATION.duration", false]], "duration (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_dissolve_network_schedule_duration attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_DISSOLVE_NETWORK_SCHEDULE_DURATION.duration", false]], "dynamic_function (bittensor.core.extrinsics.pallets.base.callbuilder attribute)": [[56, "bittensor.core.extrinsics.pallets.base.CallBuilder.dynamic_function", false]], "dynamicinfo (bittensor.core.chain_data.utils.chaindatatype attribute)": [[25, "bittensor.core.chain_data.utils.ChainDataType.DynamicInfo", false]], "dynamicinfo (class in bittensor.core.chain_data.dynamic_info)": [[7, "bittensor.core.chain_data.dynamic_info.DynamicInfo", false]], "e (bittensor.core.metagraph.metagraphmixin property)": [[78, "bittensor.core.metagraph.MetagraphMixin.E", false]], "elasticity (bittensor.extras.dev_framework.calls.non_sudo_calls.set_elasticity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_ELASTICITY.elasticity", false]], "ema_halving (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_ema_price_halving_period attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_EMA_PRICE_HALVING_PERIOD.ema_halving", false]], "emission (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[7, "bittensor.core.chain_data.dynamic_info.DynamicInfo.emission", false]], "emission (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.emission", false]], "emission (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.Emission", false]], "emission (bittensor.core.chain_data.neuron_info.neuroninfo attribute)": [[12, "bittensor.core.chain_data.neuron_info.NeuronInfo.emission", false]], "emission (bittensor.core.chain_data.neuron_info_lite.neuroninfolite attribute)": [[13, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite.emission", false]], "emission (bittensor.core.chain_data.stake_info.stakeinfo attribute)": [[20, "bittensor.core.chain_data.stake_info.StakeInfo.emission", false]], "emission (bittensor.core.chain_data.subnet_state.subnetstate attribute)": [[24, "bittensor.core.chain_data.subnet_state.SubnetState.emission", false]], "emission (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.emission", false]], "emission (bittensor.core.metagraph.nontorchmetagraph attribute)": [[78, "bittensor.core.metagraph.NonTorchMetagraph.emission", false]], "emission (bittensor.core.metagraph.torchmetagraph attribute)": [[78, "bittensor.core.metagraph.TorchMetagraph.emission", false]], "emission_history (bittensor.core.chain_data.subnet_state.subnetstate attribute)": [[24, "bittensor.core.chain_data.subnet_state.SubnetState.emission_history", false]], "emission_value (bittensor.core.chain_data.subnet_info.subnetinfo attribute)": [[23, "bittensor.core.chain_data.subnet_info.SubnetInfo.emission_value", false]], "emissions (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.emissions", false]], "emissions_share (bittensor.extras.dev_framework.calls.non_sudo_calls.register_leased_network attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REGISTER_LEASED_NETWORK.emissions_share", false]], "emoji_map (in module bittensor.utils.btlogging.format)": [[115, "bittensor.utils.btlogging.format.emoji_map", false]], "enable (bittensor.extras.dev_framework.calls.non_sudo_calls.toggle_user_liquidity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.TOGGLE_USER_LIQUIDITY.enable", false]], "enable_console (bittensor.utils.btlogging.loggingmachine.loggingmachine attribute)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.enable_console", false]], "enable_debug (bittensor.utils.btlogging.loggingmachine.loggingmachine attribute)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.enable_debug", false]], "enable_default (bittensor.utils.btlogging.loggingmachine.loggingmachine attribute)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.enable_default", false]], "enable_info (bittensor.utils.btlogging.loggingmachine.loggingmachine attribute)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.enable_info", false]], "enable_third_party_loggers (bittensor.utils.btlogging.loggingmachine.loggingconfig attribute)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingConfig.enable_third_party_loggers", false]], "enable_third_party_loggers() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.enable_third_party_loggers", false]], "enable_trace (bittensor.utils.btlogging.loggingmachine.loggingmachine attribute)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.enable_trace", false]], "enable_warning (bittensor.utils.btlogging.loggingmachine.loggingmachine attribute)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.enable_warning", false]], "enabled (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_bonds_reset_enabled attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_BONDS_RESET_ENABLED.enabled", false]], "enabled (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_commit_reveal_weights_enabled attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_COMMIT_REVEAL_WEIGHTS_ENABLED.enabled", false]], "enabled (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_liquid_alpha_enabled attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_LIQUID_ALPHA_ENABLED.enabled", false]], "enabled (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_yuma3_enabled attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_YUMA3_ENABLED.enabled", false]], "enabled (bittensor.extras.dev_framework.calls.sudo_calls.sudo_toggle_evm_precompile attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_TOGGLE_EVM_PRECOMPILE.enabled", false]], "encode() (bittensor.core.chain_data.ip_info.ipinfo method)": [[10, "bittensor.core.chain_data.ip_info.IPInfo.encode", false]], "encrypt() (in module bittensor.extras.timelock)": [[109, "bittensor.extras.timelock.encrypt", false]], "end (bittensor.core.chain_data.crowdloan_info.crowdloaninfo attribute)": [[4, "bittensor.core.chain_data.crowdloan_info.CrowdloanInfo.end", false]], "end (bittensor.core.chain_data.proposal_vote_data.proposalvotedata attribute)": [[15, "bittensor.core.chain_data.proposal_vote_data.ProposalVoteData.end", false]], "end (bittensor.extras.dev_framework.calls.non_sudo_calls.create attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CREATE.end", false]], "end_block (bittensor.extras.dev_framework.calls.non_sudo_calls.register_leased_network attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REGISTER_LEASED_NETWORK.end_block", false]], "ensure_updated (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ENSURE_UPDATED", false]], "enter (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ENTER", false]], "epochs (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_owner_hparam_rate_limit attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_OWNER_HPARAM_RATE_LIMIT.epochs", false]], "equivocation_proof (bittensor.extras.dev_framework.calls.non_sudo_calls.report_equivocation attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REPORT_EQUIVOCATION.equivocation_proof", false]], "equivocation_proof (bittensor.extras.dev_framework.calls.non_sudo_calls.report_equivocation_unsigned attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REPORT_EQUIVOCATION_UNSIGNED.equivocation_proof", false]], "error (bittensor.core.types.extrinsicresponse attribute)": [[85, "bittensor.core.types.ExtrinsicResponse.error", false]], "error() (bittensor.utils.btlogging.console.bittensorconsole method)": [[113, "bittensor.utils.btlogging.console.BittensorConsole.error", false]], "error() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.error", false]], "ethereum (in module bittensor.extras.dev_framework.calls.pallets)": [[88, "bittensor.extras.dev_framework.calls.pallets.Ethereum", false]], "event_loop_is_running() (in module bittensor.core.dendrite)": [[28, "bittensor.core.dendrite.event_loop_is_running", false]], "evm (in module bittensor.extras.dev_framework.calls.pallets)": [[88, "bittensor.extras.dev_framework.calls.pallets.EVM", false]], "evm_key (bittensor.extras.dev_framework.calls.non_sudo_calls.associate_evm_key attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ASSOCIATE_EVM_KEY.evm_key", false]], "exception() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.exception", false]], "execute_one() (bittensor.extras.dev_framework.subnet.testsubnet method)": [[91, "bittensor.extras.dev_framework.subnet.TestSubnet.execute_one", false]], "execute_steps() (bittensor.extras.dev_framework.subnet.testsubnet method)": [[91, "bittensor.extras.dev_framework.subnet.TestSubnet.execute_steps", false]], "explorer (bittensor.core.types.blockinfo attribute)": [[85, "bittensor.core.types.BlockInfo.explorer", false]], "ext_index (bittensor.extras.dev_framework.calls.non_sudo_calls.kill_pure attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.KILL_PURE.ext_index", false]], "extend (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.EXTEND", false]], "external_ip (bittensor.core.axon.axon attribute)": [[1, "bittensor.core.axon.Axon.external_ip", false]], "external_ip (bittensor.core.dendrite.dendritemixin attribute)": [[28, "bittensor.core.dendrite.DendriteMixin.external_ip", false]], "external_port (bittensor.core.axon.axon attribute)": [[1, "bittensor.core.axon.Axon.external_port", false]], "externalipnotfound": [[124, "bittensor.utils.networking.ExternalIPNotFound", false]], "extract_response_json() (bittensor.core.stream.streamingsynapse method)": [[80, "bittensor.core.stream.StreamingSynapse.extract_response_json", false]], "extrinsic (bittensor.core.types.extrinsicresponse attribute)": [[85, "bittensor.core.types.ExtrinsicResponse.extrinsic", false]], "extrinsic_fee (bittensor.core.types.extrinsicresponse attribute)": [[85, "bittensor.core.types.ExtrinsicResponse.extrinsic_fee", false]], "extrinsic_function (bittensor.core.types.extrinsicresponse attribute)": [[85, "bittensor.core.types.ExtrinsicResponse.extrinsic_function", false]], "extrinsic_receipt (bittensor.core.types.extrinsicresponse attribute)": [[85, "bittensor.core.types.ExtrinsicResponse.extrinsic_receipt", false]], "extrinsicnotfound (in module bittensor.core.errors)": [[29, "bittensor.core.errors.ExtrinsicNotFound", false]], "extrinsicresponse (class in bittensor.core.types)": [[85, "bittensor.core.types.ExtrinsicResponse", false]], "extrinsics (bittensor.core.types.blockinfo attribute)": [[85, "bittensor.core.types.BlockInfo.extrinsics", false]], "extrinsics (bittensor.extras.subtensor_api.subtensorapi property)": [[99, "bittensor.extras.subtensor_api.SubtensorApi.extrinsics", false]], "extrinsics (class in bittensor.extras.subtensor_api.extrinsics)": [[98, "bittensor.extras.subtensor_api.extrinsics.Extrinsics", false]], "failed_verification (bittensor.core.synapse.synapse property)": [[82, "bittensor.core.synapse.Synapse.failed_verification", false]], "fallback (bittensor.extras.dev_framework.calls.non_sudo_calls.if_else attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.IF_ELSE.fallback", false]], "fast_config (bittensor.core.axon.axon attribute)": [[1, "bittensor.core.axon.Axon.fast_config", false]], "fast_server (bittensor.core.axon.axon attribute)": [[1, "bittensor.core.axon.Axon.fast_server", false]], "fastapithreadedserver (class in bittensor.core.axon)": [[1, "bittensor.core.axon.FastAPIThreadedServer", false]], "faucet (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FAUCET", false]], "fee (bittensor.extras.dev_framework.calls.non_sudo_calls.set_base_fee_per_gas attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_BASE_FEE_PER_GAS.fee", false]], "fees_alpha (bittensor.utils.liquidity.liquidityposition attribute)": [[123, "bittensor.utils.liquidity.LiquidityPosition.fees_alpha", false]], "fees_tao (bittensor.utils.liquidity.liquidityposition attribute)": [[123, "bittensor.utils.liquidity.LiquidityPosition.fees_tao", false]], "filter_netuids_by_registered_hotkeys (bittensor.extras.subtensor_api.wallets.wallets attribute)": [[108, "bittensor.extras.subtensor_api.wallets.Wallets.filter_netuids_by_registered_hotkeys", false]], "filter_netuids_by_registered_hotkeys() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.filter_netuids_by_registered_hotkeys", false]], "filter_netuids_by_registered_hotkeys() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.filter_netuids_by_registered_hotkeys", false]], "finalize (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FINALIZE", false]], "finalize() (bittensor.core.extrinsics.pallets.crowdloan.crowdloan method)": [[58, "bittensor.core.extrinsics.pallets.crowdloan.Crowdloan.finalize", false]], "finalize_crowdloan (bittensor.extras.subtensor_api.crowdloans.crowdloans attribute)": [[96, "bittensor.extras.subtensor_api.crowdloans.Crowdloans.finalize_crowdloan", false]], "finalize_crowdloan (bittensor.extras.subtensor_api.extrinsics.extrinsics attribute)": [[98, "bittensor.extras.subtensor_api.extrinsics.Extrinsics.finalize_crowdloan", false]], "finalize_crowdloan() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.finalize_crowdloan", false]], "finalize_crowdloan() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.finalize_crowdloan", false]], "finalize_crowdloan_extrinsic() (in module bittensor.core.extrinsics.asyncex.crowdloan)": [[31, "bittensor.core.extrinsics.asyncex.crowdloan.finalize_crowdloan_extrinsic", false]], "finalize_crowdloan_extrinsic() (in module bittensor.core.extrinsics.crowdloan)": [[49, "bittensor.core.extrinsics.crowdloan.finalize_crowdloan_extrinsic", false]], "finalized (bittensor.core.chain_data.crowdloan_info.crowdloaninfo attribute)": [[4, "bittensor.core.chain_data.crowdloan_info.CrowdloanInfo.finalized", false]], "finney_entrypoint (in module bittensor.core.settings)": [[79, "bittensor.core.settings.FINNEY_ENTRYPOINT", false]], "finney_test_entrypoint (in module bittensor.core.settings)": [[79, "bittensor.core.settings.FINNEY_TEST_ENTRYPOINT", false]], "fixed_to_float() (in module bittensor.utils.balance)": [[112, "bittensor.utils.balance.fixed_to_float", false]], "fixedpoint (class in bittensor.utils.balance)": [[112, "bittensor.utils.balance.FixedPoint", false]], "float_to_u64() (in module bittensor.utils)": [[122, "bittensor.utils.float_to_u64", false]], "force_adjust_total_issuance (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_ADJUST_TOTAL_ISSUANCE", false]], "force_batch (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_BATCH", false]], "force_enter (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_ENTER", false]], "force_exit (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_EXIT", false]], "force_extend (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_EXTEND", false]], "force_proxy_type (bittensor.extras.dev_framework.calls.non_sudo_calls.proxy attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.PROXY.force_proxy_type", false]], "force_proxy_type (bittensor.extras.dev_framework.calls.non_sudo_calls.proxy_announced attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.PROXY_ANNOUNCED.force_proxy_type", false]], "force_release_deposit (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_RELEASE_DEPOSIT", false]], "force_set_balance (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_SET_BALANCE", false]], "force_slash_deposit (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_SLASH_DEPOSIT", false]], "force_transfer (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_TRANSFER", false]], "force_unreserve (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_UNRESERVE", false]], "forced (bittensor.extras.dev_framework.calls.non_sudo_calls.schedule_grandpa_change attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE_GRANDPA_CHANGE.forced", false]], "format() (bittensor.utils.btlogging.format.btfileformatter method)": [[115, "bittensor.utils.btlogging.format.BtFileFormatter.format", false]], "format() (bittensor.utils.btlogging.format.btstreamformatter method)": [[115, "bittensor.utils.btlogging.format.BtStreamFormatter.format", false]], "format_error_message() (in module bittensor.utils)": [[122, "bittensor.utils.format_error_message", false]], "formattime() (bittensor.utils.btlogging.format.btfileformatter method)": [[115, "bittensor.utils.btlogging.format.BtFileFormatter.formatTime", false]], "formattime() (bittensor.utils.btlogging.format.btstreamformatter method)": [[115, "bittensor.utils.btlogging.format.BtStreamFormatter.formatTime", false]], "forward() (bittensor.core.dendrite.dendrite method)": [[28, "bittensor.core.dendrite.Dendrite.forward", false]], "forward() (bittensor.core.dendrite.dendritemixin method)": [[28, "bittensor.core.dendrite.DendriteMixin.forward", false], [28, "id7", false]], "forward_class_types (bittensor.core.axon.axon attribute)": [[1, "bittensor.core.axon.Axon.forward_class_types", false]], "forward_fns (bittensor.core.axon.axon attribute)": [[1, "bittensor.core.axon.Axon.forward_fns", false]], "from_dict() (bittensor.core.chain_data.crowdloan_info.crowdloanconstants class method)": [[4, "bittensor.core.chain_data.crowdloan_info.CrowdloanConstants.from_dict", false]], "from_dict() (bittensor.core.chain_data.crowdloan_info.crowdloaninfo class method)": [[4, "bittensor.core.chain_data.crowdloan_info.CrowdloanInfo.from_dict", false]], "from_dict() (bittensor.core.chain_data.info_base.infobase class method)": [[9, "bittensor.core.chain_data.info_base.InfoBase.from_dict", false]], "from_dict() (bittensor.core.chain_data.proposal_vote_data.proposalvotedata class method)": [[15, "bittensor.core.chain_data.proposal_vote_data.ProposalVoteData.from_dict", false]], "from_dict() (bittensor.core.chain_data.proxy.proxyannouncementinfo class method)": [[16, "bittensor.core.chain_data.proxy.ProxyAnnouncementInfo.from_dict", false]], "from_dict() (bittensor.core.chain_data.proxy.proxyconstants class method)": [[16, "bittensor.core.chain_data.proxy.ProxyConstants.from_dict", false]], "from_dict() (bittensor.core.chain_data.sim_swap.simswapresult class method)": [[19, "bittensor.core.chain_data.sim_swap.SimSwapResult.from_dict", false]], "from_dict() (bittensor.core.chain_data.stake_info.stakeinfo class method)": [[20, "bittensor.core.chain_data.stake_info.StakeInfo.from_dict", false]], "from_error() (bittensor.core.errors.chainerror class method)": [[29, "bittensor.core.errors.ChainError.from_error", false]], "from_exception() (bittensor.core.types.extrinsicresponse class method)": [[85, "bittensor.core.types.ExtrinsicResponse.from_exception", false]], "from_float() (bittensor.utils.balance.balance static method)": [[112, "bittensor.utils.balance.Balance.from_float", false]], "from_headers() (bittensor.core.synapse.synapse class method)": [[82, "id2", false]], "from_headers() (bittensor.core.synapse.synapse method)": [[82, "bittensor.core.synapse.Synapse.from_headers", false]], "from_neuron_info() (bittensor.core.chain_data.axon_info.axoninfo class method)": [[2, "bittensor.core.chain_data.axon_info.AxonInfo.from_neuron_info", false]], "from_parameter_dict() (bittensor.core.chain_data.axon_info.axoninfo class method)": [[2, "bittensor.core.chain_data.axon_info.AxonInfo.from_parameter_dict", false]], "from_parameter_dict() (bittensor.core.chain_data.ip_info.ipinfo class method)": [[10, "bittensor.core.chain_data.ip_info.IPInfo.from_parameter_dict", false]], "from_query() (bittensor.core.chain_data.proxy.proxyinfo class method)": [[16, "bittensor.core.chain_data.proxy.ProxyInfo.from_query", false]], "from_query_map_record() (bittensor.core.chain_data.proxy.proxyannouncementinfo class method)": [[16, "bittensor.core.chain_data.proxy.ProxyAnnouncementInfo.from_query_map_record", false]], "from_query_map_record() (bittensor.core.chain_data.proxy.proxyinfo class method)": [[16, "bittensor.core.chain_data.proxy.ProxyInfo.from_query_map_record", false]], "from_rao() (bittensor.utils.balance.balance static method)": [[112, "bittensor.utils.balance.Balance.from_rao", false]], "from_scale_encoding() (in module bittensor.core.chain_data.utils)": [[25, "bittensor.core.chain_data.utils.from_scale_encoding", false]], "from_scale_encoding_using_type_string() (in module bittensor.core.chain_data.utils)": [[25, "bittensor.core.chain_data.utils.from_scale_encoding_using_type_string", false]], "from_string() (bittensor.core.chain_data.axon_info.axoninfo class method)": [[2, "bittensor.core.chain_data.axon_info.AxonInfo.from_string", false]], "from_tao() (bittensor.utils.balance.balance static method)": [[112, "bittensor.utils.balance.Balance.from_tao", false]], "from_tuple() (bittensor.core.chain_data.proxy.proxyinfo class method)": [[16, "bittensor.core.chain_data.proxy.ProxyInfo.from_tuple", false]], "from_vec_u8() (bittensor.core.chain_data.weight_commit_info.weightcommitinfo class method)": [[26, "bittensor.core.chain_data.weight_commit_info.WeightCommitInfo.from_vec_u8", false]], "from_vec_u8_v2() (bittensor.core.chain_data.weight_commit_info.weightcommitinfo class method)": [[26, "bittensor.core.chain_data.weight_commit_info.WeightCommitInfo.from_vec_u8_v2", false]], "from_weights_bonds_and_neuron_lite() (bittensor.core.chain_data.neuron_info.neuroninfo class method)": [[12, "bittensor.core.chain_data.neuron_info.NeuronInfo.from_weights_bonds_and_neuron_lite", false]], "full_address (bittensor.core.axon.axon attribute)": [[1, "bittensor.core.axon.Axon.full_address", false]], "funds_account (bittensor.core.chain_data.crowdloan_info.crowdloaninfo attribute)": [[4, "bittensor.core.chain_data.crowdloan_info.CrowdloanInfo.funds_account", false]], "gas_limit (bittensor.extras.dev_framework.calls.non_sudo_calls.call attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CALL.gas_limit", false]], "gas_limit (bittensor.extras.dev_framework.calls.non_sudo_calls.create attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CREATE.gas_limit", false]], "gas_limit (bittensor.extras.dev_framework.calls.non_sudo_calls.create2 attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CREATE2.gas_limit", false]], "generate_weight_hash() (in module bittensor.utils.weight_utils)": [[131, "bittensor.utils.weight_utils.generate_weight_hash", false]], "get_admin_freeze_window (bittensor.extras.subtensor_api.chain.chain attribute)": [[94, "bittensor.extras.subtensor_api.chain.Chain.get_admin_freeze_window", false]], "get_admin_freeze_window() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_admin_freeze_window", false]], "get_admin_freeze_window() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_admin_freeze_window", false]], "get_all_commitments (bittensor.extras.subtensor_api.commitments.commitments attribute)": [[95, "bittensor.extras.subtensor_api.commitments.Commitments.get_all_commitments", false]], "get_all_commitments() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_all_commitments", false]], "get_all_commitments() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_all_commitments", false]], "get_all_ema_tao_inflow (bittensor.extras.subtensor_api.subnets.subnets attribute)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets.get_all_ema_tao_inflow", false]], "get_all_ema_tao_inflow() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_all_ema_tao_inflow", false]], "get_all_ema_tao_inflow() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_all_ema_tao_inflow", false]], "get_all_metagraphs_info (bittensor.extras.subtensor_api.metagraphs.metagraphs attribute)": [[100, "bittensor.extras.subtensor_api.metagraphs.Metagraphs.get_all_metagraphs_info", false]], "get_all_metagraphs_info() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_all_metagraphs_info", false]], "get_all_metagraphs_info() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_all_metagraphs_info", false]], "get_all_neuron_certificates (bittensor.extras.subtensor_api.neurons.neurons attribute)": [[102, "bittensor.extras.subtensor_api.neurons.Neurons.get_all_neuron_certificates", false]], "get_all_neuron_certificates() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_all_neuron_certificates", false]], "get_all_neuron_certificates() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_all_neuron_certificates", false]], "get_all_revealed_commitments (bittensor.extras.subtensor_api.commitments.commitments attribute)": [[95, "bittensor.extras.subtensor_api.commitments.Commitments.get_all_revealed_commitments", false]], "get_all_revealed_commitments() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_all_revealed_commitments", false]], "get_all_revealed_commitments() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_all_revealed_commitments", false]], "get_all_subnets_info (bittensor.extras.subtensor_api.subnets.subnets attribute)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets.get_all_subnets_info", false]], "get_all_subnets_info() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_all_subnets_info", false]], "get_all_subnets_info() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_all_subnets_info", false]], "get_all_subnets_netuid (bittensor.extras.subtensor_api.subnets.subnets attribute)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets.get_all_subnets_netuid", false]], "get_all_subnets_netuid() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_all_subnets_netuid", false]], "get_all_subnets_netuid() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_all_subnets_netuid", false]], "get_and_save_latest_version() (in module bittensor.utils.version)": [[130, "bittensor.utils.version.get_and_save_latest_version", false]], "get_async_subtensor() (in module bittensor.core.async_subtensor)": [[0, "bittensor.core.async_subtensor.get_async_subtensor", false]], "get_auto_stakes (bittensor.extras.subtensor_api.staking.staking attribute)": [[105, "bittensor.extras.subtensor_api.staking.Staking.get_auto_stakes", false]], "get_auto_stakes() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_auto_stakes", false]], "get_auto_stakes() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_auto_stakes", false]], "get_balance (bittensor.extras.subtensor_api.wallets.wallets attribute)": [[108, "bittensor.extras.subtensor_api.wallets.Wallets.get_balance", false]], "get_balance() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_balance", false]], "get_balance() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_balance", false]], "get_balances (bittensor.extras.subtensor_api.wallets.wallets attribute)": [[108, "bittensor.extras.subtensor_api.wallets.Wallets.get_balances", false]], "get_balances() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_balances", false]], "get_balances() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_balances", false]], "get_block_hash (bittensor.extras.subtensor_api.chain.chain attribute)": [[94, "bittensor.extras.subtensor_api.chain.Chain.get_block_hash", false]], "get_block_hash() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_block_hash", false]], "get_block_hash() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_block_hash", false]], "get_block_info (bittensor.extras.subtensor_api.chain.chain attribute)": [[94, "bittensor.extras.subtensor_api.chain.Chain.get_block_info", false]], "get_block_info() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_block_info", false]], "get_block_info() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_block_info", false]], "get_caller_name() (in module bittensor.utils)": [[122, "bittensor.utils.get_caller_name", false]], "get_children (bittensor.extras.subtensor_api.subnets.subnets attribute)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets.get_children", false]], "get_children (bittensor.extras.subtensor_api.wallets.wallets attribute)": [[108, "bittensor.extras.subtensor_api.wallets.Wallets.get_children", false]], "get_children() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_children", false]], "get_children() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_children", false]], "get_children_pending (bittensor.extras.subtensor_api.subnets.subnets attribute)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets.get_children_pending", false]], "get_children_pending (bittensor.extras.subtensor_api.wallets.wallets attribute)": [[108, "bittensor.extras.subtensor_api.wallets.Wallets.get_children_pending", false]], "get_children_pending() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_children_pending", false]], "get_children_pending() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_children_pending", false]], "get_commitment (bittensor.extras.subtensor_api.commitments.commitments attribute)": [[95, "bittensor.extras.subtensor_api.commitments.Commitments.get_commitment", false]], "get_commitment() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_commitment", false]], "get_commitment() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_commitment", false]], "get_commitment_metadata (bittensor.extras.subtensor_api.commitments.commitments attribute)": [[95, "bittensor.extras.subtensor_api.commitments.Commitments.get_commitment_metadata", false]], "get_commitment_metadata() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_commitment_metadata", false]], "get_commitment_metadata() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_commitment_metadata", false]], "get_config() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.get_config", false]], "get_cpu_count() (in module bittensor.utils.registration.pow)": [[127, "bittensor.utils.registration.pow.get_cpu_count", false]], "get_crowdloan_by_id (bittensor.extras.subtensor_api.crowdloans.crowdloans attribute)": [[96, "bittensor.extras.subtensor_api.crowdloans.Crowdloans.get_crowdloan_by_id", false]], "get_crowdloan_by_id() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_crowdloan_by_id", false]], "get_crowdloan_by_id() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_crowdloan_by_id", false]], "get_crowdloan_constants (bittensor.extras.subtensor_api.crowdloans.crowdloans attribute)": [[96, "bittensor.extras.subtensor_api.crowdloans.Crowdloans.get_crowdloan_constants", false]], "get_crowdloan_constants() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_crowdloan_constants", false]], "get_crowdloan_constants() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_crowdloan_constants", false]], "get_crowdloan_contributions (bittensor.extras.subtensor_api.crowdloans.crowdloans attribute)": [[96, "bittensor.extras.subtensor_api.crowdloans.Crowdloans.get_crowdloan_contributions", false]], "get_crowdloan_contributions() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_crowdloan_contributions", false]], "get_crowdloan_contributions() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_crowdloan_contributions", false]], "get_crowdloan_next_id (bittensor.extras.subtensor_api.crowdloans.crowdloans attribute)": [[96, "bittensor.extras.subtensor_api.crowdloans.Crowdloans.get_crowdloan_next_id", false]], "get_crowdloan_next_id() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_crowdloan_next_id", false]], "get_crowdloan_next_id() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_crowdloan_next_id", false]], "get_crowdloans (bittensor.extras.subtensor_api.crowdloans.crowdloans attribute)": [[96, "bittensor.extras.subtensor_api.crowdloans.Crowdloans.get_crowdloans", false]], "get_crowdloans() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_crowdloans", false]], "get_crowdloans() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_crowdloans", false]], "get_current_block (bittensor.extras.subtensor_api.chain.chain attribute)": [[94, "bittensor.extras.subtensor_api.chain.Chain.get_current_block", false]], "get_current_block() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_current_block", false]], "get_current_block() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_current_block", false]], "get_delegate_by_hotkey (bittensor.extras.subtensor_api.delegates.delegates attribute)": [[97, "bittensor.extras.subtensor_api.delegates.Delegates.get_delegate_by_hotkey", false]], "get_delegate_by_hotkey (bittensor.extras.subtensor_api.wallets.wallets attribute)": [[108, "bittensor.extras.subtensor_api.wallets.Wallets.get_delegate_by_hotkey", false]], "get_delegate_by_hotkey() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_delegate_by_hotkey", false]], "get_delegate_by_hotkey() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_delegate_by_hotkey", false]], "get_delegate_identities (bittensor.extras.subtensor_api.chain.chain attribute)": [[94, "bittensor.extras.subtensor_api.chain.Chain.get_delegate_identities", false]], "get_delegate_identities (bittensor.extras.subtensor_api.delegates.delegates attribute)": [[97, "bittensor.extras.subtensor_api.delegates.Delegates.get_delegate_identities", false]], "get_delegate_identities() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_delegate_identities", false]], "get_delegate_identities() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_delegate_identities", false]], "get_delegate_take (bittensor.extras.subtensor_api.delegates.delegates attribute)": [[97, "bittensor.extras.subtensor_api.delegates.Delegates.get_delegate_take", false]], "get_delegate_take (bittensor.extras.subtensor_api.wallets.wallets attribute)": [[108, "bittensor.extras.subtensor_api.wallets.Wallets.get_delegate_take", false]], "get_delegate_take() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_delegate_take", false]], "get_delegate_take() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_delegate_take", false]], "get_delegated (bittensor.extras.subtensor_api.delegates.delegates attribute)": [[97, "bittensor.extras.subtensor_api.delegates.Delegates.get_delegated", false]], "get_delegated (bittensor.extras.subtensor_api.wallets.wallets attribute)": [[108, "bittensor.extras.subtensor_api.wallets.Wallets.get_delegated", false]], "get_delegated() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_delegated", false]], "get_delegated() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_delegated", false]], "get_delegates (bittensor.extras.subtensor_api.delegates.delegates attribute)": [[97, "bittensor.extras.subtensor_api.delegates.Delegates.get_delegates", false]], "get_delegates() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_delegates", false]], "get_delegates() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_delegates", false]], "get_ema_tao_inflow (bittensor.extras.subtensor_api.subnets.subnets attribute)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets.get_ema_tao_inflow", false]], "get_ema_tao_inflow() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_ema_tao_inflow", false]], "get_ema_tao_inflow() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_ema_tao_inflow", false]], "get_event_data_by_event_name() (in module bittensor.core.extrinsics.utils)": [[75, "bittensor.core.extrinsics.utils.get_event_data_by_event_name", false]], "get_existential_deposit (bittensor.extras.subtensor_api.chain.chain attribute)": [[94, "bittensor.extras.subtensor_api.chain.Chain.get_existential_deposit", false]], "get_existential_deposit() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_existential_deposit", false]], "get_existential_deposit() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_existential_deposit", false]], "get_explorer_url_for_network() (in module bittensor.utils)": [[122, "bittensor.utils.get_explorer_url_for_network", false]], "get_external_ip() (in module bittensor.utils.networking)": [[124, "bittensor.utils.networking.get_external_ip", false]], "get_extrinsic_fee (bittensor.extras.subtensor_api.extrinsics.extrinsics attribute)": [[98, "bittensor.extras.subtensor_api.extrinsics.Extrinsics.get_extrinsic_fee", false]], "get_extrinsic_fee() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_extrinsic_fee", false]], "get_extrinsic_fee() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_extrinsic_fee", false]], "get_fees() (in module bittensor.utils.liquidity)": [[123, "bittensor.utils.liquidity.get_fees", false]], "get_fees_in_range() (in module bittensor.utils.liquidity)": [[123, "bittensor.utils.liquidity.get_fees_in_range", false]], "get_formatted_ws_endpoint_url() (in module bittensor.utils.networking)": [[124, "bittensor.utils.networking.get_formatted_ws_endpoint_url", false]], "get_function_name() (in module bittensor.utils)": [[122, "bittensor.utils.get_function_name", false]], "get_hash() (in module bittensor.utils)": [[122, "bittensor.utils.get_hash", false]], "get_hotkey_owner (bittensor.extras.subtensor_api.wallets.wallets attribute)": [[108, "bittensor.extras.subtensor_api.wallets.Wallets.get_hotkey_owner", false]], "get_hotkey_owner() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_hotkey_owner", false]], "get_hotkey_owner() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_hotkey_owner", false]], "get_hotkey_stake (bittensor.core.async_subtensor.asyncsubtensor attribute)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_hotkey_stake", false]], "get_hotkey_stake (bittensor.core.subtensor.subtensor attribute)": [[81, "bittensor.core.subtensor.Subtensor.get_hotkey_stake", false]], "get_hotkey_stake (bittensor.extras.subtensor_api.staking.staking attribute)": [[105, "bittensor.extras.subtensor_api.staking.Staking.get_hotkey_stake", false]], "get_hotkey_stake (bittensor.extras.subtensor_api.wallets.wallets attribute)": [[108, "bittensor.extras.subtensor_api.wallets.Wallets.get_hotkey_stake", false]], "get_human_readable() (in module bittensor.utils.formatting)": [[121, "bittensor.utils.formatting.get_human_readable", false]], "get_hyperparameter (bittensor.extras.subtensor_api.subnets.subnets attribute)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets.get_hyperparameter", false]], "get_hyperparameter() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_hyperparameter", false]], "get_hyperparameter() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_hyperparameter", false]], "get_last_bonds_reset (bittensor.extras.subtensor_api.commitments.commitments attribute)": [[95, "bittensor.extras.subtensor_api.commitments.Commitments.get_last_bonds_reset", false]], "get_last_bonds_reset() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_last_bonds_reset", false]], "get_last_bonds_reset() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_last_bonds_reset", false]], "get_last_commitment_bonds_reset_block (bittensor.extras.subtensor_api.commitments.commitments attribute)": [[95, "bittensor.extras.subtensor_api.commitments.Commitments.get_last_commitment_bonds_reset_block", false]], "get_last_commitment_bonds_reset_block() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_last_commitment_bonds_reset_block", false]], "get_last_commitment_bonds_reset_block() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_last_commitment_bonds_reset_block", false]], "get_level() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.get_level", false]], "get_liquidity_list (bittensor.extras.subtensor_api.subnets.subnets attribute)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets.get_liquidity_list", false]], "get_liquidity_list() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_liquidity_list", false]], "get_liquidity_list() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_liquidity_list", false]], "get_max_logger_name_length() (in module bittensor.utils.btlogging.helpers)": [[116, "bittensor.utils.btlogging.helpers.get_max_logger_name_length", false]], "get_mechanism_count (bittensor.extras.subtensor_api.subnets.subnets attribute)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets.get_mechanism_count", false]], "get_mechanism_count() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_mechanism_count", false]], "get_mechanism_count() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_mechanism_count", false]], "get_mechanism_emission_split (bittensor.extras.subtensor_api.subnets.subnets attribute)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets.get_mechanism_emission_split", false]], "get_mechanism_emission_split() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_mechanism_emission_split", false]], "get_mechanism_emission_split() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_mechanism_emission_split", false]], "get_mechid_storage_index() (in module bittensor.utils)": [[122, "bittensor.utils.get_mechid_storage_index", false]], "get_metagraph_info (bittensor.extras.subtensor_api.metagraphs.metagraphs attribute)": [[100, "bittensor.extras.subtensor_api.metagraphs.Metagraphs.get_metagraph_info", false]], "get_metagraph_info() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_metagraph_info", false]], "get_metagraph_info() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_metagraph_info", false]], "get_mev_commitment_and_ciphertext() (in module bittensor.core.extrinsics.utils)": [[75, "bittensor.core.extrinsics.utils.get_mev_commitment_and_ciphertext", false]], "get_mev_shield_current_key (bittensor.extras.subtensor_api.mev_shield.mevshield attribute)": [[101, "bittensor.extras.subtensor_api.mev_shield.MevShield.get_mev_shield_current_key", false]], "get_mev_shield_current_key() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_mev_shield_current_key", false]], "get_mev_shield_current_key() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_mev_shield_current_key", false]], "get_mev_shield_next_key (bittensor.extras.subtensor_api.mev_shield.mevshield attribute)": [[101, "bittensor.extras.subtensor_api.mev_shield.MevShield.get_mev_shield_next_key", false]], "get_mev_shield_next_key() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_mev_shield_next_key", false]], "get_mev_shield_next_key() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_mev_shield_next_key", false]], "get_mev_shield_submission (bittensor.extras.subtensor_api.mev_shield.mevshield attribute)": [[101, "bittensor.extras.subtensor_api.mev_shield.MevShield.get_mev_shield_submission", false]], "get_mev_shield_submission() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_mev_shield_submission", false]], "get_mev_shield_submission() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_mev_shield_submission", false]], "get_mev_shield_submissions (bittensor.extras.subtensor_api.mev_shield.mevshield attribute)": [[101, "bittensor.extras.subtensor_api.mev_shield.MevShield.get_mev_shield_submissions", false]], "get_mev_shield_submissions() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_mev_shield_submissions", false]], "get_mev_shield_submissions() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_mev_shield_submissions", false]], "get_minimum_required_stake (bittensor.extras.subtensor_api.chain.chain attribute)": [[94, "bittensor.extras.subtensor_api.chain.Chain.get_minimum_required_stake", false]], "get_minimum_required_stake (bittensor.extras.subtensor_api.staking.staking attribute)": [[105, "bittensor.extras.subtensor_api.staking.Staking.get_minimum_required_stake", false]], "get_minimum_required_stake (bittensor.extras.subtensor_api.wallets.wallets attribute)": [[108, "bittensor.extras.subtensor_api.wallets.Wallets.get_minimum_required_stake", false]], "get_minimum_required_stake() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_minimum_required_stake", false]], "get_minimum_required_stake() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_minimum_required_stake", false]], "get_netuid_and_mechid_by_storage_index() (in module bittensor.utils)": [[122, "bittensor.utils.get_netuid_and_mechid_by_storage_index", false]], "get_netuids_for_hotkey (bittensor.extras.subtensor_api.wallets.wallets attribute)": [[108, "bittensor.extras.subtensor_api.wallets.Wallets.get_netuids_for_hotkey", false]], "get_netuids_for_hotkey() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_netuids_for_hotkey", false]], "get_netuids_for_hotkey() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_netuids_for_hotkey", false]], "get_neuron_certificate (bittensor.extras.subtensor_api.neurons.neurons attribute)": [[102, "bittensor.extras.subtensor_api.neurons.Neurons.get_neuron_certificate", false]], "get_neuron_certificate() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_neuron_certificate", false]], "get_neuron_certificate() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_neuron_certificate", false]], "get_neuron_for_pubkey_and_subnet (bittensor.extras.subtensor_api.subnets.subnets attribute)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets.get_neuron_for_pubkey_and_subnet", false]], "get_neuron_for_pubkey_and_subnet() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_neuron_for_pubkey_and_subnet", false]], "get_neuron_for_pubkey_and_subnet() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_neuron_for_pubkey_and_subnet", false]], "get_next_epoch_start_block (bittensor.extras.subtensor_api.subnets.subnets attribute)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets.get_next_epoch_start_block", false]], "get_next_epoch_start_block() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_next_epoch_start_block", false]], "get_next_epoch_start_block() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_next_epoch_start_block", false]], "get_null_neuron() (bittensor.core.chain_data.neuron_info.neuroninfo static method)": [[12, "bittensor.core.chain_data.neuron_info.NeuronInfo.get_null_neuron", false]], "get_null_neuron() (bittensor.core.chain_data.neuron_info_lite.neuroninfolite method)": [[13, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite.get_null_neuron", false]], "get_null_neuron() (bittensor.core.chain_data.neuron_info_lite.neuroninfolite static method)": [[13, "id0", false]], "get_old_stakes() (in module bittensor.core.extrinsics.utils)": [[75, "bittensor.core.extrinsics.utils.get_old_stakes", false]], "get_owned_hotkeys (bittensor.extras.subtensor_api.wallets.wallets attribute)": [[108, "bittensor.extras.subtensor_api.wallets.Wallets.get_owned_hotkeys", false]], "get_owned_hotkeys() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_owned_hotkeys", false]], "get_owned_hotkeys() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_owned_hotkeys", false]], "get_parents (bittensor.extras.subtensor_api.subnets.subnets attribute)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets.get_parents", false]], "get_parents (bittensor.extras.subtensor_api.wallets.wallets attribute)": [[108, "bittensor.extras.subtensor_api.wallets.Wallets.get_parents", false]], "get_parents() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_parents", false]], "get_parents() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_parents", false]], "get_proxies (bittensor.extras.subtensor_api.proxy.proxy attribute)": [[103, "bittensor.extras.subtensor_api.proxy.Proxy.get_proxies", false]], "get_proxies() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_proxies", false]], "get_proxies() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_proxies", false]], "get_proxies_for_real_account (bittensor.extras.subtensor_api.proxy.proxy attribute)": [[103, "bittensor.extras.subtensor_api.proxy.Proxy.get_proxies_for_real_account", false]], "get_proxies_for_real_account() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_proxies_for_real_account", false]], "get_proxies_for_real_account() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_proxies_for_real_account", false]], "get_proxy_announcement (bittensor.extras.subtensor_api.proxy.proxy attribute)": [[103, "bittensor.extras.subtensor_api.proxy.Proxy.get_proxy_announcement", false]], "get_proxy_announcement() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_proxy_announcement", false]], "get_proxy_announcement() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_proxy_announcement", false]], "get_proxy_announcements (bittensor.extras.subtensor_api.proxy.proxy attribute)": [[103, "bittensor.extras.subtensor_api.proxy.Proxy.get_proxy_announcements", false]], "get_proxy_announcements() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_proxy_announcements", false]], "get_proxy_announcements() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_proxy_announcements", false]], "get_proxy_constants (bittensor.extras.subtensor_api.proxy.proxy attribute)": [[103, "bittensor.extras.subtensor_api.proxy.Proxy.get_proxy_constants", false]], "get_proxy_constants() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_proxy_constants", false]], "get_proxy_constants() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_proxy_constants", false]], "get_queue() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.get_queue", false]], "get_required_fields() (bittensor.core.synapse.synapse method)": [[82, "bittensor.core.synapse.Synapse.get_required_fields", false]], "get_revealed_commitment (bittensor.extras.subtensor_api.commitments.commitments attribute)": [[95, "bittensor.extras.subtensor_api.commitments.Commitments.get_revealed_commitment", false]], "get_revealed_commitment() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_revealed_commitment", false]], "get_revealed_commitment() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_revealed_commitment", false]], "get_revealed_commitment_by_hotkey (bittensor.extras.subtensor_api.commitments.commitments attribute)": [[95, "bittensor.extras.subtensor_api.commitments.Commitments.get_revealed_commitment_by_hotkey", false]], "get_revealed_commitment_by_hotkey() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_revealed_commitment_by_hotkey", false]], "get_revealed_commitment_by_hotkey() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_revealed_commitment_by_hotkey", false]], "get_root_alpha_dividends_per_subnet (bittensor.extras.subtensor_api.staking.staking attribute)": [[105, "bittensor.extras.subtensor_api.staking.Staking.get_root_alpha_dividends_per_subnet", false]], "get_root_alpha_dividends_per_subnet() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_root_alpha_dividends_per_subnet", false]], "get_root_alpha_dividends_per_subnet() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_root_alpha_dividends_per_subnet", false]], "get_root_claim_type (bittensor.extras.subtensor_api.staking.staking attribute)": [[105, "bittensor.extras.subtensor_api.staking.Staking.get_root_claim_type", false]], "get_root_claim_type() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_root_claim_type", false]], "get_root_claim_type() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_root_claim_type", false]], "get_root_claimable_all_rates (bittensor.extras.subtensor_api.staking.staking attribute)": [[105, "bittensor.extras.subtensor_api.staking.Staking.get_root_claimable_all_rates", false]], "get_root_claimable_all_rates() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_root_claimable_all_rates", false]], "get_root_claimable_all_rates() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_root_claimable_all_rates", false]], "get_root_claimable_rate (bittensor.extras.subtensor_api.staking.staking attribute)": [[105, "bittensor.extras.subtensor_api.staking.Staking.get_root_claimable_rate", false]], "get_root_claimable_rate() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_root_claimable_rate", false]], "get_root_claimable_rate() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_root_claimable_rate", false]], "get_root_claimable_stake (bittensor.extras.subtensor_api.staking.staking attribute)": [[105, "bittensor.extras.subtensor_api.staking.Staking.get_root_claimable_stake", false]], "get_root_claimable_stake() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_root_claimable_stake", false]], "get_root_claimable_stake() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_root_claimable_stake", false]], "get_root_claimed (bittensor.extras.subtensor_api.staking.staking attribute)": [[105, "bittensor.extras.subtensor_api.staking.Staking.get_root_claimed", false]], "get_root_claimed() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_root_claimed", false]], "get_root_claimed() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_root_claimed", false]], "get_save_dir() (in module bittensor.core.metagraph)": [[78, "bittensor.core.metagraph.get_save_dir", false]], "get_selective_metagraph_commitments() (in module bittensor.core.chain_data.metagraph_info)": [[11, "bittensor.core.chain_data.metagraph_info.get_selective_metagraph_commitments", false]], "get_size() (in module bittensor.core.synapse)": [[82, "bittensor.core.synapse.get_size", false]], "get_stake (bittensor.extras.subtensor_api.staking.staking attribute)": [[105, "bittensor.extras.subtensor_api.staking.Staking.get_stake", false]], "get_stake (bittensor.extras.subtensor_api.wallets.wallets attribute)": [[108, "bittensor.extras.subtensor_api.wallets.Wallets.get_stake", false]], "get_stake() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_stake", false]], "get_stake() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_stake", false]], "get_stake_add_fee (bittensor.extras.subtensor_api.staking.staking attribute)": [[105, "bittensor.extras.subtensor_api.staking.Staking.get_stake_add_fee", false]], "get_stake_add_fee (bittensor.extras.subtensor_api.wallets.wallets attribute)": [[108, "bittensor.extras.subtensor_api.wallets.Wallets.get_stake_add_fee", false]], "get_stake_add_fee() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_stake_add_fee", false]], "get_stake_add_fee() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_stake_add_fee", false]], "get_stake_for_coldkey_and_hotkey (bittensor.extras.subtensor_api.staking.staking attribute)": [[105, "bittensor.extras.subtensor_api.staking.Staking.get_stake_for_coldkey_and_hotkey", false]], "get_stake_for_coldkey_and_hotkey (bittensor.extras.subtensor_api.wallets.wallets attribute)": [[108, "bittensor.extras.subtensor_api.wallets.Wallets.get_stake_for_coldkey_and_hotkey", false]], "get_stake_for_coldkey_and_hotkey() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_stake_for_coldkey_and_hotkey", false]], "get_stake_for_coldkey_and_hotkey() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_stake_for_coldkey_and_hotkey", false]], "get_stake_for_hotkey (bittensor.extras.subtensor_api.wallets.wallets attribute)": [[108, "bittensor.extras.subtensor_api.wallets.Wallets.get_stake_for_hotkey", false]], "get_stake_for_hotkey() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_stake_for_hotkey", false]], "get_stake_for_hotkey() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_stake_for_hotkey", false]], "get_stake_info_for_coldkey (bittensor.extras.subtensor_api.staking.staking attribute)": [[105, "bittensor.extras.subtensor_api.staking.Staking.get_stake_info_for_coldkey", false]], "get_stake_info_for_coldkey (bittensor.extras.subtensor_api.wallets.wallets attribute)": [[108, "bittensor.extras.subtensor_api.wallets.Wallets.get_stake_info_for_coldkey", false]], "get_stake_info_for_coldkey() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_stake_info_for_coldkey", false]], "get_stake_info_for_coldkey() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_stake_info_for_coldkey", false]], "get_stake_info_for_coldkeys (bittensor.extras.subtensor_api.staking.staking attribute)": [[105, "bittensor.extras.subtensor_api.staking.Staking.get_stake_info_for_coldkeys", false]], "get_stake_info_for_coldkeys() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_stake_info_for_coldkeys", false]], "get_stake_info_for_coldkeys() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_stake_info_for_coldkeys", false]], "get_stake_movement_fee (bittensor.extras.subtensor_api.staking.staking attribute)": [[105, "bittensor.extras.subtensor_api.staking.Staking.get_stake_movement_fee", false]], "get_stake_movement_fee (bittensor.extras.subtensor_api.wallets.wallets attribute)": [[108, "bittensor.extras.subtensor_api.wallets.Wallets.get_stake_movement_fee", false]], "get_stake_movement_fee() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_stake_movement_fee", false]], "get_stake_movement_fee() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_stake_movement_fee", false]], "get_stake_weight (bittensor.extras.subtensor_api.staking.staking attribute)": [[105, "bittensor.extras.subtensor_api.staking.Staking.get_stake_weight", false]], "get_stake_weight() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_stake_weight", false]], "get_stake_weight() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_stake_weight", false]], "get_status_message() (bittensor.utils.registration.pow.registrationstatisticslogger class method)": [[127, "bittensor.utils.registration.pow.RegistrationStatisticsLogger.get_status_message", false]], "get_subnet_burn_cost (bittensor.extras.subtensor_api.subnets.subnets attribute)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets.get_subnet_burn_cost", false]], "get_subnet_burn_cost() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_subnet_burn_cost", false]], "get_subnet_burn_cost() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_subnet_burn_cost", false]], "get_subnet_hyperparameters (bittensor.extras.subtensor_api.subnets.subnets attribute)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets.get_subnet_hyperparameters", false]], "get_subnet_hyperparameters() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_subnet_hyperparameters", false]], "get_subnet_hyperparameters() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_subnet_hyperparameters", false]], "get_subnet_info (bittensor.extras.subtensor_api.subnets.subnets attribute)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets.get_subnet_info", false]], "get_subnet_info() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_subnet_info", false]], "get_subnet_info() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_subnet_info", false]], "get_subnet_owner_hotkey (bittensor.extras.subtensor_api.subnets.subnets attribute)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets.get_subnet_owner_hotkey", false]], "get_subnet_owner_hotkey() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_subnet_owner_hotkey", false]], "get_subnet_owner_hotkey() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_subnet_owner_hotkey", false]], "get_subnet_price (bittensor.extras.subtensor_api.subnets.subnets attribute)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets.get_subnet_price", false]], "get_subnet_price() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_subnet_price", false]], "get_subnet_price() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_subnet_price", false]], "get_subnet_prices (bittensor.extras.subtensor_api.subnets.subnets attribute)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets.get_subnet_prices", false]], "get_subnet_prices() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_subnet_prices", false]], "get_subnet_prices() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_subnet_prices", false]], "get_subnet_reveal_period_epochs (bittensor.extras.subtensor_api.subnets.subnets attribute)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets.get_subnet_reveal_period_epochs", false]], "get_subnet_reveal_period_epochs() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_subnet_reveal_period_epochs", false]], "get_subnet_reveal_period_epochs() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_subnet_reveal_period_epochs", false]], "get_subnet_validator_permits (bittensor.extras.subtensor_api.subnets.subnets attribute)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets.get_subnet_validator_permits", false]], "get_subnet_validator_permits() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_subnet_validator_permits", false]], "get_subnet_validator_permits() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_subnet_validator_permits", false]], "get_timelocked_weight_commits (bittensor.extras.subtensor_api.commitments.commitments attribute)": [[95, "bittensor.extras.subtensor_api.commitments.Commitments.get_timelocked_weight_commits", false]], "get_timelocked_weight_commits() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_timelocked_weight_commits", false]], "get_timelocked_weight_commits() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_timelocked_weight_commits", false]], "get_timestamp (bittensor.extras.subtensor_api.chain.chain attribute)": [[94, "bittensor.extras.subtensor_api.chain.Chain.get_timestamp", false]], "get_timestamp() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_timestamp", false]], "get_timestamp() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_timestamp", false]], "get_total_size() (bittensor.core.synapse.synapse method)": [[82, "bittensor.core.synapse.Synapse.get_total_size", false], [82, "id3", false]], "get_total_subnets (bittensor.extras.subtensor_api.subnets.subnets attribute)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets.get_total_subnets", false]], "get_total_subnets() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_total_subnets", false]], "get_total_subnets() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_total_subnets", false]], "get_transfer_fee (bittensor.extras.subtensor_api.wallets.wallets attribute)": [[108, "bittensor.extras.subtensor_api.wallets.Wallets.get_transfer_fee", false]], "get_transfer_fee() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_transfer_fee", false]], "get_transfer_fee() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_transfer_fee", false]], "get_transfer_fn_params() (in module bittensor.core.extrinsics.utils)": [[75, "bittensor.core.extrinsics.utils.get_transfer_fn_params", false]], "get_uid_for_hotkey_on_subnet (bittensor.extras.subtensor_api.subnets.subnets attribute)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets.get_uid_for_hotkey_on_subnet", false]], "get_uid_for_hotkey_on_subnet() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_uid_for_hotkey_on_subnet", false]], "get_uid_for_hotkey_on_subnet() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_uid_for_hotkey_on_subnet", false]], "get_unit() (bittensor.utils.balance.balance static method)": [[112, "bittensor.utils.balance.Balance.get_unit", false]], "get_unstake_fee (bittensor.extras.subtensor_api.staking.staking attribute)": [[105, "bittensor.extras.subtensor_api.staking.Staking.get_unstake_fee", false]], "get_unstake_fee (bittensor.extras.subtensor_api.wallets.wallets attribute)": [[108, "bittensor.extras.subtensor_api.wallets.Wallets.get_unstake_fee", false]], "get_unstake_fee() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_unstake_fee", false]], "get_unstake_fee() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_unstake_fee", false]], "get_vote_data (bittensor.extras.subtensor_api.chain.chain attribute)": [[94, "bittensor.extras.subtensor_api.chain.Chain.get_vote_data", false]], "get_vote_data() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.get_vote_data", false]], "get_vote_data() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.get_vote_data", false]], "github (bittensor.core.chain_data.chain_identity.chainidentity attribute)": [[3, "bittensor.core.chain_data.chain_identity.ChainIdentity.github", false]], "github_repo (bittensor.core.chain_data.subnet_identity.subnetidentity attribute)": [[22, "bittensor.core.chain_data.subnet_identity.SubnetIdentity.github_repo", false]], "github_repo (bittensor.extras.dev_framework.calls.non_sudo_calls.set_identity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_IDENTITY.github_repo", false]], "github_repo (bittensor.extras.dev_framework.calls.non_sudo_calls.set_subnet_identity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_SUBNET_IDENTITY.github_repo", false]], "global_max_subnet_count (in module bittensor.utils)": [[122, "bittensor.utils.GLOBAL_MAX_SUBNET_COUNT", false]], "governance (bittensor.core.chain_data.proxy.proxytype attribute)": [[16, "bittensor.core.chain_data.proxy.ProxyType.Governance", false]], "grandpa (in module bittensor.extras.dev_framework.calls.pallets)": [[88, "bittensor.extras.dev_framework.calls.pallets.Grandpa", false]], "hash (bittensor.core.types.blockinfo attribute)": [[85, "bittensor.core.types.BlockInfo.hash", false]], "hash (bittensor.extras.dev_framework.calls.non_sudo_calls.request_preimage attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REQUEST_PREIMAGE.hash", false]], "hash (bittensor.extras.dev_framework.calls.non_sudo_calls.unnote_preimage attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.UNNOTE_PREIMAGE.hash", false]], "hash (bittensor.extras.dev_framework.calls.non_sudo_calls.unrequest_preimage attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.UNREQUEST_PREIMAGE.hash", false]], "hash_rate (bittensor.utils.registration.pow.registrationstatistics attribute)": [[127, "bittensor.utils.registration.pow.RegistrationStatistics.hash_rate", false]], "hash_rate_perpetual (bittensor.utils.registration.pow.registrationstatistics attribute)": [[127, "bittensor.utils.registration.pow.RegistrationStatistics.hash_rate_perpetual", false]], "hashes (bittensor.extras.dev_framework.calls.non_sudo_calls.ensure_updated attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ENSURE_UPDATED.hashes", false]], "header (bittensor.core.types.blockinfo attribute)": [[85, "bittensor.core.types.BlockInfo.header", false]], "header (in module bittensor.extras.dev_framework.calls)": [[86, "bittensor.extras.dev_framework.calls.HEADER", false]], "header_size (bittensor.core.synapse.synapse attribute)": [[82, "bittensor.core.synapse.Synapse.header_size", false]], "height (bittensor.core.chain_data.proxy.proxyannouncementinfo attribute)": [[16, "bittensor.core.chain_data.proxy.ProxyAnnouncementInfo.height", false]], "height (bittensor.extras.dev_framework.calls.non_sudo_calls.kill_pure attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.KILL_PURE.height", false]], "help (bittensor.extras.subtensor_api.subtensorapi attribute)": [[99, "bittensor.extras.subtensor_api.SubtensorApi.help", false]], "help() (bittensor.core.axon.axon class method)": [[1, "bittensor.core.axon.Axon.help", false]], "help() (bittensor.core.types.subtensormixin class method)": [[85, "bittensor.core.types.SubtensorMixin.help", false]], "help() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.help", false]], "hex_to_bytes (in module bittensor.utils)": [[122, "bittensor.utils.hex_to_bytes", false]], "hex_to_ss58 (in module bittensor.utils)": [[122, "bittensor.utils.hex_to_ss58", false]], "home_dir (in module bittensor.core.settings)": [[79, "bittensor.core.settings.HOME_DIR", false]], "hotkey (bittensor.core.chain_data.axon_info.axoninfo attribute)": [[2, "bittensor.core.chain_data.axon_info.AxonInfo.hotkey", false]], "hotkey (bittensor.core.chain_data.neuron_info.neuroninfo attribute)": [[12, "bittensor.core.chain_data.neuron_info.NeuronInfo.hotkey", false]], "hotkey (bittensor.core.chain_data.neuron_info_lite.neuroninfolite attribute)": [[13, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite.hotkey", false]], "hotkey (bittensor.core.synapse.terminalinfo attribute)": [[82, "bittensor.core.synapse.TerminalInfo.hotkey", false]], "hotkey (bittensor.core.types.axonservecallparams attribute)": [[85, "bittensor.core.types.AxonServeCallParams.hotkey", false]], "hotkey (bittensor.extras.dev_framework.calls.non_sudo_calls.add_liquidity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ADD_LIQUIDITY.hotkey", false]], "hotkey (bittensor.extras.dev_framework.calls.non_sudo_calls.add_stake attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ADD_STAKE.hotkey", false]], "hotkey (bittensor.extras.dev_framework.calls.non_sudo_calls.add_stake_limit attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ADD_STAKE_LIMIT.hotkey", false]], "hotkey (bittensor.extras.dev_framework.calls.non_sudo_calls.burn_alpha attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.BURN_ALPHA.hotkey", false]], "hotkey (bittensor.extras.dev_framework.calls.non_sudo_calls.burned_register attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.BURNED_REGISTER.hotkey", false]], "hotkey (bittensor.extras.dev_framework.calls.non_sudo_calls.decrease_take attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.DECREASE_TAKE.hotkey", false]], "hotkey (bittensor.extras.dev_framework.calls.non_sudo_calls.increase_take attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.INCREASE_TAKE.hotkey", false]], "hotkey (bittensor.extras.dev_framework.calls.non_sudo_calls.modify_position attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.MODIFY_POSITION.hotkey", false]], "hotkey (bittensor.extras.dev_framework.calls.non_sudo_calls.recycle_alpha attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.RECYCLE_ALPHA.hotkey", false]], "hotkey (bittensor.extras.dev_framework.calls.non_sudo_calls.register attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REGISTER.hotkey", false]], "hotkey (bittensor.extras.dev_framework.calls.non_sudo_calls.register_network attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REGISTER_NETWORK.hotkey", false]], "hotkey (bittensor.extras.dev_framework.calls.non_sudo_calls.register_network_with_identity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REGISTER_NETWORK_WITH_IDENTITY.hotkey", false]], "hotkey (bittensor.extras.dev_framework.calls.non_sudo_calls.remove_liquidity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_LIQUIDITY.hotkey", false]], "hotkey (bittensor.extras.dev_framework.calls.non_sudo_calls.remove_stake attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_STAKE.hotkey", false]], "hotkey (bittensor.extras.dev_framework.calls.non_sudo_calls.remove_stake_full_limit attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_STAKE_FULL_LIMIT.hotkey", false]], "hotkey (bittensor.extras.dev_framework.calls.non_sudo_calls.remove_stake_limit attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_STAKE_LIMIT.hotkey", false]], "hotkey (bittensor.extras.dev_framework.calls.non_sudo_calls.root_register attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ROOT_REGISTER.hotkey", false]], "hotkey (bittensor.extras.dev_framework.calls.non_sudo_calls.set_childkey_take attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_CHILDKEY_TAKE.hotkey", false]], "hotkey (bittensor.extras.dev_framework.calls.non_sudo_calls.set_children attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_CHILDREN.hotkey", false]], "hotkey (bittensor.extras.dev_framework.calls.non_sudo_calls.set_coldkey_auto_stake_hotkey attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_COLDKEY_AUTO_STAKE_HOTKEY.hotkey", false]], "hotkey (bittensor.extras.dev_framework.calls.non_sudo_calls.swap_hotkey attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SWAP_HOTKEY.hotkey", false]], "hotkey (bittensor.extras.dev_framework.calls.non_sudo_calls.swap_stake attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SWAP_STAKE.hotkey", false]], "hotkey (bittensor.extras.dev_framework.calls.non_sudo_calls.swap_stake_limit attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SWAP_STAKE_LIMIT.hotkey", false]], "hotkey (bittensor.extras.dev_framework.calls.non_sudo_calls.terminate_lease attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.TERMINATE_LEASE.hotkey", false]], "hotkey (bittensor.extras.dev_framework.calls.non_sudo_calls.transfer_stake attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.TRANSFER_STAKE.hotkey", false]], "hotkey (bittensor.extras.dev_framework.calls.non_sudo_calls.try_associate_hotkey attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.TRY_ASSOCIATE_HOTKEY.hotkey", false]], "hotkey (bittensor.extras.dev_framework.calls.non_sudo_calls.unstake_all attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.UNSTAKE_ALL.hotkey", false]], "hotkey (bittensor.extras.dev_framework.calls.non_sudo_calls.unstake_all_alpha attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.UNSTAKE_ALL_ALPHA.hotkey", false]], "hotkey (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_sn_owner_hotkey attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SN_OWNER_HOTKEY.hotkey", false]], "hotkey (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_subnet_owner_hotkey attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SUBNET_OWNER_HOTKEY.hotkey", false]], "hotkey_ss58 (bittensor.core.chain_data.delegate_info.delegateinfobase attribute)": [[5, "bittensor.core.chain_data.delegate_info.DelegateInfoBase.hotkey_ss58", false]], "hotkey_ss58 (bittensor.core.chain_data.stake_info.stakeinfo attribute)": [[20, "bittensor.core.chain_data.stake_info.StakeInfo.hotkey_ss58", false]], "hotkeyaccountnotexists": [[29, "bittensor.core.errors.HotKeyAccountNotExists", false]], "hotkeys (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.hotkeys", false]], "hotkeys (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.Hotkeys", false]], "hotkeys (bittensor.core.chain_data.subnet_state.subnetstate attribute)": [[24, "bittensor.core.chain_data.subnet_state.SubnetState.hotkeys", false]], "hotkeys (bittensor.core.metagraph.metagraphmixin property)": [[78, "bittensor.core.metagraph.MetagraphMixin.hotkeys", false]], "hparams (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.hparams", false]], "i (bittensor.core.metagraph.metagraphmixin property)": [[78, "bittensor.core.metagraph.MetagraphMixin.I", false]], "id (bittensor.core.chain_data.crowdloan_info.crowdloaninfo attribute)": [[4, "bittensor.core.chain_data.crowdloan_info.CrowdloanInfo.id", false]], "id (bittensor.extras.dev_framework.calls.non_sudo_calls.cancel_named attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CANCEL_NAMED.id", false]], "id (bittensor.extras.dev_framework.calls.non_sudo_calls.cancel_retry_named attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CANCEL_RETRY_NAMED.id", false]], "id (bittensor.extras.dev_framework.calls.non_sudo_calls.schedule_named attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE_NAMED.id", false]], "id (bittensor.extras.dev_framework.calls.non_sudo_calls.schedule_named_after attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE_NAMED_AFTER.id", false]], "id (bittensor.extras.dev_framework.calls.non_sudo_calls.set_retry_named attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_RETRY_NAMED.id", false]], "id (bittensor.utils.liquidity.liquidityposition attribute)": [[123, "bittensor.utils.liquidity.LiquidityPosition.id", false]], "identified (bittensor.extras.dev_framework.calls.non_sudo_calls.clear_identity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CLEAR_IDENTITY.identified", false]], "identified (bittensor.extras.dev_framework.calls.non_sudo_calls.set_identity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_IDENTITY.identified", false]], "identities (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.identities", false]], "identities (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.Identities", false]], "identities (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.identities", false]], "identity (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.identity", false]], "identity (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.Identity", false]], "identity (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.identity", false]], "identity (bittensor.extras.dev_framework.calls.non_sudo_calls.register_network_with_identity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REGISTER_NETWORK_WITH_IDENTITY.identity", false]], "identityerror": [[29, "bittensor.core.errors.IdentityError", false]], "idx (bittensor.extras.dev_framework.subnet.call_record attribute)": [[91, "bittensor.extras.dev_framework.subnet.CALL_RECORD.idx", false]], "if_else (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.IF_ELSE", false]], "image (bittensor.core.chain_data.chain_identity.chainidentity attribute)": [[3, "bittensor.core.chain_data.chain_identity.ChainIdentity.image", false]], "image (bittensor.extras.dev_framework.calls.non_sudo_calls.set_identity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_IDENTITY.image", false]], "immune_neurons (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_owner_immune_neuron_limit attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_OWNER_IMMUNE_NEURON_LIMIT.immune_neurons", false]], "immunity_period (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.immunity_period", false]], "immunity_period (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.immunity_period", false]], "immunity_period (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[21, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.immunity_period", false]], "immunity_period (bittensor.core.chain_data.subnet_info.subnetinfo attribute)": [[23, "bittensor.core.chain_data.subnet_info.SubnetInfo.immunity_period", false]], "immunity_period (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_immunity_period attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_IMMUNITY_PERIOD.immunity_period", false]], "immunity_period (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_network_immunity_period attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_NETWORK_IMMUNITY_PERIOD.immunity_period", false]], "immunity_period (bittensor.extras.subtensor_api.subnets.subnets attribute)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets.immunity_period", false]], "immunity_period() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.immunity_period", false]], "immunity_period() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.immunity_period", false]], "immunityperiod (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.ImmunityPeriod", false]], "import_text (in module bittensor.extras.dev_framework.calls)": [[86, "bittensor.extras.dev_framework.calls.IMPORT_TEXT", false]], "in_blocks (bittensor.extras.dev_framework.calls.non_sudo_calls.schedule_grandpa_change attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE_GRANDPA_CHANGE.in_blocks", false]], "incentive (bittensor.core.chain_data.neuron_info.neuroninfo attribute)": [[12, "bittensor.core.chain_data.neuron_info.NeuronInfo.incentive", false]], "incentive (bittensor.core.chain_data.neuron_info_lite.neuroninfolite attribute)": [[13, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite.incentive", false]], "incentive (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.incentive", false]], "incentive (bittensor.core.metagraph.nontorchmetagraph attribute)": [[78, "bittensor.core.metagraph.NonTorchMetagraph.incentive", false]], "incentive (bittensor.core.metagraph.torchmetagraph attribute)": [[78, "bittensor.core.metagraph.TorchMetagraph.incentive", false]], "incentives (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.incentives", false]], "incentives (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.Incentives", false]], "incentives (bittensor.core.chain_data.subnet_state.subnetstate attribute)": [[24, "bittensor.core.chain_data.subnet_state.SubnetState.incentives", false]], "increase_take (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.INCREASE_TAKE", false]], "increase_take() (bittensor.core.extrinsics.pallets.subtensor_module.subtensormodule method)": [[62, "bittensor.core.extrinsics.pallets.subtensor_module.SubtensorModule.increase_take", false]], "index (bittensor.core.chain_data.proposal_vote_data.proposalvotedata attribute)": [[15, "bittensor.core.chain_data.proposal_vote_data.ProposalVoteData.index", false]], "index (bittensor.extras.dev_framework.calls.non_sudo_calls.as_derivative attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.AS_DERIVATIVE.index", false]], "index (bittensor.extras.dev_framework.calls.non_sudo_calls.cancel attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CANCEL.index", false]], "index (bittensor.extras.dev_framework.calls.non_sudo_calls.create_pure attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CREATE_PURE.index", false]], "index (bittensor.extras.dev_framework.calls.non_sudo_calls.kill_pure attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.KILL_PURE.index", false]], "info (bittensor.extras.dev_framework.calls.non_sudo_calls.set_commitment attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_COMMITMENT.info", false]], "info (bittensor.extras.dev_framework.calls.non_sudo_calls.set_identity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_IDENTITY.info", false]], "info (bittensor.utils.btlogging.loggingmachine.loggingconfig attribute)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingConfig.info", false]], "info (bittensor.utils.btlogging.loggingmachine.loggingmachine attribute)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.Info", false]], "info() (bittensor.core.axon.axon method)": [[1, "bittensor.core.axon.Axon.info", false]], "info() (bittensor.utils.btlogging.console.bittensorconsole method)": [[113, "bittensor.utils.btlogging.console.BittensorConsole.info", false]], "info() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.info", false]], "info() (in module bittensor.utils.btlogging.levels)": [[118, "bittensor.utils.btlogging.levels.info", false]], "infobase (class in bittensor.core.chain_data.info_base)": [[9, "bittensor.core.chain_data.info_base.InfoBase", false]], "init (bittensor.extras.dev_framework.calls.non_sudo_calls.create attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CREATE.init", false]], "init (bittensor.extras.dev_framework.calls.non_sudo_calls.create2 attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CREATE2.init", false]], "initialize (bittensor.extras.subtensor_api.subtensorapi attribute)": [[99, "bittensor.extras.subtensor_api.SubtensorApi.initialize", false]], "initialize() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.initialize", false]], "inner_subtensor (bittensor.extras.subtensor_api.subtensorapi attribute)": [[99, "bittensor.extras.subtensor_api.SubtensorApi.inner_subtensor", false]], "input (bittensor.extras.dev_framework.calls.non_sudo_calls.call attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CALL.input", false]], "install_signal_handlers() (bittensor.core.axon.fastapithreadedserver method)": [[1, "bittensor.core.axon.FastAPIThreadedServer.install_signal_handlers", false]], "int_to_ip() (in module bittensor.utils.networking)": [[124, "bittensor.utils.networking.int_to_ip", false]], "internalservererror": [[29, "bittensor.core.errors.InternalServerError", false]], "interval (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_commit_reveal_weights_interval attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_COMMIT_REVEAL_WEIGHTS_INTERVAL.interval", false]], "interval (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_lock_reduction_interval attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_LOCK_REDUCTION_INTERVAL.interval", false]], "invalidchild": [[29, "bittensor.core.errors.InvalidChild", false]], "invalidconfigfile": [[27, "bittensor.core.config.InvalidConfigFile", false]], "invalidrequestnameerror": [[29, "bittensor.core.errors.InvalidRequestNameError", false]], "ip (bittensor.core.axon.axon attribute)": [[1, "bittensor.core.axon.Axon.ip", false]], "ip (bittensor.core.chain_data.axon_info.axoninfo attribute)": [[2, "bittensor.core.chain_data.axon_info.AxonInfo.ip", false]], "ip (bittensor.core.chain_data.ip_info.ipinfo attribute)": [[10, "bittensor.core.chain_data.ip_info.IPInfo.ip", false]], "ip (bittensor.core.chain_data.prometheus_info.prometheusinfo attribute)": [[14, "bittensor.core.chain_data.prometheus_info.PrometheusInfo.ip", false]], "ip (bittensor.core.synapse.terminalinfo attribute)": [[82, "bittensor.core.synapse.TerminalInfo.ip", false]], "ip (bittensor.core.types.axonservecallparams attribute)": [[85, "bittensor.core.types.AxonServeCallParams.ip", false]], "ip (bittensor.core.types.prometheusservecallparams attribute)": [[85, "bittensor.core.types.PrometheusServeCallParams.ip", false]], "ip (bittensor.extras.dev_framework.calls.non_sudo_calls.serve_axon attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SERVE_AXON.ip", false]], "ip (bittensor.extras.dev_framework.calls.non_sudo_calls.serve_axon_tls attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SERVE_AXON_TLS.ip", false]], "ip (bittensor.extras.dev_framework.calls.non_sudo_calls.serve_prometheus attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SERVE_PROMETHEUS.ip", false]], "ip__str__() (in module bittensor.utils.networking)": [[124, "bittensor.utils.networking.ip__str__", false]], "ip_str() (bittensor.core.chain_data.axon_info.axoninfo method)": [[2, "bittensor.core.chain_data.axon_info.AxonInfo.ip_str", false]], "ip_to_int() (in module bittensor.utils.networking)": [[124, "bittensor.utils.networking.ip_to_int", false]], "ip_type (bittensor.core.chain_data.axon_info.axoninfo attribute)": [[2, "bittensor.core.chain_data.axon_info.AxonInfo.ip_type", false]], "ip_type (bittensor.core.chain_data.ip_info.ipinfo attribute)": [[10, "bittensor.core.chain_data.ip_info.IPInfo.ip_type", false]], "ip_type (bittensor.core.chain_data.prometheus_info.prometheusinfo attribute)": [[14, "bittensor.core.chain_data.prometheus_info.PrometheusInfo.ip_type", false]], "ip_type (bittensor.core.types.axonservecallparams attribute)": [[85, "bittensor.core.types.AxonServeCallParams.ip_type", false]], "ip_type (bittensor.core.types.prometheusservecallparams attribute)": [[85, "bittensor.core.types.PrometheusServeCallParams.ip_type", false]], "ip_type (bittensor.extras.dev_framework.calls.non_sudo_calls.serve_axon attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SERVE_AXON.ip_type", false]], "ip_type (bittensor.extras.dev_framework.calls.non_sudo_calls.serve_axon_tls attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SERVE_AXON_TLS.ip_type", false]], "ip_type (bittensor.extras.dev_framework.calls.non_sudo_calls.serve_prometheus attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SERVE_PROMETHEUS.ip_type", false]], "ip_version() (in module bittensor.utils.networking)": [[124, "bittensor.utils.networking.ip_version", false]], "ipinfo (bittensor.core.chain_data.utils.chaindatatype attribute)": [[25, "bittensor.core.chain_data.utils.ChainDataType.IPInfo", false]], "ipinfo (class in bittensor.core.chain_data.ip_info)": [[10, "bittensor.core.chain_data.ip_info.IPInfo", false]], "is_async (bittensor.extras.subtensor_api.subtensorapi attribute)": [[99, "bittensor.extras.subtensor_api.SubtensorApi.is_async", false]], "is_blacklist (bittensor.core.synapse.synapse property)": [[82, "bittensor.core.synapse.Synapse.is_blacklist", false]], "is_dynamic (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[7, "bittensor.core.chain_data.dynamic_info.DynamicInfo.is_dynamic", false]], "is_empty (bittensor.core.threadpool.prioritythreadpoolexecutor property)": [[84, "bittensor.core.threadpool.PriorityThreadPoolExecutor.is_empty", false]], "is_failure (bittensor.core.synapse.synapse property)": [[82, "bittensor.core.synapse.Synapse.is_failure", false]], "is_fast_blocks (bittensor.extras.subtensor_api.chain.chain attribute)": [[94, "bittensor.extras.subtensor_api.chain.Chain.is_fast_blocks", false]], "is_fast_blocks() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.is_fast_blocks", false]], "is_fast_blocks() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.is_fast_blocks", false]], "is_hotkey_delegate (bittensor.extras.subtensor_api.delegates.delegates attribute)": [[97, "bittensor.extras.subtensor_api.delegates.Delegates.is_hotkey_delegate", false]], "is_hotkey_delegate (bittensor.extras.subtensor_api.wallets.wallets attribute)": [[108, "bittensor.extras.subtensor_api.wallets.Wallets.is_hotkey_delegate", false]], "is_hotkey_delegate() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.is_hotkey_delegate", false]], "is_hotkey_delegate() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.is_hotkey_delegate", false]], "is_hotkey_registered (bittensor.extras.subtensor_api.wallets.wallets attribute)": [[108, "bittensor.extras.subtensor_api.wallets.Wallets.is_hotkey_registered", false]], "is_hotkey_registered() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.is_hotkey_registered", false]], "is_hotkey_registered() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.is_hotkey_registered", false]], "is_hotkey_registered_any (bittensor.extras.subtensor_api.wallets.wallets attribute)": [[108, "bittensor.extras.subtensor_api.wallets.Wallets.is_hotkey_registered_any", false]], "is_hotkey_registered_any() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.is_hotkey_registered_any", false]], "is_hotkey_registered_any() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.is_hotkey_registered_any", false]], "is_hotkey_registered_on_subnet (bittensor.extras.subtensor_api.subnets.subnets attribute)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets.is_hotkey_registered_on_subnet", false]], "is_hotkey_registered_on_subnet (bittensor.extras.subtensor_api.wallets.wallets attribute)": [[108, "bittensor.extras.subtensor_api.wallets.Wallets.is_hotkey_registered_on_subnet", false]], "is_hotkey_registered_on_subnet() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.is_hotkey_registered_on_subnet", false]], "is_hotkey_registered_on_subnet() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.is_hotkey_registered_on_subnet", false]], "is_in_admin_freeze_window (bittensor.extras.subtensor_api.chain.chain attribute)": [[94, "bittensor.extras.subtensor_api.chain.Chain.is_in_admin_freeze_window", false]], "is_in_admin_freeze_window() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.is_in_admin_freeze_window", false]], "is_in_admin_freeze_window() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.is_in_admin_freeze_window", false]], "is_instance_namedtuple() (in module bittensor.extras.dev_framework.utils)": [[92, "bittensor.extras.dev_framework.utils.is_instance_namedtuple", false]], "is_null (bittensor.core.chain_data.neuron_info.neuroninfo attribute)": [[12, "bittensor.core.chain_data.neuron_info.NeuronInfo.is_null", false]], "is_null (bittensor.core.chain_data.neuron_info_lite.neuroninfolite attribute)": [[13, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite.is_null", false]], "is_registered (bittensor.core.chain_data.stake_info.stakeinfo attribute)": [[20, "bittensor.core.chain_data.stake_info.StakeInfo.is_registered", false]], "is_running (bittensor.core.axon.fastapithreadedserver attribute)": [[1, "bittensor.core.axon.FastAPIThreadedServer.is_running", false]], "is_serving (bittensor.core.chain_data.axon_info.axoninfo property)": [[2, "bittensor.core.chain_data.axon_info.AxonInfo.is_serving", false]], "is_set() (bittensor.core.config.config method)": [[27, "bittensor.core.config.Config.is_set", false]], "is_stale() (bittensor.utils.registration.pow.powsolution method)": [[127, "bittensor.utils.registration.pow.POWSolution.is_stale", false]], "is_stale_async() (bittensor.utils.registration.pow.powsolution method)": [[127, "bittensor.utils.registration.pow.POWSolution.is_stale_async", false]], "is_subnet_active (bittensor.extras.subtensor_api.subnets.subnets attribute)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets.is_subnet_active", false]], "is_subnet_active() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.is_subnet_active", false]], "is_subnet_active() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.is_subnet_active", false]], "is_success (bittensor.core.synapse.synapse property)": [[82, "bittensor.core.synapse.Synapse.is_success", false]], "is_timeout (bittensor.core.synapse.synapse property)": [[82, "bittensor.core.synapse.Synapse.is_timeout", false]], "is_valid() (bittensor.core.chain_data.proxy.proxytype class method)": [[16, "bittensor.core.chain_data.proxy.ProxyType.is_valid", false]], "is_valid_bittensor_address_or_public_key() (in module bittensor.utils)": [[122, "bittensor.utils.is_valid_bittensor_address_or_public_key", false]], "is_valid_ss58_address() (in module bittensor.utils)": [[122, "bittensor.utils.is_valid_ss58_address", false]], "items (bittensor.extras.dev_framework.calls.non_sudo_calls.set_storage attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_STORAGE.items", false]], "k (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[7, "bittensor.core.chain_data.dynamic_info.DynamicInfo.k", false]], "kappa (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.kappa", false]], "kappa (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.kappa", false]], "kappa (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.Kappa", false]], "kappa (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[21, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.kappa", false]], "kappa (bittensor.core.chain_data.subnet_info.subnetinfo attribute)": [[23, "bittensor.core.chain_data.subnet_info.SubnetInfo.kappa", false]], "kappa (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_kappa attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_KAPPA.kappa", false]], "keep (bittensor.core.chain_data.root_claim.rootclaimtype attribute)": [[17, "bittensor.core.chain_data.root_claim.RootClaimType.Keep", false]], "keep_alive (bittensor.extras.dev_framework.calls.non_sudo_calls.burn attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.BURN.keep_alive", false]], "keep_alive (bittensor.extras.dev_framework.calls.non_sudo_calls.transfer_all attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.TRANSFER_ALL.keep_alive", false]], "keepsubnets (bittensor.core.chain_data.root_claim.rootclaimtype attribute)": [[17, "bittensor.core.chain_data.root_claim.RootClaimType.KeepSubnets", false]], "keepsubnetsdescriptor (class in bittensor.core.chain_data.root_claim)": [[17, "bittensor.core.chain_data.root_claim.KeepSubnetsDescriptor", false]], "key_owner_proof (bittensor.extras.dev_framework.calls.non_sudo_calls.report_equivocation attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REPORT_EQUIVOCATION.key_owner_proof", false]], "key_owner_proof (bittensor.extras.dev_framework.calls.non_sudo_calls.report_equivocation_unsigned attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REPORT_EQUIVOCATION_UNSIGNED.key_owner_proof", false]], "keypair (bittensor.core.dendrite.dendritemixin attribute)": [[28, "bittensor.core.dendrite.DendriteMixin.keypair", false]], "keys (bittensor.extras.dev_framework.calls.non_sudo_calls.kill_storage attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.KILL_STORAGE.keys", false]], "kill_prefix (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.KILL_PREFIX", false]], "kill_pure (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.KILL_PURE", false]], "kill_pure() (bittensor.core.extrinsics.pallets.proxy.proxy method)": [[61, "bittensor.core.extrinsics.pallets.proxy.Proxy.kill_pure", false]], "kill_pure_proxy (bittensor.extras.subtensor_api.proxy.proxy attribute)": [[103, "bittensor.extras.subtensor_api.proxy.Proxy.kill_pure_proxy", false]], "kill_pure_proxy() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.kill_pure_proxy", false]], "kill_pure_proxy() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.kill_pure_proxy", false]], "kill_pure_proxy_extrinsic() (in module bittensor.core.extrinsics.asyncex.proxy)": [[36, "bittensor.core.extrinsics.asyncex.proxy.kill_pure_proxy_extrinsic", false]], "kill_pure_proxy_extrinsic() (in module bittensor.core.extrinsics.proxy)": [[65, "bittensor.core.extrinsics.proxy.kill_pure_proxy_extrinsic", false]], "kill_storage (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.KILL_STORAGE", false]], "last_drand_round (bittensor.extras.subtensor_api.chain.chain attribute)": [[94, "bittensor.extras.subtensor_api.chain.Chain.last_drand_round", false]], "last_drand_round() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.last_drand_round", false]], "last_drand_round() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.last_drand_round", false]], "last_step (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[7, "bittensor.core.chain_data.dynamic_info.DynamicInfo.last_step", false]], "last_step (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.last_step", false]], "last_step (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.last_step", false]], "last_update (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.last_update", false]], "last_update (bittensor.core.chain_data.neuron_info.neuroninfo attribute)": [[12, "bittensor.core.chain_data.neuron_info.NeuronInfo.last_update", false]], "last_update (bittensor.core.chain_data.neuron_info_lite.neuroninfolite attribute)": [[13, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite.last_update", false]], "last_update (bittensor.core.chain_data.subnet_state.subnetstate attribute)": [[24, "bittensor.core.chain_data.subnet_state.SubnetState.last_update", false]], "last_update (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.last_update", false]], "last_update (bittensor.core.metagraph.nontorchmetagraph attribute)": [[78, "bittensor.core.metagraph.NonTorchMetagraph.last_update", false]], "last_update (bittensor.core.metagraph.torchmetagraph attribute)": [[78, "bittensor.core.metagraph.TorchMetagraph.last_update", false]], "laststep (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.LastStep", false]], "lastupdate (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.LastUpdate", false]], "latent_lite_entrypoint (in module bittensor.core.settings)": [[79, "bittensor.core.settings.LATENT_LITE_ENTRYPOINT", false]], "latest_block_path() (in module bittensor.core.metagraph)": [[78, "bittensor.core.metagraph.latest_block_path", false]], "lazyloadedtorch (class in bittensor.utils.registration.pow)": [[127, "bittensor.utils.registration.pow.LazyLoadedTorch", false]], "lease_id (bittensor.extras.dev_framework.calls.non_sudo_calls.terminate_lease attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.TERMINATE_LEASE.lease_id", false]], "legacy_torch_api_compat() (in module bittensor.utils.registration.pow)": [[127, "bittensor.utils.registration.pow.legacy_torch_api_compat", false]], "limit_price (bittensor.extras.dev_framework.calls.non_sudo_calls.add_stake_limit attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ADD_STAKE_LIMIT.limit_price", false]], "limit_price (bittensor.extras.dev_framework.calls.non_sudo_calls.remove_stake_full_limit attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_STAKE_FULL_LIMIT.limit_price", false]], "limit_price (bittensor.extras.dev_framework.calls.non_sudo_calls.remove_stake_limit attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_STAKE_LIMIT.limit_price", false]], "limit_price (bittensor.extras.dev_framework.calls.non_sudo_calls.swap_stake_limit attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SWAP_STAKE_LIMIT.limit_price", false]], "liquid_alpha_enabled (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.liquid_alpha_enabled", false]], "liquid_alpha_enabled (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.liquid_alpha_enabled", false]], "liquid_alpha_enabled (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[21, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.liquid_alpha_enabled", false]], "liquidalphaenabled (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.LiquidAlphaEnabled", false]], "liquidity (bittensor.extras.dev_framework.calls.non_sudo_calls.add_liquidity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ADD_LIQUIDITY.liquidity", false]], "liquidity (bittensor.utils.liquidity.liquidityposition attribute)": [[123, "bittensor.utils.liquidity.LiquidityPosition.liquidity", false]], "liquidity_delta (bittensor.extras.dev_framework.calls.non_sudo_calls.modify_position attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.MODIFY_POSITION.liquidity_delta", false]], "liquidityposition (class in bittensor.utils.liquidity)": [[123, "bittensor.utils.liquidity.LiquidityPosition", false]], "list_from_dicts() (bittensor.core.chain_data.info_base.infobase class method)": [[9, "bittensor.core.chain_data.info_base.InfoBase.list_from_dicts", false]], "list_from_vec_u8() (bittensor.core.chain_data.neuron_info_lite.neuroninfolite method)": [[13, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite.list_from_vec_u8", false]], "lite (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.lite", false]], "load() (bittensor.core.metagraph.metagraphmixin method)": [[78, "bittensor.core.metagraph.MetagraphMixin.load", false]], "load_from_path() (bittensor.core.metagraph.metagraphmixin method)": [[78, "bittensor.core.metagraph.MetagraphMixin.load_from_path", false]], "load_from_path() (bittensor.core.metagraph.nontorchmetagraph method)": [[78, "bittensor.core.metagraph.NonTorchMetagraph.load_from_path", false]], "load_from_path() (bittensor.core.metagraph.torchmetagraph method)": [[78, "bittensor.core.metagraph.TorchMetagraph.load_from_path", false]], "local_entrypoint (in module bittensor.core.settings)": [[79, "bittensor.core.settings.LOCAL_ENTRYPOINT", false]], "lock_cost (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_network_min_lock_cost attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_NETWORK_MIN_LOCK_COST.lock_cost", false]], "locked (bittensor.core.chain_data.stake_info.stakeinfo attribute)": [[20, "bittensor.core.chain_data.stake_info.StakeInfo.locked", false]], "log() (bittensor.utils.registration.pow.console static method)": [[127, "bittensor.utils.registration.pow.Console.log", false]], "log_and_handle_error() (in module bittensor.core.axon)": [[1, "bittensor.core.axon.log_and_handle_error", false]], "log_cuda_errors() (in module bittensor.utils.registration.register_cuda)": [[128, "bittensor.utils.registration.register_cuda.log_cuda_errors", false]], "log_exception() (bittensor.core.dendrite.dendritemixin method)": [[28, "bittensor.core.dendrite.DendriteMixin.log_exception", false]], "log_formats (in module bittensor.utils.btlogging.format)": [[115, "bittensor.utils.btlogging.format.LOG_FORMATS", false]], "log_level_color_prefix (in module bittensor.utils.btlogging.format)": [[115, "bittensor.utils.btlogging.format.log_level_color_prefix", false]], "log_no_torch_error() (in module bittensor.utils.registration.pow)": [[127, "bittensor.utils.registration.pow.log_no_torch_error", false]], "log_trace_formats (in module bittensor.utils.btlogging.format)": [[115, "bittensor.utils.btlogging.format.LOG_TRACE_FORMATS", false]], "log_verbose (bittensor.core.async_subtensor.asyncsubtensor attribute)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.log_verbose", false]], "log_verbose (bittensor.core.subtensor.subtensor attribute)": [[81, "bittensor.core.subtensor.Subtensor.log_verbose", false]], "log_verbose (bittensor.core.types.subtensormixin attribute)": [[85, "bittensor.core.types.SubtensorMixin.log_verbose", false]], "log_verbose (bittensor.extras.subtensor_api.subtensorapi attribute)": [[99, "bittensor.extras.subtensor_api.SubtensorApi.log_verbose", false]], "logger (bittensor.utils.btlogging.console.bittensorconsole attribute)": [[113, "bittensor.utils.btlogging.console.BittensorConsole.logger", false]], "logger (in module bittensor.core.threadpool)": [[84, "bittensor.core.threadpool.logger", false]], "logging (in module bittensor.utils)": [[122, "bittensor.utils.logging", false]], "logging (in module bittensor.utils.btlogging)": [[117, "bittensor.utils.btlogging.logging", false]], "logging_dir (bittensor.utils.btlogging.loggingmachine.loggingconfig attribute)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingConfig.logging_dir", false]], "loggingconfig (class in bittensor.utils.btlogging.loggingmachine)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingConfig", false]], "loggingmachine (class in bittensor.utils.btlogging.loggingmachine)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine", false]], "logo_url (bittensor.core.chain_data.subnet_identity.subnetidentity attribute)": [[22, "bittensor.core.chain_data.subnet_identity.SubnetIdentity.logo_url", false]], "logo_url (bittensor.extras.dev_framework.calls.non_sudo_calls.set_subnet_identity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_SUBNET_IDENTITY.logo_url", false]], "main (bittensor.extras.dev_framework.calls.non_sudo_calls.if_else attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.IF_ELSE.main", false]], "max_allowed_uids (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_max_allowed_uids attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MAX_ALLOWED_UIDS.max_allowed_uids", false]], "max_allowed_validators (bittensor.core.chain_data.subnet_info.subnetinfo attribute)": [[23, "bittensor.core.chain_data.subnet_info.SubnetInfo.max_allowed_validators", false]], "max_allowed_validators (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_max_allowed_validators attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MAX_ALLOWED_VALIDATORS.max_allowed_validators", false]], "max_burn (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.max_burn", false]], "max_burn (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.max_burn", false]], "max_burn (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[21, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.max_burn", false]], "max_burn (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_max_burn attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MAX_BURN.max_burn", false]], "max_difficulty (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.max_difficulty", false]], "max_difficulty (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.max_difficulty", false]], "max_difficulty (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[21, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.max_difficulty", false]], "max_difficulty (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_max_difficulty attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MAX_DIFFICULTY.max_difficulty", false]], "max_fee_per_gas (bittensor.extras.dev_framework.calls.non_sudo_calls.call attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CALL.max_fee_per_gas", false]], "max_fee_per_gas (bittensor.extras.dev_framework.calls.non_sudo_calls.create attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CREATE.max_fee_per_gas", false]], "max_fee_per_gas (bittensor.extras.dev_framework.calls.non_sudo_calls.create2 attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CREATE2.max_fee_per_gas", false]], "max_n (bittensor.core.chain_data.subnet_info.subnetinfo attribute)": [[23, "bittensor.core.chain_data.subnet_info.SubnetInfo.max_n", false]], "max_n (bittensor.extras.dev_framework.calls.sudo_calls.sudo_trim_to_max_allowed_uids attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_TRIM_TO_MAX_ALLOWED_UIDS.max_n", false]], "max_priority_fee_per_gas (bittensor.extras.dev_framework.calls.non_sudo_calls.call attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CALL.max_priority_fee_per_gas", false]], "max_priority_fee_per_gas (bittensor.extras.dev_framework.calls.non_sudo_calls.create attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CREATE.max_priority_fee_per_gas", false]], "max_priority_fee_per_gas (bittensor.extras.dev_framework.calls.non_sudo_calls.create2 attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CREATE2.max_priority_fee_per_gas", false]], "max_registrations_per_block (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_max_registrations_per_block attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MAX_REGISTRATIONS_PER_BLOCK.max_registrations_per_block", false]], "max_regs_per_block (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.max_regs_per_block", false]], "max_regs_per_block (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.max_regs_per_block", false]], "max_regs_per_block (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[21, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.max_regs_per_block", false]], "max_subnets (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_subnet_limit attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SUBNET_LIMIT.max_subnets", false]], "max_tick (in module bittensor.utils.liquidity)": [[123, "bittensor.utils.liquidity.MAX_TICK", false]], "max_uids (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.max_uids", false]], "max_uids (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.max_uids", false]], "max_validators (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.max_validators", false]], "max_validators (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.max_validators", false]], "max_validators (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[21, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.max_validators", false]], "max_weight (bittensor.extras.dev_framework.calls.non_sudo_calls.approve_as_multi attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.APPROVE_AS_MULTI.max_weight", false]], "max_weight (bittensor.extras.dev_framework.calls.non_sudo_calls.as_multi attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.AS_MULTI.max_weight", false]], "max_weight_limit (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[21, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.max_weight_limit", false]], "max_weight_limit (bittensor.core.chain_data.subnet_info.subnetinfo attribute)": [[23, "bittensor.core.chain_data.subnet_info.SubnetInfo.max_weight_limit", false]], "max_weight_limit (bittensor.extras.subtensor_api.subnets.subnets attribute)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets.max_weight_limit", false]], "max_weight_limit() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.max_weight_limit", false]], "max_weight_limit() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.max_weight_limit", false]], "max_weights_limit (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.max_weights_limit", false]], "max_weights_limit (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.max_weights_limit", false]], "maxattemptsexception": [[29, "bittensor.core.errors.MaxAttemptsException", false]], "maxburn (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.MaxBurn", false]], "maxcontributors (bittensor.core.chain_data.crowdloan_info.crowdloanconstants attribute)": [[4, "bittensor.core.chain_data.crowdloan_info.CrowdloanConstants.MaxContributors", false]], "maxdifficulty (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.MaxDifficulty", false]], "maximumblockduration (bittensor.core.chain_data.crowdloan_info.crowdloanconstants attribute)": [[4, "bittensor.core.chain_data.crowdloan_info.CrowdloanConstants.MaximumBlockDuration", false]], "maxpending (bittensor.core.chain_data.proxy.proxyconstants attribute)": [[16, "bittensor.core.chain_data.proxy.ProxyConstants.MaxPending", false]], "maxproxies (bittensor.core.chain_data.proxy.proxyconstants attribute)": [[16, "bittensor.core.chain_data.proxy.ProxyConstants.MaxProxies", false]], "maxregsperblock (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.MaxRegsPerBlock", false]], "maxsuccessexception": [[29, "bittensor.core.errors.MaxSuccessException", false]], "maxuids (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.MaxUids", false]], "maxvalidators (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.MaxValidators", false]], "maxweightslimit (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.MaxWeightsLimit", false]], "maybe_periodic (bittensor.extras.dev_framework.calls.non_sudo_calls.schedule attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE.maybe_periodic", false]], "maybe_periodic (bittensor.extras.dev_framework.calls.non_sudo_calls.schedule_after attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE_AFTER.maybe_periodic", false]], "maybe_periodic (bittensor.extras.dev_framework.calls.non_sudo_calls.schedule_named attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE_NAMED.maybe_periodic", false]], "maybe_periodic (bittensor.extras.dev_framework.calls.non_sudo_calls.schedule_named_after attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE_NAMED_AFTER.maybe_periodic", false]], "maybe_split (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_mechanism_emission_split attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MECHANISM_EMISSION_SPLIT.maybe_split", false]], "maybe_timepoint (bittensor.extras.dev_framework.calls.non_sudo_calls.approve_as_multi attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.APPROVE_AS_MULTI.maybe_timepoint", false]], "maybe_timepoint (bittensor.extras.dev_framework.calls.non_sudo_calls.as_multi attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.AS_MULTI.maybe_timepoint", false]], "mechanism_count (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.mechanism_count", false]], "mechanism_count (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_mechanism_count attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MECHANISM_COUNT.mechanism_count", false]], "mechanisms_emissions_split (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.mechanisms_emissions_split", false]], "mechid (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.mechid", false]], "mechid (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.mechid", false]], "mecid (bittensor.extras.dev_framework.calls.non_sudo_calls.commit_crv3_mechanism_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.COMMIT_CRV3_MECHANISM_WEIGHTS.mecid", false]], "mecid (bittensor.extras.dev_framework.calls.non_sudo_calls.commit_mechanism_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.COMMIT_MECHANISM_WEIGHTS.mecid", false]], "mecid (bittensor.extras.dev_framework.calls.non_sudo_calls.commit_timelocked_mechanism_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.COMMIT_TIMELOCKED_MECHANISM_WEIGHTS.mecid", false]], "mecid (bittensor.extras.dev_framework.calls.non_sudo_calls.reveal_mechanism_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REVEAL_MECHANISM_WEIGHTS.mecid", false]], "mecid (bittensor.extras.dev_framework.calls.non_sudo_calls.set_mechanism_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_MECHANISM_WEIGHTS.mecid", false]], "merge() (bittensor.core.config.config method)": [[27, "bittensor.core.config.Config.merge", false]], "message (bittensor.core.errors.synapsedendritenoneexception attribute)": [[29, "bittensor.core.errors.SynapseDendriteNoneException.message", false]], "message (bittensor.core.errors.synapseexception attribute)": [[29, "bittensor.core.errors.SynapseException.message", false]], "message (bittensor.core.types.extrinsicresponse attribute)": [[85, "bittensor.core.types.ExtrinsicResponse.message", false]], "message (bittensor.utils.unlockstatus attribute)": [[122, "bittensor.utils.UnlockStatus.message", false]], "metadata() (bittensor.core.metagraph.metagraphmixin method)": [[78, "bittensor.core.metagraph.MetagraphMixin.metadata", false]], "metadataerror": [[29, "bittensor.core.errors.MetadataError", false]], "metagraph (bittensor.extras.subtensor_api.metagraphs.metagraphs attribute)": [[100, "bittensor.extras.subtensor_api.metagraphs.Metagraphs.metagraph", false]], "metagraph (class in bittensor.core.metagraph)": [[78, "bittensor.core.metagraph.Metagraph", false]], "metagraph() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.metagraph", false]], "metagraph() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.metagraph", false]], "metagraph_state_dict_ndarray_keys (in module bittensor.core.metagraph)": [[78, "bittensor.core.metagraph.METAGRAPH_STATE_DICT_NDARRAY_KEYS", false]], "metagraphinfo (bittensor.core.chain_data.utils.chaindatatype attribute)": [[25, "bittensor.core.chain_data.utils.ChainDataType.MetagraphInfo", false]], "metagraphinfo (class in bittensor.core.chain_data.metagraph_info)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo", false]], "metagraphinfoemissions (class in bittensor.core.chain_data.metagraph_info)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfoEmissions", false]], "metagraphinfoparams (class in bittensor.core.chain_data.metagraph_info)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams", false]], "metagraphinfopool (class in bittensor.core.chain_data.metagraph_info)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfoPool", false]], "metagraphmixin (class in bittensor.core.metagraph)": [[78, "bittensor.core.metagraph.MetagraphMixin", false]], "metagraphs (bittensor.extras.subtensor_api.subtensorapi property)": [[99, "bittensor.extras.subtensor_api.SubtensorApi.metagraphs", false]], "metagraphs (class in bittensor.extras.subtensor_api.metagraphs)": [[100, "bittensor.extras.subtensor_api.metagraphs.Metagraphs", false]], "mev_extrinsic (bittensor.core.types.extrinsicresponse attribute)": [[85, "bittensor.core.types.ExtrinsicResponse.mev_extrinsic", false]], "mev_shield (bittensor.extras.subtensor_api.subtensorapi property)": [[99, "bittensor.extras.subtensor_api.SubtensorApi.mev_shield", false]], "mev_submit_encrypted (bittensor.extras.subtensor_api.mev_shield.mevshield attribute)": [[101, "bittensor.extras.subtensor_api.mev_shield.MevShield.mev_submit_encrypted", false]], "mev_submit_encrypted() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.mev_submit_encrypted", false]], "mev_submit_encrypted() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.mev_submit_encrypted", false]], "mevshield (class in bittensor.core.extrinsics.pallets.mev_shield)": [[60, "bittensor.core.extrinsics.pallets.mev_shield.MevShield", false]], "mevshield (class in bittensor.extras.subtensor_api.mev_shield)": [[101, "bittensor.extras.subtensor_api.mev_shield.MevShield", false]], "middleware_cls (bittensor.core.axon.axon attribute)": [[1, "bittensor.core.axon.Axon.middleware_cls", false]], "millify() (in module bittensor.utils.formatting)": [[121, "bittensor.utils.formatting.millify", false]], "min_allowed_uids (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_min_allowed_uids attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MIN_ALLOWED_UIDS.min_allowed_uids", false]], "min_allowed_weights (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.min_allowed_weights", false]], "min_allowed_weights (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.min_allowed_weights", false]], "min_allowed_weights (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[21, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.min_allowed_weights", false]], "min_allowed_weights (bittensor.core.chain_data.subnet_info.subnetinfo attribute)": [[23, "bittensor.core.chain_data.subnet_info.SubnetInfo.min_allowed_weights", false]], "min_allowed_weights (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_min_allowed_weights attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MIN_ALLOWED_WEIGHTS.min_allowed_weights", false]], "min_allowed_weights (bittensor.extras.subtensor_api.subnets.subnets attribute)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets.min_allowed_weights", false]], "min_allowed_weights() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.min_allowed_weights", false]], "min_allowed_weights() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.min_allowed_weights", false]], "min_burn (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.min_burn", false]], "min_burn (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.min_burn", false]], "min_burn (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[21, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.min_burn", false]], "min_burn (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_min_burn attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MIN_BURN.min_burn", false]], "min_contribution (bittensor.core.chain_data.crowdloan_info.crowdloaninfo attribute)": [[4, "bittensor.core.chain_data.crowdloan_info.CrowdloanInfo.min_contribution", false]], "min_contribution (bittensor.extras.dev_framework.calls.non_sudo_calls.create attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CREATE.min_contribution", false]], "min_difficulty (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.min_difficulty", false]], "min_difficulty (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.min_difficulty", false]], "min_difficulty (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[21, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.min_difficulty", false]], "min_difficulty (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_min_difficulty attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MIN_DIFFICULTY.min_difficulty", false]], "min_stake (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_nominator_min_required_stake attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_NOMINATOR_MIN_REQUIRED_STAKE.min_stake", false]], "min_stake (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_stake_threshold attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_STAKE_THRESHOLD.min_stake", false]], "min_tick (in module bittensor.utils.liquidity)": [[123, "bittensor.utils.liquidity.MIN_TICK", false]], "minallowedweights (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.MinAllowedWeights", false]], "minburn (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.MinBurn", false]], "mindifficulty (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.MinDifficulty", false]], "miners_dir (in module bittensor.core.settings)": [[79, "bittensor.core.settings.MINERS_DIR", false]], "minimumblockduration (bittensor.core.chain_data.crowdloan_info.crowdloanconstants attribute)": [[4, "bittensor.core.chain_data.crowdloan_info.CrowdloanConstants.MinimumBlockDuration", false]], "minimumdeposit (bittensor.core.chain_data.crowdloan_info.crowdloanconstants attribute)": [[4, "bittensor.core.chain_data.crowdloan_info.CrowdloanConstants.MinimumDeposit", false]], "mlkem768_public_key_size (in module bittensor.core.settings)": [[79, "bittensor.core.settings.MLKEM768_PUBLIC_KEY_SIZE", false]], "modality (bittensor.core.chain_data.subnet_info.subnetinfo attribute)": [[23, "bittensor.core.chain_data.subnet_info.SubnetInfo.modality", false]], "model_config (bittensor.core.stream.streamingsynapse attribute)": [[80, "bittensor.core.stream.StreamingSynapse.model_config", false]], "model_config (bittensor.core.synapse.synapse attribute)": [[82, "bittensor.core.synapse.Synapse.model_config", false]], "model_config (bittensor.core.synapse.terminalinfo attribute)": [[82, "bittensor.core.synapse.TerminalInfo.model_config", false]], "model_config (bittensor.core.tensor.tensor attribute)": [[83, "bittensor.core.tensor.Tensor.model_config", false]], "modify_liquidity (bittensor.extras.subtensor_api.extrinsics.extrinsics attribute)": [[98, "bittensor.extras.subtensor_api.extrinsics.Extrinsics.modify_liquidity", false]], "modify_liquidity() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.modify_liquidity", false]], "modify_liquidity() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.modify_liquidity", false]], "modify_liquidity_extrinsic() (in module bittensor.core.extrinsics.asyncex.liquidity)": [[33, "bittensor.core.extrinsics.asyncex.liquidity.modify_liquidity_extrinsic", false]], "modify_liquidity_extrinsic() (in module bittensor.core.extrinsics.liquidity)": [[51, "bittensor.core.extrinsics.liquidity.modify_liquidity_extrinsic", false]], "modify_position (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.MODIFY_POSITION", false]], "modify_position() (bittensor.core.extrinsics.pallets.swap.swap method)": [[64, "bittensor.core.extrinsics.pallets.swap.Swap.modify_position", false]], "module": [[0, "module-bittensor.core.async_subtensor", false], [1, "module-bittensor.core.axon", false], [2, "module-bittensor.core.chain_data.axon_info", false], [3, "module-bittensor.core.chain_data.chain_identity", false], [4, "module-bittensor.core.chain_data.crowdloan_info", false], [5, "module-bittensor.core.chain_data.delegate_info", false], [6, "module-bittensor.core.chain_data.delegate_info_lite", false], [7, "module-bittensor.core.chain_data.dynamic_info", false], [8, "module-bittensor.core.chain_data", false], [9, "module-bittensor.core.chain_data.info_base", false], [10, "module-bittensor.core.chain_data.ip_info", false], [11, "module-bittensor.core.chain_data.metagraph_info", false], [12, "module-bittensor.core.chain_data.neuron_info", false], [13, "module-bittensor.core.chain_data.neuron_info_lite", false], [14, "module-bittensor.core.chain_data.prometheus_info", false], [15, "module-bittensor.core.chain_data.proposal_vote_data", false], [16, "module-bittensor.core.chain_data.proxy", false], [17, "module-bittensor.core.chain_data.root_claim", false], [18, "module-bittensor.core.chain_data.scheduled_coldkey_swap_info", false], [19, "module-bittensor.core.chain_data.sim_swap", false], [20, "module-bittensor.core.chain_data.stake_info", false], [21, "module-bittensor.core.chain_data.subnet_hyperparameters", false], [22, "module-bittensor.core.chain_data.subnet_identity", false], [23, "module-bittensor.core.chain_data.subnet_info", false], [24, "module-bittensor.core.chain_data.subnet_state", false], [25, "module-bittensor.core.chain_data.utils", false], [26, "module-bittensor.core.chain_data.weight_commit_info", false], [27, "module-bittensor.core.config", false], [28, "module-bittensor.core.dendrite", false], [29, "module-bittensor.core.errors", false], [30, "module-bittensor.core.extrinsics.asyncex.children", false], [31, "module-bittensor.core.extrinsics.asyncex.crowdloan", false], [32, "module-bittensor.core.extrinsics.asyncex", false], [33, "module-bittensor.core.extrinsics.asyncex.liquidity", false], [34, "module-bittensor.core.extrinsics.asyncex.mev_shield", false], [35, "module-bittensor.core.extrinsics.asyncex.move_stake", false], [36, "module-bittensor.core.extrinsics.asyncex.proxy", false], [37, "module-bittensor.core.extrinsics.asyncex.registration", false], [38, "module-bittensor.core.extrinsics.asyncex.root", false], [39, "module-bittensor.core.extrinsics.asyncex.serving", false], [40, "module-bittensor.core.extrinsics.asyncex.staking", false], [41, "module-bittensor.core.extrinsics.asyncex.start_call", false], [42, "module-bittensor.core.extrinsics.asyncex.sudo", false], [43, "module-bittensor.core.extrinsics.asyncex.take", false], [44, "module-bittensor.core.extrinsics.asyncex.transfer", false], [45, "module-bittensor.core.extrinsics.asyncex.unstaking", false], [46, "module-bittensor.core.extrinsics.asyncex.utils", false], [47, "module-bittensor.core.extrinsics.asyncex.weights", false], [48, "module-bittensor.core.extrinsics.children", false], [49, "module-bittensor.core.extrinsics.crowdloan", false], [50, "module-bittensor.core.extrinsics", false], [51, "module-bittensor.core.extrinsics.liquidity", false], [52, "module-bittensor.core.extrinsics.mev_shield", false], [53, "module-bittensor.core.extrinsics.move_stake", false], [54, "module-bittensor.core.extrinsics.pallets.admin_utils", false], [55, "module-bittensor.core.extrinsics.pallets.balances", false], [56, "module-bittensor.core.extrinsics.pallets.base", false], [57, "module-bittensor.core.extrinsics.pallets.commitments", false], [58, "module-bittensor.core.extrinsics.pallets.crowdloan", false], [59, "module-bittensor.core.extrinsics.pallets", false], [60, "module-bittensor.core.extrinsics.pallets.mev_shield", false], [61, "module-bittensor.core.extrinsics.pallets.proxy", false], [62, "module-bittensor.core.extrinsics.pallets.subtensor_module", false], [63, "module-bittensor.core.extrinsics.pallets.sudo", false], [64, "module-bittensor.core.extrinsics.pallets.swap", false], [65, "module-bittensor.core.extrinsics.proxy", false], [66, "module-bittensor.core.extrinsics.registration", false], [67, "module-bittensor.core.extrinsics.root", false], [68, "module-bittensor.core.extrinsics.serving", false], [69, "module-bittensor.core.extrinsics.staking", false], [70, "module-bittensor.core.extrinsics.start_call", false], [71, "module-bittensor.core.extrinsics.sudo", false], [72, "module-bittensor.core.extrinsics.take", false], [73, "module-bittensor.core.extrinsics.transfer", false], [74, "module-bittensor.core.extrinsics.unstaking", false], [75, "module-bittensor.core.extrinsics.utils", false], [76, "module-bittensor.core.extrinsics.weights", false], [77, "module-bittensor.core", false], [78, "module-bittensor.core.metagraph", false], [79, "module-bittensor.core.settings", false], [80, "module-bittensor.core.stream", false], [81, "module-bittensor.core.subtensor", false], [82, "module-bittensor.core.synapse", false], [83, "module-bittensor.core.tensor", false], [84, "module-bittensor.core.threadpool", false], [85, "module-bittensor.core.types", false], [86, "module-bittensor.extras.dev_framework.calls", false], [87, "module-bittensor.extras.dev_framework.calls.non_sudo_calls", false], [88, "module-bittensor.extras.dev_framework.calls.pallets", false], [89, "module-bittensor.extras.dev_framework.calls.sudo_calls", false], [90, "module-bittensor.extras.dev_framework", false], [91, "module-bittensor.extras.dev_framework.subnet", false], [92, "module-bittensor.extras.dev_framework.utils", false], [93, "module-bittensor.extras", false], [94, "module-bittensor.extras.subtensor_api.chain", false], [95, "module-bittensor.extras.subtensor_api.commitments", false], [96, "module-bittensor.extras.subtensor_api.crowdloans", false], [97, "module-bittensor.extras.subtensor_api.delegates", false], [98, "module-bittensor.extras.subtensor_api.extrinsics", false], [99, "module-bittensor.extras.subtensor_api", false], [100, "module-bittensor.extras.subtensor_api.metagraphs", false], [101, "module-bittensor.extras.subtensor_api.mev_shield", false], [102, "module-bittensor.extras.subtensor_api.neurons", false], [103, "module-bittensor.extras.subtensor_api.proxy", false], [104, "module-bittensor.extras.subtensor_api.queries", false], [105, "module-bittensor.extras.subtensor_api.staking", false], [106, "module-bittensor.extras.subtensor_api.subnets", false], [107, "module-bittensor.extras.subtensor_api.utils", false], [108, "module-bittensor.extras.subtensor_api.wallets", false], [109, "module-bittensor.extras.timelock", false], [110, "module-bittensor", false], [111, "module-bittensor.utils.axon_utils", false], [112, "module-bittensor.utils.balance", false], [113, "module-bittensor.utils.btlogging.console", false], [114, "module-bittensor.utils.btlogging.defines", false], [115, "module-bittensor.utils.btlogging.format", false], [116, "module-bittensor.utils.btlogging.helpers", false], [117, "module-bittensor.utils.btlogging", false], [118, "module-bittensor.utils.btlogging.levels", false], [119, "module-bittensor.utils.btlogging.loggingmachine", false], [120, "module-bittensor.utils.easy_imports", false], [121, "module-bittensor.utils.formatting", false], [122, "module-bittensor.utils", false], [123, "module-bittensor.utils.liquidity", false], [124, "module-bittensor.utils.networking", false], [125, "module-bittensor.utils.registration.async_pow", false], [126, "module-bittensor.utils.registration", false], [127, "module-bittensor.utils.registration.pow", false], [128, "module-bittensor.utils.registration.register_cuda", false], [129, "module-bittensor.utils.subnets", false], [130, "module-bittensor.utils.version", false], [131, "module-bittensor.utils.weight_utils", false]], "move_stake (bittensor.extras.subtensor_api.extrinsics.extrinsics attribute)": [[98, "bittensor.extras.subtensor_api.extrinsics.Extrinsics.move_stake", false]], "move_stake (bittensor.extras.subtensor_api.staking.staking attribute)": [[105, "bittensor.extras.subtensor_api.staking.Staking.move_stake", false]], "move_stake (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.MOVE_STAKE", false]], "move_stake() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.move_stake", false]], "move_stake() (bittensor.core.extrinsics.pallets.subtensor_module.subtensormodule method)": [[62, "bittensor.core.extrinsics.pallets.subtensor_module.SubtensorModule.move_stake", false]], "move_stake() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.move_stake", false]], "move_stake_extrinsic() (in module bittensor.core.extrinsics.asyncex.move_stake)": [[35, "bittensor.core.extrinsics.asyncex.move_stake.move_stake_extrinsic", false]], "move_stake_extrinsic() (in module bittensor.core.extrinsics.move_stake)": [[53, "bittensor.core.extrinsics.move_stake.move_stake_extrinsic", false]], "moving_price (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[7, "bittensor.core.chain_data.dynamic_info.DynamicInfo.moving_price", false]], "moving_price (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.moving_price", false]], "moving_price (bittensor.core.chain_data.metagraph_info.metagraphinfopool attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfoPool.moving_price", false]], "movingprice (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.MovingPrice", false]], "multisig (in module bittensor.extras.dev_framework.calls.pallets)": [[88, "bittensor.extras.dev_framework.calls.pallets.Multisig", false]], "n (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.n", false]], "n (bittensor.core.metagraph.nontorchmetagraph attribute)": [[78, "bittensor.core.metagraph.NonTorchMetagraph.n", false]], "n (bittensor.core.metagraph.torchmetagraph attribute)": [[78, "bittensor.core.metagraph.TorchMetagraph.n", false]], "name (bittensor.core.chain_data.chain_identity.chainidentity attribute)": [[3, "bittensor.core.chain_data.chain_identity.ChainIdentity.name", false]], "name (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.name", false]], "name (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.Name", false]], "name (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.name", false]], "name (bittensor.core.synapse.synapse attribute)": [[82, "bittensor.core.synapse.Synapse.name", false]], "name (bittensor.extras.dev_framework.calls.non_sudo_calls.set_identity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_IDENTITY.name", false]], "nanoseconds_in_second (in module bittensor.utils.axon_utils)": [[111, "bittensor.utils.axon_utils.NANOSECONDS_IN_SECOND", false]], "nays (bittensor.core.chain_data.proposal_vote_data.proposalvotedata attribute)": [[15, "bittensor.core.chain_data.proposal_vote_data.ProposalVoteData.nays", false]], "netuid (bittensor.core.chain_data.delegate_info.delegatedinfo attribute)": [[5, "bittensor.core.chain_data.delegate_info.DelegatedInfo.netuid", false]], "netuid (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[7, "bittensor.core.chain_data.dynamic_info.DynamicInfo.netuid", false]], "netuid (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.netuid", false]], "netuid (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.Netuid", false]], "netuid (bittensor.core.chain_data.neuron_info.neuroninfo attribute)": [[12, "bittensor.core.chain_data.neuron_info.NeuronInfo.netuid", false]], "netuid (bittensor.core.chain_data.neuron_info_lite.neuroninfolite attribute)": [[13, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite.netuid", false]], "netuid (bittensor.core.chain_data.stake_info.stakeinfo attribute)": [[20, "bittensor.core.chain_data.stake_info.StakeInfo.netuid", false]], "netuid (bittensor.core.chain_data.subnet_info.subnetinfo attribute)": [[23, "bittensor.core.chain_data.subnet_info.SubnetInfo.netuid", false]], "netuid (bittensor.core.chain_data.subnet_state.subnetstate attribute)": [[24, "bittensor.core.chain_data.subnet_state.SubnetState.netuid", false]], "netuid (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.netuid", false]], "netuid (bittensor.core.metagraph.nontorchmetagraph attribute)": [[78, "bittensor.core.metagraph.NonTorchMetagraph.netuid", false]], "netuid (bittensor.core.types.axonservecallparams attribute)": [[85, "bittensor.core.types.AxonServeCallParams.netuid", false]], "netuid (bittensor.core.types.prometheusservecallparams attribute)": [[85, "bittensor.core.types.PrometheusServeCallParams.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.non_sudo_calls.add_liquidity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ADD_LIQUIDITY.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.non_sudo_calls.add_stake attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ADD_STAKE.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.non_sudo_calls.add_stake_limit attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ADD_STAKE_LIMIT.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.non_sudo_calls.associate_evm_key attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ASSOCIATE_EVM_KEY.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.non_sudo_calls.batch_reveal_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.BATCH_REVEAL_WEIGHTS.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.non_sudo_calls.burn_alpha attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.BURN_ALPHA.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.non_sudo_calls.burned_register attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.BURNED_REGISTER.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.non_sudo_calls.commit_crv3_mechanism_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.COMMIT_CRV3_MECHANISM_WEIGHTS.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.non_sudo_calls.commit_mechanism_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.COMMIT_MECHANISM_WEIGHTS.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.non_sudo_calls.commit_timelocked_mechanism_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.COMMIT_TIMELOCKED_MECHANISM_WEIGHTS.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.non_sudo_calls.commit_timelocked_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.COMMIT_TIMELOCKED_WEIGHTS.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.non_sudo_calls.commit_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.COMMIT_WEIGHTS.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.non_sudo_calls.dissolve_network attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.DISSOLVE_NETWORK.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.non_sudo_calls.modify_position attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.MODIFY_POSITION.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.non_sudo_calls.recycle_alpha attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.RECYCLE_ALPHA.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.non_sudo_calls.register attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REGISTER.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.non_sudo_calls.remove_liquidity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_LIQUIDITY.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.non_sudo_calls.remove_stake attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_STAKE.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.non_sudo_calls.remove_stake_full_limit attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_STAKE_FULL_LIMIT.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.non_sudo_calls.remove_stake_limit attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_STAKE_LIMIT.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.non_sudo_calls.reveal_mechanism_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REVEAL_MECHANISM_WEIGHTS.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.non_sudo_calls.reveal_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REVEAL_WEIGHTS.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.non_sudo_calls.root_dissolve_network attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ROOT_DISSOLVE_NETWORK.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.non_sudo_calls.serve_axon attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SERVE_AXON.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.non_sudo_calls.serve_axon_tls attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SERVE_AXON_TLS.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.non_sudo_calls.serve_prometheus attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SERVE_PROMETHEUS.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.non_sudo_calls.set_childkey_take attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_CHILDKEY_TAKE.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.non_sudo_calls.set_children attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_CHILDREN.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.non_sudo_calls.set_coldkey_auto_stake_hotkey attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_COLDKEY_AUTO_STAKE_HOTKEY.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.non_sudo_calls.set_commitment attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_COMMITMENT.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.non_sudo_calls.set_fee_rate attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_FEE_RATE.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.non_sudo_calls.set_mechanism_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_MECHANISM_WEIGHTS.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.non_sudo_calls.set_subnet_identity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_SUBNET_IDENTITY.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.non_sudo_calls.set_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_WEIGHTS.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.non_sudo_calls.start_call attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.START_CALL.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.non_sudo_calls.swap_hotkey attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SWAP_HOTKEY.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.non_sudo_calls.toggle_user_liquidity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.TOGGLE_USER_LIQUIDITY.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.non_sudo_calls.update_symbol attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.UPDATE_SYMBOL.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_activity_cutoff attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ACTIVITY_CUTOFF.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_adjustment_alpha attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ADJUSTMENT_ALPHA.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_adjustment_interval attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ADJUSTMENT_INTERVAL.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_alpha_sigmoid_steepness attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ALPHA_SIGMOID_STEEPNESS.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_alpha_values attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ALPHA_VALUES.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_bonds_moving_average attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_BONDS_MOVING_AVERAGE.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_bonds_penalty attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_BONDS_PENALTY.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_bonds_reset_enabled attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_BONDS_RESET_ENABLED.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_commit_reveal_weights_enabled attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_COMMIT_REVEAL_WEIGHTS_ENABLED.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_commit_reveal_weights_interval attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_COMMIT_REVEAL_WEIGHTS_INTERVAL.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_difficulty attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_DIFFICULTY.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_ema_price_halving_period attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_EMA_PRICE_HALVING_PERIOD.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_immunity_period attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_IMMUNITY_PERIOD.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_kappa attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_KAPPA.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_liquid_alpha_enabled attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_LIQUID_ALPHA_ENABLED.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_max_allowed_uids attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MAX_ALLOWED_UIDS.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_max_allowed_validators attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MAX_ALLOWED_VALIDATORS.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_max_burn attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MAX_BURN.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_max_difficulty attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MAX_DIFFICULTY.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_max_registrations_per_block attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MAX_REGISTRATIONS_PER_BLOCK.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_mechanism_count attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MECHANISM_COUNT.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_mechanism_emission_split attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MECHANISM_EMISSION_SPLIT.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_min_allowed_uids attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MIN_ALLOWED_UIDS.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_min_allowed_weights attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MIN_ALLOWED_WEIGHTS.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_min_burn attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MIN_BURN.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_min_difficulty attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MIN_DIFFICULTY.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_network_pow_registration_allowed attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_NETWORK_POW_REGISTRATION_ALLOWED.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_network_registration_allowed attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_NETWORK_REGISTRATION_ALLOWED.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_owner_immune_neuron_limit attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_OWNER_IMMUNE_NEURON_LIMIT.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_rao_recycled attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_RAO_RECYCLED.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_recycle_or_burn attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_RECYCLE_OR_BURN.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_rho attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_RHO.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_root_claim_threshold attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ROOT_CLAIM_THRESHOLD.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_serving_rate_limit attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SERVING_RATE_LIMIT.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_sn_owner_hotkey attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SN_OWNER_HOTKEY.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_subnet_owner_hotkey attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SUBNET_OWNER_HOTKEY.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_subtoken_enabled attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SUBTOKEN_ENABLED.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_target_registrations_per_interval attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_TARGET_REGISTRATIONS_PER_INTERVAL.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_tempo attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_TEMPO.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_toggle_transfer attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_TOGGLE_TRANSFER.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_weights_set_rate_limit attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_WEIGHTS_SET_RATE_LIMIT.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_weights_version_key attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_WEIGHTS_VERSION_KEY.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_yuma3_enabled attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_YUMA3_ENABLED.netuid", false]], "netuid (bittensor.extras.dev_framework.calls.sudo_calls.sudo_trim_to_max_allowed_uids attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_TRIM_TO_MAX_ALLOWED_UIDS.netuid", false]], "netuid (bittensor.extras.dev_framework.subnet.testsubnet property)": [[91, "bittensor.extras.dev_framework.subnet.TestSubnet.netuid", false]], "netuid (bittensor.extras.dev_framework.utils.activatesubnet attribute)": [[92, "bittensor.extras.dev_framework.utils.ActivateSubnet.netuid", false]], "netuid (bittensor.extras.dev_framework.utils.registerneuron attribute)": [[92, "bittensor.extras.dev_framework.utils.RegisterNeuron.netuid", false]], "netuid (bittensor.utils.balance.balance attribute)": [[112, "bittensor.utils.balance.Balance.netuid", false]], "netuid (bittensor.utils.liquidity.liquidityposition attribute)": [[123, "bittensor.utils.liquidity.LiquidityPosition.netuid", false]], "netuid (in module bittensor.extras.dev_framework.subnet)": [[91, "bittensor.extras.dev_framework.subnet.NETUID", false]], "netuids (bittensor.extras.dev_framework.calls.non_sudo_calls.batch_commit_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.BATCH_COMMIT_WEIGHTS.netuids", false]], "netuids (bittensor.extras.dev_framework.calls.non_sudo_calls.batch_set_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.BATCH_SET_WEIGHTS.netuids", false]], "network (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.network", false]], "network (bittensor.core.types.subtensormixin attribute)": [[85, "bittensor.core.types.SubtensorMixin.network", false]], "network (bittensor.extras.subtensor_api.subtensorapi attribute)": [[99, "bittensor.extras.subtensor_api.SubtensorApi.network", false]], "network_explorer_map (in module bittensor.core.settings)": [[79, "bittensor.core.settings.NETWORK_EXPLORER_MAP", false]], "network_map (in module bittensor.core.settings)": [[79, "bittensor.core.settings.NETWORK_MAP", false]], "network_registered_at (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[7, "bittensor.core.chain_data.dynamic_info.DynamicInfo.network_registered_at", false]], "network_registered_at (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.network_registered_at", false]], "network_registered_at (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.network_registered_at", false]], "networkregisteredat (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.NetworkRegisteredAt", false]], "networks (in module bittensor.core.settings)": [[79, "bittensor.core.settings.NETWORKS", false]], "neuron_for_uid (bittensor.extras.subtensor_api.neurons.neurons attribute)": [[102, "bittensor.extras.subtensor_api.neurons.Neurons.neuron_for_uid", false]], "neuron_for_uid() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.neuron_for_uid", false]], "neuron_for_uid() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.neuron_for_uid", false]], "neuroninfo (bittensor.core.chain_data.utils.chaindatatype attribute)": [[25, "bittensor.core.chain_data.utils.ChainDataType.NeuronInfo", false]], "neuroninfo (class in bittensor.core.chain_data.neuron_info)": [[12, "bittensor.core.chain_data.neuron_info.NeuronInfo", false]], "neuroninfolite (bittensor.core.chain_data.utils.chaindatatype attribute)": [[25, "bittensor.core.chain_data.utils.ChainDataType.NeuronInfoLite", false]], "neuroninfolite (class in bittensor.core.chain_data.neuron_info_lite)": [[13, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite", false]], "neurons (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.neurons", false]], "neurons (bittensor.extras.subtensor_api.neurons.neurons attribute)": [[102, "bittensor.extras.subtensor_api.neurons.Neurons.neurons", false]], "neurons (bittensor.extras.subtensor_api.subtensorapi property)": [[99, "bittensor.extras.subtensor_api.SubtensorApi.neurons", false]], "neurons (class in bittensor.extras.subtensor_api.neurons)": [[102, "bittensor.extras.subtensor_api.neurons.Neurons", false]], "neurons() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.neurons", false]], "neurons() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.neurons", false]], "neurons_lite (bittensor.extras.subtensor_api.neurons.neurons attribute)": [[102, "bittensor.extras.subtensor_api.neurons.Neurons.neurons_lite", false]], "neurons_lite() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.neurons_lite", false]], "neurons_lite() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.neurons_lite", false]], "new (bittensor.extras.dev_framework.calls.non_sudo_calls.set_key attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_KEY.new", false]], "new (bittensor.extras.dev_framework.calls.non_sudo_calls.set_whitelist attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_WHITELIST.new", false]], "new_authorities (bittensor.extras.dev_framework.calls.non_sudo_calls.swap_authorities attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SWAP_AUTHORITIES.new_authorities", false]], "new_cap (bittensor.extras.dev_framework.calls.non_sudo_calls.update_cap attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.UPDATE_CAP.new_cap", false]], "new_coldkey (bittensor.core.chain_data.scheduled_coldkey_swap_info.scheduledcoldkeyswapinfo attribute)": [[18, "bittensor.core.chain_data.scheduled_coldkey_swap_info.ScheduledColdkeySwapInfo.new_coldkey", false]], "new_coldkey (bittensor.extras.dev_framework.calls.non_sudo_calls.schedule_swap_coldkey attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE_SWAP_COLDKEY.new_coldkey", false]], "new_coldkey (bittensor.extras.dev_framework.calls.non_sudo_calls.swap_coldkey attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SWAP_COLDKEY.new_coldkey", false]], "new_end (bittensor.extras.dev_framework.calls.non_sudo_calls.update_end attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.UPDATE_END.new_end", false]], "new_free (bittensor.extras.dev_framework.calls.non_sudo_calls.force_set_balance attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_SET_BALANCE.new_free", false]], "new_hotkey (bittensor.extras.dev_framework.calls.non_sudo_calls.swap_hotkey attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SWAP_HOTKEY.new_hotkey", false]], "new_limit (bittensor.extras.dev_framework.calls.non_sudo_calls.set_max_space attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_MAX_SPACE.new_limit", false]], "new_min_contribution (bittensor.extras.dev_framework.calls.non_sudo_calls.update_min_contribution attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.UPDATE_MIN_CONTRIBUTION.new_min_contribution", false]], "new_root_claim_type (bittensor.extras.dev_framework.calls.non_sudo_calls.set_root_claim_type attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_ROOT_CLAIM_TYPE.new_root_claim_type", false]], "new_value (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_num_root_claims attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_NUM_ROOT_CLAIMS.new_value", false]], "new_value (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_root_claim_threshold attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ROOT_CLAIM_THRESHOLD.new_value", false]], "next_authorities (bittensor.extras.dev_framework.calls.non_sudo_calls.schedule_grandpa_change attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE_GRANDPA_CHANGE.next_authorities", false]], "nominationerror": [[29, "bittensor.core.errors.NominationError", false]], "nominators (bittensor.core.chain_data.delegate_info.delegateinfo attribute)": [[5, "bittensor.core.chain_data.delegate_info.DelegateInfo.nominators", false]], "nominators (bittensor.core.chain_data.delegate_info_lite.delegateinfolite attribute)": [[6, "bittensor.core.chain_data.delegate_info_lite.DelegateInfoLite.nominators", false]], "nonassociatedcoldkey": [[29, "bittensor.core.errors.NonAssociatedColdKey", false]], "nonce (bittensor.core.synapse.terminalinfo attribute)": [[82, "bittensor.core.synapse.TerminalInfo.nonce", false]], "nonce (bittensor.extras.dev_framework.calls.non_sudo_calls.call attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CALL.nonce", false]], "nonce (bittensor.extras.dev_framework.calls.non_sudo_calls.create attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CREATE.nonce", false]], "nonce (bittensor.extras.dev_framework.calls.non_sudo_calls.create2 attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CREATE2.nonce", false]], "nonce (bittensor.extras.dev_framework.calls.non_sudo_calls.faucet attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FAUCET.nonce", false]], "nonce (bittensor.extras.dev_framework.calls.non_sudo_calls.register attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REGISTER.nonce", false]], "nonce (bittensor.utils.registration.pow.powsolution attribute)": [[127, "bittensor.utils.registration.pow.POWSolution.nonce", false]], "nonces (bittensor.core.axon.axon attribute)": [[1, "bittensor.core.axon.Axon.nonces", false]], "noncritical (bittensor.core.chain_data.proxy.proxytype attribute)": [[16, "bittensor.core.chain_data.proxy.ProxyType.NonCritical", false]], "nonfungible (bittensor.core.chain_data.proxy.proxytype attribute)": [[16, "bittensor.core.chain_data.proxy.ProxyType.NonFungible", false]], "nontorchmetagraph (class in bittensor.core.metagraph)": [[78, "bittensor.core.metagraph.NonTorchMetagraph", false]], "nontransfer (bittensor.core.chain_data.proxy.proxytype attribute)": [[16, "bittensor.core.chain_data.proxy.ProxyType.NonTransfer", false]], "normalize() (bittensor.core.chain_data.proxy.proxytype class method)": [[16, "bittensor.core.chain_data.proxy.ProxyType.normalize", false]], "normalize() (bittensor.core.chain_data.root_claim.rootclaimtype class method)": [[17, "bittensor.core.chain_data.root_claim.RootClaimType.normalize", false]], "normalize_max_weight() (in module bittensor.utils.weight_utils)": [[131, "bittensor.utils.weight_utils.normalize_max_weight", false]], "notdelegateerror": [[29, "bittensor.core.errors.NotDelegateError", false]], "note_preimage (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.NOTE_PREIMAGE", false]], "note_stalled (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.NOTE_STALLED", false]], "notenoughstaketosetchildkeys": [[29, "bittensor.core.errors.NotEnoughStakeToSetChildkeys", false]], "notregisterederror": [[29, "bittensor.core.errors.NotRegisteredError", false]], "notverifiedexception": [[29, "bittensor.core.errors.NotVerifiedException", false]], "now (bittensor.extras.dev_framework.calls.non_sudo_calls.set attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET.now", false]], "null_entry (in module bittensor.core.threadpool)": [[84, "bittensor.core.threadpool.NULL_ENTRY", false]], "num_uids (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.num_uids", false]], "num_uids (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.num_uids", false]], "number (bittensor.core.types.blockinfo attribute)": [[85, "bittensor.core.types.BlockInfo.number", false]], "numpy() (bittensor.core.tensor.tensor method)": [[83, "bittensor.core.tensor.Tensor.numpy", false]], "numpyortorch (in module bittensor.core.metagraph)": [[78, "bittensor.core.metagraph.NumpyOrTorch", false]], "numuids (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.NumUids", false]], "off() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.off", false]], "old_coldkey (bittensor.core.chain_data.scheduled_coldkey_swap_info.scheduledcoldkeyswapinfo attribute)": [[18, "bittensor.core.chain_data.scheduled_coldkey_swap_info.ScheduledColdkeySwapInfo.old_coldkey", false]], "old_coldkey (bittensor.extras.dev_framework.calls.non_sudo_calls.swap_coldkey attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SWAP_COLDKEY.old_coldkey", false]], "oldest_round (bittensor.extras.dev_framework.calls.non_sudo_calls.set_oldest_stored_round attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_OLDEST_STORED_ROUND.oldest_round", false]], "on() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.on", false]], "operation (bittensor.extras.dev_framework.subnet.call_record attribute)": [[91, "bittensor.extras.dev_framework.subnet.CALL_RECORD.operation", false]], "origin_hotkey (bittensor.extras.dev_framework.calls.non_sudo_calls.move_stake attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.MOVE_STAKE.origin_hotkey", false]], "origin_netuid (bittensor.extras.dev_framework.calls.non_sudo_calls.move_stake attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.MOVE_STAKE.origin_netuid", false]], "origin_netuid (bittensor.extras.dev_framework.calls.non_sudo_calls.swap_stake attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SWAP_STAKE.origin_netuid", false]], "origin_netuid (bittensor.extras.dev_framework.calls.non_sudo_calls.swap_stake_limit attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SWAP_STAKE_LIMIT.origin_netuid", false]], "origin_netuid (bittensor.extras.dev_framework.calls.non_sudo_calls.transfer_stake attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.TRANSFER_STAKE.origin_netuid", false]], "other_signatories (bittensor.extras.dev_framework.calls.non_sudo_calls.approve_as_multi attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.APPROVE_AS_MULTI.other_signatories", false]], "other_signatories (bittensor.extras.dev_framework.calls.non_sudo_calls.as_multi attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.AS_MULTI.other_signatories", false]], "other_signatories (bittensor.extras.dev_framework.calls.non_sudo_calls.as_multi_threshold_1 attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.AS_MULTI_THRESHOLD_1.other_signatories", false]], "other_signatories (bittensor.extras.dev_framework.calls.non_sudo_calls.cancel_as_multi attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CANCEL_AS_MULTI.other_signatories", false]], "other_signatories (bittensor.extras.dev_framework.calls.non_sudo_calls.poke_deposit attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.POKE_DEPOSIT.other_signatories", false]], "owner (bittensor.core.chain_data.proxy.proxytype attribute)": [[16, "bittensor.core.chain_data.proxy.ProxyType.Owner", false]], "owner (bittensor.extras.dev_framework.subnet.testsubnet property)": [[91, "bittensor.extras.dev_framework.subnet.TestSubnet.owner", false]], "owner_coldkey (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[7, "bittensor.core.chain_data.dynamic_info.DynamicInfo.owner_coldkey", false]], "owner_coldkey (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.owner_coldkey", false]], "owner_coldkey (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.owner_coldkey", false]], "owner_hotkey (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[7, "bittensor.core.chain_data.dynamic_info.DynamicInfo.owner_hotkey", false]], "owner_hotkey (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.owner_hotkey", false]], "owner_hotkey (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.owner_hotkey", false]], "owner_ss58 (bittensor.core.chain_data.delegate_info.delegateinfobase attribute)": [[5, "bittensor.core.chain_data.delegate_info.DelegateInfoBase.owner_ss58", false]], "owner_ss58 (bittensor.core.chain_data.delegate_info_lite.delegateinfolite attribute)": [[6, "bittensor.core.chain_data.delegate_info_lite.DelegateInfoLite.owner_ss58", false]], "owner_ss58 (bittensor.core.chain_data.subnet_info.subnetinfo attribute)": [[23, "bittensor.core.chain_data.subnet_info.SubnetInfo.owner_ss58", false]], "ownercoldkey (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.OwnerColdkey", false]], "ownerhotkey (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.OwnerHotkey", false]], "pages (bittensor.extras.dev_framework.calls.non_sudo_calls.set_heap_pages attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_HEAP_PAGES.pages", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.add_liquidity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ADD_LIQUIDITY.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.add_proxy attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ADD_PROXY.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.add_stake attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ADD_STAKE.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.add_stake_limit attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ADD_STAKE_LIMIT.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.announce attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ANNOUNCE.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.apply_authorized_upgrade attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.APPLY_AUTHORIZED_UPGRADE.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.approve_as_multi attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.APPROVE_AS_MULTI.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.as_derivative attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.AS_DERIVATIVE.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.as_multi attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.AS_MULTI.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.as_multi_threshold_1 attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.AS_MULTI_THRESHOLD_1.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.associate_evm_key attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ASSOCIATE_EVM_KEY.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.authorize_upgrade attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.AUTHORIZE_UPGRADE.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.authorize_upgrade_without_checks attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.AUTHORIZE_UPGRADE_WITHOUT_CHECKS.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.batch attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.BATCH.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.batch_all attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.BATCH_ALL.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.batch_commit_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.BATCH_COMMIT_WEIGHTS.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.batch_reveal_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.BATCH_REVEAL_WEIGHTS.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.batch_set_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.BATCH_SET_WEIGHTS.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.burn attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.BURN.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.burn_alpha attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.BURN_ALPHA.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.burned_register attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.BURNED_REGISTER.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.call attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CALL.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.cancel attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CANCEL.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.cancel_as_multi attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CANCEL_AS_MULTI.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.cancel_named attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CANCEL_NAMED.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.cancel_retry attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CANCEL_RETRY.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.cancel_retry_named attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CANCEL_RETRY_NAMED.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.claim_root attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CLAIM_ROOT.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.clear_identity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CLEAR_IDENTITY.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.commit_crv3_mechanism_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.COMMIT_CRV3_MECHANISM_WEIGHTS.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.commit_mechanism_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.COMMIT_MECHANISM_WEIGHTS.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.commit_timelocked_mechanism_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.COMMIT_TIMELOCKED_MECHANISM_WEIGHTS.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.commit_timelocked_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.COMMIT_TIMELOCKED_WEIGHTS.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.commit_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.COMMIT_WEIGHTS.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.contribute attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CONTRIBUTE.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.create attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CREATE.pallet", false], [87, "id1", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.create2 attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CREATE2.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.create_pure attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CREATE_PURE.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.decrease_take attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.DECREASE_TAKE.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.disable_whitelist attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.DISABLE_WHITELIST.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.dispatch_as attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.DISPATCH_AS.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.dispatch_as_fallible attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.DISPATCH_AS_FALLIBLE.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.dissolve attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.DISSOLVE.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.dissolve_network attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.DISSOLVE_NETWORK.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.ensure_updated attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ENSURE_UPDATED.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.enter attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ENTER.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.extend attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.EXTEND.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.faucet attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FAUCET.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.finalize attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FINALIZE.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.force_adjust_total_issuance attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_ADJUST_TOTAL_ISSUANCE.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.force_batch attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_BATCH.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.force_enter attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_ENTER.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.force_exit attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_EXIT.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.force_extend attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_EXTEND.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.force_release_deposit attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_RELEASE_DEPOSIT.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.force_set_balance attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_SET_BALANCE.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.force_slash_deposit attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_SLASH_DEPOSIT.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.force_transfer attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_TRANSFER.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.force_unreserve attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_UNRESERVE.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.if_else attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.IF_ELSE.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.increase_take attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.INCREASE_TAKE.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.kill_prefix attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.KILL_PREFIX.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.kill_pure attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.KILL_PURE.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.kill_storage attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.KILL_STORAGE.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.modify_position attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.MODIFY_POSITION.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.move_stake attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.MOVE_STAKE.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.note_preimage attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.NOTE_PREIMAGE.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.note_stalled attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.NOTE_STALLED.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.poke_deposit attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.POKE_DEPOSIT.pallet", false], [87, "id4", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.proxy attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.PROXY.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.proxy_announced attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.PROXY_ANNOUNCED.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.recycle_alpha attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.RECYCLE_ALPHA.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.refund attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REFUND.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.register attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REGISTER.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.register_leased_network attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REGISTER_LEASED_NETWORK.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.register_network attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REGISTER_NETWORK.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.register_network_with_identity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REGISTER_NETWORK_WITH_IDENTITY.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.reject_announcement attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REJECT_ANNOUNCEMENT.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.release_deposit attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.RELEASE_DEPOSIT.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.remark attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMARK.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.remark_with_event attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMARK_WITH_EVENT.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.remove_announcement attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_ANNOUNCEMENT.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.remove_key attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_KEY.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.remove_liquidity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_LIQUIDITY.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.remove_proxies attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_PROXIES.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.remove_proxy attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_PROXY.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.remove_stake attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_STAKE.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.remove_stake_full_limit attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_STAKE_FULL_LIMIT.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.remove_stake_limit attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_STAKE_LIMIT.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.report_equivocation attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REPORT_EQUIVOCATION.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.report_equivocation_unsigned attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REPORT_EQUIVOCATION_UNSIGNED.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.request_preimage attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REQUEST_PREIMAGE.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.reveal_mechanism_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REVEAL_MECHANISM_WEIGHTS.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.reveal_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REVEAL_WEIGHTS.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.root_dissolve_network attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ROOT_DISSOLVE_NETWORK.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.root_register attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ROOT_REGISTER.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.schedule attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.schedule_after attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE_AFTER.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.schedule_grandpa_change attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE_GRANDPA_CHANGE.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.schedule_named attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE_NAMED.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.schedule_named_after attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE_NAMED_AFTER.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.schedule_swap_coldkey attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE_SWAP_COLDKEY.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.serve_axon attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SERVE_AXON.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.serve_axon_tls attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SERVE_AXON_TLS.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.serve_prometheus attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SERVE_PROMETHEUS.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_base_fee_per_gas attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_BASE_FEE_PER_GAS.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_beacon_config attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_BEACON_CONFIG.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_childkey_take attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_CHILDKEY_TAKE.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_children attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_CHILDREN.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_code attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_CODE.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_code_without_checks attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_CODE_WITHOUT_CHECKS.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_coldkey_auto_stake_hotkey attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_COLDKEY_AUTO_STAKE_HOTKEY.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_commitment attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_COMMITMENT.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_elasticity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_ELASTICITY.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_fee_rate attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_FEE_RATE.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_heap_pages attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_HEAP_PAGES.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_identity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_IDENTITY.pallet", false], [87, "id7", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_key attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_KEY.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_max_space attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_MAX_SPACE.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_mechanism_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_MECHANISM_WEIGHTS.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_oldest_stored_round attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_OLDEST_STORED_ROUND.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_pending_childkey_cooldown attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_PENDING_CHILDKEY_COOLDOWN.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_retry attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_RETRY.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_retry_named attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_RETRY_NAMED.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_root_claim_type attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_ROOT_CLAIM_TYPE.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_storage attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_STORAGE.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_subnet_identity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_SUBNET_IDENTITY.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_WEIGHTS.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_whitelist attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_WHITELIST.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.start_call attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.START_CALL.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.sudo attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SUDO.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.swap_authorities attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SWAP_AUTHORITIES.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.swap_coldkey attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SWAP_COLDKEY.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.swap_hotkey attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SWAP_HOTKEY.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.swap_stake attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SWAP_STAKE.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.swap_stake_limit attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SWAP_STAKE_LIMIT.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.terminate_lease attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.TERMINATE_LEASE.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.toggle_user_liquidity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.TOGGLE_USER_LIQUIDITY.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.transact attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.TRANSACT.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.transfer_all attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.TRANSFER_ALL.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.transfer_allow_death attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.TRANSFER_ALLOW_DEATH.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.transfer_keep_alive attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.TRANSFER_KEEP_ALIVE.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.transfer_stake attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.TRANSFER_STAKE.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.try_associate_hotkey attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.TRY_ASSOCIATE_HOTKEY.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.unnote_preimage attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.UNNOTE_PREIMAGE.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.unrequest_preimage attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.UNREQUEST_PREIMAGE.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.unstake_all attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.UNSTAKE_ALL.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.unstake_all_alpha attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.UNSTAKE_ALL_ALPHA.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.update_cap attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.UPDATE_CAP.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.update_end attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.UPDATE_END.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.update_min_contribution attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.UPDATE_MIN_CONTRIBUTION.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.update_symbol attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.UPDATE_SYMBOL.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.upgrade_accounts attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.UPGRADE_ACCOUNTS.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.with_weight attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.WITH_WEIGHT.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.withdraw attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.WITHDRAW.pallet", false], [87, "id10", false]], "pallet (bittensor.extras.dev_framework.calls.non_sudo_calls.write_pulse attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.WRITE_PULSE.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_as attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_AS.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_activity_cutoff attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ACTIVITY_CUTOFF.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_adjustment_alpha attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ADJUSTMENT_ALPHA.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_adjustment_interval attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ADJUSTMENT_INTERVAL.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_admin_freeze_window attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ADMIN_FREEZE_WINDOW.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_alpha_sigmoid_steepness attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ALPHA_SIGMOID_STEEPNESS.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_alpha_values attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ALPHA_VALUES.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_bonds_moving_average attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_BONDS_MOVING_AVERAGE.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_bonds_penalty attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_BONDS_PENALTY.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_bonds_reset_enabled attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_BONDS_RESET_ENABLED.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_ck_burn attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_CK_BURN.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_coldkey_swap_schedule_duration attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_COLDKEY_SWAP_SCHEDULE_DURATION.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_commit_reveal_version attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_COMMIT_REVEAL_VERSION.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_commit_reveal_weights_enabled attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_COMMIT_REVEAL_WEIGHTS_ENABLED.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_commit_reveal_weights_interval attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_COMMIT_REVEAL_WEIGHTS_INTERVAL.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_default_take attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_DEFAULT_TAKE.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_difficulty attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_DIFFICULTY.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_dissolve_network_schedule_duration attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_DISSOLVE_NETWORK_SCHEDULE_DURATION.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_ema_price_halving_period attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_EMA_PRICE_HALVING_PERIOD.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_evm_chain_id attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_EVM_CHAIN_ID.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_immunity_period attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_IMMUNITY_PERIOD.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_kappa attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_KAPPA.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_liquid_alpha_enabled attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_LIQUID_ALPHA_ENABLED.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_lock_reduction_interval attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_LOCK_REDUCTION_INTERVAL.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_max_allowed_uids attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MAX_ALLOWED_UIDS.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_max_allowed_validators attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MAX_ALLOWED_VALIDATORS.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_max_burn attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MAX_BURN.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_max_childkey_take attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MAX_CHILDKEY_TAKE.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_max_difficulty attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MAX_DIFFICULTY.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_max_registrations_per_block attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MAX_REGISTRATIONS_PER_BLOCK.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_mechanism_count attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MECHANISM_COUNT.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_mechanism_emission_split attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MECHANISM_EMISSION_SPLIT.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_min_allowed_uids attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MIN_ALLOWED_UIDS.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_min_allowed_weights attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MIN_ALLOWED_WEIGHTS.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_min_burn attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MIN_BURN.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_min_childkey_take attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MIN_CHILDKEY_TAKE.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_min_delegate_take attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MIN_DELEGATE_TAKE.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_min_difficulty attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MIN_DIFFICULTY.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_network_immunity_period attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_NETWORK_IMMUNITY_PERIOD.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_network_min_lock_cost attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_NETWORK_MIN_LOCK_COST.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_network_pow_registration_allowed attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_NETWORK_POW_REGISTRATION_ALLOWED.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_network_rate_limit attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_NETWORK_RATE_LIMIT.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_network_registration_allowed attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_NETWORK_REGISTRATION_ALLOWED.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_nominator_min_required_stake attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_NOMINATOR_MIN_REQUIRED_STAKE.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_num_root_claims attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_NUM_ROOT_CLAIMS.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_owner_hparam_rate_limit attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_OWNER_HPARAM_RATE_LIMIT.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_owner_immune_neuron_limit attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_OWNER_IMMUNE_NEURON_LIMIT.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_rao_recycled attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_RAO_RECYCLED.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_recycle_or_burn attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_RECYCLE_OR_BURN.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_rho attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_RHO.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_root_claim_threshold attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ROOT_CLAIM_THRESHOLD.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_serving_rate_limit attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SERVING_RATE_LIMIT.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_sn_owner_hotkey attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SN_OWNER_HOTKEY.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_stake_threshold attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_STAKE_THRESHOLD.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_subnet_limit attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SUBNET_LIMIT.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_subnet_moving_alpha attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SUBNET_MOVING_ALPHA.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_subnet_owner_cut attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SUBNET_OWNER_CUT.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_subnet_owner_hotkey attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SUBNET_OWNER_HOTKEY.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_subtoken_enabled attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SUBTOKEN_ENABLED.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_target_registrations_per_interval attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_TARGET_REGISTRATIONS_PER_INTERVAL.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_tempo attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_TEMPO.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_toggle_transfer attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_TOGGLE_TRANSFER.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_total_issuance attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_TOTAL_ISSUANCE.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_tx_childkey_take_rate_limit attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_TX_CHILDKEY_TAKE_RATE_LIMIT.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_tx_delegate_take_rate_limit attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_TX_DELEGATE_TAKE_RATE_LIMIT.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_tx_rate_limit attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_TX_RATE_LIMIT.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_weights_set_rate_limit attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_WEIGHTS_SET_RATE_LIMIT.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_weights_version_key attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_WEIGHTS_VERSION_KEY.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_yuma3_enabled attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_YUMA3_ENABLED.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_toggle_evm_precompile attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_TOGGLE_EVM_PRECOMPILE.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_trim_to_max_allowed_uids attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_TRIM_TO_MAX_ALLOWED_UIDS.pallet", false]], "pallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_unchecked_weight attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_UNCHECKED_WEIGHT.pallet", false]], "parse_headers_to_inputs() (bittensor.core.synapse.synapse class method)": [[82, "id4", false]], "parse_headers_to_inputs() (bittensor.core.synapse.synapse method)": [[82, "bittensor.core.synapse.Synapse.parse_headers_to_inputs", false]], "pending_alpha_emission (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[7, "bittensor.core.chain_data.dynamic_info.DynamicInfo.pending_alpha_emission", false]], "pending_alpha_emission (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.pending_alpha_emission", false]], "pending_alpha_emission (bittensor.core.chain_data.metagraph_info.metagraphinfoemissions attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfoEmissions.pending_alpha_emission", false]], "pending_root_emission (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[7, "bittensor.core.chain_data.dynamic_info.DynamicInfo.pending_root_emission", false]], "pending_root_emission (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.pending_root_emission", false]], "pending_root_emission (bittensor.core.chain_data.metagraph_info.metagraphinfoemissions attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfoEmissions.pending_root_emission", false]], "pendingalphaemission (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.PendingAlphaEmission", false]], "pendingrootemission (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.PendingRootEmission", false]], "period (bittensor.extras.dev_framework.calls.non_sudo_calls.set_retry attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_RETRY.period", false]], "period (bittensor.extras.dev_framework.calls.non_sudo_calls.set_retry_named attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_RETRY_NAMED.period", false]], "period (bittensor.extras.dev_framework.subnet.testsubnet attribute)": [[91, "bittensor.extras.dev_framework.subnet.TestSubnet.period", false]], "pipaddress (in module bittensor.core.settings)": [[79, "bittensor.core.settings.PIPADDRESS", false]], "placeholder1 (bittensor.core.chain_data.axon_info.axoninfo attribute)": [[2, "bittensor.core.chain_data.axon_info.AxonInfo.placeholder1", false]], "placeholder1 (bittensor.core.types.axonservecallparams attribute)": [[85, "bittensor.core.types.AxonServeCallParams.placeholder1", false]], "placeholder1 (bittensor.extras.dev_framework.calls.non_sudo_calls.serve_axon attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SERVE_AXON.placeholder1", false]], "placeholder1 (bittensor.extras.dev_framework.calls.non_sudo_calls.serve_axon_tls attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SERVE_AXON_TLS.placeholder1", false]], "placeholder2 (bittensor.core.chain_data.axon_info.axoninfo attribute)": [[2, "bittensor.core.chain_data.axon_info.AxonInfo.placeholder2", false]], "placeholder2 (bittensor.core.types.axonservecallparams attribute)": [[85, "bittensor.core.types.AxonServeCallParams.placeholder2", false]], "placeholder2 (bittensor.extras.dev_framework.calls.non_sudo_calls.serve_axon attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SERVE_AXON.placeholder2", false]], "placeholder2 (bittensor.extras.dev_framework.calls.non_sudo_calls.serve_axon_tls attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SERVE_AXON_TLS.placeholder2", false]], "poke_deposit (bittensor.extras.subtensor_api.proxy.proxy attribute)": [[103, "bittensor.extras.subtensor_api.proxy.Proxy.poke_deposit", false]], "poke_deposit (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.POKE_DEPOSIT", false], [87, "id3", false]], "poke_deposit() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.poke_deposit", false]], "poke_deposit() (bittensor.core.extrinsics.pallets.proxy.proxy method)": [[61, "bittensor.core.extrinsics.pallets.proxy.Proxy.poke_deposit", false]], "poke_deposit() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.poke_deposit", false]], "poke_deposit_extrinsic() (in module bittensor.core.extrinsics.asyncex.proxy)": [[36, "bittensor.core.extrinsics.asyncex.proxy.poke_deposit_extrinsic", false]], "poke_deposit_extrinsic() (in module bittensor.core.extrinsics.proxy)": [[65, "bittensor.core.extrinsics.proxy.poke_deposit_extrinsic", false]], "pool (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.pool", false]], "port (bittensor.core.axon.axon attribute)": [[1, "bittensor.core.axon.Axon.port", false]], "port (bittensor.core.chain_data.axon_info.axoninfo attribute)": [[2, "bittensor.core.chain_data.axon_info.AxonInfo.port", false]], "port (bittensor.core.chain_data.prometheus_info.prometheusinfo attribute)": [[14, "bittensor.core.chain_data.prometheus_info.PrometheusInfo.port", false]], "port (bittensor.core.synapse.terminalinfo attribute)": [[82, "bittensor.core.synapse.TerminalInfo.port", false]], "port (bittensor.core.types.axonservecallparams attribute)": [[85, "bittensor.core.types.AxonServeCallParams.port", false]], "port (bittensor.core.types.prometheusservecallparams attribute)": [[85, "bittensor.core.types.PrometheusServeCallParams.port", false]], "port (bittensor.extras.dev_framework.calls.non_sudo_calls.serve_axon attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SERVE_AXON.port", false]], "port (bittensor.extras.dev_framework.calls.non_sudo_calls.serve_axon_tls attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SERVE_AXON_TLS.port", false]], "port (bittensor.extras.dev_framework.calls.non_sudo_calls.serve_prometheus attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SERVE_PROMETHEUS.port", false]], "position_id (bittensor.extras.dev_framework.calls.non_sudo_calls.modify_position attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.MODIFY_POSITION.position_id", false]], "position_id (bittensor.extras.dev_framework.calls.non_sudo_calls.remove_liquidity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_LIQUIDITY.position_id", false]], "postprocessexception": [[29, "bittensor.core.errors.PostProcessException", false]], "pow_registration_allowed (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.pow_registration_allowed", false]], "pow_registration_allowed (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.pow_registration_allowed", false]], "powregistrationallowed (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.PowRegistrationAllowed", false]], "powsolution (class in bittensor.utils.registration.pow)": [[127, "bittensor.utils.registration.pow.POWSolution", false]], "precompile_id (bittensor.extras.dev_framework.calls.sudo_calls.sudo_toggle_evm_precompile attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_TOGGLE_EVM_PRECOMPILE.precompile_id", false]], "prefix (bittensor.extras.dev_framework.calls.non_sudo_calls.kill_prefix attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.KILL_PREFIX.prefix", false]], "preimage (in module bittensor.extras.dev_framework.calls.pallets)": [[88, "bittensor.extras.dev_framework.calls.pallets.Preimage", false]], "prepare_synapse() (bittensor.utils.subnets.subnetsapi method)": [[129, "bittensor.utils.subnets.SubnetsAPI.prepare_synapse", false]], "preprocess() (bittensor.core.axon.axonmiddleware method)": [[1, "bittensor.core.axon.AxonMiddleware.preprocess", false]], "preprocess_synapse_for_request() (bittensor.core.dendrite.dendrite method)": [[28, "bittensor.core.dendrite.Dendrite.preprocess_synapse_for_request", false]], "preprocess_synapse_for_request() (bittensor.core.dendrite.dendritemixin method)": [[28, "bittensor.core.dendrite.DendriteMixin.preprocess_synapse_for_request", false], [28, "id8", false]], "price (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[7, "bittensor.core.chain_data.dynamic_info.DynamicInfo.price", false]], "price_high (bittensor.utils.liquidity.liquidityposition attribute)": [[123, "bittensor.utils.liquidity.LiquidityPosition.price_high", false]], "price_low (bittensor.utils.liquidity.liquidityposition attribute)": [[123, "bittensor.utils.liquidity.LiquidityPosition.price_low", false]], "price_step (in module bittensor.utils.liquidity)": [[123, "bittensor.utils.liquidity.PRICE_STEP", false]], "price_to_tick() (in module bittensor.utils.liquidity)": [[123, "bittensor.utils.liquidity.price_to_tick", false]], "priority (bittensor.extras.dev_framework.calls.non_sudo_calls.schedule attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE.priority", false]], "priority (bittensor.extras.dev_framework.calls.non_sudo_calls.schedule_after attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE_AFTER.priority", false]], "priority (bittensor.extras.dev_framework.calls.non_sudo_calls.schedule_named attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE_NAMED.priority", false]], "priority (bittensor.extras.dev_framework.calls.non_sudo_calls.schedule_named_after attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE_NAMED_AFTER.priority", false]], "priority() (bittensor.core.axon.axonmiddleware method)": [[1, "bittensor.core.axon.AxonMiddleware.priority", false]], "priority_fns (bittensor.core.axon.axon attribute)": [[1, "bittensor.core.axon.Axon.priority_fns", false]], "priorityexception": [[29, "bittensor.core.errors.PriorityException", false]], "prioritythreadpoolexecutor (class in bittensor.core.threadpool)": [[84, "bittensor.core.threadpool.PriorityThreadPoolExecutor", false]], "process_error_message() (bittensor.core.dendrite.dendritemixin method)": [[28, "bittensor.core.dendrite.DendriteMixin.process_error_message", false]], "process_nested() (in module bittensor.core.chain_data.metagraph_info)": [[11, "bittensor.core.chain_data.metagraph_info.process_nested", false]], "process_responses() (bittensor.utils.subnets.subnetsapi method)": [[129, "bittensor.utils.subnets.SubnetsAPI.process_responses", false]], "process_server_response() (bittensor.core.dendrite.dendrite method)": [[28, "bittensor.core.dendrite.Dendrite.process_server_response", false]], "process_server_response() (bittensor.core.dendrite.dendritemixin method)": [[28, "bittensor.core.dendrite.DendriteMixin.process_server_response", false], [28, "id9", false]], "process_stake_data() (in module bittensor.core.chain_data.utils)": [[25, "bittensor.core.chain_data.utils.process_stake_data", false]], "process_streaming_response() (bittensor.core.stream.streamingsynapse method)": [[80, "bittensor.core.stream.StreamingSynapse.process_streaming_response", false]], "process_time (bittensor.core.synapse.terminalinfo attribute)": [[82, "bittensor.core.synapse.TerminalInfo.process_time", false]], "process_weights() (in module bittensor.utils.weight_utils)": [[131, "bittensor.utils.weight_utils.process_weights", false]], "process_weights_for_netuid() (in module bittensor.utils.weight_utils)": [[131, "bittensor.utils.weight_utils.process_weights_for_netuid", false]], "prometheus_info (bittensor.core.chain_data.neuron_info.neuroninfo attribute)": [[12, "bittensor.core.chain_data.neuron_info.NeuronInfo.prometheus_info", false]], "prometheus_info (bittensor.core.chain_data.neuron_info_lite.neuroninfolite attribute)": [[13, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite.prometheus_info", false]], "prometheusinfo (class in bittensor.core.chain_data.prometheus_info)": [[14, "bittensor.core.chain_data.prometheus_info.PrometheusInfo", false]], "prometheusservecallparams (class in bittensor.core.types)": [[85, "bittensor.core.types.PrometheusServeCallParams", false]], "proportionoverflow": [[29, "bittensor.core.errors.ProportionOverflow", false]], "proposalcalldata (in module bittensor.core.chain_data)": [[8, "bittensor.core.chain_data.ProposalCallData", false]], "proposalvotedata (class in bittensor.core.chain_data.proposal_vote_data)": [[15, "bittensor.core.chain_data.proposal_vote_data.ProposalVoteData", false]], "protocol (bittensor.core.chain_data.axon_info.axoninfo attribute)": [[2, "bittensor.core.chain_data.axon_info.AxonInfo.protocol", false]], "protocol (bittensor.core.chain_data.ip_info.ipinfo attribute)": [[10, "bittensor.core.chain_data.ip_info.IPInfo.protocol", false]], "protocol (bittensor.core.types.axonservecallparams attribute)": [[85, "bittensor.core.types.AxonServeCallParams.protocol", false]], "protocol (bittensor.extras.dev_framework.calls.non_sudo_calls.serve_axon attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SERVE_AXON.protocol", false]], "protocol (bittensor.extras.dev_framework.calls.non_sudo_calls.serve_axon_tls attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SERVE_AXON_TLS.protocol", false]], "proxies (bittensor.extras.subtensor_api.subtensorapi property)": [[99, "bittensor.extras.subtensor_api.SubtensorApi.proxies", false]], "proxy (bittensor.extras.subtensor_api.proxy.proxy attribute)": [[103, "bittensor.extras.subtensor_api.proxy.Proxy.proxy", false]], "proxy (class in bittensor.core.extrinsics.pallets.proxy)": [[61, "bittensor.core.extrinsics.pallets.proxy.Proxy", false]], "proxy (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.PROXY", false]], "proxy (class in bittensor.extras.subtensor_api.proxy)": [[103, "bittensor.extras.subtensor_api.proxy.Proxy", false]], "proxy (in module bittensor.extras.dev_framework.calls.pallets)": [[88, "bittensor.extras.dev_framework.calls.pallets.Proxy", false]], "proxy() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.proxy", false]], "proxy() (bittensor.core.extrinsics.pallets.proxy.proxy method)": [[61, "bittensor.core.extrinsics.pallets.proxy.Proxy.proxy", false]], "proxy() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.proxy", false]], "proxy_announced (bittensor.extras.subtensor_api.proxy.proxy attribute)": [[103, "bittensor.extras.subtensor_api.proxy.Proxy.proxy_announced", false]], "proxy_announced (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.PROXY_ANNOUNCED", false]], "proxy_announced() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.proxy_announced", false]], "proxy_announced() (bittensor.core.extrinsics.pallets.proxy.proxy method)": [[61, "bittensor.core.extrinsics.pallets.proxy.Proxy.proxy_announced", false]], "proxy_announced() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.proxy_announced", false]], "proxy_announced_extrinsic() (in module bittensor.core.extrinsics.asyncex.proxy)": [[36, "bittensor.core.extrinsics.asyncex.proxy.proxy_announced_extrinsic", false]], "proxy_announced_extrinsic() (in module bittensor.core.extrinsics.proxy)": [[65, "bittensor.core.extrinsics.proxy.proxy_announced_extrinsic", false]], "proxy_extrinsic() (in module bittensor.core.extrinsics.asyncex.proxy)": [[36, "bittensor.core.extrinsics.asyncex.proxy.proxy_extrinsic", false]], "proxy_extrinsic() (in module bittensor.core.extrinsics.proxy)": [[65, "bittensor.core.extrinsics.proxy.proxy_extrinsic", false]], "proxy_type (bittensor.core.chain_data.proxy.proxyinfo attribute)": [[16, "bittensor.core.chain_data.proxy.ProxyInfo.proxy_type", false]], "proxy_type (bittensor.extras.dev_framework.calls.non_sudo_calls.add_proxy attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ADD_PROXY.proxy_type", false]], "proxy_type (bittensor.extras.dev_framework.calls.non_sudo_calls.create_pure attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CREATE_PURE.proxy_type", false]], "proxy_type (bittensor.extras.dev_framework.calls.non_sudo_calls.kill_pure attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.KILL_PURE.proxy_type", false]], "proxy_type (bittensor.extras.dev_framework.calls.non_sudo_calls.remove_proxy attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_PROXY.proxy_type", false]], "proxyannouncementinfo (class in bittensor.core.chain_data.proxy)": [[16, "bittensor.core.chain_data.proxy.ProxyAnnouncementInfo", false]], "proxyconstants (class in bittensor.core.chain_data.proxy)": [[16, "bittensor.core.chain_data.proxy.ProxyConstants", false]], "proxydepositbase (bittensor.core.chain_data.proxy.proxyconstants attribute)": [[16, "bittensor.core.chain_data.proxy.ProxyConstants.ProxyDepositBase", false]], "proxydepositfactor (bittensor.core.chain_data.proxy.proxyconstants attribute)": [[16, "bittensor.core.chain_data.proxy.ProxyConstants.ProxyDepositFactor", false]], "proxyinfo (class in bittensor.core.chain_data.proxy)": [[16, "bittensor.core.chain_data.proxy.ProxyInfo", false]], "proxytype (class in bittensor.core.chain_data.proxy)": [[16, "bittensor.core.chain_data.proxy.ProxyType", false]], "pruning_score (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.pruning_score", false]], "pruning_score (bittensor.core.chain_data.neuron_info.neuroninfo attribute)": [[12, "bittensor.core.chain_data.neuron_info.NeuronInfo.pruning_score", false]], "pruning_score (bittensor.core.chain_data.neuron_info_lite.neuroninfolite attribute)": [[13, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite.pruning_score", false]], "pruning_score (bittensor.core.chain_data.subnet_state.subnetstate attribute)": [[24, "bittensor.core.chain_data.subnet_state.SubnetState.pruning_score", false]], "pruning_score (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.pruning_score", false]], "pruningscore (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.PruningScore", false]], "publish_metadata_extrinsic() (in module bittensor.core.extrinsics.asyncex.serving)": [[39, "bittensor.core.extrinsics.asyncex.serving.publish_metadata_extrinsic", false]], "publish_metadata_extrinsic() (in module bittensor.core.extrinsics.serving)": [[68, "bittensor.core.extrinsics.serving.publish_metadata_extrinsic", false]], "pulses_payload (bittensor.extras.dev_framework.calls.non_sudo_calls.write_pulse attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.WRITE_PULSE.pulses_payload", false]], "queries (bittensor.extras.subtensor_api.subtensorapi property)": [[99, "bittensor.extras.subtensor_api.SubtensorApi.queries", false]], "queries (class in bittensor.extras.subtensor_api.queries)": [[104, "bittensor.extras.subtensor_api.queries.Queries", false]], "query() (bittensor.core.dendrite.dendrite method)": [[28, "bittensor.core.dendrite.Dendrite.query", false]], "query() (bittensor.core.dendrite.dendritemixin method)": [[28, "bittensor.core.dendrite.DendriteMixin.query", false], [28, "id11", false]], "query_api() (bittensor.utils.subnets.subnetsapi method)": [[129, "bittensor.utils.subnets.SubnetsAPI.query_api", false]], "query_constant (bittensor.extras.subtensor_api.queries.queries attribute)": [[104, "bittensor.extras.subtensor_api.queries.Queries.query_constant", false]], "query_constant() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.query_constant", false]], "query_constant() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.query_constant", false]], "query_identity (bittensor.extras.subtensor_api.neurons.neurons attribute)": [[102, "bittensor.extras.subtensor_api.neurons.Neurons.query_identity", false]], "query_identity() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.query_identity", false]], "query_identity() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.query_identity", false]], "query_map (bittensor.extras.subtensor_api.queries.queries attribute)": [[104, "bittensor.extras.subtensor_api.queries.Queries.query_map", false]], "query_map() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.query_map", false]], "query_map() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.query_map", false]], "query_map_subtensor (bittensor.extras.subtensor_api.queries.queries attribute)": [[104, "bittensor.extras.subtensor_api.queries.Queries.query_map_subtensor", false]], "query_map_subtensor() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.query_map_subtensor", false]], "query_map_subtensor() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.query_map_subtensor", false]], "query_module (bittensor.extras.subtensor_api.queries.queries attribute)": [[104, "bittensor.extras.subtensor_api.queries.Queries.query_module", false]], "query_module() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.query_module", false]], "query_module() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.query_module", false]], "query_runtime_api (bittensor.extras.subtensor_api.queries.queries attribute)": [[104, "bittensor.extras.subtensor_api.queries.Queries.query_runtime_api", false]], "query_runtime_api() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.query_runtime_api", false]], "query_runtime_api() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.query_runtime_api", false]], "query_subtensor (bittensor.extras.subtensor_api.queries.queries attribute)": [[104, "bittensor.extras.subtensor_api.queries.Queries.query_subtensor", false]], "query_subtensor() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.query_subtensor", false]], "query_subtensor() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.query_subtensor", false]], "r (bittensor.core.metagraph.metagraphmixin property)": [[78, "bittensor.core.metagraph.MetagraphMixin.R", false]], "raise_error (bittensor.extras.dev_framework.subnet.testsubnet attribute)": [[91, "bittensor.extras.dev_framework.subnet.TestSubnet.raise_error", false]], "raised (bittensor.core.chain_data.crowdloan_info.crowdloaninfo attribute)": [[4, "bittensor.core.chain_data.crowdloan_info.CrowdloanInfo.raised", false]], "rank (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.rank", false]], "rank (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.Rank", false]], "rank (bittensor.core.chain_data.neuron_info.neuroninfo attribute)": [[12, "bittensor.core.chain_data.neuron_info.NeuronInfo.rank", false]], "rank (bittensor.core.chain_data.neuron_info_lite.neuroninfolite attribute)": [[13, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite.rank", false]], "rank (bittensor.core.chain_data.subnet_state.subnetstate attribute)": [[24, "bittensor.core.chain_data.subnet_state.SubnetState.rank", false]], "ranks (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.ranks", false]], "ranks (bittensor.core.metagraph.nontorchmetagraph attribute)": [[78, "bittensor.core.metagraph.NonTorchMetagraph.ranks", false]], "ranks (bittensor.core.metagraph.torchmetagraph attribute)": [[78, "bittensor.core.metagraph.TorchMetagraph.ranks", false]], "rao (bittensor.utils.balance.balance attribute)": [[112, "bittensor.utils.balance.Balance.rao", false]], "rao() (in module bittensor.utils.balance)": [[112, "bittensor.utils.balance.rao", false]], "rao_recycled (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_rao_recycled attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_RAO_RECYCLED.rao_recycled", false]], "rao_symbol (in module bittensor.core.settings)": [[79, "bittensor.core.settings.RAO_SYMBOL", false]], "rao_unit (bittensor.utils.balance.balance attribute)": [[112, "bittensor.utils.balance.Balance.rao_unit", false]], "raopertao (in module bittensor.utils)": [[122, "bittensor.utils.RAOPERTAO", false]], "rate (bittensor.extras.dev_framework.calls.non_sudo_calls.set_fee_rate attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_FEE_RATE.rate", false]], "rate_limit (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_network_rate_limit attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_NETWORK_RATE_LIMIT.rate_limit", false]], "read_only (in module bittensor.core.settings)": [[79, "bittensor.core.settings.READ_ONLY", false]], "real (bittensor.core.chain_data.proxy.proxyannouncementinfo attribute)": [[16, "bittensor.core.chain_data.proxy.ProxyAnnouncementInfo.real", false]], "real (bittensor.extras.dev_framework.calls.non_sudo_calls.announce attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ANNOUNCE.real", false]], "real (bittensor.extras.dev_framework.calls.non_sudo_calls.proxy attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.PROXY.real", false]], "real (bittensor.extras.dev_framework.calls.non_sudo_calls.proxy_announced attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.PROXY_ANNOUNCED.real", false]], "real (bittensor.extras.dev_framework.calls.non_sudo_calls.remove_announcement attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_ANNOUNCEMENT.real", false]], "record_log (bittensor.utils.btlogging.loggingmachine.loggingconfig attribute)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingConfig.record_log", false]], "recreate_calls_subpackage() (in module bittensor.extras.dev_framework.calls)": [[86, "bittensor.extras.dev_framework.calls.recreate_calls_subpackage", false]], "recycle (bittensor.extras.subtensor_api.subnets.subnets attribute)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets.recycle", false]], "recycle() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.recycle", false]], "recycle() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.recycle", false]], "recycle_alpha (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.RECYCLE_ALPHA", false]], "recycle_or_burn (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_recycle_or_burn attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_RECYCLE_OR_BURN.recycle_or_burn", false]], "refund (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REFUND", false]], "refund() (bittensor.core.extrinsics.pallets.crowdloan.crowdloan method)": [[58, "bittensor.core.extrinsics.pallets.crowdloan.Crowdloan.refund", false]], "refund_crowdloan (bittensor.extras.subtensor_api.crowdloans.crowdloans attribute)": [[96, "bittensor.extras.subtensor_api.crowdloans.Crowdloans.refund_crowdloan", false]], "refund_crowdloan (bittensor.extras.subtensor_api.extrinsics.extrinsics attribute)": [[98, "bittensor.extras.subtensor_api.extrinsics.Extrinsics.refund_crowdloan", false]], "refund_crowdloan() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.refund_crowdloan", false]], "refund_crowdloan() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.refund_crowdloan", false]], "refund_crowdloan_extrinsic() (in module bittensor.core.extrinsics.asyncex.crowdloan)": [[31, "bittensor.core.extrinsics.asyncex.crowdloan.refund_crowdloan_extrinsic", false]], "refund_crowdloan_extrinsic() (in module bittensor.core.extrinsics.crowdloan)": [[49, "bittensor.core.extrinsics.crowdloan.refund_crowdloan_extrinsic", false]], "refundcontributorslimit (bittensor.core.chain_data.crowdloan_info.crowdloanconstants attribute)": [[4, "bittensor.core.chain_data.crowdloan_info.CrowdloanConstants.RefundContributorsLimit", false]], "register (bittensor.extras.subtensor_api.extrinsics.extrinsics attribute)": [[98, "bittensor.extras.subtensor_api.extrinsics.Extrinsics.register", false]], "register (bittensor.extras.subtensor_api.subnets.subnets attribute)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets.register", false]], "register (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REGISTER", false]], "register() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.register", false]], "register() (bittensor.core.extrinsics.pallets.subtensor_module.subtensormodule method)": [[62, "bittensor.core.extrinsics.pallets.subtensor_module.SubtensorModule.register", false]], "register() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.register", false]], "register_extrinsic() (in module bittensor.core.extrinsics.asyncex.registration)": [[37, "bittensor.core.extrinsics.asyncex.registration.register_extrinsic", false]], "register_extrinsic() (in module bittensor.core.extrinsics.registration)": [[66, "bittensor.core.extrinsics.registration.register_extrinsic", false]], "register_leased_network (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REGISTER_LEASED_NETWORK", false]], "register_network (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REGISTER_NETWORK", false]], "register_network() (bittensor.core.extrinsics.pallets.subtensor_module.subtensormodule method)": [[62, "bittensor.core.extrinsics.pallets.subtensor_module.SubtensorModule.register_network", false]], "register_network_with_identity (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REGISTER_NETWORK_WITH_IDENTITY", false]], "register_neuron (in module bittensor.extras.dev_framework.utils)": [[92, "bittensor.extras.dev_framework.utils.REGISTER_NEURON", false]], "register_primary_logger() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.register_primary_logger", false]], "register_subnet (bittensor.extras.subtensor_api.extrinsics.extrinsics attribute)": [[98, "bittensor.extras.subtensor_api.extrinsics.Extrinsics.register_subnet", false]], "register_subnet (bittensor.extras.subtensor_api.subnets.subnets attribute)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets.register_subnet", false]], "register_subnet (in module bittensor.extras.dev_framework.utils)": [[92, "bittensor.extras.dev_framework.utils.REGISTER_SUBNET", false]], "register_subnet() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.register_subnet", false]], "register_subnet() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.register_subnet", false]], "register_subnet_extrinsic() (in module bittensor.core.extrinsics.asyncex.registration)": [[37, "bittensor.core.extrinsics.asyncex.registration.register_subnet_extrinsic", false]], "register_subnet_extrinsic() (in module bittensor.core.extrinsics.registration)": [[66, "bittensor.core.extrinsics.registration.register_subnet_extrinsic", false]], "registerneuron (class in bittensor.extras.dev_framework.utils)": [[92, "bittensor.extras.dev_framework.utils.RegisterNeuron", false]], "registersubnet (class in bittensor.extras.dev_framework.utils)": [[92, "bittensor.extras.dev_framework.utils.RegisterSubnet", false]], "registration (bittensor.core.chain_data.proxy.proxytype attribute)": [[16, "bittensor.core.chain_data.proxy.ProxyType.Registration", false]], "registration_allowed (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.registration_allowed", false]], "registration_allowed (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.registration_allowed", false]], "registration_allowed (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[21, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.registration_allowed", false]], "registration_allowed (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_network_pow_registration_allowed attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_NETWORK_POW_REGISTRATION_ALLOWED.registration_allowed", false]], "registration_allowed (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_network_registration_allowed attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_NETWORK_REGISTRATION_ALLOWED.registration_allowed", false]], "registrationallowed (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.RegistrationAllowed", false]], "registrationerror": [[29, "bittensor.core.errors.RegistrationError", false]], "registrationnotpermittedonrootsubnet": [[29, "bittensor.core.errors.RegistrationNotPermittedOnRootSubnet", false]], "registrations (bittensor.core.chain_data.delegate_info.delegateinfobase attribute)": [[5, "bittensor.core.chain_data.delegate_info.DelegateInfoBase.registrations", false]], "registrations (bittensor.core.chain_data.delegate_info_lite.delegateinfolite attribute)": [[6, "bittensor.core.chain_data.delegate_info_lite.DelegateInfoLite.registrations", false]], "registrationstatistics (class in bittensor.utils.registration.pow)": [[127, "bittensor.utils.registration.pow.RegistrationStatistics", false]], "registrationstatisticslogger (class in bittensor.utils.registration.pow)": [[127, "bittensor.utils.registration.pow.RegistrationStatisticsLogger", false]], "registry (in module bittensor.extras.dev_framework.calls.pallets)": [[88, "bittensor.extras.dev_framework.calls.pallets.Registry", false]], "reject_announcement (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REJECT_ANNOUNCEMENT", false]], "reject_announcement() (bittensor.core.extrinsics.pallets.proxy.proxy method)": [[61, "bittensor.core.extrinsics.pallets.proxy.Proxy.reject_announcement", false]], "reject_announcement_extrinsic() (in module bittensor.core.extrinsics.asyncex.proxy)": [[36, "bittensor.core.extrinsics.asyncex.proxy.reject_announcement_extrinsic", false]], "reject_announcement_extrinsic() (in module bittensor.core.extrinsics.proxy)": [[65, "bittensor.core.extrinsics.proxy.reject_announcement_extrinsic", false]], "reject_proxy_announcement (bittensor.extras.subtensor_api.proxy.proxy attribute)": [[103, "bittensor.extras.subtensor_api.proxy.Proxy.reject_proxy_announcement", false]], "reject_proxy_announcement() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.reject_proxy_announcement", false]], "reject_proxy_announcement() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.reject_proxy_announcement", false]], "release_deposit (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.RELEASE_DEPOSIT", false]], "remark (bittensor.extras.dev_framework.calls.non_sudo_calls.remark attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMARK.remark", false]], "remark (bittensor.extras.dev_framework.calls.non_sudo_calls.remark_with_event attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMARK_WITH_EVENT.remark", false]], "remark (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMARK", false]], "remark_with_event (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMARK_WITH_EVENT", false]], "remove_announcement (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_ANNOUNCEMENT", false]], "remove_announcement() (bittensor.core.extrinsics.pallets.proxy.proxy method)": [[61, "bittensor.core.extrinsics.pallets.proxy.Proxy.remove_announcement", false]], "remove_announcement_extrinsic() (in module bittensor.core.extrinsics.asyncex.proxy)": [[36, "bittensor.core.extrinsics.asyncex.proxy.remove_announcement_extrinsic", false]], "remove_announcement_extrinsic() (in module bittensor.core.extrinsics.proxy)": [[65, "bittensor.core.extrinsics.proxy.remove_announcement_extrinsic", false]], "remove_key (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_KEY", false]], "remove_liquidity (bittensor.extras.subtensor_api.extrinsics.extrinsics attribute)": [[98, "bittensor.extras.subtensor_api.extrinsics.Extrinsics.remove_liquidity", false]], "remove_liquidity (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_LIQUIDITY", false]], "remove_liquidity() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.remove_liquidity", false]], "remove_liquidity() (bittensor.core.extrinsics.pallets.swap.swap method)": [[64, "bittensor.core.extrinsics.pallets.swap.Swap.remove_liquidity", false]], "remove_liquidity() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.remove_liquidity", false]], "remove_liquidity_extrinsic() (in module bittensor.core.extrinsics.asyncex.liquidity)": [[33, "bittensor.core.extrinsics.asyncex.liquidity.remove_liquidity_extrinsic", false]], "remove_liquidity_extrinsic() (in module bittensor.core.extrinsics.liquidity)": [[51, "bittensor.core.extrinsics.liquidity.remove_liquidity_extrinsic", false]], "remove_proxies (bittensor.extras.subtensor_api.proxy.proxy attribute)": [[103, "bittensor.extras.subtensor_api.proxy.Proxy.remove_proxies", false]], "remove_proxies (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_PROXIES", false]], "remove_proxies() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.remove_proxies", false]], "remove_proxies() (bittensor.core.extrinsics.pallets.proxy.proxy method)": [[61, "bittensor.core.extrinsics.pallets.proxy.Proxy.remove_proxies", false]], "remove_proxies() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.remove_proxies", false]], "remove_proxies_extrinsic() (in module bittensor.core.extrinsics.asyncex.proxy)": [[36, "bittensor.core.extrinsics.asyncex.proxy.remove_proxies_extrinsic", false]], "remove_proxies_extrinsic() (in module bittensor.core.extrinsics.proxy)": [[65, "bittensor.core.extrinsics.proxy.remove_proxies_extrinsic", false]], "remove_proxy (bittensor.extras.subtensor_api.proxy.proxy attribute)": [[103, "bittensor.extras.subtensor_api.proxy.Proxy.remove_proxy", false]], "remove_proxy (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_PROXY", false]], "remove_proxy() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.remove_proxy", false]], "remove_proxy() (bittensor.core.extrinsics.pallets.proxy.proxy method)": [[61, "bittensor.core.extrinsics.pallets.proxy.Proxy.remove_proxy", false]], "remove_proxy() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.remove_proxy", false]], "remove_proxy_announcement (bittensor.extras.subtensor_api.proxy.proxy attribute)": [[103, "bittensor.extras.subtensor_api.proxy.Proxy.remove_proxy_announcement", false]], "remove_proxy_announcement() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.remove_proxy_announcement", false]], "remove_proxy_announcement() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.remove_proxy_announcement", false]], "remove_proxy_extrinsic() (in module bittensor.core.extrinsics.asyncex.proxy)": [[36, "bittensor.core.extrinsics.asyncex.proxy.remove_proxy_extrinsic", false]], "remove_proxy_extrinsic() (in module bittensor.core.extrinsics.proxy)": [[65, "bittensor.core.extrinsics.proxy.remove_proxy_extrinsic", false]], "remove_stake (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_STAKE", false]], "remove_stake() (bittensor.core.extrinsics.pallets.subtensor_module.subtensormodule method)": [[62, "bittensor.core.extrinsics.pallets.subtensor_module.SubtensorModule.remove_stake", false]], "remove_stake_full_limit (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_STAKE_FULL_LIMIT", false]], "remove_stake_full_limit() (bittensor.core.extrinsics.pallets.subtensor_module.subtensormodule method)": [[62, "bittensor.core.extrinsics.pallets.subtensor_module.SubtensorModule.remove_stake_full_limit", false]], "remove_stake_limit (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_STAKE_LIMIT", false]], "remove_stake_limit() (bittensor.core.extrinsics.pallets.subtensor_module.subtensormodule method)": [[62, "bittensor.core.extrinsics.pallets.subtensor_module.SubtensorModule.remove_stake_limit", false]], "report_equivocation (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REPORT_EQUIVOCATION", false]], "report_equivocation_unsigned (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REPORT_EQUIVOCATION_UNSIGNED", false]], "request_preimage (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REQUEST_PREIMAGE", false]], "required_hash_fields (bittensor.core.synapse.synapse attribute)": [[82, "bittensor.core.synapse.Synapse.required_hash_fields", false]], "reset_cuda() (in module bittensor.utils.registration.register_cuda)": [[128, "bittensor.utils.registration.register_cuda.reset_cuda", false]], "response (bittensor.extras.dev_framework.subnet.call_record attribute)": [[91, "bittensor.extras.dev_framework.subnet.CALL_RECORD.response", false]], "retries (bittensor.extras.dev_framework.calls.non_sudo_calls.set_retry attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_RETRY.retries", false]], "retries (bittensor.extras.dev_framework.calls.non_sudo_calls.set_retry_named attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_RETRY_NAMED.retries", false]], "return_per_1000 (bittensor.core.chain_data.delegate_info.delegateinfobase attribute)": [[5, "bittensor.core.chain_data.delegate_info.DelegateInfoBase.return_per_1000", false]], "return_per_1000 (bittensor.core.chain_data.delegate_info_lite.delegateinfolite attribute)": [[6, "bittensor.core.chain_data.delegate_info_lite.DelegateInfoLite.return_per_1000", false]], "reveal_mechanism_weights (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REVEAL_MECHANISM_WEIGHTS", false]], "reveal_mechanism_weights() (bittensor.core.extrinsics.pallets.subtensor_module.subtensormodule method)": [[62, "bittensor.core.extrinsics.pallets.subtensor_module.SubtensorModule.reveal_mechanism_weights", false]], "reveal_round (bittensor.core.chain_data.weight_commit_info.weightcommitinfo attribute)": [[26, "bittensor.core.chain_data.weight_commit_info.WeightCommitInfo.reveal_round", false]], "reveal_round (bittensor.extras.dev_framework.calls.non_sudo_calls.commit_crv3_mechanism_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.COMMIT_CRV3_MECHANISM_WEIGHTS.reveal_round", false]], "reveal_round (bittensor.extras.dev_framework.calls.non_sudo_calls.commit_timelocked_mechanism_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.COMMIT_TIMELOCKED_MECHANISM_WEIGHTS.reveal_round", false]], "reveal_round (bittensor.extras.dev_framework.calls.non_sudo_calls.commit_timelocked_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.COMMIT_TIMELOCKED_WEIGHTS.reveal_round", false]], "reveal_weights (bittensor.extras.subtensor_api.extrinsics.extrinsics attribute)": [[98, "bittensor.extras.subtensor_api.extrinsics.Extrinsics.reveal_weights", false]], "reveal_weights (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REVEAL_WEIGHTS", false]], "reveal_weights() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.reveal_weights", false]], "reveal_weights() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.reveal_weights", false]], "reveal_weights_extrinsic() (in module bittensor.core.extrinsics.asyncex.weights)": [[47, "bittensor.core.extrinsics.asyncex.weights.reveal_weights_extrinsic", false]], "reveal_weights_extrinsic() (in module bittensor.core.extrinsics.weights)": [[76, "bittensor.core.extrinsics.weights.reveal_weights_extrinsic", false]], "reverse_network_map (in module bittensor.core.settings)": [[79, "bittensor.core.settings.REVERSE_NETWORK_MAP", false]], "rho (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.rho", false]], "rho (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.rho", false]], "rho (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.Rho", false]], "rho (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[21, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.rho", false]], "rho (bittensor.core.chain_data.subnet_info.subnetinfo attribute)": [[23, "bittensor.core.chain_data.subnet_info.SubnetInfo.rho", false]], "rho (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_rho attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_RHO.rho", false]], "root_dissolve_network (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ROOT_DISSOLVE_NETWORK", false]], "root_register (bittensor.extras.subtensor_api.extrinsics.extrinsics attribute)": [[98, "bittensor.extras.subtensor_api.extrinsics.Extrinsics.root_register", false]], "root_register (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ROOT_REGISTER", false]], "root_register() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.root_register", false]], "root_register() (bittensor.core.extrinsics.pallets.subtensor_module.subtensormodule method)": [[62, "bittensor.core.extrinsics.pallets.subtensor_module.SubtensorModule.root_register", false]], "root_register() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.root_register", false]], "root_register_extrinsic() (in module bittensor.core.extrinsics.asyncex.root)": [[38, "bittensor.core.extrinsics.asyncex.root.root_register_extrinsic", false]], "root_register_extrinsic() (in module bittensor.core.extrinsics.root)": [[67, "bittensor.core.extrinsics.root.root_register_extrinsic", false]], "root_set_pending_childkey_cooldown (bittensor.extras.subtensor_api.extrinsics.extrinsics attribute)": [[98, "bittensor.extras.subtensor_api.extrinsics.Extrinsics.root_set_pending_childkey_cooldown", false]], "root_set_pending_childkey_cooldown() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.root_set_pending_childkey_cooldown", false]], "root_set_pending_childkey_cooldown() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.root_set_pending_childkey_cooldown", false]], "root_set_pending_childkey_cooldown_extrinsic() (in module bittensor.core.extrinsics.asyncex.children)": [[30, "bittensor.core.extrinsics.asyncex.children.root_set_pending_childkey_cooldown_extrinsic", false]], "root_set_pending_childkey_cooldown_extrinsic() (in module bittensor.core.extrinsics.children)": [[48, "bittensor.core.extrinsics.children.root_set_pending_childkey_cooldown_extrinsic", false]], "root_tao_stake_weight (in module bittensor.core.settings)": [[79, "bittensor.core.settings.ROOT_TAO_STAKE_WEIGHT", false]], "rootclaim (bittensor.core.chain_data.proxy.proxytype attribute)": [[16, "bittensor.core.chain_data.proxy.ProxyType.RootClaim", false]], "rootclaimtype (class in bittensor.core.chain_data.root_claim)": [[17, "bittensor.core.chain_data.root_claim.RootClaimType", false]], "rootweights (bittensor.core.chain_data.proxy.proxytype attribute)": [[16, "bittensor.core.chain_data.proxy.ProxyType.RootWeights", false]], "rounds_total (bittensor.utils.registration.pow.registrationstatistics attribute)": [[127, "bittensor.utils.registration.pow.RegistrationStatistics.rounds_total", false]], "router (bittensor.core.axon.axon attribute)": [[1, "bittensor.core.axon.Axon.router", false]], "run() (bittensor.core.axon.axonmiddleware method)": [[1, "bittensor.core.axon.AxonMiddleware.run", false]], "run() (bittensor.utils.registration.pow.cudasolver method)": [[127, "bittensor.utils.registration.pow.CUDASolver.run", false]], "run() (bittensor.utils.registration.pow.solver method)": [[127, "bittensor.utils.registration.pow.Solver.run", false]], "run_in_thread() (bittensor.core.axon.fastapithreadedserver method)": [[1, "bittensor.core.axon.FastAPIThreadedServer.run_in_thread", false]], "runexception": [[29, "bittensor.core.errors.RunException", false]], "s (bittensor.core.metagraph.metagraphmixin property)": [[78, "bittensor.core.metagraph.MetagraphMixin.S", false]], "s (bittensor.extras.dev_framework.subnet.testsubnet attribute)": [[91, "bittensor.extras.dev_framework.subnet.TestSubnet.s", false]], "safe_globals() (in module bittensor.core.metagraph)": [[78, "bittensor.core.metagraph.safe_globals", false]], "safemode (in module bittensor.extras.dev_framework.calls.pallets)": [[88, "bittensor.extras.dev_framework.calls.pallets.SafeMode", false]], "salt (bittensor.extras.dev_framework.calls.non_sudo_calls.create2 attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CREATE2.salt", false]], "salt (bittensor.extras.dev_framework.calls.non_sudo_calls.reveal_mechanism_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REVEAL_MECHANISM_WEIGHTS.salt", false]], "salt (bittensor.extras.dev_framework.calls.non_sudo_calls.reveal_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REVEAL_WEIGHTS.salt", false]], "salt (in module bittensor.core.types)": [[85, "bittensor.core.types.Salt", false]], "salts_list (bittensor.extras.dev_framework.calls.non_sudo_calls.batch_reveal_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.BATCH_REVEAL_WEIGHTS.salts_list", false]], "save() (bittensor.core.metagraph.metagraphmixin method)": [[78, "bittensor.core.metagraph.MetagraphMixin.save", false]], "scaling_law_power (bittensor.core.chain_data.subnet_info.subnetinfo attribute)": [[23, "bittensor.core.chain_data.subnet_info.SubnetInfo.scaling_law_power", false]], "schedule (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE", false]], "schedule_after (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE_AFTER", false]], "schedule_grandpa_change (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE_GRANDPA_CHANGE", false]], "schedule_grandpa_change() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.schedule_grandpa_change", false]], "schedule_named (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE_NAMED", false]], "schedule_named_after (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE_NAMED_AFTER", false]], "schedule_swap_coldkey (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE_SWAP_COLDKEY", false]], "scheduledcoldkeyswapinfo (bittensor.core.chain_data.utils.chaindatatype attribute)": [[25, "bittensor.core.chain_data.utils.ChainDataType.ScheduledColdkeySwapInfo", false]], "scheduledcoldkeyswapinfo (class in bittensor.core.chain_data.scheduled_coldkey_swap_info)": [[18, "bittensor.core.chain_data.scheduled_coldkey_swap_info.ScheduledColdkeySwapInfo", false]], "scheduler (in module bittensor.extras.dev_framework.calls.pallets)": [[88, "bittensor.extras.dev_framework.calls.pallets.Scheduler", false]], "seal (bittensor.utils.registration.pow.powsolution attribute)": [[127, "bittensor.utils.registration.pow.POWSolution.seal", false]], "selective_metagraph_commitments_offset (in module bittensor.core.chain_data.metagraph_info)": [[11, "bittensor.core.chain_data.metagraph_info.SELECTIVE_METAGRAPH_COMMITMENTS_OFFSET", false]], "selectivemetagraphindex (class in bittensor.core.chain_data.metagraph_info)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex", false]], "senate (bittensor.core.chain_data.proxy.proxytype attribute)": [[16, "bittensor.core.chain_data.proxy.ProxyType.Senate", false]], "serialize() (bittensor.core.tensor.tensor static method)": [[83, "bittensor.core.tensor.Tensor.serialize", false]], "serve() (bittensor.core.axon.axon method)": [[1, "bittensor.core.axon.Axon.serve", false]], "serve_axon (bittensor.extras.subtensor_api.extrinsics.extrinsics attribute)": [[98, "bittensor.extras.subtensor_api.extrinsics.Extrinsics.serve_axon", false]], "serve_axon (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SERVE_AXON", false]], "serve_axon() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.serve_axon", false]], "serve_axon() (bittensor.core.extrinsics.pallets.subtensor_module.subtensormodule method)": [[62, "bittensor.core.extrinsics.pallets.subtensor_module.SubtensorModule.serve_axon", false]], "serve_axon() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.serve_axon", false]], "serve_axon_extrinsic() (in module bittensor.core.extrinsics.asyncex.serving)": [[39, "bittensor.core.extrinsics.asyncex.serving.serve_axon_extrinsic", false]], "serve_axon_extrinsic() (in module bittensor.core.extrinsics.serving)": [[68, "bittensor.core.extrinsics.serving.serve_axon_extrinsic", false]], "serve_axon_tls (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SERVE_AXON_TLS", false]], "serve_axon_tls() (bittensor.core.extrinsics.pallets.subtensor_module.subtensormodule method)": [[62, "bittensor.core.extrinsics.pallets.subtensor_module.SubtensorModule.serve_axon_tls", false]], "serve_extrinsic() (in module bittensor.core.extrinsics.asyncex.serving)": [[39, "bittensor.core.extrinsics.asyncex.serving.serve_extrinsic", false]], "serve_extrinsic() (in module bittensor.core.extrinsics.serving)": [[68, "bittensor.core.extrinsics.serving.serve_extrinsic", false]], "serve_prometheus (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SERVE_PROMETHEUS", false]], "serving_rate_limit (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.serving_rate_limit", false]], "serving_rate_limit (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.serving_rate_limit", false]], "serving_rate_limit (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[21, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.serving_rate_limit", false]], "serving_rate_limit (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_serving_rate_limit attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SERVING_RATE_LIMIT.serving_rate_limit", false]], "servingratelimit (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.ServingRateLimit", false]], "session (bittensor.core.dendrite.dendritemixin property)": [[28, "bittensor.core.dendrite.DendriteMixin.session", false]], "set (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET", false]], "set_auto_stake (bittensor.extras.subtensor_api.staking.staking attribute)": [[105, "bittensor.extras.subtensor_api.staking.Staking.set_auto_stake", false]], "set_auto_stake() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.set_auto_stake", false]], "set_auto_stake() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.set_auto_stake", false]], "set_auto_stake_extrinsic() (in module bittensor.core.extrinsics.asyncex.staking)": [[40, "bittensor.core.extrinsics.asyncex.staking.set_auto_stake_extrinsic", false]], "set_auto_stake_extrinsic() (in module bittensor.core.extrinsics.staking)": [[69, "bittensor.core.extrinsics.staking.set_auto_stake_extrinsic", false]], "set_base_fee_per_gas (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_BASE_FEE_PER_GAS", false]], "set_beacon_config (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_BEACON_CONFIG", false]], "set_childkey_take (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_CHILDKEY_TAKE", false]], "set_children (bittensor.extras.subtensor_api.extrinsics.extrinsics attribute)": [[98, "bittensor.extras.subtensor_api.extrinsics.Extrinsics.set_children", false]], "set_children (bittensor.extras.subtensor_api.wallets.wallets attribute)": [[108, "bittensor.extras.subtensor_api.wallets.Wallets.set_children", false]], "set_children (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_CHILDREN", false]], "set_children() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.set_children", false]], "set_children() (bittensor.core.extrinsics.pallets.subtensor_module.subtensormodule method)": [[62, "bittensor.core.extrinsics.pallets.subtensor_module.SubtensorModule.set_children", false]], "set_children() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.set_children", false]], "set_children_extrinsic() (in module bittensor.core.extrinsics.asyncex.children)": [[30, "bittensor.core.extrinsics.asyncex.children.set_children_extrinsic", false]], "set_children_extrinsic() (in module bittensor.core.extrinsics.children)": [[48, "bittensor.core.extrinsics.children.set_children_extrinsic", false]], "set_code (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_CODE", false]], "set_code_without_checks (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_CODE_WITHOUT_CHECKS", false]], "set_coldkey_auto_stake_hotkey (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_COLDKEY_AUTO_STAKE_HOTKEY", false]], "set_coldkey_auto_stake_hotkey() (bittensor.core.extrinsics.pallets.subtensor_module.subtensormodule method)": [[62, "bittensor.core.extrinsics.pallets.subtensor_module.SubtensorModule.set_coldkey_auto_stake_hotkey", false]], "set_commitment (bittensor.extras.subtensor_api.commitments.commitments attribute)": [[95, "bittensor.extras.subtensor_api.commitments.Commitments.set_commitment", false]], "set_commitment (bittensor.extras.subtensor_api.extrinsics.extrinsics attribute)": [[98, "bittensor.extras.subtensor_api.extrinsics.Extrinsics.set_commitment", false]], "set_commitment (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_COMMITMENT", false]], "set_commitment() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.set_commitment", false]], "set_commitment() (bittensor.core.extrinsics.pallets.commitments.commitments method)": [[57, "bittensor.core.extrinsics.pallets.commitments.Commitments.set_commitment", false]], "set_commitment() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.set_commitment", false]], "set_config() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.set_config", false]], "set_console() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.set_console", false]], "set_debug() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.set_debug", false]], "set_default() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.set_default", false]], "set_delegate_take (bittensor.extras.subtensor_api.delegates.delegates attribute)": [[97, "bittensor.extras.subtensor_api.delegates.Delegates.set_delegate_take", false]], "set_delegate_take() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.set_delegate_take", false]], "set_delegate_take() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.set_delegate_take", false]], "set_elasticity (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_ELASTICITY", false]], "set_fee_rate (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_FEE_RATE", false]], "set_heap_pages (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_HEAP_PAGES", false]], "set_hyperparameter() (bittensor.extras.dev_framework.subnet.testsubnet method)": [[91, "bittensor.extras.dev_framework.subnet.TestSubnet.set_hyperparameter", false]], "set_identity (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_IDENTITY", false], [87, "id6", false]], "set_info() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.set_info", false]], "set_key (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_KEY", false]], "set_max_space (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_MAX_SPACE", false]], "set_mechanism_weights (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_MECHANISM_WEIGHTS", false]], "set_mechanism_weights() (bittensor.core.extrinsics.pallets.subtensor_module.subtensormodule method)": [[62, "bittensor.core.extrinsics.pallets.subtensor_module.SubtensorModule.set_mechanism_weights", false]], "set_name_type() (bittensor.core.synapse.synapse method)": [[82, "bittensor.core.synapse.Synapse.set_name_type", false]], "set_oldest_stored_round (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_OLDEST_STORED_ROUND", false]], "set_pending_childkey_cooldown (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_PENDING_CHILDKEY_COOLDOWN", false]], "set_pending_childkey_cooldown() (bittensor.core.extrinsics.pallets.subtensor_module.subtensormodule method)": [[62, "bittensor.core.extrinsics.pallets.subtensor_module.SubtensorModule.set_pending_childkey_cooldown", false]], "set_retry (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_RETRY", false]], "set_retry_named (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_RETRY_NAMED", false]], "set_reveal_commitment (bittensor.extras.subtensor_api.commitments.commitments attribute)": [[95, "bittensor.extras.subtensor_api.commitments.Commitments.set_reveal_commitment", false]], "set_reveal_commitment() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.set_reveal_commitment", false]], "set_reveal_commitment() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.set_reveal_commitment", false]], "set_root_claim_type (bittensor.extras.subtensor_api.extrinsics.extrinsics attribute)": [[98, "bittensor.extras.subtensor_api.extrinsics.Extrinsics.set_root_claim_type", false]], "set_root_claim_type (bittensor.extras.subtensor_api.staking.staking attribute)": [[105, "bittensor.extras.subtensor_api.staking.Staking.set_root_claim_type", false]], "set_root_claim_type (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_ROOT_CLAIM_TYPE", false]], "set_root_claim_type() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.set_root_claim_type", false]], "set_root_claim_type() (bittensor.core.extrinsics.pallets.subtensor_module.subtensormodule method)": [[62, "bittensor.core.extrinsics.pallets.subtensor_module.SubtensorModule.set_root_claim_type", false]], "set_root_claim_type() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.set_root_claim_type", false]], "set_root_claim_type_extrinsic() (in module bittensor.core.extrinsics.asyncex.root)": [[38, "bittensor.core.extrinsics.asyncex.root.set_root_claim_type_extrinsic", false]], "set_root_claim_type_extrinsic() (in module bittensor.core.extrinsics.root)": [[67, "bittensor.core.extrinsics.root.set_root_claim_type_extrinsic", false]], "set_storage (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_STORAGE", false]], "set_subnet_identity (bittensor.extras.subtensor_api.extrinsics.extrinsics attribute)": [[98, "bittensor.extras.subtensor_api.extrinsics.Extrinsics.set_subnet_identity", false]], "set_subnet_identity (bittensor.extras.subtensor_api.subnets.subnets attribute)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets.set_subnet_identity", false]], "set_subnet_identity (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_SUBNET_IDENTITY", false]], "set_subnet_identity() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.set_subnet_identity", false]], "set_subnet_identity() (bittensor.core.extrinsics.pallets.subtensor_module.subtensormodule method)": [[62, "bittensor.core.extrinsics.pallets.subtensor_module.SubtensorModule.set_subnet_identity", false]], "set_subnet_identity() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.set_subnet_identity", false]], "set_subnet_identity_extrinsic() (in module bittensor.core.extrinsics.asyncex.registration)": [[37, "bittensor.core.extrinsics.asyncex.registration.set_subnet_identity_extrinsic", false]], "set_subnet_identity_extrinsic() (in module bittensor.core.extrinsics.registration)": [[66, "bittensor.core.extrinsics.registration.set_subnet_identity_extrinsic", false]], "set_take_extrinsic() (in module bittensor.core.extrinsics.asyncex.take)": [[43, "bittensor.core.extrinsics.asyncex.take.set_take_extrinsic", false]], "set_take_extrinsic() (in module bittensor.core.extrinsics.take)": [[72, "bittensor.core.extrinsics.take.set_take_extrinsic", false]], "set_trace() (bittensor.utils.btlogging.format.btstreamformatter method)": [[115, "bittensor.utils.btlogging.format.BtStreamFormatter.set_trace", false]], "set_trace() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.set_trace", false]], "set_unit() (bittensor.utils.balance.balance method)": [[112, "bittensor.utils.balance.Balance.set_unit", false]], "set_warning() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.set_warning", false]], "set_weights (bittensor.extras.subtensor_api.extrinsics.extrinsics attribute)": [[98, "bittensor.extras.subtensor_api.extrinsics.Extrinsics.set_weights", false]], "set_weights (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_WEIGHTS", false]], "set_weights() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.set_weights", false]], "set_weights() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.set_weights", false]], "set_weights_extrinsic() (in module bittensor.core.extrinsics.asyncex.weights)": [[47, "bittensor.core.extrinsics.asyncex.weights.set_weights_extrinsic", false]], "set_weights_extrinsic() (in module bittensor.core.extrinsics.weights)": [[76, "bittensor.core.extrinsics.weights.set_weights_extrinsic", false]], "set_whitelist (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_WHITELIST", false]], "setlevel() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.setLevel", false]], "setup_config (bittensor.extras.subtensor_api.subtensorapi attribute)": [[99, "bittensor.extras.subtensor_api.SubtensorApi.setup_config", false]], "setup_config() (bittensor.core.types.subtensormixin static method)": [[85, "bittensor.core.types.SubtensorMixin.setup_config", false]], "shape (bittensor.core.tensor.tensor attribute)": [[83, "bittensor.core.tensor.Tensor.shape", false]], "should_exit (bittensor.core.axon.fastapithreadedserver attribute)": [[1, "bittensor.core.axon.FastAPIThreadedServer.should_exit", false]], "should_sync (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.should_sync", false]], "should_sync (bittensor.core.metagraph.nontorchmetagraph attribute)": [[78, "bittensor.core.metagraph.NonTorchMetagraph.should_sync", false]], "shutdown() (bittensor.core.threadpool.prioritythreadpoolexecutor method)": [[84, "bittensor.core.threadpool.PriorityThreadPoolExecutor.shutdown", false]], "sign_and_send_extrinsic (bittensor.extras.subtensor_api.subtensorapi attribute)": [[99, "bittensor.extras.subtensor_api.SubtensorApi.sign_and_send_extrinsic", false]], "sign_and_send_extrinsic() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.sign_and_send_extrinsic", false]], "sign_and_send_extrinsic() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.sign_and_send_extrinsic", false]], "signature (bittensor.core.synapse.terminalinfo attribute)": [[82, "bittensor.core.synapse.TerminalInfo.signature", false]], "signature (bittensor.extras.dev_framework.calls.non_sudo_calls.associate_evm_key attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ASSOCIATE_EVM_KEY.signature", false]], "signature (bittensor.extras.dev_framework.calls.non_sudo_calls.set_beacon_config attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_BEACON_CONFIG.signature", false]], "signature (bittensor.extras.dev_framework.calls.non_sudo_calls.write_pulse attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.WRITE_PULSE.signature", false]], "sim_swap (bittensor.extras.subtensor_api.staking.staking attribute)": [[105, "bittensor.extras.subtensor_api.staking.Staking.sim_swap", false]], "sim_swap() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.sim_swap", false]], "sim_swap() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.sim_swap", false]], "simswapresult (class in bittensor.core.chain_data.sim_swap)": [[19, "bittensor.core.chain_data.sim_swap.SimSwapResult", false]], "slippage (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[7, "bittensor.core.chain_data.dynamic_info.DynamicInfo.slippage", false]], "smalltransfer (bittensor.core.chain_data.proxy.proxytype attribute)": [[16, "bittensor.core.chain_data.proxy.ProxyType.SmallTransfer", false]], "solve_cuda() (in module bittensor.utils.registration.register_cuda)": [[128, "bittensor.utils.registration.register_cuda.solve_cuda", false]], "solver (class in bittensor.utils.registration.pow)": [[127, "bittensor.utils.registration.pow.Solver", false]], "source (bittensor.extras.dev_framework.calls.non_sudo_calls.call attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CALL.source", false]], "source (bittensor.extras.dev_framework.calls.non_sudo_calls.create attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CREATE.source", false]], "source (bittensor.extras.dev_framework.calls.non_sudo_calls.create2 attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CREATE2.source", false]], "source (bittensor.extras.dev_framework.calls.non_sudo_calls.force_transfer attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_TRANSFER.source", false]], "spawner (bittensor.extras.dev_framework.calls.non_sudo_calls.kill_pure attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.KILL_PURE.spawner", false]], "split_command() (in module bittensor.extras.dev_framework.utils)": [[92, "bittensor.extras.dev_framework.utils.split_command", false]], "ss58 (bittensor.core.chain_data.weight_commit_info.weightcommitinfo attribute)": [[26, "bittensor.core.chain_data.weight_commit_info.WeightCommitInfo.ss58", false]], "ss58_address_length (in module bittensor.core.settings)": [[79, "bittensor.core.settings.SS58_ADDRESS_LENGTH", false]], "ss58_address_to_bytes() (in module bittensor.utils)": [[122, "bittensor.utils.ss58_address_to_bytes", false]], "ss58_decode (in module bittensor.utils)": [[122, "bittensor.utils.ss58_decode", false]], "ss58_to_hex (in module bittensor.utils)": [[122, "bittensor.utils.ss58_to_hex", false]], "ss58_to_vec_u8() (in module bittensor.utils)": [[122, "bittensor.utils.ss58_to_vec_u8", false]], "stake (bittensor.core.chain_data.delegate_info.delegatedinfo attribute)": [[5, "bittensor.core.chain_data.delegate_info.DelegatedInfo.stake", false]], "stake (bittensor.core.chain_data.neuron_info.neuroninfo attribute)": [[12, "bittensor.core.chain_data.neuron_info.NeuronInfo.stake", false]], "stake (bittensor.core.chain_data.neuron_info_lite.neuroninfolite attribute)": [[13, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite.stake", false]], "stake (bittensor.core.chain_data.stake_info.stakeinfo attribute)": [[20, "bittensor.core.chain_data.stake_info.StakeInfo.stake", false]], "stake (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.stake", false]], "stake (bittensor.core.metagraph.nontorchmetagraph attribute)": [[78, "bittensor.core.metagraph.NonTorchMetagraph.stake", false]], "stake (bittensor.core.metagraph.torchmetagraph attribute)": [[78, "bittensor.core.metagraph.TorchMetagraph.stake", false]], "stake_dict (bittensor.core.chain_data.neuron_info.neuroninfo attribute)": [[12, "bittensor.core.chain_data.neuron_info.NeuronInfo.stake_dict", false]], "stake_dict (bittensor.core.chain_data.neuron_info_lite.neuroninfolite attribute)": [[13, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite.stake_dict", false]], "stakeerror": [[29, "bittensor.core.errors.StakeError", false]], "stakeinfo (bittensor.core.chain_data.utils.chaindatatype attribute)": [[25, "bittensor.core.chain_data.utils.ChainDataType.StakeInfo", false]], "stakeinfo (class in bittensor.core.chain_data.stake_info)": [[20, "bittensor.core.chain_data.stake_info.StakeInfo", false]], "staking (bittensor.core.chain_data.proxy.proxytype attribute)": [[16, "bittensor.core.chain_data.proxy.ProxyType.Staking", false]], "staking (bittensor.extras.subtensor_api.subtensorapi property)": [[99, "bittensor.extras.subtensor_api.SubtensorApi.staking", false]], "staking (class in bittensor.extras.subtensor_api.staking)": [[105, "bittensor.extras.subtensor_api.staking.Staking", false]], "start() (bittensor.core.axon.axon method)": [[1, "bittensor.core.axon.Axon.start", false]], "start() (bittensor.core.axon.fastapithreadedserver method)": [[1, "bittensor.core.axon.FastAPIThreadedServer.start", false]], "start() (bittensor.utils.registration.pow.registrationstatisticslogger method)": [[127, "bittensor.utils.registration.pow.RegistrationStatisticsLogger.start", false]], "start() (bittensor.utils.registration.pow.status method)": [[127, "bittensor.utils.registration.pow.Status.start", false]], "start_call (bittensor.extras.subtensor_api.extrinsics.extrinsics attribute)": [[98, "bittensor.extras.subtensor_api.extrinsics.Extrinsics.start_call", false]], "start_call (bittensor.extras.subtensor_api.subnets.subnets attribute)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets.start_call", false]], "start_call (bittensor.extras.subtensor_api.subtensorapi attribute)": [[99, "bittensor.extras.subtensor_api.SubtensorApi.start_call", false]], "start_call (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.START_CALL", false]], "start_call() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.start_call", false]], "start_call() (bittensor.core.extrinsics.pallets.subtensor_module.subtensormodule method)": [[62, "bittensor.core.extrinsics.pallets.subtensor_module.SubtensorModule.start_call", false]], "start_call() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.start_call", false]], "start_call_extrinsic() (in module bittensor.core.extrinsics.asyncex.start_call)": [[41, "bittensor.core.extrinsics.asyncex.start_call.start_call_extrinsic", false]], "start_call_extrinsic() (in module bittensor.core.extrinsics.start_call)": [[70, "bittensor.core.extrinsics.start_call.start_call_extrinsic", false]], "started (bittensor.core.axon.axon attribute)": [[1, "bittensor.core.axon.Axon.started", false]], "state_call (bittensor.extras.subtensor_api.chain.chain attribute)": [[94, "bittensor.extras.subtensor_api.chain.Chain.state_call", false]], "state_call() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.state_call", false]], "state_call() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.state_call", false]], "state_dict() (bittensor.core.metagraph.metagraphmixin method)": [[78, "bittensor.core.metagraph.MetagraphMixin.state_dict", false]], "status (bittensor.utils.registration.pow.registrationstatisticslogger attribute)": [[127, "bittensor.utils.registration.pow.RegistrationStatisticsLogger.status", false]], "status (class in bittensor.utils.registration.pow)": [[127, "bittensor.utils.registration.pow.Status", false]], "status() (bittensor.utils.registration.pow.console static method)": [[127, "bittensor.utils.registration.pow.Console.status", false]], "status_code (bittensor.core.synapse.terminalinfo attribute)": [[82, "bittensor.core.synapse.TerminalInfo.status_code", false]], "status_message (bittensor.core.synapse.terminalinfo attribute)": [[82, "bittensor.core.synapse.TerminalInfo.status_message", false]], "steepness (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_alpha_sigmoid_steepness attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ALPHA_SIGMOID_STEEPNESS.steepness", false]], "steps (in module bittensor.extras.dev_framework.utils)": [[92, "bittensor.extras.dev_framework.utils.STEPS", false]], "stop() (bittensor.core.axon.axon method)": [[1, "bittensor.core.axon.Axon.stop", false]], "stop() (bittensor.core.axon.fastapithreadedserver method)": [[1, "bittensor.core.axon.FastAPIThreadedServer.stop", false]], "stop() (bittensor.utils.registration.pow.registrationstatisticslogger method)": [[127, "bittensor.utils.registration.pow.RegistrationStatisticsLogger.stop", false]], "stop() (bittensor.utils.registration.pow.status method)": [[127, "bittensor.utils.registration.pow.Status.stop", false]], "storagefunctionnotfound (in module bittensor.core.errors)": [[29, "bittensor.core.errors.StorageFunctionNotFound", false]], "stream_response() (bittensor.core.stream.streamingsynapse.btstreamingresponse method)": [[80, "bittensor.core.stream.StreamingSynapse.BTStreamingResponse.stream_response", false]], "streamingsynapse (class in bittensor.core.stream)": [[80, "bittensor.core.stream.StreamingSynapse", false]], "streamingsynapse.btstreamingresponse (class in bittensor.core.stream)": [[80, "bittensor.core.stream.StreamingSynapse.BTStreamingResponse", false]], "strtobool() (in module bittensor.utils)": [[122, "bittensor.utils.strtobool", false]], "subkeys (bittensor.extras.dev_framework.calls.non_sudo_calls.kill_prefix attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.KILL_PREFIX.subkeys", false]], "submit() (bittensor.core.threadpool.prioritythreadpoolexecutor method)": [[84, "bittensor.core.threadpool.PriorityThreadPoolExecutor.submit", false]], "submit_encrypted() (bittensor.core.extrinsics.pallets.mev_shield.mevshield method)": [[60, "bittensor.core.extrinsics.pallets.mev_shield.MevShield.submit_encrypted", false]], "submit_encrypted_extrinsic() (in module bittensor.core.extrinsics.asyncex.mev_shield)": [[34, "bittensor.core.extrinsics.asyncex.mev_shield.submit_encrypted_extrinsic", false]], "submit_encrypted_extrinsic() (in module bittensor.core.extrinsics.mev_shield)": [[52, "bittensor.core.extrinsics.mev_shield.submit_encrypted_extrinsic", false]], "subnet (bittensor.extras.subtensor_api.subnets.subnets attribute)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets.subnet", false]], "subnet() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.subnet", false]], "subnet() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.subnet", false]], "subnet_contact (bittensor.core.chain_data.subnet_identity.subnetidentity attribute)": [[22, "bittensor.core.chain_data.subnet_identity.SubnetIdentity.subnet_contact", false]], "subnet_contact (bittensor.extras.dev_framework.calls.non_sudo_calls.set_subnet_identity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_SUBNET_IDENTITY.subnet_contact", false]], "subnet_emission (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.subnet_emission", false]], "subnet_emission (bittensor.core.chain_data.metagraph_info.metagraphinfoemissions attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfoEmissions.subnet_emission", false]], "subnet_exists (bittensor.extras.subtensor_api.subnets.subnets attribute)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets.subnet_exists", false]], "subnet_exists() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.subnet_exists", false]], "subnet_exists() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.subnet_exists", false]], "subnet_identity (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[7, "bittensor.core.chain_data.dynamic_info.DynamicInfo.subnet_identity", false]], "subnet_is_active (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[21, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.subnet_is_active", false]], "subnet_name (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[7, "bittensor.core.chain_data.dynamic_info.DynamicInfo.subnet_name", false]], "subnet_name (bittensor.core.chain_data.subnet_identity.subnetidentity attribute)": [[22, "bittensor.core.chain_data.subnet_identity.SubnetIdentity.subnet_name", false]], "subnet_name (bittensor.extras.dev_framework.calls.non_sudo_calls.set_subnet_identity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_SUBNET_IDENTITY.subnet_name", false]], "subnet_owner_cut (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_subnet_owner_cut attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SUBNET_OWNER_CUT.subnet_owner_cut", false]], "subnet_url (bittensor.core.chain_data.subnet_identity.subnetidentity attribute)": [[22, "bittensor.core.chain_data.subnet_identity.SubnetIdentity.subnet_url", false]], "subnet_url (bittensor.extras.dev_framework.calls.non_sudo_calls.set_subnet_identity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_SUBNET_IDENTITY.subnet_url", false]], "subnet_volume (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[7, "bittensor.core.chain_data.dynamic_info.DynamicInfo.subnet_volume", false]], "subnet_volume (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.subnet_volume", false]], "subnet_volume (bittensor.core.chain_data.metagraph_info.metagraphinfopool attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfoPool.subnet_volume", false]], "subnetemission (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.SubnetEmission", false]], "subnethyperparameters (bittensor.core.chain_data.utils.chaindatatype attribute)": [[25, "bittensor.core.chain_data.utils.ChainDataType.SubnetHyperparameters", false]], "subnethyperparameters (class in bittensor.core.chain_data.subnet_hyperparameters)": [[21, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters", false]], "subnetidentity (bittensor.core.chain_data.utils.chaindatatype attribute)": [[25, "bittensor.core.chain_data.utils.ChainDataType.SubnetIdentity", false]], "subnetidentity (class in bittensor.core.chain_data.subnet_identity)": [[22, "bittensor.core.chain_data.subnet_identity.SubnetIdentity", false]], "subnetinfo (bittensor.core.chain_data.utils.chaindatatype attribute)": [[25, "bittensor.core.chain_data.utils.ChainDataType.SubnetInfo", false]], "subnetinfo (class in bittensor.core.chain_data.subnet_info)": [[23, "bittensor.core.chain_data.subnet_info.SubnetInfo", false]], "subnetleasebeneficiary (bittensor.core.chain_data.proxy.proxytype attribute)": [[16, "bittensor.core.chain_data.proxy.ProxyType.SubnetLeaseBeneficiary", false]], "subnetnotexists": [[29, "bittensor.core.errors.SubnetNotExists", false]], "subnets (bittensor.core.chain_data.root_claim.keepsubnetsdescriptor attribute)": [[17, "bittensor.core.chain_data.root_claim.KeepSubnetsDescriptor.subnets", false]], "subnets (bittensor.extras.subtensor_api.subtensorapi property)": [[99, "bittensor.extras.subtensor_api.SubtensorApi.subnets", false]], "subnets (class in bittensor.extras.subtensor_api.subnets)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets", false]], "subnetsapi (class in bittensor.utils.subnets)": [[129, "bittensor.utils.subnets.SubnetsAPI", false]], "subnetstate (bittensor.core.chain_data.utils.chaindatatype attribute)": [[25, "bittensor.core.chain_data.utils.ChainDataType.SubnetState", false]], "subnetstate (class in bittensor.core.chain_data.subnet_state)": [[24, "bittensor.core.chain_data.subnet_state.SubnetState", false]], "subnetvolume (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.SubnetVolume", false]], "subnetwork_n (bittensor.core.chain_data.subnet_info.subnetinfo attribute)": [[23, "bittensor.core.chain_data.subnet_info.SubnetInfo.subnetwork_n", false]], "subnetwork_n (bittensor.extras.subtensor_api.subnets.subnets attribute)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets.subnetwork_n", false]], "subnetwork_n() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.subnetwork_n", false]], "subnetwork_n() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.subnetwork_n", false]], "substrate (bittensor.core.async_subtensor.asyncsubtensor attribute)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.substrate", false]], "substrate (bittensor.core.subtensor.subtensor attribute)": [[81, "bittensor.core.subtensor.Subtensor.substrate", false]], "substrate (bittensor.extras.subtensor_api.subtensorapi attribute)": [[99, "bittensor.extras.subtensor_api.SubtensorApi.substrate", false]], "substraterequestexception (in module bittensor.core.errors)": [[29, "bittensor.core.errors.SubstrateRequestException", false]], "subtensor (bittensor.core.extrinsics.pallets.base.callbuilder attribute)": [[56, "bittensor.core.extrinsics.pallets.base.CallBuilder.subtensor", false]], "subtensor (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.subtensor", false]], "subtensor (bittensor.core.metagraph.nontorchmetagraph attribute)": [[78, "bittensor.core.metagraph.NonTorchMetagraph.subtensor", false]], "subtensor (class in bittensor.core.subtensor)": [[81, "bittensor.core.subtensor.Subtensor", false]], "subtensorapi (class in bittensor.extras.subtensor_api)": [[99, "bittensor.extras.subtensor_api.SubtensorApi", false]], "subtensormixin (class in bittensor.core.types)": [[85, "bittensor.core.types.SubtensorMixin", false]], "subtensormodule (class in bittensor.core.extrinsics.pallets.subtensor_module)": [[62, "bittensor.core.extrinsics.pallets.subtensor_module.SubtensorModule", false]], "subtensormodule (in module bittensor.extras.dev_framework.calls.pallets)": [[88, "bittensor.extras.dev_framework.calls.pallets.SubtensorModule", false]], "subtoken_enabled (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_subtoken_enabled attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SUBTOKEN_ENABLED.subtoken_enabled", false]], "success (bittensor.core.types.extrinsicresponse attribute)": [[85, "bittensor.core.types.ExtrinsicResponse.success", false]], "success (bittensor.utils.unlockstatus attribute)": [[122, "bittensor.utils.UnlockStatus.success", false]], "success() (bittensor.utils.btlogging.console.bittensorconsole method)": [[113, "bittensor.utils.btlogging.console.BittensorConsole.success", false]], "success() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.success", false]], "success_level_num (in module bittensor.utils.btlogging.format)": [[115, "bittensor.utils.btlogging.format.SUCCESS_LEVEL_NUM", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_as attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_AS.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_activity_cutoff attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ACTIVITY_CUTOFF.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_adjustment_alpha attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ADJUSTMENT_ALPHA.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_adjustment_interval attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ADJUSTMENT_INTERVAL.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_admin_freeze_window attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ADMIN_FREEZE_WINDOW.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_alpha_sigmoid_steepness attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ALPHA_SIGMOID_STEEPNESS.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_alpha_values attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ALPHA_VALUES.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_bonds_moving_average attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_BONDS_MOVING_AVERAGE.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_bonds_penalty attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_BONDS_PENALTY.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_bonds_reset_enabled attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_BONDS_RESET_ENABLED.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_ck_burn attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_CK_BURN.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_coldkey_swap_schedule_duration attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_COLDKEY_SWAP_SCHEDULE_DURATION.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_commit_reveal_version attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_COMMIT_REVEAL_VERSION.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_commit_reveal_weights_enabled attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_COMMIT_REVEAL_WEIGHTS_ENABLED.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_commit_reveal_weights_interval attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_COMMIT_REVEAL_WEIGHTS_INTERVAL.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_default_take attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_DEFAULT_TAKE.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_difficulty attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_DIFFICULTY.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_dissolve_network_schedule_duration attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_DISSOLVE_NETWORK_SCHEDULE_DURATION.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_ema_price_halving_period attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_EMA_PRICE_HALVING_PERIOD.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_evm_chain_id attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_EVM_CHAIN_ID.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_immunity_period attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_IMMUNITY_PERIOD.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_kappa attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_KAPPA.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_liquid_alpha_enabled attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_LIQUID_ALPHA_ENABLED.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_lock_reduction_interval attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_LOCK_REDUCTION_INTERVAL.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_max_allowed_uids attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MAX_ALLOWED_UIDS.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_max_allowed_validators attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MAX_ALLOWED_VALIDATORS.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_max_burn attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MAX_BURN.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_max_childkey_take attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MAX_CHILDKEY_TAKE.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_max_difficulty attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MAX_DIFFICULTY.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_max_registrations_per_block attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MAX_REGISTRATIONS_PER_BLOCK.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_mechanism_count attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MECHANISM_COUNT.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_mechanism_emission_split attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MECHANISM_EMISSION_SPLIT.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_min_allowed_uids attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MIN_ALLOWED_UIDS.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_min_allowed_weights attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MIN_ALLOWED_WEIGHTS.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_min_burn attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MIN_BURN.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_min_childkey_take attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MIN_CHILDKEY_TAKE.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_min_delegate_take attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MIN_DELEGATE_TAKE.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_min_difficulty attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MIN_DIFFICULTY.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_network_immunity_period attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_NETWORK_IMMUNITY_PERIOD.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_network_min_lock_cost attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_NETWORK_MIN_LOCK_COST.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_network_pow_registration_allowed attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_NETWORK_POW_REGISTRATION_ALLOWED.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_network_rate_limit attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_NETWORK_RATE_LIMIT.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_network_registration_allowed attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_NETWORK_REGISTRATION_ALLOWED.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_nominator_min_required_stake attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_NOMINATOR_MIN_REQUIRED_STAKE.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_num_root_claims attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_NUM_ROOT_CLAIMS.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_owner_hparam_rate_limit attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_OWNER_HPARAM_RATE_LIMIT.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_owner_immune_neuron_limit attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_OWNER_IMMUNE_NEURON_LIMIT.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_rao_recycled attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_RAO_RECYCLED.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_recycle_or_burn attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_RECYCLE_OR_BURN.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_rho attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_RHO.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_root_claim_threshold attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ROOT_CLAIM_THRESHOLD.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_serving_rate_limit attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SERVING_RATE_LIMIT.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_sn_owner_hotkey attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SN_OWNER_HOTKEY.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_stake_threshold attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_STAKE_THRESHOLD.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_subnet_limit attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SUBNET_LIMIT.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_subnet_moving_alpha attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SUBNET_MOVING_ALPHA.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_subnet_owner_cut attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SUBNET_OWNER_CUT.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_subnet_owner_hotkey attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SUBNET_OWNER_HOTKEY.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_subtoken_enabled attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SUBTOKEN_ENABLED.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_target_registrations_per_interval attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_TARGET_REGISTRATIONS_PER_INTERVAL.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_tempo attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_TEMPO.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_toggle_transfer attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_TOGGLE_TRANSFER.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_total_issuance attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_TOTAL_ISSUANCE.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_tx_childkey_take_rate_limit attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_TX_CHILDKEY_TAKE_RATE_LIMIT.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_tx_delegate_take_rate_limit attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_TX_DELEGATE_TAKE_RATE_LIMIT.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_tx_rate_limit attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_TX_RATE_LIMIT.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_weights_set_rate_limit attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_WEIGHTS_SET_RATE_LIMIT.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_weights_version_key attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_WEIGHTS_VERSION_KEY.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_yuma3_enabled attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_YUMA3_ENABLED.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_toggle_evm_precompile attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_TOGGLE_EVM_PRECOMPILE.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_trim_to_max_allowed_uids attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_TRIM_TO_MAX_ALLOWED_UIDS.sudo", false]], "sudo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_unchecked_weight attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_UNCHECKED_WEIGHT.sudo", false]], "sudo (class in bittensor.core.extrinsics.pallets.sudo)": [[63, "bittensor.core.extrinsics.pallets.sudo.Sudo", false]], "sudo (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SUDO", false]], "sudo (in module bittensor.extras.dev_framework.calls.pallets)": [[88, "bittensor.extras.dev_framework.calls.pallets.Sudo", false]], "sudo() (bittensor.core.extrinsics.pallets.sudo.sudo method)": [[63, "bittensor.core.extrinsics.pallets.sudo.Sudo.sudo", false]], "sudo_as (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_AS", false]], "sudo_call_extrinsic() (in module bittensor.core.extrinsics.asyncex.utils)": [[46, "bittensor.core.extrinsics.asyncex.utils.sudo_call_extrinsic", false]], "sudo_call_extrinsic() (in module bittensor.core.extrinsics.utils)": [[75, "bittensor.core.extrinsics.utils.sudo_call_extrinsic", false]], "sudo_set_activity_cutoff (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ACTIVITY_CUTOFF", false]], "sudo_set_activity_cutoff() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_activity_cutoff", false]], "sudo_set_adjustment_alpha (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ADJUSTMENT_ALPHA", false]], "sudo_set_adjustment_alpha() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_adjustment_alpha", false]], "sudo_set_adjustment_interval (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ADJUSTMENT_INTERVAL", false]], "sudo_set_adjustment_interval() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_adjustment_interval", false]], "sudo_set_admin_freeze_window (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ADMIN_FREEZE_WINDOW", false]], "sudo_set_admin_freeze_window() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_admin_freeze_window", false]], "sudo_set_admin_freeze_window_extrinsic() (in module bittensor.core.extrinsics.asyncex.sudo)": [[42, "bittensor.core.extrinsics.asyncex.sudo.sudo_set_admin_freeze_window_extrinsic", false]], "sudo_set_admin_freeze_window_extrinsic() (in module bittensor.core.extrinsics.sudo)": [[71, "bittensor.core.extrinsics.sudo.sudo_set_admin_freeze_window_extrinsic", false]], "sudo_set_alpha_sigmoid_steepness (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ALPHA_SIGMOID_STEEPNESS", false]], "sudo_set_alpha_sigmoid_steepness() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_alpha_sigmoid_steepness", false]], "sudo_set_alpha_values (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ALPHA_VALUES", false]], "sudo_set_alpha_values() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_alpha_values", false]], "sudo_set_bonds_moving_average (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_BONDS_MOVING_AVERAGE", false]], "sudo_set_bonds_moving_average() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_bonds_moving_average", false]], "sudo_set_bonds_penalty (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_BONDS_PENALTY", false]], "sudo_set_bonds_penalty() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_bonds_penalty", false]], "sudo_set_bonds_reset_enabled (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_BONDS_RESET_ENABLED", false]], "sudo_set_bonds_reset_enabled() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_bonds_reset_enabled", false]], "sudo_set_ck_burn (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_CK_BURN", false]], "sudo_set_ck_burn() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_ck_burn", false]], "sudo_set_coldkey_swap_schedule_duration (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_COLDKEY_SWAP_SCHEDULE_DURATION", false]], "sudo_set_coldkey_swap_schedule_duration() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_coldkey_swap_schedule_duration", false]], "sudo_set_commit_reveal_version (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_COMMIT_REVEAL_VERSION", false]], "sudo_set_commit_reveal_version() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_commit_reveal_version", false]], "sudo_set_commit_reveal_weights_enabled (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_COMMIT_REVEAL_WEIGHTS_ENABLED", false]], "sudo_set_commit_reveal_weights_enabled() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_commit_reveal_weights_enabled", false]], "sudo_set_commit_reveal_weights_interval (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_COMMIT_REVEAL_WEIGHTS_INTERVAL", false]], "sudo_set_commit_reveal_weights_interval() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_commit_reveal_weights_interval", false]], "sudo_set_default_take (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_DEFAULT_TAKE", false]], "sudo_set_default_take() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_default_take", false]], "sudo_set_difficulty (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_DIFFICULTY", false]], "sudo_set_difficulty() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_difficulty", false]], "sudo_set_dissolve_network_schedule_duration (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_DISSOLVE_NETWORK_SCHEDULE_DURATION", false]], "sudo_set_dissolve_network_schedule_duration() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_dissolve_network_schedule_duration", false]], "sudo_set_ema_price_halving_period (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_EMA_PRICE_HALVING_PERIOD", false]], "sudo_set_ema_price_halving_period() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_ema_price_halving_period", false]], "sudo_set_evm_chain_id (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_EVM_CHAIN_ID", false]], "sudo_set_evm_chain_id() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_evm_chain_id", false]], "sudo_set_immunity_period (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_IMMUNITY_PERIOD", false]], "sudo_set_immunity_period() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_immunity_period", false]], "sudo_set_kappa (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_KAPPA", false]], "sudo_set_kappa() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_kappa", false]], "sudo_set_liquid_alpha_enabled (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_LIQUID_ALPHA_ENABLED", false]], "sudo_set_liquid_alpha_enabled() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_liquid_alpha_enabled", false]], "sudo_set_lock_reduction_interval (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_LOCK_REDUCTION_INTERVAL", false]], "sudo_set_lock_reduction_interval() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_lock_reduction_interval", false]], "sudo_set_max_allowed_uids (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MAX_ALLOWED_UIDS", false]], "sudo_set_max_allowed_uids() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_max_allowed_uids", false]], "sudo_set_max_allowed_validators (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MAX_ALLOWED_VALIDATORS", false]], "sudo_set_max_allowed_validators() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_max_allowed_validators", false]], "sudo_set_max_burn (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MAX_BURN", false]], "sudo_set_max_burn() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_max_burn", false]], "sudo_set_max_childkey_take (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MAX_CHILDKEY_TAKE", false]], "sudo_set_max_difficulty (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MAX_DIFFICULTY", false]], "sudo_set_max_difficulty() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_max_difficulty", false]], "sudo_set_max_registrations_per_block (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MAX_REGISTRATIONS_PER_BLOCK", false]], "sudo_set_max_registrations_per_block() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_max_registrations_per_block", false]], "sudo_set_mechanism_count (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MECHANISM_COUNT", false]], "sudo_set_mechanism_count() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_mechanism_count", false]], "sudo_set_mechanism_count_extrinsic() (in module bittensor.core.extrinsics.asyncex.sudo)": [[42, "bittensor.core.extrinsics.asyncex.sudo.sudo_set_mechanism_count_extrinsic", false]], "sudo_set_mechanism_count_extrinsic() (in module bittensor.core.extrinsics.sudo)": [[71, "bittensor.core.extrinsics.sudo.sudo_set_mechanism_count_extrinsic", false]], "sudo_set_mechanism_emission_split (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MECHANISM_EMISSION_SPLIT", false]], "sudo_set_mechanism_emission_split() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_mechanism_emission_split", false]], "sudo_set_mechanism_emission_split_extrinsic() (in module bittensor.core.extrinsics.asyncex.sudo)": [[42, "bittensor.core.extrinsics.asyncex.sudo.sudo_set_mechanism_emission_split_extrinsic", false]], "sudo_set_mechanism_emission_split_extrinsic() (in module bittensor.core.extrinsics.sudo)": [[71, "bittensor.core.extrinsics.sudo.sudo_set_mechanism_emission_split_extrinsic", false]], "sudo_set_min_allowed_uids (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MIN_ALLOWED_UIDS", false]], "sudo_set_min_allowed_uids() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_min_allowed_uids", false]], "sudo_set_min_allowed_weights (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MIN_ALLOWED_WEIGHTS", false]], "sudo_set_min_allowed_weights() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_min_allowed_weights", false]], "sudo_set_min_burn (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MIN_BURN", false]], "sudo_set_min_burn() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_min_burn", false]], "sudo_set_min_childkey_take (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MIN_CHILDKEY_TAKE", false]], "sudo_set_min_delegate_take (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MIN_DELEGATE_TAKE", false]], "sudo_set_min_delegate_take() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_min_delegate_take", false]], "sudo_set_min_difficulty (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MIN_DIFFICULTY", false]], "sudo_set_min_difficulty() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_min_difficulty", false]], "sudo_set_network_immunity_period (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_NETWORK_IMMUNITY_PERIOD", false]], "sudo_set_network_immunity_period() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_network_immunity_period", false]], "sudo_set_network_min_lock_cost (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_NETWORK_MIN_LOCK_COST", false]], "sudo_set_network_min_lock_cost() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_network_min_lock_cost", false]], "sudo_set_network_pow_registration_allowed (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_NETWORK_POW_REGISTRATION_ALLOWED", false]], "sudo_set_network_pow_registration_allowed() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_network_pow_registration_allowed", false]], "sudo_set_network_rate_limit (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_NETWORK_RATE_LIMIT", false]], "sudo_set_network_rate_limit() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_network_rate_limit", false]], "sudo_set_network_registration_allowed (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_NETWORK_REGISTRATION_ALLOWED", false]], "sudo_set_network_registration_allowed() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_network_registration_allowed", false]], "sudo_set_nominator_min_required_stake (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_NOMINATOR_MIN_REQUIRED_STAKE", false]], "sudo_set_nominator_min_required_stake() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_nominator_min_required_stake", false]], "sudo_set_num_root_claims (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_NUM_ROOT_CLAIMS", false]], "sudo_set_owner_hparam_rate_limit (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_OWNER_HPARAM_RATE_LIMIT", false]], "sudo_set_owner_hparam_rate_limit() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_owner_hparam_rate_limit", false]], "sudo_set_owner_immune_neuron_limit (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_OWNER_IMMUNE_NEURON_LIMIT", false]], "sudo_set_owner_immune_neuron_limit() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_owner_immune_neuron_limit", false]], "sudo_set_rao_recycled (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_RAO_RECYCLED", false]], "sudo_set_rao_recycled() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_rao_recycled", false]], "sudo_set_recycle_or_burn (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_RECYCLE_OR_BURN", false]], "sudo_set_recycle_or_burn() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_recycle_or_burn", false]], "sudo_set_rho (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_RHO", false]], "sudo_set_rho() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_rho", false]], "sudo_set_root_claim_threshold (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ROOT_CLAIM_THRESHOLD", false]], "sudo_set_serving_rate_limit (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SERVING_RATE_LIMIT", false]], "sudo_set_serving_rate_limit() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_serving_rate_limit", false]], "sudo_set_sn_owner_hotkey (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SN_OWNER_HOTKEY", false]], "sudo_set_sn_owner_hotkey() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_sn_owner_hotkey", false]], "sudo_set_stake_threshold (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_STAKE_THRESHOLD", false]], "sudo_set_stake_threshold() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_stake_threshold", false]], "sudo_set_subnet_limit (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SUBNET_LIMIT", false]], "sudo_set_subnet_limit() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_subnet_limit", false]], "sudo_set_subnet_moving_alpha (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SUBNET_MOVING_ALPHA", false]], "sudo_set_subnet_moving_alpha() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_subnet_moving_alpha", false]], "sudo_set_subnet_owner_cut (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SUBNET_OWNER_CUT", false]], "sudo_set_subnet_owner_cut() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_subnet_owner_cut", false]], "sudo_set_subnet_owner_hotkey (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SUBNET_OWNER_HOTKEY", false]], "sudo_set_subnet_owner_hotkey() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_subnet_owner_hotkey", false]], "sudo_set_subtoken_enabled (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SUBTOKEN_ENABLED", false]], "sudo_set_subtoken_enabled() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_subtoken_enabled", false]], "sudo_set_tao_flow_cutoff() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_tao_flow_cutoff", false]], "sudo_set_tao_flow_normalization_exponent() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_tao_flow_normalization_exponent", false]], "sudo_set_tao_flow_smoothing_factor() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_tao_flow_smoothing_factor", false]], "sudo_set_target_registrations_per_interval (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_TARGET_REGISTRATIONS_PER_INTERVAL", false]], "sudo_set_target_registrations_per_interval() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_target_registrations_per_interval", false]], "sudo_set_tempo (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_TEMPO", false]], "sudo_set_tempo() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_tempo", false]], "sudo_set_toggle_transfer (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_TOGGLE_TRANSFER", false]], "sudo_set_toggle_transfer() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_toggle_transfer", false]], "sudo_set_total_issuance (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_TOTAL_ISSUANCE", false]], "sudo_set_total_issuance() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_total_issuance", false]], "sudo_set_tx_childkey_take_rate_limit (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_TX_CHILDKEY_TAKE_RATE_LIMIT", false]], "sudo_set_tx_delegate_take_rate_limit (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_TX_DELEGATE_TAKE_RATE_LIMIT", false]], "sudo_set_tx_delegate_take_rate_limit() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_tx_delegate_take_rate_limit", false]], "sudo_set_tx_rate_limit (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_TX_RATE_LIMIT", false]], "sudo_set_tx_rate_limit() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_tx_rate_limit", false]], "sudo_set_weights_set_rate_limit (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_WEIGHTS_SET_RATE_LIMIT", false]], "sudo_set_weights_set_rate_limit() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_weights_set_rate_limit", false]], "sudo_set_weights_version_key (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_WEIGHTS_VERSION_KEY", false]], "sudo_set_weights_version_key() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_weights_version_key", false]], "sudo_set_yuma3_enabled (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_YUMA3_ENABLED", false]], "sudo_set_yuma3_enabled() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_set_yuma3_enabled", false]], "sudo_toggle_evm_precompile (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_TOGGLE_EVM_PRECOMPILE", false]], "sudo_toggle_evm_precompile() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_toggle_evm_precompile", false]], "sudo_trim_to_max_allowed_uids (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_TRIM_TO_MAX_ALLOWED_UIDS", false]], "sudo_trim_to_max_allowed_uids() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.sudo_trim_to_max_allowed_uids", false]], "sudo_unchecked_weight (class in bittensor.extras.dev_framework.calls.sudo_calls)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_UNCHECKED_WEIGHT", false]], "sudouncheckedsetcode (bittensor.core.chain_data.proxy.proxytype attribute)": [[16, "bittensor.core.chain_data.proxy.ProxyType.SudoUncheckedSetCode", false]], "swap (bittensor.core.chain_data.root_claim.rootclaimtype attribute)": [[17, "bittensor.core.chain_data.root_claim.RootClaimType.Swap", false]], "swap (class in bittensor.core.extrinsics.pallets.swap)": [[64, "bittensor.core.extrinsics.pallets.swap.Swap", false]], "swap (in module bittensor.extras.dev_framework.calls.pallets)": [[88, "bittensor.extras.dev_framework.calls.pallets.Swap", false]], "swap_authorities (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SWAP_AUTHORITIES", false]], "swap_authorities() (bittensor.core.extrinsics.pallets.admin_utils.adminutils method)": [[54, "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils.swap_authorities", false]], "swap_coldkey (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SWAP_COLDKEY", false]], "swap_cost (bittensor.extras.dev_framework.calls.non_sudo_calls.swap_coldkey attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SWAP_COLDKEY.swap_cost", false]], "swap_hotkey (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SWAP_HOTKEY", false]], "swap_stake (bittensor.extras.subtensor_api.extrinsics.extrinsics attribute)": [[98, "bittensor.extras.subtensor_api.extrinsics.Extrinsics.swap_stake", false]], "swap_stake (bittensor.extras.subtensor_api.staking.staking attribute)": [[105, "bittensor.extras.subtensor_api.staking.Staking.swap_stake", false]], "swap_stake (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SWAP_STAKE", false]], "swap_stake() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.swap_stake", false]], "swap_stake() (bittensor.core.extrinsics.pallets.subtensor_module.subtensormodule method)": [[62, "bittensor.core.extrinsics.pallets.subtensor_module.SubtensorModule.swap_stake", false]], "swap_stake() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.swap_stake", false]], "swap_stake_extrinsic() (in module bittensor.core.extrinsics.asyncex.move_stake)": [[35, "bittensor.core.extrinsics.asyncex.move_stake.swap_stake_extrinsic", false]], "swap_stake_extrinsic() (in module bittensor.core.extrinsics.move_stake)": [[53, "bittensor.core.extrinsics.move_stake.swap_stake_extrinsic", false]], "swap_stake_limit (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SWAP_STAKE_LIMIT", false]], "swap_stake_limit() (bittensor.core.extrinsics.pallets.subtensor_module.subtensormodule method)": [[62, "bittensor.core.extrinsics.pallets.subtensor_module.SubtensorModule.swap_stake_limit", false]], "swaphotkey (bittensor.core.chain_data.proxy.proxytype attribute)": [[16, "bittensor.core.chain_data.proxy.ProxyType.SwapHotkey", false]], "symbol (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[7, "bittensor.core.chain_data.dynamic_info.DynamicInfo.symbol", false]], "symbol (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.symbol", false]], "symbol (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.Symbol", false]], "symbol (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.symbol", false]], "symbol (bittensor.extras.dev_framework.calls.non_sudo_calls.update_symbol attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.UPDATE_SYMBOL.symbol", false]], "synapse (bittensor.core.errors.synapseexception attribute)": [[29, "bittensor.core.errors.SynapseException.synapse", false]], "synapse (bittensor.core.stream.streamingsynapse.btstreamingresponse attribute)": [[80, "bittensor.core.stream.StreamingSynapse.BTStreamingResponse.synapse", false]], "synapse (class in bittensor.core.synapse)": [[82, "bittensor.core.synapse.Synapse", false]], "synapse_history (bittensor.core.dendrite.dendritemixin attribute)": [[28, "bittensor.core.dendrite.DendriteMixin.synapse_history", false]], "synapse_to_response() (bittensor.core.axon.axonmiddleware class method)": [[1, "bittensor.core.axon.AxonMiddleware.synapse_to_response", false]], "synapsedendritenoneexception": [[29, "bittensor.core.errors.SynapseDendriteNoneException", false]], "synapseexception": [[29, "bittensor.core.errors.SynapseException", false]], "synapseparsingerror": [[29, "bittensor.core.errors.SynapseParsingError", false]], "sync() (bittensor.core.metagraph.asyncmetagraph method)": [[78, "bittensor.core.metagraph.AsyncMetagraph.sync", false]], "sync() (bittensor.core.metagraph.metagraph method)": [[78, "bittensor.core.metagraph.Metagraph.sync", false]], "system (in module bittensor.extras.dev_framework.calls.pallets)": [[88, "bittensor.extras.dev_framework.calls.pallets.System", false]], "t (bittensor.core.metagraph.metagraphmixin property)": [[78, "bittensor.core.metagraph.MetagraphMixin.T", false]], "t (in module bittensor.core.chain_data.info_base)": [[9, "bittensor.core.chain_data.info_base.T", false]], "take (bittensor.core.chain_data.delegate_info.delegateinfobase attribute)": [[5, "bittensor.core.chain_data.delegate_info.DelegateInfoBase.take", false]], "take (bittensor.core.chain_data.delegate_info_lite.delegateinfolite attribute)": [[6, "bittensor.core.chain_data.delegate_info_lite.DelegateInfoLite.take", false]], "take (bittensor.extras.dev_framework.calls.non_sudo_calls.decrease_take attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.DECREASE_TAKE.take", false]], "take (bittensor.extras.dev_framework.calls.non_sudo_calls.increase_take attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.INCREASE_TAKE.take", false]], "take (bittensor.extras.dev_framework.calls.non_sudo_calls.set_childkey_take attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_CHILDKEY_TAKE.take", false]], "take (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_max_childkey_take attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MAX_CHILDKEY_TAKE.take", false]], "take (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_min_childkey_take attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MIN_CHILDKEY_TAKE.take", false]], "take (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_min_delegate_take attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MIN_DELEGATE_TAKE.take", false]], "takeerror": [[29, "bittensor.core.errors.TakeError", false]], "tao (bittensor.utils.balance.balance property)": [[112, "bittensor.utils.balance.Balance.tao", false]], "tao() (in module bittensor.utils.balance)": [[112, "bittensor.utils.balance.tao", false]], "tao_amount (bittensor.core.chain_data.sim_swap.simswapresult attribute)": [[19, "bittensor.core.chain_data.sim_swap.SimSwapResult.tao_amount", false]], "tao_app_block_explorer (in module bittensor.core.settings)": [[79, "bittensor.core.settings.TAO_APP_BLOCK_EXPLORER", false]], "tao_dividends_per_hotkey (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.tao_dividends_per_hotkey", false]], "tao_dividends_per_hotkey (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.tao_dividends_per_hotkey", false]], "tao_fee (bittensor.core.chain_data.sim_swap.simswapresult attribute)": [[19, "bittensor.core.chain_data.sim_swap.SimSwapResult.tao_fee", false]], "tao_in (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[7, "bittensor.core.chain_data.dynamic_info.DynamicInfo.tao_in", false]], "tao_in (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.tao_in", false]], "tao_in (bittensor.core.chain_data.metagraph_info.metagraphinfopool attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfoPool.tao_in", false]], "tao_in_emission (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[7, "bittensor.core.chain_data.dynamic_info.DynamicInfo.tao_in_emission", false]], "tao_in_emission (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.tao_in_emission", false]], "tao_in_emission (bittensor.core.chain_data.metagraph_info.metagraphinfoemissions attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfoEmissions.tao_in_emission", false]], "tao_slippage (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[7, "bittensor.core.chain_data.dynamic_info.DynamicInfo.tao_slippage", false]], "tao_stake (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.tao_stake", false]], "tao_stake (bittensor.core.chain_data.subnet_state.subnetstate attribute)": [[24, "bittensor.core.chain_data.subnet_state.SubnetState.tao_stake", false]], "tao_stake (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.tao_stake", false]], "tao_stake (bittensor.core.metagraph.nontorchmetagraph attribute)": [[78, "bittensor.core.metagraph.NonTorchMetagraph.tao_stake", false]], "tao_stake (bittensor.core.metagraph.torchmetagraph attribute)": [[78, "bittensor.core.metagraph.TorchMetagraph.tao_stake", false]], "tao_symbol (in module bittensor.core.settings)": [[79, "bittensor.core.settings.TAO_SYMBOL", false]], "tao_to_alpha() (bittensor.core.chain_data.dynamic_info.dynamicinfo method)": [[7, "bittensor.core.chain_data.dynamic_info.DynamicInfo.tao_to_alpha", false]], "tao_to_alpha_with_slippage() (bittensor.core.chain_data.dynamic_info.dynamicinfo method)": [[7, "bittensor.core.chain_data.dynamic_info.DynamicInfo.tao_to_alpha_with_slippage", false]], "taodividendsperhotkey (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.TaoDividendsPerHotkey", false]], "taoin (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.TaoIn", false]], "taoinemission (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.TaoInEmission", false]], "taostake (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.TaoStake", false]], "target (bittensor.extras.dev_framework.calls.non_sudo_calls.call attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CALL.target", false]], "target_address (bittensor.core.chain_data.crowdloan_info.crowdloaninfo attribute)": [[4, "bittensor.core.chain_data.crowdloan_info.CrowdloanInfo.target_address", false]], "target_address (bittensor.extras.dev_framework.calls.non_sudo_calls.create attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CREATE.target_address", false]], "target_registrations_per_interval (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_target_registrations_per_interval attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_TARGET_REGISTRATIONS_PER_INTERVAL.target_registrations_per_interval", false]], "target_regs_per_interval (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.target_regs_per_interval", false]], "target_regs_per_interval (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.target_regs_per_interval", false]], "target_regs_per_interval (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[21, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.target_regs_per_interval", false]], "targetregsperinterval (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.TargetRegsPerInterval", false]], "task (bittensor.extras.dev_framework.calls.non_sudo_calls.cancel_retry attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CANCEL_RETRY.task", false]], "task (bittensor.extras.dev_framework.calls.non_sudo_calls.set_retry attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_RETRY.task", false]], "tempo (bittensor.core.chain_data.dynamic_info.dynamicinfo attribute)": [[7, "bittensor.core.chain_data.dynamic_info.DynamicInfo.tempo", false]], "tempo (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.tempo", false]], "tempo (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.tempo", false]], "tempo (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.Tempo", false]], "tempo (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[21, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.tempo", false]], "tempo (bittensor.core.chain_data.subnet_info.subnetinfo attribute)": [[23, "bittensor.core.chain_data.subnet_info.SubnetInfo.tempo", false]], "tempo (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.tempo", false]], "tempo (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_tempo attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_TEMPO.tempo", false]], "tempo (bittensor.extras.subtensor_api.subnets.subnets attribute)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets.tempo", false]], "tempo() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.tempo", false]], "tempo() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.tempo", false]], "tensor (class in bittensor.core.tensor)": [[83, "bittensor.core.tensor.Tensor", false], [83, "bittensor.core.tensor.tensor", false]], "tensor (in module bittensor.core.metagraph)": [[78, "bittensor.core.metagraph.Tensor", false]], "tensor() (bittensor.core.tensor.tensor method)": [[83, "bittensor.core.tensor.Tensor.tensor", false]], "terminalinfo (class in bittensor.core.synapse)": [[82, "bittensor.core.synapse.TerminalInfo", false]], "terminate_lease (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.TERMINATE_LEASE", false]], "terminate_workers_and_wait_for_exit() (in module bittensor.utils.registration.pow)": [[127, "bittensor.utils.registration.pow.terminate_workers_and_wait_for_exit", false]], "testsubnet (class in bittensor.extras.dev_framework.subnet)": [[91, "bittensor.extras.dev_framework.subnet.TestSubnet", false]], "thread_pool (bittensor.core.axon.axon attribute)": [[1, "bittensor.core.axon.Axon.thread_pool", false]], "threshold (bittensor.core.chain_data.proposal_vote_data.proposalvotedata attribute)": [[15, "bittensor.core.chain_data.proposal_vote_data.ProposalVoteData.threshold", false]], "threshold (bittensor.extras.dev_framework.calls.non_sudo_calls.approve_as_multi attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.APPROVE_AS_MULTI.threshold", false]], "threshold (bittensor.extras.dev_framework.calls.non_sudo_calls.as_multi attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.AS_MULTI.threshold", false]], "threshold (bittensor.extras.dev_framework.calls.non_sudo_calls.cancel_as_multi attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CANCEL_AS_MULTI.threshold", false]], "threshold (bittensor.extras.dev_framework.calls.non_sudo_calls.poke_deposit attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.POKE_DEPOSIT.threshold", false]], "tick_high (bittensor.extras.dev_framework.calls.non_sudo_calls.add_liquidity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ADD_LIQUIDITY.tick_high", false]], "tick_low (bittensor.extras.dev_framework.calls.non_sudo_calls.add_liquidity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ADD_LIQUIDITY.tick_low", false]], "tick_to_price() (in module bittensor.utils.liquidity)": [[123, "bittensor.utils.liquidity.tick_to_price", false]], "time_average (bittensor.utils.registration.pow.registrationstatistics attribute)": [[127, "bittensor.utils.registration.pow.RegistrationStatistics.time_average", false]], "time_spent (bittensor.utils.registration.pow.registrationstatistics attribute)": [[127, "bittensor.utils.registration.pow.RegistrationStatistics.time_spent", false]], "time_spent_total (bittensor.utils.registration.pow.registrationstatistics attribute)": [[127, "bittensor.utils.registration.pow.RegistrationStatistics.time_spent_total", false]], "timeout (bittensor.core.synapse.synapse attribute)": [[82, "bittensor.core.synapse.Synapse.timeout", false]], "timepoint (bittensor.extras.dev_framework.calls.non_sudo_calls.cancel_as_multi attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CANCEL_AS_MULTI.timepoint", false]], "timestamp (bittensor.core.types.blockinfo attribute)": [[85, "bittensor.core.types.BlockInfo.timestamp", false]], "timestamp (in module bittensor.extras.dev_framework.calls.pallets)": [[88, "bittensor.extras.dev_framework.calls.pallets.Timestamp", false]], "to_dict() (bittensor.core.chain_data.proxy.proxyconstants method)": [[16, "bittensor.core.chain_data.proxy.ProxyConstants.to_dict", false]], "to_dict() (bittensor.core.chain_data.root_claim.keepsubnetsdescriptor method)": [[17, "bittensor.core.chain_data.root_claim.KeepSubnetsDescriptor.to_dict", false]], "to_dict() (bittensor.core.config.config method)": [[27, "bittensor.core.config.Config.to_dict", false]], "to_headers() (bittensor.core.synapse.synapse method)": [[82, "bittensor.core.synapse.Synapse.to_headers", false], [82, "id5", false]], "to_parameter_dict() (bittensor.core.chain_data.axon_info.axoninfo method)": [[2, "bittensor.core.chain_data.axon_info.AxonInfo.to_parameter_dict", false]], "to_parameter_dict() (bittensor.core.chain_data.ip_info.ipinfo method)": [[10, "bittensor.core.chain_data.ip_info.IPInfo.to_parameter_dict", false]], "to_string() (bittensor.core.axon.axon method)": [[1, "bittensor.core.axon.Axon.to_string", false]], "to_string() (bittensor.core.chain_data.axon_info.axoninfo method)": [[2, "bittensor.core.chain_data.axon_info.AxonInfo.to_string", false]], "to_token_amounts() (bittensor.utils.liquidity.liquidityposition method)": [[123, "bittensor.utils.liquidity.LiquidityPosition.to_token_amounts", false]], "toggle (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_toggle_transfer attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_TOGGLE_TRANSFER.toggle", false]], "toggle_user_liquidity (bittensor.extras.subtensor_api.extrinsics.extrinsics attribute)": [[98, "bittensor.extras.subtensor_api.extrinsics.Extrinsics.toggle_user_liquidity", false]], "toggle_user_liquidity (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.TOGGLE_USER_LIQUIDITY", false]], "toggle_user_liquidity() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.toggle_user_liquidity", false]], "toggle_user_liquidity() (bittensor.core.extrinsics.pallets.swap.swap method)": [[64, "bittensor.core.extrinsics.pallets.swap.Swap.toggle_user_liquidity", false]], "toggle_user_liquidity() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.toggle_user_liquidity", false]], "toggle_user_liquidity_extrinsic() (in module bittensor.core.extrinsics.asyncex.liquidity)": [[33, "bittensor.core.extrinsics.asyncex.liquidity.toggle_user_liquidity_extrinsic", false]], "toggle_user_liquidity_extrinsic() (in module bittensor.core.extrinsics.liquidity)": [[51, "bittensor.core.extrinsics.liquidity.toggle_user_liquidity_extrinsic", false]], "token_streamer (bittensor.core.stream.btstreamingresponsemodel attribute)": [[80, "bittensor.core.stream.BTStreamingResponseModel.token_streamer", false]], "token_streamer (bittensor.core.stream.streamingsynapse.btstreamingresponse attribute)": [[80, "bittensor.core.stream.StreamingSynapse.BTStreamingResponse.token_streamer", false]], "tolist() (bittensor.core.tensor.tensor method)": [[83, "bittensor.core.tensor.Tensor.tolist", false]], "toomanychildren": [[29, "bittensor.core.errors.TooManyChildren", false]], "torch (bittensor.core.tensor.dtypes attribute)": [[83, "bittensor.core.tensor.DTypes.torch", false]], "torch (in module bittensor.utils)": [[122, "bittensor.utils.torch", false]], "torch (in module bittensor.utils.registration.pow)": [[127, "bittensor.utils.registration.pow.torch", false]], "torchmetagraph (class in bittensor.core.metagraph)": [[78, "bittensor.core.metagraph.TorchMetagraph", false]], "total_issuance (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_total_issuance attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_TOTAL_ISSUANCE.total_issuance", false]], "total_size (bittensor.core.synapse.synapse attribute)": [[82, "bittensor.core.synapse.Synapse.total_size", false]], "total_stake (bittensor.core.chain_data.delegate_info.delegateinfo attribute)": [[5, "bittensor.core.chain_data.delegate_info.DelegateInfo.total_stake", false]], "total_stake (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.total_stake", false]], "total_stake (bittensor.core.chain_data.neuron_info.neuroninfo attribute)": [[12, "bittensor.core.chain_data.neuron_info.NeuronInfo.total_stake", false]], "total_stake (bittensor.core.chain_data.neuron_info_lite.neuroninfolite attribute)": [[13, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite.total_stake", false]], "total_stake (bittensor.core.chain_data.subnet_state.subnetstate attribute)": [[24, "bittensor.core.chain_data.subnet_state.SubnetState.total_stake", false]], "total_stake (bittensor.core.metagraph.nontorchmetagraph attribute)": [[78, "bittensor.core.metagraph.NonTorchMetagraph.total_stake", false]], "total_stake (bittensor.core.metagraph.torchmetagraph attribute)": [[78, "bittensor.core.metagraph.TorchMetagraph.total_stake", false]], "totalstake (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.TotalStake", false]], "tpb (bittensor.utils.registration.pow.cudasolver attribute)": [[127, "bittensor.utils.registration.pow.CUDASolver.tpb", false]], "trace (bittensor.utils.btlogging.format.btstreamformatter attribute)": [[115, "bittensor.utils.btlogging.format.BtStreamFormatter.trace", false]], "trace (bittensor.utils.btlogging.loggingmachine.loggingconfig attribute)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingConfig.trace", false]], "trace (bittensor.utils.btlogging.loggingmachine.loggingmachine attribute)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.Trace", false]], "trace() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.trace", false]], "trace() (in module bittensor.utils.btlogging.levels)": [[118, "bittensor.utils.btlogging.levels.trace", false]], "trace_level_num (in module bittensor.utils.btlogging.format)": [[115, "bittensor.utils.btlogging.format.TRACE_LEVEL_NUM", false]], "trace_log_format (in module bittensor.utils.btlogging.defines)": [[114, "bittensor.utils.btlogging.defines.TRACE_LOG_FORMAT", false]], "transact (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.TRANSACT", false]], "transaction (bittensor.extras.dev_framework.calls.non_sudo_calls.transact attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.TRANSACT.transaction", false]], "transaction_alpha_fee (bittensor.core.types.extrinsicresponse attribute)": [[85, "bittensor.core.types.ExtrinsicResponse.transaction_alpha_fee", false]], "transaction_tao_fee (bittensor.core.types.extrinsicresponse attribute)": [[85, "bittensor.core.types.ExtrinsicResponse.transaction_tao_fee", false]], "transfer (bittensor.core.chain_data.proxy.proxytype attribute)": [[16, "bittensor.core.chain_data.proxy.ProxyType.Transfer", false]], "transfer (bittensor.extras.subtensor_api.extrinsics.extrinsics attribute)": [[98, "bittensor.extras.subtensor_api.extrinsics.Extrinsics.transfer", false]], "transfer (bittensor.extras.subtensor_api.wallets.wallets attribute)": [[108, "bittensor.extras.subtensor_api.wallets.Wallets.transfer", false]], "transfer() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.transfer", false]], "transfer() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.transfer", false]], "transfer_all (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.TRANSFER_ALL", false]], "transfer_all() (bittensor.core.extrinsics.pallets.balances.balances method)": [[55, "bittensor.core.extrinsics.pallets.balances.Balances.transfer_all", false]], "transfer_allow_death (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.TRANSFER_ALLOW_DEATH", false]], "transfer_allow_death() (bittensor.core.extrinsics.pallets.balances.balances method)": [[55, "bittensor.core.extrinsics.pallets.balances.Balances.transfer_allow_death", false]], "transfer_extrinsic() (in module bittensor.core.extrinsics.asyncex.transfer)": [[44, "bittensor.core.extrinsics.asyncex.transfer.transfer_extrinsic", false]], "transfer_extrinsic() (in module bittensor.core.extrinsics.transfer)": [[73, "bittensor.core.extrinsics.transfer.transfer_extrinsic", false]], "transfer_keep_alive (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.TRANSFER_KEEP_ALIVE", false]], "transfer_keep_alive() (bittensor.core.extrinsics.pallets.balances.balances method)": [[55, "bittensor.core.extrinsics.pallets.balances.Balances.transfer_keep_alive", false]], "transfer_stake (bittensor.extras.subtensor_api.extrinsics.extrinsics attribute)": [[98, "bittensor.extras.subtensor_api.extrinsics.Extrinsics.transfer_stake", false]], "transfer_stake (bittensor.extras.subtensor_api.staking.staking attribute)": [[105, "bittensor.extras.subtensor_api.staking.Staking.transfer_stake", false]], "transfer_stake (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.TRANSFER_STAKE", false]], "transfer_stake() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.transfer_stake", false]], "transfer_stake() (bittensor.core.extrinsics.pallets.subtensor_module.subtensormodule method)": [[62, "bittensor.core.extrinsics.pallets.subtensor_module.SubtensorModule.transfer_stake", false]], "transfer_stake() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.transfer_stake", false]], "transfer_stake_extrinsic() (in module bittensor.core.extrinsics.asyncex.move_stake)": [[35, "bittensor.core.extrinsics.asyncex.move_stake.transfer_stake_extrinsic", false]], "transfer_stake_extrinsic() (in module bittensor.core.extrinsics.move_stake)": [[53, "bittensor.core.extrinsics.move_stake.transfer_stake_extrinsic", false]], "transfererror": [[29, "bittensor.core.errors.TransferError", false]], "transfers_enabled (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[21, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.transfers_enabled", false]], "triumvirate (bittensor.core.chain_data.proxy.proxytype attribute)": [[16, "bittensor.core.chain_data.proxy.ProxyType.Triumvirate", false]], "trust (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.trust", false]], "trust (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.Trust", false]], "trust (bittensor.core.chain_data.neuron_info.neuroninfo attribute)": [[12, "bittensor.core.chain_data.neuron_info.NeuronInfo.trust", false]], "trust (bittensor.core.chain_data.neuron_info_lite.neuroninfolite attribute)": [[13, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite.trust", false]], "trust (bittensor.core.chain_data.subnet_state.subnetstate attribute)": [[24, "bittensor.core.chain_data.subnet_state.SubnetState.trust", false]], "trust (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.trust", false]], "trust (bittensor.core.metagraph.nontorchmetagraph attribute)": [[78, "bittensor.core.metagraph.NonTorchMetagraph.trust", false]], "trust (bittensor.core.metagraph.torchmetagraph attribute)": [[78, "bittensor.core.metagraph.TorchMetagraph.trust", false]], "try_associate_hotkey (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.TRY_ASSOCIATE_HOTKEY", false]], "ts (bittensor.core.metagraph.metagraphmixin property)": [[78, "bittensor.core.metagraph.MetagraphMixin.TS", false]], "tv (bittensor.core.metagraph.metagraphmixin property)": [[78, "bittensor.core.metagraph.MetagraphMixin.Tv", false]], "tx_rate_limit (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_tx_childkey_take_rate_limit attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_TX_CHILDKEY_TAKE_RATE_LIMIT.tx_rate_limit", false]], "tx_rate_limit (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_tx_delegate_take_rate_limit attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_TX_DELEGATE_TAKE_RATE_LIMIT.tx_rate_limit", false]], "tx_rate_limit (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_tx_rate_limit attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_TX_RATE_LIMIT.tx_rate_limit", false]], "tx_rate_limit (bittensor.extras.subtensor_api.chain.chain attribute)": [[94, "bittensor.extras.subtensor_api.chain.Chain.tx_rate_limit", false]], "tx_rate_limit() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.tx_rate_limit", false]], "tx_rate_limit() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.tx_rate_limit", false]], "txratelimitexceeded": [[29, "bittensor.core.errors.TxRateLimitExceeded", false]], "type_registry (in module bittensor.core.settings)": [[79, "bittensor.core.settings.TYPE_REGISTRY", false]], "u16_max (in module bittensor.utils)": [[122, "bittensor.utils.U16_MAX", false]], "u16_max (in module bittensor.utils.weight_utils)": [[131, "bittensor.utils.weight_utils.U16_MAX", false]], "u16_normalized_float() (in module bittensor.utils)": [[122, "bittensor.utils.u16_normalized_float", false]], "u32_max (in module bittensor.utils.weight_utils)": [[131, "bittensor.utils.weight_utils.U32_MAX", false]], "u64_max (in module bittensor.utils)": [[122, "bittensor.utils.U64_MAX", false]], "u64_normalized_float() (in module bittensor.utils)": [[122, "bittensor.utils.u64_normalized_float", false]], "uid (bittensor.core.chain_data.neuron_info.neuroninfo attribute)": [[12, "bittensor.core.chain_data.neuron_info.NeuronInfo.uid", false]], "uid (bittensor.core.chain_data.neuron_info_lite.neuroninfolite attribute)": [[13, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite.uid", false]], "uids (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.uids", false]], "uids (bittensor.core.metagraph.nontorchmetagraph attribute)": [[78, "bittensor.core.metagraph.NonTorchMetagraph.uids", false]], "uids (bittensor.core.metagraph.torchmetagraph attribute)": [[78, "bittensor.core.metagraph.TorchMetagraph.uids", false]], "uids (bittensor.extras.dev_framework.calls.non_sudo_calls.reveal_mechanism_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REVEAL_MECHANISM_WEIGHTS.uids", false]], "uids (bittensor.extras.dev_framework.calls.non_sudo_calls.reveal_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REVEAL_WEIGHTS.uids", false]], "uids (in module bittensor.core.types)": [[85, "bittensor.core.types.UIDs", false]], "uids_list (bittensor.extras.dev_framework.calls.non_sudo_calls.batch_reveal_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.BATCH_REVEAL_WEIGHTS.uids_list", false]], "unit (bittensor.utils.balance.balance attribute)": [[112, "bittensor.utils.balance.Balance.unit", false]], "unknownsynapseerror": [[29, "bittensor.core.errors.UnknownSynapseError", false]], "unlock_key() (in module bittensor.utils)": [[122, "bittensor.utils.unlock_key", false]], "unlock_wallet() (bittensor.core.types.extrinsicresponse class method)": [[85, "bittensor.core.types.ExtrinsicResponse.unlock_wallet", false]], "unlockstatus (class in bittensor.utils)": [[122, "bittensor.utils.UnlockStatus", false]], "unnote_preimage (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.UNNOTE_PREIMAGE", false]], "unrequest_preimage (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.UNREQUEST_PREIMAGE", false]], "unstake (bittensor.extras.subtensor_api.extrinsics.extrinsics attribute)": [[98, "bittensor.extras.subtensor_api.extrinsics.Extrinsics.unstake", false]], "unstake (bittensor.extras.subtensor_api.staking.staking attribute)": [[105, "bittensor.extras.subtensor_api.staking.Staking.unstake", false]], "unstake() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.unstake", false]], "unstake() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.unstake", false]], "unstake_all (bittensor.extras.subtensor_api.extrinsics.extrinsics attribute)": [[98, "bittensor.extras.subtensor_api.extrinsics.Extrinsics.unstake_all", false]], "unstake_all (bittensor.extras.subtensor_api.staking.staking attribute)": [[105, "bittensor.extras.subtensor_api.staking.Staking.unstake_all", false]], "unstake_all (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.UNSTAKE_ALL", false]], "unstake_all() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.unstake_all", false]], "unstake_all() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.unstake_all", false]], "unstake_all_alpha (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.UNSTAKE_ALL_ALPHA", false]], "unstake_all_extrinsic() (in module bittensor.core.extrinsics.asyncex.unstaking)": [[45, "bittensor.core.extrinsics.asyncex.unstaking.unstake_all_extrinsic", false]], "unstake_all_extrinsic() (in module bittensor.core.extrinsics.unstaking)": [[74, "bittensor.core.extrinsics.unstaking.unstake_all_extrinsic", false]], "unstake_extrinsic() (in module bittensor.core.extrinsics.asyncex.unstaking)": [[45, "bittensor.core.extrinsics.asyncex.unstaking.unstake_extrinsic", false]], "unstake_extrinsic() (in module bittensor.core.extrinsics.unstaking)": [[74, "bittensor.core.extrinsics.unstaking.unstake_extrinsic", false]], "unstake_multiple (bittensor.extras.subtensor_api.extrinsics.extrinsics attribute)": [[98, "bittensor.extras.subtensor_api.extrinsics.Extrinsics.unstake_multiple", false]], "unstake_multiple (bittensor.extras.subtensor_api.staking.staking attribute)": [[105, "bittensor.extras.subtensor_api.staking.Staking.unstake_multiple", false]], "unstake_multiple() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.unstake_multiple", false]], "unstake_multiple() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.unstake_multiple", false]], "unstake_multiple_extrinsic() (in module bittensor.core.extrinsics.asyncex.unstaking)": [[45, "bittensor.core.extrinsics.asyncex.unstaking.unstake_multiple_extrinsic", false]], "unstake_multiple_extrinsic() (in module bittensor.core.extrinsics.unstaking)": [[74, "bittensor.core.extrinsics.unstaking.unstake_multiple_extrinsic", false]], "unstakeerror": [[29, "bittensor.core.errors.UnstakeError", false]], "update() (bittensor.utils.registration.pow.registrationstatisticslogger method)": [[127, "bittensor.utils.registration.pow.RegistrationStatisticsLogger.update", false]], "update() (bittensor.utils.registration.pow.status method)": [[127, "bittensor.utils.registration.pow.Status.update", false]], "update_cap (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.UPDATE_CAP", false]], "update_cap() (bittensor.core.extrinsics.pallets.crowdloan.crowdloan method)": [[58, "bittensor.core.extrinsics.pallets.crowdloan.Crowdloan.update_cap", false]], "update_cap_crowdloan (bittensor.extras.subtensor_api.crowdloans.crowdloans attribute)": [[96, "bittensor.extras.subtensor_api.crowdloans.Crowdloans.update_cap_crowdloan", false]], "update_cap_crowdloan (bittensor.extras.subtensor_api.extrinsics.extrinsics attribute)": [[98, "bittensor.extras.subtensor_api.extrinsics.Extrinsics.update_cap_crowdloan", false]], "update_cap_crowdloan() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.update_cap_crowdloan", false]], "update_cap_crowdloan() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.update_cap_crowdloan", false]], "update_cap_crowdloan_extrinsic() (in module bittensor.core.extrinsics.asyncex.crowdloan)": [[31, "bittensor.core.extrinsics.asyncex.crowdloan.update_cap_crowdloan_extrinsic", false]], "update_cap_crowdloan_extrinsic() (in module bittensor.core.extrinsics.crowdloan)": [[49, "bittensor.core.extrinsics.crowdloan.update_cap_crowdloan_extrinsic", false]], "update_curr_block() (in module bittensor.utils.registration.pow)": [[127, "bittensor.utils.registration.pow.update_curr_block", false]], "update_end (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.UPDATE_END", false]], "update_end() (bittensor.core.extrinsics.pallets.crowdloan.crowdloan method)": [[58, "bittensor.core.extrinsics.pallets.crowdloan.Crowdloan.update_end", false]], "update_end_crowdloan (bittensor.extras.subtensor_api.crowdloans.crowdloans attribute)": [[96, "bittensor.extras.subtensor_api.crowdloans.Crowdloans.update_end_crowdloan", false]], "update_end_crowdloan (bittensor.extras.subtensor_api.extrinsics.extrinsics attribute)": [[98, "bittensor.extras.subtensor_api.extrinsics.Extrinsics.update_end_crowdloan", false]], "update_end_crowdloan() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.update_end_crowdloan", false]], "update_end_crowdloan() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.update_end_crowdloan", false]], "update_end_crowdloan_extrinsic() (in module bittensor.core.extrinsics.asyncex.crowdloan)": [[31, "bittensor.core.extrinsics.asyncex.crowdloan.update_end_crowdloan_extrinsic", false]], "update_end_crowdloan_extrinsic() (in module bittensor.core.extrinsics.crowdloan)": [[49, "bittensor.core.extrinsics.crowdloan.update_end_crowdloan_extrinsic", false]], "update_min_contribution (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.UPDATE_MIN_CONTRIBUTION", false]], "update_min_contribution() (bittensor.core.extrinsics.pallets.crowdloan.crowdloan method)": [[58, "bittensor.core.extrinsics.pallets.crowdloan.Crowdloan.update_min_contribution", false]], "update_min_contribution_crowdloan (bittensor.extras.subtensor_api.crowdloans.crowdloans attribute)": [[96, "bittensor.extras.subtensor_api.crowdloans.Crowdloans.update_min_contribution_crowdloan", false]], "update_min_contribution_crowdloan (bittensor.extras.subtensor_api.extrinsics.extrinsics attribute)": [[98, "bittensor.extras.subtensor_api.extrinsics.Extrinsics.update_min_contribution_crowdloan", false]], "update_min_contribution_crowdloan() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.update_min_contribution_crowdloan", false]], "update_min_contribution_crowdloan() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.update_min_contribution_crowdloan", false]], "update_min_contribution_crowdloan_extrinsic() (in module bittensor.core.extrinsics.asyncex.crowdloan)": [[31, "bittensor.core.extrinsics.asyncex.crowdloan.update_min_contribution_crowdloan_extrinsic", false]], "update_min_contribution_crowdloan_extrinsic() (in module bittensor.core.extrinsics.crowdloan)": [[49, "bittensor.core.extrinsics.crowdloan.update_min_contribution_crowdloan_extrinsic", false]], "update_symbol (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.UPDATE_SYMBOL", false]], "upgrade_accounts (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.UPGRADE_ACCOUNTS", false]], "url (bittensor.core.chain_data.chain_identity.chainidentity attribute)": [[3, "bittensor.core.chain_data.chain_identity.ChainIdentity.url", false]], "url (bittensor.extras.dev_framework.calls.non_sudo_calls.set_identity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_IDENTITY.url", false]], "use_torch (in module bittensor.utils)": [[122, "bittensor.utils.use_torch", false]], "use_torch() (in module bittensor.utils.registration.pow)": [[127, "bittensor.utils.registration.pow.use_torch", false]], "user_bittensor_dir (in module bittensor.core.settings)": [[79, "bittensor.core.settings.USER_BITTENSOR_DIR", false]], "user_liquidity_enabled (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[21, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.user_liquidity_enabled", false]], "usingspawnstartmethod (class in bittensor.utils.registration.pow)": [[127, "bittensor.utils.registration.pow.UsingSpawnStartMethod", false]], "utility (in module bittensor.extras.dev_framework.calls.pallets)": [[88, "bittensor.extras.dev_framework.calls.pallets.Utility", false]], "uuid (bittensor.core.axon.axon attribute)": [[1, "bittensor.core.axon.Axon.uuid", false]], "uuid (bittensor.core.dendrite.dendritemixin attribute)": [[28, "bittensor.core.dendrite.DendriteMixin.uuid", false]], "uuid (bittensor.core.synapse.terminalinfo attribute)": [[82, "bittensor.core.synapse.TerminalInfo.uuid", false]], "v_7_2_0 (in module bittensor.core.axon)": [[1, "bittensor.core.axon.V_7_2_0", false]], "validate_chain_endpoint() (in module bittensor.utils)": [[122, "bittensor.utils.validate_chain_endpoint", false]], "validate_extrinsic_params (bittensor.extras.subtensor_api.extrinsics.extrinsics attribute)": [[98, "bittensor.extras.subtensor_api.extrinsics.Extrinsics.validate_extrinsic_params", false]], "validate_extrinsic_params() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.validate_extrinsic_params", false]], "validate_extrinsic_params() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.validate_extrinsic_params", false]], "validate_max_attempts() (in module bittensor.utils)": [[122, "bittensor.utils.validate_max_attempts", false]], "validator_permit (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.validator_permit", false]], "validator_permit (bittensor.core.chain_data.neuron_info.neuroninfo attribute)": [[12, "bittensor.core.chain_data.neuron_info.NeuronInfo.validator_permit", false]], "validator_permit (bittensor.core.chain_data.neuron_info_lite.neuroninfolite attribute)": [[13, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite.validator_permit", false]], "validator_permit (bittensor.core.chain_data.subnet_state.subnetstate attribute)": [[24, "bittensor.core.chain_data.subnet_state.SubnetState.validator_permit", false]], "validator_permit (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.validator_permit", false]], "validator_permit (bittensor.core.metagraph.nontorchmetagraph attribute)": [[78, "bittensor.core.metagraph.NonTorchMetagraph.validator_permit", false]], "validator_permit (bittensor.core.metagraph.torchmetagraph attribute)": [[78, "bittensor.core.metagraph.TorchMetagraph.validator_permit", false]], "validator_permits (bittensor.core.chain_data.delegate_info.delegateinfobase attribute)": [[5, "bittensor.core.chain_data.delegate_info.DelegateInfoBase.validator_permits", false]], "validator_permits (bittensor.core.chain_data.delegate_info_lite.delegateinfolite attribute)": [[6, "bittensor.core.chain_data.delegate_info_lite.DelegateInfoLite.validator_permits", false]], "validator_trust (bittensor.core.chain_data.neuron_info.neuroninfo attribute)": [[12, "bittensor.core.chain_data.neuron_info.NeuronInfo.validator_trust", false]], "validator_trust (bittensor.core.chain_data.neuron_info_lite.neuroninfolite attribute)": [[13, "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite.validator_trust", false]], "validator_trust (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.validator_trust", false]], "validator_trust (bittensor.core.metagraph.nontorchmetagraph attribute)": [[78, "bittensor.core.metagraph.NonTorchMetagraph.validator_trust", false]], "validator_trust (bittensor.core.metagraph.torchmetagraph attribute)": [[78, "bittensor.core.metagraph.TorchMetagraph.validator_trust", false]], "validatorpermit (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.ValidatorPermit", false]], "validators (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.validators", false]], "validators (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.Validators", false]], "value (bittensor.extras.dev_framework.calls.non_sudo_calls.burn attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.BURN.value", false]], "value (bittensor.extras.dev_framework.calls.non_sudo_calls.call attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CALL.value", false]], "value (bittensor.extras.dev_framework.calls.non_sudo_calls.create attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CREATE.value", false]], "value (bittensor.extras.dev_framework.calls.non_sudo_calls.create2 attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CREATE2.value", false]], "value (bittensor.extras.dev_framework.calls.non_sudo_calls.force_transfer attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_TRANSFER.value", false]], "value (bittensor.extras.dev_framework.calls.non_sudo_calls.transfer_allow_death attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.TRANSFER_ALLOW_DEATH.value", false]], "value (bittensor.extras.dev_framework.calls.non_sudo_calls.transfer_keep_alive attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.TRANSFER_KEEP_ALIVE.value", false]], "value (bittensor.extras.dev_framework.calls.non_sudo_calls.withdraw attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.WITHDRAW.value", false]], "values (bittensor.extras.dev_framework.calls.non_sudo_calls.reveal_mechanism_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REVEAL_MECHANISM_WEIGHTS.values", false]], "values (bittensor.extras.dev_framework.calls.non_sudo_calls.reveal_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REVEAL_WEIGHTS.values", false]], "values_list (bittensor.extras.dev_framework.calls.non_sudo_calls.batch_reveal_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.BATCH_REVEAL_WEIGHTS.values_list", false]], "verify() (bittensor.core.axon.axonmiddleware method)": [[1, "bittensor.core.axon.AxonMiddleware.verify", false]], "verify_body_integrity() (bittensor.core.axon.axon method)": [[1, "bittensor.core.axon.Axon.verify_body_integrity", false]], "verify_fns (bittensor.core.axon.axon attribute)": [[1, "bittensor.core.axon.Axon.verify_fns", false]], "version (bittensor.core.chain_data.axon_info.axoninfo attribute)": [[2, "bittensor.core.chain_data.axon_info.AxonInfo.version", false]], "version (bittensor.core.chain_data.prometheus_info.prometheusinfo attribute)": [[14, "bittensor.core.chain_data.prometheus_info.PrometheusInfo.version", false]], "version (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.version", false]], "version (bittensor.core.metagraph.nontorchmetagraph attribute)": [[78, "bittensor.core.metagraph.NonTorchMetagraph.version", false]], "version (bittensor.core.metagraph.torchmetagraph attribute)": [[78, "bittensor.core.metagraph.TorchMetagraph.version", false]], "version (bittensor.core.synapse.terminalinfo attribute)": [[82, "bittensor.core.synapse.TerminalInfo.version", false]], "version (bittensor.core.types.axonservecallparams attribute)": [[85, "bittensor.core.types.AxonServeCallParams.version", false]], "version (bittensor.core.types.prometheusservecallparams attribute)": [[85, "bittensor.core.types.PrometheusServeCallParams.version", false]], "version (bittensor.extras.dev_framework.calls.non_sudo_calls.serve_axon attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SERVE_AXON.version", false]], "version (bittensor.extras.dev_framework.calls.non_sudo_calls.serve_axon_tls attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SERVE_AXON_TLS.version", false]], "version (bittensor.extras.dev_framework.calls.non_sudo_calls.serve_prometheus attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SERVE_PROMETHEUS.version", false]], "version (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_commit_reveal_version attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_COMMIT_REVEAL_VERSION.version", false]], "version_as_int (in module bittensor.core.settings)": [[79, "bittensor.core.settings.version_as_int", false]], "version_check_threshold (in module bittensor.utils.version)": [[130, "bittensor.utils.version.VERSION_CHECK_THRESHOLD", false]], "version_key (bittensor.extras.dev_framework.calls.non_sudo_calls.reveal_mechanism_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REVEAL_MECHANISM_WEIGHTS.version_key", false]], "version_key (bittensor.extras.dev_framework.calls.non_sudo_calls.reveal_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REVEAL_WEIGHTS.version_key", false]], "version_key (bittensor.extras.dev_framework.calls.non_sudo_calls.set_mechanism_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_MECHANISM_WEIGHTS.version_key", false]], "version_key (bittensor.extras.dev_framework.calls.non_sudo_calls.set_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_WEIGHTS.version_key", false]], "version_keys (bittensor.extras.dev_framework.calls.non_sudo_calls.batch_reveal_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.BATCH_REVEAL_WEIGHTS.version_keys", false]], "version_keys (bittensor.extras.dev_framework.calls.non_sudo_calls.batch_set_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.BATCH_SET_WEIGHTS.version_keys", false]], "versioncheckerror": [[130, "bittensor.utils.version.VersionCheckError", false]], "versioncheckerror (in module bittensor.utils)": [[122, "bittensor.utils.VersionCheckError", false]], "w (bittensor.core.metagraph.metagraphmixin property)": [[78, "bittensor.core.metagraph.MetagraphMixin.W", false]], "wait_for_block (bittensor.extras.subtensor_api.subtensorapi attribute)": [[99, "bittensor.extras.subtensor_api.SubtensorApi.wait_for_block", false]], "wait_for_block() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.wait_for_block", false]], "wait_for_block() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.wait_for_block", false]], "wait_for_extrinsic_by_hash() (in module bittensor.core.extrinsics.asyncex.mev_shield)": [[34, "bittensor.core.extrinsics.asyncex.mev_shield.wait_for_extrinsic_by_hash", false]], "wait_for_extrinsic_by_hash() (in module bittensor.core.extrinsics.mev_shield)": [[52, "bittensor.core.extrinsics.mev_shield.wait_for_extrinsic_by_hash", false]], "wait_for_finalization (bittensor.extras.dev_framework.subnet.testsubnet attribute)": [[91, "bittensor.extras.dev_framework.subnet.TestSubnet.wait_for_finalization", false]], "wait_for_inclusion (bittensor.extras.dev_framework.subnet.testsubnet attribute)": [[91, "bittensor.extras.dev_framework.subnet.TestSubnet.wait_for_inclusion", false]], "wait_next_epoch() (bittensor.extras.dev_framework.subnet.testsubnet method)": [[91, "bittensor.extras.dev_framework.subnet.TestSubnet.wait_next_epoch", false]], "wait_reveal_and_decrypt() (in module bittensor.extras.timelock)": [[109, "bittensor.extras.timelock.wait_reveal_and_decrypt", false]], "wallet (bittensor.core.axon.axon attribute)": [[1, "bittensor.core.axon.Axon.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.add_liquidity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ADD_LIQUIDITY.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.add_proxy attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ADD_PROXY.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.add_stake attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ADD_STAKE.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.add_stake_limit attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ADD_STAKE_LIMIT.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.announce attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ANNOUNCE.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.apply_authorized_upgrade attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.APPLY_AUTHORIZED_UPGRADE.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.approve_as_multi attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.APPROVE_AS_MULTI.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.as_derivative attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.AS_DERIVATIVE.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.as_multi attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.AS_MULTI.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.as_multi_threshold_1 attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.AS_MULTI_THRESHOLD_1.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.associate_evm_key attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ASSOCIATE_EVM_KEY.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.authorize_upgrade attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.AUTHORIZE_UPGRADE.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.authorize_upgrade_without_checks attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.AUTHORIZE_UPGRADE_WITHOUT_CHECKS.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.batch attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.BATCH.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.batch_all attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.BATCH_ALL.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.batch_commit_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.BATCH_COMMIT_WEIGHTS.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.batch_reveal_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.BATCH_REVEAL_WEIGHTS.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.batch_set_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.BATCH_SET_WEIGHTS.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.burn attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.BURN.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.burn_alpha attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.BURN_ALPHA.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.burned_register attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.BURNED_REGISTER.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.call attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CALL.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.cancel attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CANCEL.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.cancel_as_multi attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CANCEL_AS_MULTI.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.cancel_named attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CANCEL_NAMED.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.cancel_retry attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CANCEL_RETRY.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.cancel_retry_named attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CANCEL_RETRY_NAMED.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.claim_root attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CLAIM_ROOT.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.clear_identity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CLEAR_IDENTITY.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.commit_crv3_mechanism_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.COMMIT_CRV3_MECHANISM_WEIGHTS.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.commit_mechanism_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.COMMIT_MECHANISM_WEIGHTS.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.commit_timelocked_mechanism_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.COMMIT_TIMELOCKED_MECHANISM_WEIGHTS.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.commit_timelocked_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.COMMIT_TIMELOCKED_WEIGHTS.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.commit_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.COMMIT_WEIGHTS.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.contribute attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CONTRIBUTE.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.create attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CREATE.wallet", false], [87, "id2", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.create2 attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CREATE2.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.create_pure attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CREATE_PURE.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.decrease_take attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.DECREASE_TAKE.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.disable_whitelist attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.DISABLE_WHITELIST.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.dispatch_as attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.DISPATCH_AS.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.dispatch_as_fallible attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.DISPATCH_AS_FALLIBLE.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.dissolve attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.DISSOLVE.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.dissolve_network attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.DISSOLVE_NETWORK.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.ensure_updated attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ENSURE_UPDATED.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.enter attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ENTER.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.extend attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.EXTEND.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.faucet attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FAUCET.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.finalize attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FINALIZE.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.force_adjust_total_issuance attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_ADJUST_TOTAL_ISSUANCE.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.force_batch attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_BATCH.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.force_enter attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_ENTER.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.force_exit attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_EXIT.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.force_extend attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_EXTEND.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.force_release_deposit attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_RELEASE_DEPOSIT.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.force_set_balance attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_SET_BALANCE.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.force_slash_deposit attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_SLASH_DEPOSIT.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.force_transfer attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_TRANSFER.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.force_unreserve attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_UNRESERVE.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.if_else attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.IF_ELSE.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.increase_take attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.INCREASE_TAKE.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.kill_prefix attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.KILL_PREFIX.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.kill_pure attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.KILL_PURE.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.kill_storage attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.KILL_STORAGE.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.modify_position attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.MODIFY_POSITION.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.move_stake attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.MOVE_STAKE.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.note_preimage attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.NOTE_PREIMAGE.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.note_stalled attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.NOTE_STALLED.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.poke_deposit attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.POKE_DEPOSIT.wallet", false], [87, "id5", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.proxy attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.PROXY.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.proxy_announced attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.PROXY_ANNOUNCED.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.recycle_alpha attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.RECYCLE_ALPHA.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.refund attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REFUND.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.register attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REGISTER.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.register_leased_network attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REGISTER_LEASED_NETWORK.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.register_network attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REGISTER_NETWORK.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.register_network_with_identity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REGISTER_NETWORK_WITH_IDENTITY.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.reject_announcement attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REJECT_ANNOUNCEMENT.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.release_deposit attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.RELEASE_DEPOSIT.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.remark attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMARK.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.remark_with_event attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMARK_WITH_EVENT.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.remove_announcement attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_ANNOUNCEMENT.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.remove_key attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_KEY.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.remove_liquidity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_LIQUIDITY.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.remove_proxies attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_PROXIES.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.remove_proxy attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_PROXY.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.remove_stake attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_STAKE.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.remove_stake_full_limit attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_STAKE_FULL_LIMIT.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.remove_stake_limit attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_STAKE_LIMIT.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.report_equivocation attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REPORT_EQUIVOCATION.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.report_equivocation_unsigned attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REPORT_EQUIVOCATION_UNSIGNED.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.request_preimage attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REQUEST_PREIMAGE.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.reveal_mechanism_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REVEAL_MECHANISM_WEIGHTS.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.reveal_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REVEAL_WEIGHTS.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.root_dissolve_network attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ROOT_DISSOLVE_NETWORK.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.root_register attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.ROOT_REGISTER.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.schedule attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.schedule_after attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE_AFTER.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.schedule_grandpa_change attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE_GRANDPA_CHANGE.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.schedule_named attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE_NAMED.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.schedule_named_after attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE_NAMED_AFTER.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.schedule_swap_coldkey attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE_SWAP_COLDKEY.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.serve_axon attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SERVE_AXON.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.serve_axon_tls attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SERVE_AXON_TLS.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.serve_prometheus attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SERVE_PROMETHEUS.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_base_fee_per_gas attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_BASE_FEE_PER_GAS.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_beacon_config attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_BEACON_CONFIG.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_childkey_take attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_CHILDKEY_TAKE.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_children attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_CHILDREN.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_code attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_CODE.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_code_without_checks attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_CODE_WITHOUT_CHECKS.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_coldkey_auto_stake_hotkey attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_COLDKEY_AUTO_STAKE_HOTKEY.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_commitment attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_COMMITMENT.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_elasticity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_ELASTICITY.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_fee_rate attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_FEE_RATE.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_heap_pages attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_HEAP_PAGES.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_identity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_IDENTITY.wallet", false], [87, "id8", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_key attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_KEY.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_max_space attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_MAX_SPACE.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_mechanism_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_MECHANISM_WEIGHTS.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_oldest_stored_round attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_OLDEST_STORED_ROUND.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_pending_childkey_cooldown attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_PENDING_CHILDKEY_COOLDOWN.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_retry attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_RETRY.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_retry_named attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_RETRY_NAMED.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_root_claim_type attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_ROOT_CLAIM_TYPE.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_storage attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_STORAGE.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_subnet_identity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_SUBNET_IDENTITY.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_WEIGHTS.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.set_whitelist attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_WHITELIST.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.start_call attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.START_CALL.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.sudo attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SUDO.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.swap_authorities attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SWAP_AUTHORITIES.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.swap_coldkey attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SWAP_COLDKEY.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.swap_hotkey attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SWAP_HOTKEY.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.swap_stake attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SWAP_STAKE.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.swap_stake_limit attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SWAP_STAKE_LIMIT.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.terminate_lease attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.TERMINATE_LEASE.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.toggle_user_liquidity attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.TOGGLE_USER_LIQUIDITY.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.transact attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.TRANSACT.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.transfer_all attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.TRANSFER_ALL.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.transfer_allow_death attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.TRANSFER_ALLOW_DEATH.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.transfer_keep_alive attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.TRANSFER_KEEP_ALIVE.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.transfer_stake attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.TRANSFER_STAKE.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.try_associate_hotkey attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.TRY_ASSOCIATE_HOTKEY.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.unnote_preimage attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.UNNOTE_PREIMAGE.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.unrequest_preimage attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.UNREQUEST_PREIMAGE.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.unstake_all attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.UNSTAKE_ALL.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.unstake_all_alpha attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.UNSTAKE_ALL_ALPHA.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.update_cap attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.UPDATE_CAP.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.update_end attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.UPDATE_END.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.update_min_contribution attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.UPDATE_MIN_CONTRIBUTION.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.update_symbol attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.UPDATE_SYMBOL.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.upgrade_accounts attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.UPGRADE_ACCOUNTS.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.with_weight attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.WITH_WEIGHT.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.withdraw attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.WITHDRAW.wallet", false], [87, "id11", false]], "wallet (bittensor.extras.dev_framework.calls.non_sudo_calls.write_pulse attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.WRITE_PULSE.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_as attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_AS.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_activity_cutoff attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ACTIVITY_CUTOFF.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_adjustment_alpha attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ADJUSTMENT_ALPHA.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_adjustment_interval attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ADJUSTMENT_INTERVAL.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_admin_freeze_window attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ADMIN_FREEZE_WINDOW.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_alpha_sigmoid_steepness attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ALPHA_SIGMOID_STEEPNESS.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_alpha_values attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ALPHA_VALUES.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_bonds_moving_average attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_BONDS_MOVING_AVERAGE.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_bonds_penalty attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_BONDS_PENALTY.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_bonds_reset_enabled attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_BONDS_RESET_ENABLED.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_ck_burn attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_CK_BURN.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_coldkey_swap_schedule_duration attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_COLDKEY_SWAP_SCHEDULE_DURATION.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_commit_reveal_version attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_COMMIT_REVEAL_VERSION.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_commit_reveal_weights_enabled attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_COMMIT_REVEAL_WEIGHTS_ENABLED.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_commit_reveal_weights_interval attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_COMMIT_REVEAL_WEIGHTS_INTERVAL.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_default_take attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_DEFAULT_TAKE.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_difficulty attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_DIFFICULTY.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_dissolve_network_schedule_duration attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_DISSOLVE_NETWORK_SCHEDULE_DURATION.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_ema_price_halving_period attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_EMA_PRICE_HALVING_PERIOD.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_evm_chain_id attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_EVM_CHAIN_ID.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_immunity_period attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_IMMUNITY_PERIOD.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_kappa attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_KAPPA.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_liquid_alpha_enabled attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_LIQUID_ALPHA_ENABLED.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_lock_reduction_interval attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_LOCK_REDUCTION_INTERVAL.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_max_allowed_uids attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MAX_ALLOWED_UIDS.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_max_allowed_validators attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MAX_ALLOWED_VALIDATORS.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_max_burn attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MAX_BURN.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_max_childkey_take attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MAX_CHILDKEY_TAKE.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_max_difficulty attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MAX_DIFFICULTY.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_max_registrations_per_block attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MAX_REGISTRATIONS_PER_BLOCK.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_mechanism_count attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MECHANISM_COUNT.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_mechanism_emission_split attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MECHANISM_EMISSION_SPLIT.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_min_allowed_uids attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MIN_ALLOWED_UIDS.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_min_allowed_weights attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MIN_ALLOWED_WEIGHTS.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_min_burn attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MIN_BURN.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_min_childkey_take attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MIN_CHILDKEY_TAKE.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_min_delegate_take attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MIN_DELEGATE_TAKE.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_min_difficulty attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MIN_DIFFICULTY.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_network_immunity_period attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_NETWORK_IMMUNITY_PERIOD.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_network_min_lock_cost attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_NETWORK_MIN_LOCK_COST.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_network_pow_registration_allowed attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_NETWORK_POW_REGISTRATION_ALLOWED.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_network_rate_limit attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_NETWORK_RATE_LIMIT.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_network_registration_allowed attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_NETWORK_REGISTRATION_ALLOWED.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_nominator_min_required_stake attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_NOMINATOR_MIN_REQUIRED_STAKE.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_num_root_claims attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_NUM_ROOT_CLAIMS.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_owner_hparam_rate_limit attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_OWNER_HPARAM_RATE_LIMIT.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_owner_immune_neuron_limit attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_OWNER_IMMUNE_NEURON_LIMIT.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_rao_recycled attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_RAO_RECYCLED.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_recycle_or_burn attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_RECYCLE_OR_BURN.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_rho attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_RHO.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_root_claim_threshold attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ROOT_CLAIM_THRESHOLD.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_serving_rate_limit attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SERVING_RATE_LIMIT.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_sn_owner_hotkey attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SN_OWNER_HOTKEY.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_stake_threshold attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_STAKE_THRESHOLD.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_subnet_limit attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SUBNET_LIMIT.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_subnet_moving_alpha attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SUBNET_MOVING_ALPHA.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_subnet_owner_cut attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SUBNET_OWNER_CUT.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_subnet_owner_hotkey attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SUBNET_OWNER_HOTKEY.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_subtoken_enabled attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SUBTOKEN_ENABLED.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_target_registrations_per_interval attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_TARGET_REGISTRATIONS_PER_INTERVAL.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_tempo attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_TEMPO.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_toggle_transfer attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_TOGGLE_TRANSFER.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_total_issuance attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_TOTAL_ISSUANCE.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_tx_childkey_take_rate_limit attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_TX_CHILDKEY_TAKE_RATE_LIMIT.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_tx_delegate_take_rate_limit attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_TX_DELEGATE_TAKE_RATE_LIMIT.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_tx_rate_limit attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_TX_RATE_LIMIT.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_weights_set_rate_limit attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_WEIGHTS_SET_RATE_LIMIT.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_weights_version_key attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_WEIGHTS_VERSION_KEY.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_yuma3_enabled attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_YUMA3_ENABLED.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_toggle_evm_precompile attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_TOGGLE_EVM_PRECOMPILE.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_trim_to_max_allowed_uids attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_TRIM_TO_MAX_ALLOWED_UIDS.wallet", false]], "wallet (bittensor.extras.dev_framework.calls.sudo_calls.sudo_unchecked_weight attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_UNCHECKED_WEIGHT.wallet", false]], "wallet (bittensor.extras.dev_framework.utils.activatesubnet attribute)": [[92, "bittensor.extras.dev_framework.utils.ActivateSubnet.wallet", false]], "wallet (bittensor.extras.dev_framework.utils.registerneuron attribute)": [[92, "bittensor.extras.dev_framework.utils.RegisterNeuron.wallet", false]], "wallet (bittensor.extras.dev_framework.utils.registersubnet attribute)": [[92, "bittensor.extras.dev_framework.utils.RegisterSubnet.wallet", false]], "wallet (bittensor.utils.subnets.subnetsapi attribute)": [[129, "bittensor.utils.subnets.SubnetsAPI.wallet", false]], "wallets (bittensor.extras.subtensor_api.subtensorapi property)": [[99, "bittensor.extras.subtensor_api.SubtensorApi.wallets", false]], "wallets (class in bittensor.extras.subtensor_api.wallets)": [[108, "bittensor.extras.subtensor_api.wallets.Wallets", false]], "wallets_dir (in module bittensor.core.settings)": [[79, "bittensor.core.settings.WALLETS_DIR", false]], "warning (bittensor.utils.btlogging.loggingmachine.loggingmachine attribute)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.Warning", false]], "warning() (bittensor.utils.btlogging.console.bittensorconsole method)": [[113, "bittensor.utils.btlogging.console.BittensorConsole.warning", false]], "warning() (bittensor.utils.btlogging.loggingmachine.loggingmachine method)": [[119, "bittensor.utils.btlogging.loggingmachine.LoggingMachine.warning", false]], "warning() (in module bittensor.utils.btlogging.levels)": [[118, "bittensor.utils.btlogging.levels.warning", false]], "weight (bittensor.extras.dev_framework.calls.non_sudo_calls.with_weight attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.WITH_WEIGHT.weight", false]], "weight (bittensor.extras.dev_framework.calls.sudo_calls.sudo_unchecked_weight attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_UNCHECKED_WEIGHT.weight", false]], "weightcommitinfo (class in bittensor.core.chain_data.weight_commit_info)": [[26, "bittensor.core.chain_data.weight_commit_info.WeightCommitInfo", false]], "weights (bittensor.core.chain_data.neuron_info.neuroninfo attribute)": [[12, "bittensor.core.chain_data.neuron_info.NeuronInfo.weights", false]], "weights (bittensor.core.metagraph.metagraphmixin attribute)": [[78, "bittensor.core.metagraph.MetagraphMixin.weights", false]], "weights (bittensor.core.metagraph.nontorchmetagraph attribute)": [[78, "bittensor.core.metagraph.NonTorchMetagraph.weights", false]], "weights (bittensor.core.metagraph.torchmetagraph attribute)": [[78, "bittensor.core.metagraph.TorchMetagraph.weights", false]], "weights (bittensor.extras.dev_framework.calls.non_sudo_calls.batch_set_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.BATCH_SET_WEIGHTS.weights", false]], "weights (bittensor.extras.dev_framework.calls.non_sudo_calls.set_mechanism_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_MECHANISM_WEIGHTS.weights", false]], "weights (bittensor.extras.dev_framework.calls.non_sudo_calls.set_weights attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_WEIGHTS.weights", false]], "weights (bittensor.extras.subtensor_api.subnets.subnets attribute)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets.weights", false]], "weights (in module bittensor.core.types)": [[85, "bittensor.core.types.Weights", false]], "weights() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.weights", false]], "weights() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.weights", false]], "weights_rate_limit (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.weights_rate_limit", false]], "weights_rate_limit (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.weights_rate_limit", false]], "weights_rate_limit (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[21, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.weights_rate_limit", false]], "weights_rate_limit (bittensor.extras.subtensor_api.subnets.subnets attribute)": [[106, "bittensor.extras.subtensor_api.subnets.Subnets.weights_rate_limit", false]], "weights_rate_limit() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.weights_rate_limit", false]], "weights_rate_limit() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.weights_rate_limit", false]], "weights_set_rate_limit (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_weights_set_rate_limit attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_WEIGHTS_SET_RATE_LIMIT.weights_set_rate_limit", false]], "weights_version (bittensor.core.chain_data.metagraph_info.metagraphinfo attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfo.weights_version", false]], "weights_version (bittensor.core.chain_data.metagraph_info.metagraphinfoparams attribute)": [[11, "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams.weights_version", false]], "weights_version (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[21, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.weights_version", false]], "weights_version_key (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_weights_version_key attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_WEIGHTS_VERSION_KEY.weights_version_key", false]], "weightsratelimit (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.WeightsRateLimit", false]], "weightsversion (bittensor.core.chain_data.metagraph_info.selectivemetagraphindex attribute)": [[11, "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex.WeightsVersion", false]], "when (bittensor.extras.dev_framework.calls.non_sudo_calls.cancel attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.CANCEL.when", false]], "when (bittensor.extras.dev_framework.calls.non_sudo_calls.schedule attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE.when", false]], "when (bittensor.extras.dev_framework.calls.non_sudo_calls.schedule_named attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE_NAMED.when", false]], "who (bittensor.extras.dev_framework.calls.non_sudo_calls.force_set_balance attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_SET_BALANCE.who", false]], "who (bittensor.extras.dev_framework.calls.non_sudo_calls.force_unreserve attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_UNRESERVE.who", false]], "who (bittensor.extras.dev_framework.calls.non_sudo_calls.upgrade_accounts attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.UPGRADE_ACCOUNTS.who", false]], "who (bittensor.extras.dev_framework.calls.sudo_calls.sudo_as attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_AS.who", false]], "window (bittensor.extras.dev_framework.calls.sudo_calls.sudo_set_admin_freeze_window attribute)": [[89, "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ADMIN_FREEZE_WINDOW.window", false]], "with_log() (bittensor.core.types.extrinsicresponse method)": [[85, "bittensor.core.types.ExtrinsicResponse.with_log", false]], "with_weight (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.WITH_WEIGHT", false]], "withdraw (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.WITHDRAW", false], [87, "id9", false]], "withdraw() (bittensor.core.extrinsics.pallets.crowdloan.crowdloan method)": [[58, "bittensor.core.extrinsics.pallets.crowdloan.Crowdloan.withdraw", false]], "withdraw_crowdloan (bittensor.extras.subtensor_api.crowdloans.crowdloans attribute)": [[96, "bittensor.extras.subtensor_api.crowdloans.Crowdloans.withdraw_crowdloan", false]], "withdraw_crowdloan (bittensor.extras.subtensor_api.extrinsics.extrinsics attribute)": [[98, "bittensor.extras.subtensor_api.extrinsics.Extrinsics.withdraw_crowdloan", false]], "withdraw_crowdloan() (bittensor.core.async_subtensor.asyncsubtensor method)": [[0, "bittensor.core.async_subtensor.AsyncSubtensor.withdraw_crowdloan", false]], "withdraw_crowdloan() (bittensor.core.subtensor.subtensor method)": [[81, "bittensor.core.subtensor.Subtensor.withdraw_crowdloan", false]], "withdraw_crowdloan_extrinsic() (in module bittensor.core.extrinsics.asyncex.crowdloan)": [[31, "bittensor.core.extrinsics.asyncex.crowdloan.withdraw_crowdloan_extrinsic", false]], "withdraw_crowdloan_extrinsic() (in module bittensor.core.extrinsics.crowdloan)": [[49, "bittensor.core.extrinsics.crowdloan.withdraw_crowdloan_extrinsic", false]], "work (bittensor.extras.dev_framework.calls.non_sudo_calls.faucet attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.FAUCET.work", false]], "work (bittensor.extras.dev_framework.calls.non_sudo_calls.register attribute)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.REGISTER.work", false]], "write_pulse (class in bittensor.extras.dev_framework.calls.non_sudo_calls)": [[87, "bittensor.extras.dev_framework.calls.non_sudo_calls.WRITE_PULSE", false]], "yuma_version (bittensor.core.chain_data.subnet_hyperparameters.subnethyperparameters attribute)": [[21, "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters.yuma_version", false]]}, "objects": {"": [[110, 0, 0, "-", "bittensor"]], "bittensor": [[77, 0, 0, "-", "core"], [93, 0, 0, "-", "extras"], [122, 0, 0, "-", "utils"]], "bittensor.core": [[0, 0, 0, "-", "async_subtensor"], [1, 0, 0, "-", "axon"], [8, 0, 0, "-", "chain_data"], [27, 0, 0, "-", "config"], [28, 0, 0, "-", "dendrite"], [29, 0, 0, "-", "errors"], [50, 0, 0, "-", "extrinsics"], [78, 0, 0, "-", "metagraph"], [79, 0, 0, "-", "settings"], [80, 0, 0, "-", "stream"], [81, 0, 0, "-", "subtensor"], [82, 0, 0, "-", "synapse"], [83, 0, 0, "-", "tensor"], [84, 0, 0, "-", "threadpool"], [85, 0, 0, "-", "types"]], "bittensor.core.async_subtensor": [[0, 1, 1, "", "AsyncSubtensor"], [0, 5, 1, "", "get_async_subtensor"]], "bittensor.core.async_subtensor.AsyncSubtensor": [[0, 2, 1, "", "add_liquidity"], [0, 2, 1, "", "add_proxy"], [0, 2, 1, "", "add_stake"], [0, 2, 1, "", "add_stake_multiple"], [0, 2, 1, "", "all_subnets"], [0, 2, 1, "", "announce_proxy"], [0, 3, 1, "", "block"], [0, 2, 1, "", "blocks_since_last_step"], [0, 2, 1, "", "blocks_since_last_update"], [0, 2, 1, "", "blocks_until_next_epoch"], [0, 2, 1, "", "bonds"], [0, 2, 1, "", "burned_register"], [0, 2, 1, "", "claim_root"], [0, 2, 1, "", "close"], [0, 2, 1, "", "commit_reveal_enabled"], [0, 2, 1, "", "commit_weights"], [0, 2, 1, "", "compose_call"], [0, 2, 1, "", "contribute_crowdloan"], [0, 2, 1, "", "create_crowdloan"], [0, 2, 1, "", "create_pure_proxy"], [0, 2, 1, "", "determine_block_hash"], [0, 2, 1, "", "difficulty"], [0, 2, 1, "", "dissolve_crowdloan"], [0, 2, 1, "", "does_hotkey_exist"], [0, 2, 1, "", "filter_netuids_by_registered_hotkeys"], [0, 2, 1, "", "finalize_crowdloan"], [0, 2, 1, "", "get_admin_freeze_window"], [0, 2, 1, "", "get_all_commitments"], [0, 2, 1, "", "get_all_ema_tao_inflow"], [0, 2, 1, "", "get_all_metagraphs_info"], [0, 2, 1, "", "get_all_neuron_certificates"], [0, 2, 1, "", "get_all_revealed_commitments"], [0, 2, 1, "", "get_all_subnets_info"], [0, 2, 1, "", "get_all_subnets_netuid"], [0, 2, 1, "", "get_auto_stakes"], [0, 2, 1, "", "get_balance"], [0, 2, 1, "", "get_balances"], [0, 2, 1, "", "get_block_hash"], [0, 2, 1, "", "get_block_info"], [0, 2, 1, "", "get_children"], [0, 2, 1, "", "get_children_pending"], [0, 2, 1, "", "get_commitment"], [0, 2, 1, "", "get_commitment_metadata"], [0, 2, 1, "", "get_crowdloan_by_id"], [0, 2, 1, "", "get_crowdloan_constants"], [0, 2, 1, "", "get_crowdloan_contributions"], [0, 2, 1, "", "get_crowdloan_next_id"], [0, 2, 1, "", "get_crowdloans"], [0, 2, 1, "", "get_current_block"], [0, 2, 1, "", "get_delegate_by_hotkey"], [0, 2, 1, "", "get_delegate_identities"], [0, 2, 1, "", "get_delegate_take"], [0, 2, 1, "", "get_delegated"], [0, 2, 1, "", "get_delegates"], [0, 2, 1, "", "get_ema_tao_inflow"], [0, 2, 1, "", "get_existential_deposit"], [0, 2, 1, "", "get_extrinsic_fee"], [0, 2, 1, "", "get_hotkey_owner"], [0, 4, 1, "", "get_hotkey_stake"], [0, 2, 1, "", "get_hyperparameter"], [0, 2, 1, "", "get_last_bonds_reset"], [0, 2, 1, "", "get_last_commitment_bonds_reset_block"], [0, 2, 1, "", "get_liquidity_list"], [0, 2, 1, "", "get_mechanism_count"], [0, 2, 1, "", "get_mechanism_emission_split"], [0, 2, 1, "", "get_metagraph_info"], [0, 2, 1, "", "get_mev_shield_current_key"], [0, 2, 1, "", "get_mev_shield_next_key"], [0, 2, 1, "", "get_mev_shield_submission"], [0, 2, 1, "", "get_mev_shield_submissions"], [0, 2, 1, "", "get_minimum_required_stake"], [0, 2, 1, "", "get_netuids_for_hotkey"], [0, 2, 1, "", "get_neuron_certificate"], [0, 2, 1, "", "get_neuron_for_pubkey_and_subnet"], [0, 2, 1, "", "get_next_epoch_start_block"], [0, 2, 1, "", "get_owned_hotkeys"], [0, 2, 1, "", "get_parents"], [0, 2, 1, "", "get_proxies"], [0, 2, 1, "", "get_proxies_for_real_account"], [0, 2, 1, "", "get_proxy_announcement"], [0, 2, 1, "", "get_proxy_announcements"], [0, 2, 1, "", "get_proxy_constants"], [0, 2, 1, "", "get_revealed_commitment"], [0, 2, 1, "", "get_revealed_commitment_by_hotkey"], [0, 2, 1, "", "get_root_alpha_dividends_per_subnet"], [0, 2, 1, "", "get_root_claim_type"], [0, 2, 1, "", "get_root_claimable_all_rates"], [0, 2, 1, "", "get_root_claimable_rate"], [0, 2, 1, "", "get_root_claimable_stake"], [0, 2, 1, "", "get_root_claimed"], [0, 2, 1, "", "get_stake"], [0, 2, 1, "", "get_stake_add_fee"], [0, 2, 1, "", "get_stake_for_coldkey_and_hotkey"], [0, 2, 1, "", "get_stake_for_hotkey"], [0, 2, 1, "", "get_stake_info_for_coldkey"], [0, 2, 1, "", "get_stake_info_for_coldkeys"], [0, 2, 1, "", "get_stake_movement_fee"], [0, 2, 1, "", "get_stake_weight"], [0, 2, 1, "", "get_subnet_burn_cost"], [0, 2, 1, "", "get_subnet_hyperparameters"], [0, 2, 1, "", "get_subnet_info"], [0, 2, 1, "", "get_subnet_owner_hotkey"], [0, 2, 1, "", "get_subnet_price"], [0, 2, 1, "", "get_subnet_prices"], [0, 2, 1, "", "get_subnet_reveal_period_epochs"], [0, 2, 1, "", "get_subnet_validator_permits"], [0, 2, 1, "", "get_timelocked_weight_commits"], [0, 2, 1, "", "get_timestamp"], [0, 2, 1, "", "get_total_subnets"], [0, 2, 1, "", "get_transfer_fee"], [0, 2, 1, "", "get_uid_for_hotkey_on_subnet"], [0, 2, 1, "", "get_unstake_fee"], [0, 2, 1, "", "get_vote_data"], [0, 2, 1, "", "immunity_period"], [0, 2, 1, "", "initialize"], [0, 2, 1, "", "is_fast_blocks"], [0, 2, 1, "", "is_hotkey_delegate"], [0, 2, 1, "", "is_hotkey_registered"], [0, 2, 1, "", "is_hotkey_registered_any"], [0, 2, 1, "", "is_hotkey_registered_on_subnet"], [0, 2, 1, "", "is_in_admin_freeze_window"], [0, 2, 1, "", "is_subnet_active"], [0, 2, 1, "", "kill_pure_proxy"], [0, 2, 1, "", "last_drand_round"], [0, 4, 1, "", "log_verbose"], [0, 2, 1, "", "max_weight_limit"], [0, 2, 1, "", "metagraph"], [0, 2, 1, "", "mev_submit_encrypted"], [0, 2, 1, "", "min_allowed_weights"], [0, 2, 1, "", "modify_liquidity"], [0, 2, 1, "", "move_stake"], [0, 2, 1, "", "neuron_for_uid"], [0, 2, 1, "", "neurons"], [0, 2, 1, "", "neurons_lite"], [0, 2, 1, "", "poke_deposit"], [0, 2, 1, "", "proxy"], [0, 2, 1, "", "proxy_announced"], [0, 2, 1, "", "query_constant"], [0, 2, 1, "", "query_identity"], [0, 2, 1, "", "query_map"], [0, 2, 1, "", "query_map_subtensor"], [0, 2, 1, "", "query_module"], [0, 2, 1, "", "query_runtime_api"], [0, 2, 1, "", "query_subtensor"], [0, 2, 1, "", "recycle"], [0, 2, 1, "", "refund_crowdloan"], [0, 2, 1, "", "register"], [0, 2, 1, "", "register_subnet"], [0, 2, 1, "", "reject_proxy_announcement"], [0, 2, 1, "", "remove_liquidity"], [0, 2, 1, "", "remove_proxies"], [0, 2, 1, "", "remove_proxy"], [0, 2, 1, "", "remove_proxy_announcement"], [0, 2, 1, "", "reveal_weights"], [0, 2, 1, "", "root_register"], [0, 2, 1, "", "root_set_pending_childkey_cooldown"], [0, 2, 1, "", "serve_axon"], [0, 2, 1, "", "set_auto_stake"], [0, 2, 1, "", "set_children"], [0, 2, 1, "", "set_commitment"], [0, 2, 1, "", "set_delegate_take"], [0, 2, 1, "", "set_reveal_commitment"], [0, 2, 1, "", "set_root_claim_type"], [0, 2, 1, "", "set_subnet_identity"], [0, 2, 1, "", "set_weights"], [0, 2, 1, "", "sign_and_send_extrinsic"], [0, 2, 1, "", "sim_swap"], [0, 2, 1, "", "start_call"], [0, 2, 1, "", "state_call"], [0, 2, 1, "", "subnet"], [0, 2, 1, "", "subnet_exists"], [0, 2, 1, "", "subnetwork_n"], [0, 4, 1, "", "substrate"], [0, 2, 1, "", "swap_stake"], [0, 2, 1, "", "tempo"], [0, 2, 1, "", "toggle_user_liquidity"], [0, 2, 1, "", "transfer"], [0, 2, 1, "", "transfer_stake"], [0, 2, 1, "", "tx_rate_limit"], [0, 2, 1, "", "unstake"], [0, 2, 1, "", "unstake_all"], [0, 2, 1, "", "unstake_multiple"], [0, 2, 1, "", "update_cap_crowdloan"], [0, 2, 1, "", "update_end_crowdloan"], [0, 2, 1, "", "update_min_contribution_crowdloan"], [0, 2, 1, "", "validate_extrinsic_params"], [0, 2, 1, "", "wait_for_block"], [0, 2, 1, "", "weights"], [0, 2, 1, "", "weights_rate_limit"], [0, 2, 1, "", "withdraw_crowdloan"]], "bittensor.core.axon": [[1, 1, 1, "", "Axon"], [1, 1, 1, "", "AxonMiddleware"], [1, 1, 1, "", "FastAPIThreadedServer"], [1, 6, 1, "", "V_7_2_0"], [1, 5, 1, "", "create_error_response"], [1, 5, 1, "", "log_and_handle_error"]], "bittensor.core.axon.Axon": [[1, 2, 1, "", "add_args"], [1, 4, 1, "", "app"], [1, 2, 1, "", "attach"], [1, 4, 1, "", "blacklist_fns"], [1, 2, 1, "", "check_config"], [1, 2, 1, "", "config"], [1, 2, 1, "", "default_verify"], [1, 4, 1, "", "external_ip"], [1, 4, 1, "", "external_port"], [1, 4, 1, "", "fast_config"], [1, 4, 1, "", "fast_server"], [1, 4, 1, "", "forward_class_types"], [1, 4, 1, "", "forward_fns"], [1, 4, 1, "", "full_address"], [1, 2, 1, "", "help"], [1, 2, 1, "", "info"], [1, 4, 1, "", "ip"], [1, 4, 1, "", "middleware_cls"], [1, 4, 1, "", "nonces"], [1, 4, 1, "", "port"], [1, 4, 1, "", "priority_fns"], [1, 4, 1, "", "router"], [1, 2, 1, "", "serve"], [1, 2, 1, "", "start"], [1, 4, 1, "", "started"], [1, 2, 1, "", "stop"], [1, 4, 1, "", "thread_pool"], [1, 2, 1, "", "to_string"], [1, 4, 1, "", "uuid"], [1, 2, 1, "", "verify_body_integrity"], [1, 4, 1, "", "verify_fns"], [1, 4, 1, "", "wallet"]], "bittensor.core.axon.AxonMiddleware": [[1, 4, 1, "", "axon"], [1, 2, 1, "", "blacklist"], [1, 2, 1, "", "dispatch"], [1, 2, 1, "", "preprocess"], [1, 2, 1, "", "priority"], [1, 2, 1, "", "run"], [1, 2, 1, "", "synapse_to_response"], [1, 2, 1, "", "verify"]], "bittensor.core.axon.FastAPIThreadedServer": [[1, 2, 1, "", "install_signal_handlers"], [1, 4, 1, "", "is_running"], [1, 2, 1, "", "run_in_thread"], [1, 4, 1, "", "should_exit"], [1, 2, 1, "", "start"], [1, 2, 1, "", "stop"]], "bittensor.core.chain_data": [[8, 6, 1, "", "ProposalCallData"], [2, 0, 0, "-", "axon_info"], [3, 0, 0, "-", "chain_identity"], [4, 0, 0, "-", "crowdloan_info"], [5, 0, 0, "-", "delegate_info"], [6, 0, 0, "-", "delegate_info_lite"], [7, 0, 0, "-", "dynamic_info"], [9, 0, 0, "-", "info_base"], [10, 0, 0, "-", "ip_info"], [11, 0, 0, "-", "metagraph_info"], [12, 0, 0, "-", "neuron_info"], [13, 0, 0, "-", "neuron_info_lite"], [14, 0, 0, "-", "prometheus_info"], [15, 0, 0, "-", "proposal_vote_data"], [16, 0, 0, "-", "proxy"], [17, 0, 0, "-", "root_claim"], [18, 0, 0, "-", "scheduled_coldkey_swap_info"], [19, 0, 0, "-", "sim_swap"], [20, 0, 0, "-", "stake_info"], [21, 0, 0, "-", "subnet_hyperparameters"], [22, 0, 0, "-", "subnet_identity"], [23, 0, 0, "-", "subnet_info"], [24, 0, 0, "-", "subnet_state"], [25, 0, 0, "-", "utils"], [26, 0, 0, "-", "weight_commit_info"]], "bittensor.core.chain_data.axon_info": [[2, 1, 1, "", "AxonInfo"]], "bittensor.core.chain_data.axon_info.AxonInfo": [[2, 4, 1, "", "coldkey"], [2, 2, 1, "", "from_neuron_info"], [2, 2, 1, "", "from_parameter_dict"], [2, 2, 1, "", "from_string"], [2, 4, 1, "", "hotkey"], [2, 4, 1, "", "ip"], [2, 2, 1, "", "ip_str"], [2, 4, 1, "", "ip_type"], [2, 3, 1, "", "is_serving"], [2, 4, 1, "", "placeholder1"], [2, 4, 1, "", "placeholder2"], [2, 4, 1, "", "port"], [2, 4, 1, "", "protocol"], [2, 2, 1, "", "to_parameter_dict"], [2, 2, 1, "", "to_string"], [2, 4, 1, "", "version"]], "bittensor.core.chain_data.chain_identity": [[3, 1, 1, "", "ChainIdentity"]], "bittensor.core.chain_data.chain_identity.ChainIdentity": [[3, 4, 1, "", "additional"], [3, 4, 1, "", "description"], [3, 4, 1, "", "discord"], [3, 4, 1, "", "github"], [3, 4, 1, "", "image"], [3, 4, 1, "", "name"], [3, 4, 1, "", "url"]], "bittensor.core.chain_data.crowdloan_info": [[4, 1, 1, "", "CrowdloanConstants"], [4, 1, 1, "", "CrowdloanInfo"]], "bittensor.core.chain_data.crowdloan_info.CrowdloanConstants": [[4, 4, 1, "", "AbsoluteMinimumContribution"], [4, 4, 1, "", "MaxContributors"], [4, 4, 1, "", "MaximumBlockDuration"], [4, 4, 1, "", "MinimumBlockDuration"], [4, 4, 1, "", "MinimumDeposit"], [4, 4, 1, "", "RefundContributorsLimit"], [4, 2, 1, "", "constants_names"], [4, 2, 1, "", "from_dict"]], "bittensor.core.chain_data.crowdloan_info.CrowdloanInfo": [[4, 4, 1, "", "call"], [4, 4, 1, "", "cap"], [4, 4, 1, "", "contributors_count"], [4, 4, 1, "", "creator"], [4, 4, 1, "", "deposit"], [4, 4, 1, "", "end"], [4, 4, 1, "", "finalized"], [4, 2, 1, "", "from_dict"], [4, 4, 1, "", "funds_account"], [4, 4, 1, "", "id"], [4, 4, 1, "", "min_contribution"], [4, 4, 1, "", "raised"], [4, 4, 1, "", "target_address"]], "bittensor.core.chain_data.delegate_info": [[5, 1, 1, "", "DelegateInfo"], [5, 1, 1, "", "DelegateInfoBase"], [5, 1, 1, "", "DelegatedInfo"]], "bittensor.core.chain_data.delegate_info.DelegateInfo": [[5, 4, 1, "", "nominators"], [5, 4, 1, "", "total_stake"]], "bittensor.core.chain_data.delegate_info.DelegateInfoBase": [[5, 4, 1, "", "hotkey_ss58"], [5, 4, 1, "", "owner_ss58"], [5, 4, 1, "", "registrations"], [5, 4, 1, "", "return_per_1000"], [5, 4, 1, "", "take"], [5, 4, 1, "", "validator_permits"]], "bittensor.core.chain_data.delegate_info.DelegatedInfo": [[5, 4, 1, "", "netuid"], [5, 4, 1, "", "stake"]], "bittensor.core.chain_data.delegate_info_lite": [[6, 1, 1, "", "DelegateInfoLite"]], "bittensor.core.chain_data.delegate_info_lite.DelegateInfoLite": [[6, 4, 1, "", "delegate_ss58"], [6, 4, 1, "", "nominators"], [6, 4, 1, "", "owner_ss58"], [6, 4, 1, "", "registrations"], [6, 4, 1, "", "return_per_1000"], [6, 4, 1, "", "take"], [6, 4, 1, "", "validator_permits"]], "bittensor.core.chain_data.dynamic_info": [[7, 1, 1, "", "DynamicInfo"]], "bittensor.core.chain_data.dynamic_info.DynamicInfo": [[7, 4, 1, "", "alpha_in"], [7, 4, 1, "", "alpha_in_emission"], [7, 4, 1, "", "alpha_out"], [7, 4, 1, "", "alpha_out_emission"], [7, 4, 1, "", "alpha_slippage"], [7, 2, 1, "", "alpha_to_tao"], [7, 2, 1, "", "alpha_to_tao_with_slippage"], [7, 4, 1, "", "blocks_since_last_step"], [7, 4, 1, "", "emission"], [7, 4, 1, "", "is_dynamic"], [7, 4, 1, "", "k"], [7, 4, 1, "", "last_step"], [7, 4, 1, "", "moving_price"], [7, 4, 1, "", "netuid"], [7, 4, 1, "", "network_registered_at"], [7, 4, 1, "", "owner_coldkey"], [7, 4, 1, "", "owner_hotkey"], [7, 4, 1, "", "pending_alpha_emission"], [7, 4, 1, "", "pending_root_emission"], [7, 4, 1, "", "price"], [7, 4, 1, "", "slippage"], [7, 4, 1, "", "subnet_identity"], [7, 4, 1, "", "subnet_name"], [7, 4, 1, "", "subnet_volume"], [7, 4, 1, "", "symbol"], [7, 4, 1, "", "tao_in"], [7, 4, 1, "", "tao_in_emission"], [7, 4, 1, "", "tao_slippage"], [7, 2, 1, "", "tao_to_alpha"], [7, 2, 1, "", "tao_to_alpha_with_slippage"], [7, 4, 1, "", "tempo"]], "bittensor.core.chain_data.info_base": [[9, 1, 1, "", "InfoBase"], [9, 6, 1, "", "T"]], "bittensor.core.chain_data.info_base.InfoBase": [[9, 2, 1, "", "from_dict"], [9, 2, 1, "", "list_from_dicts"]], "bittensor.core.chain_data.ip_info": [[10, 1, 1, "", "IPInfo"]], "bittensor.core.chain_data.ip_info.IPInfo": [[10, 2, 1, "", "encode"], [10, 2, 1, "", "from_parameter_dict"], [10, 4, 1, "", "ip"], [10, 4, 1, "", "ip_type"], [10, 4, 1, "", "protocol"], [10, 2, 1, "", "to_parameter_dict"]], "bittensor.core.chain_data.metagraph_info": [[11, 1, 1, "", "MetagraphInfo"], [11, 1, 1, "", "MetagraphInfoEmissions"], [11, 1, 1, "", "MetagraphInfoParams"], [11, 1, 1, "", "MetagraphInfoPool"], [11, 6, 1, "", "SELECTIVE_METAGRAPH_COMMITMENTS_OFFSET"], [11, 1, 1, "", "SelectiveMetagraphIndex"], [11, 5, 1, "", "get_selective_metagraph_commitments"], [11, 5, 1, "", "process_nested"]], "bittensor.core.chain_data.metagraph_info.MetagraphInfo": [[11, 4, 1, "", "active"], [11, 4, 1, "", "activity_cutoff"], [11, 4, 1, "", "adjustment_alpha"], [11, 4, 1, "", "adjustment_interval"], [11, 4, 1, "", "alpha_dividends_per_hotkey"], [11, 4, 1, "", "alpha_high"], [11, 4, 1, "", "alpha_in"], [11, 4, 1, "", "alpha_in_emission"], [11, 4, 1, "", "alpha_low"], [11, 4, 1, "", "alpha_out"], [11, 4, 1, "", "alpha_out_emission"], [11, 4, 1, "", "alpha_stake"], [11, 4, 1, "", "axons"], [11, 4, 1, "", "block"], [11, 4, 1, "", "block_at_registration"], [11, 4, 1, "", "blocks_since_last_step"], [11, 4, 1, "", "bonds_moving_avg"], [11, 4, 1, "", "burn"], [11, 4, 1, "", "coldkeys"], [11, 4, 1, "", "commit_reveal_period"], [11, 4, 1, "", "commit_reveal_weights_enabled"], [11, 4, 1, "", "commitments"], [11, 4, 1, "", "consensus"], [11, 4, 1, "", "difficulty"], [11, 4, 1, "", "dividends"], [11, 4, 1, "", "emission"], [11, 4, 1, "", "hotkeys"], [11, 4, 1, "", "identities"], [11, 4, 1, "", "identity"], [11, 4, 1, "", "immunity_period"], [11, 4, 1, "", "incentives"], [11, 4, 1, "", "kappa"], [11, 4, 1, "", "last_step"], [11, 4, 1, "", "last_update"], [11, 4, 1, "", "liquid_alpha_enabled"], [11, 4, 1, "", "max_burn"], [11, 4, 1, "", "max_difficulty"], [11, 4, 1, "", "max_regs_per_block"], [11, 4, 1, "", "max_uids"], [11, 4, 1, "", "max_validators"], [11, 4, 1, "", "max_weights_limit"], [11, 4, 1, "", "mechid"], [11, 4, 1, "", "min_allowed_weights"], [11, 4, 1, "", "min_burn"], [11, 4, 1, "", "min_difficulty"], [11, 4, 1, "", "moving_price"], [11, 4, 1, "", "name"], [11, 4, 1, "", "netuid"], [11, 4, 1, "", "network_registered_at"], [11, 4, 1, "", "num_uids"], [11, 4, 1, "", "owner_coldkey"], [11, 4, 1, "", "owner_hotkey"], [11, 4, 1, "", "pending_alpha_emission"], [11, 4, 1, "", "pending_root_emission"], [11, 4, 1, "", "pow_registration_allowed"], [11, 4, 1, "", "pruning_score"], [11, 4, 1, "", "rank"], [11, 4, 1, "", "registration_allowed"], [11, 4, 1, "", "rho"], [11, 4, 1, "", "serving_rate_limit"], [11, 4, 1, "", "subnet_emission"], [11, 4, 1, "", "subnet_volume"], [11, 4, 1, "", "symbol"], [11, 4, 1, "", "tao_dividends_per_hotkey"], [11, 4, 1, "", "tao_in"], [11, 4, 1, "", "tao_in_emission"], [11, 4, 1, "", "tao_stake"], [11, 4, 1, "", "target_regs_per_interval"], [11, 4, 1, "", "tempo"], [11, 4, 1, "", "total_stake"], [11, 4, 1, "", "trust"], [11, 4, 1, "", "validator_permit"], [11, 4, 1, "", "validators"], [11, 4, 1, "", "weights_rate_limit"], [11, 4, 1, "", "weights_version"]], "bittensor.core.chain_data.metagraph_info.MetagraphInfoEmissions": [[11, 4, 1, "", "alpha_in_emission"], [11, 4, 1, "", "alpha_out_emission"], [11, 4, 1, "", "pending_alpha_emission"], [11, 4, 1, "", "pending_root_emission"], [11, 4, 1, "", "subnet_emission"], [11, 4, 1, "", "tao_in_emission"]], "bittensor.core.chain_data.metagraph_info.MetagraphInfoParams": [[11, 4, 1, "", "activity_cutoff"], [11, 4, 1, "", "adjustment_alpha"], [11, 4, 1, "", "adjustment_interval"], [11, 4, 1, "", "alpha_high"], [11, 4, 1, "", "alpha_low"], [11, 4, 1, "", "bonds_moving_avg"], [11, 4, 1, "", "burn"], [11, 4, 1, "", "commit_reveal_period"], [11, 4, 1, "", "commit_reveal_weights_enabled"], [11, 4, 1, "", "difficulty"], [11, 4, 1, "", "immunity_period"], [11, 4, 1, "", "kappa"], [11, 4, 1, "", "liquid_alpha_enabled"], [11, 4, 1, "", "max_burn"], [11, 4, 1, "", "max_difficulty"], [11, 4, 1, "", "max_regs_per_block"], [11, 4, 1, "", "max_validators"], [11, 4, 1, "", "max_weights_limit"], [11, 4, 1, "", "min_allowed_weights"], [11, 4, 1, "", "min_burn"], [11, 4, 1, "", "min_difficulty"], [11, 4, 1, "", "pow_registration_allowed"], [11, 4, 1, "", "registration_allowed"], [11, 4, 1, "", "rho"], [11, 4, 1, "", "serving_rate_limit"], [11, 4, 1, "", "target_regs_per_interval"], [11, 4, 1, "", "tempo"], [11, 4, 1, "", "weights_rate_limit"], [11, 4, 1, "", "weights_version"]], "bittensor.core.chain_data.metagraph_info.MetagraphInfoPool": [[11, 4, 1, "", "alpha_in"], [11, 4, 1, "", "alpha_out"], [11, 4, 1, "", "moving_price"], [11, 4, 1, "", "subnet_volume"], [11, 4, 1, "", "tao_in"]], "bittensor.core.chain_data.metagraph_info.SelectiveMetagraphIndex": [[11, 4, 1, "", "Active"], [11, 4, 1, "", "ActivityCutoff"], [11, 4, 1, "", "AdjustmentAlpha"], [11, 4, 1, "", "AdjustmentInterval"], [11, 4, 1, "", "AlphaDividendsPerHotkey"], [11, 4, 1, "", "AlphaHigh"], [11, 4, 1, "", "AlphaIn"], [11, 4, 1, "", "AlphaInEmission"], [11, 4, 1, "", "AlphaLow"], [11, 4, 1, "", "AlphaOut"], [11, 4, 1, "", "AlphaOutEmission"], [11, 4, 1, "", "AlphaStake"], [11, 4, 1, "", "Axons"], [11, 4, 1, "", "Block"], [11, 4, 1, "", "BlockAtRegistration"], [11, 4, 1, "", "BlocksSinceLastStep"], [11, 4, 1, "", "BondsMovingAvg"], [11, 4, 1, "", "Burn"], [11, 4, 1, "", "Coldkeys"], [11, 4, 1, "", "CommitRevealPeriod"], [11, 4, 1, "", "CommitRevealWeightsEnabled"], [11, 4, 1, "", "Commitments"], [11, 4, 1, "", "Consensus"], [11, 4, 1, "", "Difficulty"], [11, 4, 1, "", "Dividends"], [11, 4, 1, "", "Emission"], [11, 4, 1, "", "Hotkeys"], [11, 4, 1, "", "Identities"], [11, 4, 1, "", "Identity"], [11, 4, 1, "", "ImmunityPeriod"], [11, 4, 1, "", "Incentives"], [11, 4, 1, "", "Kappa"], [11, 4, 1, "", "LastStep"], [11, 4, 1, "", "LastUpdate"], [11, 4, 1, "", "LiquidAlphaEnabled"], [11, 4, 1, "", "MaxBurn"], [11, 4, 1, "", "MaxDifficulty"], [11, 4, 1, "", "MaxRegsPerBlock"], [11, 4, 1, "", "MaxUids"], [11, 4, 1, "", "MaxValidators"], [11, 4, 1, "", "MaxWeightsLimit"], [11, 4, 1, "", "MinAllowedWeights"], [11, 4, 1, "", "MinBurn"], [11, 4, 1, "", "MinDifficulty"], [11, 4, 1, "", "MovingPrice"], [11, 4, 1, "", "Name"], [11, 4, 1, "", "Netuid"], [11, 4, 1, "", "NetworkRegisteredAt"], [11, 4, 1, "", "NumUids"], [11, 4, 1, "", "OwnerColdkey"], [11, 4, 1, "", "OwnerHotkey"], [11, 4, 1, "", "PendingAlphaEmission"], [11, 4, 1, "", "PendingRootEmission"], [11, 4, 1, "", "PowRegistrationAllowed"], [11, 4, 1, "", "PruningScore"], [11, 4, 1, "", "Rank"], [11, 4, 1, "", "RegistrationAllowed"], [11, 4, 1, "", "Rho"], [11, 4, 1, "", "ServingRateLimit"], [11, 4, 1, "", "SubnetEmission"], [11, 4, 1, "", "SubnetVolume"], [11, 4, 1, "", "Symbol"], [11, 4, 1, "", "TaoDividendsPerHotkey"], [11, 4, 1, "", "TaoIn"], [11, 4, 1, "", "TaoInEmission"], [11, 4, 1, "", "TaoStake"], [11, 4, 1, "", "TargetRegsPerInterval"], [11, 4, 1, "", "Tempo"], [11, 4, 1, "", "TotalStake"], [11, 4, 1, "", "Trust"], [11, 4, 1, "", "ValidatorPermit"], [11, 4, 1, "", "Validators"], [11, 4, 1, "", "WeightsRateLimit"], [11, 4, 1, "", "WeightsVersion"], [11, 2, 1, "", "all_indices"]], "bittensor.core.chain_data.neuron_info": [[12, 1, 1, "", "NeuronInfo"]], "bittensor.core.chain_data.neuron_info.NeuronInfo": [[12, 4, 1, "", "active"], [12, 4, 1, "", "axon_info"], [12, 4, 1, "", "bonds"], [12, 4, 1, "", "coldkey"], [12, 4, 1, "", "consensus"], [12, 4, 1, "", "dividends"], [12, 4, 1, "", "emission"], [12, 2, 1, "", "from_weights_bonds_and_neuron_lite"], [12, 2, 1, "", "get_null_neuron"], [12, 4, 1, "", "hotkey"], [12, 4, 1, "", "incentive"], [12, 4, 1, "", "is_null"], [12, 4, 1, "", "last_update"], [12, 4, 1, "", "netuid"], [12, 4, 1, "", "prometheus_info"], [12, 4, 1, "", "pruning_score"], [12, 4, 1, "", "rank"], [12, 4, 1, "", "stake"], [12, 4, 1, "", "stake_dict"], [12, 4, 1, "", "total_stake"], [12, 4, 1, "", "trust"], [12, 4, 1, "", "uid"], [12, 4, 1, "", "validator_permit"], [12, 4, 1, "", "validator_trust"], [12, 4, 1, "", "weights"]], "bittensor.core.chain_data.neuron_info_lite": [[13, 1, 1, "", "NeuronInfoLite"]], "bittensor.core.chain_data.neuron_info_lite.NeuronInfoLite": [[13, 4, 1, "", "active"], [13, 4, 1, "", "axon_info"], [13, 4, 1, "", "coldkey"], [13, 4, 1, "", "consensus"], [13, 4, 1, "", "dividends"], [13, 4, 1, "", "emission"], [13, 2, 1, "id0", "get_null_neuron"], [13, 4, 1, "", "hotkey"], [13, 4, 1, "", "incentive"], [13, 4, 1, "", "is_null"], [13, 4, 1, "", "last_update"], [13, 2, 1, "", "list_from_vec_u8"], [13, 4, 1, "", "netuid"], [13, 4, 1, "", "prometheus_info"], [13, 4, 1, "", "pruning_score"], [13, 4, 1, "", "rank"], [13, 4, 1, "", "stake"], [13, 4, 1, "", "stake_dict"], [13, 4, 1, "", "total_stake"], [13, 4, 1, "", "trust"], [13, 4, 1, "", "uid"], [13, 4, 1, "", "validator_permit"], [13, 4, 1, "", "validator_trust"]], "bittensor.core.chain_data.prometheus_info": [[14, 1, 1, "", "PrometheusInfo"]], "bittensor.core.chain_data.prometheus_info.PrometheusInfo": [[14, 4, 1, "", "block"], [14, 4, 1, "", "ip"], [14, 4, 1, "", "ip_type"], [14, 4, 1, "", "port"], [14, 4, 1, "", "version"]], "bittensor.core.chain_data.proposal_vote_data": [[15, 1, 1, "", "ProposalVoteData"]], "bittensor.core.chain_data.proposal_vote_data.ProposalVoteData": [[15, 4, 1, "", "ayes"], [15, 4, 1, "", "end"], [15, 2, 1, "", "from_dict"], [15, 4, 1, "", "index"], [15, 4, 1, "", "nays"], [15, 4, 1, "", "threshold"]], "bittensor.core.chain_data.proxy": [[16, 1, 1, "", "ProxyAnnouncementInfo"], [16, 1, 1, "", "ProxyConstants"], [16, 1, 1, "", "ProxyInfo"], [16, 1, 1, "", "ProxyType"]], "bittensor.core.chain_data.proxy.ProxyAnnouncementInfo": [[16, 4, 1, "", "call_hash"], [16, 2, 1, "", "from_dict"], [16, 2, 1, "", "from_query_map_record"], [16, 4, 1, "", "height"], [16, 4, 1, "", "real"]], "bittensor.core.chain_data.proxy.ProxyConstants": [[16, 4, 1, "", "AnnouncementDepositBase"], [16, 4, 1, "", "AnnouncementDepositFactor"], [16, 4, 1, "", "MaxPending"], [16, 4, 1, "", "MaxProxies"], [16, 4, 1, "", "ProxyDepositBase"], [16, 4, 1, "", "ProxyDepositFactor"], [16, 2, 1, "", "constants_names"], [16, 2, 1, "", "from_dict"], [16, 2, 1, "", "to_dict"]], "bittensor.core.chain_data.proxy.ProxyInfo": [[16, 4, 1, "", "delay"], [16, 4, 1, "", "delegate"], [16, 2, 1, "", "from_query"], [16, 2, 1, "", "from_query_map_record"], [16, 2, 1, "", "from_tuple"], [16, 4, 1, "", "proxy_type"]], "bittensor.core.chain_data.proxy.ProxyType": [[16, 4, 1, "", "Any"], [16, 4, 1, "", "ChildKeys"], [16, 4, 1, "", "Governance"], [16, 4, 1, "", "NonCritical"], [16, 4, 1, "", "NonFungible"], [16, 4, 1, "", "NonTransfer"], [16, 4, 1, "", "Owner"], [16, 4, 1, "", "Registration"], [16, 4, 1, "", "RootClaim"], [16, 4, 1, "", "RootWeights"], [16, 4, 1, "", "Senate"], [16, 4, 1, "", "SmallTransfer"], [16, 4, 1, "", "Staking"], [16, 4, 1, "", "SubnetLeaseBeneficiary"], [16, 4, 1, "", "SudoUncheckedSetCode"], [16, 4, 1, "", "SwapHotkey"], [16, 4, 1, "", "Transfer"], [16, 4, 1, "", "Triumvirate"], [16, 2, 1, "", "all_types"], [16, 2, 1, "", "is_valid"], [16, 2, 1, "", "normalize"]], "bittensor.core.chain_data.root_claim": [[17, 1, 1, "", "KeepSubnetsDescriptor"], [17, 1, 1, "", "RootClaimType"]], "bittensor.core.chain_data.root_claim.KeepSubnetsDescriptor": [[17, 4, 1, "", "subnets"], [17, 2, 1, "", "to_dict"]], "bittensor.core.chain_data.root_claim.RootClaimType": [[17, 4, 1, "", "Keep"], [17, 4, 1, "", "KeepSubnets"], [17, 4, 1, "", "Swap"], [17, 2, 1, "", "normalize"]], "bittensor.core.chain_data.scheduled_coldkey_swap_info": [[18, 1, 1, "", "ScheduledColdkeySwapInfo"]], "bittensor.core.chain_data.scheduled_coldkey_swap_info.ScheduledColdkeySwapInfo": [[18, 4, 1, "", "arbitration_block"], [18, 2, 1, "", "decode_account_id_list"], [18, 4, 1, "", "new_coldkey"], [18, 4, 1, "", "old_coldkey"]], "bittensor.core.chain_data.sim_swap": [[19, 1, 1, "", "SimSwapResult"]], "bittensor.core.chain_data.sim_swap.SimSwapResult": [[19, 4, 1, "", "alpha_amount"], [19, 4, 1, "", "alpha_fee"], [19, 2, 1, "", "from_dict"], [19, 4, 1, "", "tao_amount"], [19, 4, 1, "", "tao_fee"]], "bittensor.core.chain_data.stake_info": [[20, 1, 1, "", "StakeInfo"]], "bittensor.core.chain_data.stake_info.StakeInfo": [[20, 4, 1, "", "coldkey_ss58"], [20, 4, 1, "", "drain"], [20, 4, 1, "", "emission"], [20, 2, 1, "", "from_dict"], [20, 4, 1, "", "hotkey_ss58"], [20, 4, 1, "", "is_registered"], [20, 4, 1, "", "locked"], [20, 4, 1, "", "netuid"], [20, 4, 1, "", "stake"]], "bittensor.core.chain_data.subnet_hyperparameters": [[21, 1, 1, "", "SubnetHyperparameters"]], "bittensor.core.chain_data.subnet_hyperparameters.SubnetHyperparameters": [[21, 4, 1, "", "activity_cutoff"], [21, 4, 1, "", "adjustment_alpha"], [21, 4, 1, "", "adjustment_interval"], [21, 4, 1, "", "alpha_high"], [21, 4, 1, "", "alpha_low"], [21, 4, 1, "", "alpha_sigmoid_steepness"], [21, 4, 1, "", "bonds_moving_avg"], [21, 4, 1, "", "bonds_reset_enabled"], [21, 4, 1, "", "commit_reveal_period"], [21, 4, 1, "", "commit_reveal_weights_enabled"], [21, 4, 1, "", "difficulty"], [21, 4, 1, "", "immunity_period"], [21, 4, 1, "", "kappa"], [21, 4, 1, "", "liquid_alpha_enabled"], [21, 4, 1, "", "max_burn"], [21, 4, 1, "", "max_difficulty"], [21, 4, 1, "", "max_regs_per_block"], [21, 4, 1, "", "max_validators"], [21, 4, 1, "", "max_weight_limit"], [21, 4, 1, "", "min_allowed_weights"], [21, 4, 1, "", "min_burn"], [21, 4, 1, "", "min_difficulty"], [21, 4, 1, "", "registration_allowed"], [21, 4, 1, "", "rho"], [21, 4, 1, "", "serving_rate_limit"], [21, 4, 1, "", "subnet_is_active"], [21, 4, 1, "", "target_regs_per_interval"], [21, 4, 1, "", "tempo"], [21, 4, 1, "", "transfers_enabled"], [21, 4, 1, "", "user_liquidity_enabled"], [21, 4, 1, "", "weights_rate_limit"], [21, 4, 1, "", "weights_version"], [21, 4, 1, "", "yuma_version"]], "bittensor.core.chain_data.subnet_identity": [[22, 1, 1, "", "SubnetIdentity"]], "bittensor.core.chain_data.subnet_identity.SubnetIdentity": [[22, 4, 1, "", "additional"], [22, 4, 1, "", "description"], [22, 4, 1, "", "discord"], [22, 4, 1, "", "github_repo"], [22, 4, 1, "", "logo_url"], [22, 4, 1, "", "subnet_contact"], [22, 4, 1, "", "subnet_name"], [22, 4, 1, "", "subnet_url"]], "bittensor.core.chain_data.subnet_info": [[23, 1, 1, "", "SubnetInfo"]], "bittensor.core.chain_data.subnet_info.SubnetInfo": [[23, 4, 1, "", "blocks_since_epoch"], [23, 4, 1, "", "burn"], [23, 4, 1, "", "connection_requirements"], [23, 4, 1, "", "difficulty"], [23, 4, 1, "", "emission_value"], [23, 4, 1, "", "immunity_period"], [23, 4, 1, "", "kappa"], [23, 4, 1, "", "max_allowed_validators"], [23, 4, 1, "", "max_n"], [23, 4, 1, "", "max_weight_limit"], [23, 4, 1, "", "min_allowed_weights"], [23, 4, 1, "", "modality"], [23, 4, 1, "", "netuid"], [23, 4, 1, "", "owner_ss58"], [23, 4, 1, "", "rho"], [23, 4, 1, "", "scaling_law_power"], [23, 4, 1, "", "subnetwork_n"], [23, 4, 1, "", "tempo"]], "bittensor.core.chain_data.subnet_state": [[24, 1, 1, "", "SubnetState"]], "bittensor.core.chain_data.subnet_state.SubnetState": [[24, 4, 1, "", "active"], [24, 4, 1, "", "alpha_stake"], [24, 4, 1, "", "block_at_registration"], [24, 4, 1, "", "coldkeys"], [24, 4, 1, "", "consensus"], [24, 4, 1, "", "dividends"], [24, 4, 1, "", "emission"], [24, 4, 1, "", "emission_history"], [24, 4, 1, "", "hotkeys"], [24, 4, 1, "", "incentives"], [24, 4, 1, "", "last_update"], [24, 4, 1, "", "netuid"], [24, 4, 1, "", "pruning_score"], [24, 4, 1, "", "rank"], [24, 4, 1, "", "tao_stake"], [24, 4, 1, "", "total_stake"], [24, 4, 1, "", "trust"], [24, 4, 1, "", "validator_permit"]], "bittensor.core.chain_data.utils": [[25, 1, 1, "", "ChainDataType"], [25, 5, 1, "", "decode_account_id"], [25, 5, 1, "", "decode_block"], [25, 5, 1, "", "decode_metadata"], [25, 5, 1, "", "decode_revealed_commitment"], [25, 5, 1, "", "decode_revealed_commitment_with_hotkey"], [25, 5, 1, "", "from_scale_encoding"], [25, 5, 1, "", "from_scale_encoding_using_type_string"], [25, 5, 1, "", "process_stake_data"]], "bittensor.core.chain_data.utils.ChainDataType": [[25, 4, 1, "", "AccountId"], [25, 4, 1, "", "AxonInfo"], [25, 4, 1, "", "ChainIdentity"], [25, 4, 1, "", "DelegateInfo"], [25, 4, 1, "", "DelegatedInfo"], [25, 4, 1, "", "DynamicInfo"], [25, 4, 1, "", "IPInfo"], [25, 4, 1, "", "MetagraphInfo"], [25, 4, 1, "", "NeuronInfo"], [25, 4, 1, "", "NeuronInfoLite"], [25, 4, 1, "", "ScheduledColdkeySwapInfo"], [25, 4, 1, "", "StakeInfo"], [25, 4, 1, "", "SubnetHyperparameters"], [25, 4, 1, "", "SubnetIdentity"], [25, 4, 1, "", "SubnetInfo"], [25, 4, 1, "", "SubnetState"]], "bittensor.core.chain_data.weight_commit_info": [[26, 1, 1, "", "WeightCommitInfo"]], "bittensor.core.chain_data.weight_commit_info.WeightCommitInfo": [[26, 4, 1, "", "commit_block"], [26, 4, 1, "", "commit_hex"], [26, 2, 1, "", "from_vec_u8"], [26, 2, 1, "", "from_vec_u8_v2"], [26, 4, 1, "", "reveal_round"], [26, 4, 1, "", "ss58"]], "bittensor.core.config": [[27, 1, 1, "", "Config"], [27, 7, 1, "", "InvalidConfigFile"]], "bittensor.core.config.Config": [[27, 2, 1, "", "is_set"], [27, 2, 1, "", "merge"], [27, 2, 1, "", "to_dict"]], "bittensor.core.dendrite": [[28, 6, 1, "", "BaseModel"], [28, 6, 1, "", "DENDRITE_DEFAULT_ERROR"], [28, 6, 1, "", "DENDRITE_ERROR_MAPPING"], [28, 1, 1, "", "Dendrite"], [28, 1, 1, "", "DendriteMixin"], [28, 5, 1, "", "call"], [28, 5, 1, "", "event_loop_is_running"]], "bittensor.core.dendrite.Dendrite": [[28, 2, 1, "", "__repr__"], [28, 2, 1, "", "__str__"], [28, 2, 1, "", "aclose_session"], [28, 2, 1, "", "call"], [28, 2, 1, "", "call_stream"], [28, 2, 1, "", "close_session"], [28, 2, 1, "", "forward"], [28, 2, 1, "", "preprocess_synapse_for_request"], [28, 2, 1, "", "process_server_response"], [28, 2, 1, "", "query"]], "bittensor.core.dendrite.DendriteMixin": [[28, 2, 1, "", "__repr__"], [28, 2, 1, "", "__str__"], [28, 2, 1, "id0", "aclose_session"], [28, 2, 1, "", "aquery"], [28, 2, 1, "id3", "call"], [28, 2, 1, "id4", "call_stream"], [28, 2, 1, "id5", "close_session"], [28, 4, 1, "", "external_ip"], [28, 2, 1, "id7", "forward"], [28, 4, 1, "", "keypair"], [28, 2, 1, "", "log_exception"], [28, 2, 1, "id8", "preprocess_synapse_for_request"], [28, 2, 1, "", "process_error_message"], [28, 2, 1, "id9", "process_server_response"], [28, 2, 1, "id11", "query"], [28, 3, 1, "", "session"], [28, 4, 1, "", "synapse_history"], [28, 4, 1, "", "uuid"]], "bittensor.core.errors": [[29, 7, 1, "", "BalanceTypeError"], [29, 7, 1, "", "BalanceUnitMismatchError"], [29, 7, 1, "", "BlacklistedException"], [29, 6, 1, "", "BlockNotFound"], [29, 7, 1, "", "ChainConnectionError"], [29, 7, 1, "", "ChainError"], [29, 7, 1, "", "ChainQueryError"], [29, 7, 1, "", "ChainTransactionError"], [29, 7, 1, "", "DelegateTakeTooHigh"], [29, 7, 1, "", "DelegateTakeTooLow"], [29, 7, 1, "", "DelegateTxRateLimitExceeded"], [29, 7, 1, "", "DuplicateChild"], [29, 6, 1, "", "ExtrinsicNotFound"], [29, 7, 1, "", "HotKeyAccountNotExists"], [29, 7, 1, "", "IdentityError"], [29, 7, 1, "", "InternalServerError"], [29, 7, 1, "", "InvalidChild"], [29, 7, 1, "", "InvalidRequestNameError"], [29, 7, 1, "", "MaxAttemptsException"], [29, 7, 1, "", "MaxSuccessException"], [29, 7, 1, "", "MetadataError"], [29, 7, 1, "", "NominationError"], [29, 7, 1, "", "NonAssociatedColdKey"], [29, 7, 1, "", "NotDelegateError"], [29, 7, 1, "", "NotEnoughStakeToSetChildkeys"], [29, 7, 1, "", "NotRegisteredError"], [29, 7, 1, "", "NotVerifiedException"], [29, 7, 1, "", "PostProcessException"], [29, 7, 1, "", "PriorityException"], [29, 7, 1, "", "ProportionOverflow"], [29, 7, 1, "", "RegistrationError"], [29, 7, 1, "", "RegistrationNotPermittedOnRootSubnet"], [29, 7, 1, "", "RunException"], [29, 7, 1, "", "StakeError"], [29, 6, 1, "", "StorageFunctionNotFound"], [29, 7, 1, "", "SubnetNotExists"], [29, 6, 1, "", "SubstrateRequestException"], [29, 7, 1, "", "SynapseDendriteNoneException"], [29, 7, 1, "", "SynapseException"], [29, 7, 1, "", "SynapseParsingError"], [29, 7, 1, "", "TakeError"], [29, 7, 1, "", "TooManyChildren"], [29, 7, 1, "", "TransferError"], [29, 7, 1, "", "TxRateLimitExceeded"], [29, 7, 1, "", "UnknownSynapseError"], [29, 7, 1, "", "UnstakeError"]], "bittensor.core.errors.ChainError": [[29, 2, 1, "", "from_error"]], "bittensor.core.errors.SynapseDendriteNoneException": [[29, 4, 1, "", "message"]], "bittensor.core.errors.SynapseException": [[29, 4, 1, "", "message"], [29, 4, 1, "", "synapse"]], "bittensor.core.extrinsics": [[32, 0, 0, "-", "asyncex"], [48, 0, 0, "-", "children"], [49, 0, 0, "-", "crowdloan"], [51, 0, 0, "-", "liquidity"], [52, 0, 0, "-", "mev_shield"], [53, 0, 0, "-", "move_stake"], [59, 0, 0, "-", "pallets"], [65, 0, 0, "-", "proxy"], [66, 0, 0, "-", "registration"], [67, 0, 0, "-", "root"], [68, 0, 0, "-", "serving"], [69, 0, 0, "-", "staking"], [70, 0, 0, "-", "start_call"], [71, 0, 0, "-", "sudo"], [72, 0, 0, "-", "take"], [73, 0, 0, "-", "transfer"], [74, 0, 0, "-", "unstaking"], [75, 0, 0, "-", "utils"], [76, 0, 0, "-", "weights"]], "bittensor.core.extrinsics.asyncex": [[30, 0, 0, "-", "children"], [31, 0, 0, "-", "crowdloan"], [33, 0, 0, "-", "liquidity"], [34, 0, 0, "-", "mev_shield"], [35, 0, 0, "-", "move_stake"], [36, 0, 0, "-", "proxy"], [37, 0, 0, "-", "registration"], [38, 0, 0, "-", "root"], [39, 0, 0, "-", "serving"], [40, 0, 0, "-", "staking"], [41, 0, 0, "-", "start_call"], [42, 0, 0, "-", "sudo"], [43, 0, 0, "-", "take"], [44, 0, 0, "-", "transfer"], [45, 0, 0, "-", "unstaking"], [46, 0, 0, "-", "utils"], [47, 0, 0, "-", "weights"]], "bittensor.core.extrinsics.asyncex.children": [[30, 5, 1, "", "root_set_pending_childkey_cooldown_extrinsic"], [30, 5, 1, "", "set_children_extrinsic"]], "bittensor.core.extrinsics.asyncex.crowdloan": [[31, 5, 1, "", "contribute_crowdloan_extrinsic"], [31, 5, 1, "", "create_crowdloan_extrinsic"], [31, 5, 1, "", "dissolve_crowdloan_extrinsic"], [31, 5, 1, "", "finalize_crowdloan_extrinsic"], [31, 5, 1, "", "refund_crowdloan_extrinsic"], [31, 5, 1, "", "update_cap_crowdloan_extrinsic"], [31, 5, 1, "", "update_end_crowdloan_extrinsic"], [31, 5, 1, "", "update_min_contribution_crowdloan_extrinsic"], [31, 5, 1, "", "withdraw_crowdloan_extrinsic"]], "bittensor.core.extrinsics.asyncex.liquidity": [[33, 5, 1, "", "add_liquidity_extrinsic"], [33, 5, 1, "", "modify_liquidity_extrinsic"], [33, 5, 1, "", "remove_liquidity_extrinsic"], [33, 5, 1, "", "toggle_user_liquidity_extrinsic"]], "bittensor.core.extrinsics.asyncex.mev_shield": [[34, 5, 1, "", "submit_encrypted_extrinsic"], [34, 5, 1, "", "wait_for_extrinsic_by_hash"]], "bittensor.core.extrinsics.asyncex.move_stake": [[35, 5, 1, "", "move_stake_extrinsic"], [35, 5, 1, "", "swap_stake_extrinsic"], [35, 5, 1, "", "transfer_stake_extrinsic"]], "bittensor.core.extrinsics.asyncex.proxy": [[36, 5, 1, "", "add_proxy_extrinsic"], [36, 5, 1, "", "announce_extrinsic"], [36, 5, 1, "", "create_pure_proxy_extrinsic"], [36, 5, 1, "", "kill_pure_proxy_extrinsic"], [36, 5, 1, "", "poke_deposit_extrinsic"], [36, 5, 1, "", "proxy_announced_extrinsic"], [36, 5, 1, "", "proxy_extrinsic"], [36, 5, 1, "", "reject_announcement_extrinsic"], [36, 5, 1, "", "remove_announcement_extrinsic"], [36, 5, 1, "", "remove_proxies_extrinsic"], [36, 5, 1, "", "remove_proxy_extrinsic"]], "bittensor.core.extrinsics.asyncex.registration": [[37, 5, 1, "", "burned_register_extrinsic"], [37, 5, 1, "", "register_extrinsic"], [37, 5, 1, "", "register_subnet_extrinsic"], [37, 5, 1, "", "set_subnet_identity_extrinsic"]], "bittensor.core.extrinsics.asyncex.root": [[38, 5, 1, "", "claim_root_extrinsic"], [38, 5, 1, "", "root_register_extrinsic"], [38, 5, 1, "", "set_root_claim_type_extrinsic"]], "bittensor.core.extrinsics.asyncex.serving": [[39, 5, 1, "", "publish_metadata_extrinsic"], [39, 5, 1, "", "serve_axon_extrinsic"], [39, 5, 1, "", "serve_extrinsic"]], "bittensor.core.extrinsics.asyncex.staking": [[40, 5, 1, "", "add_stake_extrinsic"], [40, 5, 1, "", "add_stake_multiple_extrinsic"], [40, 5, 1, "", "set_auto_stake_extrinsic"]], "bittensor.core.extrinsics.asyncex.start_call": [[41, 5, 1, "", "start_call_extrinsic"]], "bittensor.core.extrinsics.asyncex.sudo": [[42, 5, 1, "", "sudo_set_admin_freeze_window_extrinsic"], [42, 5, 1, "", "sudo_set_mechanism_count_extrinsic"], [42, 5, 1, "", "sudo_set_mechanism_emission_split_extrinsic"]], "bittensor.core.extrinsics.asyncex.take": [[43, 5, 1, "", "set_take_extrinsic"]], "bittensor.core.extrinsics.asyncex.transfer": [[44, 5, 1, "", "transfer_extrinsic"]], "bittensor.core.extrinsics.asyncex.unstaking": [[45, 5, 1, "", "unstake_all_extrinsic"], [45, 5, 1, "", "unstake_extrinsic"], [45, 5, 1, "", "unstake_multiple_extrinsic"]], "bittensor.core.extrinsics.asyncex.utils": [[46, 5, 1, "", "sudo_call_extrinsic"]], "bittensor.core.extrinsics.asyncex.weights": [[47, 5, 1, "", "commit_timelocked_weights_extrinsic"], [47, 5, 1, "", "commit_weights_extrinsic"], [47, 5, 1, "", "reveal_weights_extrinsic"], [47, 5, 1, "", "set_weights_extrinsic"]], "bittensor.core.extrinsics.children": [[48, 5, 1, "", "root_set_pending_childkey_cooldown_extrinsic"], [48, 5, 1, "", "set_children_extrinsic"]], "bittensor.core.extrinsics.crowdloan": [[49, 5, 1, "", "contribute_crowdloan_extrinsic"], [49, 5, 1, "", "create_crowdloan_extrinsic"], [49, 5, 1, "", "dissolve_crowdloan_extrinsic"], [49, 5, 1, "", "finalize_crowdloan_extrinsic"], [49, 5, 1, "", "refund_crowdloan_extrinsic"], [49, 5, 1, "", "update_cap_crowdloan_extrinsic"], [49, 5, 1, "", "update_end_crowdloan_extrinsic"], [49, 5, 1, "", "update_min_contribution_crowdloan_extrinsic"], [49, 5, 1, "", "withdraw_crowdloan_extrinsic"]], "bittensor.core.extrinsics.liquidity": [[51, 5, 1, "", "add_liquidity_extrinsic"], [51, 5, 1, "", "modify_liquidity_extrinsic"], [51, 5, 1, "", "remove_liquidity_extrinsic"], [51, 5, 1, "", "toggle_user_liquidity_extrinsic"]], "bittensor.core.extrinsics.mev_shield": [[52, 5, 1, "", "submit_encrypted_extrinsic"], [52, 5, 1, "", "wait_for_extrinsic_by_hash"]], "bittensor.core.extrinsics.move_stake": [[53, 5, 1, "", "move_stake_extrinsic"], [53, 5, 1, "", "swap_stake_extrinsic"], [53, 5, 1, "", "transfer_stake_extrinsic"]], "bittensor.core.extrinsics.pallets": [[54, 0, 0, "-", "admin_utils"], [55, 0, 0, "-", "balances"], [56, 0, 0, "-", "base"], [57, 0, 0, "-", "commitments"], [58, 0, 0, "-", "crowdloan"], [60, 0, 0, "-", "mev_shield"], [61, 0, 0, "-", "proxy"], [62, 0, 0, "-", "subtensor_module"], [63, 0, 0, "-", "sudo"], [64, 0, 0, "-", "swap"]], "bittensor.core.extrinsics.pallets.admin_utils": [[54, 1, 1, "", "AdminUtils"]], "bittensor.core.extrinsics.pallets.admin_utils.AdminUtils": [[54, 2, 1, "", "schedule_grandpa_change"], [54, 2, 1, "", "sudo_set_activity_cutoff"], [54, 2, 1, "", "sudo_set_adjustment_alpha"], [54, 2, 1, "", "sudo_set_adjustment_interval"], [54, 2, 1, "", "sudo_set_admin_freeze_window"], [54, 2, 1, "", "sudo_set_alpha_sigmoid_steepness"], [54, 2, 1, "", "sudo_set_alpha_values"], [54, 2, 1, "", "sudo_set_bonds_moving_average"], [54, 2, 1, "", "sudo_set_bonds_penalty"], [54, 2, 1, "", "sudo_set_bonds_reset_enabled"], [54, 2, 1, "", "sudo_set_ck_burn"], [54, 2, 1, "", "sudo_set_coldkey_swap_schedule_duration"], [54, 2, 1, "", "sudo_set_commit_reveal_version"], [54, 2, 1, "", "sudo_set_commit_reveal_weights_enabled"], [54, 2, 1, "", "sudo_set_commit_reveal_weights_interval"], [54, 2, 1, "", "sudo_set_default_take"], [54, 2, 1, "", "sudo_set_difficulty"], [54, 2, 1, "", "sudo_set_dissolve_network_schedule_duration"], [54, 2, 1, "", "sudo_set_ema_price_halving_period"], [54, 2, 1, "", "sudo_set_evm_chain_id"], [54, 2, 1, "", "sudo_set_immunity_period"], [54, 2, 1, "", "sudo_set_kappa"], [54, 2, 1, "", "sudo_set_liquid_alpha_enabled"], [54, 2, 1, "", "sudo_set_lock_reduction_interval"], [54, 2, 1, "", "sudo_set_max_allowed_uids"], [54, 2, 1, "", "sudo_set_max_allowed_validators"], [54, 2, 1, "", "sudo_set_max_burn"], [54, 2, 1, "", "sudo_set_max_difficulty"], [54, 2, 1, "", "sudo_set_max_registrations_per_block"], [54, 2, 1, "", "sudo_set_mechanism_count"], [54, 2, 1, "", "sudo_set_mechanism_emission_split"], [54, 2, 1, "", "sudo_set_min_allowed_uids"], [54, 2, 1, "", "sudo_set_min_allowed_weights"], [54, 2, 1, "", "sudo_set_min_burn"], [54, 2, 1, "", "sudo_set_min_delegate_take"], [54, 2, 1, "", "sudo_set_min_difficulty"], [54, 2, 1, "", "sudo_set_network_immunity_period"], [54, 2, 1, "", "sudo_set_network_min_lock_cost"], [54, 2, 1, "", "sudo_set_network_pow_registration_allowed"], [54, 2, 1, "", "sudo_set_network_rate_limit"], [54, 2, 1, "", "sudo_set_network_registration_allowed"], [54, 2, 1, "", "sudo_set_nominator_min_required_stake"], [54, 2, 1, "", "sudo_set_owner_hparam_rate_limit"], [54, 2, 1, "", "sudo_set_owner_immune_neuron_limit"], [54, 2, 1, "", "sudo_set_rao_recycled"], [54, 2, 1, "", "sudo_set_recycle_or_burn"], [54, 2, 1, "", "sudo_set_rho"], [54, 2, 1, "", "sudo_set_serving_rate_limit"], [54, 2, 1, "", "sudo_set_sn_owner_hotkey"], [54, 2, 1, "", "sudo_set_stake_threshold"], [54, 2, 1, "", "sudo_set_subnet_limit"], [54, 2, 1, "", "sudo_set_subnet_moving_alpha"], [54, 2, 1, "", "sudo_set_subnet_owner_cut"], [54, 2, 1, "", "sudo_set_subnet_owner_hotkey"], [54, 2, 1, "", "sudo_set_subtoken_enabled"], [54, 2, 1, "", "sudo_set_tao_flow_cutoff"], [54, 2, 1, "", "sudo_set_tao_flow_normalization_exponent"], [54, 2, 1, "", "sudo_set_tao_flow_smoothing_factor"], [54, 2, 1, "", "sudo_set_target_registrations_per_interval"], [54, 2, 1, "", "sudo_set_tempo"], [54, 2, 1, "", "sudo_set_toggle_transfer"], [54, 2, 1, "", "sudo_set_total_issuance"], [54, 2, 1, "", "sudo_set_tx_delegate_take_rate_limit"], [54, 2, 1, "", "sudo_set_tx_rate_limit"], [54, 2, 1, "", "sudo_set_weights_set_rate_limit"], [54, 2, 1, "", "sudo_set_weights_version_key"], [54, 2, 1, "", "sudo_set_yuma3_enabled"], [54, 2, 1, "", "sudo_toggle_evm_precompile"], [54, 2, 1, "", "sudo_trim_to_max_allowed_uids"], [54, 2, 1, "", "swap_authorities"]], "bittensor.core.extrinsics.pallets.balances": [[55, 1, 1, "", "Balances"]], "bittensor.core.extrinsics.pallets.balances.Balances": [[55, 2, 1, "", "transfer_all"], [55, 2, 1, "", "transfer_allow_death"], [55, 2, 1, "", "transfer_keep_alive"]], "bittensor.core.extrinsics.pallets.base": [[56, 6, 1, "", "Call"], [56, 1, 1, "", "CallBuilder"]], "bittensor.core.extrinsics.pallets.base.CallBuilder": [[56, 2, 1, "", "create_composed_call"], [56, 4, 1, "", "dynamic_function"], [56, 4, 1, "", "subtensor"]], "bittensor.core.extrinsics.pallets.commitments": [[57, 1, 1, "", "Commitments"]], "bittensor.core.extrinsics.pallets.commitments.Commitments": [[57, 2, 1, "", "set_commitment"]], "bittensor.core.extrinsics.pallets.crowdloan": [[58, 1, 1, "", "Crowdloan"]], "bittensor.core.extrinsics.pallets.crowdloan.Crowdloan": [[58, 2, 1, "", "contribute"], [58, 2, 1, "", "create"], [58, 2, 1, "", "dissolve"], [58, 2, 1, "", "finalize"], [58, 2, 1, "", "refund"], [58, 2, 1, "", "update_cap"], [58, 2, 1, "", "update_end"], [58, 2, 1, "", "update_min_contribution"], [58, 2, 1, "", "withdraw"]], "bittensor.core.extrinsics.pallets.mev_shield": [[60, 1, 1, "", "MevShield"]], "bittensor.core.extrinsics.pallets.mev_shield.MevShield": [[60, 2, 1, "", "submit_encrypted"]], "bittensor.core.extrinsics.pallets.proxy": [[61, 1, 1, "", "Proxy"]], "bittensor.core.extrinsics.pallets.proxy.Proxy": [[61, 2, 1, "", "add_proxy"], [61, 2, 1, "", "announce"], [61, 2, 1, "", "create_pure"], [61, 2, 1, "", "kill_pure"], [61, 2, 1, "", "poke_deposit"], [61, 2, 1, "", "proxy"], [61, 2, 1, "", "proxy_announced"], [61, 2, 1, "", "reject_announcement"], [61, 2, 1, "", "remove_announcement"], [61, 2, 1, "", "remove_proxies"], [61, 2, 1, "", "remove_proxy"]], "bittensor.core.extrinsics.pallets.subtensor_module": [[62, 1, 1, "", "SubtensorModule"]], "bittensor.core.extrinsics.pallets.subtensor_module.SubtensorModule": [[62, 2, 1, "", "add_stake"], [62, 2, 1, "", "add_stake_limit"], [62, 2, 1, "", "burned_register"], [62, 2, 1, "", "claim_root"], [62, 2, 1, "", "commit_mechanism_weights"], [62, 2, 1, "", "commit_timelocked_mechanism_weights"], [62, 2, 1, "", "decrease_take"], [62, 2, 1, "", "increase_take"], [62, 2, 1, "", "move_stake"], [62, 2, 1, "", "register"], [62, 2, 1, "", "register_network"], [62, 2, 1, "", "remove_stake"], [62, 2, 1, "", "remove_stake_full_limit"], [62, 2, 1, "", "remove_stake_limit"], [62, 2, 1, "", "reveal_mechanism_weights"], [62, 2, 1, "", "root_register"], [62, 2, 1, "", "serve_axon"], [62, 2, 1, "", "serve_axon_tls"], [62, 2, 1, "", "set_children"], [62, 2, 1, "", "set_coldkey_auto_stake_hotkey"], [62, 2, 1, "", "set_mechanism_weights"], [62, 2, 1, "", "set_pending_childkey_cooldown"], [62, 2, 1, "", "set_root_claim_type"], [62, 2, 1, "", "set_subnet_identity"], [62, 2, 1, "", "start_call"], [62, 2, 1, "", "swap_stake"], [62, 2, 1, "", "swap_stake_limit"], [62, 2, 1, "", "transfer_stake"]], "bittensor.core.extrinsics.pallets.sudo": [[63, 1, 1, "", "Sudo"]], "bittensor.core.extrinsics.pallets.sudo.Sudo": [[63, 2, 1, "", "sudo"]], "bittensor.core.extrinsics.pallets.swap": [[64, 1, 1, "", "Swap"]], "bittensor.core.extrinsics.pallets.swap.Swap": [[64, 2, 1, "", "add_liquidity"], [64, 2, 1, "", "modify_position"], [64, 2, 1, "", "remove_liquidity"], [64, 2, 1, "", "toggle_user_liquidity"]], "bittensor.core.extrinsics.proxy": [[65, 5, 1, "", "add_proxy_extrinsic"], [65, 5, 1, "", "announce_extrinsic"], [65, 5, 1, "", "create_pure_proxy_extrinsic"], [65, 5, 1, "", "kill_pure_proxy_extrinsic"], [65, 5, 1, "", "poke_deposit_extrinsic"], [65, 5, 1, "", "proxy_announced_extrinsic"], [65, 5, 1, "", "proxy_extrinsic"], [65, 5, 1, "", "reject_announcement_extrinsic"], [65, 5, 1, "", "remove_announcement_extrinsic"], [65, 5, 1, "", "remove_proxies_extrinsic"], [65, 5, 1, "", "remove_proxy_extrinsic"]], "bittensor.core.extrinsics.registration": [[66, 5, 1, "", "burned_register_extrinsic"], [66, 5, 1, "", "register_extrinsic"], [66, 5, 1, "", "register_subnet_extrinsic"], [66, 5, 1, "", "set_subnet_identity_extrinsic"]], "bittensor.core.extrinsics.root": [[67, 5, 1, "", "claim_root_extrinsic"], [67, 5, 1, "", "root_register_extrinsic"], [67, 5, 1, "", "set_root_claim_type_extrinsic"]], "bittensor.core.extrinsics.serving": [[68, 5, 1, "", "publish_metadata_extrinsic"], [68, 5, 1, "", "serve_axon_extrinsic"], [68, 5, 1, "", "serve_extrinsic"]], "bittensor.core.extrinsics.staking": [[69, 5, 1, "", "add_stake_extrinsic"], [69, 5, 1, "", "add_stake_multiple_extrinsic"], [69, 5, 1, "", "set_auto_stake_extrinsic"]], "bittensor.core.extrinsics.start_call": [[70, 5, 1, "", "start_call_extrinsic"]], "bittensor.core.extrinsics.sudo": [[71, 5, 1, "", "sudo_set_admin_freeze_window_extrinsic"], [71, 5, 1, "", "sudo_set_mechanism_count_extrinsic"], [71, 5, 1, "", "sudo_set_mechanism_emission_split_extrinsic"]], "bittensor.core.extrinsics.take": [[72, 5, 1, "", "set_take_extrinsic"]], "bittensor.core.extrinsics.transfer": [[73, 5, 1, "", "transfer_extrinsic"]], "bittensor.core.extrinsics.unstaking": [[74, 5, 1, "", "unstake_all_extrinsic"], [74, 5, 1, "", "unstake_extrinsic"], [74, 5, 1, "", "unstake_multiple_extrinsic"]], "bittensor.core.extrinsics.utils": [[75, 5, 1, "", "apply_pure_proxy_data"], [75, 5, 1, "", "get_event_data_by_event_name"], [75, 5, 1, "", "get_mev_commitment_and_ciphertext"], [75, 5, 1, "", "get_old_stakes"], [75, 5, 1, "", "get_transfer_fn_params"], [75, 5, 1, "", "sudo_call_extrinsic"]], "bittensor.core.extrinsics.weights": [[76, 5, 1, "", "commit_timelocked_weights_extrinsic"], [76, 5, 1, "", "commit_weights_extrinsic"], [76, 5, 1, "", "reveal_weights_extrinsic"], [76, 5, 1, "", "set_weights_extrinsic"]], "bittensor.core.metagraph": [[78, 1, 1, "", "AsyncMetagraph"], [78, 6, 1, "", "BaseClass"], [78, 6, 1, "", "METAGRAPH_STATE_DICT_NDARRAY_KEYS"], [78, 1, 1, "", "Metagraph"], [78, 1, 1, "", "MetagraphMixin"], [78, 1, 1, "", "NonTorchMetagraph"], [78, 6, 1, "", "NumpyOrTorch"], [78, 6, 1, "", "Tensor"], [78, 1, 1, "", "TorchMetagraph"], [78, 5, 1, "", "async_metagraph"], [78, 5, 1, "", "get_save_dir"], [78, 5, 1, "", "latest_block_path"], [78, 5, 1, "", "safe_globals"]], "bittensor.core.metagraph.AsyncMetagraph": [[78, 2, 1, "", "sync"]], "bittensor.core.metagraph.Metagraph": [[78, 2, 1, "", "sync"]], "bittensor.core.metagraph.MetagraphMixin": [[78, 3, 1, "", "AS"], [78, 3, 1, "", "B"], [78, 3, 1, "", "C"], [78, 3, 1, "", "D"], [78, 3, 1, "", "E"], [78, 3, 1, "", "I"], [78, 3, 1, "", "R"], [78, 3, 1, "", "S"], [78, 3, 1, "", "T"], [78, 3, 1, "", "TS"], [78, 3, 1, "", "Tv"], [78, 3, 1, "", "W"], [78, 4, 1, "", "active"], [78, 3, 1, "", "addresses"], [78, 4, 1, "", "alpha_dividends_per_hotkey"], [78, 4, 1, "", "alpha_stake"], [78, 4, 1, "", "axons"], [78, 4, 1, "", "block"], [78, 4, 1, "", "block_at_registration"], [78, 4, 1, "", "blocks_since_last_step"], [78, 4, 1, "", "bonds"], [78, 4, 1, "", "chain_endpoint"], [78, 3, 1, "", "coldkeys"], [78, 4, 1, "", "consensus"], [78, 4, 1, "", "dividends"], [78, 4, 1, "", "emission"], [78, 4, 1, "", "emissions"], [78, 3, 1, "", "hotkeys"], [78, 4, 1, "", "hparams"], [78, 4, 1, "", "identities"], [78, 4, 1, "", "identity"], [78, 4, 1, "", "incentive"], [78, 4, 1, "", "last_step"], [78, 4, 1, "", "last_update"], [78, 4, 1, "", "lite"], [78, 2, 1, "", "load"], [78, 2, 1, "", "load_from_path"], [78, 4, 1, "", "max_uids"], [78, 4, 1, "", "mechanism_count"], [78, 4, 1, "", "mechanisms_emissions_split"], [78, 4, 1, "", "mechid"], [78, 2, 1, "", "metadata"], [78, 4, 1, "", "n"], [78, 4, 1, "", "name"], [78, 4, 1, "", "netuid"], [78, 4, 1, "", "network"], [78, 4, 1, "", "network_registered_at"], [78, 4, 1, "", "neurons"], [78, 4, 1, "", "num_uids"], [78, 4, 1, "", "owner_coldkey"], [78, 4, 1, "", "owner_hotkey"], [78, 4, 1, "", "pool"], [78, 4, 1, "", "pruning_score"], [78, 4, 1, "", "ranks"], [78, 2, 1, "", "save"], [78, 4, 1, "", "should_sync"], [78, 4, 1, "", "stake"], [78, 2, 1, "", "state_dict"], [78, 4, 1, "", "subtensor"], [78, 4, 1, "", "symbol"], [78, 4, 1, "", "tao_dividends_per_hotkey"], [78, 4, 1, "", "tao_stake"], [78, 4, 1, "", "tempo"], [78, 4, 1, "", "trust"], [78, 4, 1, "", "uids"], [78, 4, 1, "", "validator_permit"], [78, 4, 1, "", "validator_trust"], [78, 4, 1, "", "version"], [78, 4, 1, "", "weights"]], "bittensor.core.metagraph.NonTorchMetagraph": [[78, 4, 1, "", "active"], [78, 4, 1, "", "alpha_stake"], [78, 4, 1, "", "block"], [78, 4, 1, "", "bonds"], [78, 4, 1, "", "consensus"], [78, 4, 1, "", "dividends"], [78, 4, 1, "", "emission"], [78, 4, 1, "", "incentive"], [78, 4, 1, "", "last_update"], [78, 2, 1, "", "load_from_path"], [78, 4, 1, "", "n"], [78, 4, 1, "", "netuid"], [78, 4, 1, "", "ranks"], [78, 4, 1, "", "should_sync"], [78, 4, 1, "", "stake"], [78, 4, 1, "", "subtensor"], [78, 4, 1, "", "tao_stake"], [78, 4, 1, "", "total_stake"], [78, 4, 1, "", "trust"], [78, 4, 1, "", "uids"], [78, 4, 1, "", "validator_permit"], [78, 4, 1, "", "validator_trust"], [78, 4, 1, "", "version"], [78, 4, 1, "", "weights"]], "bittensor.core.metagraph.TorchMetagraph": [[78, 4, 1, "", "active"], [78, 4, 1, "", "alpha_stake"], [78, 4, 1, "", "block"], [78, 4, 1, "", "bonds"], [78, 4, 1, "", "consensus"], [78, 4, 1, "", "dividends"], [78, 4, 1, "", "emission"], [78, 4, 1, "", "incentive"], [78, 4, 1, "", "last_update"], [78, 2, 1, "", "load_from_path"], [78, 4, 1, "", "n"], [78, 4, 1, "", "ranks"], [78, 4, 1, "", "stake"], [78, 4, 1, "", "tao_stake"], [78, 4, 1, "", "total_stake"], [78, 4, 1, "", "trust"], [78, 4, 1, "", "uids"], [78, 4, 1, "", "validator_permit"], [78, 4, 1, "", "validator_trust"], [78, 4, 1, "", "version"], [78, 4, 1, "", "weights"]], "bittensor.core.settings": [[79, 6, 1, "", "ARCHIVE_ENTRYPOINT"], [79, 6, 1, "", "BLOCKTIME"], [79, 6, 1, "", "DEFAULTS"], [79, 6, 1, "", "DEFAULT_ENDPOINT"], [79, 6, 1, "", "DEFAULT_MEV_PROTECTION"], [79, 6, 1, "", "DEFAULT_NETWORK"], [79, 6, 1, "", "DEFAULT_PERIOD"], [79, 6, 1, "", "FINNEY_ENTRYPOINT"], [79, 6, 1, "", "FINNEY_TEST_ENTRYPOINT"], [79, 6, 1, "", "HOME_DIR"], [79, 6, 1, "", "LATENT_LITE_ENTRYPOINT"], [79, 6, 1, "", "LOCAL_ENTRYPOINT"], [79, 6, 1, "", "MINERS_DIR"], [79, 6, 1, "", "MLKEM768_PUBLIC_KEY_SIZE"], [79, 6, 1, "", "NETWORKS"], [79, 6, 1, "", "NETWORK_EXPLORER_MAP"], [79, 6, 1, "", "NETWORK_MAP"], [79, 6, 1, "", "PIPADDRESS"], [79, 6, 1, "", "RAO_SYMBOL"], [79, 6, 1, "", "READ_ONLY"], [79, 6, 1, "", "REVERSE_NETWORK_MAP"], [79, 6, 1, "", "ROOT_TAO_STAKE_WEIGHT"], [79, 6, 1, "", "SS58_ADDRESS_LENGTH"], [79, 6, 1, "", "TAO_APP_BLOCK_EXPLORER"], [79, 6, 1, "", "TAO_SYMBOL"], [79, 6, 1, "", "TYPE_REGISTRY"], [79, 6, 1, "", "USER_BITTENSOR_DIR"], [79, 6, 1, "", "WALLETS_DIR"], [79, 6, 1, "", "version_as_int"]], "bittensor.core.stream": [[80, 1, 1, "", "BTStreamingResponseModel"], [80, 1, 1, "", "StreamingSynapse"]], "bittensor.core.stream.BTStreamingResponseModel": [[80, 4, 1, "", "token_streamer"]], "bittensor.core.stream.StreamingSynapse": [[80, 1, 1, "", "BTStreamingResponse"], [80, 2, 1, "", "create_streaming_response"], [80, 2, 1, "", "extract_response_json"], [80, 4, 1, "", "model_config"], [80, 2, 1, "", "process_streaming_response"]], "bittensor.core.stream.StreamingSynapse.BTStreamingResponse": [[80, 2, 1, "", "stream_response"], [80, 4, 1, "", "synapse"], [80, 4, 1, "", "token_streamer"]], "bittensor.core.subtensor": [[81, 1, 1, "", "Subtensor"]], "bittensor.core.subtensor.Subtensor": [[81, 2, 1, "", "add_liquidity"], [81, 2, 1, "", "add_proxy"], [81, 2, 1, "", "add_stake"], [81, 2, 1, "", "add_stake_multiple"], [81, 2, 1, "", "all_subnets"], [81, 2, 1, "", "announce_proxy"], [81, 3, 1, "", "block"], [81, 2, 1, "", "blocks_since_last_step"], [81, 2, 1, "", "blocks_since_last_update"], [81, 2, 1, "", "blocks_until_next_epoch"], [81, 2, 1, "", "bonds"], [81, 2, 1, "", "burned_register"], [81, 2, 1, "", "claim_root"], [81, 2, 1, "", "close"], [81, 2, 1, "", "commit_reveal_enabled"], [81, 2, 1, "", "commit_weights"], [81, 2, 1, "", "compose_call"], [81, 2, 1, "", "contribute_crowdloan"], [81, 2, 1, "", "create_crowdloan"], [81, 2, 1, "", "create_pure_proxy"], [81, 2, 1, "", "determine_block_hash"], [81, 2, 1, "", "difficulty"], [81, 2, 1, "", "dissolve_crowdloan"], [81, 2, 1, "", "does_hotkey_exist"], [81, 2, 1, "", "filter_netuids_by_registered_hotkeys"], [81, 2, 1, "", "finalize_crowdloan"], [81, 2, 1, "", "get_admin_freeze_window"], [81, 2, 1, "", "get_all_commitments"], [81, 2, 1, "", "get_all_ema_tao_inflow"], [81, 2, 1, "", "get_all_metagraphs_info"], [81, 2, 1, "", "get_all_neuron_certificates"], [81, 2, 1, "", "get_all_revealed_commitments"], [81, 2, 1, "", "get_all_subnets_info"], [81, 2, 1, "", "get_all_subnets_netuid"], [81, 2, 1, "", "get_auto_stakes"], [81, 2, 1, "", "get_balance"], [81, 2, 1, "", "get_balances"], [81, 2, 1, "", "get_block_hash"], [81, 2, 1, "", "get_block_info"], [81, 2, 1, "", "get_children"], [81, 2, 1, "", "get_children_pending"], [81, 2, 1, "", "get_commitment"], [81, 2, 1, "", "get_commitment_metadata"], [81, 2, 1, "", "get_crowdloan_by_id"], [81, 2, 1, "", "get_crowdloan_constants"], [81, 2, 1, "", "get_crowdloan_contributions"], [81, 2, 1, "", "get_crowdloan_next_id"], [81, 2, 1, "", "get_crowdloans"], [81, 2, 1, "", "get_current_block"], [81, 2, 1, "", "get_delegate_by_hotkey"], [81, 2, 1, "", "get_delegate_identities"], [81, 2, 1, "", "get_delegate_take"], [81, 2, 1, "", "get_delegated"], [81, 2, 1, "", "get_delegates"], [81, 2, 1, "", "get_ema_tao_inflow"], [81, 2, 1, "", "get_existential_deposit"], [81, 2, 1, "", "get_extrinsic_fee"], [81, 2, 1, "", "get_hotkey_owner"], [81, 4, 1, "", "get_hotkey_stake"], [81, 2, 1, "", "get_hyperparameter"], [81, 2, 1, "", "get_last_bonds_reset"], [81, 2, 1, "", "get_last_commitment_bonds_reset_block"], [81, 2, 1, "", "get_liquidity_list"], [81, 2, 1, "", "get_mechanism_count"], [81, 2, 1, "", "get_mechanism_emission_split"], [81, 2, 1, "", "get_metagraph_info"], [81, 2, 1, "", "get_mev_shield_current_key"], [81, 2, 1, "", "get_mev_shield_next_key"], [81, 2, 1, "", "get_mev_shield_submission"], [81, 2, 1, "", "get_mev_shield_submissions"], [81, 2, 1, "", "get_minimum_required_stake"], [81, 2, 1, "", "get_netuids_for_hotkey"], [81, 2, 1, "", "get_neuron_certificate"], [81, 2, 1, "", "get_neuron_for_pubkey_and_subnet"], [81, 2, 1, "", "get_next_epoch_start_block"], [81, 2, 1, "", "get_owned_hotkeys"], [81, 2, 1, "", "get_parents"], [81, 2, 1, "", "get_proxies"], [81, 2, 1, "", "get_proxies_for_real_account"], [81, 2, 1, "", "get_proxy_announcement"], [81, 2, 1, "", "get_proxy_announcements"], [81, 2, 1, "", "get_proxy_constants"], [81, 2, 1, "", "get_revealed_commitment"], [81, 2, 1, "", "get_revealed_commitment_by_hotkey"], [81, 2, 1, "", "get_root_alpha_dividends_per_subnet"], [81, 2, 1, "", "get_root_claim_type"], [81, 2, 1, "", "get_root_claimable_all_rates"], [81, 2, 1, "", "get_root_claimable_rate"], [81, 2, 1, "", "get_root_claimable_stake"], [81, 2, 1, "", "get_root_claimed"], [81, 2, 1, "", "get_stake"], [81, 2, 1, "", "get_stake_add_fee"], [81, 2, 1, "", "get_stake_for_coldkey_and_hotkey"], [81, 2, 1, "", "get_stake_for_hotkey"], [81, 2, 1, "", "get_stake_info_for_coldkey"], [81, 2, 1, "", "get_stake_info_for_coldkeys"], [81, 2, 1, "", "get_stake_movement_fee"], [81, 2, 1, "", "get_stake_weight"], [81, 2, 1, "", "get_subnet_burn_cost"], [81, 2, 1, "", "get_subnet_hyperparameters"], [81, 2, 1, "", "get_subnet_info"], [81, 2, 1, "", "get_subnet_owner_hotkey"], [81, 2, 1, "", "get_subnet_price"], [81, 2, 1, "", "get_subnet_prices"], [81, 2, 1, "", "get_subnet_reveal_period_epochs"], [81, 2, 1, "", "get_subnet_validator_permits"], [81, 2, 1, "", "get_timelocked_weight_commits"], [81, 2, 1, "", "get_timestamp"], [81, 2, 1, "", "get_total_subnets"], [81, 2, 1, "", "get_transfer_fee"], [81, 2, 1, "", "get_uid_for_hotkey_on_subnet"], [81, 2, 1, "", "get_unstake_fee"], [81, 2, 1, "", "get_vote_data"], [81, 2, 1, "", "immunity_period"], [81, 2, 1, "", "is_fast_blocks"], [81, 2, 1, "", "is_hotkey_delegate"], [81, 2, 1, "", "is_hotkey_registered"], [81, 2, 1, "", "is_hotkey_registered_any"], [81, 2, 1, "", "is_hotkey_registered_on_subnet"], [81, 2, 1, "", "is_in_admin_freeze_window"], [81, 2, 1, "", "is_subnet_active"], [81, 2, 1, "", "kill_pure_proxy"], [81, 2, 1, "", "last_drand_round"], [81, 4, 1, "", "log_verbose"], [81, 2, 1, "", "max_weight_limit"], [81, 2, 1, "", "metagraph"], [81, 2, 1, "", "mev_submit_encrypted"], [81, 2, 1, "", "min_allowed_weights"], [81, 2, 1, "", "modify_liquidity"], [81, 2, 1, "", "move_stake"], [81, 2, 1, "", "neuron_for_uid"], [81, 2, 1, "", "neurons"], [81, 2, 1, "", "neurons_lite"], [81, 2, 1, "", "poke_deposit"], [81, 2, 1, "", "proxy"], [81, 2, 1, "", "proxy_announced"], [81, 2, 1, "", "query_constant"], [81, 2, 1, "", "query_identity"], [81, 2, 1, "", "query_map"], [81, 2, 1, "", "query_map_subtensor"], [81, 2, 1, "", "query_module"], [81, 2, 1, "", "query_runtime_api"], [81, 2, 1, "", "query_subtensor"], [81, 2, 1, "", "recycle"], [81, 2, 1, "", "refund_crowdloan"], [81, 2, 1, "", "register"], [81, 2, 1, "", "register_subnet"], [81, 2, 1, "", "reject_proxy_announcement"], [81, 2, 1, "", "remove_liquidity"], [81, 2, 1, "", "remove_proxies"], [81, 2, 1, "", "remove_proxy"], [81, 2, 1, "", "remove_proxy_announcement"], [81, 2, 1, "", "reveal_weights"], [81, 2, 1, "", "root_register"], [81, 2, 1, "", "root_set_pending_childkey_cooldown"], [81, 2, 1, "", "serve_axon"], [81, 2, 1, "", "set_auto_stake"], [81, 2, 1, "", "set_children"], [81, 2, 1, "", "set_commitment"], [81, 2, 1, "", "set_delegate_take"], [81, 2, 1, "", "set_reveal_commitment"], [81, 2, 1, "", "set_root_claim_type"], [81, 2, 1, "", "set_subnet_identity"], [81, 2, 1, "", "set_weights"], [81, 2, 1, "", "sign_and_send_extrinsic"], [81, 2, 1, "", "sim_swap"], [81, 2, 1, "", "start_call"], [81, 2, 1, "", "state_call"], [81, 2, 1, "", "subnet"], [81, 2, 1, "", "subnet_exists"], [81, 2, 1, "", "subnetwork_n"], [81, 4, 1, "", "substrate"], [81, 2, 1, "", "swap_stake"], [81, 2, 1, "", "tempo"], [81, 2, 1, "", "toggle_user_liquidity"], [81, 2, 1, "", "transfer"], [81, 2, 1, "", "transfer_stake"], [81, 2, 1, "", "tx_rate_limit"], [81, 2, 1, "", "unstake"], [81, 2, 1, "", "unstake_all"], [81, 2, 1, "", "unstake_multiple"], [81, 2, 1, "", "update_cap_crowdloan"], [81, 2, 1, "", "update_end_crowdloan"], [81, 2, 1, "", "update_min_contribution_crowdloan"], [81, 2, 1, "", "validate_extrinsic_params"], [81, 2, 1, "", "wait_for_block"], [81, 2, 1, "", "weights"], [81, 2, 1, "", "weights_rate_limit"], [81, 2, 1, "", "withdraw_crowdloan"]], "bittensor.core.synapse": [[82, 1, 1, "", "Synapse"], [82, 1, 1, "", "TerminalInfo"], [82, 5, 1, "", "cast_float"], [82, 5, 1, "", "cast_int"], [82, 5, 1, "", "get_size"]], "bittensor.core.synapse.Synapse": [[82, 2, 1, "", "__setattr__"], [82, 4, 1, "", "axon"], [82, 3, 1, "id0", "body_hash"], [82, 4, 1, "", "computed_body_hash"], [82, 4, 1, "", "dendrite"], [82, 2, 1, "id1", "deserialize"], [82, 3, 1, "", "failed_verification"], [82, 2, 1, "id2", "from_headers"], [82, 2, 1, "", "get_required_fields"], [82, 2, 1, "id3", "get_total_size"], [82, 4, 1, "", "header_size"], [82, 3, 1, "", "is_blacklist"], [82, 3, 1, "", "is_failure"], [82, 3, 1, "", "is_success"], [82, 3, 1, "", "is_timeout"], [82, 4, 1, "", "model_config"], [82, 4, 1, "", "name"], [82, 2, 1, "id4", "parse_headers_to_inputs"], [82, 4, 1, "", "required_hash_fields"], [82, 2, 1, "", "set_name_type"], [82, 4, 1, "", "timeout"], [82, 2, 1, "id5", "to_headers"], [82, 4, 1, "", "total_size"]], "bittensor.core.synapse.TerminalInfo": [[82, 4, 1, "", "hotkey"], [82, 4, 1, "", "ip"], [82, 4, 1, "", "model_config"], [82, 4, 1, "", "nonce"], [82, 4, 1, "", "port"], [82, 4, 1, "", "process_time"], [82, 4, 1, "", "signature"], [82, 4, 1, "", "status_code"], [82, 4, 1, "", "status_message"], [82, 4, 1, "", "uuid"], [82, 4, 1, "", "version"]], "bittensor.core.tensor": [[83, 1, 1, "", "DTypes"], [83, 1, 1, "", "Tensor"], [83, 5, 1, "", "cast_dtype"], [83, 5, 1, "", "cast_shape"], [83, 6, 1, "", "dtypes"], [83, 1, 1, "", "tensor"]], "bittensor.core.tensor.DTypes": [[83, 4, 1, "", "torch"]], "bittensor.core.tensor.Tensor": [[83, 4, 1, "", "buffer"], [83, 2, 1, "", "deserialize"], [83, 4, 1, "", "dtype"], [83, 4, 1, "", "model_config"], [83, 2, 1, "", "numpy"], [83, 2, 1, "", "serialize"], [83, 4, 1, "", "shape"], [83, 2, 1, "", "tensor"], [83, 2, 1, "", "tolist"]], "bittensor.core.threadpool": [[84, 7, 1, "", "BrokenThreadPool"], [84, 6, 1, "", "NULL_ENTRY"], [84, 1, 1, "", "PriorityThreadPoolExecutor"], [84, 6, 1, "", "logger"]], "bittensor.core.threadpool.PriorityThreadPoolExecutor": [[84, 2, 1, "", "add_args"], [84, 2, 1, "", "config"], [84, 3, 1, "", "is_empty"], [84, 2, 1, "", "shutdown"], [84, 2, 1, "", "submit"]], "bittensor.core.types": [[85, 1, 1, "", "AxonServeCallParams"], [85, 1, 1, "", "BlockInfo"], [85, 1, 1, "", "ExtrinsicResponse"], [85, 1, 1, "", "PrometheusServeCallParams"], [85, 6, 1, "", "Salt"], [85, 1, 1, "", "SubtensorMixin"], [85, 6, 1, "", "UIDs"], [85, 6, 1, "", "Weights"]], "bittensor.core.types.AxonServeCallParams": [[85, 2, 1, "", "as_dict"], [85, 4, 1, "", "certificate"], [85, 4, 1, "", "coldkey"], [85, 2, 1, "", "copy"], [85, 4, 1, "", "hotkey"], [85, 4, 1, "", "ip"], [85, 4, 1, "", "ip_type"], [85, 4, 1, "", "netuid"], [85, 4, 1, "", "placeholder1"], [85, 4, 1, "", "placeholder2"], [85, 4, 1, "", "port"], [85, 4, 1, "", "protocol"], [85, 4, 1, "", "version"]], "bittensor.core.types.BlockInfo": [[85, 4, 1, "", "explorer"], [85, 4, 1, "", "extrinsics"], [85, 4, 1, "", "hash"], [85, 4, 1, "", "header"], [85, 4, 1, "", "number"], [85, 4, 1, "", "timestamp"]], "bittensor.core.types.ExtrinsicResponse": [[85, 2, 1, "", "as_dict"], [85, 4, 1, "", "data"], [85, 4, 1, "", "error"], [85, 4, 1, "", "extrinsic"], [85, 4, 1, "", "extrinsic_fee"], [85, 4, 1, "", "extrinsic_function"], [85, 4, 1, "", "extrinsic_receipt"], [85, 2, 1, "", "from_exception"], [85, 4, 1, "", "message"], [85, 4, 1, "", "mev_extrinsic"], [85, 4, 1, "", "success"], [85, 4, 1, "", "transaction_alpha_fee"], [85, 4, 1, "", "transaction_tao_fee"], [85, 2, 1, "", "unlock_wallet"], [85, 2, 1, "", "with_log"]], "bittensor.core.types.PrometheusServeCallParams": [[85, 4, 1, "", "ip"], [85, 4, 1, "", "ip_type"], [85, 4, 1, "", "netuid"], [85, 4, 1, "", "port"], [85, 4, 1, "", "version"]], "bittensor.core.types.SubtensorMixin": [[85, 2, 1, "", "add_args"], [85, 4, 1, "", "chain_endpoint"], [85, 2, 1, "", "config"], [85, 2, 1, "", "help"], [85, 4, 1, "", "log_verbose"], [85, 4, 1, "", "network"], [85, 2, 1, "", "setup_config"]], "bittensor.extras": [[90, 0, 0, "-", "dev_framework"], [99, 0, 0, "-", "subtensor_api"], [109, 0, 0, "-", "timelock"]], "bittensor.extras.dev_framework": [[86, 0, 0, "-", "calls"], [91, 0, 0, "-", "subnet"], [92, 0, 0, "-", "utils"]], "bittensor.extras.dev_framework.calls": [[86, 6, 1, "", "HEADER"], [86, 6, 1, "", "IMPORT_TEXT"], [87, 0, 0, "-", "non_sudo_calls"], [88, 0, 0, "-", "pallets"], [86, 5, 1, "", "recreate_calls_subpackage"], [89, 0, 0, "-", "sudo_calls"]], "bittensor.extras.dev_framework.calls.non_sudo_calls": [[87, 1, 1, "", "ADD_LIQUIDITY"], [87, 1, 1, "", "ADD_PROXY"], [87, 1, 1, "", "ADD_STAKE"], [87, 1, 1, "", "ADD_STAKE_LIMIT"], [87, 1, 1, "", "ANNOUNCE"], [87, 1, 1, "", "APPLY_AUTHORIZED_UPGRADE"], [87, 1, 1, "", "APPROVE_AS_MULTI"], [87, 1, 1, "", "ASSOCIATE_EVM_KEY"], [87, 1, 1, "", "AS_DERIVATIVE"], [87, 1, 1, "", "AS_MULTI"], [87, 1, 1, "", "AS_MULTI_THRESHOLD_1"], [87, 1, 1, "", "AUTHORIZE_UPGRADE"], [87, 1, 1, "", "AUTHORIZE_UPGRADE_WITHOUT_CHECKS"], [87, 1, 1, "", "BATCH"], [87, 1, 1, "", "BATCH_ALL"], [87, 1, 1, "", "BATCH_COMMIT_WEIGHTS"], [87, 1, 1, "", "BATCH_REVEAL_WEIGHTS"], [87, 1, 1, "", "BATCH_SET_WEIGHTS"], [87, 1, 1, "", "BURN"], [87, 1, 1, "", "BURNED_REGISTER"], [87, 1, 1, "", "BURN_ALPHA"], [87, 1, 1, "", "CALL"], [87, 1, 1, "", "CANCEL"], [87, 1, 1, "", "CANCEL_AS_MULTI"], [87, 1, 1, "", "CANCEL_NAMED"], [87, 1, 1, "", "CANCEL_RETRY"], [87, 1, 1, "", "CANCEL_RETRY_NAMED"], [87, 1, 1, "", "CLAIM_ROOT"], [87, 1, 1, "", "CLEAR_IDENTITY"], [87, 1, 1, "", "COMMIT_CRV3_MECHANISM_WEIGHTS"], [87, 1, 1, "", "COMMIT_MECHANISM_WEIGHTS"], [87, 1, 1, "", "COMMIT_TIMELOCKED_MECHANISM_WEIGHTS"], [87, 1, 1, "", "COMMIT_TIMELOCKED_WEIGHTS"], [87, 1, 1, "", "COMMIT_WEIGHTS"], [87, 1, 1, "", "CONTRIBUTE"], [87, 1, 1, "id0", "CREATE"], [87, 1, 1, "", "CREATE2"], [87, 1, 1, "", "CREATE_PURE"], [87, 1, 1, "", "DECREASE_TAKE"], [87, 1, 1, "", "DISABLE_WHITELIST"], [87, 1, 1, "", "DISPATCH_AS"], [87, 1, 1, "", "DISPATCH_AS_FALLIBLE"], [87, 1, 1, "", "DISSOLVE"], [87, 1, 1, "", "DISSOLVE_NETWORK"], [87, 1, 1, "", "ENSURE_UPDATED"], [87, 1, 1, "", "ENTER"], [87, 1, 1, "", "EXTEND"], [87, 1, 1, "", "FAUCET"], [87, 1, 1, "", "FINALIZE"], [87, 1, 1, "", "FORCE_ADJUST_TOTAL_ISSUANCE"], [87, 1, 1, "", "FORCE_BATCH"], [87, 1, 1, "", "FORCE_ENTER"], [87, 1, 1, "", "FORCE_EXIT"], [87, 1, 1, "", "FORCE_EXTEND"], [87, 1, 1, "", "FORCE_RELEASE_DEPOSIT"], [87, 1, 1, "", "FORCE_SET_BALANCE"], [87, 1, 1, "", "FORCE_SLASH_DEPOSIT"], [87, 1, 1, "", "FORCE_TRANSFER"], [87, 1, 1, "", "FORCE_UNRESERVE"], [87, 1, 1, "", "IF_ELSE"], [87, 1, 1, "", "INCREASE_TAKE"], [87, 1, 1, "", "KILL_PREFIX"], [87, 1, 1, "", "KILL_PURE"], [87, 1, 1, "", "KILL_STORAGE"], [87, 1, 1, "", "MODIFY_POSITION"], [87, 1, 1, "", "MOVE_STAKE"], [87, 1, 1, "", "NOTE_PREIMAGE"], [87, 1, 1, "", "NOTE_STALLED"], [87, 1, 1, "id3", "POKE_DEPOSIT"], [87, 1, 1, "", "PROXY"], [87, 1, 1, "", "PROXY_ANNOUNCED"], [87, 1, 1, "", "RECYCLE_ALPHA"], [87, 1, 1, "", "REFUND"], [87, 1, 1, "", "REGISTER"], [87, 1, 1, "", "REGISTER_LEASED_NETWORK"], [87, 1, 1, "", "REGISTER_NETWORK"], [87, 1, 1, "", "REGISTER_NETWORK_WITH_IDENTITY"], [87, 1, 1, "", "REJECT_ANNOUNCEMENT"], [87, 1, 1, "", "RELEASE_DEPOSIT"], [87, 1, 1, "", "REMARK"], [87, 1, 1, "", "REMARK_WITH_EVENT"], [87, 1, 1, "", "REMOVE_ANNOUNCEMENT"], [87, 1, 1, "", "REMOVE_KEY"], [87, 1, 1, "", "REMOVE_LIQUIDITY"], [87, 1, 1, "", "REMOVE_PROXIES"], [87, 1, 1, "", "REMOVE_PROXY"], [87, 1, 1, "", "REMOVE_STAKE"], [87, 1, 1, "", "REMOVE_STAKE_FULL_LIMIT"], [87, 1, 1, "", "REMOVE_STAKE_LIMIT"], [87, 1, 1, "", "REPORT_EQUIVOCATION"], [87, 1, 1, "", "REPORT_EQUIVOCATION_UNSIGNED"], [87, 1, 1, "", "REQUEST_PREIMAGE"], [87, 1, 1, "", "REVEAL_MECHANISM_WEIGHTS"], [87, 1, 1, "", "REVEAL_WEIGHTS"], [87, 1, 1, "", "ROOT_DISSOLVE_NETWORK"], [87, 1, 1, "", "ROOT_REGISTER"], [87, 1, 1, "", "SCHEDULE"], [87, 1, 1, "", "SCHEDULE_AFTER"], [87, 1, 1, "", "SCHEDULE_GRANDPA_CHANGE"], [87, 1, 1, "", "SCHEDULE_NAMED"], [87, 1, 1, "", "SCHEDULE_NAMED_AFTER"], [87, 1, 1, "", "SCHEDULE_SWAP_COLDKEY"], [87, 1, 1, "", "SERVE_AXON"], [87, 1, 1, "", "SERVE_AXON_TLS"], [87, 1, 1, "", "SERVE_PROMETHEUS"], [87, 1, 1, "", "SET"], [87, 1, 1, "", "SET_BASE_FEE_PER_GAS"], [87, 1, 1, "", "SET_BEACON_CONFIG"], [87, 1, 1, "", "SET_CHILDKEY_TAKE"], [87, 1, 1, "", "SET_CHILDREN"], [87, 1, 1, "", "SET_CODE"], [87, 1, 1, "", "SET_CODE_WITHOUT_CHECKS"], [87, 1, 1, "", "SET_COLDKEY_AUTO_STAKE_HOTKEY"], [87, 1, 1, "", "SET_COMMITMENT"], [87, 1, 1, "", "SET_ELASTICITY"], [87, 1, 1, "", "SET_FEE_RATE"], [87, 1, 1, "", "SET_HEAP_PAGES"], [87, 1, 1, "id6", "SET_IDENTITY"], [87, 1, 1, "", "SET_KEY"], [87, 1, 1, "", "SET_MAX_SPACE"], [87, 1, 1, "", "SET_MECHANISM_WEIGHTS"], [87, 1, 1, "", "SET_OLDEST_STORED_ROUND"], [87, 1, 1, "", "SET_PENDING_CHILDKEY_COOLDOWN"], [87, 1, 1, "", "SET_RETRY"], [87, 1, 1, "", "SET_RETRY_NAMED"], [87, 1, 1, "", "SET_ROOT_CLAIM_TYPE"], [87, 1, 1, "", "SET_STORAGE"], [87, 1, 1, "", "SET_SUBNET_IDENTITY"], [87, 1, 1, "", "SET_WEIGHTS"], [87, 1, 1, "", "SET_WHITELIST"], [87, 1, 1, "", "START_CALL"], [87, 1, 1, "", "SUDO"], [87, 1, 1, "", "SWAP_AUTHORITIES"], [87, 1, 1, "", "SWAP_COLDKEY"], [87, 1, 1, "", "SWAP_HOTKEY"], [87, 1, 1, "", "SWAP_STAKE"], [87, 1, 1, "", "SWAP_STAKE_LIMIT"], [87, 1, 1, "", "TERMINATE_LEASE"], [87, 1, 1, "", "TOGGLE_USER_LIQUIDITY"], [87, 1, 1, "", "TRANSACT"], [87, 1, 1, "", "TRANSFER_ALL"], [87, 1, 1, "", "TRANSFER_ALLOW_DEATH"], [87, 1, 1, "", "TRANSFER_KEEP_ALIVE"], [87, 1, 1, "", "TRANSFER_STAKE"], [87, 1, 1, "", "TRY_ASSOCIATE_HOTKEY"], [87, 1, 1, "", "UNNOTE_PREIMAGE"], [87, 1, 1, "", "UNREQUEST_PREIMAGE"], [87, 1, 1, "", "UNSTAKE_ALL"], [87, 1, 1, "", "UNSTAKE_ALL_ALPHA"], [87, 1, 1, "", "UPDATE_CAP"], [87, 1, 1, "", "UPDATE_END"], [87, 1, 1, "", "UPDATE_MIN_CONTRIBUTION"], [87, 1, 1, "", "UPDATE_SYMBOL"], [87, 1, 1, "", "UPGRADE_ACCOUNTS"], [87, 1, 1, "id9", "WITHDRAW"], [87, 1, 1, "", "WITH_WEIGHT"], [87, 1, 1, "", "WRITE_PULSE"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.ADD_LIQUIDITY": [[87, 4, 1, "", "hotkey"], [87, 4, 1, "", "liquidity"], [87, 4, 1, "", "netuid"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "tick_high"], [87, 4, 1, "", "tick_low"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.ADD_PROXY": [[87, 4, 1, "", "delay"], [87, 4, 1, "", "delegate"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "proxy_type"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.ADD_STAKE": [[87, 4, 1, "", "amount_staked"], [87, 4, 1, "", "hotkey"], [87, 4, 1, "", "netuid"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.ADD_STAKE_LIMIT": [[87, 4, 1, "", "allow_partial"], [87, 4, 1, "", "amount_staked"], [87, 4, 1, "", "hotkey"], [87, 4, 1, "", "limit_price"], [87, 4, 1, "", "netuid"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.ANNOUNCE": [[87, 4, 1, "", "call_hash"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "real"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.APPLY_AUTHORIZED_UPGRADE": [[87, 4, 1, "", "code"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.APPROVE_AS_MULTI": [[87, 4, 1, "", "call_hash"], [87, 4, 1, "", "max_weight"], [87, 4, 1, "", "maybe_timepoint"], [87, 4, 1, "", "other_signatories"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "threshold"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.ASSOCIATE_EVM_KEY": [[87, 4, 1, "", "block_number"], [87, 4, 1, "", "evm_key"], [87, 4, 1, "", "netuid"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "signature"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.AS_DERIVATIVE": [[87, 4, 1, "", "call"], [87, 4, 1, "", "index"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.AS_MULTI": [[87, 4, 1, "", "call"], [87, 4, 1, "", "max_weight"], [87, 4, 1, "", "maybe_timepoint"], [87, 4, 1, "", "other_signatories"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "threshold"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.AS_MULTI_THRESHOLD_1": [[87, 4, 1, "", "call"], [87, 4, 1, "", "other_signatories"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.AUTHORIZE_UPGRADE": [[87, 4, 1, "", "code_hash"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.AUTHORIZE_UPGRADE_WITHOUT_CHECKS": [[87, 4, 1, "", "code_hash"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.BATCH": [[87, 4, 1, "", "calls"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.BATCH_ALL": [[87, 4, 1, "", "calls"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.BATCH_COMMIT_WEIGHTS": [[87, 4, 1, "", "commit_hashes"], [87, 4, 1, "", "netuids"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.BATCH_REVEAL_WEIGHTS": [[87, 4, 1, "", "netuid"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "salts_list"], [87, 4, 1, "", "uids_list"], [87, 4, 1, "", "values_list"], [87, 4, 1, "", "version_keys"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.BATCH_SET_WEIGHTS": [[87, 4, 1, "", "netuids"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "version_keys"], [87, 4, 1, "", "wallet"], [87, 4, 1, "", "weights"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.BURN": [[87, 4, 1, "", "keep_alive"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "value"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.BURNED_REGISTER": [[87, 4, 1, "", "hotkey"], [87, 4, 1, "", "netuid"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.BURN_ALPHA": [[87, 4, 1, "", "amount"], [87, 4, 1, "", "hotkey"], [87, 4, 1, "", "netuid"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.CALL": [[87, 4, 1, "", "access_list"], [87, 4, 1, "", "authorization_list"], [87, 4, 1, "", "gas_limit"], [87, 4, 1, "", "input"], [87, 4, 1, "", "max_fee_per_gas"], [87, 4, 1, "", "max_priority_fee_per_gas"], [87, 4, 1, "", "nonce"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "source"], [87, 4, 1, "", "target"], [87, 4, 1, "", "value"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.CANCEL": [[87, 4, 1, "", "index"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"], [87, 4, 1, "", "when"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.CANCEL_AS_MULTI": [[87, 4, 1, "", "call_hash"], [87, 4, 1, "", "other_signatories"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "threshold"], [87, 4, 1, "", "timepoint"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.CANCEL_NAMED": [[87, 4, 1, "", "id"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.CANCEL_RETRY": [[87, 4, 1, "", "pallet"], [87, 4, 1, "", "task"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.CANCEL_RETRY_NAMED": [[87, 4, 1, "", "id"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.CLAIM_ROOT": [[87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.CLEAR_IDENTITY": [[87, 4, 1, "", "identified"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.COMMIT_CRV3_MECHANISM_WEIGHTS": [[87, 4, 1, "", "commit"], [87, 4, 1, "", "mecid"], [87, 4, 1, "", "netuid"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "reveal_round"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.COMMIT_MECHANISM_WEIGHTS": [[87, 4, 1, "", "commit_hash"], [87, 4, 1, "", "mecid"], [87, 4, 1, "", "netuid"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.COMMIT_TIMELOCKED_MECHANISM_WEIGHTS": [[87, 4, 1, "", "commit"], [87, 4, 1, "", "commit_reveal_version"], [87, 4, 1, "", "mecid"], [87, 4, 1, "", "netuid"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "reveal_round"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.COMMIT_TIMELOCKED_WEIGHTS": [[87, 4, 1, "", "commit"], [87, 4, 1, "", "commit_reveal_version"], [87, 4, 1, "", "netuid"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "reveal_round"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.COMMIT_WEIGHTS": [[87, 4, 1, "", "commit_hash"], [87, 4, 1, "", "netuid"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.CONTRIBUTE": [[87, 4, 1, "", "amount"], [87, 4, 1, "", "crowdloan_id"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.CREATE": [[87, 4, 1, "", "access_list"], [87, 4, 1, "", "authorization_list"], [87, 4, 1, "", "call"], [87, 4, 1, "", "cap"], [87, 4, 1, "", "deposit"], [87, 4, 1, "", "end"], [87, 4, 1, "", "gas_limit"], [87, 4, 1, "", "init"], [87, 4, 1, "", "max_fee_per_gas"], [87, 4, 1, "", "max_priority_fee_per_gas"], [87, 4, 1, "", "min_contribution"], [87, 4, 1, "", "nonce"], [87, 4, 1, "id1", "pallet"], [87, 4, 1, "", "source"], [87, 4, 1, "", "target_address"], [87, 4, 1, "", "value"], [87, 4, 1, "id2", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.CREATE2": [[87, 4, 1, "", "access_list"], [87, 4, 1, "", "authorization_list"], [87, 4, 1, "", "gas_limit"], [87, 4, 1, "", "init"], [87, 4, 1, "", "max_fee_per_gas"], [87, 4, 1, "", "max_priority_fee_per_gas"], [87, 4, 1, "", "nonce"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "salt"], [87, 4, 1, "", "source"], [87, 4, 1, "", "value"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.CREATE_PURE": [[87, 4, 1, "", "delay"], [87, 4, 1, "", "index"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "proxy_type"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.DECREASE_TAKE": [[87, 4, 1, "", "hotkey"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "take"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.DISABLE_WHITELIST": [[87, 4, 1, "", "disabled"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.DISPATCH_AS": [[87, 4, 1, "", "as_origin"], [87, 4, 1, "", "call"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.DISPATCH_AS_FALLIBLE": [[87, 4, 1, "", "as_origin"], [87, 4, 1, "", "call"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.DISSOLVE": [[87, 4, 1, "", "crowdloan_id"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.DISSOLVE_NETWORK": [[87, 4, 1, "", "coldkey"], [87, 4, 1, "", "netuid"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.ENSURE_UPDATED": [[87, 4, 1, "", "hashes"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.ENTER": [[87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.EXTEND": [[87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.FAUCET": [[87, 4, 1, "", "block_number"], [87, 4, 1, "", "nonce"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"], [87, 4, 1, "", "work"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.FINALIZE": [[87, 4, 1, "", "crowdloan_id"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_ADJUST_TOTAL_ISSUANCE": [[87, 4, 1, "", "delta"], [87, 4, 1, "", "direction"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_BATCH": [[87, 4, 1, "", "calls"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_ENTER": [[87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_EXIT": [[87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_EXTEND": [[87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_RELEASE_DEPOSIT": [[87, 4, 1, "", "account"], [87, 4, 1, "", "block"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_SET_BALANCE": [[87, 4, 1, "", "new_free"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"], [87, 4, 1, "", "who"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_SLASH_DEPOSIT": [[87, 4, 1, "", "account"], [87, 4, 1, "", "block"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_TRANSFER": [[87, 4, 1, "", "dest"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "source"], [87, 4, 1, "", "value"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.FORCE_UNRESERVE": [[87, 4, 1, "", "amount"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"], [87, 4, 1, "", "who"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.IF_ELSE": [[87, 4, 1, "", "fallback"], [87, 4, 1, "", "main"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.INCREASE_TAKE": [[87, 4, 1, "", "hotkey"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "take"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.KILL_PREFIX": [[87, 4, 1, "", "pallet"], [87, 4, 1, "", "prefix"], [87, 4, 1, "", "subkeys"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.KILL_PURE": [[87, 4, 1, "", "ext_index"], [87, 4, 1, "", "height"], [87, 4, 1, "", "index"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "proxy_type"], [87, 4, 1, "", "spawner"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.KILL_STORAGE": [[87, 4, 1, "", "keys"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.MODIFY_POSITION": [[87, 4, 1, "", "hotkey"], [87, 4, 1, "", "liquidity_delta"], [87, 4, 1, "", "netuid"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "position_id"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.MOVE_STAKE": [[87, 4, 1, "", "alpha_amount"], [87, 4, 1, "", "destination_hotkey"], [87, 4, 1, "", "destination_netuid"], [87, 4, 1, "", "origin_hotkey"], [87, 4, 1, "", "origin_netuid"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.NOTE_PREIMAGE": [[87, 4, 1, "", "bytes"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.NOTE_STALLED": [[87, 4, 1, "", "best_finalized_block_number"], [87, 4, 1, "", "delay"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.POKE_DEPOSIT": [[87, 4, 1, "", "call_hash"], [87, 4, 1, "", "other_signatories"], [87, 4, 1, "id4", "pallet"], [87, 4, 1, "", "threshold"], [87, 4, 1, "id5", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.PROXY": [[87, 4, 1, "", "call"], [87, 4, 1, "", "force_proxy_type"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "real"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.PROXY_ANNOUNCED": [[87, 4, 1, "", "call"], [87, 4, 1, "", "delegate"], [87, 4, 1, "", "force_proxy_type"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "real"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.RECYCLE_ALPHA": [[87, 4, 1, "", "amount"], [87, 4, 1, "", "hotkey"], [87, 4, 1, "", "netuid"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.REFUND": [[87, 4, 1, "", "crowdloan_id"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.REGISTER": [[87, 4, 1, "", "block_number"], [87, 4, 1, "", "coldkey"], [87, 4, 1, "", "hotkey"], [87, 4, 1, "", "netuid"], [87, 4, 1, "", "nonce"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"], [87, 4, 1, "", "work"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.REGISTER_LEASED_NETWORK": [[87, 4, 1, "", "emissions_share"], [87, 4, 1, "", "end_block"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.REGISTER_NETWORK": [[87, 4, 1, "", "hotkey"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.REGISTER_NETWORK_WITH_IDENTITY": [[87, 4, 1, "", "hotkey"], [87, 4, 1, "", "identity"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.REJECT_ANNOUNCEMENT": [[87, 4, 1, "", "call_hash"], [87, 4, 1, "", "delegate"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.RELEASE_DEPOSIT": [[87, 4, 1, "", "account"], [87, 4, 1, "", "block"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.REMARK": [[87, 4, 1, "", "pallet"], [87, 4, 1, "", "remark"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.REMARK_WITH_EVENT": [[87, 4, 1, "", "pallet"], [87, 4, 1, "", "remark"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_ANNOUNCEMENT": [[87, 4, 1, "", "call_hash"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "real"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_KEY": [[87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_LIQUIDITY": [[87, 4, 1, "", "hotkey"], [87, 4, 1, "", "netuid"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "position_id"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_PROXIES": [[87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_PROXY": [[87, 4, 1, "", "delay"], [87, 4, 1, "", "delegate"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "proxy_type"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_STAKE": [[87, 4, 1, "", "amount_unstaked"], [87, 4, 1, "", "hotkey"], [87, 4, 1, "", "netuid"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_STAKE_FULL_LIMIT": [[87, 4, 1, "", "hotkey"], [87, 4, 1, "", "limit_price"], [87, 4, 1, "", "netuid"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.REMOVE_STAKE_LIMIT": [[87, 4, 1, "", "allow_partial"], [87, 4, 1, "", "amount_unstaked"], [87, 4, 1, "", "hotkey"], [87, 4, 1, "", "limit_price"], [87, 4, 1, "", "netuid"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.REPORT_EQUIVOCATION": [[87, 4, 1, "", "equivocation_proof"], [87, 4, 1, "", "key_owner_proof"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.REPORT_EQUIVOCATION_UNSIGNED": [[87, 4, 1, "", "equivocation_proof"], [87, 4, 1, "", "key_owner_proof"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.REQUEST_PREIMAGE": [[87, 4, 1, "", "hash"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.REVEAL_MECHANISM_WEIGHTS": [[87, 4, 1, "", "mecid"], [87, 4, 1, "", "netuid"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "salt"], [87, 4, 1, "", "uids"], [87, 4, 1, "", "values"], [87, 4, 1, "", "version_key"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.REVEAL_WEIGHTS": [[87, 4, 1, "", "netuid"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "salt"], [87, 4, 1, "", "uids"], [87, 4, 1, "", "values"], [87, 4, 1, "", "version_key"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.ROOT_DISSOLVE_NETWORK": [[87, 4, 1, "", "netuid"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.ROOT_REGISTER": [[87, 4, 1, "", "hotkey"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE": [[87, 4, 1, "", "call"], [87, 4, 1, "", "maybe_periodic"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "priority"], [87, 4, 1, "", "wallet"], [87, 4, 1, "", "when"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE_AFTER": [[87, 4, 1, "", "after"], [87, 4, 1, "", "call"], [87, 4, 1, "", "maybe_periodic"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "priority"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE_GRANDPA_CHANGE": [[87, 4, 1, "", "forced"], [87, 4, 1, "", "in_blocks"], [87, 4, 1, "", "next_authorities"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE_NAMED": [[87, 4, 1, "", "call"], [87, 4, 1, "", "id"], [87, 4, 1, "", "maybe_periodic"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "priority"], [87, 4, 1, "", "wallet"], [87, 4, 1, "", "when"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE_NAMED_AFTER": [[87, 4, 1, "", "after"], [87, 4, 1, "", "call"], [87, 4, 1, "", "id"], [87, 4, 1, "", "maybe_periodic"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "priority"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.SCHEDULE_SWAP_COLDKEY": [[87, 4, 1, "", "new_coldkey"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.SERVE_AXON": [[87, 4, 1, "", "ip"], [87, 4, 1, "", "ip_type"], [87, 4, 1, "", "netuid"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "placeholder1"], [87, 4, 1, "", "placeholder2"], [87, 4, 1, "", "port"], [87, 4, 1, "", "protocol"], [87, 4, 1, "", "version"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.SERVE_AXON_TLS": [[87, 4, 1, "", "certificate"], [87, 4, 1, "", "ip"], [87, 4, 1, "", "ip_type"], [87, 4, 1, "", "netuid"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "placeholder1"], [87, 4, 1, "", "placeholder2"], [87, 4, 1, "", "port"], [87, 4, 1, "", "protocol"], [87, 4, 1, "", "version"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.SERVE_PROMETHEUS": [[87, 4, 1, "", "ip"], [87, 4, 1, "", "ip_type"], [87, 4, 1, "", "netuid"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "port"], [87, 4, 1, "", "version"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.SET": [[87, 4, 1, "", "now"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_BASE_FEE_PER_GAS": [[87, 4, 1, "", "fee"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_BEACON_CONFIG": [[87, 4, 1, "", "config_payload"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "signature"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_CHILDKEY_TAKE": [[87, 4, 1, "", "hotkey"], [87, 4, 1, "", "netuid"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "take"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_CHILDREN": [[87, 4, 1, "", "children"], [87, 4, 1, "", "hotkey"], [87, 4, 1, "", "netuid"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_CODE": [[87, 4, 1, "", "code"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_CODE_WITHOUT_CHECKS": [[87, 4, 1, "", "code"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_COLDKEY_AUTO_STAKE_HOTKEY": [[87, 4, 1, "", "hotkey"], [87, 4, 1, "", "netuid"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_COMMITMENT": [[87, 4, 1, "", "info"], [87, 4, 1, "", "netuid"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_ELASTICITY": [[87, 4, 1, "", "elasticity"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_FEE_RATE": [[87, 4, 1, "", "netuid"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "rate"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_HEAP_PAGES": [[87, 4, 1, "", "pages"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_IDENTITY": [[87, 4, 1, "", "additional"], [87, 4, 1, "", "description"], [87, 4, 1, "", "discord"], [87, 4, 1, "", "github_repo"], [87, 4, 1, "", "identified"], [87, 4, 1, "", "image"], [87, 4, 1, "", "info"], [87, 4, 1, "", "name"], [87, 4, 1, "id7", "pallet"], [87, 4, 1, "", "url"], [87, 4, 1, "id8", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_KEY": [[87, 4, 1, "", "new"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_MAX_SPACE": [[87, 4, 1, "", "new_limit"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_MECHANISM_WEIGHTS": [[87, 4, 1, "", "dests"], [87, 4, 1, "", "mecid"], [87, 4, 1, "", "netuid"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "version_key"], [87, 4, 1, "", "wallet"], [87, 4, 1, "", "weights"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_OLDEST_STORED_ROUND": [[87, 4, 1, "", "oldest_round"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_PENDING_CHILDKEY_COOLDOWN": [[87, 4, 1, "", "cooldown"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_RETRY": [[87, 4, 1, "", "pallet"], [87, 4, 1, "", "period"], [87, 4, 1, "", "retries"], [87, 4, 1, "", "task"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_RETRY_NAMED": [[87, 4, 1, "", "id"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "period"], [87, 4, 1, "", "retries"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_ROOT_CLAIM_TYPE": [[87, 4, 1, "", "new_root_claim_type"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_STORAGE": [[87, 4, 1, "", "items"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_SUBNET_IDENTITY": [[87, 4, 1, "", "additional"], [87, 4, 1, "", "description"], [87, 4, 1, "", "discord"], [87, 4, 1, "", "github_repo"], [87, 4, 1, "", "logo_url"], [87, 4, 1, "", "netuid"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "subnet_contact"], [87, 4, 1, "", "subnet_name"], [87, 4, 1, "", "subnet_url"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_WEIGHTS": [[87, 4, 1, "", "dests"], [87, 4, 1, "", "netuid"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "version_key"], [87, 4, 1, "", "wallet"], [87, 4, 1, "", "weights"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.SET_WHITELIST": [[87, 4, 1, "", "new"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.START_CALL": [[87, 4, 1, "", "netuid"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.SUDO": [[87, 4, 1, "", "call"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.SWAP_AUTHORITIES": [[87, 4, 1, "", "new_authorities"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.SWAP_COLDKEY": [[87, 4, 1, "", "new_coldkey"], [87, 4, 1, "", "old_coldkey"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "swap_cost"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.SWAP_HOTKEY": [[87, 4, 1, "", "hotkey"], [87, 4, 1, "", "netuid"], [87, 4, 1, "", "new_hotkey"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.SWAP_STAKE": [[87, 4, 1, "", "alpha_amount"], [87, 4, 1, "", "destination_netuid"], [87, 4, 1, "", "hotkey"], [87, 4, 1, "", "origin_netuid"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.SWAP_STAKE_LIMIT": [[87, 4, 1, "", "allow_partial"], [87, 4, 1, "", "alpha_amount"], [87, 4, 1, "", "destination_netuid"], [87, 4, 1, "", "hotkey"], [87, 4, 1, "", "limit_price"], [87, 4, 1, "", "origin_netuid"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.TERMINATE_LEASE": [[87, 4, 1, "", "hotkey"], [87, 4, 1, "", "lease_id"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.TOGGLE_USER_LIQUIDITY": [[87, 4, 1, "", "enable"], [87, 4, 1, "", "netuid"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.TRANSACT": [[87, 4, 1, "", "pallet"], [87, 4, 1, "", "transaction"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.TRANSFER_ALL": [[87, 4, 1, "", "dest"], [87, 4, 1, "", "keep_alive"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.TRANSFER_ALLOW_DEATH": [[87, 4, 1, "", "dest"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "value"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.TRANSFER_KEEP_ALIVE": [[87, 4, 1, "", "dest"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "value"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.TRANSFER_STAKE": [[87, 4, 1, "", "alpha_amount"], [87, 4, 1, "", "destination_coldkey"], [87, 4, 1, "", "destination_netuid"], [87, 4, 1, "", "hotkey"], [87, 4, 1, "", "origin_netuid"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.TRY_ASSOCIATE_HOTKEY": [[87, 4, 1, "", "hotkey"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.UNNOTE_PREIMAGE": [[87, 4, 1, "", "hash"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.UNREQUEST_PREIMAGE": [[87, 4, 1, "", "hash"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.UNSTAKE_ALL": [[87, 4, 1, "", "hotkey"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.UNSTAKE_ALL_ALPHA": [[87, 4, 1, "", "hotkey"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.UPDATE_CAP": [[87, 4, 1, "", "crowdloan_id"], [87, 4, 1, "", "new_cap"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.UPDATE_END": [[87, 4, 1, "", "crowdloan_id"], [87, 4, 1, "", "new_end"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.UPDATE_MIN_CONTRIBUTION": [[87, 4, 1, "", "crowdloan_id"], [87, 4, 1, "", "new_min_contribution"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.UPDATE_SYMBOL": [[87, 4, 1, "", "netuid"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "symbol"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.UPGRADE_ACCOUNTS": [[87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"], [87, 4, 1, "", "who"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.WITHDRAW": [[87, 4, 1, "", "address"], [87, 4, 1, "", "crowdloan_id"], [87, 4, 1, "id10", "pallet"], [87, 4, 1, "", "value"], [87, 4, 1, "id11", "wallet"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.WITH_WEIGHT": [[87, 4, 1, "", "call"], [87, 4, 1, "", "pallet"], [87, 4, 1, "", "wallet"], [87, 4, 1, "", "weight"]], "bittensor.extras.dev_framework.calls.non_sudo_calls.WRITE_PULSE": [[87, 4, 1, "", "pallet"], [87, 4, 1, "", "pulses_payload"], [87, 4, 1, "", "signature"], [87, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.pallets": [[88, 6, 1, "", "AdminUtils"], [88, 6, 1, "", "Balances"], [88, 6, 1, "", "BaseFee"], [88, 6, 1, "", "Commitments"], [88, 6, 1, "", "Crowdloan"], [88, 6, 1, "", "Drand"], [88, 6, 1, "", "EVM"], [88, 6, 1, "", "Ethereum"], [88, 6, 1, "", "Grandpa"], [88, 6, 1, "", "Multisig"], [88, 6, 1, "", "Preimage"], [88, 6, 1, "", "Proxy"], [88, 6, 1, "", "Registry"], [88, 6, 1, "", "SafeMode"], [88, 6, 1, "", "Scheduler"], [88, 6, 1, "", "SubtensorModule"], [88, 6, 1, "", "Sudo"], [88, 6, 1, "", "Swap"], [88, 6, 1, "", "System"], [88, 6, 1, "", "Timestamp"], [88, 6, 1, "", "Utility"]], "bittensor.extras.dev_framework.calls.sudo_calls": [[89, 1, 1, "", "SUDO_AS"], [89, 1, 1, "", "SUDO_SET_ACTIVITY_CUTOFF"], [89, 1, 1, "", "SUDO_SET_ADJUSTMENT_ALPHA"], [89, 1, 1, "", "SUDO_SET_ADJUSTMENT_INTERVAL"], [89, 1, 1, "", "SUDO_SET_ADMIN_FREEZE_WINDOW"], [89, 1, 1, "", "SUDO_SET_ALPHA_SIGMOID_STEEPNESS"], [89, 1, 1, "", "SUDO_SET_ALPHA_VALUES"], [89, 1, 1, "", "SUDO_SET_BONDS_MOVING_AVERAGE"], [89, 1, 1, "", "SUDO_SET_BONDS_PENALTY"], [89, 1, 1, "", "SUDO_SET_BONDS_RESET_ENABLED"], [89, 1, 1, "", "SUDO_SET_CK_BURN"], [89, 1, 1, "", "SUDO_SET_COLDKEY_SWAP_SCHEDULE_DURATION"], [89, 1, 1, "", "SUDO_SET_COMMIT_REVEAL_VERSION"], [89, 1, 1, "", "SUDO_SET_COMMIT_REVEAL_WEIGHTS_ENABLED"], [89, 1, 1, "", "SUDO_SET_COMMIT_REVEAL_WEIGHTS_INTERVAL"], [89, 1, 1, "", "SUDO_SET_DEFAULT_TAKE"], [89, 1, 1, "", "SUDO_SET_DIFFICULTY"], [89, 1, 1, "", "SUDO_SET_DISSOLVE_NETWORK_SCHEDULE_DURATION"], [89, 1, 1, "", "SUDO_SET_EMA_PRICE_HALVING_PERIOD"], [89, 1, 1, "", "SUDO_SET_EVM_CHAIN_ID"], [89, 1, 1, "", "SUDO_SET_IMMUNITY_PERIOD"], [89, 1, 1, "", "SUDO_SET_KAPPA"], [89, 1, 1, "", "SUDO_SET_LIQUID_ALPHA_ENABLED"], [89, 1, 1, "", "SUDO_SET_LOCK_REDUCTION_INTERVAL"], [89, 1, 1, "", "SUDO_SET_MAX_ALLOWED_UIDS"], [89, 1, 1, "", "SUDO_SET_MAX_ALLOWED_VALIDATORS"], [89, 1, 1, "", "SUDO_SET_MAX_BURN"], [89, 1, 1, "", "SUDO_SET_MAX_CHILDKEY_TAKE"], [89, 1, 1, "", "SUDO_SET_MAX_DIFFICULTY"], [89, 1, 1, "", "SUDO_SET_MAX_REGISTRATIONS_PER_BLOCK"], [89, 1, 1, "", "SUDO_SET_MECHANISM_COUNT"], [89, 1, 1, "", "SUDO_SET_MECHANISM_EMISSION_SPLIT"], [89, 1, 1, "", "SUDO_SET_MIN_ALLOWED_UIDS"], [89, 1, 1, "", "SUDO_SET_MIN_ALLOWED_WEIGHTS"], [89, 1, 1, "", "SUDO_SET_MIN_BURN"], [89, 1, 1, "", "SUDO_SET_MIN_CHILDKEY_TAKE"], [89, 1, 1, "", "SUDO_SET_MIN_DELEGATE_TAKE"], [89, 1, 1, "", "SUDO_SET_MIN_DIFFICULTY"], [89, 1, 1, "", "SUDO_SET_NETWORK_IMMUNITY_PERIOD"], [89, 1, 1, "", "SUDO_SET_NETWORK_MIN_LOCK_COST"], [89, 1, 1, "", "SUDO_SET_NETWORK_POW_REGISTRATION_ALLOWED"], [89, 1, 1, "", "SUDO_SET_NETWORK_RATE_LIMIT"], [89, 1, 1, "", "SUDO_SET_NETWORK_REGISTRATION_ALLOWED"], [89, 1, 1, "", "SUDO_SET_NOMINATOR_MIN_REQUIRED_STAKE"], [89, 1, 1, "", "SUDO_SET_NUM_ROOT_CLAIMS"], [89, 1, 1, "", "SUDO_SET_OWNER_HPARAM_RATE_LIMIT"], [89, 1, 1, "", "SUDO_SET_OWNER_IMMUNE_NEURON_LIMIT"], [89, 1, 1, "", "SUDO_SET_RAO_RECYCLED"], [89, 1, 1, "", "SUDO_SET_RECYCLE_OR_BURN"], [89, 1, 1, "", "SUDO_SET_RHO"], [89, 1, 1, "", "SUDO_SET_ROOT_CLAIM_THRESHOLD"], [89, 1, 1, "", "SUDO_SET_SERVING_RATE_LIMIT"], [89, 1, 1, "", "SUDO_SET_SN_OWNER_HOTKEY"], [89, 1, 1, "", "SUDO_SET_STAKE_THRESHOLD"], [89, 1, 1, "", "SUDO_SET_SUBNET_LIMIT"], [89, 1, 1, "", "SUDO_SET_SUBNET_MOVING_ALPHA"], [89, 1, 1, "", "SUDO_SET_SUBNET_OWNER_CUT"], [89, 1, 1, "", "SUDO_SET_SUBNET_OWNER_HOTKEY"], [89, 1, 1, "", "SUDO_SET_SUBTOKEN_ENABLED"], [89, 1, 1, "", "SUDO_SET_TARGET_REGISTRATIONS_PER_INTERVAL"], [89, 1, 1, "", "SUDO_SET_TEMPO"], [89, 1, 1, "", "SUDO_SET_TOGGLE_TRANSFER"], [89, 1, 1, "", "SUDO_SET_TOTAL_ISSUANCE"], [89, 1, 1, "", "SUDO_SET_TX_CHILDKEY_TAKE_RATE_LIMIT"], [89, 1, 1, "", "SUDO_SET_TX_DELEGATE_TAKE_RATE_LIMIT"], [89, 1, 1, "", "SUDO_SET_TX_RATE_LIMIT"], [89, 1, 1, "", "SUDO_SET_WEIGHTS_SET_RATE_LIMIT"], [89, 1, 1, "", "SUDO_SET_WEIGHTS_VERSION_KEY"], [89, 1, 1, "", "SUDO_SET_YUMA3_ENABLED"], [89, 1, 1, "", "SUDO_TOGGLE_EVM_PRECOMPILE"], [89, 1, 1, "", "SUDO_TRIM_TO_MAX_ALLOWED_UIDS"], [89, 1, 1, "", "SUDO_UNCHECKED_WEIGHT"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_AS": [[89, 4, 1, "", "call"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"], [89, 4, 1, "", "who"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ACTIVITY_CUTOFF": [[89, 4, 1, "", "activity_cutoff"], [89, 4, 1, "", "netuid"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ADJUSTMENT_ALPHA": [[89, 4, 1, "", "adjustment_alpha"], [89, 4, 1, "", "netuid"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ADJUSTMENT_INTERVAL": [[89, 4, 1, "", "adjustment_interval"], [89, 4, 1, "", "netuid"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ADMIN_FREEZE_WINDOW": [[89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"], [89, 4, 1, "", "window"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ALPHA_SIGMOID_STEEPNESS": [[89, 4, 1, "", "netuid"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "steepness"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ALPHA_VALUES": [[89, 4, 1, "", "alpha_high"], [89, 4, 1, "", "alpha_low"], [89, 4, 1, "", "netuid"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_BONDS_MOVING_AVERAGE": [[89, 4, 1, "", "bonds_moving_average"], [89, 4, 1, "", "netuid"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_BONDS_PENALTY": [[89, 4, 1, "", "bonds_penalty"], [89, 4, 1, "", "netuid"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_BONDS_RESET_ENABLED": [[89, 4, 1, "", "enabled"], [89, 4, 1, "", "netuid"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_CK_BURN": [[89, 4, 1, "", "burn"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_COLDKEY_SWAP_SCHEDULE_DURATION": [[89, 4, 1, "", "duration"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_COMMIT_REVEAL_VERSION": [[89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "version"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_COMMIT_REVEAL_WEIGHTS_ENABLED": [[89, 4, 1, "", "enabled"], [89, 4, 1, "", "netuid"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_COMMIT_REVEAL_WEIGHTS_INTERVAL": [[89, 4, 1, "", "interval"], [89, 4, 1, "", "netuid"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_DEFAULT_TAKE": [[89, 4, 1, "", "default_take"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_DIFFICULTY": [[89, 4, 1, "", "difficulty"], [89, 4, 1, "", "netuid"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_DISSOLVE_NETWORK_SCHEDULE_DURATION": [[89, 4, 1, "", "duration"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_EMA_PRICE_HALVING_PERIOD": [[89, 4, 1, "", "ema_halving"], [89, 4, 1, "", "netuid"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_EVM_CHAIN_ID": [[89, 4, 1, "", "chain_id"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_IMMUNITY_PERIOD": [[89, 4, 1, "", "immunity_period"], [89, 4, 1, "", "netuid"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_KAPPA": [[89, 4, 1, "", "kappa"], [89, 4, 1, "", "netuid"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_LIQUID_ALPHA_ENABLED": [[89, 4, 1, "", "enabled"], [89, 4, 1, "", "netuid"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_LOCK_REDUCTION_INTERVAL": [[89, 4, 1, "", "interval"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MAX_ALLOWED_UIDS": [[89, 4, 1, "", "max_allowed_uids"], [89, 4, 1, "", "netuid"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MAX_ALLOWED_VALIDATORS": [[89, 4, 1, "", "max_allowed_validators"], [89, 4, 1, "", "netuid"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MAX_BURN": [[89, 4, 1, "", "max_burn"], [89, 4, 1, "", "netuid"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MAX_CHILDKEY_TAKE": [[89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "take"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MAX_DIFFICULTY": [[89, 4, 1, "", "max_difficulty"], [89, 4, 1, "", "netuid"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MAX_REGISTRATIONS_PER_BLOCK": [[89, 4, 1, "", "max_registrations_per_block"], [89, 4, 1, "", "netuid"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MECHANISM_COUNT": [[89, 4, 1, "", "mechanism_count"], [89, 4, 1, "", "netuid"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MECHANISM_EMISSION_SPLIT": [[89, 4, 1, "", "maybe_split"], [89, 4, 1, "", "netuid"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MIN_ALLOWED_UIDS": [[89, 4, 1, "", "min_allowed_uids"], [89, 4, 1, "", "netuid"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MIN_ALLOWED_WEIGHTS": [[89, 4, 1, "", "min_allowed_weights"], [89, 4, 1, "", "netuid"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MIN_BURN": [[89, 4, 1, "", "min_burn"], [89, 4, 1, "", "netuid"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MIN_CHILDKEY_TAKE": [[89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "take"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MIN_DELEGATE_TAKE": [[89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "take"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_MIN_DIFFICULTY": [[89, 4, 1, "", "min_difficulty"], [89, 4, 1, "", "netuid"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_NETWORK_IMMUNITY_PERIOD": [[89, 4, 1, "", "immunity_period"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_NETWORK_MIN_LOCK_COST": [[89, 4, 1, "", "lock_cost"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_NETWORK_POW_REGISTRATION_ALLOWED": [[89, 4, 1, "", "netuid"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "registration_allowed"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_NETWORK_RATE_LIMIT": [[89, 4, 1, "", "pallet"], [89, 4, 1, "", "rate_limit"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_NETWORK_REGISTRATION_ALLOWED": [[89, 4, 1, "", "netuid"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "registration_allowed"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_NOMINATOR_MIN_REQUIRED_STAKE": [[89, 4, 1, "", "min_stake"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_NUM_ROOT_CLAIMS": [[89, 4, 1, "", "new_value"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_OWNER_HPARAM_RATE_LIMIT": [[89, 4, 1, "", "epochs"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_OWNER_IMMUNE_NEURON_LIMIT": [[89, 4, 1, "", "immune_neurons"], [89, 4, 1, "", "netuid"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_RAO_RECYCLED": [[89, 4, 1, "", "netuid"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "rao_recycled"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_RECYCLE_OR_BURN": [[89, 4, 1, "", "netuid"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "recycle_or_burn"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_RHO": [[89, 4, 1, "", "netuid"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "rho"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_ROOT_CLAIM_THRESHOLD": [[89, 4, 1, "", "netuid"], [89, 4, 1, "", "new_value"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SERVING_RATE_LIMIT": [[89, 4, 1, "", "netuid"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "serving_rate_limit"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SN_OWNER_HOTKEY": [[89, 4, 1, "", "hotkey"], [89, 4, 1, "", "netuid"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_STAKE_THRESHOLD": [[89, 4, 1, "", "min_stake"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SUBNET_LIMIT": [[89, 4, 1, "", "max_subnets"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SUBNET_MOVING_ALPHA": [[89, 4, 1, "", "alpha"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SUBNET_OWNER_CUT": [[89, 4, 1, "", "pallet"], [89, 4, 1, "", "subnet_owner_cut"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SUBNET_OWNER_HOTKEY": [[89, 4, 1, "", "hotkey"], [89, 4, 1, "", "netuid"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_SUBTOKEN_ENABLED": [[89, 4, 1, "", "netuid"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "subtoken_enabled"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_TARGET_REGISTRATIONS_PER_INTERVAL": [[89, 4, 1, "", "netuid"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "target_registrations_per_interval"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_TEMPO": [[89, 4, 1, "", "netuid"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "tempo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_TOGGLE_TRANSFER": [[89, 4, 1, "", "netuid"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "toggle"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_TOTAL_ISSUANCE": [[89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "total_issuance"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_TX_CHILDKEY_TAKE_RATE_LIMIT": [[89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "tx_rate_limit"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_TX_DELEGATE_TAKE_RATE_LIMIT": [[89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "tx_rate_limit"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_TX_RATE_LIMIT": [[89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "tx_rate_limit"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_WEIGHTS_SET_RATE_LIMIT": [[89, 4, 1, "", "netuid"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"], [89, 4, 1, "", "weights_set_rate_limit"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_WEIGHTS_VERSION_KEY": [[89, 4, 1, "", "netuid"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"], [89, 4, 1, "", "weights_version_key"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_SET_YUMA3_ENABLED": [[89, 4, 1, "", "enabled"], [89, 4, 1, "", "netuid"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_TOGGLE_EVM_PRECOMPILE": [[89, 4, 1, "", "enabled"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "precompile_id"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_TRIM_TO_MAX_ALLOWED_UIDS": [[89, 4, 1, "", "max_n"], [89, 4, 1, "", "netuid"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.calls.sudo_calls.SUDO_UNCHECKED_WEIGHT": [[89, 4, 1, "", "call"], [89, 4, 1, "", "pallet"], [89, 4, 1, "", "sudo"], [89, 4, 1, "", "wallet"], [89, 4, 1, "", "weight"]], "bittensor.extras.dev_framework.subnet": [[91, 1, 1, "", "CALL_RECORD"], [91, 6, 1, "", "NETUID"], [91, 1, 1, "", "TestSubnet"]], "bittensor.extras.dev_framework.subnet.CALL_RECORD": [[91, 4, 1, "", "idx"], [91, 4, 1, "", "operation"], [91, 4, 1, "", "response"]], "bittensor.extras.dev_framework.subnet.TestSubnet": [[91, 2, 1, "", "async_execute_one"], [91, 2, 1, "", "async_execute_steps"], [91, 2, 1, "", "async_set_hyperparameter"], [91, 2, 1, "", "async_wait_next_epoch"], [91, 3, 1, "", "calls"], [91, 2, 1, "", "execute_one"], [91, 2, 1, "", "execute_steps"], [91, 3, 1, "", "netuid"], [91, 3, 1, "", "owner"], [91, 4, 1, "", "period"], [91, 4, 1, "", "raise_error"], [91, 4, 1, "", "s"], [91, 2, 1, "", "set_hyperparameter"], [91, 4, 1, "", "wait_for_finalization"], [91, 4, 1, "", "wait_for_inclusion"], [91, 2, 1, "", "wait_next_epoch"]], "bittensor.extras.dev_framework.utils": [[92, 6, 1, "", "ACTIVATE_SUBNET"], [92, 1, 1, "", "ActivateSubnet"], [92, 6, 1, "", "REGISTER_NEURON"], [92, 6, 1, "", "REGISTER_SUBNET"], [92, 1, 1, "", "RegisterNeuron"], [92, 1, 1, "", "RegisterSubnet"], [92, 6, 1, "", "STEPS"], [92, 5, 1, "", "is_instance_namedtuple"], [92, 5, 1, "", "split_command"]], "bittensor.extras.dev_framework.utils.ActivateSubnet": [[92, 4, 1, "", "netuid"], [92, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.utils.RegisterNeuron": [[92, 4, 1, "", "netuid"], [92, 4, 1, "", "wallet"]], "bittensor.extras.dev_framework.utils.RegisterSubnet": [[92, 4, 1, "", "wallet"]], "bittensor.extras.subtensor_api": [[99, 1, 1, "", "SubtensorApi"], [94, 0, 0, "-", "chain"], [95, 0, 0, "-", "commitments"], [96, 0, 0, "-", "crowdloans"], [97, 0, 0, "-", "delegates"], [98, 0, 0, "-", "extrinsics"], [100, 0, 0, "-", "metagraphs"], [101, 0, 0, "-", "mev_shield"], [102, 0, 0, "-", "neurons"], [103, 0, 0, "-", "proxy"], [104, 0, 0, "-", "queries"], [105, 0, 0, "-", "staking"], [106, 0, 0, "-", "subnets"], [107, 0, 0, "-", "utils"], [108, 0, 0, "-", "wallets"]], "bittensor.extras.subtensor_api.SubtensorApi": [[99, 2, 1, "", "add_args"], [99, 3, 1, "", "block"], [99, 3, 1, "", "chain"], [99, 4, 1, "", "chain_endpoint"], [99, 4, 1, "", "close"], [99, 3, 1, "", "commitments"], [99, 4, 1, "", "compose_call"], [99, 4, 1, "", "config"], [99, 3, 1, "", "crowdloans"], [99, 3, 1, "", "delegates"], [99, 4, 1, "", "determine_block_hash"], [99, 3, 1, "", "extrinsics"], [99, 4, 1, "", "help"], [99, 4, 1, "", "initialize"], [99, 4, 1, "", "inner_subtensor"], [99, 4, 1, "", "is_async"], [99, 4, 1, "", "log_verbose"], [99, 3, 1, "", "metagraphs"], [99, 3, 1, "", "mev_shield"], [99, 4, 1, "", "network"], [99, 3, 1, "", "neurons"], [99, 3, 1, "", "proxies"], [99, 3, 1, "", "queries"], [99, 4, 1, "", "setup_config"], [99, 4, 1, "", "sign_and_send_extrinsic"], [99, 3, 1, "", "staking"], [99, 4, 1, "", "start_call"], [99, 3, 1, "", "subnets"], [99, 4, 1, "", "substrate"], [99, 4, 1, "", "wait_for_block"], [99, 3, 1, "", "wallets"]], "bittensor.extras.subtensor_api.chain": [[94, 1, 1, "", "Chain"]], "bittensor.extras.subtensor_api.chain.Chain": [[94, 4, 1, "", "get_admin_freeze_window"], [94, 4, 1, "", "get_block_hash"], [94, 4, 1, "", "get_block_info"], [94, 4, 1, "", "get_current_block"], [94, 4, 1, "", "get_delegate_identities"], [94, 4, 1, "", "get_existential_deposit"], [94, 4, 1, "", "get_minimum_required_stake"], [94, 4, 1, "", "get_timestamp"], [94, 4, 1, "", "get_vote_data"], [94, 4, 1, "", "is_fast_blocks"], [94, 4, 1, "", "is_in_admin_freeze_window"], [94, 4, 1, "", "last_drand_round"], [94, 4, 1, "", "state_call"], [94, 4, 1, "", "tx_rate_limit"]], "bittensor.extras.subtensor_api.commitments": [[95, 1, 1, "", "Commitments"]], "bittensor.extras.subtensor_api.commitments.Commitments": [[95, 4, 1, "", "commit_reveal_enabled"], [95, 4, 1, "", "get_all_commitments"], [95, 4, 1, "", "get_all_revealed_commitments"], [95, 4, 1, "", "get_commitment"], [95, 4, 1, "", "get_commitment_metadata"], [95, 4, 1, "", "get_last_bonds_reset"], [95, 4, 1, "", "get_last_commitment_bonds_reset_block"], [95, 4, 1, "", "get_revealed_commitment"], [95, 4, 1, "", "get_revealed_commitment_by_hotkey"], [95, 4, 1, "", "get_timelocked_weight_commits"], [95, 4, 1, "", "set_commitment"], [95, 4, 1, "", "set_reveal_commitment"]], "bittensor.extras.subtensor_api.crowdloans": [[96, 1, 1, "", "Crowdloans"]], "bittensor.extras.subtensor_api.crowdloans.Crowdloans": [[96, 4, 1, "", "contribute_crowdloan"], [96, 4, 1, "", "create_crowdloan"], [96, 4, 1, "", "dissolve_crowdloan"], [96, 4, 1, "", "finalize_crowdloan"], [96, 4, 1, "", "get_crowdloan_by_id"], [96, 4, 1, "", "get_crowdloan_constants"], [96, 4, 1, "", "get_crowdloan_contributions"], [96, 4, 1, "", "get_crowdloan_next_id"], [96, 4, 1, "", "get_crowdloans"], [96, 4, 1, "", "refund_crowdloan"], [96, 4, 1, "", "update_cap_crowdloan"], [96, 4, 1, "", "update_end_crowdloan"], [96, 4, 1, "", "update_min_contribution_crowdloan"], [96, 4, 1, "", "withdraw_crowdloan"]], "bittensor.extras.subtensor_api.delegates": [[97, 1, 1, "", "Delegates"]], "bittensor.extras.subtensor_api.delegates.Delegates": [[97, 4, 1, "", "get_delegate_by_hotkey"], [97, 4, 1, "", "get_delegate_identities"], [97, 4, 1, "", "get_delegate_take"], [97, 4, 1, "", "get_delegated"], [97, 4, 1, "", "get_delegates"], [97, 4, 1, "", "is_hotkey_delegate"], [97, 4, 1, "", "set_delegate_take"]], "bittensor.extras.subtensor_api.extrinsics": [[98, 1, 1, "", "Extrinsics"]], "bittensor.extras.subtensor_api.extrinsics.Extrinsics": [[98, 4, 1, "", "add_liquidity"], [98, 4, 1, "", "add_stake"], [98, 4, 1, "", "add_stake_multiple"], [98, 4, 1, "", "burned_register"], [98, 4, 1, "", "claim_root"], [98, 4, 1, "", "commit_weights"], [98, 4, 1, "", "contribute_crowdloan"], [98, 4, 1, "", "create_crowdloan"], [98, 4, 1, "", "dissolve_crowdloan"], [98, 4, 1, "", "finalize_crowdloan"], [98, 4, 1, "", "get_extrinsic_fee"], [98, 4, 1, "", "modify_liquidity"], [98, 4, 1, "", "move_stake"], [98, 4, 1, "", "refund_crowdloan"], [98, 4, 1, "", "register"], [98, 4, 1, "", "register_subnet"], [98, 4, 1, "", "remove_liquidity"], [98, 4, 1, "", "reveal_weights"], [98, 4, 1, "", "root_register"], [98, 4, 1, "", "root_set_pending_childkey_cooldown"], [98, 4, 1, "", "serve_axon"], [98, 4, 1, "", "set_children"], [98, 4, 1, "", "set_commitment"], [98, 4, 1, "", "set_root_claim_type"], [98, 4, 1, "", "set_subnet_identity"], [98, 4, 1, "", "set_weights"], [98, 4, 1, "", "start_call"], [98, 4, 1, "", "swap_stake"], [98, 4, 1, "", "toggle_user_liquidity"], [98, 4, 1, "", "transfer"], [98, 4, 1, "", "transfer_stake"], [98, 4, 1, "", "unstake"], [98, 4, 1, "", "unstake_all"], [98, 4, 1, "", "unstake_multiple"], [98, 4, 1, "", "update_cap_crowdloan"], [98, 4, 1, "", "update_end_crowdloan"], [98, 4, 1, "", "update_min_contribution_crowdloan"], [98, 4, 1, "", "validate_extrinsic_params"], [98, 4, 1, "", "withdraw_crowdloan"]], "bittensor.extras.subtensor_api.metagraphs": [[100, 1, 1, "", "Metagraphs"]], "bittensor.extras.subtensor_api.metagraphs.Metagraphs": [[100, 4, 1, "", "get_all_metagraphs_info"], [100, 4, 1, "", "get_metagraph_info"], [100, 4, 1, "", "metagraph"]], "bittensor.extras.subtensor_api.mev_shield": [[101, 1, 1, "", "MevShield"]], "bittensor.extras.subtensor_api.mev_shield.MevShield": [[101, 4, 1, "", "get_mev_shield_current_key"], [101, 4, 1, "", "get_mev_shield_next_key"], [101, 4, 1, "", "get_mev_shield_submission"], [101, 4, 1, "", "get_mev_shield_submissions"], [101, 4, 1, "", "mev_submit_encrypted"]], "bittensor.extras.subtensor_api.neurons": [[102, 1, 1, "", "Neurons"]], "bittensor.extras.subtensor_api.neurons.Neurons": [[102, 4, 1, "", "get_all_neuron_certificates"], [102, 4, 1, "", "get_neuron_certificate"], [102, 4, 1, "", "neuron_for_uid"], [102, 4, 1, "", "neurons"], [102, 4, 1, "", "neurons_lite"], [102, 4, 1, "", "query_identity"]], "bittensor.extras.subtensor_api.proxy": [[103, 1, 1, "", "Proxy"]], "bittensor.extras.subtensor_api.proxy.Proxy": [[103, 4, 1, "", "add_proxy"], [103, 4, 1, "", "announce_proxy"], [103, 4, 1, "", "create_pure_proxy"], [103, 4, 1, "", "get_proxies"], [103, 4, 1, "", "get_proxies_for_real_account"], [103, 4, 1, "", "get_proxy_announcement"], [103, 4, 1, "", "get_proxy_announcements"], [103, 4, 1, "", "get_proxy_constants"], [103, 4, 1, "", "kill_pure_proxy"], [103, 4, 1, "", "poke_deposit"], [103, 4, 1, "", "proxy"], [103, 4, 1, "", "proxy_announced"], [103, 4, 1, "", "reject_proxy_announcement"], [103, 4, 1, "", "remove_proxies"], [103, 4, 1, "", "remove_proxy"], [103, 4, 1, "", "remove_proxy_announcement"]], "bittensor.extras.subtensor_api.queries": [[104, 1, 1, "", "Queries"]], "bittensor.extras.subtensor_api.queries.Queries": [[104, 4, 1, "", "query_constant"], [104, 4, 1, "", "query_map"], [104, 4, 1, "", "query_map_subtensor"], [104, 4, 1, "", "query_module"], [104, 4, 1, "", "query_runtime_api"], [104, 4, 1, "", "query_subtensor"]], "bittensor.extras.subtensor_api.staking": [[105, 1, 1, "", "Staking"]], "bittensor.extras.subtensor_api.staking.Staking": [[105, 4, 1, "", "add_stake"], [105, 4, 1, "", "add_stake_multiple"], [105, 4, 1, "", "claim_root"], [105, 4, 1, "", "get_auto_stakes"], [105, 4, 1, "", "get_hotkey_stake"], [105, 4, 1, "", "get_minimum_required_stake"], [105, 4, 1, "", "get_root_alpha_dividends_per_subnet"], [105, 4, 1, "", "get_root_claim_type"], [105, 4, 1, "", "get_root_claimable_all_rates"], [105, 4, 1, "", "get_root_claimable_rate"], [105, 4, 1, "", "get_root_claimable_stake"], [105, 4, 1, "", "get_root_claimed"], [105, 4, 1, "", "get_stake"], [105, 4, 1, "", "get_stake_add_fee"], [105, 4, 1, "", "get_stake_for_coldkey_and_hotkey"], [105, 4, 1, "", "get_stake_info_for_coldkey"], [105, 4, 1, "", "get_stake_info_for_coldkeys"], [105, 4, 1, "", "get_stake_movement_fee"], [105, 4, 1, "", "get_stake_weight"], [105, 4, 1, "", "get_unstake_fee"], [105, 4, 1, "", "move_stake"], [105, 4, 1, "", "set_auto_stake"], [105, 4, 1, "", "set_root_claim_type"], [105, 4, 1, "", "sim_swap"], [105, 4, 1, "", "swap_stake"], [105, 4, 1, "", "transfer_stake"], [105, 4, 1, "", "unstake"], [105, 4, 1, "", "unstake_all"], [105, 4, 1, "", "unstake_multiple"]], "bittensor.extras.subtensor_api.subnets": [[106, 1, 1, "", "Subnets"]], "bittensor.extras.subtensor_api.subnets.Subnets": [[106, 4, 1, "", "all_subnets"], [106, 4, 1, "", "blocks_since_last_step"], [106, 4, 1, "", "blocks_since_last_update"], [106, 4, 1, "", "blocks_until_next_epoch"], [106, 4, 1, "", "bonds"], [106, 4, 1, "", "burned_register"], [106, 4, 1, "", "commit_reveal_enabled"], [106, 4, 1, "", "difficulty"], [106, 4, 1, "", "get_all_ema_tao_inflow"], [106, 4, 1, "", "get_all_subnets_info"], [106, 4, 1, "", "get_all_subnets_netuid"], [106, 4, 1, "", "get_children"], [106, 4, 1, "", "get_children_pending"], [106, 4, 1, "", "get_ema_tao_inflow"], [106, 4, 1, "", "get_hyperparameter"], [106, 4, 1, "", "get_liquidity_list"], [106, 4, 1, "", "get_mechanism_count"], [106, 4, 1, "", "get_mechanism_emission_split"], [106, 4, 1, "", "get_neuron_for_pubkey_and_subnet"], [106, 4, 1, "", "get_next_epoch_start_block"], [106, 4, 1, "", "get_parents"], [106, 4, 1, "", "get_subnet_burn_cost"], [106, 4, 1, "", "get_subnet_hyperparameters"], [106, 4, 1, "", "get_subnet_info"], [106, 4, 1, "", "get_subnet_owner_hotkey"], [106, 4, 1, "", "get_subnet_price"], [106, 4, 1, "", "get_subnet_prices"], [106, 4, 1, "", "get_subnet_reveal_period_epochs"], [106, 4, 1, "", "get_subnet_validator_permits"], [106, 4, 1, "", "get_total_subnets"], [106, 4, 1, "", "get_uid_for_hotkey_on_subnet"], [106, 4, 1, "", "immunity_period"], [106, 4, 1, "", "is_hotkey_registered_on_subnet"], [106, 4, 1, "", "is_subnet_active"], [106, 4, 1, "", "max_weight_limit"], [106, 4, 1, "", "min_allowed_weights"], [106, 4, 1, "", "recycle"], [106, 4, 1, "", "register"], [106, 4, 1, "", "register_subnet"], [106, 4, 1, "", "set_subnet_identity"], [106, 4, 1, "", "start_call"], [106, 4, 1, "", "subnet"], [106, 4, 1, "", "subnet_exists"], [106, 4, 1, "", "subnetwork_n"], [106, 4, 1, "", "tempo"], [106, 4, 1, "", "weights"], [106, 4, 1, "", "weights_rate_limit"]], "bittensor.extras.subtensor_api.utils": [[107, 5, 1, "", "add_legacy_methods"]], "bittensor.extras.subtensor_api.wallets": [[108, 1, 1, "", "Wallets"]], "bittensor.extras.subtensor_api.wallets.Wallets": [[108, 4, 1, "", "does_hotkey_exist"], [108, 4, 1, "", "filter_netuids_by_registered_hotkeys"], [108, 4, 1, "", "get_balance"], [108, 4, 1, "", "get_balances"], [108, 4, 1, "", "get_children"], [108, 4, 1, "", "get_children_pending"], [108, 4, 1, "", "get_delegate_by_hotkey"], [108, 4, 1, "", "get_delegate_take"], [108, 4, 1, "", "get_delegated"], [108, 4, 1, "", "get_hotkey_owner"], [108, 4, 1, "", "get_hotkey_stake"], [108, 4, 1, "", "get_minimum_required_stake"], [108, 4, 1, "", "get_netuids_for_hotkey"], [108, 4, 1, "", "get_owned_hotkeys"], [108, 4, 1, "", "get_parents"], [108, 4, 1, "", "get_stake"], [108, 4, 1, "", "get_stake_add_fee"], [108, 4, 1, "", "get_stake_for_coldkey_and_hotkey"], [108, 4, 1, "", "get_stake_for_hotkey"], [108, 4, 1, "", "get_stake_info_for_coldkey"], [108, 4, 1, "", "get_stake_movement_fee"], [108, 4, 1, "", "get_transfer_fee"], [108, 4, 1, "", "get_unstake_fee"], [108, 4, 1, "", "is_hotkey_delegate"], [108, 4, 1, "", "is_hotkey_registered"], [108, 4, 1, "", "is_hotkey_registered_any"], [108, 4, 1, "", "is_hotkey_registered_on_subnet"], [108, 4, 1, "", "set_children"], [108, 4, 1, "", "transfer"]], "bittensor.extras.timelock": [[109, 5, 1, "", "decrypt"], [109, 5, 1, "", "encrypt"], [109, 5, 1, "", "wait_reveal_and_decrypt"]], "bittensor.utils": [[122, 6, 1, "", "BT_DOCS_LINK"], [122, 1, 1, "", "Certificate"], [122, 6, 1, "", "GLOBAL_MAX_SUBNET_COUNT"], [122, 6, 1, "", "RAOPERTAO"], [122, 6, 1, "", "U16_MAX"], [122, 6, 1, "", "U64_MAX"], [122, 1, 1, "", "UnlockStatus"], [122, 6, 1, "", "VersionCheckError"], [111, 0, 0, "-", "axon_utils"], [112, 0, 0, "-", "balance"], [117, 0, 0, "-", "btlogging"], [122, 6, 1, "", "check_version"], [122, 5, 1, "", "decode_hex_identity_dict"], [122, 5, 1, "", "deprecated_message"], [122, 5, 1, "", "determine_chain_endpoint_and_network"], [120, 0, 0, "-", "easy_imports"], [122, 5, 1, "", "float_to_u64"], [122, 5, 1, "", "format_error_message"], [121, 0, 0, "-", "formatting"], [122, 5, 1, "", "get_caller_name"], [122, 5, 1, "", "get_explorer_url_for_network"], [122, 5, 1, "", "get_function_name"], [122, 5, 1, "", "get_hash"], [122, 5, 1, "", "get_mechid_storage_index"], [122, 5, 1, "", "get_netuid_and_mechid_by_storage_index"], [122, 6, 1, "", "hex_to_bytes"], [122, 6, 1, "", "hex_to_ss58"], [122, 5, 1, "", "is_valid_bittensor_address_or_public_key"], [122, 5, 1, "", "is_valid_ss58_address"], [123, 0, 0, "-", "liquidity"], [122, 6, 1, "", "logging"], [124, 0, 0, "-", "networking"], [126, 0, 0, "-", "registration"], [122, 5, 1, "", "ss58_address_to_bytes"], [122, 6, 1, "", "ss58_decode"], [122, 6, 1, "", "ss58_to_hex"], [122, 5, 1, "", "ss58_to_vec_u8"], [122, 5, 1, "", "strtobool"], [129, 0, 0, "-", "subnets"], [122, 6, 1, "", "torch"], [122, 5, 1, "", "u16_normalized_float"], [122, 5, 1, "", "u64_normalized_float"], [122, 5, 1, "", "unlock_key"], [122, 6, 1, "", "use_torch"], [122, 5, 1, "", "validate_chain_endpoint"], [122, 5, 1, "", "validate_max_attempts"], [130, 0, 0, "-", "version"], [131, 0, 0, "-", "weight_utils"]], "bittensor.utils.UnlockStatus": [[122, 4, 1, "", "message"], [122, 4, 1, "", "success"]], "bittensor.utils.axon_utils": [[111, 6, 1, "", "ALLOWED_DELTA"], [111, 6, 1, "", "NANOSECONDS_IN_SECOND"], [111, 5, 1, "", "allowed_nonce_window_ns"], [111, 5, 1, "", "calculate_diff_seconds"]], "bittensor.utils.balance": [[112, 1, 1, "", "Balance"], [112, 1, 1, "", "FixedPoint"], [112, 5, 1, "", "check_balance_amount"], [112, 5, 1, "", "fixed_to_float"], [112, 5, 1, "", "rao"], [112, 5, 1, "", "tao"]], "bittensor.utils.balance.Balance": [[112, 2, 1, "", "from_float"], [112, 2, 1, "", "from_rao"], [112, 2, 1, "", "from_tao"], [112, 2, 1, "", "get_unit"], [112, 4, 1, "", "netuid"], [112, 4, 1, "", "rao"], [112, 4, 1, "", "rao_unit"], [112, 2, 1, "", "set_unit"], [112, 3, 1, "", "tao"], [112, 4, 1, "", "unit"]], "bittensor.utils.balance.FixedPoint": [[112, 4, 1, "", "bits"]], "bittensor.utils.btlogging": [[113, 0, 0, "-", "console"], [114, 0, 0, "-", "defines"], [115, 0, 0, "-", "format"], [116, 0, 0, "-", "helpers"], [118, 0, 0, "-", "levels"], [117, 6, 1, "", "logging"], [119, 0, 0, "-", "loggingmachine"]], "bittensor.utils.btlogging.console": [[113, 1, 1, "", "BittensorConsole"]], "bittensor.utils.btlogging.console.BittensorConsole": [[113, 2, 1, "", "critical"], [113, 2, 1, "", "debug"], [113, 2, 1, "", "error"], [113, 2, 1, "", "info"], [113, 4, 1, "", "logger"], [113, 2, 1, "", "success"], [113, 2, 1, "", "warning"]], "bittensor.utils.btlogging.defines": [[114, 6, 1, "", "BASE_LOG_FORMAT"], [114, 6, 1, "", "BITTENSOR_LOGGER_NAME"], [114, 6, 1, "", "DATE_FORMAT"], [114, 6, 1, "", "DEFAULT_LOG_BACKUP_COUNT"], [114, 6, 1, "", "DEFAULT_LOG_FILE_NAME"], [114, 6, 1, "", "DEFAULT_MAX_ROTATING_LOG_FILE_SIZE"], [114, 6, 1, "", "TRACE_LOG_FORMAT"]], "bittensor.utils.btlogging.format": [[115, 1, 1, "", "BtFileFormatter"], [115, 1, 1, "", "BtStreamFormatter"], [115, 6, 1, "", "DEFAULT_LOG_FORMAT"], [115, 6, 1, "", "DEFAULT_TRACE_FORMAT"], [115, 6, 1, "", "LOG_FORMATS"], [115, 6, 1, "", "LOG_TRACE_FORMATS"], [115, 6, 1, "", "SUCCESS_LEVEL_NUM"], [115, 6, 1, "", "TRACE_LEVEL_NUM"], [115, 6, 1, "", "color_map"], [115, 6, 1, "", "emoji_map"], [115, 6, 1, "", "log_level_color_prefix"]], "bittensor.utils.btlogging.format.BtFileFormatter": [[115, 2, 1, "", "format"], [115, 2, 1, "", "formatTime"]], "bittensor.utils.btlogging.format.BtStreamFormatter": [[115, 2, 1, "", "format"], [115, 2, 1, "", "formatTime"], [115, 2, 1, "", "set_trace"], [115, 4, 1, "", "trace"]], "bittensor.utils.btlogging.helpers": [[116, 5, 1, "", "all_logger_names"], [116, 5, 1, "", "all_loggers"], [116, 5, 1, "", "get_max_logger_name_length"]], "bittensor.utils.btlogging.levels": [[118, 5, 1, "", "debug"], [118, 5, 1, "", "info"], [118, 5, 1, "", "trace"], [118, 5, 1, "", "warning"]], "bittensor.utils.btlogging.loggingmachine": [[119, 6, 1, "", "CUSTOM_LOGGER_METHOD_STACK_LEVEL"], [119, 1, 1, "", "LoggingConfig"], [119, 1, 1, "", "LoggingMachine"]], "bittensor.utils.btlogging.loggingmachine.LoggingConfig": [[119, 4, 1, "", "debug"], [119, 4, 1, "", "enable_third_party_loggers"], [119, 4, 1, "", "info"], [119, 4, 1, "", "logging_dir"], [119, 4, 1, "", "record_log"], [119, 4, 1, "", "trace"]], "bittensor.utils.btlogging.loggingmachine.LoggingMachine": [[119, 4, 1, "", "Debug"], [119, 4, 1, "", "Default"], [119, 4, 1, "", "Disabled"], [119, 4, 1, "", "Info"], [119, 4, 1, "", "Trace"], [119, 4, 1, "", "Warning"], [119, 2, 1, "", "add_args"], [119, 2, 1, "", "after_disable_debug"], [119, 2, 1, "", "after_disable_trace"], [119, 2, 1, "", "after_enable_debug"], [119, 2, 1, "", "after_enable_default"], [119, 2, 1, "", "after_enable_info"], [119, 2, 1, "", "after_enable_trace"], [119, 2, 1, "", "after_enable_warning"], [119, 2, 1, "", "after_transition"], [119, 2, 1, "", "before_disable_debug"], [119, 2, 1, "", "before_disable_logging"], [119, 2, 1, "", "before_disable_trace"], [119, 2, 1, "", "before_enable_console"], [119, 2, 1, "", "before_enable_debug"], [119, 2, 1, "", "before_enable_default"], [119, 2, 1, "", "before_enable_info"], [119, 2, 1, "", "before_enable_trace"], [119, 2, 1, "", "before_enable_warning"], [119, 2, 1, "", "before_transition"], [119, 2, 1, "", "check_config"], [119, 2, 1, "", "config"], [119, 4, 1, "", "console"], [119, 2, 1, "", "critical"], [119, 2, 1, "", "debug"], [119, 2, 1, "", "deregister_primary_logger"], [119, 4, 1, "", "disable_debug"], [119, 4, 1, "", "disable_info"], [119, 4, 1, "", "disable_logging"], [119, 2, 1, "", "disable_third_party_loggers"], [119, 4, 1, "", "disable_trace"], [119, 4, 1, "", "disable_warning"], [119, 4, 1, "", "enable_console"], [119, 4, 1, "", "enable_debug"], [119, 4, 1, "", "enable_default"], [119, 4, 1, "", "enable_info"], [119, 2, 1, "", "enable_third_party_loggers"], [119, 4, 1, "", "enable_trace"], [119, 4, 1, "", "enable_warning"], [119, 2, 1, "", "error"], [119, 2, 1, "", "exception"], [119, 2, 1, "", "get_config"], [119, 2, 1, "", "get_level"], [119, 2, 1, "", "get_queue"], [119, 2, 1, "", "help"], [119, 2, 1, "", "info"], [119, 2, 1, "", "off"], [119, 2, 1, "", "on"], [119, 2, 1, "", "register_primary_logger"], [119, 2, 1, "", "setLevel"], [119, 2, 1, "", "set_config"], [119, 2, 1, "", "set_console"], [119, 2, 1, "", "set_debug"], [119, 2, 1, "", "set_default"], [119, 2, 1, "", "set_info"], [119, 2, 1, "", "set_trace"], [119, 2, 1, "", "set_warning"], [119, 2, 1, "", "success"], [119, 2, 1, "", "trace"], [119, 2, 1, "", "warning"]], "bittensor.utils.formatting": [[121, 5, 1, "", "get_human_readable"], [121, 5, 1, "", "millify"]], "bittensor.utils.liquidity": [[123, 1, 1, "", "LiquidityPosition"], [123, 6, 1, "", "MAX_TICK"], [123, 6, 1, "", "MIN_TICK"], [123, 6, 1, "", "PRICE_STEP"], [123, 5, 1, "", "calculate_fees"], [123, 5, 1, "", "get_fees"], [123, 5, 1, "", "get_fees_in_range"], [123, 5, 1, "", "price_to_tick"], [123, 5, 1, "", "tick_to_price"]], "bittensor.utils.liquidity.LiquidityPosition": [[123, 4, 1, "", "fees_alpha"], [123, 4, 1, "", "fees_tao"], [123, 4, 1, "", "id"], [123, 4, 1, "", "liquidity"], [123, 4, 1, "", "netuid"], [123, 4, 1, "", "price_high"], [123, 4, 1, "", "price_low"], [123, 2, 1, "", "to_token_amounts"]], "bittensor.utils.networking": [[124, 7, 1, "", "ExternalIPNotFound"], [124, 5, 1, "", "get_external_ip"], [124, 5, 1, "", "get_formatted_ws_endpoint_url"], [124, 5, 1, "", "int_to_ip"], [124, 5, 1, "", "ip__str__"], [124, 5, 1, "", "ip_to_int"], [124, 5, 1, "", "ip_version"]], "bittensor.utils.registration": [[125, 0, 0, "-", "async_pow"], [127, 0, 0, "-", "pow"], [128, 0, 0, "-", "register_cuda"]], "bittensor.utils.registration.async_pow": [[125, 5, 1, "", "create_pow_async"]], "bittensor.utils.registration.pow": [[127, 1, 1, "", "CUDASolver"], [127, 1, 1, "", "Console"], [127, 1, 1, "", "LazyLoadedTorch"], [127, 1, 1, "", "POWSolution"], [127, 1, 1, "", "RegistrationStatistics"], [127, 1, 1, "", "RegistrationStatisticsLogger"], [127, 1, 1, "", "Solver"], [127, 1, 1, "", "Status"], [127, 1, 1, "", "UsingSpawnStartMethod"], [127, 5, 1, "", "create_pow"], [127, 5, 1, "", "get_cpu_count"], [127, 5, 1, "", "legacy_torch_api_compat"], [127, 5, 1, "", "log_no_torch_error"], [127, 5, 1, "", "terminate_workers_and_wait_for_exit"], [127, 6, 1, "", "torch"], [127, 5, 1, "", "update_curr_block"], [127, 5, 1, "", "use_torch"]], "bittensor.utils.registration.pow.CUDASolver": [[127, 4, 1, "", "dev_id"], [127, 2, 1, "", "run"], [127, 4, 1, "", "tpb"]], "bittensor.utils.registration.pow.Console": [[127, 2, 1, "", "log"], [127, 2, 1, "", "status"]], "bittensor.utils.registration.pow.POWSolution": [[127, 4, 1, "", "block_number"], [127, 4, 1, "", "difficulty"], [127, 2, 1, "", "is_stale"], [127, 2, 1, "", "is_stale_async"], [127, 4, 1, "", "nonce"], [127, 4, 1, "", "seal"]], "bittensor.utils.registration.pow.RegistrationStatistics": [[127, 4, 1, "", "block_hash"], [127, 4, 1, "", "block_number"], [127, 4, 1, "", "difficulty"], [127, 4, 1, "", "hash_rate"], [127, 4, 1, "", "hash_rate_perpetual"], [127, 4, 1, "", "rounds_total"], [127, 4, 1, "", "time_average"], [127, 4, 1, "", "time_spent"], [127, 4, 1, "", "time_spent_total"]], "bittensor.utils.registration.pow.RegistrationStatisticsLogger": [[127, 4, 1, "", "console"], [127, 2, 1, "", "get_status_message"], [127, 2, 1, "", "start"], [127, 4, 1, "", "status"], [127, 2, 1, "", "stop"], [127, 2, 1, "", "update"]], "bittensor.utils.registration.pow.Solver": [[127, 2, 1, "", "run"]], "bittensor.utils.registration.pow.Status": [[127, 2, 1, "", "start"], [127, 2, 1, "", "stop"], [127, 2, 1, "", "update"]], "bittensor.utils.registration.register_cuda": [[128, 5, 1, "", "log_cuda_errors"], [128, 5, 1, "", "reset_cuda"], [128, 5, 1, "", "solve_cuda"]], "bittensor.utils.subnets": [[129, 1, 1, "", "SubnetsAPI"]], "bittensor.utils.subnets.SubnetsAPI": [[129, 4, 1, "", "dendrite"], [129, 2, 1, "", "prepare_synapse"], [129, 2, 1, "", "process_responses"], [129, 2, 1, "", "query_api"], [129, 4, 1, "", "wallet"]], "bittensor.utils.version": [[130, 6, 1, "", "VERSION_CHECK_THRESHOLD"], [130, 7, 1, "", "VersionCheckError"], [130, 5, 1, "", "check_latest_version_in_pypi"], [130, 5, 1, "", "check_version"], [130, 5, 1, "", "get_and_save_latest_version"]], "bittensor.utils.weight_utils": [[131, 6, 1, "", "U16_MAX"], [131, 6, 1, "", "U32_MAX"], [131, 5, 1, "", "convert_and_normalize_weights_and_uids"], [131, 5, 1, "", "convert_bond_uids_and_vals_to_tensor"], [131, 5, 1, "", "convert_maybe_split_to_u16"], [131, 5, 1, "", "convert_root_weight_uids_and_vals_to_tensor"], [131, 5, 1, "", "convert_uids_and_weights"], [131, 5, 1, "", "convert_weight_uids_and_vals_to_tensor"], [131, 5, 1, "", "convert_weights_and_uids_for_emit"], [131, 5, 1, "", "generate_weight_hash"], [131, 5, 1, "", "normalize_max_weight"], [131, 5, 1, "", "process_weights"], [131, 5, 1, "", "process_weights_for_netuid"]]}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "method", "Python method"], "3": ["py", "property", "Python property"], "4": ["py", "attribute", "Python attribute"], "5": ["py", "function", "Python function"], "6": ["py", "data", "Python data"], "7": ["py", "exception", "Python exception"]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method", "3": "py:property", "4": "py:attribute", "5": "py:function", "6": "py:data", "7": "py:exception"}, "terms": {"": [0, 1, 4, 5, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 56, 60, 61, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 80, 81, 82, 83, 91, 112, 114, 115, 116, 122, 125, 127, 129, 131], "0": [0, 1, 2, 11, 16, 28, 35, 36, 37, 39, 40, 42, 45, 53, 54, 61, 62, 65, 66, 68, 69, 71, 74, 78, 79, 81, 82, 85, 99, 109, 111, 112, 122, 124, 125, 127, 128, 131], "000": [0, 81], "000003209": [0, 81], "000005000": 112, "0001": 123, "001": [0, 81], "005": [0, 35, 40, 45, 53, 62, 69, 74, 81], "05": [45, 74], "0x": [0, 16, 36, 60, 61, 65, 81], "0x0813029319030129u4120u10841824y0182u091u230912u": 82, "0x1234": 60, "0xd43593c715fdd31c": 85, "0\u03b2": 85, "1": [0, 1, 11, 17, 25, 34, 38, 42, 52, 62, 67, 71, 78, 81, 82, 83, 84, 85, 109, 119, 122, 123, 128, 131, 132], "10": [0, 11, 25, 28, 81, 82, 109, 112, 114], "100": [0, 36, 54, 63, 65, 81], "1000": [0, 5, 6, 81], "1000000000": [111, 122], "1024": 1, "11": [11, 25], "111": 82, "111111": 82, "113": 1, "1184": [0, 75, 79, 81], "11ee": 82, "12": [0, 11, 25, 28, 79, 81, 109, 129], "120": [0, 81], "1200": 78, "122": [39, 68], "123": [0, 58, 78, 81, 82, 109], "1234": [0, 81], "12345": 78, "127": 82, "128": [39, 68, 79, 91, 112], "13": [11, 25], "137": 115, "14": [0, 11, 25, 57, 62, 64, 81, 112], "147": [0, 81], "15": [11, 25, 82, 109, 130], "152": [0, 81], "16": [0, 11, 25, 81], "16383": [0, 81], "17": 11, "18": [11, 79], "18446744073709551615": 122, "19": 11, "192": [1, 39, 68], "198": 82, "1cec": 82, "1e9": [0, 81], "2": [0, 1, 11, 17, 25, 38, 42, 62, 67, 71, 78, 81, 82, 83, 85, 112, 115, 119, 122], "20": 11, "200": 82, "203": 1, "21": [11, 115], "22": 11, "23": [11, 82], "24": 11, "25": [0, 11, 81, 109], "256": [0, 34, 37, 52, 66, 75, 81, 82, 125, 127], "26": 11, "26214400": 114, "27": 11, "28": 11, "29": 11, "3": [0, 11, 17, 25, 34, 37, 38, 42, 52, 62, 66, 67, 71, 81, 82, 85, 109, 115, 119, 124, 127], "30": [0, 11, 81, 82], "300": [78, 122], "31": [11, 39, 68], "32": [0, 11, 75, 81, 125, 127], "32767": [0, 81], "32b": [0, 34, 52, 81], "33": 11, "331": [87, 88, 89], "3339": 115, "34": [11, 115], "35": 11, "36": 11, "360": [0, 81], "37": 11, "38": [11, 124], "39": 11, "3rd": 119, "4": [0, 2, 11, 25, 39, 47, 68, 76, 81, 82, 85, 124], "40": 11, "400": [0, 1, 81], "4000000000": 111, "401": 82, "4028237e": 124, "403": 82, "408": 82, "4096": 122, "41": 11, "42": [0, 11, 36, 65, 81], "422": 28, "4294967295": 131, "43": 11, "432": [0, 81], "44": 11, "443": 79, "45": 11, "46": 11, "47": 11, "48": [11, 79], "49": 11, "4b": [0, 81], "5": [0, 11, 25, 29, 35, 40, 45, 53, 62, 69, 74, 81, 85, 99, 109, 112, 115], "50": [0, 11, 81], "5000": 112, "51": 11, "52": 11, "53": 11, "54": 11, "55": 11, "56": 11, "57": 11, "58": 11, "59": 11, "5c4hrfjw9djxztzv3mwzrrar9p1mjhsrvwgwqi1esuyupnhm": [0, 81], "5de": [55, 61], "5ecbd69c": 82, "5enjdgnqqwnul2hcadxeetn2oqtxzw6bmbe936kfy2pfz1j1": 82, "5f": [0, 81], "5fhnew46xgxgs5muiveu4sbtygbzmstuspzc92uhjjm694ti": [0, 81], "5grwvaef5zxb26fz9rcqpdws57cterhpnehxcpcnohgkutqi": [0, 81], "6": [11, 25, 78, 124], "60": [0, 11, 81], "61": 11, "62": 11, "63": 11, "64": [0, 11, 112, 128], "64b": [0, 34, 52, 81], "65": 11, "65535": [0, 1, 36, 61, 65, 81, 122, 131], "66": 11, "67": 11, "68": 11, "69": 11, "7": [0, 11, 25, 36, 65, 81], "70": 11, "7002000": 1, "7070": 1, "71": 11, "72": [0, 11, 81], "73": 11, "768": [0, 34, 52, 60, 75, 81], "8": [0, 11, 25, 81, 82, 122], "8080": 82, "8191": [0, 81], "8192": 60, "86": [0, 81], "86400": 130, "887272": 123, "9": [11, 25, 112], "9090": 1, "9221": [39, 62, 68], "9282": 82, "9945": 99, "A": [0, 1, 2, 12, 13, 16, 19, 21, 25, 26, 28, 29, 30, 36, 37, 39, 48, 54, 55, 61, 65, 66, 68, 75, 78, 80, 81, 82, 84, 85, 109, 111, 112, 115, 119, 122, 127], "AND": [0, 81], "AS": 78, "Being": [0, 81], "But": 28, "By": [1, 36, 65, 81, 82], "FOR": [0, 81], "For": [0, 16, 36, 42, 45, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 65, 71, 74, 81, 82, 83, 86, 87, 89, 103, 109], "If": [0, 1, 2, 7, 16, 17, 25, 28, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 56, 61, 62, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 81, 82, 83, 84, 85, 99, 107, 109, 111, 112, 115, 118, 122, 125, 127, 131], "In": [0, 28, 40, 45, 69, 74, 78, 81, 82, 86, 124], "It": [0, 1, 4, 19, 28, 39, 54, 68, 78, 80, 81, 82, 84, 85, 103, 109, 112, 116, 117, 119, 120, 127], "Its": [42, 71], "NOT": [0, 81], "No": [0, 54, 81], "Not": 82, "OR": [34, 52], "Of": 124, "On": [0, 81], "Or": [85, 122], "The": [0, 1, 2, 4, 10, 12, 13, 14, 16, 17, 18, 19, 20, 21, 25, 26, 28, 29, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 80, 81, 82, 83, 84, 85, 86, 87, 89, 93, 99, 109, 111, 112, 115, 116, 120, 122, 123, 124, 125, 127, 128, 129, 130, 131], "Then": [0, 81], "There": [0, 30, 48], "These": [0, 1, 4, 16, 54, 78, 81, 82, 86, 87, 89, 93, 131], "To": [0, 36, 54, 65, 81, 112, 119], "Will": 99, "With": [0, 81], "__init__": 120, "__repr__": 28, "__setattr__": 82, "__str__": [28, 122], "_base": 84, "_blocks_weight_limit": 0, "_mock": 85, "_primary_logg": 119, "_solverbas": 127, "abc": [78, 80, 85, 129], "abil": [0, 1, 36, 65, 78, 113], "abl": 28, "about": [0, 1, 2, 16, 18, 40, 62, 69, 78, 81, 82, 85], "abov": [0, 16, 28, 44, 73, 81, 115, 123], "absolut": [4, 28, 31, 49], "absoluteminimumcontribut": [0, 4, 81], "abstract": [28, 78, 80, 129], "abus": [1, 54], "accept": [0, 1, 81, 84, 112, 119], "access": [0, 1, 28, 36, 54, 61, 65, 78, 81, 82, 99, 103, 120, 131], "access_list": 87, "accord": [0, 1, 39, 68, 80, 81, 82], "accordingli": 85, "account": [0, 4, 16, 25, 29, 31, 36, 40, 44, 49, 54, 55, 61, 65, 69, 73, 75, 81, 87, 103, 131], "account_id": 85, "account_id_byt": 25, "accountid": [18, 25, 26], "accru": 78, "accrual": [0, 81], "accumul": [0, 78, 80, 81], "accur": [16, 17, 27, 29, 78, 82, 83, 84, 85, 86, 112, 122, 124, 130], "achiev": 78, "aclose_sess": 28, "across": [0, 42, 71, 75, 78, 81, 82, 112, 127], "act": [0, 1, 16, 19, 28, 36, 65, 78, 81, 86], "action": [0, 31, 43, 49, 72, 81, 119], "activ": [0, 1, 11, 12, 13, 21, 24, 28, 31, 37, 40, 42, 49, 54, 62, 69, 71, 78, 81, 116, 129], "activate_subnet": 92, "activatesubnet": 92, "activity_cutoff": [11, 21, 54, 89], "activitycutoff": 11, "actual": [0, 1, 16, 39, 68, 81], "ad": [0, 1, 16, 33, 36, 51, 61, 64, 65, 81, 85, 99, 107, 115, 119], "adapt": [1, 78], "add": [0, 1, 33, 36, 40, 51, 61, 62, 65, 69, 81, 82, 85, 115, 119, 131], "add_arg": [1, 27, 84, 85, 99, 119], "add_legacy_method": 107, "add_liquid": [0, 64, 81, 87, 98], "add_liquidity_extrins": [33, 51], "add_proxi": [0, 61, 81, 87, 103], "add_proxy_extrins": [36, 65], "add_stak": [0, 16, 62, 81, 85, 87, 98, 105], "add_stake_extrins": [40, 69, 85], "add_stake_limit": [16, 62, 87], "add_stake_multipl": [0, 81, 98, 105], "add_stake_multiple_extrins": [40, 69], "addit": [0, 3, 5, 16, 22, 37, 62, 66, 78, 80, 81, 82, 86, 87, 89, 131], "addition": [1, 82], "additional_data": 82, "addon": 93, "addproxi": 61, "address": [0, 1, 2, 4, 5, 10, 14, 16, 20, 25, 26, 28, 30, 31, 35, 36, 40, 43, 44, 45, 48, 49, 53, 55, 58, 61, 62, 65, 69, 72, 73, 74, 75, 78, 81, 82, 87, 122, 131], "adher": 28, "adjust": [0, 21, 36, 54, 61, 65, 81], "adjustment_alpha": [11, 21, 54, 89], "adjustment_interv": [11, 21, 54, 89], "adjustmentalpha": 11, "adjustmentinterv": 11, "admin": [0, 42, 54, 71, 81], "admin_util": [59, 132], "administr": [0, 54, 81], "adminutil": [0, 16, 46, 54, 75, 81, 88], "advanc": [0, 54, 81, 93], "adversari": 1, "advis": [1, 28], "aead_ct": [0, 60, 81], "affect": [0, 81], "after": [0, 1, 16, 18, 21, 28, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 61, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 80, 81, 82, 84, 87, 99, 109, 119, 127, 131], "after_disable_debug": 119, "after_disable_trac": 119, "after_enable_debug": 119, "after_enable_default": 119, "after_enable_info": 119, "after_enable_trac": 119, "after_enable_warn": 119, "after_transit": 119, "ag": 109, "again": [0, 81], "against": [0, 1, 30, 31, 33, 35, 36, 37, 38, 39, 40, 41, 43, 44, 45, 47, 48, 49, 51, 53, 65, 66, 67, 68, 69, 70, 72, 73, 74, 76, 81, 85], "aggreg": [0, 81], "agre": 78, "agreement": 78, "ai": [78, 79], "aid": [0, 81, 82], "aiohttp": [28, 80], "akin": 78, "algorithm": [0, 1, 39, 68, 78, 81], "alic": [0, 81, 85], "alice_wallet": 85, "align": [21, 78, 81], "aliv": [0, 44, 55, 73, 81], "all": [0, 1, 4, 16, 17, 28, 29, 31, 35, 36, 40, 44, 45, 49, 53, 54, 55, 56, 58, 60, 61, 62, 63, 64, 65, 69, 73, 74, 75, 78, 81, 84, 85, 99, 103, 107, 116, 119, 122, 124, 127], "all_hotkei": [0, 81], "all_indic": 11, "all_logg": 116, "all_logger_nam": 116, "all_mechan": [0, 81], "all_netuid": [0, 81], "all_stak": 75, "all_subnet": [0, 81, 106], "all_typ": 16, "alloc": [0, 78, 81], "allow": [0, 1, 4, 5, 6, 16, 17, 21, 30, 33, 35, 36, 40, 45, 48, 51, 53, 54, 56, 61, 62, 65, 69, 74, 78, 80, 81, 82, 83, 85, 103, 111, 112, 115, 131], "allow_non": 112, "allow_parti": [62, 87], "allow_partial_stak": [0, 35, 40, 45, 53, 69, 74, 81], "allowed_delta": 111, "allowed_nonce_window_n": 111, "along": [0, 37, 66, 81, 85, 109], "alpha": [0, 7, 16, 17, 19, 21, 33, 45, 51, 54, 62, 64, 74, 78, 81, 85, 89, 112, 123], "alpha_amount": [0, 16, 19, 62, 81, 87], "alpha_dividends_per_hotkei": [11, 78], "alpha_fe": [0, 19, 81], "alpha_fees_above_high": 123, "alpha_fees_below_low": 123, "alpha_high": [11, 21, 54, 89], "alpha_in": [7, 11], "alpha_in_emiss": [7, 11], "alpha_low": [11, 21, 54, 89], "alpha_out": [7, 11], "alpha_out_emiss": [7, 11], "alpha_sigmoid_steep": 21, "alpha_slippag": 7, "alpha_stak": [11, 24, 78], "alpha_to_tao": 7, "alpha_to_tao_with_slippag": 7, "alphadividendsperhotkei": 11, "alphahigh": 11, "alphain": 11, "alphainemiss": 11, "alphalow": 11, "alphaout": 11, "alphaoutemiss": 11, "alphastak": 11, "alreadi": [0, 1, 31, 49, 54, 81, 125, 127, 131], "also": [0, 1, 28, 80, 81, 82, 85, 111, 119], "alter": 1, "altern": [0, 81, 93], "although": 86, "alwai": [0, 40, 56, 69, 81, 93, 112], "among": [0, 78, 81], "amount": [0, 4, 5, 7, 12, 13, 16, 19, 29, 31, 33, 35, 36, 40, 42, 44, 45, 49, 51, 53, 55, 58, 61, 62, 64, 65, 69, 71, 73, 74, 75, 78, 81, 87, 99, 109, 112, 123], "amount_stak": [62, 87], "amount_unstak": [62, 87], "an": [0, 1, 2, 7, 12, 16, 19, 25, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 80, 81, 82, 83, 84, 85, 92, 112, 115, 116, 119, 122, 123, 124], "analogi": 28, "analys": 78, "analysi": [0, 78, 81, 82, 85], "analyz": [0, 78, 81], "ani": [0, 1, 2, 4, 9, 10, 16, 17, 27, 28, 29, 31, 36, 37, 49, 54, 56, 61, 65, 66, 78, 80, 81, 82, 83, 85, 86, 87, 89, 95, 96, 109, 122, 123, 128, 129], "announc": [0, 16, 36, 61, 65, 81, 87, 103], "announce_extrins": [36, 65], "announce_proxi": [0, 16, 81, 103], "announcementdepositbas": [0, 16, 81], "announcementdepositfactor": [0, 16, 81], "anoth": [0, 27, 35, 53, 78, 81, 85], "any_list": 9, "anyth": [0, 81, 122], "api": [0, 1, 81, 99, 120, 122, 127, 129, 133], "app": [1, 79], "appear": 109, "appli": [0, 1, 11, 54, 75, 81, 82, 115, 131], "applic": [0, 1, 28, 31, 49, 78, 80, 81, 82, 93, 99, 116], "apply_authorized_upgrad": 87, "apply_pure_proxy_data": 75, "appropri": [0, 1, 28, 78, 80, 81, 85, 112], "approv": [0, 36, 65, 81], "approve_as_multi": 87, "approxim": [0, 81], "aqueri": 28, "ar": [0, 1, 4, 16, 21, 27, 28, 29, 30, 31, 36, 47, 48, 49, 54, 61, 62, 65, 75, 76, 78, 81, 82, 83, 84, 85, 86, 87, 89, 93, 99, 109, 116, 120, 122, 131], "arbitr": 18, "arbitrari": [0, 28, 81, 85], "arbitration_block": 18, "architectur": [0, 1, 78, 81], "archiv": [0, 78, 79, 81, 85, 99, 122], "archive_endpoint": [0, 81, 99], "archive_entrypoint": 79, "arg": [27, 28, 83, 84, 115, 119, 122, 129], "argpars": [1, 27, 84, 85, 119], "argument": [1, 27, 78, 80, 82, 83, 84, 85, 86, 87, 89, 107, 112, 115, 119, 122, 129], "argumentpars": [1, 27, 84, 85, 119], "aris": 1, "arithmet": 112, "arrai": [0, 47, 76, 78, 81, 83, 127, 131], "as_deriv": 87, "as_dict": [0, 81, 85], "as_multi": 87, "as_multi_threshold_1": 87, "as_origin": 87, "asctim": [114, 115], "asgi": 80, "aspect": [0, 1, 78, 81, 82], "assert": [1, 109], "assertionerror": 1, "assess": [0, 1, 78, 81], "asset": 78, "assign": [0, 1, 37, 62, 66, 78, 81, 82], "assist": [0, 81], "associ": [0, 1, 2, 7, 10, 12, 13, 14, 16, 19, 20, 24, 28, 29, 35, 45, 53, 54, 62, 74, 75, 78, 81, 82, 84, 119, 131], "associate_evm_kei": 87, "assum": [1, 78, 112], "assur": 1, "asymmetr": 1, "async": [0, 1, 28, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 78, 80, 91, 99, 125, 127, 129], "async_execute_on": 91, "async_execute_step": 91, "async_metagraph": 78, "async_pow": [126, 132], "async_set_hyperparamet": 91, "async_substrate_interfac": [0, 25, 34, 52, 81], "async_subtensor": [27, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 54, 55, 56, 57, 58, 60, 61, 62, 64, 77, 78, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 108, 125, 127, 132], "async_wait_next_epoch": 91, "asyncex": [50, 132], "asyncextrinsicreceipt": [34, 85], "asyncgener": 28, "asynchron": [0, 1, 28, 37, 78, 80, 81, 91, 103, 127], "asyncio": 28, "asyncmetagraph": [0, 78], "asyncquerymapresult": 0, "asyncsubtensor": [0, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 69, 78, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 108, 125, 127], "atom": 54, "attach": [1, 82], "attack": [0, 1, 30, 31, 33, 35, 36, 37, 38, 39, 40, 41, 43, 44, 45, 47, 48, 49, 51, 53, 65, 66, 67, 68, 69, 70, 72, 73, 74, 76, 81], "attain": 124, "attempt": [0, 29, 30, 31, 37, 40, 45, 48, 49, 66, 69, 74, 78, 81, 82, 122, 124], "attent": [0, 81], "attribut": [0, 4, 5, 12, 16, 75, 81, 82], "augment": 93, "aura": 54, "authent": [1, 39, 68, 78, 82, 85], "author": [0, 34, 35, 52, 53, 54, 78, 81], "authorit": 16, "authoritylist": 54, "authorization_list": 87, "authorize_upgrad": 87, "authorize_upgrade_without_check": 87, "auto": [0, 62, 81, 86, 87, 89, 132], "autoapi": 132, "automat": [0, 28, 36, 40, 61, 65, 69, 78, 81, 82, 99], "autostak": [0, 81], "auxiliari": 86, "avail": [0, 1, 34, 36, 52, 61, 65, 81, 85, 86, 99, 103], "averag": [0, 21, 54, 81, 127], "avoid": [0, 81], "aw": 124, "await": [0, 28, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 78, 80, 81, 99], "axon": [0, 2, 11, 12, 13, 27, 28, 29, 39, 68, 77, 78, 81, 82, 129, 132], "axon_hotkei": 82, "axon_info": [8, 11, 12, 13, 132], "axon_util": [122, 132], "axoninfo": [1, 2, 11, 12, 13, 25, 28, 78], "axonmiddlewar": 1, "axonserv": 1, "axonservecallparam": 85, "ay": 15, "b": [0, 34, 52, 60, 78, 81], "b0dc": 82, "b64decod": 82, "back": [0, 1, 28, 33, 51, 80, 81, 82, 109], "backbon": 78, "background": 1, "backward": 1, "balanc": [0, 4, 5, 6, 7, 11, 12, 13, 16, 19, 20, 23, 24, 25, 29, 31, 33, 35, 40, 44, 45, 49, 51, 53, 59, 62, 69, 73, 74, 75, 81, 85, 88, 99, 122, 123, 132], "balance_wallet_default": 112, "balance_wallet_secret": 112, "balancetypeerror": [29, 112], "balanceunitmismatcherror": 29, "bandwidth": 82, "base": [0, 1, 2, 3, 5, 6, 7, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25, 27, 28, 29, 34, 36, 52, 54, 55, 57, 58, 59, 60, 61, 62, 63, 64, 65, 75, 78, 80, 81, 82, 83, 84, 85, 87, 89, 91, 109, 112, 115, 119, 122, 124, 127, 129, 130, 131, 132], "base64": [25, 82], "base_log_format": 114, "baseclass": 78, "basefe": 88, "basehttpmiddlewar": 1, "basemodel": [28, 80, 82, 83], "basic": [12, 78, 82], "batch": [0, 36, 61, 65, 81, 87], "batch_al": 87, "batch_commit_weight": 87, "batch_reveal_weight": 87, "batch_set_weight": 87, "becaus": 82, "becom": [0, 36, 37, 61, 65, 81], "been": [0, 1, 4, 28, 31, 36, 49, 54, 61, 65, 80, 81, 82, 84], "befor": [0, 1, 16, 18, 28, 31, 34, 36, 49, 52, 65, 75, 81, 119, 125, 127, 128], "before_disable_debug": 119, "before_disable_log": 119, "before_disable_trac": 119, "before_enable_consol": 119, "before_enable_debug": 119, "before_enable_default": 119, "before_enable_info": 119, "before_enable_trac": 119, "before_enable_warn": 119, "before_transit": 119, "begin": [0, 1, 81], "behalf": [0, 16, 36, 61, 65, 81, 103], "behavior": [0, 1, 4, 16, 78, 81, 82, 85, 93, 112], "behaviour": 54, "being": [0, 1, 6, 16, 25, 33, 36, 39, 41, 47, 51, 54, 61, 62, 64, 65, 68, 70, 76, 80, 81, 119, 127], "belief": 78, "belong": [0, 40, 69, 81], "below": [0, 16, 31, 36, 49, 61, 65, 81], "benefici": 78, "benefit": [28, 78], "bespok": 129, "best_finalized_block_numb": 87, "bet": [0, 40, 69, 81], "better": [0, 81], "between": [0, 1, 7, 16, 29, 31, 36, 37, 42, 49, 53, 54, 61, 65, 66, 71, 78, 81, 82, 111, 112, 119, 123, 131], "beyond": [0, 78, 81], "bind": [1, 34, 52, 75], "bit": 112, "bittensor": 132, "bittensor_logger_nam": [114, 119], "bittensor_wallet": [0, 1, 28, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 81, 85, 91, 92, 122, 125, 127, 129], "bittensorconsol": 113, "blacklist": [1, 29, 82], "blacklist_custom": 1, "blacklist_fn": 1, "blacklist_my_synaps": 1, "blacklist_my_synapse_2": 1, "blacklistedexcept": 29, "blake2": [34, 52, 75], "blake256": [39, 68], "blake2_256": [0, 34, 52, 60, 81], "bloat": [0, 81], "blob": [0, 60, 75, 81], "block": [0, 1, 4, 11, 14, 16, 18, 21, 25, 26, 28, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 58, 60, 61, 62, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 79, 81, 85, 87, 91, 99, 109, 122, 125, 127, 128], "block_and_hotkey_hash_byt": 128, "block_at_registr": [11, 24, 78], "block_byt": 127, "block_hash": [0, 36, 65, 81, 122, 127], "block_numb": [62, 75, 87, 127], "block_tim": [0, 47, 76, 81, 109], "blockatregistr": 11, "blockchain": [0, 30, 33, 34, 35, 36, 37, 38, 39, 41, 47, 48, 51, 52, 53, 65, 66, 67, 68, 70, 76, 78, 81, 85, 131], "blockinfo": [0, 81, 85], "blocknotfound": 29, "blocks_for_revealed_execut": [0, 34, 52, 81], "blocks_since_epoch": 23, "blocks_since_last_step": [0, 7, 11, 78, 81, 106], "blocks_since_last_upd": [0, 81, 106], "blocks_until_next_epoch": [0, 81, 106], "blocks_until_rev": [0, 81], "blockssincelaststep": 11, "blocktim": 79, "blueprint": 86, "bob": [0, 81], "bodi": [0, 1, 28, 80, 81, 82], "body_hash": 82, "bond": [0, 12, 13, 21, 39, 54, 68, 78, 81, 99, 106, 131], "bond_valu": [0, 81], "bonds_as_dict": 12, "bonds_moving_averag": [54, 89], "bonds_moving_avg": [11, 21], "bonds_penalti": [54, 89], "bonds_reset_en": 21, "bondsmovingavg": 11, "bool": [0, 1, 2, 4, 7, 11, 12, 13, 16, 20, 21, 24, 25, 27, 28, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 55, 56, 62, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 81, 82, 83, 85, 91, 99, 109, 112, 115, 118, 119, 122, 123, 125, 127, 129], "boolean": [0, 1, 33, 51, 54, 55, 64, 78, 81, 122], "both": [0, 1, 16, 19, 36, 54, 55, 57, 58, 60, 61, 62, 63, 64, 65, 81, 85, 103, 119, 122, 131], "bound": [0, 4, 31, 33, 49, 51, 64, 81], "boundari": [0, 81], "brain": 28, "bridg": 28, "broadcast": 1, "broader": [1, 120], "broken": 29, "brokenexecutor": 84, "brokenthreadpool": 84, "bt": [0, 1, 27, 81, 85, 99, 109], "bt_docs_link": 122, "bt_header_axon_address": 82, "bt_header_dendrite_port": 82, "btfileformatt": 115, "btlog": [122, 132], "btstreamformatt": 115, "btstreamingrespons": 80, "btstreamingresponsemodel": 80, "buffer": [28, 83, 122], "build": [28, 75, 86, 87, 89], "built": [86, 87, 89], "bulk": [0, 81], "burn": [0, 11, 21, 23, 54, 81, 87, 89], "burn_alpha": 87, "burned_regist": [0, 16, 62, 81, 87, 98, 106], "burned_register_extrins": [37, 66], "busi": 85, "byte": [0, 13, 16, 25, 39, 60, 62, 68, 75, 81, 82, 85, 87, 109, 122, 127, 128, 131], "byte_data": 109, "bytes_or_buff": 122, "c": 78, "calcul": [0, 1, 16, 21, 42, 71, 78, 81, 82, 111, 116, 123, 127], "calculate_diff_second": 111, "calculate_fe": 123, "call": [0, 1, 4, 16, 17, 21, 28, 31, 33, 34, 36, 40, 41, 43, 45, 46, 49, 51, 52, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 65, 69, 70, 72, 74, 75, 80, 81, 82, 84, 85, 90, 91, 119, 132], "call_funct": [0, 46, 56, 75, 81, 91], "call_hash": [0, 16, 36, 61, 65, 81, 87], "call_hash_s": 16, "call_modul": [0, 46, 56, 75, 81, 91], "call_next": 1, "call_param": [0, 46, 75, 81, 91], "call_record": 91, "call_stream": 28, "callabl": [0, 1, 17, 38, 54, 67, 80, 81, 84], "callbuild": [0, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 81], "caller": [1, 40, 45, 69, 74, 112, 122], "calling_funct": [0, 81], "campaign": [0, 4, 31, 49, 58, 81], "can": [0, 1, 4, 10, 16, 28, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 56, 61, 62, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 80, 81, 82, 84, 85, 86, 93, 109, 127, 131], "cancel": [16, 84, 87], "cancel_as_multi": 87, "cancel_futur": 84, "cancel_nam": 87, "cancel_retri": 87, "cancel_retry_nam": 87, "cannot": [0, 29, 31, 36, 49, 61, 65, 75, 80, 81, 82, 83, 124], "canon": 54, "cap": [0, 4, 31, 49, 58, 81, 87], "capabl": 1, "captur": [0, 78, 81, 85], "carrier": 82, "case": [0, 1, 28, 54, 81, 93, 99], "cast": 83, "cast_dtyp": 83, "cast_float": 82, "cast_int": 82, "cast_shap": 83, "categori": [82, 86], "caught": [28, 122], "caus": [0, 55], "caution": [0, 16, 36, 65], "ceas": 1, "center": 115, "central": [1, 78, 120], "certain": [0, 1, 16, 81, 103, 127], "certif": [0, 1, 39, 62, 68, 81, 85, 87, 122], "chain": [0, 1, 3, 4, 11, 16, 20, 25, 29, 31, 36, 37, 39, 40, 47, 49, 54, 62, 65, 66, 68, 69, 76, 79, 81, 85, 91, 99, 122, 131, 132], "chain_data": [0, 1, 28, 36, 65, 75, 77, 78, 81, 132], "chain_endpoint": [78, 85, 99, 122], "chain_id": [54, 89], "chain_ident": [0, 8, 11, 81, 132], "chainconnectionerror": 29, "chaindatatyp": 25, "chainerror": 29, "chainid": 54, "chainident": [0, 3, 11, 25, 78, 81], "chainqueryerror": 29, "chaintransactionerror": 29, "challeng": [0, 81, 125, 127], "chang": [0, 16, 36, 45, 53, 54, 61, 65, 74, 81, 86, 87, 89, 113, 115], "changeabl": 54, "characterist": [0, 81], "charg": [0, 81, 85], "check": [0, 1, 16, 27, 28, 34, 35, 40, 45, 52, 53, 69, 74, 81, 82, 85, 92, 122, 124, 125, 127, 130], "check_balance_amount": 112, "check_block": 127, "check_config": [1, 119], "check_latest_version_in_pypi": 130, "check_vers": [122, 130], "child": [0, 16, 29, 30, 48, 62, 81], "child_hotkei": [0, 81], "childkei": [0, 16, 29, 54, 62, 81], "children": [0, 29, 32, 50, 62, 81, 87, 132], "choic": 122, "chr_transform": 11, "chunk": [28, 80], "ciphertext": [0, 60, 75, 81], "circul": [0, 81], "claim": [0, 1, 16, 17, 38, 43, 62, 67, 72, 81], "claim_root": [0, 16, 62, 81, 87, 98, 105], "claim_root_extrins": [38, 67], "claimabl": [0, 81], "clariti": 120, "class": [29, 37, 66, 109, 120], "classic": 107, "classmethod": [1, 2, 4, 9, 10, 12, 15, 16, 17, 18, 19, 20, 26, 29, 82, 84, 85, 99, 119, 127], "classvar": 82, "clean": [0, 81, 84], "cleaner": 120, "cleanup": [0, 28, 81], "clear": [0, 80, 81], "clear_ident": 87, "cli": [0, 81], "client": [1, 28, 30, 33, 34, 41, 48, 51, 52, 70, 80], "clientrespons": [28, 80], "clientsess": 28, "clip": [0, 81], "close": [0, 28, 81, 99], "close_sess": 28, "closur": 28, "code": [0, 1, 16, 28, 81, 82, 87], "code_hash": 87, "codebas": 93, "cold": [18, 99], "coldkei": [0, 2, 5, 6, 11, 12, 13, 17, 20, 24, 29, 30, 34, 35, 36, 38, 40, 45, 46, 48, 52, 53, 54, 62, 65, 67, 69, 74, 75, 78, 81, 85, 87, 108, 122], "coldkey_ss58": [0, 20, 81], "coldkeypub": [0, 1, 81], "collabor": 78, "collat": 28, "collect": [0, 27, 75, 78, 81, 86], "color": 115, "color_map": 115, "com": 122, "combin": [0, 36, 65, 75, 81, 123], "come": 1, "command": [1, 85, 86, 87, 89, 92, 119], "commit": [0, 11, 21, 25, 26, 29, 34, 47, 52, 54, 59, 60, 62, 76, 81, 87, 88, 99, 131, 132], "commit_block": [0, 26, 81], "commit_crv3_mechanism_weight": 87, "commit_data": 26, "commit_hash": [62, 87], "commit_hex": 26, "commit_mechanism_weight": [62, 87], "commit_messag": [0, 81], "commit_reveal_en": [0, 81, 95, 106], "commit_reveal_period": [11, 21], "commit_reveal_vers": [0, 47, 62, 76, 81, 87], "commit_reveal_weights_en": [11, 21], "commit_timelocked_mechanism_weight": [62, 87], "commit_timelocked_weight": 87, "commit_timelocked_weights_extrins": [47, 76], "commit_weight": [0, 81, 87, 98], "commit_weights_extrins": [47, 76], "commitment_hex": 75, "commitment_messag": [0, 81], "commitrevealperiod": 11, "commitrevealweightsen": 11, "committ": [0, 26, 81], "committe": [0, 81], "common": [0, 5, 28, 29, 40, 45, 69, 74, 81, 122], "commun": [0, 1, 78, 81, 82, 120, 129], "compar": [0, 1, 75, 81], "comparison": [1, 112], "compat": [0, 36, 47, 62, 65, 76, 81, 82, 120], "complet": [0, 1, 28, 31, 36, 49, 54, 65, 78, 81, 84], "complex": [0, 1, 78, 81, 82], "compon": [1, 78, 81, 93, 122], "compos": [0, 81, 86], "compose_cal": [0, 81, 99], "composit": [0, 56, 81], "comprehend": [0, 81], "comprehens": [0, 81, 103], "compress": [54, 62, 82], "comput": [0, 78, 81, 82, 122], "computed_body_hash": 82, "concaten": 82, "concept": [0, 78, 81], "concern": 1, "concurr": [1, 28, 78, 84], "condit": [0, 1, 81], "confid": 1, "config": [0, 1, 77, 78, 80, 81, 82, 83, 84, 85, 99, 119, 132], "config_payload": 87, "configdict": [80, 82, 83], "configur": [0, 1, 4, 16, 27, 31, 49, 54, 78, 80, 81, 82, 83, 85, 99, 119], "confirm": 1, "conflict": 1, "conform": [0, 80, 81, 82, 83], "congest": [0, 81], "connect": [0, 1, 28, 29, 31, 36, 39, 40, 49, 65, 68, 69, 78, 81, 82, 85, 99], "connection_requir": 23, "consensu": [0, 11, 12, 13, 24, 54, 78, 81], "consequ": 54, "conserv": [0, 81], "consid": [0, 81], "consist": [0, 78, 81, 82, 85, 112, 117], "consol": [0, 37, 66, 81, 117, 119, 125, 127, 132], "consolid": 120, "constant": [0, 4, 16, 21, 36, 65, 81, 114, 120], "constant_nam": [0, 81], "constantli": 78, "constants_nam": [0, 4, 16, 81], "constrain": 82, "constraint": [0, 16, 81, 131], "construct": [27, 75, 78, 82, 86], "contact": [0, 37, 62, 66, 81], "contain": [0, 1, 2, 5, 12, 16, 19, 25, 26, 28, 35, 36, 40, 45, 53, 54, 60, 62, 65, 69, 74, 75, 78, 80, 81, 82, 85, 93, 109, 111, 122, 127, 131, 132], "context": [0, 1, 19, 28, 54, 78, 81, 82, 85], "continu": [1, 78], "contribut": [0, 1, 4, 31, 49, 58, 78, 81, 87], "contribute_crowdloan": [0, 81, 96, 98], "contribute_crowdloan_extrins": [31, 49], "contributor": [0, 4, 31, 49, 81], "contributors_count": 4, "control": [0, 1, 81, 82], "conveni": [19, 82, 86, 87, 89], "convers": [82, 123, 131], "convert": [0, 1, 2, 16, 17, 19, 21, 25, 81, 82, 109, 112, 121, 122, 123, 127, 131], "convert_and_normalize_weights_and_uid": 131, "convert_bond_uids_and_vals_to_tensor": 131, "convert_maybe_split_to_u16": 131, "convert_root_weight_uids_and_vals_to_tensor": 131, "convert_uids_and_weight": 131, "convert_weight_uids_and_vals_to_tensor": 131, "convert_weights_and_uids_for_emit": 131, "cool": [0, 81], "cooldown": [0, 30, 48, 62, 63, 81, 87], "copi": [78, 85], "core": [91, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 108, 110, 119, 122, 125, 127, 129, 131, 132], "cornerston": [1, 82], "correct": [1, 78, 82], "correctli": [1, 78, 112], "correspond": [0, 1, 4, 25, 28, 40, 45, 47, 62, 69, 74, 75, 76, 78, 81, 85, 86, 128, 131], "corrupt": 122, "cortex": 109, "cost": [0, 54, 81], "could": [0, 16, 54, 64, 81], "count": [0, 6, 81], "counter": [0, 36, 65, 81], "counterpart": 28, "cover": [28, 78], "cpu": [125, 127], "creat": [0, 1, 2, 4, 10, 12, 16, 19, 26, 28, 31, 36, 49, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 65, 78, 80, 81, 82, 83, 85, 87, 103, 112, 122, 125, 127, 132], "create2": 87, "create_composed_cal": 56, "create_crowdloan": [0, 81, 96, 98], "create_crowdloan_extrins": [31, 49], "create_error_respons": 1, "create_pow": 127, "create_pow_async": 125, "create_pur": [61, 87], "create_pure_proxi": [0, 36, 65, 81, 103], "create_pure_proxy_extrins": [36, 65], "create_respons": [36, 65], "create_streaming_respons": 80, "createpur": 61, "creation": [0, 1, 36, 61, 65, 81, 82, 86], "creator": [0, 4, 31, 49, 58, 81], "credit": [0, 33, 51, 81], "criteria": 1, "critic": [0, 1, 16, 37, 54, 78, 81, 82, 93, 113, 119], "crowdloan": [0, 4, 32, 50, 59, 81, 88, 99, 132], "crowdloan_id": [0, 31, 49, 58, 81, 87], "crowdloan_info": [8, 132], "crowdloanconst": [0, 4, 81], "crowdloaninfo": [0, 4, 81], "crucial": [0, 1, 28, 78, 81, 82], "crv3weightcommitsv2": 26, "crv4": [0, 81], "cryptocurr": 78, "cryptograph": [0, 1, 78, 81], "cuda": [0, 37, 66, 81, 125, 127, 128], "cudasolv": 127, "cumul": [0, 78, 81], "curl": 124, "curr_block": 127, "curr_block_num": 127, "curr_diff": 127, "currenc": 112, "current": [0, 1, 4, 7, 16, 31, 36, 49, 54, 61, 65, 78, 81, 82, 86, 87, 89, 99, 111, 122, 123, 127, 130], "current_block": [0, 78, 81], "current_subnet_pric": 123, "current_tick": 123, "current_tim": 111, "current_time_n": 111, "currentkei": [0, 81], "custom": [1, 8, 78, 81, 82, 93, 109, 115, 117], "custom_logger_method_stack_level": 119, "custom_synaps": 82, "customiz": 1, "customsynaps": 82, "cut": 54, "cutoff": [21, 54], "d": [28, 78, 83, 114], "dai": [0, 5, 6, 81], "danger": [0, 36, 65], "data": [0, 1, 2, 4, 7, 8, 11, 14, 15, 16, 19, 20, 24, 25, 26, 28, 30, 31, 36, 39, 40, 45, 48, 49, 58, 65, 68, 69, 74, 75, 78, 80, 81, 82, 83, 85, 103, 109, 122, 127, 131], "data_typ": [39, 68], "dataclass": [0, 3, 4, 5, 6, 7, 9, 10, 11, 13, 14, 16, 18, 20, 22, 23, 24, 81, 109], "date": [0, 16, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 81, 115, 130], "date_format": 114, "datefmt": 115, "datetim": [0, 81], "de": 119, "deal": 1, "debug": [82, 85, 113, 118, 119], "decai": 21, "deceiv": 1, "decentr": [0, 1, 78, 81, 82], "decis": [0, 78, 81], "declar": [0, 16, 36, 65, 81], "decod": [0, 1, 2, 4, 7, 8, 9, 11, 13, 16, 18, 20, 24, 25, 26, 30, 48, 81, 82, 85, 109, 122], "decode_account_id": 25, "decode_account_id_list": 18, "decode_block": 25, "decode_hex_identity_dict": 122, "decode_metadata": 25, "decode_revealed_commit": 25, "decode_revealed_commitment_with_hotkei": 25, "decor": 127, "decreas": [0, 29, 45, 74, 81], "decrease_tak": [43, 62, 72, 87], "decrypt": [0, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 43, 44, 45, 47, 48, 49, 51, 52, 53, 60, 65, 66, 67, 68, 69, 70, 72, 73, 74, 76, 81, 85, 109, 122], "decrypted_data": 109, "dedic": [0, 81], "deep": 85, "deepcopi": 78, "deeper": [0, 81], "def": [1, 82], "default": [0, 1, 2, 27, 28, 29, 34, 36, 40, 52, 54, 65, 69, 75, 78, 79, 81, 82, 85, 99, 109, 111, 115, 118, 119, 122], "default_endpoint": 79, "default_log_backup_count": 114, "default_log_file_nam": 114, "default_log_format": 115, "default_max_rotating_log_file_s": 114, "default_mev_protect": [0, 30, 31, 33, 35, 36, 37, 38, 39, 40, 41, 43, 44, 45, 47, 48, 49, 51, 53, 65, 66, 67, 68, 69, 70, 72, 73, 74, 76, 79, 81], "default_network": [78, 79], "default_period": [0, 79, 81, 91], "default_tak": [54, 89], "default_trace_format": 115, "default_verifi": 1, "defaultdict": 27, "defaultminstak": [0, 81], "defaultmunch": 27, "defin": [0, 1, 2, 4, 7, 11, 16, 17, 24, 25, 31, 42, 49, 54, 56, 71, 78, 81, 82, 103, 115, 117, 122, 132], "definit": [0, 81, 86, 87, 89, 114], "deiniti": 119, "delai": [0, 1, 16, 36, 61, 65, 81, 87, 103], "deleg": [0, 5, 6, 16, 29, 36, 43, 54, 61, 62, 65, 72, 78, 81, 87, 99, 103, 132], "delegate_account_ss58": [0, 81], "delegate_info": [0, 8, 132], "delegate_info_lit": [8, 132], "delegate_ss58": [0, 6, 36, 65, 81], "delegatedinfo": [0, 5, 25, 81], "delegateinfo": [0, 5, 6, 25, 81], "delegateinfobas": 5, "delegateinfolit": 6, "delegateliteinfo": 6, "delegatetaketoohigh": [0, 29, 81], "delegatetaketoolow": [0, 29, 81], "delegatetxratelimitexceed": [0, 29, 81], "delta": [1, 87, 111], "dendrit": [1, 29, 77, 82, 129, 132], "dendrite_default_error": 28, "dendrite_error_map": 28, "dendrite_hotkei": 82, "dendrite_inst": 28, "dendritemixin": 28, "denot": 78, "depend": [0, 2, 75, 123], "deploi": [0, 81], "deposit": [0, 4, 16, 31, 36, 44, 49, 55, 58, 61, 65, 73, 75, 81, 87], "deprec": 122, "deprecated_messag": 122, "depth": 122, "deregister_primary_logg": 119, "deriv": [0, 11, 25, 81], "descend": 54, "describ": [0, 16, 81, 115], "descript": [0, 1, 3, 16, 22, 37, 62, 66, 81, 82, 87], "descriptor": 17, "deseri": [28, 78, 80, 82, 83, 129], "deserialized_synaps": 82, "design": [1, 28, 80, 82, 85], "desir": [54, 82, 119], "dest": [0, 55, 62, 81, 87], "destin": [0, 35, 44, 53, 55, 62, 73, 75, 81, 122, 131], "destination_coldkei": [62, 87], "destination_coldkey_ss58": [0, 35, 53, 81], "destination_hotkei": 87, "destination_hotkey_ss58": [0, 35, 53, 62, 81], "destination_netuid": [0, 35, 53, 62, 81, 87], "destination_pric": [0, 81], "destination_ss58": [0, 44, 73, 75, 81], "destination_subnet_pric": [0, 81], "destroi": 61, "detail": [0, 1, 4, 36, 65, 78, 81, 82, 85], "detect": [34, 52, 82], "determin": [0, 1, 16, 28, 36, 54, 55, 56, 65, 78, 81, 82, 85, 116, 122], "determine_block_hash": [0, 81, 99], "determine_chain_endpoint_and_network": 122, "determinist": [0, 81], "dev_framework": [93, 132], "dev_id": [0, 37, 66, 81, 125, 127, 128], "develop": [1, 54, 78, 80, 82, 85, 86, 87, 89, 93, 120, 133], "devic": [0, 37, 66, 81, 125, 127, 128], "dict": [0, 1, 2, 4, 5, 9, 10, 11, 12, 13, 15, 16, 17, 19, 20, 23, 25, 27, 28, 38, 39, 46, 54, 57, 62, 67, 68, 75, 78, 79, 80, 81, 82, 83, 85, 91, 115, 122, 123], "dictionari": [0, 1, 2, 4, 10, 12, 16, 17, 19, 25, 27, 29, 57, 75, 78, 80, 81, 82, 83, 85, 116, 122], "did": [0, 81], "diff": 127, "differ": [0, 1, 7, 27, 28, 29, 36, 53, 65, 78, 81, 82, 111, 112, 119, 125, 127], "difficulti": [0, 11, 21, 23, 54, 81, 89, 106, 127, 128], "digit": [1, 78, 82], "dir": 78, "dir_path": 78, "direct": [0, 54, 78, 81, 87, 120], "directli": [0, 4, 16, 28, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 43, 44, 45, 47, 48, 49, 51, 52, 53, 65, 66, 67, 68, 69, 70, 72, 73, 74, 76, 78, 80, 81, 82, 86], "directori": 78, "disabl": [0, 33, 51, 54, 81, 87, 99, 118, 119], "disable_debug": 119, "disable_info": 119, "disable_log": 119, "disable_third_party_logg": 119, "disable_trac": 119, "disable_warn": 119, "disable_whitelist": 87, "disallow": 1, "discord": [0, 3, 22, 37, 62, 66, 81, 87], "discov": 0, "discover": [0, 93], "discoveri": [0, 81], "disk": 78, "dispatch": [1, 31, 49], "dispatch_a": 87, "dispatch_as_fal": 87, "displai": [0, 16, 81], "disrupt": 54, "dissolut": [0, 31, 49, 54, 81], "dissolv": [0, 31, 49, 54, 58, 81, 87], "dissolve_crowdloan": [0, 81, 96, 98], "dissolve_crowdloan_extrins": [31, 49], "dissolve_network": [16, 87], "distinguish": 78, "distribut": [0, 42, 71, 78, 81, 82, 123], "divers": [0, 81], "divid": 86, "dividend": [0, 11, 12, 13, 24, 78, 81], "do": [0, 1, 81, 86, 87, 89], "doc": [0, 16, 36, 61, 65, 81, 103, 122], "document": [0, 36, 61, 65, 81, 103, 132], "doe": [0, 1, 26, 29, 30, 48, 81, 82, 109, 125, 127], "does_hotkey_exist": [0, 81, 108], "doesn": [0, 1, 29, 30, 48, 56, 78, 81, 119], "don": [0, 81], "done": 54, "down": [0, 1, 81], "drain": 20, "drand": [0, 62, 81, 88, 109], "drandtim": [0, 81], "driven": 78, "drop": [0, 81], "dtype": 83, "due": [0, 1, 40, 45, 69, 74, 81], "dummy_input": 82, "dump": 109, "duplic": [0, 29, 30, 48], "duplicatechild": [0, 29, 30, 48], "durat": [0, 4, 28, 31, 47, 49, 54, 76, 81, 82, 89], "dure": [0, 1, 21, 28, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 61, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 81, 82, 85, 109, 127], "dust": [0, 81], "dynam": [0, 1, 7, 56, 78, 81, 86, 87, 89], "dynamic_funct": 56, "dynamic_info": [8, 132], "dynamicinfo": [0, 7, 25, 81], "e": [0, 2, 4, 10, 14, 16, 31, 36, 37, 39, 40, 45, 49, 58, 61, 62, 63, 65, 66, 68, 69, 74, 75, 78, 81, 82, 85, 112, 120, 122], "e29ce36fec1a": 82, "each": [0, 1, 4, 16, 25, 28, 31, 36, 40, 42, 45, 47, 49, 62, 65, 69, 71, 74, 75, 76, 78, 81, 82, 85, 86, 87, 89, 109, 112, 119, 127], "earn": [0, 40, 69, 78, 81], "easi": 82, "easy_import": [122, 132], "econom": [0, 81], "ecosystem": [0, 78, 81, 82], "ed25519": [44, 73], "edit": [86, 87, 89], "effect": [0, 1, 16, 36, 65, 81], "effici": [0, 1, 28, 36, 61, 65, 78, 81, 82], "either": [0, 16, 34, 36, 40, 43, 45, 52, 54, 65, 69, 72, 74, 81, 112, 115, 124], "elaps": [0, 16, 36, 65, 81], "elast": 87, "element": [11, 28, 78, 83], "elig": [0, 81], "ellipsi": [0, 81, 82], "els": [0, 11, 17, 81, 122], "ema": [0, 54, 81], "ema_flow": [0, 81], "ema_halv": [54, 89], "email": [37, 66], "embed": [0, 81], "embodi": 78, "emiss": [0, 7, 11, 12, 13, 17, 20, 24, 38, 41, 42, 54, 67, 70, 71, 78, 81], "emission_histori": 24, "emission_valu": 23, "emissions_shar": 87, "emit": [0, 81], "emitt": 54, "emoji": 115, "emoji_map": 115, "emploi": 78, "empti": [0, 81, 83], "enabl": [0, 1, 21, 33, 35, 37, 40, 45, 51, 53, 54, 64, 69, 74, 78, 81, 82, 87, 89, 93, 99, 103, 118, 119, 120], "enable_consol": 119, "enable_debug": 119, "enable_default": 119, "enable_info": 119, "enable_third_party_logg": 119, "enable_trac": 119, "enable_warn": 119, "encapsul": [1, 19, 28, 78, 80, 82, 85], "encod": [0, 4, 8, 10, 20, 25, 81, 82, 85, 109, 122], "encoded_data": 25, "encompass": 82, "encount": [0, 1, 83], "encourag": 78, "encrypt": [0, 1, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 43, 44, 45, 47, 48, 49, 51, 52, 53, 60, 62, 65, 66, 67, 68, 69, 70, 72, 73, 74, 75, 76, 81, 85, 109], "encrypted_data": [60, 109], "encryptedsubmit": [34, 52, 75], "end": [0, 1, 4, 15, 28, 31, 42, 49, 54, 58, 71, 81, 82, 86, 87, 89], "end_block": 87, "endpoint": [0, 1, 2, 28, 39, 62, 68, 81, 82, 85, 99, 122, 124], "endpoint_url": [122, 124], "enforc": [0, 31, 49, 75, 81, 82, 112], "enhanc": [0, 78, 81, 82, 93], "enough": 29, "ensur": [0, 1, 28, 36, 54, 65, 78, 80, 81, 82, 85, 112, 117, 119, 127], "ensure_upd": 87, "enter": 87, "entir": [0, 28, 81], "entiti": [1, 78], "entri": [0, 40, 45, 69, 74, 78, 81], "entrypoint": 79, "enum": [0, 11, 16, 17, 25, 36, 65, 81], "enumer": [11, 16, 17, 25], "environ": [0, 1, 54, 78, 81, 82, 128], "epoch": [0, 34, 52, 54, 75, 81, 89, 91], "equal": [0, 31, 42, 49, 71, 81, 125, 127], "equip": 1, "equivocation_proof": 87, "error": [0, 1, 2, 27, 28, 30, 39, 48, 54, 68, 75, 77, 78, 81, 82, 83, 85, 99, 109, 113, 119, 122, 125, 127, 128, 130, 132], "error_messag": 122, "especi": [1, 28, 82], "essenti": [0, 1, 28, 78, 81, 82], "establish": [0, 1, 28, 81, 82], "estim": [0, 7, 81], "etc": [1, 16, 40, 45, 69, 74, 75, 80, 82, 99], "ethereum": 88, "evalu": [0, 1, 81, 85], "even": [0, 33, 51, 81], "evenli": [0, 81], "event": [0, 28, 34, 36, 52, 61, 65, 75, 78, 80, 81, 85, 119, 127], "event_id": 75, "event_loop_is_run": 28, "event_nam": 75, "everi": [0, 34, 52, 60, 81, 82], "everyth": [17, 55, 78], "evm": [54, 88], "evm_kei": 87, "evolut": 78, "evolv": 16, "exact": [0, 16, 36, 65, 78, 81, 85], "exactli": [0, 16, 17, 36, 61, 65, 81], "examin": 78, "exampl": [0, 42, 45, 71, 74, 81, 83], "examplerout": 82, "examplesynaps": 82, "exce": [0, 30, 35, 48, 53, 62, 81], "exceed": [0, 29, 31, 40, 45, 49, 62, 69, 74, 81], "except": [0, 1, 16, 28, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 55, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 81, 83, 85, 119, 122], "excess": [0, 36, 65, 81], "exchang": [1, 78, 82], "exclud": [0, 31, 49, 81, 131], "exclude_quantil": 131, "execut": [0, 1, 4, 16, 29, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 61, 62, 63, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 81, 84, 85, 91], "execute_on": 91, "execute_rev": [0, 81], "execute_step": 91, "executor": 84, "exhaust": 28, "exist": [0, 1, 16, 26, 28, 29, 30, 48, 54, 56, 61, 81, 122, 125, 127], "existenti": [0, 44, 55, 73, 75, 81], "existentialdeposit": [0, 81], "exit": [1, 29], "expans": 93, "expect": [0, 1, 28, 78, 80, 81], "experiment": 93, "expir": [0, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 81], "explicit": [0, 81], "explicitli": [0, 27, 56, 78, 80, 81, 82, 83], "explor": [0, 81, 85, 122], "expon": 54, "exponenti": [0, 81], "expos": [4, 122], "express": [62, 109], "ext_index": [0, 36, 61, 65, 81, 87], "extend": [0, 1, 81, 87, 93], "extens": 93, "extern": [0, 1, 28, 85, 120, 124], "external_ip": [1, 28, 124], "external_port": 1, "externalipnotfound": 124, "extra": [0, 40, 62, 69, 81, 85, 110, 132], "extract": [0, 1, 16, 28, 36, 65, 75, 80, 81, 122], "extract_response_json": 80, "extrem": [0, 1, 36, 65], "extrins": [0, 4, 77, 81, 85, 86, 87, 89, 99, 122, 132], "extrinsic_fe": 85, "extrinsic_funct": 85, "extrinsic_hash": [34, 52], "extrinsic_idx": 75, "extrinsic_receipt": 85, "extrinsicnotfound": 29, "extrinsicreceipt": [34, 52, 75, 85], "extrinsicrespons": [0, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 81, 85, 91, 122], "f": [0, 81, 122], "face": [0, 1, 81, 124], "facilit": [0, 1, 78, 81, 82], "factor": [0, 16, 54, 81], "factori": [0, 19, 54, 55, 57, 58, 60, 61, 62, 63, 64, 78], "fail": [0, 1, 2, 25, 28, 29, 30, 31, 34, 40, 45, 48, 49, 52, 69, 74, 81, 82, 84, 85, 109, 124, 130], "failed_verif": 82, "failur": [0, 1, 34, 39, 52, 68, 81, 82], "fall": [0, 31, 49, 81], "fallback": [0, 28, 81, 87, 99], "fallback_endpoint": [0, 81, 99], "fals": [0, 1, 7, 12, 13, 16, 25, 27, 28, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 55, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 81, 82, 83, 85, 91, 99, 109, 112, 115, 118, 122, 125, 127, 129], "far": 4, "fast": [0, 81, 109], "fast_config": 1, "fast_serv": 1, "fastapi": 1, "fastapithreadedserv": 1, "faucet": 87, "feasibl": 28, "featur": [0, 1, 81, 82, 93], "fee": [0, 19, 36, 61, 65, 81, 85, 87, 123], "feedback": [0, 81], "fees_above_high": 123, "fees_alpha": 123, "fees_below_low": 123, "fees_tao": 123, "fetch": [0, 4, 6, 16, 78, 81, 86, 131], "field": [0, 1, 2, 4, 5, 16, 40, 45, 57, 69, 74, 80, 81, 82, 83, 86, 87, 89, 107], "field_nam": [0, 81], "file": [27, 78, 86, 87, 89], "filenam": [114, 115], "fill": [1, 4, 16, 28], "filter": [0, 1, 16, 81], "filter_for_netuid": [0, 81], "filter_netuids_by_registered_hotkei": [0, 81, 108], "final": [0, 1, 4, 28, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 58, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 81, 82, 87, 127], "finalize_crowdloan": [0, 81, 96, 98], "finalize_crowdloan_extrins": [31, 49], "find": [34, 52, 75, 82], "fingerprint": 82, "finish": [28, 84, 127], "finished_queu": 127, "finnei": [0, 78, 79, 81, 85, 99, 122], "finney_entrypoint": 79, "finney_test_entrypoint": 79, "first": [0, 1, 7, 16, 27, 28, 31, 36, 49, 65, 75, 78, 81, 82, 91, 112], "fit": [0, 81], "fix": 112, "fixed_to_float": 112, "fixedpoint": [81, 112], "flag": [1, 2, 21, 28, 54, 75, 78, 81, 85, 115, 122], "flexibl": [0, 1, 81], "float": [0, 1, 5, 6, 7, 11, 12, 13, 21, 23, 24, 28, 30, 35, 40, 45, 47, 48, 53, 62, 69, 74, 76, 78, 81, 82, 99, 109, 111, 112, 122, 123, 127, 131], "float32": 131, "float_to_u64": 122, "floattensor": 131, "floor": [0, 81], "flow": [0, 1, 54, 81, 82], "flow_cutoff": 54, "fluctuat": [0, 81], "fmt": 115, "fn": 84, "focus": [0, 81], "follow": [39, 68, 82, 85, 119], "forbidden": 82, "forc": [54, 87, 127], "force_adjust_total_issu": 87, "force_batch": 87, "force_ent": 87, "force_exit": 87, "force_extend": 87, "force_proxy_typ": [0, 36, 61, 65, 81, 87], "force_release_deposit": 87, "force_set_bal": 87, "force_slash_deposit": 87, "force_transf": 87, "force_unreserv": 87, "forcefulli": [0, 81], "forev": 99, "form": [1, 78, 80, 82, 83, 109, 124], "format": [0, 1, 17, 28, 39, 60, 68, 78, 80, 81, 82, 85, 117, 122, 124, 132], "format_error_messag": 122, "formatt": [115, 117, 119], "formatted_endpoint_url": 124, "formattim": 115, "forward": [0, 1, 28, 81], "forward_class_typ": 1, "forward_custom": 1, "forward_fn": [1, 29], "forward_my_synaps": 1, "forward_my_synapse_2": 1, "foster": 1, "found": [0, 1, 16, 29, 34, 52, 75, 81, 127, 128], "foundat": [0, 1], "four": 92, "frac_bit": 112, "fraction": [0, 81], "frame": [0, 81], "framework": [1, 28, 82, 119], "free": [0, 36, 61, 65, 81], "freez": [0, 42, 54, 71, 81], "frequent": [0, 81, 120], "fresh": 1, "friendli": 1, "fro": 119, "from": [0, 1, 2, 4, 10, 11, 12, 16, 18, 19, 20, 25, 28, 31, 33, 34, 35, 36, 39, 40, 43, 44, 45, 49, 51, 52, 53, 56, 58, 60, 61, 62, 65, 68, 69, 72, 73, 74, 75, 78, 80, 81, 82, 83, 84, 85, 86, 87, 89, 93, 99, 109, 112, 113, 119, 120, 122, 124, 127, 129, 131], "from_dict": [4, 9, 15, 16, 19, 20], "from_error": 29, "from_except": 85, "from_float": 112, "from_head": 82, "from_neuron_info": 2, "from_parameter_dict": [2, 10], "from_queri": 16, "from_query_map_record": 16, "from_rao": [0, 81, 112], "from_scale_encod": 25, "from_scale_encoding_using_type_str": 25, "from_str": 2, "from_tao": [0, 81, 112], "from_tupl": 16, "from_vec_u8": 26, "from_vec_u8_v2": 26, "from_weights_bonds_and_neuron_lit": 12, "front": [0, 30, 31, 33, 35, 36, 37, 38, 39, 40, 41, 43, 44, 45, 47, 48, 49, 51, 53, 65, 66, 67, 68, 69, 70, 72, 73, 74, 76, 81], "full": [0, 35, 36, 53, 62, 65, 78, 81, 85], "full_address": 1, "fulli": [0, 31, 49, 81], "func": [6, 127], "function": [8, 16, 26, 29, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 80, 81, 85, 87, 89, 93, 117, 119, 120, 129], "fund": [0, 4, 31, 36, 44, 49, 55, 58, 61, 65, 73, 81], "fundament": [0, 1, 40, 69, 78, 81, 82], "fundrais": [0, 31, 49, 81], "funds_account": 4, "further": [0, 1, 62, 81], "futur": [0, 16, 36, 39, 54, 61, 65, 68, 78, 81, 84], "g": [0, 2, 4, 10, 14, 16, 31, 36, 37, 40, 45, 49, 58, 61, 63, 65, 66, 69, 74, 75, 81, 82, 85, 112, 120, 122], "gain": [0, 81], "garbag": [0, 81], "gas_limit": 87, "gate": 93, "gather": 1, "gener": [0, 1, 11, 25, 28, 36, 47, 61, 62, 65, 76, 80, 81, 85, 86, 87, 89, 116, 127, 131, 132], "generate_weight_hash": 131, "genericcal": [0, 31, 34, 36, 49, 52, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 65, 81], "genericextrins": [75, 85], "genuin": 1, "get": [0, 28, 75, 78, 81, 82, 84, 107, 109, 115, 119, 122, 127], "get_admin_freeze_window": [0, 81, 94], "get_all_commit": [0, 81, 95], "get_all_ema_tao_inflow": [0, 81, 106], "get_all_metagraphs_info": [0, 81, 100], "get_all_neuron_certif": [0, 81, 102], "get_all_revealed_commit": [0, 81, 95], "get_all_subnets_info": [0, 81, 106], "get_all_subnets_netuid": [0, 81, 106], "get_and_save_latest_vers": 130, "get_async_subtensor": 0, "get_auto_stak": [0, 81, 105], "get_bal": [0, 81, 108], "get_block_hash": [0, 81, 94], "get_block_info": [0, 81, 94], "get_caller_nam": 122, "get_children": [0, 81, 106, 108], "get_children_pend": [0, 81, 106, 108], "get_commit": [0, 81, 95], "get_commitment_metadata": [0, 81, 95], "get_config": 119, "get_const": 4, "get_cpu_count": 127, "get_crowdloan": [0, 81, 96], "get_crowdloan_by_id": [0, 81, 96], "get_crowdloan_const": [0, 81, 96], "get_crowdloan_contribut": [0, 81, 96], "get_crowdloan_next_id": [0, 81, 96], "get_current_block": [0, 78, 81, 94], "get_deleg": [0, 81, 97, 108], "get_delegate_by_hotkei": [0, 81, 97, 108], "get_delegate_ident": [0, 81, 94, 97, 99], "get_delegate_tak": [0, 81, 97, 108], "get_ema_tao_inflow": [0, 81, 106], "get_encrypted_commit": 0, "get_event_data_by_event_nam": 75, "get_existential_deposit": [0, 81, 94], "get_explorer_url_for_network": 122, "get_external_ip": 124, "get_extrinsic_fe": [0, 81, 98], "get_fe": 123, "get_fees_in_rang": 123, "get_formatted_ws_endpoint_url": 124, "get_function_nam": 122, "get_hash": 122, "get_hotkey_own": [0, 81, 108], "get_hotkey_stak": [0, 81, 105, 108], "get_human_read": 121, "get_hyperparamet": [0, 81, 106], "get_last_bonds_reset": [0, 81, 95], "get_last_commitment_bonds_reset_block": [0, 81, 95], "get_level": 119, "get_liquidity_list": [0, 81, 106], "get_max_logger_name_length": 116, "get_mechanism_count": [0, 81, 106], "get_mechanism_emission_split": [0, 81, 106], "get_mechid_storage_index": 122, "get_metagraph": [0, 81], "get_metagraph_info": [0, 81, 100], "get_mev_commitment_and_ciphertext": 75, "get_mev_shield_current_kei": [0, 81, 101], "get_mev_shield_next_kei": [0, 81, 101], "get_mev_shield_submiss": [0, 81, 101], "get_minimum_required_stak": [0, 81, 94, 105, 108], "get_netuid_and_mechid_by_storage_index": 122, "get_netuids_for_hotkei": [0, 81, 108], "get_neuron_certif": [0, 81, 102], "get_neuron_for_pubkey_and_subnet": [0, 81, 106], "get_next_epoch_start_block": [0, 81, 106], "get_null_neuron": [12, 13], "get_old_stak": 75, "get_owned_hotkei": [0, 81, 108], "get_par": [0, 81, 106, 108], "get_proxi": [0, 81, 103], "get_proxies_for_real_account": [0, 81, 103], "get_proxy_announc": [0, 81, 103], "get_proxy_const": [0, 81, 103], "get_queu": 119, "get_required_field": 82, "get_revealed_commit": [0, 81, 95], "get_revealed_commitment_by_hotkei": [0, 81, 95], "get_root_alpha_dividends_per_subnet": [0, 81, 105], "get_root_claim": [0, 81, 105], "get_root_claim_typ": [0, 81, 105], "get_root_claimable_all_r": [0, 81, 105], "get_root_claimable_r": [0, 81, 105], "get_root_claimable_stak": [0, 81, 105], "get_save_dir": 78, "get_selective_metagraph_commit": 11, "get_siz": 82, "get_stak": [0, 81, 105, 108], "get_stake_add_fe": [0, 81, 105, 108], "get_stake_for_coldkey_and_hotkei": [0, 81, 105, 108], "get_stake_for_hotkei": [0, 81, 108], "get_stake_info_for_coldkei": [0, 81, 105, 108], "get_stake_movement_fe": [0, 81, 105, 108], "get_stake_weight": [0, 81, 105], "get_status_messag": 127, "get_subnet_burn_cost": [0, 81, 106], "get_subnet_hyperparamet": [0, 81, 106], "get_subnet_info": [0, 81, 106], "get_subnet_owner_hotkei": [0, 81, 106], "get_subnet_pric": [0, 81, 106], "get_subnet_reveal_period_epoch": [0, 81, 106], "get_subnet_validator_permit": [0, 81, 106], "get_timelocked_weight_commit": [0, 81, 95], "get_timestamp": [0, 81, 94], "get_total_s": 82, "get_total_subnet": [0, 81, 106], "get_transfer_fe": [0, 81, 108], "get_transfer_fn_param": 75, "get_uid_for_hotkey_on_subnet": [0, 81, 106], "get_unit": 112, "get_unstake_fe": [0, 81, 105, 108], "get_vote_data": [0, 81, 94], "getdefaultencod": 122, "getter": [0, 81], "github": [0, 3, 37, 62, 66, 81], "github_repo": [22, 37, 62, 66, 87], "give": [0, 16, 36, 65, 81, 84, 85, 112, 113], "given": [0, 1, 16, 25, 35, 37, 54, 66, 75, 78, 80, 81, 82, 83, 84, 112, 122, 125, 127, 129, 131], "global": [0, 54, 81], "global_fees_alpha": 123, "global_fees_tao": 123, "global_max_subnet_count": 122, "glorifi": 82, "glossari": [0, 81], "go": [0, 1, 81], "goal": [0, 81], "goe": [37, 45, 66, 74, 81], "govern": [0, 4, 16, 36, 65, 78, 81], "grace": [0, 81], "gracefulli": 1, "grandpa": [54, 88], "grant": [0, 16, 36, 65], "graph": 78, "great": 1, "greater": [31, 49, 78, 131], "growth": [0, 81], "grpc": 1, "guarante": 55, "guard": [1, 122], "h": [114, 121], "ha": [0, 1, 4, 13, 16, 17, 28, 29, 31, 36, 49, 54, 55, 61, 65, 78, 80, 81, 127], "half": [0, 81], "halt": 1, "halv": 54, "handl": [0, 1, 7, 16, 17, 24, 28, 36, 65, 78, 80, 81, 82, 85, 103, 109, 119, 123, 124, 131], "handler": [1, 117, 119, 122], "happen": [0, 4, 81], "hardcod": [0, 81], "harm": 16, "hash": [0, 1, 16, 26, 34, 36, 39, 47, 52, 60, 61, 62, 65, 68, 75, 76, 81, 82, 85, 87, 122, 127, 128, 131], "hash_rat": 127, "hash_rate_perpetu": 127, "hash_valu": 82, "hasn": 1, "have": [0, 1, 16, 29, 30, 31, 34, 36, 48, 49, 52, 54, 61, 62, 65, 75, 81, 82, 84], "head": [0, 81], "header": [0, 1, 28, 29, 80, 81, 82, 85, 86], "header_s": 82, "height": [0, 16, 36, 61, 65, 81, 87], "held": [0, 16, 78, 81], "hello": [81, 82], "help": [0, 1, 16, 17, 27, 29, 81, 82, 83, 84, 85, 99, 112, 119, 122, 124, 130], "helper": [0, 25, 75, 81, 82, 85, 112, 117, 132], "here": [16, 28], "hex": [0, 16, 26, 36, 60, 61, 65, 75, 81], "hex_to_byt": 122, "hex_to_ss58": 122, "hexadecim": [82, 122], "hi": [31, 49], "high": [0, 21, 29, 54, 81], "higher": [78, 85], "hint": [86, 87, 89], "histor": [0, 28, 78, 81], "history_block": 78, "hit": [0, 30, 48], "hold": [1, 4, 78, 85, 119], "holder": [0, 81], "home_dir": 79, "hook": [0, 81], "hop": [0, 81], "host": [1, 39, 68], "hot": [0, 81], "hotkei": [0, 1, 2, 5, 6, 11, 12, 13, 16, 20, 24, 25, 29, 30, 33, 34, 35, 40, 43, 45, 46, 47, 48, 51, 52, 53, 54, 62, 64, 69, 72, 74, 75, 76, 78, 81, 82, 85, 87, 89, 99, 108, 122, 127, 128], "hotkey_byt": 127, "hotkey_ss58": [0, 5, 20, 30, 33, 35, 40, 43, 45, 48, 51, 53, 69, 72, 74, 75, 81], "hotkeyaccountnotexist": [0, 29, 81], "how": [0, 1, 4, 7, 17, 54, 78, 81], "howev": [28, 78], "hparam": 78, "http": [0, 1, 16, 28, 36, 61, 65, 79, 81, 82, 103, 122], "hub": 120, "human": [1, 121], "hyperparam": 131, "hyperparamet": [0, 21, 54, 81, 91], "i": [0, 1, 2, 4, 5, 6, 7, 12, 13, 16, 17, 18, 19, 21, 25, 26, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 56, 60, 61, 62, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 80, 81, 82, 83, 84, 85, 86, 87, 89, 91, 92, 99, 109, 112, 115, 119, 122, 123, 124, 125, 127, 128, 129, 130, 131, 133], "i64f64": 54, "i96f32": 54, "id": [0, 1, 4, 5, 25, 28, 33, 34, 37, 45, 51, 52, 54, 64, 66, 74, 75, 81, 82, 87, 122, 123, 125, 127, 128, 131], "ideal": 7, "ident": [0, 3, 11, 16, 22, 29, 36, 37, 62, 65, 66, 78, 81, 82, 87, 122], "identif": [78, 82], "identifi": [0, 1, 4, 12, 13, 19, 28, 31, 36, 39, 40, 42, 43, 45, 47, 49, 54, 58, 61, 62, 65, 68, 69, 71, 72, 74, 75, 76, 78, 81, 82, 87, 122, 131], "identityerror": 29, "idx": [4, 40, 45, 69, 74, 91], "if_els": 87, "ignor": [0, 28, 81], "ij": 78, "imag": [3, 87], "immedi": [0, 1, 16, 34, 36, 40, 52, 61, 65, 69, 81], "immun": [0, 21, 54, 81], "immune_neuron": [54, 89], "immunity_period": [0, 11, 21, 23, 54, 81, 89, 106], "immunityperiod": [0, 11, 81], "immut": [0, 81], "impact": [0, 35, 53, 78], "impl": 16, "implement": [1, 16, 27, 28, 56, 78, 80, 82, 84, 85, 93, 127], "impli": [0, 78, 81], "implicitli": 112, "import": [0, 1, 27, 28, 78, 81, 82, 85, 86, 93, 99, 109, 113, 120], "import_text": 86, "importerror": 78, "improp": 54, "improv": [82, 120], "in_block": [54, 87], "inaccess": [0, 36, 61, 65, 81], "inact": 78, "incent": [0, 11, 12, 13, 24, 37, 40, 69, 78, 81], "incentiv": 78, "includ": [0, 1, 2, 4, 8, 12, 16, 19, 28, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 60, 61, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 80, 81, 82, 85, 93, 103, 109, 115, 117], "inclus": [0, 33, 34, 35, 36, 37, 38, 39, 40, 42, 43, 44, 45, 46, 47, 51, 52, 53, 65, 66, 67, 68, 69, 71, 72, 73, 74, 75, 76, 81], "incom": [1, 81], "incorrect": 122, "increas": [0, 1, 29, 35, 40, 53, 62, 69, 81, 82], "increase_tak": [43, 62, 72, 87], "increment": [0, 81], "inde": 1, "indefinit": [0, 81], "index": [0, 4, 15, 36, 40, 45, 61, 65, 69, 74, 75, 81, 85, 87, 122, 123], "indexerror": 109, "indic": [0, 1, 12, 13, 21, 28, 29, 33, 34, 39, 51, 52, 54, 64, 68, 78, 81, 82, 85, 119], "indispens": 82, "individu": [0, 28, 40, 45, 69, 74, 78, 81], "infer": 78, "inflow": [0, 81], "influenc": [0, 78, 81], "info": [0, 1, 2, 7, 9, 10, 11, 23, 24, 57, 85, 87, 113, 118, 119], "info_bas": [2, 3, 5, 6, 7, 8, 11, 12, 13, 14, 15, 18, 20, 21, 23, 24, 132], "info_dictionari": 122, "infobas": [2, 3, 5, 6, 7, 9, 11, 12, 13, 14, 15, 18, 20, 21, 23, 24], "inform": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 13, 14, 16, 18, 20, 22, 26, 28, 37, 39, 40, 62, 66, 68, 69, 75, 78, 81, 82, 85, 119, 122, 127, 128], "infrastructur": [78, 81], "inherit": [82, 85], "init": 87, "initarg": 84, "initi": [0, 1, 4, 16, 17, 19, 27, 28, 29, 31, 33, 41, 49, 51, 58, 64, 70, 78, 80, 81, 83, 84, 85, 99, 109, 112, 115, 119, 122, 124, 130], "inject": [0, 81], "inner": [0, 16, 34, 36, 52, 61, 65, 75, 81], "inner_cal": 63, "inner_subtensor": 99, "input": [1, 16, 17, 25, 28, 78, 80, 82, 83, 87, 127, 131], "input_": 25, "input_obj": 82, "insight": [0, 81], "inspect": [1, 40, 45, 69, 74, 85], "instal": 78, "install_signal_handl": 1, "instanc": [0, 1, 2, 4, 10, 12, 13, 16, 19, 26, 28, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 74, 75, 76, 78, 80, 81, 82, 84, 85, 92, 99, 103, 109, 112, 116, 119, 122, 125, 127, 131], "instancefilt": 16, "instanti": [0, 78, 80], "instead": [0, 1, 29, 80, 81], "instrument": 78, "int": [0, 1, 2, 4, 5, 6, 7, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25, 26, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 55, 57, 58, 61, 62, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 79, 81, 82, 83, 85, 91, 92, 109, 111, 112, 115, 116, 119, 121, 122, 123, 124, 125, 127, 128, 129, 130, 131], "int16": 54, "int64": [128, 131], "int_to_ip": 124, "int_val": 124, "intact": 1, "integ": [0, 42, 47, 62, 71, 76, 81, 82, 112, 123, 124, 131], "integr": [0, 1, 78, 81, 82], "intellig": [1, 78, 81], "intend": [80, 82, 86, 87, 89], "intens": [0, 81], "intent": [0, 1, 16, 36, 65, 81], "inter": 78, "interact": [0, 1, 28, 30, 33, 34, 35, 37, 38, 41, 48, 51, 52, 53, 66, 67, 70, 78, 81, 82, 99, 112], "intercept": 1, "interconnect": [0, 81], "interconnected": 78, "interfac": [0, 1, 37, 54, 56, 66, 78, 80, 81], "interfer": [0, 1, 81], "intermediari": 1, "intern": [1, 28, 40, 45, 69, 74, 80, 85, 93, 120], "internalservererror": 29, "interneuron": 81, "interoper": 112, "interpret": [19, 28, 82, 112], "interv": [21, 54, 89], "intuit": 120, "invalid": [0, 29, 81, 83], "invalidchild": [0, 29, 30, 48], "invalidconfigfil": 27, "invalidrequestnameerror": 29, "invers": 131, "invest": 78, "invok": [0, 1], "involv": [0, 1, 16, 78, 81, 82], "ip": [0, 1, 2, 10, 14, 28, 39, 62, 68, 78, 82, 85, 87, 124], "ip__str__": 124, "ip_address": 82, "ip_info": [8, 132], "ip_str": [2, 124], "ip_to_int": 124, "ip_typ": [2, 10, 14, 62, 85, 87, 124], "ip_vers": 124, "ipifi": 124, "ipinfo": [10, 25], "ipv4": [2, 10, 14, 124], "ipv6": [2, 10, 14, 124], "is_async": 99, "is_blacklist": 82, "is_dynam": 7, "is_empti": 84, "is_failur": 82, "is_fast_block": [0, 81, 94], "is_hotkey_deleg": [0, 81, 97, 108], "is_hotkey_regist": [0, 81, 108], "is_hotkey_registered_ani": [0, 81, 108], "is_hotkey_registered_on_subnet": [0, 81, 106, 108], "is_in_admin_freeze_window": [0, 81, 94], "is_instance_namedtupl": 92, "is_nul": [12, 13], "is_opt": 25, "is_regist": 20, "is_run": 1, "is_serv": 2, "is_set": 27, "is_stal": 127, "is_stale_async": 127, "is_subnet_act": [0, 81, 106], "is_success": 82, "is_timeout": 82, "is_valid": 16, "is_valid_bittensor_address_or_public_kei": 122, "is_valid_ss58_address": 122, "is_vec": 25, "iso8601": 115, "issu": [1, 28], "issuanc": 54, "item": [0, 16, 60, 81, 82, 87], "iter": [0, 28, 78, 81, 82, 83, 85, 116], "its": [0, 1, 2, 16, 28, 36, 40, 43, 65, 69, 72, 75, 78, 81, 82, 85, 119, 127], "itself": [0, 1, 36, 65, 81, 82, 85], "j": 78, "json": [1, 2, 28, 79, 80, 82], "json_respons": 28, "json_str": 2, "jsondecodeerror": 2, "jsonrespons": 1, "judgment": 78, "just": [0, 78, 81, 99], "k": [7, 83], "kappa": [11, 21, 23, 54, 89], "keccak": 128, "keccak256": [39, 68], "keep": [0, 17, 38, 44, 53, 55, 62, 67, 73, 81, 82, 93], "keep_al": [0, 44, 55, 73, 75, 81, 87], "keepsubnet": [0, 17, 38, 62, 67, 81], "keepsubnetsdescriptor": 17, "kei": [0, 1, 2, 12, 16, 18, 19, 25, 30, 34, 36, 40, 44, 45, 46, 47, 48, 52, 54, 56, 60, 61, 62, 65, 69, 73, 74, 75, 76, 78, 81, 82, 83, 85, 87, 103, 122, 131], "kem": [0, 34, 52, 60, 75, 81], "kem_ct": [0, 60, 81], "kem_len": [0, 60, 81], "key_epoch_histori": [0, 81], "key_hash": [34, 52, 75], "key_owner_proof": 87, "keyerror": [0, 81], "keyfil": [0, 30, 48, 81, 122], "keyfileerror": [0, 30, 48, 81, 122], "keyless": [0, 36, 65, 81], "keypair": [0, 28, 34, 46, 52, 75, 81, 85], "keyword": [80, 82, 83, 129], "kill": [0, 36, 55, 65, 81], "kill_prefix": 87, "kill_pur": [0, 36, 61, 65, 81, 87], "kill_pure_proxi": [0, 36, 65, 81, 103], "kill_pure_proxy_extrins": [36, 65], "kill_respons": [36, 65], "kill_storag": 87, "killpur": 61, "know": 1, "known": [0, 81, 122], "kwarg": [28, 56, 80, 83, 84, 92, 115, 119, 129], "lack": 124, "larg": [0, 28, 81], "larger": 1, "last": [0, 1, 12, 13, 54, 78, 81, 99], "last_drand_round": [0, 81, 94], "last_step": [7, 11, 78], "last_upd": [11, 12, 13, 24, 78], "last_updated_block": [0, 81], "laststep": 11, "lastupd": 11, "latenc": 82, "latent": 79, "latent_lite_entrypoint": 79, "later": [0, 31, 36, 49, 65, 78, 81], "latest": [0, 78, 81, 130], "latest_block_path": 78, "layer": [0, 1, 16, 78, 81], "lazi": 127, "lazili": 28, "lazyloadedtorch": 127, "le": [0, 60, 81], "lead": 1, "leakag": 28, "learn": [0, 78, 81, 82], "learnbittensor": [0, 16, 36, 61, 65, 81, 103], "leas": [0, 81], "lease_id": 87, "least": [0, 1, 16, 55, 81], "ledger": 78, "left": [0, 36, 54, 61, 65, 81, 124], "leftov": [0, 81], "legaci": 127, "legacy_method": 99, "legacy_torch_api_compat": 127, "legal": [0, 81], "len": [0, 81, 85], "length": [0, 39, 42, 54, 68, 71, 81, 82, 116], "less": [0, 78], "level": [0, 1, 21, 78, 81, 85, 99, 107, 113, 115, 117, 119, 120, 132], "levelnam": [114, 115], "leverag": [78, 119], "librari": 119, "life": [0, 81], "lifecycl": [0, 1, 81], "lifespan": 82, "light": 78, "lighter": 6, "lightweight": [0, 81], "like": [0, 1, 27, 28, 62, 81, 82, 85, 115], "limit": [0, 4, 16, 21, 29, 30, 31, 34, 45, 48, 49, 52, 54, 62, 74, 81, 127, 128, 131], "limit_pric": [62, 87], "line": [0, 1, 81, 85, 119, 125, 127], "lineno": [114, 115], "link": [0, 1, 20, 36, 37, 61, 65, 66, 81, 85], "liquid": [0, 21, 32, 50, 54, 64, 81, 87, 122, 132], "liquid_alpha_en": [11, 21], "liquidalphaen": 11, "liquidity_delta": [0, 33, 51, 64, 81, 87], "liquidityposit": [0, 81, 123], "list": [0, 1, 4, 5, 6, 9, 11, 12, 13, 15, 16, 17, 18, 24, 25, 27, 28, 30, 37, 40, 42, 45, 47, 48, 54, 62, 66, 69, 71, 74, 75, 76, 78, 81, 82, 83, 85, 86, 87, 89, 91, 99, 122, 125, 127, 129, 131], "list_from_dict": 9, "list_from_vec_u8": 13, "listen": [1, 119], "lite": [0, 12, 78, 79, 81, 99], "liter": [0, 17, 38, 43, 62, 67, 72, 81, 85, 122], "live": 78, "load": [0, 1, 27, 78, 81, 109, 127], "load_from_path": 78, "local": [0, 1, 28, 54, 78, 79, 81, 85, 86, 122, 124], "local_entrypoint": 79, "local_synaps": 28, "localhost": 99, "locat": 78, "lock": [0, 4, 16, 20, 31, 36, 49, 54, 61, 65, 81, 103, 127], "lock_cost": [54, 89], "log": [0, 1, 27, 28, 37, 66, 81, 85, 99, 113, 114, 115, 116, 117, 118, 119, 122, 127, 128], "log_and_handle_error": 1, "log_cuda_error": 128, "log_except": 28, "log_format": 115, "log_level": 1, "log_level_color_prefix": 115, "log_no_torch_error": 127, "log_trace_format": 115, "log_verbos": [0, 37, 66, 81, 85, 99, 125, 127], "logger": [84, 113, 116, 117, 119], "logging_dir": 119, "loggingconfig": 119, "loggingmachin": [113, 117, 132], "logic": [1, 16, 80, 82, 85, 93, 109], "logo": [37, 62, 66], "logo_url": [22, 37, 62, 66, 87], "logrecord": 115, "long": [0, 16, 54, 81, 120], "longer": 28, "longest": 116, "longtensor": 131, "look": [16, 34, 52], "loop": 28, "lost": [0, 36, 61, 65, 81], "low": [0, 21, 29, 54, 81, 85], "lower": [0, 33, 36, 51, 61, 64, 65, 81, 131], "lowest": 54, "lynch": 109, "m": 114, "machin": [1, 78, 82], "made": [0, 16, 21, 29, 36, 61, 65, 81], "mai": [0, 16, 31, 36, 49, 54, 65, 78, 81, 93, 112], "main": [1, 87, 93, 109, 122, 127], "mainli": [78, 99], "mainnet": [0, 81], "maintain": [0, 1, 16, 78, 81, 82, 86, 93, 120, 123], "mainten": 1, "major": 78, "make": [0, 1, 16, 28, 36, 46, 61, 65, 75, 78, 81, 82, 109], "malici": 1, "manag": [0, 1, 16, 17, 19, 27, 28, 36, 65, 78, 80, 81, 82, 91, 94, 95, 96, 97, 98, 100, 101, 102, 103, 104, 105, 106, 108, 116, 119, 123], "mani": [0, 29, 30, 31, 48, 49, 81], "manipul": 1, "manner": [1, 127], "manual": [0, 36, 65, 81, 86, 87, 89], "map": [0, 4, 5, 12, 13, 16, 40, 45, 69, 74, 81, 83, 122, 124], "mark": 1, "markdecryptionfail": [34, 52], "match": [0, 1, 16, 17, 34, 36, 42, 52, 56, 61, 65, 71, 75, 81, 112, 131], "math": 78, "matrix": [0, 78], "max": [0, 1, 29, 34, 39, 52, 54, 68, 81, 131], "max_allowed_attempt": [0, 37, 66, 81], "max_allowed_uid": [54, 89], "max_allowed_valid": [23, 54, 89], "max_attempt": [0, 81, 122], "max_burn": [11, 21, 54, 89], "max_difficulti": [11, 21, 54, 89], "max_fee_per_ga": 87, "max_int_weight": 131, "max_n": [23, 54, 89], "max_priority_fee_per_ga": 87, "max_registrations_per_block": [54, 89], "max_regs_per_block": [11, 21], "max_subnet": [54, 89], "max_tick": 123, "max_uid": [11, 78], "max_valid": [11, 21], "max_valu": 131, "max_weight": 87, "max_weight_limit": [0, 21, 23, 81, 106, 131], "max_weights_limit": 11, "max_work": [1, 84], "maxattemptsexcept": 29, "maxburn": 11, "maxcontributor": [0, 4, 81], "maxdifficulti": 11, "maximum": [0, 4, 16, 21, 28, 31, 34, 35, 36, 37, 40, 45, 49, 52, 53, 54, 58, 60, 62, 65, 66, 69, 74, 81, 82, 84, 131], "maximumblockdur": [0, 4, 31, 49, 81], "maxpend": [0, 16, 81], "maxproxi": [0, 16, 81], "maxregsperblock": 11, "maxsiz": 84, "maxsuccessexcept": 29, "maxuid": 11, "maxvalid": 11, "maxweightslimit": [0, 11, 81], "maybe_period": 87, "maybe_split": [42, 54, 71, 89, 131], "maybe_timepoint": 87, "mean": [0, 31, 36, 49, 61, 65, 81, 82, 125, 127], "measur": 78, "mech": [0, 81], "mech_count": [42, 71], "mechan": [0, 1, 36, 40, 41, 42, 47, 54, 62, 65, 69, 70, 71, 76, 78, 81, 82, 109, 122], "mechanism_count": [54, 78, 89], "mechanisms_emissions_split": 78, "mechid": [0, 11, 47, 54, 76, 78, 81, 122], "mecid": [62, 87], "median": 54, "meet": [0, 1, 81], "member": [0, 81], "mempool": [0, 30, 31, 33, 35, 36, 37, 38, 39, 40, 41, 43, 44, 45, 47, 48, 49, 51, 53, 65, 66, 67, 68, 69, 70, 72, 73, 74, 76, 81], "merg": [27, 28], "messag": [0, 1, 25, 28, 29, 81, 82, 85, 113, 114, 115, 119, 122, 127], "met": 29, "meta_info": [0, 81], "metadata": [0, 12, 13, 25, 29, 37, 39, 66, 68, 78, 81, 82, 85, 86, 87, 89], "metadataerror": [29, 39, 68], "metagraph": [0, 28, 77, 81, 99, 131, 132], "metagraph_info": [8, 132], "metagraph_state_dict_ndarray_kei": 78, "metagraphinfo": [0, 11, 25, 81], "metagraphinfoemiss": [11, 78], "metagraphinfoparam": [11, 78], "metagraphinfopool": [11, 78], "metagraphmixin": 78, "method": [0, 1, 7, 16, 17, 19, 24, 26, 28, 36, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 65, 78, 80, 81, 82, 84, 85, 99, 112, 115, 119, 122, 127], "metric": [0, 78, 81, 82], "mev": [0, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 43, 44, 45, 47, 48, 49, 51, 52, 53, 60, 65, 66, 67, 68, 69, 70, 72, 73, 74, 75, 76, 81, 85, 99, 101], "mev_extrins": 85, "mev_protect": [0, 30, 31, 33, 35, 36, 37, 38, 39, 40, 41, 43, 44, 45, 47, 48, 49, 51, 53, 65, 66, 67, 68, 69, 70, 72, 73, 74, 76, 81], "mev_shield": [32, 50, 59, 99, 132], "mev_submit_encrypt": [0, 81, 101], "mevshield": [0, 34, 52, 60, 75, 81, 101], "middlewar": 1, "middleware_cl": 1, "might": 1, "migrat": 54, "millifi": 121, "millisecond": [0, 115], "min": 54, "min_allowed_uid": [54, 89], "min_allowed_weight": [0, 11, 21, 23, 54, 81, 89, 106, 131], "min_burn": [11, 21, 54, 89], "min_contribut": [0, 4, 31, 49, 58, 81, 87], "min_difficulti": [11, 21, 54, 89], "min_stak": [54, 89], "min_tick": 123, "minallowedweight": [0, 11, 81], "minburn": 11, "mindifficulti": 11, "mine": [0, 81], "miner": [0, 21, 27, 40, 54, 69, 78, 81], "miner_uid": [0, 81], "miners_dir": 79, "minimum": [0, 4, 21, 30, 31, 48, 49, 54, 58, 81, 131], "minimumblockdur": [0, 4, 31, 49, 81], "minimumdeposit": [0, 4, 81], "minu": [0, 81], "minut": [0, 81], "mismatch": 1, "miss": [0, 81], "ml": [0, 34, 52, 60, 75, 81, 82], "ml_kem_768_public_kei": 75, "mlkem768_public_key_s": 79, "mock": [0, 81, 85, 99], "modal": 23, "mode": [0, 81, 119], "model": [0, 78, 80, 81, 82, 83], "model_config": [80, 82, 83], "model_dump_json": 82, "model_validate_json": 82, "modern": 1, "modif": 82, "modifi": [0, 25, 33, 51, 54, 80, 81], "modify_liquid": [0, 81, 98], "modify_liquidity_extrins": [33, 51], "modify_posit": [64, 87], "modul": [8, 86, 93, 117, 120], "modular": 93, "module_id": 75, "module_nam": [0, 81], "moment": 123, "monitor": 82, "monoton": 82, "more": [0, 31, 36, 37, 49, 61, 65, 66, 78, 81, 120, 121, 125, 127], "most": [0, 16, 78, 81, 85], "move": [0, 21, 35, 53, 54, 62, 81], "move_all_stak": [0, 35, 53, 81], "move_stak": [0, 16, 32, 50, 62, 81, 87, 98, 105, 132], "move_stake_extrins": [35, 53], "movement": 0, "moving_pric": [7, 11], "movingpric": 11, "msg": [119, 122], "mtl": 0, "much": [0, 7, 78, 81], "multi": 1, "multilin": 86, "multipl": [0, 1, 16, 28, 31, 36, 49, 65, 78, 81, 91, 125, 127], "multipli": [21, 54], "multiprocess": 127, "multisig": 88, "munch": 27, "must": [0, 16, 19, 30, 31, 33, 34, 36, 41, 42, 48, 49, 51, 52, 54, 56, 60, 61, 65, 70, 71, 78, 80, 81, 85, 112, 119, 122, 124, 131], "mutat": 1, "mutual": [0, 81], "my_axon": 1, "my_config": 1, "my_liquidity_delta": [0, 81], "my_wallet": [0, 1, 81], "mycustomsynaps": 1, "mysynaps": [1, 82], "n": [78, 121, 122, 131], "n_block": 109, "nai": 15, "name": [0, 1, 3, 4, 11, 16, 25, 28, 29, 37, 56, 62, 66, 78, 80, 81, 82, 83, 84, 85, 87, 109, 114, 115, 116, 119, 122], "namedtupl": [86, 87, 89, 92, 119], "namespac": [27, 120], "nanosecond": 111, "nanoseconds_in_second": 111, "nativ": 82, "natur": [28, 78], "navig": 0, "ndarrai": [78, 83, 131], "nearest": 123, "necessari": [1, 28, 78, 82], "need": [0, 1, 25, 31, 49, 81, 82, 93, 109], "neg": [0, 33, 51, 54, 64, 81], "nest": [11, 27, 63], "net": [0, 81], "netuid": [0, 1, 5, 7, 11, 12, 13, 19, 20, 23, 24, 28, 29, 30, 33, 35, 37, 38, 39, 40, 41, 42, 45, 47, 48, 51, 53, 54, 57, 62, 64, 66, 67, 68, 69, 70, 71, 74, 75, 76, 78, 81, 85, 87, 89, 91, 92, 112, 122, 123, 125, 127, 131], "network": [0, 1, 2, 4, 5, 7, 8, 12, 13, 16, 17, 19, 24, 28, 29, 30, 35, 37, 38, 39, 40, 45, 47, 48, 53, 54, 62, 66, 67, 68, 69, 74, 75, 76, 78, 79, 80, 81, 82, 85, 86, 99, 103, 122, 123, 125, 127, 129, 131, 132], "network_explorer_map": 79, "network_map": [79, 122], "network_registered_at": [7, 11, 78], "networkregisteredat": 11, "neural": 78, "neurip": 78, "neuron": [0, 1, 2, 8, 12, 13, 16, 28, 29, 30, 37, 38, 39, 40, 43, 47, 48, 54, 62, 66, 67, 68, 69, 72, 76, 78, 81, 82, 99, 131, 132], "neuron_for_uid": [0, 81, 102], "neuron_incent": 78, "neuron_info": [2, 8, 132], "neuron_info_lit": [8, 12, 132], "neuron_lit": 12, "neuron_rank": 78, "neuroninfo": [0, 12, 25, 78, 81], "neuroninfolit": [0, 12, 13, 25, 78, 81], "neurons_lit": [0, 81, 102], "never": 54, "new": [0, 1, 4, 11, 18, 25, 26, 27, 28, 31, 37, 38, 41, 49, 54, 58, 62, 66, 67, 70, 78, 80, 81, 82, 83, 84, 87, 122, 125, 127], "new_author": [54, 87], "new_cap": [0, 31, 49, 58, 81, 87], "new_coldkei": [18, 87], "new_end": [0, 31, 49, 58, 81, 87], "new_fre": 87, "new_hotkei": 87, "new_limit": 87, "new_min_contribut": [0, 31, 49, 58, 81, 87], "new_root_claim_typ": [0, 38, 62, 67, 81, 87], "new_valu": 89, "newblockev": 127, "newli": [0, 81], "next": [0, 1, 54, 81, 86, 87, 89, 91], "next_author": [54, 87], "nextkei": [0, 34, 52, 60, 75, 81], "nn": [2, 10, 28, 78], "no_error": 109, "node": [0, 1, 78, 81, 82, 85, 99, 109, 129], "nomin": [0, 5, 6, 29, 43, 54, 62, 72, 81], "nominationerror": 29, "non": [0, 1, 16, 29, 30, 31, 36, 48, 49, 65, 78, 81, 82, 85, 86, 112, 122], "non_sudo_cal": [86, 132], "nonassociatedcoldkei": [0, 29, 30, 48, 81], "nonc": [0, 1, 34, 37, 46, 52, 60, 62, 66, 75, 81, 82, 85, 87, 111, 125, 127, 128], "nonce24": [0, 60, 81], "nonce_kei": [0, 46, 75, 81, 85], "nonce_start": 128, "noncrit": 16, "none": [0, 1, 4, 7, 11, 12, 13, 16, 25, 26, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 56, 58, 61, 62, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 80, 81, 82, 83, 84, 85, 91, 92, 99, 109, 111, 112, 115, 116, 119, 122, 125, 127, 128, 131], "nonfung": 16, "nonstandard": [0, 81], "nontorchmetagraph": 78, "nontransf": [0, 16, 36, 61, 65, 81], "normal": [0, 16, 17, 36, 54, 65, 81, 131], "normalize_max_weight": 131, "notdelegateerror": 29, "note": [33, 39, 51, 68, 86, 109, 124], "note_preimag": 87, "note_stal": 87, "notenoughstaketosetchildkei": [0, 29, 30, 48], "notregisterederror": 29, "notverifiedexcept": 29, "now": [0, 1, 36, 61, 65, 78, 81, 82, 85, 87], "np": [83, 131], "null": [0, 12, 13, 81], "null_entri": 84, "num": 121, "num_neuron": 131, "num_proc": 127, "num_process": [0, 37, 66, 81, 125, 127], "num_uid": [11, 78], "number": [0, 1, 2, 4, 14, 16, 18, 21, 25, 26, 29, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 58, 61, 62, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 81, 82, 84, 85, 99, 109, 112, 121, 122, 125, 127, 128, 131], "number_of_proxy_typ": 16, "numer": 1, "numpi": [0, 47, 76, 78, 81, 83, 127, 128, 131], "numpyortorch": 78, "numuid": 11, "obj": [82, 92], "object": [0, 1, 2, 4, 7, 9, 10, 11, 13, 16, 19, 20, 24, 25, 28, 29, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 80, 81, 82, 83, 84, 85, 92, 99, 112, 119, 122], "obtain": [0, 19, 81], "occur": [0, 1, 28, 81], "off": [28, 119, 122], "offer": [0, 1, 28, 81], "offlin": [1, 54, 78], "often": 78, "old": [18, 99], "old_coldkei": [18, 87], "oldest_round": 87, "omit": [0, 81, 115], "on_initi": [0, 81], "onc": [0, 31, 36, 49, 54, 61, 65, 81], "one": [0, 1, 16, 27, 28, 35, 36, 39, 53, 54, 61, 62, 65, 68, 78, 81, 83, 84, 91, 115], "ones": 16, "ongo": 1, "onli": [0, 1, 16, 28, 31, 49, 54, 78, 80, 81, 82, 83, 99, 109, 119], "op": [0, 81], "open": [4, 28], "opentensor": [16, 79], "oper": [0, 1, 4, 16, 19, 21, 28, 29, 36, 40, 45, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 65, 69, 74, 78, 81, 82, 85, 86, 91, 94, 95, 96, 97, 98, 100, 101, 102, 103, 104, 105, 106, 108, 112, 127, 131], "operand": 112, "opportun": [0, 81], "optim": [0, 36, 65, 81, 82], "option": [0, 1, 4, 11, 18, 25, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 58, 61, 62, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 80, 81, 82, 83, 84, 85, 91, 93, 99, 103, 109, 111, 112, 115, 119, 122, 124, 127, 129, 131], "order": [0, 36, 65, 81, 82, 85], "org": [0, 16, 36, 61, 65, 79, 81, 103], "origin": [0, 1, 35, 36, 53, 54, 61, 62, 65, 81, 82, 85, 115], "origin_hotkei": 87, "origin_hotkey_ss58": [0, 35, 53, 62, 81], "origin_netuid": [0, 35, 53, 62, 81, 87], "origin_pric": [0, 81], "origin_subnet_pric": [0, 81], "other": [0, 1, 12, 27, 28, 78, 81, 82, 84, 85, 99, 116], "other_signatori": 87, "otherwis": [0, 16, 28, 36, 61, 65, 75, 81, 82, 84, 85, 122], "our": 84, "out": [0, 1, 81], "outcom": [82, 85], "outflow": [0, 81], "outlin": 78, "output": [0, 1, 37, 66, 81, 112, 127], "output_in_plac": [0, 37, 66, 81, 125, 127], "outsid": 54, "over": [0, 5, 6, 16, 28, 78, 81, 82, 127], "overal": [0, 81], "overflow": 29, "overhead": 78, "overload": 82, "overrid": [1, 82, 85, 115, 122], "overridden": [82, 127], "overview": [0, 16, 81], "overwritten": [0, 86, 87, 89], "own": [0, 29, 30, 31, 36, 48, 49, 65, 78, 81, 82], "owner": [0, 5, 6, 16, 45, 46, 53, 54, 62, 74, 75, 81, 91], "owner_coldkei": [7, 11, 78], "owner_hotkei": [7, 11, 78], "owner_ss58": [5, 6, 23], "ownercoldkei": 11, "ownerhotkei": [0, 11, 81], "ownership": [0, 53, 81], "p": 54, "pack": 127, "packag": [82, 93, 119, 129, 130], "page": [87, 132], "pai": [0, 81], "pair": [0, 20, 53, 81, 82, 83, 122], "pallet": [0, 4, 16, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 43, 44, 45, 47, 48, 49, 50, 51, 52, 53, 65, 66, 67, 68, 69, 70, 72, 73, 74, 76, 81, 86, 87, 89, 92, 132], "pallet_grandpa": 54, "paper": 78, "param": [0, 62, 75, 81, 85], "param_nam": [0, 27, 81], "paramet": [0, 1, 2, 4, 6, 7, 9, 10, 11, 12, 15, 16, 17, 18, 19, 20, 21, 25, 26, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 80, 81, 82, 83, 84, 85, 91, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 111, 112, 113, 115, 118, 119, 121, 122, 123, 124, 125, 127, 128, 129, 130, 131], "parameter_dict": [2, 10], "parameterdict": [2, 10], "parent": [0, 29, 30, 48, 80, 81], "parentkei": [0, 81], "pars": [0, 1, 19, 28, 29, 80, 81, 82, 83, 92, 109], "parse_headers_to_input": 82, "parser": [1, 27, 84, 85, 99, 119], "part": [0, 1, 7, 78, 81, 82], "parti": 119, "partial": [0, 35, 40, 45, 53, 62, 69, 74, 81], "partial_meta_info": [0, 81], "particip": [0, 1, 4, 37, 40, 69, 78, 81], "particular": [0, 5, 75, 81], "particularli": [0, 78, 81, 82], "pass": [0, 1, 16, 28, 31, 33, 36, 45, 47, 49, 51, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 65, 74, 76, 80, 81, 84, 85, 99, 109, 112, 122, 131], "password": [0, 30, 48, 81, 122], "passworderror": [0, 30, 48, 81, 122], "past": [31, 49, 78], "path": [0, 1, 78, 81], "pattern": [0, 81], "payload": [0, 1, 34, 52, 60, 75, 81, 82, 85, 129], "payload_cor": [0, 34, 52, 60, 75, 81], "peer": 78, "penalti": [0, 54, 81], "pend": [0, 16, 54, 62, 81, 84], "pending_alpha_emiss": [7, 11], "pending_root_emiss": [7, 11], "pendingalphaemiss": 11, "pendingchildkei": [0, 81], "pendingrootemiss": 11, "per": [0, 1, 4, 5, 6, 16, 21, 37, 54, 62, 66, 78, 81, 125, 127, 128], "percentag": [0, 5, 6, 7, 40, 43, 45, 62, 69, 72, 74, 81], "perform": [0, 1, 16, 28, 31, 49, 75, 78, 81, 82, 85, 103, 112, 119], "period": [0, 16, 21, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 61, 62, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 81, 87, 91], "perman": [0, 31, 36, 49, 61, 65, 81], "permiss": [0, 16, 36, 61, 65, 81, 103], "permit": [0, 12, 13, 16, 29, 36, 61, 65, 78, 81], "persist": 78, "person": 109, "phase": [0, 85], "pickl": [78, 109], "piec": 28, "ping": 28, "pipaddress": 79, "pipelin": 1, "pivot": [1, 78, 82], "place": [0, 1, 18, 28, 78, 81, 93, 125, 127], "placehold": [39, 62, 68, 116], "placeholder1": [2, 39, 62, 68, 85, 87], "placeholder2": [2, 39, 62, 68, 85, 87], "plai": [1, 78, 82], "plaintext": [0, 34, 52, 75, 81], "plu": [0, 81], "point": [0, 78, 81, 112], "poke_deposit": [0, 61, 81, 87, 103], "poke_deposit_extrins": [36, 65], "pokedeposit": 61, "polkadot": 81, "poll": [0, 34, 52, 81], "pool": [0, 1, 7, 11, 33, 34, 51, 52, 60, 64, 78, 81], "popul": [0, 12, 81, 85], "port": [0, 1, 2, 14, 39, 62, 68, 82, 85, 87, 124], "portal": [37, 66], "portion": 19, "posit": [0, 1, 33, 36, 42, 51, 64, 65, 71, 80, 81, 82, 83, 123], "position_id": [0, 33, 51, 64, 81, 87], "possibl": 85, "possibli": [36, 61, 65], "post": [28, 85], "postprocess": 1, "postprocessexcept": 29, "potenti": [0, 1, 16, 54, 78, 81], "pow": [0, 29, 37, 54, 62, 66, 81, 112, 125, 126, 128, 132], "pow_registration_allow": 11, "power": [54, 109], "powregistrationallow": 11, "powsolut": [125, 127], "practic": [78, 86], "pre": [0, 86], "preced": [0, 85], "precis": 123, "precompil": 54, "precompile_id": [54, 89], "predefin": 1, "prefer": [0, 78, 81], "prefix": [0, 1, 16, 36, 60, 61, 65, 81, 82, 84, 85, 87, 119], "preimag": 88, "prepar": [0, 81, 119, 129], "prepare_synaps": 129, "prepare_synapse_fn": 129, "prepend": 85, "preprocess": [1, 28], "preprocess_synapse_for_request": 28, "presenc": [0, 1, 81], "present": [0, 11, 81, 82], "preserv": [0, 36, 54, 61, 65, 81, 82], "presum": 99, "prevent": [0, 1, 16, 28, 36, 54, 65, 81, 127], "previou": [0, 1, 75, 78], "previous": [0, 36, 61, 65, 81], "price": [0, 7, 33, 35, 40, 45, 51, 53, 54, 62, 64, 69, 74, 81, 123], "price_high": [0, 33, 51, 81, 123], "price_low": [0, 33, 51, 81, 123], "price_step": 123, "price_to_tick": 123, "primari": [0, 37, 66, 81, 82, 93, 119], "primarili": [0, 78, 81, 86], "principl": 78, "print": [0, 1, 27, 28, 81, 82, 85, 99, 112, 125, 127], "prior": 82, "priorit": 1, "prioriti": [1, 29, 84, 87], "prioritize_my_synaps": 1, "prioritize_my_synapse_2": 1, "priority_custom": 1, "priority_fn": 1, "priorityexcept": 29, "prioritythreadpoolexecutor": [27, 84], "privat": [0, 1, 81], "privileg": [0, 81], "pro": [0, 81], "problem": [127, 128], "proc_num": 127, "proce": [0, 1], "process": [0, 1, 11, 16, 19, 21, 25, 28, 31, 37, 40, 41, 49, 66, 69, 70, 75, 78, 80, 81, 82, 83, 99, 109, 119, 125, 127, 129, 130, 131], "process_error_messag": 28, "process_nest": 11, "process_respons": 129, "process_responses_fn": 129, "process_server_respons": 28, "process_stake_data": 25, "process_streaming_respons": 80, "process_tim": 82, "process_weight": 131, "process_weights_for_netuid": 131, "processing_dur": 82, "processor": 1, "produc": [0, 36, 65, 81, 82], "product": [0, 54, 81], "program": 1, "progress": [0, 81, 125, 127], "prohibit": [0, 1, 16, 81], "project": [93, 115, 117], "prolifer": [0, 81], "prometheu": [12, 13, 14, 85], "prometheus_info": [8, 12, 13, 132], "prometheusinfo": [12, 13, 14], "prometheusservecallparam": 85, "promptli": 1, "proof": [0, 37, 66, 81, 125, 127, 128], "propag": 78, "proper": [0, 28, 78, 81, 82], "properli": [1, 28], "properti": [0, 2, 28, 78, 81, 82, 84, 91, 99, 112], "proport": [0, 29, 30, 48, 62, 78, 81], "proportionoverflow": [0, 29, 30, 48], "propos": [0, 15, 81], "proposal_dict": 15, "proposal_hash": [0, 81], "proposal_vote_data": [8, 132], "proposalcalldata": 8, "proposalvotedata": [0, 15, 81], "protect": [0, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 43, 44, 45, 47, 48, 49, 51, 52, 53, 65, 66, 67, 68, 69, 70, 72, 73, 74, 75, 76, 78, 81, 85], "protocol": [0, 1, 2, 10, 39, 62, 68, 81, 82, 85, 87], "provid": [0, 1, 8, 11, 12, 16, 19, 25, 28, 30, 34, 36, 37, 38, 42, 47, 48, 52, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 65, 66, 67, 71, 75, 76, 78, 80, 81, 82, 85, 86, 99, 103, 109, 112, 116, 117, 119, 122, 123, 125, 127, 128, 131], "provis": 123, "proxi": [0, 8, 32, 50, 59, 75, 81, 87, 88, 99, 127, 132], "proxy_announc": [0, 16, 61, 81, 87, 103], "proxy_announced_extrins": [36, 65], "proxy_extrins": [36, 65], "proxy_typ": [0, 16, 36, 61, 65, 81, 87], "proxy_type_us": [36, 65], "proxyannounc": 61, "proxyannouncementinfo": [0, 16, 81], "proxyconst": [0, 16, 81], "proxydepositbas": [0, 16, 81], "proxydepositfactor": [0, 16, 81], "proxyinfo": [0, 16, 81], "proxytyp": [0, 16, 36, 65, 81], "prune": [0, 12, 13, 81], "pruning_scor": [11, 12, 13, 24, 78], "pruningscor": 11, "public": [0, 1, 34, 44, 52, 54, 60, 73, 75, 78, 81, 120], "publish": [0, 39, 68, 81, 119], "publish_metadata": [0, 81], "publish_metadata_extrins": [39, 68], "pulses_payload": 87, "punit": [0, 81], "pure": [0, 16, 36, 61, 65, 75, 81, 103], "pure_account": [36, 65], "pure_proxy_ss58": [0, 36, 65, 81], "purecr": [0, 36, 61, 65, 81], "purpos": [0, 54, 81], "push": [0, 81], "put": 127, "py": 120, "pydant": [80, 82, 83], "pydantic_cor": [80, 82, 83], "pypi": [79, 130], "python": [0, 81, 109], "pytorch": [78, 131], "pyvalueerror": 109, "quantil": 131, "quantiti": [0, 81], "queri": [0, 16, 26, 28, 29, 78, 81, 82, 99, 103, 129, 132], "query_api": 129, "query_const": [0, 4, 16, 81, 104], "query_ident": [0, 81, 102], "query_map": [0, 16, 81, 104], "query_map_subtensor": [0, 81, 104], "query_modul": [0, 81, 104], "query_respons": [0, 81], "query_runtime_api": [0, 81, 104], "query_subtensor": [0, 81, 104], "querymapresult": [25, 81], "queue": [1, 84, 119, 127], "queuehandl": 119, "queuelisten": 119, "quick": [0, 81, 82], "quicker": 78, "quicknet": [62, 109], "quot": 123, "r": 78, "rais": [0, 1, 2, 4, 16, 17, 25, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 58, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 80, 81, 82, 83, 84, 85, 109, 112, 122, 124, 125, 127, 130], "raise_error": [0, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 81, 85, 91, 122], "random": [0, 81], "randomli": [0, 47, 76, 81], "rang": [0, 1, 33, 36, 51, 54, 61, 64, 65, 81, 123, 124], "rank": [0, 1, 11, 12, 13, 24, 78, 81], "rao": [0, 4, 16, 25, 31, 49, 54, 55, 58, 62, 64, 81, 112], "rao_recycl": [54, 89], "rao_symbol": 79, "rao_unit": 112, "raopertao": 122, "rata": [0, 81], "rate": [0, 12, 21, 29, 30, 48, 54, 78, 81, 87], "rate_limit": [54, 89], "rate_toler": [0, 35, 40, 45, 53, 69, 74, 81], "rather": [0, 28, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 81, 82, 85], "ratio": [0, 35, 42, 45, 53, 62, 71, 74, 81], "raw": [0, 16, 62, 75, 81, 82, 83, 85, 112], "raw0": [39, 68], "re": [0, 81, 82], "reach": [0, 29, 31, 34, 49, 52, 81, 91, 109], "read": 82, "read_onli": 79, "readabl": [1, 121, 122], "readi": [0, 1, 60, 80, 81], "real": [0, 16, 36, 61, 65, 81, 87, 103], "real_account_ss58": [0, 36, 65, 81], "realli": 1, "realloc": 81, "reap": [0, 81], "reaveal": 54, "recalcul": [0, 36, 61, 65, 81], "receipt": [0, 36, 40, 65, 69, 81, 85], "receiv": [0, 1, 7, 28, 37, 40, 69, 78, 81, 82], "received_head": 82, "receiver_hotkei": 1, "recent": [0, 81], "recipi": [44, 73], "reclaim": 84, "recommend": [28, 82, 120], "recomput": 1, "reconstitut": 78, "reconstruct": [1, 82, 85], "record": [0, 16, 33, 51, 64, 78, 81, 115], "record_log": 119, "recreate_calls_subpackag": [86, 87, 89], "recurs": 82, "recycl": [0, 37, 54, 66, 81, 106], "recycle_alpha": 87, "recycle_or_burn": [54, 89], "redeploi": 1, "reduc": [0, 78, 81], "reduct": 54, "refer": [0, 16, 78, 81, 85, 86, 87, 89, 133], "reflect": [0, 4, 16, 78, 81], "refund": [0, 4, 31, 49, 58, 81, 87], "refund_crowdloan": [0, 81, 96, 98], "refund_crowdloan_extrins": [31, 49], "refundcontributorslimit": [0, 4, 31, 49, 81], "regardless": [0, 36, 65, 81], "regener": [86, 87, 89], "regist": [0, 1, 5, 6, 16, 29, 30, 37, 38, 48, 62, 66, 67, 81, 85, 87, 98, 106, 119, 125, 127], "register_cuda": [126, 132], "register_extrins": [37, 66], "register_leased_network": [0, 4, 31, 49, 58, 81, 87], "register_network": [62, 87], "register_network_with_ident": 87, "register_neuron": 92, "register_primary_logg": 119, "register_subnet": [0, 81, 85, 92, 98, 106], "register_subnet_extrins": [37, 66, 85], "registerneuron": 92, "registersubnet": 92, "registr": [0, 1, 2, 5, 6, 10, 16, 21, 28, 29, 32, 50, 54, 78, 81, 83, 122, 131, 132], "registration_allow": [11, 21, 54, 89], "registrationallow": 11, "registrationerror": 29, "registrationnotpermittedonrootsubnet": [0, 29, 30, 48], "registrationstatist": 127, "registrationstatisticslogg": 127, "registri": [8, 88], "regular": [0, 31, 49, 81], "reject": [0, 16, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 61, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 81], "reject_announc": [61, 87], "reject_announcement_extrins": [36, 65], "reject_proxy_announc": [0, 16, 81, 103], "rejectannounc": 61, "rel": [0, 42, 71, 81], "relat": [0, 12, 14, 16, 19, 29, 37, 66, 81, 85, 103], "relationship": [0, 16, 36, 61, 65, 78, 81, 103], "releas": [1, 28, 78], "release_deposit": 87, "relev": [0, 1, 2, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 81, 85], "reli": [1, 86], "reliabl": [1, 78, 82], "relianc": 1, "reload": 78, "remain": [0, 16, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 60, 61, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 81], "remark": 87, "remark_with_ev": 87, "remov": [0, 1, 16, 31, 33, 36, 45, 49, 51, 61, 62, 64, 65, 74, 81, 119], "remove_announc": [61, 87], "remove_announcement_extrins": [36, 65], "remove_kei": 87, "remove_liquid": [0, 64, 81, 87, 98], "remove_liquidity_extrins": [33, 51], "remove_proxi": [0, 61, 81, 87, 103], "remove_proxies_extrins": [36, 65], "remove_proxy_announc": [0, 81, 103], "remove_proxy_extrins": [36, 65], "remove_stak": [16, 62, 87], "remove_stake_ful": 62, "remove_stake_full_limit": [16, 62, 87], "remove_stake_limit": [16, 62, 87], "removeannounc": 61, "removeproxi": 61, "replac": [34, 52, 75, 115], "replai": [1, 34, 52, 75], "replic": 82, "report_equivoc": 87, "report_equivocation_unsign": 87, "repositori": [0, 37, 62, 66, 81], "repr": 122, "repres": [0, 1, 2, 4, 5, 7, 10, 12, 13, 14, 16, 18, 19, 20, 21, 26, 28, 39, 68, 75, 78, 81, 82, 83, 84, 85, 86, 87, 89, 112], "represent": [0, 1, 2, 16, 28, 39, 62, 68, 78, 82, 85, 112, 124, 131], "reput": 78, "request": [0, 1, 28, 29, 30, 48, 81, 82, 99, 130], "request_nam": 28, "request_preimag": 87, "requestresponseendpoint": 1, "requir": [0, 1, 4, 16, 17, 29, 31, 36, 49, 54, 61, 65, 75, 78, 80, 81, 82], "required_hash_field": 82, "reserv": [0, 2, 16, 54, 81], "reset": [0, 21, 39, 54, 68, 81, 128], "reset_bond": [39, 68], "reset_cuda": 128, "resourc": [0, 1, 28, 78, 81, 84, 86], "respect": [0, 19, 31, 49, 78, 81, 120], "respond": 1, "respons": [0, 1, 28, 29, 36, 39, 54, 55, 57, 58, 60, 61, 62, 63, 64, 65, 68, 75, 78, 80, 81, 82, 85, 91, 99, 122, 129], "response_overrid": 1, "restak": [0, 81], "restart": 78, "restor": 78, "restrict": [0, 16, 81, 103], "result": [0, 1, 16, 19, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 81, 82, 85, 112, 122, 129], "retent": [0, 75, 81], "retri": [0, 81, 87, 99], "retriev": [0, 1, 4, 16, 36, 65, 75, 78, 80, 81, 130], "retroact": [0, 81], "retry_forev": [0, 81, 99], "return": [0, 1, 2, 4, 5, 6, 7, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 25, 26, 27, 28, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 80, 81, 82, 83, 84, 85, 91, 92, 99, 109, 111, 112, 115, 116, 119, 122, 123, 124, 125, 127, 128, 129, 130, 131], "return_per_1000": [5, 6], "return_str": 109, "reus": [0, 1, 28], "reuse_block": [0, 81], "reveal": [0, 21, 25, 26, 30, 31, 33, 35, 36, 37, 38, 39, 40, 41, 43, 44, 45, 47, 48, 49, 51, 53, 54, 62, 65, 66, 67, 68, 69, 70, 72, 73, 74, 76, 81, 85, 109], "reveal_block": [0, 81], "reveal_mechanism_weight": [62, 87], "reveal_round": [0, 26, 62, 81, 87, 109], "reveal_weight": [0, 81, 87, 98], "reveal_weights_extrins": [47, 76], "revel": [0, 81, 109], "revers": 122, "reverse_network_map": 79, "review": [0, 16, 36, 65, 81], "reward": [0, 40, 43, 62, 69, 72, 78, 81], "rfc": 115, "rho": [11, 21, 23, 54, 89], "right": [0, 81], "robust": 82, "role": [0, 1, 78, 81, 82], "root": [0, 16, 17, 29, 30, 32, 48, 50, 54, 62, 78, 81, 82, 99, 107, 116, 131, 132], "root_cal": [46, 75], "root_claim": [8, 132], "root_dir": 78, "root_dissolve_network": 87, "root_regist": [0, 16, 62, 81, 87, 98], "root_register_extrins": [38, 67], "root_set_pending_childkey_cooldown": [0, 81, 98], "root_set_pending_childkey_cooldown_extrins": [30, 48], "root_tao_stake_weight": 79, "rootclaim": 16, "rootclaimtyp": [0, 17, 38, 67, 81], "rootclaimtypeenum": 17, "rootweight": 16, "rotat": [0, 34, 52, 60, 81], "round": [0, 26, 62, 81, 109], "round_numb": 26, "rounds_tot": 127, "rout": 82, "router": [1, 124], "row": [78, 131], "rpc": [0, 8, 81, 85], "rue": 0, "rule": [0, 1, 81], "run": [0, 1, 30, 31, 33, 35, 36, 37, 38, 39, 40, 41, 43, 44, 45, 47, 48, 49, 51, 53, 65, 66, 67, 68, 69, 70, 72, 73, 74, 76, 81, 82, 84, 86, 87, 89, 122, 125, 127], "run_async": 28, "run_in_thread": 1, "runexcept": 29, "runtim": [0, 1, 4, 16, 17, 31, 36, 49, 58, 61, 65, 78, 81], "runtime_api": [0, 81], "runtimecal": 16, "runtimeerror": 78, "s0": 115, "s39": 115, "safe": [0, 28, 81, 82, 84, 127], "safe_glob": 78, "safe_stak": [0, 40, 69, 81], "safe_swap": [0, 35, 53, 81], "safe_unstak": [0, 45, 74, 81], "safemod": 88, "safeti": [0, 35, 40, 45, 53, 69, 74, 81], "salt": [0, 36, 47, 61, 62, 65, 76, 81, 85, 87, 131], "salts_list": 87, "same": [0, 1, 27, 30, 36, 48, 53, 56, 65, 81, 82, 109, 112, 125, 127], "sampl": [0, 81], "sanit": 82, "satisfi": [0, 81], "save": [78, 86, 115, 130], "scalabl": [0, 1, 81], "scale": [0, 8, 25, 34, 52, 60, 81], "scalebyt": 25, "scalecodec": [0, 25, 31, 34, 36, 49, 52, 58, 61, 63, 65, 75, 81, 85, 112], "scaleobj": [0, 81], "scaletyp": 112, "scaling_law_pow": 23, "scenario": [1, 28, 86, 87, 89], "schedul": [0, 18, 54, 84, 87, 88], "schedule_aft": 87, "schedule_grandpa_chang": [54, 87], "schedule_nam": 87, "schedule_named_aft": 87, "schedule_swap_coldkei": [16, 87], "scheduled_coldkey_swap_info": [8, 132], "scheduledcoldkeyswapinfo": [18, 25], "schema": [0, 81, 82], "score": [12, 13, 78], "sdk": [0, 81, 85], "seal": [62, 127, 128], "seamless": 1, "seamlessli": 1, "search": 75, "second": [0, 7, 28, 47, 62, 76, 81, 85, 99, 109, 111, 112, 129, 130], "section": [0, 36, 61, 65, 81, 85], "secur": [0, 1, 16, 78, 81, 82, 103], "see": [0, 16, 17, 27, 29, 36, 61, 65, 81, 83, 84, 85, 103, 112, 122, 124, 130], "seen": [1, 82], "select": [0, 36, 65, 81], "selected_indic": [0, 81], "selective_metagraph_commitments_offset": 11, "selectivemetagraphindex": [0, 11, 81], "self": [0, 1, 16, 17, 27, 28, 29, 80, 82, 83, 84, 85, 112, 122, 124, 130], "senat": [0, 15, 16, 81], "send": [0, 28, 37, 55, 66, 78, 80, 81, 82], "sender": [1, 55], "sensit": [78, 82], "sent": [1, 28, 54, 80, 82], "separ": [1, 82, 93, 119], "sequenti": [0, 28, 36, 65, 81], "serial": [1, 26, 78, 82, 83], "serialized_data": 82, "serv": [0, 1, 2, 32, 50, 54, 62, 78, 81, 82, 85, 86, 120, 132], "serve_axon": [0, 62, 81, 87, 98], "serve_axon_extrins": [39, 68], "serve_axon_tl": [62, 87], "serve_extrins": [39, 68], "serve_prometheu": 87, "server": [1, 28, 29, 37, 62, 66, 80], "server_respons": 28, "servic": [0, 1, 21, 81, 85], "serving_rate_limit": [11, 21, 54, 89], "servingratelimit": 11, "session": [28, 78], "set": [0, 1, 2, 16, 19, 27, 28, 29, 30, 36, 37, 38, 40, 42, 43, 44, 47, 48, 54, 57, 61, 62, 65, 66, 67, 69, 71, 72, 73, 76, 77, 78, 81, 82, 85, 87, 91, 109, 112, 118, 119, 127, 131, 132], "set_auto_stak": [0, 81, 105], "set_auto_stake_extrins": [40, 69], "set_base_fee_per_ga": 87, "set_beacon_config": 87, "set_childkey_tak": [16, 87], "set_children": [0, 16, 62, 81, 87, 98, 108], "set_children_extrins": [30, 48], "set_cod": [16, 87], "set_code_without_check": 87, "set_coldkey_auto_stake_hotkei": [62, 87], "set_commit": [0, 57, 81, 87, 95, 98], "set_config": 119, "set_consol": 119, "set_debug": 119, "set_default": 119, "set_delegate_tak": [0, 81, 97], "set_elast": 87, "set_fee_r": 87, "set_heap_pag": 87, "set_hyperparamet": 91, "set_ident": 87, "set_info": 119, "set_kei": 87, "set_max_spac": 87, "set_mechanism_weight": [62, 87], "set_name_typ": 82, "set_oldest_stored_round": 87, "set_pending_childkey_cooldown": [62, 63, 87], "set_retri": 87, "set_retry_nam": 87, "set_reveal_commit": [0, 81, 95], "set_root_claim_typ": [0, 16, 62, 81, 87, 98, 105], "set_root_claim_type_extrins": [38, 67], "set_storag": 87, "set_subnet_ident": [0, 16, 62, 81, 87, 98, 106], "set_subnet_identity_extrins": [37, 66], "set_take_extrins": [43, 72], "set_trac": [115, 119], "set_unit": 112, "set_warn": 119, "set_weight": [0, 81, 87, 98], "set_weights_extrins": [47, 76], "set_whitelist": 87, "setlevel": 119, "settabl": [0, 81], "setup": 1, "setup_config": [85, 99], "sever": [1, 54, 84], "sgvsbg8gv29ybgq": 82, "sha256": [39, 68], "sha3": 82, "shape": [81, 83], "share": [0, 42, 71, 78, 81, 112, 127], "shield": [0, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 43, 44, 45, 47, 48, 49, 51, 52, 53, 60, 65, 66, 67, 68, 69, 70, 72, 73, 74, 75, 76, 81, 85, 99, 101], "shield_id": [34, 52], "short": [0, 81], "shorten": [0, 81], "shorter": [42, 71], "should": [0, 1, 28, 36, 37, 39, 54, 55, 61, 65, 66, 68, 75, 78, 80, 81, 82, 83, 125, 127], "should_exit": 1, "should_sync": 78, "show": [86, 122], "shut": 1, "shutdown": [0, 1, 84, 99], "side": 1, "sigmoid": [21, 54], "sign": [0, 1, 28, 30, 31, 33, 34, 36, 37, 41, 43, 44, 46, 48, 49, 51, 52, 61, 65, 66, 70, 72, 73, 75, 78, 81, 85], "sign_and_send_extrins": [0, 54, 55, 57, 58, 60, 61, 62, 63, 64, 81, 99], "sign_with": [0, 34, 46, 52, 75, 81], "signal": [1, 28, 54], "signatur": [0, 1, 16, 17, 27, 29, 34, 52, 60, 80, 81, 82, 83, 84, 85, 87, 112, 122, 124, 130], "signed_ext": 75, "signer": [60, 85], "signer_byt": [0, 34, 52, 81], "signifi": 78, "signific": [0, 81], "significantli": 86, "silent": [0, 28, 81], "sim_swap": [0, 8, 81, 105, 132], "similar": [28, 78, 99], "simpl": 82, "simpli": [82, 85], "simplifi": [0, 78, 81], "simswap": [0, 81], "simswapresult": [0, 19, 81], "simul": [0, 19, 81], "sinc": [0, 36, 65, 81], "singl": [0, 4, 16, 28, 31, 36, 49, 61, 65, 81], "size": [0, 60, 78, 82], "skip": [40, 45, 69, 74, 116], "slippag": [0, 7], "small": 16, "small_transfer_limit": 16, "smallest": [0, 81], "smalltransf": 16, "smooth": [0, 54, 81], "smoothing_factor": 54, "sn_netuid": 91, "snapshot": [0, 78, 81], "so": [4, 82, 131], "softwar": 78, "solut": [29, 125, 127, 128], "solution_queu": 127, "solv": [0, 37, 66, 81, 125, 127, 128], "solve_cuda": 128, "solver": [29, 127], "some": [0, 21, 81, 99], "some_hotkei": 81, "some_hotkey_where_is_your_stake_now": [0, 81], "someth": 1, "sort": 54, "sourc": [0, 1, 2, 3, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 16, 18, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 33, 35, 37, 38, 39, 40, 41, 44, 45, 47, 48, 51, 53, 62, 66, 67, 68, 69, 70, 73, 74, 75, 78, 80, 81, 82, 83, 84, 85, 87, 111, 112, 113, 115, 116, 119, 121, 122, 123, 124, 125, 127, 128, 129, 131], "spam": [0, 1, 16, 81], "spawn": 61, "spawner": [0, 36, 61, 65, 81, 87], "spawner_wallet": [36, 65], "spec": [87, 88, 89], "special": [1, 78, 80, 115], "specif": [0, 1, 4, 5, 16, 19, 36, 40, 45, 47, 54, 61, 65, 69, 74, 75, 76, 78, 80, 81, 82, 84, 99, 109, 119, 129], "specifi": [0, 1, 17, 19, 25, 28, 33, 36, 39, 40, 45, 51, 54, 65, 68, 69, 74, 75, 78, 81, 82, 115, 119, 122], "specul": 78, "sphinx": 132, "split": [0, 42, 54, 71, 81], "split_command": 92, "sr25519": [0, 34, 52, 81], "ss58": [0, 4, 5, 16, 20, 25, 26, 30, 31, 35, 36, 40, 43, 45, 48, 49, 53, 55, 58, 61, 62, 65, 69, 72, 74, 75, 81, 122], "ss58_address": [0, 36, 44, 65, 73, 81, 122, 131], "ss58_address_length": 79, "ss58_address_to_byt": 122, "ss58_decod": 122, "ss58_to_hex": 122, "ss58_to_vec_u8": 122, "stabil": [0, 54, 78, 81], "stabl": [0, 1, 81], "stacklevel": 119, "stage": 1, "stake": [0, 5, 7, 12, 13, 16, 20, 25, 29, 30, 32, 33, 35, 36, 37, 44, 45, 48, 50, 51, 53, 54, 61, 62, 64, 65, 73, 74, 75, 78, 81, 99, 132], "stake_data": 25, "stake_dict": [12, 13], "stake_info": [8, 132], "stakeerror": 29, "stakeinfo": [0, 20, 25, 75, 81], "staker": 7, "stale": 127, "standard": [0, 78, 81, 82, 85, 103, 117], "starlett": [1, 80], "start": [0, 1, 21, 41, 54, 70, 81, 82, 119, 127, 128], "start_block": [0, 34, 52, 81], "start_cal": [0, 16, 32, 50, 62, 81, 87, 98, 99, 106, 132], "start_call_extrins": [41, 70], "start_tim": 1, "stat": 127, "state": [0, 1, 4, 7, 24, 28, 54, 78, 81, 82, 94, 115, 119], "state_cal": [0, 81, 94], "state_dict": 78, "statemachin": 119, "static": [11, 12, 13, 78, 83, 85, 112, 127], "statist": 127, "statu": [0, 1, 12, 28, 78, 81, 82, 85, 119, 122, 127], "status_cod": [1, 82], "status_messag": 82, "stdout": [1, 85], "steep": [21, 54, 89], "step": [0, 1, 37, 81, 91, 92], "stop": [1, 119, 127], "stopev": 127, "storag": [0, 4, 16, 26, 31, 34, 49, 52, 54, 60, 75, 81, 122], "storage_index": 122, "storagefunctionnotfound": 29, "store": [0, 4, 31, 36, 49, 65, 78, 81, 82, 112, 127], "str": [0, 1, 2, 3, 4, 5, 6, 7, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 22, 23, 24, 25, 26, 27, 28, 30, 31, 33, 34, 35, 36, 37, 39, 40, 43, 44, 45, 46, 48, 49, 51, 52, 53, 54, 55, 56, 58, 60, 61, 62, 64, 65, 66, 68, 69, 72, 73, 74, 75, 78, 79, 81, 82, 83, 84, 85, 91, 99, 109, 112, 113, 115, 116, 119, 122, 123, 124, 127, 128, 130, 131], "str_val": 124, "strateg": 81, "strategi": [0, 81], "stream": [28, 77, 119, 132], "stream_respons": 80, "streamer": 80, "streamingrespons": 80, "streamingsynaps": [1, 28, 80], "streamlin": [0, 81, 86], "strict": [27, 122], "string": [0, 2, 10, 13, 16, 17, 25, 26, 28, 36, 38, 60, 61, 62, 65, 67, 75, 78, 81, 82, 83, 85, 86, 109, 112, 115, 122, 124], "stronger": 78, "strtobool": 122, "struct": 109, "structur": [0, 2, 4, 8, 11, 16, 25, 34, 52, 75, 78, 80, 81, 82, 86, 93], "style": 115, "sub": [0, 47, 76, 79, 81, 93, 117, 127], "subclass": [80, 82], "subject": [0, 81], "subkei": 87, "submetagraph": 122, "submiss": [0, 34, 52, 60, 81, 85], "submission_id": [0, 81], "submit": [0, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 60, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 81, 84, 85], "submit_block_hash": [34, 52], "submit_encrypt": [0, 34, 52, 60, 81], "submit_encrypted_extrins": [34, 52], "submitted_in": [0, 81], "submodul": 120, "subnet": [0, 1, 2, 5, 6, 8, 10, 16, 17, 21, 22, 23, 28, 29, 33, 35, 37, 38, 40, 41, 42, 45, 46, 47, 51, 53, 54, 57, 62, 64, 66, 67, 69, 70, 71, 74, 75, 76, 78, 81, 85, 90, 99, 112, 122, 123, 125, 127, 131, 132], "subnet_contact": [22, 37, 62, 66, 87], "subnet_emiss": 11, "subnet_exist": [0, 81, 106], "subnet_hyperparamet": [8, 132], "subnet_ident": [0, 7, 8, 11, 81, 132], "subnet_info": [8, 132], "subnet_is_act": 21, "subnet_nam": [7, 22, 37, 62, 66, 87], "subnet_owner_cut": [54, 89], "subnet_st": [8, 132], "subnet_url": [22, 37, 62, 66, 87], "subnet_volum": [7, 11], "subnetemiss": 11, "subnethyperparamet": [0, 21, 25, 81], "subnetident": [0, 7, 11, 22, 25, 78, 81], "subnetinfo": [0, 23, 25, 81], "subnetinforuntimeapi": [0, 81], "subnetleasebeneficiari": [0, 16, 81], "subnetmovingalpha": 54, "subnetnotexist": [0, 29, 30, 48], "subnetownerhotkei": 54, "subnetrevealperiodepoch": [0, 81], "subnetsapi": 129, "subnetst": [24, 25], "subnetvolum": 11, "subnetwork": [0, 24, 37, 66, 81], "subnetwork_n": [0, 23, 81, 106], "subscrib": [0, 29, 39, 68, 81], "subsequ": [0, 1, 27, 28, 34, 52, 81], "subset": [0, 81], "substrat": [0, 4, 16, 17, 36, 65, 81, 86, 87, 89, 99], "substraterequestexcept": [0, 29, 34, 40, 52, 69, 81, 122], "subtensor": [0, 1, 4, 16, 17, 26, 27, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 85, 86, 87, 88, 89, 91, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 122, 125, 127, 131, 132], "subtensor_api": [93, 132], "subtensor_field": 107, "subtensor_modul": [59, 132], "subtensorapi": [85, 91, 99, 107], "subtensorinterfac": [34, 52], "subtensormixin": [0, 81, 85], "subtensormodul": [0, 62, 63, 81, 88], "subtoken": 54, "subtoken_en": [54, 89], "succe": [34, 52], "succeed": [82, 85], "success": [0, 1, 4, 29, 31, 34, 49, 52, 58, 81, 82, 85, 113, 119, 122], "success_level_num": 115, "successfulli": [0, 34, 52, 75, 81, 85], "sudo": [16, 32, 46, 50, 59, 75, 86, 87, 88, 89, 92, 132], "sudo_a": 89, "sudo_cal": [63, 86, 91, 132], "sudo_call_extrins": [46, 75], "sudo_or_owner_wallet": 91, "sudo_set_": 16, "sudo_set_activity_cutoff": [54, 89], "sudo_set_adjustment_alpha": [54, 89], "sudo_set_adjustment_interv": [54, 89], "sudo_set_admin_freeze_window": [54, 89], "sudo_set_admin_freeze_window_extrins": [42, 71], "sudo_set_alpha_sigmoid_steep": [54, 89], "sudo_set_alpha_valu": [54, 89], "sudo_set_bonds_moving_averag": [54, 89], "sudo_set_bonds_penalti": [54, 89], "sudo_set_bonds_reset_en": [54, 89], "sudo_set_ck_burn": [54, 89], "sudo_set_coldkey_swap_schedule_dur": [54, 89], "sudo_set_commit_reveal_vers": [54, 89], "sudo_set_commit_reveal_weights_en": [54, 89], "sudo_set_commit_reveal_weights_interv": [54, 89], "sudo_set_default_tak": [54, 89], "sudo_set_difficulti": [54, 89], "sudo_set_dissolve_network_schedule_dur": [54, 89], "sudo_set_ema_price_halving_period": [54, 89], "sudo_set_evm_chain_id": [54, 89], "sudo_set_immunity_period": [54, 89], "sudo_set_kappa": [54, 89], "sudo_set_liquid_alpha_en": [54, 89], "sudo_set_lock_reduction_interv": [54, 89], "sudo_set_max_allowed_uid": [54, 89], "sudo_set_max_allowed_valid": [54, 89], "sudo_set_max_burn": [54, 89], "sudo_set_max_childkey_tak": 89, "sudo_set_max_difficulti": [54, 89], "sudo_set_max_registrations_per_block": [54, 89], "sudo_set_mechanism_count": [54, 89], "sudo_set_mechanism_count_extrins": [42, 71], "sudo_set_mechanism_emission_split": [54, 89], "sudo_set_mechanism_emission_split_extrins": [42, 71], "sudo_set_min_allowed_uid": [54, 89], "sudo_set_min_allowed_weight": [54, 89], "sudo_set_min_burn": [54, 89], "sudo_set_min_childkey_tak": 89, "sudo_set_min_delegate_tak": [54, 89], "sudo_set_min_difficulti": [54, 89], "sudo_set_network_immunity_period": [54, 89], "sudo_set_network_min_lock_cost": [54, 89], "sudo_set_network_pow_registration_allow": [54, 89], "sudo_set_network_rate_limit": [54, 89], "sudo_set_network_registration_allow": [54, 89], "sudo_set_nominator_min_required_stak": [54, 89], "sudo_set_num_root_claim": 89, "sudo_set_owner_hparam_rate_limit": [54, 89], "sudo_set_owner_immune_neuron_limit": [54, 89], "sudo_set_rao_recycl": [54, 89], "sudo_set_recycle_or_burn": [54, 89], "sudo_set_rho": [54, 89], "sudo_set_root_claim_threshold": 89, "sudo_set_serving_rate_limit": [54, 89], "sudo_set_sn_owner_hotkei": [16, 54, 89], "sudo_set_stake_threshold": [54, 89], "sudo_set_subnet_limit": [54, 89], "sudo_set_subnet_moving_alpha": [54, 89], "sudo_set_subnet_owner_cut": [54, 89], "sudo_set_subnet_owner_hotkei": [54, 89], "sudo_set_subtoken_en": [54, 89], "sudo_set_tao_flow_cutoff": 54, "sudo_set_tao_flow_normalization_expon": 54, "sudo_set_tao_flow_smoothing_factor": 54, "sudo_set_target_registrations_per_interv": [54, 89], "sudo_set_tempo": [0, 54, 81, 89], "sudo_set_toggle_transf": [54, 89], "sudo_set_total_issu": [54, 89], "sudo_set_tx_childkey_take_rate_limit": 89, "sudo_set_tx_delegate_take_rate_limit": [54, 89], "sudo_set_tx_rate_limit": [54, 89], "sudo_set_weights_set_rate_limit": [54, 89], "sudo_set_weights_version_kei": [54, 89], "sudo_set_yuma3_en": [54, 89], "sudo_toggle_evm_precompil": [54, 89], "sudo_trim_to_max_allowed_uid": [54, 89], "sudo_unchecked_weight": [16, 89], "sudouncheckedsetcod": 16, "suffici": [0, 81], "suffix": [119, 121], "suggest": 78, "suitabl": [16, 17, 82], "sum": [0, 30, 42, 48, 71, 78, 82, 131], "superclass": 82, "suppli": [0, 78], "support": [0, 1, 16, 17, 27, 81, 85], "supress": 122, "sure": 109, "sustain": [0, 81], "swap": [0, 16, 17, 18, 19, 35, 38, 53, 54, 59, 62, 67, 81, 88, 132], "swap_author": [54, 87], "swap_coldkei": [16, 87], "swap_cost": 87, "swap_hotkei": [16, 87], "swap_stak": [0, 16, 62, 81, 87, 98, 105], "swap_stake_extrins": [35, 53], "swap_stake_limit": [16, 62, 87], "swaphotkei": 16, "sy": 122, "symbol": [7, 11, 78, 87, 112, 120], "synaps": [1, 28, 29, 77, 80, 111, 129, 132], "synapse_dict": 82, "synapse_histori": 28, "synapse_nonc": 111, "synapse_timeout": 111, "synapse_to_respons": 1, "synapsedendritenoneexcept": 29, "synapseexcept": 29, "synapseparsingerror": 29, "sync": [0, 52, 54, 55, 57, 58, 60, 61, 62, 63, 64, 66, 76, 78, 81, 91, 99], "sync_substr": [25, 81], "synchron": [0, 28, 54, 78, 81, 91, 103, 127], "syntax": 17, "system": [0, 16, 28, 78, 81, 86, 87, 88, 89, 116, 119, 127], "t": [0, 1, 9, 29, 30, 48, 56, 78, 81, 119, 122], "tailor": [1, 82], "take": [0, 1, 5, 6, 16, 18, 29, 32, 36, 50, 54, 62, 65, 80, 81, 87, 89, 132], "takeerror": 29, "taken": [82, 86, 87, 89], "tamper": [0, 1, 81, 82], "tao": [0, 5, 6, 7, 11, 17, 19, 31, 33, 37, 40, 45, 49, 51, 54, 64, 66, 69, 74, 75, 78, 79, 81, 85, 112, 123], "tao_amount": [0, 19, 81], "tao_app_block_explor": 79, "tao_dividends_per_hotkei": [11, 78], "tao_fe": [0, 19, 81], "tao_fees_above_high": 123, "tao_fees_below_low": 123, "tao_in": [7, 11], "tao_in_emiss": [7, 11], "tao_slippag": 7, "tao_stak": [11, 24, 78], "tao_symbol": 79, "tao_to_alpha": 7, "tao_to_alpha_with_slippag": 7, "taocurr": 54, "taodividendsperhotkei": 11, "taoin": 11, "taoinemiss": 11, "taostak": 11, "target": [0, 4, 21, 28, 31, 33, 41, 49, 51, 54, 64, 70, 81, 87], "target_address": [0, 4, 31, 49, 58, 81, 87], "target_axon": 28, "target_axon_info": 28, "target_registrations_per_interv": [54, 89], "target_regs_per_interv": [11, 21], "targetregsperinterv": 11, "task": [1, 81, 82, 87], "tcp": 10, "technic": [0, 81], "techniqu": 1, "technologi": [0, 81], "templat": [86, 87, 89, 115], "tempo": [0, 7, 11, 21, 23, 42, 54, 71, 78, 81, 89, 106], "tempor": 54, "temporarili": 1, "tensor": [2, 10, 77, 78, 82, 131, 132], "tensor_": 83, "term": [0, 81, 120], "termin": [0, 1, 81, 82, 113], "terminal_info": 82, "terminalinfo": 82, "terminate_leas": 87, "terminate_workers_and_wait_for_exit": 127, "test": [0, 54, 78, 79, 81, 85, 86, 87, 89, 91, 99, 113, 122], "testsubnet": 91, "text": [1, 115, 127], "textual": [37, 66], "th": 78, "than": [0, 1, 28, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 61, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 81, 85, 131], "thei": [0, 1, 4, 7, 16, 36, 54, 65, 78, 81, 82, 112, 131], "them": [0, 1, 28, 36, 54, 61, 65, 80, 81, 82, 86], "themselv": [0, 81], "therebi": [0, 1, 81], "thereof": 124, "thi": [0, 1, 2, 4, 5, 6, 7, 8, 11, 12, 13, 16, 17, 19, 21, 24, 25, 26, 27, 28, 29, 31, 34, 36, 37, 39, 40, 44, 45, 49, 52, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 65, 66, 68, 69, 73, 74, 75, 78, 80, 81, 82, 84, 85, 86, 87, 89, 93, 99, 103, 109, 112, 115, 116, 117, 119, 122, 123, 125, 127, 128, 129, 131, 132, 133], "thin": [0, 81], "think": [0, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 62, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 81, 82], "third": 119, "those": [0, 16, 27, 28, 36, 65, 81], "thread": [0, 1, 37, 66, 81, 84, 125, 127, 128], "thread_name_prefix": 84, "thread_pool": 1, "threadpool": [1, 77, 132], "threadpoolexecutor": 84, "threshold": [0, 15, 21, 81, 87, 131], "through": [0, 1, 28, 30, 31, 33, 35, 36, 37, 38, 39, 40, 41, 43, 44, 45, 47, 48, 49, 51, 53, 61, 65, 66, 67, 68, 69, 70, 72, 73, 74, 75, 76, 81, 116], "throughout": [0, 81, 117], "tick": [0, 33, 51, 64, 81, 123], "tick_high": [64, 87], "tick_index": 123, "tick_low": [64, 87], "tick_to_pric": 123, "time": [0, 1, 4, 16, 31, 34, 36, 49, 52, 60, 61, 65, 78, 81, 82, 84, 86, 87, 89, 99, 103, 109, 111, 115, 127], "time_averag": 127, "time_sp": 127, "time_spent_tot": 127, "timelock": [0, 81, 93, 132], "timeout": [0, 1, 28, 40, 69, 81, 82, 111, 129, 130], "timeout_block": [34, 52], "timepoint": 87, "timestamp": [0, 1, 12, 13, 78, 81, 85, 88], "tl": [0, 39, 62, 68, 81], "tle": 109, "tmp": 78, "to_dict": [16, 17, 27], "to_head": 82, "to_parameter_dict": [2, 10], "to_str": [1, 2], "to_token_amount": 123, "togeth": [0, 36, 65, 86], "toggl": [0, 33, 51, 54, 81, 89], "toggle_user_liquid": [0, 64, 81, 87, 98], "toggle_user_liquidity_extrins": [33, 51], "token": [0, 16, 19, 45, 74, 78, 80, 81, 123], "token_stream": 80, "toler": [0, 35, 40, 45, 53, 62, 69, 74, 81], "tolist": 83, "too": [0, 29, 30, 31, 48, 49, 81, 99], "tool": [0, 81, 82, 93], "toomanychildren": [0, 29, 30, 48], "top": 120, "topologi": [0, 1, 81], "torch": [2, 10, 28, 78, 83, 122, 127, 131], "torchmetagraph": 78, "total": [0, 4, 5, 12, 13, 16, 31, 49, 54, 78, 81, 82, 127], "total_bal": 112, "total_bit": 112, "total_issu": [54, 89], "total_s": 82, "total_stak": [5, 11, 12, 13, 24, 78], "totalstak": 11, "toward": [0, 78, 81], "tpb": [0, 37, 66, 81, 125, 127, 128], "trace": [1, 85, 115, 118, 119], "trace_level_num": 115, "trace_log_format": 114, "track": [0, 78, 81, 82], "trade": 54, "transact": [0, 29, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 60, 61, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 81, 82, 85, 87], "transaction_alpha_fe": 85, "transaction_fe": 85, "transaction_tao_fe": 85, "transactor": [0, 29, 81], "transfer": [0, 4, 16, 21, 29, 31, 32, 35, 36, 49, 50, 53, 54, 55, 58, 61, 62, 65, 75, 81, 98, 108, 132], "transfer_al": [0, 16, 44, 55, 73, 81, 87], "transfer_allow_death": [16, 55, 87], "transfer_extrins": [44, 73], "transfer_keep_al": [16, 55, 87], "transfer_stak": [0, 16, 62, 81, 85, 87, 98, 105], "transfer_stake_extrins": [35, 53], "transfererror": 29, "transfers_en": 21, "transform": [11, 82], "transit": [1, 119], "transmiss": [1, 82], "transmit": [28, 82], "transpar": [0, 81, 82], "transport": 82, "travers": 82, "treat": [0, 81, 112], "treatment": [0, 81], "trend": [0, 81], "tri": [0, 81], "trigger": [0, 1, 36, 41, 65, 70, 75, 81, 85], "triggered_ev": 75, "trim": 54, "triumvir": 16, "true": [0, 1, 2, 7, 16, 28, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 55, 56, 62, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 81, 82, 84, 85, 91, 99, 107, 109, 112, 115, 118, 119, 122, 125, 127], "trust": [0, 1, 11, 12, 13, 24, 78, 81], "trustworthi": [0, 1, 78, 81], "truth": 122, "try": [29, 127], "try_associate_hotkei": 87, "tupl": [0, 1, 7, 11, 12, 16, 25, 26, 28, 30, 40, 45, 48, 54, 62, 69, 74, 75, 78, 81, 82, 84, 85, 87, 89, 91, 109, 111, 119, 122, 123, 128, 131], "tutori": [0, 81], "tv": 78, "two": [0, 83, 112], "tx_rate_limit": [0, 54, 81, 89, 94, 99], "txratelimitexceed": [0, 29, 30, 48], "type": [0, 1, 2, 4, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 25, 26, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 80, 81, 82, 83, 84, 86, 87, 89, 91, 103, 109, 111, 112, 115, 116, 119, 122, 123, 124, 125, 127, 128, 129, 130, 131, 132], "type_nam": 25, "type_registri": 79, "type_str": 25, "typeddict": [85, 112], "typeerror": [2, 17, 25, 29, 109], "typic": [0, 1, 75, 78, 80, 81, 82], "u128": 112, "u16": [0, 36, 54, 60, 61, 65, 81], "u16_max": [122, 131], "u16_normalized_float": 122, "u32": [0, 81, 131], "u32_max": 131, "u64": [54, 122], "u64_max": 122, "u64_normalized_float": 122, "u64f64": [54, 112], "udp": 10, "uid": [0, 12, 13, 33, 35, 38, 39, 40, 41, 45, 47, 51, 53, 54, 62, 64, 67, 68, 69, 70, 74, 76, 78, 81, 85, 87, 112, 131], "uids_list": 87, "uint64": [0, 30, 48, 131], "unabl": [0, 29, 81], "unaffect": [0, 81], "unauthor": [1, 82], "unavail": [0, 81], "unchang": [0, 81, 124], "under": [0, 81], "underli": [0, 1, 28, 78, 81, 85, 119], "understand": [0, 78, 81, 86], "undesir": 1, "unencrypt": 0, "unexpect": 112, "unfavor": 0, "unifi": 28, "union": [0, 2, 7, 10, 11, 16, 25, 28, 36, 37, 39, 47, 65, 66, 68, 75, 76, 78, 81, 83, 91, 94, 95, 96, 97, 98, 100, 101, 102, 103, 104, 105, 106, 108, 109, 112, 122, 125, 127, 128, 129, 131], "uniqu": [0, 1, 4, 12, 13, 28, 31, 36, 37, 40, 42, 45, 47, 49, 54, 58, 61, 62, 65, 66, 69, 71, 74, 75, 76, 78, 81, 82, 124, 131], "uniswap": 123, "unit": [0, 1, 19, 29, 62, 78, 81, 112], "unix": 0, "unknownsynapseerror": 29, "unless": [0, 28, 36, 61, 65, 81], "unlik": [0, 81], "unlock": [0, 30, 31, 33, 34, 41, 48, 49, 51, 52, 70, 81, 85, 122], "unlock_kei": 122, "unlock_typ": [85, 122], "unlock_wallet": 85, "unlockstatu": 122, "unmet": 1, "unnote_preimag": 87, "unpickl": 78, "unpicklingerror": 78, "unrequest_preimag": 87, "unsaf": [0, 81], "unstak": [0, 7, 29, 32, 40, 50, 62, 69, 81, 98, 105, 132], "unstake_al": [0, 16, 45, 74, 81, 87, 98, 105], "unstake_all_alpha": [16, 87], "unstake_all_extrins": [45, 74], "unstake_extrins": [45, 74], "unstake_multipl": [0, 81, 98, 105], "unstake_multiple_extrins": [45, 74], "unstakeerror": 29, "unsuccess": [0, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 81, 85, 122], "unsupport": 29, "until": [0, 16, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 43, 44, 45, 47, 48, 49, 51, 52, 53, 60, 65, 66, 67, 68, 69, 70, 72, 73, 74, 76, 81, 84, 91], "unus": [0, 81], "unwant": [0, 36, 65], "up": [0, 1, 16, 28, 31, 36, 49, 61, 65, 78, 81, 84, 85, 119, 130], "updat": [0, 1, 12, 13, 16, 28, 29, 31, 37, 49, 54, 58, 66, 75, 78, 80, 81, 127, 128], "update_": [0, 81], "update_cap": [58, 87], "update_cap_crowdloan": [0, 81, 96, 98], "update_cap_crowdloan_extrins": [31, 49], "update_curr_block": 127, "update_end": [58, 87], "update_end_crowdloan": [0, 81, 96, 98], "update_end_crowdloan_extrins": [31, 49], "update_interv": [0, 37, 66, 81, 125, 127, 128], "update_min_contribut": [58, 87], "update_min_contribution_crowdloan": [0, 81, 96, 98], "update_min_contribution_crowdloan_extrins": [31, 49], "update_symbol": [16, 87], "upgrad": [0, 36, 65, 81], "upgrade_account": 87, "upon": [0, 4, 28, 40, 69, 78, 81], "upper": [0, 33, 51, 64, 81, 128], "urgenc": 1, "url": [0, 1, 3, 28, 29, 37, 62, 66, 81, 85, 87, 122, 124], "urllib": 124, "us": [0, 1, 2, 7, 16, 19, 21, 25, 26, 28, 29, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 56, 60, 61, 62, 64, 65, 66, 67, 68, 69, 70, 72, 73, 74, 75, 76, 78, 80, 81, 82, 83, 84, 85, 86, 87, 89, 93, 99, 109, 112, 115, 120, 122, 125, 127, 128, 129, 131], "usag": [1, 28, 54, 55, 57, 58, 60, 61, 62, 64, 82, 109, 112], "use_nonc": [0, 46, 75, 81], "use_torch": [2, 122, 127], "user": [0, 1, 21, 28, 33, 51, 54, 64, 78, 81, 82, 131], "user_bittensor_dir": 79, "user_liquidity_en": 21, "using_new_loop": 28, "usingspawnstartmethod": 127, "usual": 29, "utf": [82, 122], "util": [0, 1, 2, 4, 5, 6, 7, 8, 10, 11, 12, 13, 16, 19, 20, 23, 24, 28, 31, 32, 33, 35, 39, 40, 44, 45, 49, 50, 51, 53, 54, 62, 68, 69, 73, 74, 78, 81, 83, 85, 88, 90, 91, 99, 110, 132], "uuid": [1, 28, 82], "uvicorn": 1, "v": 83, "v2": 81, "v3": 123, "v_7_2_0": 1, "val": 122, "valid": [0, 1, 5, 6, 11, 12, 13, 16, 17, 21, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 60, 62, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 80, 81, 82, 83, 85, 112, 115, 122, 127, 131], "validate_chain_endpoint": 122, "validate_extrinsic_param": [0, 81, 98], "validate_max_attempt": 122, "validationerror": [80, 82, 83], "validator_permit": [5, 6, 11, 12, 13, 24, 78], "validator_trust": [12, 13, 78], "validator_uid": [0, 81], "validatorpermit": 11, "valu": [0, 1, 2, 4, 11, 12, 13, 16, 17, 19, 21, 25, 27, 30, 31, 36, 47, 48, 49, 54, 55, 61, 62, 65, 75, 76, 78, 81, 82, 83, 85, 86, 87, 111, 112, 122, 123, 127, 131], "valuabl": [78, 82], "valueerror": [0, 2, 16, 17, 34, 52, 81, 122, 125, 127], "values_list": 87, "vari": [0, 81], "variabl": [0, 1, 2, 4, 5, 10, 12, 13, 14, 16, 18, 19, 20, 21, 26, 56, 78, 80, 81, 82, 85, 112], "variant": 17, "variou": [0, 1, 17, 78, 81], "vec": 54, "vec_u8": 18, "vector": [0, 25, 81], "verbos": [0, 81, 99, 125, 127], "verif": [1, 82], "verifi": [0, 1, 29, 60, 81, 82], "verify_body_integr": 1, "verify_custom": 1, "verify_fn": 1, "verify_my_synaps": 1, "verify_my_synapse_2": 1, "version": [0, 2, 6, 12, 14, 21, 47, 54, 62, 76, 78, 81, 82, 85, 87, 88, 89, 99, 115, 122, 124, 131, 132], "version_as_int": [0, 47, 76, 79, 81], "version_check_threshold": 130, "version_kei": [0, 47, 62, 76, 81, 87, 131], "versioncheckerror": [122, 130], "via": [0, 1, 4, 16, 36, 65, 78, 81, 83, 120], "viabil": [0, 81], "view": [0, 81], "vital": [1, 78, 82], "vote": [0, 81], "voter": 54, "w": [78, 124], "w_": 78, "wa": [0, 1, 7, 16, 27, 34, 36, 40, 45, 52, 61, 65, 69, 74, 75, 78, 81, 82, 85], "wai": [0, 19, 28, 81, 82, 85, 112], "wait": [0, 16, 28, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 81, 84, 91, 99, 109], "wait_for_block": [0, 81, 99], "wait_for_extrinsic_by_hash": [34, 52], "wait_for_fin": [0, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 81, 91], "wait_for_inclus": [0, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 81, 91], "wait_for_revealed_execut": [0, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 43, 44, 45, 47, 48, 49, 51, 52, 53, 65, 66, 67, 68, 69, 70, 72, 73, 74, 76, 81], "wait_next_epoch": 91, "wait_reveal_and_decrypt": 109, "waiv": [36, 61, 65], "wallet": [0, 1, 27, 28, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 61, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 81, 82, 85, 86, 87, 89, 91, 92, 99, 112, 120, 122, 125, 127, 129, 131, 132], "wallet_stak": [0, 81], "wallets_dir": 79, "want": [0, 16, 115], "warn": [54, 85, 113, 118, 119, 122], "we": 124, "web": [0, 37, 66, 81], "websocket": [0, 81, 85, 122, 124], "websocket_shutdown_tim": [0, 99], "week": 54, "weight": [0, 12, 13, 16, 21, 26, 32, 37, 42, 50, 54, 62, 71, 78, 81, 85, 87, 89, 106, 131, 132], "weight_commit_info": [8, 132], "weight_uid": 131, "weight_util": [122, 132], "weight_val": 131, "weightcommitinfo": [0, 26, 81], "weights_as_dict": 12, "weights_rate_limit": [0, 11, 21, 81, 106], "weights_set_rate_limit": [54, 89], "weights_vers": [11, 21], "weights_version_kei": [54, 89], "weightsratelimit": 11, "weightssetratelimit": [0, 81], "weightsvers": 11, "well": [78, 86, 112], "were": [0, 31, 36, 40, 45, 49, 61, 65, 69, 74, 81], "what": [4, 16], "when": [0, 1, 2, 4, 16, 26, 27, 28, 29, 31, 33, 35, 36, 45, 49, 51, 53, 54, 56, 58, 61, 62, 65, 74, 78, 81, 82, 84, 85, 87, 109, 112, 119, 125, 127], "where": [0, 1, 7, 12, 16, 25, 26, 28, 34, 52, 78, 81, 99, 112], "whether": [0, 1, 4, 13, 25, 28, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 81, 85, 99, 129], "which": [0, 1, 4, 6, 16, 18, 21, 27, 28, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 55, 60, 61, 62, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 80, 81, 82, 85, 122], "while": [0, 1, 53, 54, 78, 81, 93, 123, 127], "who": [82, 87, 89], "whole": [0, 2, 81], "whose": [0, 16, 31, 36, 49, 54, 61, 65, 81], "wide": [78, 120], "wiki": 81, "window": [0, 42, 54, 71, 81, 89, 111], "with_log": 85, "with_mev_protect": 85, "with_weight": 87, "withdraw": [0, 31, 49, 58, 81, 87], "withdraw_crowdloan": [0, 81, 96, 98], "withdraw_crowdloan_extrins": [31, 49], "withdrawn": [0, 81], "within": [0, 1, 4, 28, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 61, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 80, 81, 82, 86, 127, 129], "without": [0, 1, 13, 16, 28, 30, 31, 33, 35, 36, 37, 38, 39, 40, 41, 43, 44, 45, 47, 48, 49, 51, 53, 61, 65, 66, 67, 68, 69, 70, 72, 73, 74, 76, 81, 82, 86, 113], "work": [0, 8, 28, 36, 37, 54, 55, 57, 58, 60, 61, 62, 63, 64, 65, 66, 81, 87, 103, 112, 125, 127, 128], "worker": [1, 84, 127], "world": 82, "would": [0, 7, 35, 36, 53, 62, 65, 81, 82], "wrap": 119, "wrapper": [0, 34, 52, 81, 82], "wrapper_id": [0, 81], "writabl": 122, "write_puls": 87, "wrong": [0, 30, 40, 45, 48, 69, 74, 81, 109], "wss": [79, 99, 124], "www": 79, "x": [109, 122, 131], "x01": [0, 34, 52, 81], "x_person": 109, "x_person_2": 109, "xchacha20poly1305": [0, 34, 52, 60, 75, 81], "y": [114, 122, 131], "ye": 122, "yet": [0, 31, 49, 81], "yield": [1, 28, 85, 116], "you": [0, 1, 28, 29, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 61, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 81, 82, 99, 109, 115], "your": [0, 1, 28, 78, 81, 82, 99, 109, 115, 124], "yoursynaps": 1, "yuma": [0, 21, 78, 81], "yuma3": 54, "yuma_vers": 21, "zero": [0, 16, 36, 40, 42, 45, 65, 69, 71, 74, 75, 81], "\u03b1": [0, 81], "\u03c41": 85, "\u03c410": 112}, "titles": ["bittensor.core.async_subtensor", "bittensor.core.axon", "bittensor.core.chain_data.axon_info", "bittensor.core.chain_data.chain_identity", "bittensor.core.chain_data.crowdloan_info", "bittensor.core.chain_data.delegate_info", "bittensor.core.chain_data.delegate_info_lite", "bittensor.core.chain_data.dynamic_info", "bittensor.core.chain_data", "bittensor.core.chain_data.info_base", "bittensor.core.chain_data.ip_info", "bittensor.core.chain_data.metagraph_info", "bittensor.core.chain_data.neuron_info", "bittensor.core.chain_data.neuron_info_lite", "bittensor.core.chain_data.prometheus_info", "bittensor.core.chain_data.proposal_vote_data", "bittensor.core.chain_data.proxy", "bittensor.core.chain_data.root_claim", "bittensor.core.chain_data.scheduled_coldkey_swap_info", "bittensor.core.chain_data.sim_swap", "bittensor.core.chain_data.stake_info", "bittensor.core.chain_data.subnet_hyperparameters", "bittensor.core.chain_data.subnet_identity", "bittensor.core.chain_data.subnet_info", "bittensor.core.chain_data.subnet_state", "bittensor.core.chain_data.utils", "bittensor.core.chain_data.weight_commit_info", "bittensor.core.config", "bittensor.core.dendrite", "bittensor.core.errors", "bittensor.core.extrinsics.asyncex.children", "bittensor.core.extrinsics.asyncex.crowdloan", "bittensor.core.extrinsics.asyncex", "bittensor.core.extrinsics.asyncex.liquidity", "bittensor.core.extrinsics.asyncex.mev_shield", "bittensor.core.extrinsics.asyncex.move_stake", "bittensor.core.extrinsics.asyncex.proxy", "bittensor.core.extrinsics.asyncex.registration", "bittensor.core.extrinsics.asyncex.root", "bittensor.core.extrinsics.asyncex.serving", "bittensor.core.extrinsics.asyncex.staking", "bittensor.core.extrinsics.asyncex.start_call", "bittensor.core.extrinsics.asyncex.sudo", "bittensor.core.extrinsics.asyncex.take", "bittensor.core.extrinsics.asyncex.transfer", "bittensor.core.extrinsics.asyncex.unstaking", "bittensor.core.extrinsics.asyncex.utils", "bittensor.core.extrinsics.asyncex.weights", "bittensor.core.extrinsics.children", "bittensor.core.extrinsics.crowdloan", "bittensor.core.extrinsics", "bittensor.core.extrinsics.liquidity", "bittensor.core.extrinsics.mev_shield", "bittensor.core.extrinsics.move_stake", "bittensor.core.extrinsics.pallets.admin_utils", "bittensor.core.extrinsics.pallets.balances", "bittensor.core.extrinsics.pallets.base", "bittensor.core.extrinsics.pallets.commitments", "bittensor.core.extrinsics.pallets.crowdloan", "bittensor.core.extrinsics.pallets", "bittensor.core.extrinsics.pallets.mev_shield", "bittensor.core.extrinsics.pallets.proxy", "bittensor.core.extrinsics.pallets.subtensor_module", "bittensor.core.extrinsics.pallets.sudo", "bittensor.core.extrinsics.pallets.swap", "bittensor.core.extrinsics.proxy", "bittensor.core.extrinsics.registration", "bittensor.core.extrinsics.root", "bittensor.core.extrinsics.serving", "bittensor.core.extrinsics.staking", "bittensor.core.extrinsics.start_call", "bittensor.core.extrinsics.sudo", "bittensor.core.extrinsics.take", "bittensor.core.extrinsics.transfer", "bittensor.core.extrinsics.unstaking", "bittensor.core.extrinsics.utils", "bittensor.core.extrinsics.weights", "bittensor.core", "bittensor.core.metagraph", "bittensor.core.settings", "bittensor.core.stream", "bittensor.core.subtensor", "bittensor.core.synapse", "bittensor.core.tensor", "bittensor.core.threadpool", "bittensor.core.types", "bittensor.extras.dev_framework.calls", "bittensor.extras.dev_framework.calls.non_sudo_calls", "bittensor.extras.dev_framework.calls.pallets", "bittensor.extras.dev_framework.calls.sudo_calls", "bittensor.extras.dev_framework", "bittensor.extras.dev_framework.subnet", "bittensor.extras.dev_framework.utils", "bittensor.extras", "bittensor.extras.subtensor_api.chain", "bittensor.extras.subtensor_api.commitments", "bittensor.extras.subtensor_api.crowdloans", "bittensor.extras.subtensor_api.delegates", "bittensor.extras.subtensor_api.extrinsics", "bittensor.extras.subtensor_api", "bittensor.extras.subtensor_api.metagraphs", "bittensor.extras.subtensor_api.mev_shield", "bittensor.extras.subtensor_api.neurons", "bittensor.extras.subtensor_api.proxy", "bittensor.extras.subtensor_api.queries", "bittensor.extras.subtensor_api.staking", "bittensor.extras.subtensor_api.subnets", "bittensor.extras.subtensor_api.utils", "bittensor.extras.subtensor_api.wallets", "bittensor.extras.timelock", "bittensor", "bittensor.utils.axon_utils", "bittensor.utils.balance", "bittensor.utils.btlogging.console", "bittensor.utils.btlogging.defines", "bittensor.utils.btlogging.format", "bittensor.utils.btlogging.helpers", "bittensor.utils.btlogging", "bittensor.utils.btlogging.levels", "bittensor.utils.btlogging.loggingmachine", "bittensor.utils.easy_imports", "bittensor.utils.formatting", "bittensor.utils", "bittensor.utils.liquidity", "bittensor.utils.networking", "bittensor.utils.registration.async_pow", "bittensor.utils.registration", "bittensor.utils.registration.pow", "bittensor.utils.registration.register_cuda", "bittensor.utils.subnets", "bittensor.utils.version", "bittensor.utils.weight_utils", "API Reference", "Bittensor SDK Documentation"], "titleterms": {"admin_util": 54, "api": 132, "async_pow": 125, "async_subtensor": 0, "asyncex": [30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47], "attribut": [1, 8, 9, 11, 28, 29, 56, 78, 79, 83, 84, 85, 86, 88, 91, 92, 111, 114, 115, 117, 119, 122, 123, 127, 130, 131], "axon": 1, "axon_info": 2, "axon_util": 111, "balanc": [55, 112], "base": 56, "bittensor": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 133], "btlog": [113, 114, 115, 116, 117, 118, 119], "call": [86, 87, 88, 89], "chain": 94, "chain_data": [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26], "chain_ident": 3, "children": [30, 48], "class": [0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 78, 80, 81, 82, 83, 84, 85, 87, 89, 91, 92, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 108, 112, 113, 115, 119, 122, 123, 127, 129], "commit": [57, 95], "config": 27, "consol": 113, "content": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 92, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 111, 112, 113, 114, 115, 116, 117, 118, 119, 121, 122, 123, 124, 125, 127, 128, 129, 130, 131, 133], "core": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85], "crowdloan": [31, 49, 58, 96], "crowdloan_info": 4, "defin": 114, "deleg": 97, "delegate_info": 5, "delegate_info_lit": 6, "dendrit": 28, "dev_framework": [86, 87, 88, 89, 90, 91, 92], "document": 133, "dynamic_info": 7, "easy_import": 120, "error": 29, "exampl": [1, 27, 28, 36, 54, 55, 57, 58, 60, 61, 62, 63, 64, 65, 78, 82, 85, 99, 109, 112, 113], "except": [27, 29, 84, 124, 130], "extra": [86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109], "extrins": [30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 98], "format": [115, 121], "function": [0, 1, 11, 25, 28, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 82, 83, 86, 92, 107, 109, 111, 112, 116, 118, 121, 122, 123, 124, 125, 127, 128, 130, 131], "helper": 116, "info_bas": 9, "ip_info": 10, "level": 118, "liquid": [33, 51, 123], "loggingmachin": 119, "metagraph": [78, 100], "metagraph_info": 11, "mev_shield": [34, 52, 60, 101], "modul": [0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 51, 52, 53, 54, 55, 56, 57, 58, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 78, 79, 80, 81, 82, 83, 84, 85, 87, 88, 89, 91, 92, 94, 95, 96, 97, 98, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 111, 112, 113, 114, 115, 116, 118, 119, 121, 123, 124, 125, 127, 128, 129, 130, 131], "move_stak": [35, 53], "network": 124, "neuron": 102, "neuron_info": 12, "neuron_info_lit": 13, "non_sudo_cal": 87, "note": [0, 16, 31, 36, 40, 49, 61, 65, 69, 81, 103], "packag": [8, 86, 99, 117, 122], "pallet": [54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 88], "pow": 127, "prometheus_info": 14, "proposal_vote_data": 15, "proxi": [16, 36, 61, 65, 103], "queri": 104, "refer": 132, "register_cuda": 128, "registr": [37, 66, 125, 126, 127, 128], "root": [38, 67], "root_claim": 17, "scheduled_coldkey_swap_info": 18, "sdk": 133, "serv": [39, 68], "set": 79, "sim_swap": 19, "stake": [40, 69, 105], "stake_info": 20, "start_cal": [41, 70], "stream": 80, "submodul": [8, 32, 50, 59, 77, 86, 90, 93, 99, 110, 117, 122, 126], "subnet": [91, 106, 129], "subnet_hyperparamet": 21, "subnet_ident": 22, "subnet_info": 23, "subnet_st": 24, "subtensor": 81, "subtensor_api": [94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108], "subtensor_modul": 62, "sudo": [42, 63, 71], "sudo_cal": 89, "swap": 64, "synaps": 82, "tabl": 133, "take": [43, 72], "tensor": 83, "threadpool": 84, "timelock": 109, "transfer": [44, 73], "type": 85, "unstak": [45, 74], "util": [25, 46, 75, 92, 107, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131], "version": 130, "wallet": 108, "weight": [47, 76], "weight_commit_info": 26, "weight_util": 131}}) \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 69c0e1a758..a0af010018 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1,9699 +1,13806 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@algolia/autocomplete-core@1.9.3": - version "1.9.3" - resolved "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz" - integrity sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw== - dependencies: - "@algolia/autocomplete-plugin-algolia-insights" "1.9.3" - "@algolia/autocomplete-shared" "1.9.3" - -"@algolia/autocomplete-plugin-algolia-insights@1.9.3": - version "1.9.3" - resolved "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz" - integrity sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg== - dependencies: - "@algolia/autocomplete-shared" "1.9.3" - -"@algolia/autocomplete-preset-algolia@1.9.3": - version "1.9.3" - resolved "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz" - integrity sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA== - dependencies: - "@algolia/autocomplete-shared" "1.9.3" - -"@algolia/autocomplete-shared@1.9.3": - version "1.9.3" - resolved "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz" - integrity sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ== - -"@algolia/cache-browser-local-storage@4.22.1": - version "4.22.1" - resolved "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.22.1.tgz" - integrity sha512-Sw6IAmOCvvP6QNgY9j+Hv09mvkvEIDKjYW8ow0UDDAxSXy664RBNQk3i/0nt7gvceOJ6jGmOTimaZoY1THmU7g== - dependencies: - "@algolia/cache-common" "4.22.1" - -"@algolia/cache-common@4.22.1": - version "4.22.1" - resolved "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.22.1.tgz" - integrity sha512-TJMBKqZNKYB9TptRRjSUtevJeQVXRmg6rk9qgFKWvOy8jhCPdyNZV1nB3SKGufzvTVbomAukFR8guu/8NRKBTA== - -"@algolia/cache-in-memory@4.22.1": - version "4.22.1" - resolved "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.22.1.tgz" - integrity sha512-ve+6Ac2LhwpufuWavM/aHjLoNz/Z/sYSgNIXsinGofWOysPilQZPUetqLj8vbvi+DHZZaYSEP9H5SRVXnpsNNw== - dependencies: - "@algolia/cache-common" "4.22.1" - -"@algolia/client-account@4.22.1": - version "4.22.1" - resolved "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.22.1.tgz" - integrity sha512-k8m+oegM2zlns/TwZyi4YgCtyToackkOpE+xCaKCYfBfDtdGOaVZCM5YvGPtK+HGaJMIN/DoTL8asbM3NzHonw== - dependencies: - "@algolia/client-common" "4.22.1" - "@algolia/client-search" "4.22.1" - "@algolia/transporter" "4.22.1" - -"@algolia/client-analytics@4.22.1": - version "4.22.1" - resolved "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.22.1.tgz" - integrity sha512-1ssi9pyxyQNN4a7Ji9R50nSdISIumMFDwKNuwZipB6TkauJ8J7ha/uO60sPJFqQyqvvI+px7RSNRQT3Zrvzieg== - dependencies: - "@algolia/client-common" "4.22.1" - "@algolia/client-search" "4.22.1" - "@algolia/requester-common" "4.22.1" - "@algolia/transporter" "4.22.1" - -"@algolia/client-common@4.22.1": - version "4.22.1" - resolved "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.22.1.tgz" - integrity sha512-IvaL5v9mZtm4k4QHbBGDmU3wa/mKokmqNBqPj0K7lcR8ZDKzUorhcGp/u8PkPC/e0zoHSTvRh7TRkGX3Lm7iOQ== - dependencies: - "@algolia/requester-common" "4.22.1" - "@algolia/transporter" "4.22.1" - -"@algolia/client-personalization@4.22.1": - version "4.22.1" - resolved "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.22.1.tgz" - integrity sha512-sl+/klQJ93+4yaqZ7ezOttMQ/nczly/3GmgZXJ1xmoewP5jmdP/X/nV5U7EHHH3hCUEHeN7X1nsIhGPVt9E1cQ== - dependencies: - "@algolia/client-common" "4.22.1" - "@algolia/requester-common" "4.22.1" - "@algolia/transporter" "4.22.1" - -"@algolia/client-search@>= 4.9.1 < 6", "@algolia/client-search@4.22.1": - version "4.22.1" - resolved "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.22.1.tgz" - integrity sha512-yb05NA4tNaOgx3+rOxAmFztgMTtGBi97X7PC3jyNeGiwkAjOZc2QrdZBYyIdcDLoI09N0gjtpClcackoTN0gPA== - dependencies: - "@algolia/client-common" "4.22.1" - "@algolia/requester-common" "4.22.1" - "@algolia/transporter" "4.22.1" - -"@algolia/events@^4.0.1": - version "4.0.1" - resolved "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz" - integrity sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ== - -"@algolia/logger-common@4.22.1": - version "4.22.1" - resolved "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.22.1.tgz" - integrity sha512-OnTFymd2odHSO39r4DSWRFETkBufnY2iGUZNrMXpIhF5cmFE8pGoINNPzwg02QLBlGSaLqdKy0bM8S0GyqPLBg== - -"@algolia/logger-console@4.22.1": - version "4.22.1" - resolved "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.22.1.tgz" - integrity sha512-O99rcqpVPKN1RlpgD6H3khUWylU24OXlzkavUAMy6QZd1776QAcauE3oP8CmD43nbaTjBexZj2nGsBH9Tc0FVA== - dependencies: - "@algolia/logger-common" "4.22.1" - -"@algolia/requester-browser-xhr@4.22.1": - version "4.22.1" - resolved "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.22.1.tgz" - integrity sha512-dtQGYIg6MteqT1Uay3J/0NDqD+UciHy3QgRbk7bNddOJu+p3hzjTRYESqEnoX/DpEkaNYdRHUKNylsqMpgwaEw== - dependencies: - "@algolia/requester-common" "4.22.1" - -"@algolia/requester-common@4.22.1": - version "4.22.1" - resolved "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.22.1.tgz" - integrity sha512-dgvhSAtg2MJnR+BxrIFqlLtkLlVVhas9HgYKMk2Uxiy5m6/8HZBL40JVAMb2LovoPFs9I/EWIoFVjOrFwzn5Qg== - -"@algolia/requester-node-http@4.22.1": - version "4.22.1" - resolved "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.22.1.tgz" - integrity sha512-JfmZ3MVFQkAU+zug8H3s8rZ6h0ahHZL/SpMaSasTCGYR5EEJsCc8SI5UZ6raPN2tjxa5bxS13BRpGSBUens7EA== - dependencies: - "@algolia/requester-common" "4.22.1" - -"@algolia/transporter@4.22.1": - version "4.22.1" - resolved "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.22.1.tgz" - integrity sha512-kzWgc2c9IdxMa3YqA6TN0NW5VrKYYW/BELIn7vnLyn+U/RFdZ4lxxt9/8yq3DKV5snvoDzzO4ClyejZRdV3lMQ== - dependencies: - "@algolia/cache-common" "4.22.1" - "@algolia/logger-common" "4.22.1" - "@algolia/requester-common" "4.22.1" - -"@ampproject/remapping@^2.2.0": - version "2.2.1" - resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.0", "@babel/code-frame@^7.26.2", "@babel/code-frame@^7.8.3": - version "7.26.2" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz" - integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== - dependencies: - "@babel/helper-validator-identifier" "^7.25.9" - js-tokens "^4.0.0" - picocolors "^1.0.0" - -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.3", "@babel/compat-data@^7.23.5", "@babel/compat-data@^7.24.4", "@babel/compat-data@^7.25.9": - version "7.26.3" - resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.3.tgz" - integrity sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g== - -"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.0.0-0 || ^8.0.0-0 <8.0.0", "@babel/core@^7.12.0", "@babel/core@^7.13.0", "@babel/core@^7.19.6", "@babel/core@^7.21.3", "@babel/core@^7.23.3", "@babel/core@^7.4.0 || ^8.0.0-0 <8.0.0": - version "7.26.0" - resolved "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz" - integrity sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.26.0" - "@babel/generator" "^7.26.0" - "@babel/helper-compilation-targets" "^7.25.9" - "@babel/helper-module-transforms" "^7.26.0" - "@babel/helpers" "^7.26.0" - "@babel/parser" "^7.26.0" - "@babel/template" "^7.25.9" - "@babel/traverse" "^7.25.9" - "@babel/types" "^7.26.0" - convert-source-map "^2.0.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.3" - semver "^6.3.1" - -"@babel/generator@^7.23.3", "@babel/generator@^7.26.0", "@babel/generator@^7.26.3": - version "7.26.3" - resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.26.3.tgz" - integrity sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ== - dependencies: - "@babel/parser" "^7.26.3" - "@babel/types" "^7.26.3" - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.25" - jsesc "^3.0.2" - -"@babel/helper-annotate-as-pure@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz" - integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.15": - version "7.22.15" - resolved "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz" - integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== - dependencies: - "@babel/types" "^7.22.15" - -"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.23.6", "@babel/helper-compilation-targets@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz" - integrity sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ== - dependencies: - "@babel/compat-data" "^7.25.9" - "@babel/helper-validator-option" "^7.25.9" - browserslist "^4.24.0" - lru-cache "^5.1.1" - semver "^6.3.1" - -"@babel/helper-create-class-features-plugin@^7.22.15", "@babel/helper-create-class-features-plugin@^7.23.6": - version "7.23.10" - resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.10.tgz" - integrity sha512-2XpP2XhkXzgxecPNEEK8Vz8Asj9aRxt08oKOqtiZoqV2UGZ5T+EkyP9sXQ9nwMxBIG34a7jmasVqoMop7VdPUw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-member-expression-to-functions" "^7.23.0" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.20" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - semver "^6.3.1" - -"@babel/helper-create-class-features-plugin@^7.24.1", "@babel/helper-create-class-features-plugin@^7.24.4", "@babel/helper-create-class-features-plugin@^7.24.5": - version "7.24.5" - resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.5.tgz" - integrity sha512-uRc4Cv8UQWnE4NXlYTIIdM7wfFkOqlFztcC/gVXDKohKoVB3OyonfelUBaJzSwpBntZ2KYGF/9S7asCHsXwW6g== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-member-expression-to-functions" "^7.24.5" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.24.1" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.24.5" - semver "^6.3.1" - -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5": - version "7.22.15" - resolved "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz" - integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - regexpu-core "^5.3.1" - semver "^6.3.1" - -"@babel/helper-define-polyfill-provider@^0.5.0": - version "0.5.0" - resolved "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz" - integrity sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q== - dependencies: - "@babel/helper-compilation-targets" "^7.22.6" - "@babel/helper-plugin-utils" "^7.22.5" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - -"@babel/helper-define-polyfill-provider@^0.6.1", "@babel/helper-define-polyfill-provider@^0.6.2": - version "0.6.2" - resolved "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz" - integrity sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ== - dependencies: - "@babel/helper-compilation-targets" "^7.22.6" - "@babel/helper-plugin-utils" "^7.22.5" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - -"@babel/helper-environment-visitor@^7.22.20": - version "7.22.20" - resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz" - integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== - -"@babel/helper-function-name@^7.22.5", "@babel/helper-function-name@^7.23.0": - version "7.23.0" - resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz" - integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== - dependencies: - "@babel/template" "^7.22.15" - "@babel/types" "^7.23.0" - -"@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-member-expression-to-functions@^7.22.15", "@babel/helper-member-expression-to-functions@^7.23.0": - version "7.23.0" - resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz" - integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== - dependencies: - "@babel/types" "^7.23.0" - -"@babel/helper-member-expression-to-functions@^7.24.5": - version "7.24.5" - resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.5.tgz" - integrity sha512-4owRteeihKWKamtqg4JmWSsEZU445xpFRXPEwp44HbgbxdWlUV1b4Agg4lkA806Lil5XM/e+FJyS0vj5T6vmcA== - dependencies: - "@babel/types" "^7.24.5" - -"@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.24.1", "@babel/helper-module-imports@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz" - integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw== - dependencies: - "@babel/traverse" "^7.25.9" - "@babel/types" "^7.25.9" - -"@babel/helper-module-transforms@^7.23.3", "@babel/helper-module-transforms@^7.26.0": - version "7.26.0" - resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz" - integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== - dependencies: - "@babel/helper-module-imports" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" - "@babel/traverse" "^7.25.9" - -"@babel/helper-optimise-call-expression@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz" - integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz" - integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== - -"@babel/helper-plugin-utils@^7.24.0", "@babel/helper-plugin-utils@^7.24.5": - version "7.24.5" - resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.5.tgz" - integrity sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ== - -"@babel/helper-remap-async-to-generator@^7.22.20": - version "7.22.20" - resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz" - integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-wrap-function" "^7.22.20" - -"@babel/helper-replace-supers@^7.22.20": - version "7.22.20" - resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz" - integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-member-expression-to-functions" "^7.22.15" - "@babel/helper-optimise-call-expression" "^7.22.5" - -"@babel/helper-replace-supers@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz" - integrity sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-member-expression-to-functions" "^7.23.0" - "@babel/helper-optimise-call-expression" "^7.22.5" - -"@babel/helper-simple-access@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz" - integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-skip-transparent-expression-wrappers@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz" - integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-split-export-declaration@^7.24.5": - version "7.24.5" - resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.5.tgz" - integrity sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q== - dependencies: - "@babel/types" "^7.24.5" - -"@babel/helper-string-parser@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz" - integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== - -"@babel/helper-validator-identifier@^7.22.20", "@babel/helper-validator-identifier@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz" - integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== - -"@babel/helper-validator-option@^7.22.15", "@babel/helper-validator-option@^7.23.5", "@babel/helper-validator-option@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz" - integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw== - -"@babel/helper-wrap-function@^7.22.20": - version "7.22.20" - resolved "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz" - integrity sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw== - dependencies: - "@babel/helper-function-name" "^7.22.5" - "@babel/template" "^7.22.15" - "@babel/types" "^7.22.19" - -"@babel/helpers@^7.26.0": - version "7.26.0" - resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz" - integrity sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw== - dependencies: - "@babel/template" "^7.25.9" - "@babel/types" "^7.26.0" - -"@babel/parser@^7.25.9", "@babel/parser@^7.26.0", "@babel/parser@^7.26.3": - version "7.26.3" - resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.26.3.tgz" - integrity sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA== - dependencies: - "@babel/types" "^7.26.3" - -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.24.5": - version "7.24.5" - resolved "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.5.tgz" - integrity sha512-LdXRi1wEMTrHVR4Zc9F8OewC3vdm5h4QB6L71zy6StmYeqGi1b3ttIO8UC+BfZKcH9jdr4aI249rBkm+3+YvHw== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.24.5" - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz" - integrity sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.1.tgz" - integrity sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz" - integrity sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.23.3" - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.1.tgz" - integrity sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.24.1" - -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.7": - version "7.23.7" - resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz" - integrity sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.1.tgz" - integrity sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": - version "7.21.0-placeholder-for-preset-env.2" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz" - integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== - -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.12.13": - version "7.12.13" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz" - integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-import-assertions@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz" - integrity sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-import-assertions@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz" - integrity sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-syntax-import-attributes@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz" - integrity sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-import-attributes@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz" - integrity sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-syntax-import-meta@^7.10.4": - version "7.10.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-jsx@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz" - integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-jsx@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz" - integrity sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": - version "7.10.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.10.4": - version "7.10.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz" - integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-top-level-await@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-typescript@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz" - integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-typescript@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz" - integrity sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz" - integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-arrow-functions@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz" - integrity sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-arrow-functions@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.1.tgz" - integrity sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-async-generator-functions@^7.23.9": - version "7.23.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz" - integrity sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.20" - "@babel/plugin-syntax-async-generators" "^7.8.4" - -"@babel/plugin-transform-async-generator-functions@^7.24.3": - version "7.24.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.3.tgz" - integrity sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-remap-async-to-generator" "^7.22.20" - "@babel/plugin-syntax-async-generators" "^7.8.4" - -"@babel/plugin-transform-async-to-generator@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz" - integrity sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw== - dependencies: - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.20" - -"@babel/plugin-transform-async-to-generator@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.1.tgz" - integrity sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw== - dependencies: - "@babel/helper-module-imports" "^7.24.1" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-remap-async-to-generator" "^7.22.20" - -"@babel/plugin-transform-block-scoped-functions@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz" - integrity sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-block-scoped-functions@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.1.tgz" - integrity sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-block-scoping@^7.23.4": - version "7.23.4" - resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz" - integrity sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-block-scoping@^7.24.5": - version "7.24.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.5.tgz" - integrity sha512-sMfBc3OxghjC95BkYrYocHL3NaOplrcaunblzwXhGmlPwpmfsxr4vK+mBBt49r+S240vahmv+kUxkeKgs+haCw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.5" - -"@babel/plugin-transform-class-properties@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz" - integrity sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-class-properties@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.1.tgz" - integrity sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.24.1" - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-class-static-block@^7.23.4": - version "7.23.4" - resolved "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz" - integrity sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - -"@babel/plugin-transform-class-static-block@^7.24.4": - version "7.24.4" - resolved "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.4.tgz" - integrity sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.24.4" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - -"@babel/plugin-transform-classes@^7.23.8": - version "7.23.8" - resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz" - integrity sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.20" - "@babel/helper-split-export-declaration" "^7.22.6" - globals "^11.1.0" - -"@babel/plugin-transform-classes@^7.24.5": - version "7.24.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.5.tgz" - integrity sha512-gWkLP25DFj2dwe9Ck8uwMOpko4YsqyfZJrOmqqcegeDYEbp7rmn4U6UQZNj08UF6MaX39XenSpKRCvpDRBtZ7Q== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-plugin-utils" "^7.24.5" - "@babel/helper-replace-supers" "^7.24.1" - "@babel/helper-split-export-declaration" "^7.24.5" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz" - integrity sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/template" "^7.22.15" - -"@babel/plugin-transform-computed-properties@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.1.tgz" - integrity sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/template" "^7.24.0" - -"@babel/plugin-transform-destructuring@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz" - integrity sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-destructuring@^7.24.5": - version "7.24.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.5.tgz" - integrity sha512-SZuuLyfxvsm+Ah57I/i1HVjveBENYK9ue8MJ7qkc7ndoNjqquJiElzA7f5yaAXjyW2hKojosOTAQQRX50bPSVg== - dependencies: - "@babel/helper-plugin-utils" "^7.24.5" - -"@babel/plugin-transform-dotall-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz" - integrity sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-dotall-regex@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.1.tgz" - integrity sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-duplicate-keys@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz" - integrity sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-duplicate-keys@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.1.tgz" - integrity sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-dynamic-import@^7.23.4": - version "7.23.4" - resolved "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz" - integrity sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - -"@babel/plugin-transform-dynamic-import@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.1.tgz" - integrity sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - -"@babel/plugin-transform-exponentiation-operator@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz" - integrity sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-exponentiation-operator@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.1.tgz" - integrity sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15" - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-export-namespace-from@^7.23.4": - version "7.23.4" - resolved "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz" - integrity sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-transform-export-namespace-from@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.1.tgz" - integrity sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-transform-for-of@^7.23.6": - version "7.23.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz" - integrity sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - -"@babel/plugin-transform-for-of@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz" - integrity sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - -"@babel/plugin-transform-function-name@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz" - integrity sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw== - dependencies: - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-function-name@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.1.tgz" - integrity sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA== - dependencies: - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-json-strings@^7.23.4": - version "7.23.4" - resolved "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz" - integrity sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-json-strings" "^7.8.3" - -"@babel/plugin-transform-json-strings@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.1.tgz" - integrity sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/plugin-syntax-json-strings" "^7.8.3" - -"@babel/plugin-transform-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz" - integrity sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-literals@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.1.tgz" - integrity sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-logical-assignment-operators@^7.23.4": - version "7.23.4" - resolved "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz" - integrity sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - -"@babel/plugin-transform-logical-assignment-operators@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.1.tgz" - integrity sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - -"@babel/plugin-transform-member-expression-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz" - integrity sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-member-expression-literals@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.1.tgz" - integrity sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-modules-amd@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz" - integrity sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw== - dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-modules-amd@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.1.tgz" - integrity sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ== - dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-modules-commonjs@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz" - integrity sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA== - dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-simple-access" "^7.22.5" - -"@babel/plugin-transform-modules-commonjs@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz" - integrity sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw== - dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-simple-access" "^7.22.5" - -"@babel/plugin-transform-modules-systemjs@^7.23.9": - version "7.23.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.9.tgz" - integrity sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw== - dependencies: - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.20" - -"@babel/plugin-transform-modules-systemjs@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.1.tgz" - integrity sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA== - dependencies: - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-validator-identifier" "^7.22.20" - -"@babel/plugin-transform-modules-umd@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz" - integrity sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg== - dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-modules-umd@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.1.tgz" - integrity sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg== - dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz" - integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-new-target@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz" - integrity sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-new-target@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.1.tgz" - integrity sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-nullish-coalescing-operator@^7.23.4": - version "7.23.4" - resolved "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz" - integrity sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - -"@babel/plugin-transform-nullish-coalescing-operator@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.1.tgz" - integrity sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - -"@babel/plugin-transform-numeric-separator@^7.23.4": - version "7.23.4" - resolved "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz" - integrity sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-transform-numeric-separator@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.1.tgz" - integrity sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-transform-object-rest-spread@^7.23.4": - version "7.23.4" - resolved "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz" - integrity sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g== - dependencies: - "@babel/compat-data" "^7.23.3" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.23.3" - -"@babel/plugin-transform-object-rest-spread@^7.24.5": - version "7.24.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.5.tgz" - integrity sha512-7EauQHszLGM3ay7a161tTQH7fj+3vVM/gThlz5HpFtnygTxjrlvoeq7MPVA1Vy9Q555OB8SnAOsMkLShNkkrHA== - dependencies: - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-plugin-utils" "^7.24.5" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.24.5" - -"@babel/plugin-transform-object-super@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz" - integrity sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.20" - -"@babel/plugin-transform-object-super@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.1.tgz" - integrity sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-replace-supers" "^7.24.1" - -"@babel/plugin-transform-optional-catch-binding@^7.23.4": - version "7.23.4" - resolved "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz" - integrity sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - -"@babel/plugin-transform-optional-catch-binding@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.1.tgz" - integrity sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - -"@babel/plugin-transform-optional-chaining@^7.23.3", "@babel/plugin-transform-optional-chaining@^7.23.4": - version "7.23.4" - resolved "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz" - integrity sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-transform-optional-chaining@^7.24.1", "@babel/plugin-transform-optional-chaining@^7.24.5": - version "7.24.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.5.tgz" - integrity sha512-xWCkmwKT+ihmA6l7SSTpk8e4qQl/274iNbSKRRS8mpqFR32ksy36+a+LWY8OXCCEefF8WFlnOHVsaDI2231wBg== - dependencies: - "@babel/helper-plugin-utils" "^7.24.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-transform-parameters@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz" - integrity sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-parameters@^7.24.5": - version "7.24.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.5.tgz" - integrity sha512-9Co00MqZ2aoky+4j2jhofErthm6QVLKbpQrvz20c3CH9KQCLHyNB+t2ya4/UrRpQGR+Wrwjg9foopoeSdnHOkA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.5" - -"@babel/plugin-transform-private-methods@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz" - integrity sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-private-methods@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.1.tgz" - integrity sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.24.1" - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-private-property-in-object@^7.23.4": - version "7.23.4" - resolved "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz" - integrity sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - -"@babel/plugin-transform-private-property-in-object@^7.24.5": - version "7.24.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.5.tgz" - integrity sha512-JM4MHZqnWR04jPMujQDTBVRnqxpLLpx2tkn7iPn+Hmsc0Gnb79yvRWOkvqFOx3Z7P7VxiRIR22c4eGSNj87OBQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.24.5" - "@babel/helper-plugin-utils" "^7.24.5" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - -"@babel/plugin-transform-property-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz" - integrity sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-property-literals@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.1.tgz" - integrity sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-react-constant-elements@^7.18.12": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.23.3.tgz" - integrity sha512-zP0QKq/p6O42OL94udMgSfKXyse4RyJ0JqbQ34zDAONWjyrEsghYEyTSK5FIpmXmCpB55SHokL1cRRKHv8L2Qw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-react-constant-elements@^7.21.3": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.24.1.tgz" - integrity sha512-QXp1U9x0R7tkiGB0FOk8o74jhnap0FlZ5gNkRIWdG3eP+SvMFg118e1zaWewDzgABb106QSKpVsD3Wgd8t6ifA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-react-display-name@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.23.3.tgz" - integrity sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-react-jsx-development@^7.22.5": - version "7.22.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz" - integrity sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A== - dependencies: - "@babel/plugin-transform-react-jsx" "^7.22.5" - -"@babel/plugin-transform-react-jsx@^7.22.15", "@babel/plugin-transform-react-jsx@^7.22.5": - version "7.23.4" - resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz" - integrity sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-jsx" "^7.23.3" - "@babel/types" "^7.23.4" - -"@babel/plugin-transform-react-pure-annotations@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.23.3.tgz" - integrity sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-regenerator@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz" - integrity sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - regenerator-transform "^0.15.2" - -"@babel/plugin-transform-regenerator@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.1.tgz" - integrity sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - regenerator-transform "^0.15.2" - -"@babel/plugin-transform-reserved-words@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz" - integrity sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-reserved-words@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.1.tgz" - integrity sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-runtime@^7.22.9": - version "7.23.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.9.tgz" - integrity sha512-A7clW3a0aSjm3ONU9o2HAILSegJCYlEZmOhmBRReVtIpY/Z/p7yIZ+wR41Z+UipwdGuqwtID/V/dOdZXjwi9gQ== - dependencies: - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - babel-plugin-polyfill-corejs2 "^0.4.8" - babel-plugin-polyfill-corejs3 "^0.9.0" - babel-plugin-polyfill-regenerator "^0.5.5" - semver "^6.3.1" - -"@babel/plugin-transform-shorthand-properties@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz" - integrity sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-shorthand-properties@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.1.tgz" - integrity sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-spread@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz" - integrity sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - -"@babel/plugin-transform-spread@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.1.tgz" - integrity sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - -"@babel/plugin-transform-sticky-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz" - integrity sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-sticky-regex@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.1.tgz" - integrity sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-template-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz" - integrity sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-template-literals@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.1.tgz" - integrity sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-typeof-symbol@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz" - integrity sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-typeof-symbol@^7.24.5": - version "7.24.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.5.tgz" - integrity sha512-UTGnhYVZtTAjdwOTzT+sCyXmTn8AhaxOS/MjG9REclZ6ULHWF9KoCZur0HSGU7hk8PdBFKKbYe6+gqdXWz84Jg== - dependencies: - "@babel/helper-plugin-utils" "^7.24.5" - -"@babel/plugin-transform-typescript@^7.23.3": - version "7.23.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz" - integrity sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.23.6" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-typescript" "^7.23.3" - -"@babel/plugin-transform-typescript@^7.24.1": - version "7.24.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.5.tgz" - integrity sha512-E0VWu/hk83BIFUWnsKZ4D81KXjN5L3MobvevOHErASk9IPwKHOkTgvqzvNo1yP/ePJWqqK2SpUR5z+KQbl6NVw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.24.5" - "@babel/helper-plugin-utils" "^7.24.5" - "@babel/plugin-syntax-typescript" "^7.24.1" - -"@babel/plugin-transform-unicode-escapes@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz" - integrity sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-escapes@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.1.tgz" - integrity sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-unicode-property-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz" - integrity sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-property-regex@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.1.tgz" - integrity sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-unicode-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz" - integrity sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-regex@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.1.tgz" - integrity sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/plugin-transform-unicode-sets-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz" - integrity sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-unicode-sets-regex@^7.24.1": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.1.tgz" - integrity sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.24.0" - -"@babel/preset-env@^7.19.4", "@babel/preset-env@^7.22.9": - version "7.23.9" - resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.9.tgz" - integrity sha512-3kBGTNBBk9DQiPoXYS0g0BYlwTQYUTifqgKTjxUwEUkduRT2QOa0FPGBJ+NROQhGyYO5BuTJwGvBnqKDykac6A== - dependencies: - "@babel/compat-data" "^7.23.5" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.23.5" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.23.3" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.23.3" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.23.7" - "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.23.3" - "@babel/plugin-syntax-import-attributes" "^7.23.3" - "@babel/plugin-syntax-import-meta" "^7.10.4" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.23.3" - "@babel/plugin-transform-async-generator-functions" "^7.23.9" - "@babel/plugin-transform-async-to-generator" "^7.23.3" - "@babel/plugin-transform-block-scoped-functions" "^7.23.3" - "@babel/plugin-transform-block-scoping" "^7.23.4" - "@babel/plugin-transform-class-properties" "^7.23.3" - "@babel/plugin-transform-class-static-block" "^7.23.4" - "@babel/plugin-transform-classes" "^7.23.8" - "@babel/plugin-transform-computed-properties" "^7.23.3" - "@babel/plugin-transform-destructuring" "^7.23.3" - "@babel/plugin-transform-dotall-regex" "^7.23.3" - "@babel/plugin-transform-duplicate-keys" "^7.23.3" - "@babel/plugin-transform-dynamic-import" "^7.23.4" - "@babel/plugin-transform-exponentiation-operator" "^7.23.3" - "@babel/plugin-transform-export-namespace-from" "^7.23.4" - "@babel/plugin-transform-for-of" "^7.23.6" - "@babel/plugin-transform-function-name" "^7.23.3" - "@babel/plugin-transform-json-strings" "^7.23.4" - "@babel/plugin-transform-literals" "^7.23.3" - "@babel/plugin-transform-logical-assignment-operators" "^7.23.4" - "@babel/plugin-transform-member-expression-literals" "^7.23.3" - "@babel/plugin-transform-modules-amd" "^7.23.3" - "@babel/plugin-transform-modules-commonjs" "^7.23.3" - "@babel/plugin-transform-modules-systemjs" "^7.23.9" - "@babel/plugin-transform-modules-umd" "^7.23.3" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" - "@babel/plugin-transform-new-target" "^7.23.3" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.23.4" - "@babel/plugin-transform-numeric-separator" "^7.23.4" - "@babel/plugin-transform-object-rest-spread" "^7.23.4" - "@babel/plugin-transform-object-super" "^7.23.3" - "@babel/plugin-transform-optional-catch-binding" "^7.23.4" - "@babel/plugin-transform-optional-chaining" "^7.23.4" - "@babel/plugin-transform-parameters" "^7.23.3" - "@babel/plugin-transform-private-methods" "^7.23.3" - "@babel/plugin-transform-private-property-in-object" "^7.23.4" - "@babel/plugin-transform-property-literals" "^7.23.3" - "@babel/plugin-transform-regenerator" "^7.23.3" - "@babel/plugin-transform-reserved-words" "^7.23.3" - "@babel/plugin-transform-shorthand-properties" "^7.23.3" - "@babel/plugin-transform-spread" "^7.23.3" - "@babel/plugin-transform-sticky-regex" "^7.23.3" - "@babel/plugin-transform-template-literals" "^7.23.3" - "@babel/plugin-transform-typeof-symbol" "^7.23.3" - "@babel/plugin-transform-unicode-escapes" "^7.23.3" - "@babel/plugin-transform-unicode-property-regex" "^7.23.3" - "@babel/plugin-transform-unicode-regex" "^7.23.3" - "@babel/plugin-transform-unicode-sets-regex" "^7.23.3" - "@babel/preset-modules" "0.1.6-no-external-plugins" - babel-plugin-polyfill-corejs2 "^0.4.8" - babel-plugin-polyfill-corejs3 "^0.9.0" - babel-plugin-polyfill-regenerator "^0.5.5" - core-js-compat "^3.31.0" - semver "^6.3.1" - -"@babel/preset-env@^7.20.2": - version "7.24.5" - resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.5.tgz" - integrity sha512-UGK2ifKtcC8i5AI4cH+sbLLuLc2ktYSFJgBAXorKAsHUZmrQ1q6aQ6i3BvU24wWs2AAKqQB6kq3N9V9Gw1HiMQ== - dependencies: - "@babel/compat-data" "^7.24.4" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-plugin-utils" "^7.24.5" - "@babel/helper-validator-option" "^7.23.5" - "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.24.5" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.24.1" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.24.1" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.24.1" - "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.24.1" - "@babel/plugin-syntax-import-attributes" "^7.24.1" - "@babel/plugin-syntax-import-meta" "^7.10.4" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.24.1" - "@babel/plugin-transform-async-generator-functions" "^7.24.3" - "@babel/plugin-transform-async-to-generator" "^7.24.1" - "@babel/plugin-transform-block-scoped-functions" "^7.24.1" - "@babel/plugin-transform-block-scoping" "^7.24.5" - "@babel/plugin-transform-class-properties" "^7.24.1" - "@babel/plugin-transform-class-static-block" "^7.24.4" - "@babel/plugin-transform-classes" "^7.24.5" - "@babel/plugin-transform-computed-properties" "^7.24.1" - "@babel/plugin-transform-destructuring" "^7.24.5" - "@babel/plugin-transform-dotall-regex" "^7.24.1" - "@babel/plugin-transform-duplicate-keys" "^7.24.1" - "@babel/plugin-transform-dynamic-import" "^7.24.1" - "@babel/plugin-transform-exponentiation-operator" "^7.24.1" - "@babel/plugin-transform-export-namespace-from" "^7.24.1" - "@babel/plugin-transform-for-of" "^7.24.1" - "@babel/plugin-transform-function-name" "^7.24.1" - "@babel/plugin-transform-json-strings" "^7.24.1" - "@babel/plugin-transform-literals" "^7.24.1" - "@babel/plugin-transform-logical-assignment-operators" "^7.24.1" - "@babel/plugin-transform-member-expression-literals" "^7.24.1" - "@babel/plugin-transform-modules-amd" "^7.24.1" - "@babel/plugin-transform-modules-commonjs" "^7.24.1" - "@babel/plugin-transform-modules-systemjs" "^7.24.1" - "@babel/plugin-transform-modules-umd" "^7.24.1" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" - "@babel/plugin-transform-new-target" "^7.24.1" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.24.1" - "@babel/plugin-transform-numeric-separator" "^7.24.1" - "@babel/plugin-transform-object-rest-spread" "^7.24.5" - "@babel/plugin-transform-object-super" "^7.24.1" - "@babel/plugin-transform-optional-catch-binding" "^7.24.1" - "@babel/plugin-transform-optional-chaining" "^7.24.5" - "@babel/plugin-transform-parameters" "^7.24.5" - "@babel/plugin-transform-private-methods" "^7.24.1" - "@babel/plugin-transform-private-property-in-object" "^7.24.5" - "@babel/plugin-transform-property-literals" "^7.24.1" - "@babel/plugin-transform-regenerator" "^7.24.1" - "@babel/plugin-transform-reserved-words" "^7.24.1" - "@babel/plugin-transform-shorthand-properties" "^7.24.1" - "@babel/plugin-transform-spread" "^7.24.1" - "@babel/plugin-transform-sticky-regex" "^7.24.1" - "@babel/plugin-transform-template-literals" "^7.24.1" - "@babel/plugin-transform-typeof-symbol" "^7.24.5" - "@babel/plugin-transform-unicode-escapes" "^7.24.1" - "@babel/plugin-transform-unicode-property-regex" "^7.24.1" - "@babel/plugin-transform-unicode-regex" "^7.24.1" - "@babel/plugin-transform-unicode-sets-regex" "^7.24.1" - "@babel/preset-modules" "0.1.6-no-external-plugins" - babel-plugin-polyfill-corejs2 "^0.4.10" - babel-plugin-polyfill-corejs3 "^0.10.4" - babel-plugin-polyfill-regenerator "^0.6.1" - core-js-compat "^3.31.0" - semver "^6.3.1" - -"@babel/preset-modules@0.1.6-no-external-plugins": - version "0.1.6-no-external-plugins" - resolved "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz" - integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/types" "^7.4.4" - esutils "^2.0.2" - -"@babel/preset-react@^7.18.6", "@babel/preset-react@^7.22.5": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.23.3.tgz" - integrity sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-transform-react-display-name" "^7.23.3" - "@babel/plugin-transform-react-jsx" "^7.22.15" - "@babel/plugin-transform-react-jsx-development" "^7.22.5" - "@babel/plugin-transform-react-pure-annotations" "^7.23.3" - -"@babel/preset-typescript@^7.18.6", "@babel/preset-typescript@^7.22.5": - version "7.23.3" - resolved "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.23.3.tgz" - integrity sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-syntax-jsx" "^7.23.3" - "@babel/plugin-transform-modules-commonjs" "^7.23.3" - "@babel/plugin-transform-typescript" "^7.23.3" - -"@babel/preset-typescript@^7.21.0": - version "7.24.1" - resolved "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.24.1.tgz" - integrity sha512-1DBaMmRDpuYQBPWD8Pf/WEwCrtgRHxsZnP4mIy9G/X+hFfbI47Q2G4t1Paakld84+qsk2fSsUPMKg71jkoOOaQ== - dependencies: - "@babel/helper-plugin-utils" "^7.24.0" - "@babel/helper-validator-option" "^7.23.5" - "@babel/plugin-syntax-jsx" "^7.24.1" - "@babel/plugin-transform-modules-commonjs" "^7.24.1" - "@babel/plugin-transform-typescript" "^7.24.1" - -"@babel/regjsgen@^0.8.0": - version "0.8.0" - resolved "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz" - integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== - -"@babel/runtime-corejs3@^7.22.6": - version "7.23.9" - resolved "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.23.9.tgz" - integrity sha512-oeOFTrYWdWXCvXGB5orvMTJ6gCZ9I6FBjR+M38iKNXCsPxr4xT0RTdg5uz1H7QP8pp74IzPtwritEr+JscqHXQ== - dependencies: - core-js-pure "^3.30.2" - regenerator-runtime "^0.14.0" - -"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.22.6", "@babel/runtime@^7.8.4": - version "7.23.9" - resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz" - integrity sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/template@^7.22.15", "@babel/template@^7.24.0", "@babel/template@^7.25.9": - version "7.25.9" - resolved "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz" - integrity sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg== - dependencies: - "@babel/code-frame" "^7.25.9" - "@babel/parser" "^7.25.9" - "@babel/types" "^7.25.9" - -"@babel/traverse@^7.22.8", "@babel/traverse@^7.25.9": - version "7.26.4" - resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.4.tgz" - integrity sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w== - dependencies: - "@babel/code-frame" "^7.26.2" - "@babel/generator" "^7.26.3" - "@babel/parser" "^7.26.3" - "@babel/template" "^7.25.9" - "@babel/types" "^7.26.3" - debug "^4.3.1" - globals "^11.1.0" - -"@babel/types@^7.20.0", "@babel/types@^7.21.3", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.4", "@babel/types@^7.24.5", "@babel/types@^7.25.9", "@babel/types@^7.26.0", "@babel/types@^7.26.3", "@babel/types@^7.4.4": - version "7.26.3" - resolved "https://registry.npmjs.org/@babel/types/-/types-7.26.3.tgz" - integrity sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA== - dependencies: - "@babel/helper-string-parser" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" - -"@colors/colors@1.5.0": - version "1.5.0" - resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz" - integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== - -"@discoveryjs/json-ext@0.5.7": - version "0.5.7" - resolved "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz" - integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== - -"@docsearch/css@3.5.2": - version "3.5.2" - resolved "https://registry.npmjs.org/@docsearch/css/-/css-3.5.2.tgz" - integrity sha512-SPiDHaWKQZpwR2siD0KQUwlStvIAnEyK6tAE2h2Wuoq8ue9skzhlyVQ1ddzOxX6khULnAALDiR/isSF3bnuciA== - -"@docsearch/react@^3.5.2": - version "3.5.2" - resolved "https://registry.npmjs.org/@docsearch/react/-/react-3.5.2.tgz" - integrity sha512-9Ahcrs5z2jq/DcAvYtvlqEBHImbm4YJI8M9y0x6Tqg598P40HTEkX7hsMcIuThI+hTFxRGZ9hll0Wygm2yEjng== - dependencies: - "@algolia/autocomplete-core" "1.9.3" - "@algolia/autocomplete-preset-algolia" "1.9.3" - "@docsearch/css" "3.5.2" - algoliasearch "^4.19.1" - -"@docusaurus/core@^3.4.0", "@docusaurus/core@3.4.0": - version "3.4.0" - resolved "https://registry.npmjs.org/@docusaurus/core/-/core-3.4.0.tgz" - integrity sha512-g+0wwmN2UJsBqy2fQRQ6fhXruoEa62JDeEa5d8IdTJlMoaDaEDfHh7WjwGRn4opuTQWpjAwP/fbcgyHKlE+64w== - dependencies: - "@babel/core" "^7.23.3" - "@babel/generator" "^7.23.3" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-transform-runtime" "^7.22.9" - "@babel/preset-env" "^7.22.9" - "@babel/preset-react" "^7.22.5" - "@babel/preset-typescript" "^7.22.5" - "@babel/runtime" "^7.22.6" - "@babel/runtime-corejs3" "^7.22.6" - "@babel/traverse" "^7.22.8" - "@docusaurus/cssnano-preset" "3.4.0" - "@docusaurus/logger" "3.4.0" - "@docusaurus/mdx-loader" "3.4.0" - "@docusaurus/utils" "3.4.0" - "@docusaurus/utils-common" "3.4.0" - "@docusaurus/utils-validation" "3.4.0" - autoprefixer "^10.4.14" - babel-loader "^9.1.3" - babel-plugin-dynamic-import-node "^2.3.3" - boxen "^6.2.1" - chalk "^4.1.2" - chokidar "^3.5.3" - clean-css "^5.3.2" - cli-table3 "^0.6.3" - combine-promises "^1.1.0" - commander "^5.1.0" - copy-webpack-plugin "^11.0.0" - core-js "^3.31.1" - css-loader "^6.8.1" - css-minimizer-webpack-plugin "^5.0.1" - cssnano "^6.1.2" - del "^6.1.1" - detect-port "^1.5.1" - escape-html "^1.0.3" - eta "^2.2.0" - eval "^0.1.8" - file-loader "^6.2.0" - fs-extra "^11.1.1" - html-minifier-terser "^7.2.0" - html-tags "^3.3.1" - html-webpack-plugin "^5.5.3" - leven "^3.1.0" - lodash "^4.17.21" - mini-css-extract-plugin "^2.7.6" - p-map "^4.0.0" - postcss "^8.4.26" - postcss-loader "^7.3.3" - prompts "^2.4.2" - react-dev-utils "^12.0.1" - react-helmet-async "^1.3.0" - react-loadable "npm:@docusaurus/react-loadable@6.0.0" - react-loadable-ssr-addon-v5-slorber "^1.0.1" - react-router "^5.3.4" - react-router-config "^5.1.1" - react-router-dom "^5.3.4" - rtl-detect "^1.0.4" - semver "^7.5.4" - serve-handler "^6.1.5" - shelljs "^0.8.5" - terser-webpack-plugin "^5.3.9" - tslib "^2.6.0" - update-notifier "^6.0.2" - url-loader "^4.1.1" - webpack "^5.88.1" - webpack-bundle-analyzer "^4.9.0" - webpack-dev-server "^4.15.1" - webpack-merge "^5.9.0" - webpackbar "^5.0.2" - -"@docusaurus/cssnano-preset@3.4.0": - version "3.4.0" - resolved "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.4.0.tgz" - integrity sha512-qwLFSz6v/pZHy/UP32IrprmH5ORce86BGtN0eBtG75PpzQJAzp9gefspox+s8IEOr0oZKuQ/nhzZ3xwyc3jYJQ== - dependencies: - cssnano-preset-advanced "^6.1.2" - postcss "^8.4.38" - postcss-sort-media-queries "^5.2.0" - tslib "^2.6.0" - -"@docusaurus/logger@3.1.1": - version "3.1.1" - resolved "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.1.1.tgz" - integrity sha512-BjkNDpQzewcTnST8trx4idSoAla6zZ3w22NqM/UMcFtvYJgmoE4layuTzlfql3VFPNuivvj7BOExa/+21y4X2Q== - dependencies: - chalk "^4.1.2" - tslib "^2.6.0" - -"@docusaurus/logger@3.4.0": - version "3.4.0" - resolved "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.4.0.tgz" - integrity sha512-bZwkX+9SJ8lB9kVRkXw+xvHYSMGG4bpYHKGXeXFvyVc79NMeeBSGgzd4TQLHH+DYeOJoCdl8flrFJVxlZ0wo/Q== - dependencies: - chalk "^4.1.2" - tslib "^2.6.0" - -"@docusaurus/mdx-loader@3.4.0": - version "3.4.0" - resolved "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.4.0.tgz" - integrity sha512-kSSbrrk4nTjf4d+wtBA9H+FGauf2gCax89kV8SUSJu3qaTdSIKdWERlngsiHaCFgZ7laTJ8a67UFf+xlFPtuTw== - dependencies: - "@docusaurus/logger" "3.4.0" - "@docusaurus/utils" "3.4.0" - "@docusaurus/utils-validation" "3.4.0" - "@mdx-js/mdx" "^3.0.0" - "@slorber/remark-comment" "^1.0.0" - escape-html "^1.0.3" - estree-util-value-to-estree "^3.0.1" - file-loader "^6.2.0" - fs-extra "^11.1.1" - image-size "^1.0.2" - mdast-util-mdx "^3.0.0" - mdast-util-to-string "^4.0.0" - rehype-raw "^7.0.0" - remark-directive "^3.0.0" - remark-emoji "^4.0.0" - remark-frontmatter "^5.0.0" - remark-gfm "^4.0.0" - stringify-object "^3.3.0" - tslib "^2.6.0" - unified "^11.0.3" - unist-util-visit "^5.0.0" - url-loader "^4.1.1" - vfile "^6.0.1" - webpack "^5.88.1" - -"@docusaurus/module-type-aliases@^3.3.2": - version "3.3.2" - resolved "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.3.2.tgz" - integrity sha512-b/XB0TBJah5yKb4LYuJT4buFvL0MGAb0+vJDrJtlYMguRtsEBkf2nWl5xP7h4Dlw6ol0hsHrCYzJ50kNIOEclw== - dependencies: - "@docusaurus/types" "3.3.2" - "@types/history" "^4.7.11" - "@types/react" "*" - "@types/react-router-config" "*" - "@types/react-router-dom" "*" - react-helmet-async "*" - react-loadable "npm:@docusaurus/react-loadable@6.0.0" - -"@docusaurus/module-type-aliases@3.4.0": - version "3.4.0" - resolved "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.4.0.tgz" - integrity sha512-A1AyS8WF5Bkjnb8s+guTDuYmUiwJzNrtchebBHpc0gz0PyHJNMaybUlSrmJjHVcGrya0LKI4YcR3lBDQfXRYLw== - dependencies: - "@docusaurus/types" "3.4.0" - "@types/history" "^4.7.11" - "@types/react" "*" - "@types/react-router-config" "*" - "@types/react-router-dom" "*" - react-helmet-async "*" - react-loadable "npm:@docusaurus/react-loadable@6.0.0" - -"@docusaurus/plugin-client-redirects@^3.4.0": - version "3.4.0" - resolved "https://registry.npmjs.org/@docusaurus/plugin-client-redirects/-/plugin-client-redirects-3.4.0.tgz" - integrity sha512-Pr8kyh/+OsmYCvdZhc60jy/FnrY6flD2TEAhl4rJxeVFxnvvRgEhoaIVX8q9MuJmaQoh6frPk94pjs7/6YgBDQ== - dependencies: - "@docusaurus/core" "3.4.0" - "@docusaurus/logger" "3.4.0" - "@docusaurus/utils" "3.4.0" - "@docusaurus/utils-common" "3.4.0" - "@docusaurus/utils-validation" "3.4.0" - eta "^2.2.0" - fs-extra "^11.1.1" - lodash "^4.17.21" - tslib "^2.6.0" - -"@docusaurus/plugin-content-blog@3.4.0": - version "3.4.0" - resolved "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.4.0.tgz" - integrity sha512-vv6ZAj78ibR5Jh7XBUT4ndIjmlAxkijM3Sx5MAAzC1gyv0vupDQNhzuFg1USQmQVj3P5I6bquk12etPV3LJ+Xw== - dependencies: - "@docusaurus/core" "3.4.0" - "@docusaurus/logger" "3.4.0" - "@docusaurus/mdx-loader" "3.4.0" - "@docusaurus/types" "3.4.0" - "@docusaurus/utils" "3.4.0" - "@docusaurus/utils-common" "3.4.0" - "@docusaurus/utils-validation" "3.4.0" - cheerio "^1.0.0-rc.12" - feed "^4.2.2" - fs-extra "^11.1.1" - lodash "^4.17.21" - reading-time "^1.5.0" - srcset "^4.0.0" - tslib "^2.6.0" - unist-util-visit "^5.0.0" - utility-types "^3.10.0" - webpack "^5.88.1" - -"@docusaurus/plugin-content-docs@3.4.0": - version "3.4.0" - resolved "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.4.0.tgz" - integrity sha512-HkUCZffhBo7ocYheD9oZvMcDloRnGhBMOZRyVcAQRFmZPmNqSyISlXA1tQCIxW+r478fty97XXAGjNYzBjpCsg== - dependencies: - "@docusaurus/core" "3.4.0" - "@docusaurus/logger" "3.4.0" - "@docusaurus/mdx-loader" "3.4.0" - "@docusaurus/module-type-aliases" "3.4.0" - "@docusaurus/types" "3.4.0" - "@docusaurus/utils" "3.4.0" - "@docusaurus/utils-common" "3.4.0" - "@docusaurus/utils-validation" "3.4.0" - "@types/react-router-config" "^5.0.7" - combine-promises "^1.1.0" - fs-extra "^11.1.1" - js-yaml "^4.1.0" - lodash "^4.17.21" - tslib "^2.6.0" - utility-types "^3.10.0" - webpack "^5.88.1" - -"@docusaurus/plugin-content-pages@3.4.0": - version "3.4.0" - resolved "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.4.0.tgz" - integrity sha512-h2+VN/0JjpR8fIkDEAoadNjfR3oLzB+v1qSXbIAKjQ46JAHx3X22n9nqS+BWSQnTnp1AjkjSvZyJMekmcwxzxg== - dependencies: - "@docusaurus/core" "3.4.0" - "@docusaurus/mdx-loader" "3.4.0" - "@docusaurus/types" "3.4.0" - "@docusaurus/utils" "3.4.0" - "@docusaurus/utils-validation" "3.4.0" - fs-extra "^11.1.1" - tslib "^2.6.0" - webpack "^5.88.1" - -"@docusaurus/plugin-debug@3.4.0": - version "3.4.0" - resolved "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.4.0.tgz" - integrity sha512-uV7FDUNXGyDSD3PwUaf5YijX91T5/H9SX4ErEcshzwgzWwBtK37nUWPU3ZLJfeTavX3fycTOqk9TglpOLaWkCg== - dependencies: - "@docusaurus/core" "3.4.0" - "@docusaurus/types" "3.4.0" - "@docusaurus/utils" "3.4.0" - fs-extra "^11.1.1" - react-json-view-lite "^1.2.0" - tslib "^2.6.0" - -"@docusaurus/plugin-google-analytics@3.4.0": - version "3.4.0" - resolved "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.4.0.tgz" - integrity sha512-mCArluxEGi3cmYHqsgpGGt3IyLCrFBxPsxNZ56Mpur0xSlInnIHoeLDH7FvVVcPJRPSQ9/MfRqLsainRw+BojA== - dependencies: - "@docusaurus/core" "3.4.0" - "@docusaurus/types" "3.4.0" - "@docusaurus/utils-validation" "3.4.0" - tslib "^2.6.0" - -"@docusaurus/plugin-google-gtag@3.4.0": - version "3.4.0" - resolved "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.4.0.tgz" - integrity sha512-Dsgg6PLAqzZw5wZ4QjUYc8Z2KqJqXxHxq3vIoyoBWiLEEfigIs7wHR+oiWUQy3Zk9MIk6JTYj7tMoQU0Jm3nqA== - dependencies: - "@docusaurus/core" "3.4.0" - "@docusaurus/types" "3.4.0" - "@docusaurus/utils-validation" "3.4.0" - "@types/gtag.js" "^0.0.12" - tslib "^2.6.0" - -"@docusaurus/plugin-google-tag-manager@3.4.0": - version "3.4.0" - resolved "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.4.0.tgz" - integrity sha512-O9tX1BTwxIhgXpOLpFDueYA9DWk69WCbDRrjYoMQtFHSkTyE7RhNgyjSPREUWJb9i+YUg3OrsvrBYRl64FCPCQ== - dependencies: - "@docusaurus/core" "3.4.0" - "@docusaurus/types" "3.4.0" - "@docusaurus/utils-validation" "3.4.0" - tslib "^2.6.0" - -"@docusaurus/plugin-sitemap@3.4.0": - version "3.4.0" - resolved "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.4.0.tgz" - integrity sha512-+0VDvx9SmNrFNgwPoeoCha+tRoAjopwT0+pYO1xAbyLcewXSemq+eLxEa46Q1/aoOaJQ0qqHELuQM7iS2gp33Q== - dependencies: - "@docusaurus/core" "3.4.0" - "@docusaurus/logger" "3.4.0" - "@docusaurus/types" "3.4.0" - "@docusaurus/utils" "3.4.0" - "@docusaurus/utils-common" "3.4.0" - "@docusaurus/utils-validation" "3.4.0" - fs-extra "^11.1.1" - sitemap "^7.1.1" - tslib "^2.6.0" - -"@docusaurus/preset-classic@^3.4.0": - version "3.4.0" - resolved "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.4.0.tgz" - integrity sha512-Ohj6KB7siKqZaQhNJVMBBUzT3Nnp6eTKqO+FXO3qu/n1hJl3YLwVKTWBg28LF7MWrKu46UuYavwMRxud0VyqHg== - dependencies: - "@docusaurus/core" "3.4.0" - "@docusaurus/plugin-content-blog" "3.4.0" - "@docusaurus/plugin-content-docs" "3.4.0" - "@docusaurus/plugin-content-pages" "3.4.0" - "@docusaurus/plugin-debug" "3.4.0" - "@docusaurus/plugin-google-analytics" "3.4.0" - "@docusaurus/plugin-google-gtag" "3.4.0" - "@docusaurus/plugin-google-tag-manager" "3.4.0" - "@docusaurus/plugin-sitemap" "3.4.0" - "@docusaurus/theme-classic" "3.4.0" - "@docusaurus/theme-common" "3.4.0" - "@docusaurus/theme-search-algolia" "3.4.0" - "@docusaurus/types" "3.4.0" - -"@docusaurus/theme-classic@3.4.0": - version "3.4.0" - resolved "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.4.0.tgz" - integrity sha512-0IPtmxsBYv2adr1GnZRdMkEQt1YW6tpzrUPj02YxNpvJ5+ju4E13J5tB4nfdaen/tfR1hmpSPlTFPvTf4kwy8Q== - dependencies: - "@docusaurus/core" "3.4.0" - "@docusaurus/mdx-loader" "3.4.0" - "@docusaurus/module-type-aliases" "3.4.0" - "@docusaurus/plugin-content-blog" "3.4.0" - "@docusaurus/plugin-content-docs" "3.4.0" - "@docusaurus/plugin-content-pages" "3.4.0" - "@docusaurus/theme-common" "3.4.0" - "@docusaurus/theme-translations" "3.4.0" - "@docusaurus/types" "3.4.0" - "@docusaurus/utils" "3.4.0" - "@docusaurus/utils-common" "3.4.0" - "@docusaurus/utils-validation" "3.4.0" - "@mdx-js/react" "^3.0.0" - clsx "^2.0.0" - copy-text-to-clipboard "^3.2.0" - infima "0.2.0-alpha.43" - lodash "^4.17.21" - nprogress "^0.2.0" - postcss "^8.4.26" - prism-react-renderer "^2.3.0" - prismjs "^1.29.0" - react-router-dom "^5.3.4" - rtlcss "^4.1.0" - tslib "^2.6.0" - utility-types "^3.10.0" - -"@docusaurus/theme-common@3.4.0": - version "3.4.0" - resolved "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.4.0.tgz" - integrity sha512-0A27alXuv7ZdCg28oPE8nH/Iz73/IUejVaCazqu9elS4ypjiLhK3KfzdSQBnL/g7YfHSlymZKdiOHEo8fJ0qMA== - dependencies: - "@docusaurus/mdx-loader" "3.4.0" - "@docusaurus/module-type-aliases" "3.4.0" - "@docusaurus/plugin-content-blog" "3.4.0" - "@docusaurus/plugin-content-docs" "3.4.0" - "@docusaurus/plugin-content-pages" "3.4.0" - "@docusaurus/utils" "3.4.0" - "@docusaurus/utils-common" "3.4.0" - "@types/history" "^4.7.11" - "@types/react" "*" - "@types/react-router-config" "*" - clsx "^2.0.0" - parse-numeric-range "^1.3.0" - prism-react-renderer "^2.3.0" - tslib "^2.6.0" - utility-types "^3.10.0" - -"@docusaurus/theme-search-algolia@3.4.0": - version "3.4.0" - resolved "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.4.0.tgz" - integrity sha512-aiHFx7OCw4Wck1z6IoShVdUWIjntC8FHCw9c5dR8r3q4Ynh+zkS8y2eFFunN/DL6RXPzpnvKCg3vhLQYJDmT9Q== - dependencies: - "@docsearch/react" "^3.5.2" - "@docusaurus/core" "3.4.0" - "@docusaurus/logger" "3.4.0" - "@docusaurus/plugin-content-docs" "3.4.0" - "@docusaurus/theme-common" "3.4.0" - "@docusaurus/theme-translations" "3.4.0" - "@docusaurus/utils" "3.4.0" - "@docusaurus/utils-validation" "3.4.0" - algoliasearch "^4.18.0" - algoliasearch-helper "^3.13.3" - clsx "^2.0.0" - eta "^2.2.0" - fs-extra "^11.1.1" - lodash "^4.17.21" - tslib "^2.6.0" - utility-types "^3.10.0" - -"@docusaurus/theme-translations@3.4.0": - version "3.4.0" - resolved "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.4.0.tgz" - integrity sha512-zSxCSpmQCCdQU5Q4CnX/ID8CSUUI3fvmq4hU/GNP/XoAWtXo9SAVnM3TzpU8Gb//H3WCsT8mJcTfyOk3d9ftNg== - dependencies: - fs-extra "^11.1.1" - tslib "^2.6.0" - -"@docusaurus/tsconfig@^3.3.2": - version "3.3.2" - resolved "https://registry.npmjs.org/@docusaurus/tsconfig/-/tsconfig-3.3.2.tgz" - integrity sha512-2MQXkLoWqgOSiqFojNEq8iPtFBHGQqd1b/SQMoe+v3GgHmk/L6YTTO/hMcHhWb1hTFmbkei++IajSfD3RlZKvw== - -"@docusaurus/types@*", "@docusaurus/types@^3.3.2", "@docusaurus/types@3.3.2": - version "3.3.2" - resolved "https://registry.npmjs.org/@docusaurus/types/-/types-3.3.2.tgz" - integrity sha512-5p201S7AZhliRxTU7uMKtSsoC8mgPA9bs9b5NQg1IRdRxJfflursXNVsgc3PcMqiUTul/v1s3k3rXXFlRE890w== - dependencies: - "@mdx-js/mdx" "^3.0.0" - "@types/history" "^4.7.11" - "@types/react" "*" - commander "^5.1.0" - joi "^17.9.2" - react-helmet-async "^1.3.0" - utility-types "^3.10.0" - webpack "^5.88.1" - webpack-merge "^5.9.0" - -"@docusaurus/types@3.4.0": - version "3.4.0" - resolved "https://registry.npmjs.org/@docusaurus/types/-/types-3.4.0.tgz" - integrity sha512-4jcDO8kXi5Cf9TcyikB/yKmz14f2RZ2qTRerbHAsS+5InE9ZgSLBNLsewtFTcTOXSVcbU3FoGOzcNWAmU1TR0A== - dependencies: - "@mdx-js/mdx" "^3.0.0" - "@types/history" "^4.7.11" - "@types/react" "*" - commander "^5.1.0" - joi "^17.9.2" - react-helmet-async "^1.3.0" - utility-types "^3.10.0" - webpack "^5.88.1" - webpack-merge "^5.9.0" - -"@docusaurus/utils-common@3.4.0": - version "3.4.0" - resolved "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.4.0.tgz" - integrity sha512-NVx54Wr4rCEKsjOH5QEVvxIqVvm+9kh7q8aYTU5WzUU9/Hctd6aTrcZ3G0Id4zYJ+AeaG5K5qHA4CY5Kcm2iyQ== - dependencies: - tslib "^2.6.0" - -"@docusaurus/utils-validation@^3": - version "3.1.1" - resolved "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.1.1.tgz" - integrity sha512-KlY4P9YVDnwL+nExvlIpu79abfEv6ZCHuOX4ZQ+gtip+Wxj0daccdReIWWtqxM/Fb5Cz1nQvUCc7VEtT8IBUAA== - dependencies: - "@docusaurus/logger" "3.1.1" - "@docusaurus/utils" "3.1.1" - joi "^17.9.2" - js-yaml "^4.1.0" - tslib "^2.6.0" - -"@docusaurus/utils-validation@3.4.0": - version "3.4.0" - resolved "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.4.0.tgz" - integrity sha512-hYQ9fM+AXYVTWxJOT1EuNaRnrR2WGpRdLDQG07O8UOpsvCPWUVOeo26Rbm0JWY2sGLfzAb+tvJ62yF+8F+TV0g== - dependencies: - "@docusaurus/logger" "3.4.0" - "@docusaurus/utils" "3.4.0" - "@docusaurus/utils-common" "3.4.0" - fs-extra "^11.2.0" - joi "^17.9.2" - js-yaml "^4.1.0" - lodash "^4.17.21" - tslib "^2.6.0" - -"@docusaurus/utils@3.1.1": - version "3.1.1" - resolved "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.1.1.tgz" - integrity sha512-ZJfJa5cJQtRYtqijsPEnAZoduW6sjAQ7ZCWSZavLcV10Fw0Z3gSaPKA/B4micvj2afRZ4gZxT7KfYqe5H8Cetg== - dependencies: - "@docusaurus/logger" "3.1.1" - "@svgr/webpack" "^6.5.1" - escape-string-regexp "^4.0.0" - file-loader "^6.2.0" - fs-extra "^11.1.1" - github-slugger "^1.5.0" - globby "^11.1.0" - gray-matter "^4.0.3" - jiti "^1.20.0" - js-yaml "^4.1.0" - lodash "^4.17.21" - micromatch "^4.0.5" - resolve-pathname "^3.0.0" - shelljs "^0.8.5" - tslib "^2.6.0" - url-loader "^4.1.1" - webpack "^5.88.1" - -"@docusaurus/utils@3.4.0": - version "3.4.0" - resolved "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.4.0.tgz" - integrity sha512-fRwnu3L3nnWaXOgs88BVBmG1yGjcQqZNHG+vInhEa2Sz2oQB+ZjbEMO5Rh9ePFpZ0YDiDUhpaVjwmS+AU2F14g== - dependencies: - "@docusaurus/logger" "3.4.0" - "@docusaurus/utils-common" "3.4.0" - "@svgr/webpack" "^8.1.0" - escape-string-regexp "^4.0.0" - file-loader "^6.2.0" - fs-extra "^11.1.1" - github-slugger "^1.5.0" - globby "^11.1.0" - gray-matter "^4.0.3" - jiti "^1.20.0" - js-yaml "^4.1.0" - lodash "^4.17.21" - micromatch "^4.0.5" - prompts "^2.4.2" - resolve-pathname "^3.0.0" - shelljs "^0.8.5" - tslib "^2.6.0" - url-loader "^4.1.1" - utility-types "^3.10.0" - webpack "^5.88.1" - -"@gracefullight/docusaurus-plugin-vercel-analytics@^1.0.0": - version "1.0.1" - resolved "https://registry.npmjs.org/@gracefullight/docusaurus-plugin-vercel-analytics/-/docusaurus-plugin-vercel-analytics-1.0.1.tgz" - integrity sha512-6Xj63GIBadwLhoDVNpRXlEs3ieTetd8ZcNGKIJ8ADT0IjZIvcIW6CZFY5RgGtxuJ4PxFXVU2DDV14M2uXXTvGQ== - dependencies: - "@docusaurus/utils-validation" "^3" - -"@hapi/hoek@^9.0.0", "@hapi/hoek@^9.3.0": - version "9.3.0" - resolved "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz" - integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== - -"@hapi/topo@^5.1.0": - version "5.1.0" - resolved "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz" - integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== - dependencies: - "@hapi/hoek" "^9.0.0" - -"@jest/schemas@^29.6.3": - version "29.6.3" - resolved "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz" - integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== - dependencies: - "@sinclair/typebox" "^0.27.8" - -"@jest/types@^29.6.3": - version "29.6.3" - resolved "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz" - integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== - dependencies: - "@jest/schemas" "^29.6.3" - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^17.0.8" - chalk "^4.0.0" - -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.5": - version "0.3.5" - resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz" - integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== - dependencies: - "@jridgewell/set-array" "^1.2.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.24" - -"@jridgewell/resolve-uri@^3.1.0": - version "3.1.2" - resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz" - integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== - -"@jridgewell/set-array@^1.2.1": - version "1.2.1" - resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz" - integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== - -"@jridgewell/source-map@^0.3.3": - version "0.3.5" - resolved "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz" - integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.4.15" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.25" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz" - integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@leichtgewicht/ip-codec@^2.0.1": - version "2.0.4" - resolved "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz" - integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== - -"@mdx-js/mdx@^3.0.0": - version "3.0.1" - resolved "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.0.1.tgz" - integrity sha512-eIQ4QTrOWyL3LWEe/bu6Taqzq2HQvHcyTMaOrI95P2/LmJE7AsfPfgJGuFLPVqBUE1BC1rik3VIhU+s9u72arA== - dependencies: - "@types/estree" "^1.0.0" - "@types/estree-jsx" "^1.0.0" - "@types/hast" "^3.0.0" - "@types/mdx" "^2.0.0" - collapse-white-space "^2.0.0" - devlop "^1.0.0" - estree-util-build-jsx "^3.0.0" - estree-util-is-identifier-name "^3.0.0" - estree-util-to-js "^2.0.0" - estree-walker "^3.0.0" - hast-util-to-estree "^3.0.0" - hast-util-to-jsx-runtime "^2.0.0" - markdown-extensions "^2.0.0" - periscopic "^3.0.0" - remark-mdx "^3.0.0" - remark-parse "^11.0.0" - remark-rehype "^11.0.0" - source-map "^0.7.0" - unified "^11.0.0" - unist-util-position-from-estree "^2.0.0" - unist-util-stringify-position "^4.0.0" - unist-util-visit "^5.0.0" - vfile "^6.0.0" - -"@mdx-js/react@^3.0.0": - version "3.0.1" - resolved "https://registry.npmjs.org/@mdx-js/react/-/react-3.0.1.tgz" - integrity sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A== - dependencies: - "@types/mdx" "^2.0.0" - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": - version "2.0.5" - resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@pnpm/config.env-replace@^1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz" - integrity sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w== - -"@pnpm/network.ca-file@^1.0.1": - version "1.0.2" - resolved "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz" - integrity sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA== - dependencies: - graceful-fs "4.2.10" - -"@pnpm/npm-conf@^2.1.0": - version "2.2.2" - resolved "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz" - integrity sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA== - dependencies: - "@pnpm/config.env-replace" "^1.1.0" - "@pnpm/network.ca-file" "^1.0.1" - config-chain "^1.1.11" - -"@polka/url@^1.0.0-next.24": - version "1.0.0-next.24" - resolved "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.24.tgz" - integrity sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ== - -"@sideway/address@^4.1.5": - version "4.1.5" - resolved "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz" - integrity sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q== - dependencies: - "@hapi/hoek" "^9.0.0" - -"@sideway/formula@^3.0.1": - version "3.0.1" - resolved "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz" - integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg== - -"@sideway/pinpoint@^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz" - integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== - -"@sinclair/typebox@^0.27.8": - version "0.27.8" - resolved "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz" - integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== - -"@sindresorhus/is@^4.6.0": - version "4.6.0" - resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz" - integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== - -"@sindresorhus/is@^5.2.0": - version "5.6.0" - resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz" - integrity sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g== - -"@slorber/remark-comment@^1.0.0": - version "1.0.0" - resolved "https://registry.npmjs.org/@slorber/remark-comment/-/remark-comment-1.0.0.tgz" - integrity sha512-RCE24n7jsOj1M0UPvIQCHTe7fI0sFL4S2nwKVWwHyVr/wI/H8GosgsJGyhnsZoGFnD/P2hLf1mSbrrgSLN93NA== - dependencies: - micromark-factory-space "^1.0.0" - micromark-util-character "^1.1.0" - micromark-util-symbol "^1.0.1" - -"@svgr/babel-plugin-add-jsx-attribute@^6.5.1": - version "6.5.1" - resolved "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz" - integrity sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ== - -"@svgr/babel-plugin-add-jsx-attribute@8.0.0": - version "8.0.0" - resolved "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz" - integrity sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g== - -"@svgr/babel-plugin-remove-jsx-attribute@*", "@svgr/babel-plugin-remove-jsx-attribute@8.0.0": - version "8.0.0" - resolved "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz" - integrity sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA== - -"@svgr/babel-plugin-remove-jsx-empty-expression@*", "@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0": - version "8.0.0" - resolved "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz" - integrity sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA== - -"@svgr/babel-plugin-replace-jsx-attribute-value@^6.5.1": - version "6.5.1" - resolved "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz" - integrity sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg== - -"@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0": - version "8.0.0" - resolved "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz" - integrity sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ== - -"@svgr/babel-plugin-svg-dynamic-title@^6.5.1": - version "6.5.1" - resolved "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz" - integrity sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw== - -"@svgr/babel-plugin-svg-dynamic-title@8.0.0": - version "8.0.0" - resolved "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz" - integrity sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og== - -"@svgr/babel-plugin-svg-em-dimensions@^6.5.1": - version "6.5.1" - resolved "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz" - integrity sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA== - -"@svgr/babel-plugin-svg-em-dimensions@8.0.0": - version "8.0.0" - resolved "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz" - integrity sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g== - -"@svgr/babel-plugin-transform-react-native-svg@^6.5.1": - version "6.5.1" - resolved "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz" - integrity sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg== - -"@svgr/babel-plugin-transform-react-native-svg@8.1.0": - version "8.1.0" - resolved "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz" - integrity sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q== - -"@svgr/babel-plugin-transform-svg-component@^6.5.1": - version "6.5.1" - resolved "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz" - integrity sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ== - -"@svgr/babel-plugin-transform-svg-component@8.0.0": - version "8.0.0" - resolved "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz" - integrity sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw== - -"@svgr/babel-preset@^6.5.1": - version "6.5.1" - resolved "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.5.1.tgz" - integrity sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw== - dependencies: - "@svgr/babel-plugin-add-jsx-attribute" "^6.5.1" - "@svgr/babel-plugin-remove-jsx-attribute" "*" - "@svgr/babel-plugin-remove-jsx-empty-expression" "*" - "@svgr/babel-plugin-replace-jsx-attribute-value" "^6.5.1" - "@svgr/babel-plugin-svg-dynamic-title" "^6.5.1" - "@svgr/babel-plugin-svg-em-dimensions" "^6.5.1" - "@svgr/babel-plugin-transform-react-native-svg" "^6.5.1" - "@svgr/babel-plugin-transform-svg-component" "^6.5.1" - -"@svgr/babel-preset@8.1.0": - version "8.1.0" - resolved "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz" - integrity sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug== - dependencies: - "@svgr/babel-plugin-add-jsx-attribute" "8.0.0" - "@svgr/babel-plugin-remove-jsx-attribute" "8.0.0" - "@svgr/babel-plugin-remove-jsx-empty-expression" "8.0.0" - "@svgr/babel-plugin-replace-jsx-attribute-value" "8.0.0" - "@svgr/babel-plugin-svg-dynamic-title" "8.0.0" - "@svgr/babel-plugin-svg-em-dimensions" "8.0.0" - "@svgr/babel-plugin-transform-react-native-svg" "8.1.0" - "@svgr/babel-plugin-transform-svg-component" "8.0.0" - -"@svgr/core@*", "@svgr/core@^6.0.0", "@svgr/core@^6.5.1": - version "6.5.1" - resolved "https://registry.npmjs.org/@svgr/core/-/core-6.5.1.tgz" - integrity sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw== - dependencies: - "@babel/core" "^7.19.6" - "@svgr/babel-preset" "^6.5.1" - "@svgr/plugin-jsx" "^6.5.1" - camelcase "^6.2.0" - cosmiconfig "^7.0.1" - -"@svgr/core@8.1.0": - version "8.1.0" - resolved "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz" - integrity sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA== - dependencies: - "@babel/core" "^7.21.3" - "@svgr/babel-preset" "8.1.0" - camelcase "^6.2.0" - cosmiconfig "^8.1.3" - snake-case "^3.0.4" - -"@svgr/hast-util-to-babel-ast@^6.5.1": - version "6.5.1" - resolved "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz" - integrity sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw== - dependencies: - "@babel/types" "^7.20.0" - entities "^4.4.0" - -"@svgr/hast-util-to-babel-ast@8.0.0": - version "8.0.0" - resolved "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz" - integrity sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q== - dependencies: - "@babel/types" "^7.21.3" - entities "^4.4.0" - -"@svgr/plugin-jsx@^6.5.1": - version "6.5.1" - resolved "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz" - integrity sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw== - dependencies: - "@babel/core" "^7.19.6" - "@svgr/babel-preset" "^6.5.1" - "@svgr/hast-util-to-babel-ast" "^6.5.1" - svg-parser "^2.0.4" - -"@svgr/plugin-jsx@8.1.0": - version "8.1.0" - resolved "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz" - integrity sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA== - dependencies: - "@babel/core" "^7.21.3" - "@svgr/babel-preset" "8.1.0" - "@svgr/hast-util-to-babel-ast" "8.0.0" - svg-parser "^2.0.4" - -"@svgr/plugin-svgo@^6.5.1": - version "6.5.1" - resolved "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz" - integrity sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ== - dependencies: - cosmiconfig "^7.0.1" - deepmerge "^4.2.2" - svgo "^2.8.0" - -"@svgr/plugin-svgo@8.1.0": - version "8.1.0" - resolved "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-8.1.0.tgz" - integrity sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA== - dependencies: - cosmiconfig "^8.1.3" - deepmerge "^4.3.1" - svgo "^3.0.2" - -"@svgr/webpack@^6.5.1": - version "6.5.1" - resolved "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.5.1.tgz" - integrity sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA== - dependencies: - "@babel/core" "^7.19.6" - "@babel/plugin-transform-react-constant-elements" "^7.18.12" - "@babel/preset-env" "^7.19.4" - "@babel/preset-react" "^7.18.6" - "@babel/preset-typescript" "^7.18.6" - "@svgr/core" "^6.5.1" - "@svgr/plugin-jsx" "^6.5.1" - "@svgr/plugin-svgo" "^6.5.1" - -"@svgr/webpack@^8.1.0": - version "8.1.0" - resolved "https://registry.npmjs.org/@svgr/webpack/-/webpack-8.1.0.tgz" - integrity sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA== - dependencies: - "@babel/core" "^7.21.3" - "@babel/plugin-transform-react-constant-elements" "^7.21.3" - "@babel/preset-env" "^7.20.2" - "@babel/preset-react" "^7.18.6" - "@babel/preset-typescript" "^7.21.0" - "@svgr/core" "8.1.0" - "@svgr/plugin-jsx" "8.1.0" - "@svgr/plugin-svgo" "8.1.0" - -"@szmarczak/http-timer@^5.0.1": - version "5.0.1" - resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz" - integrity sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw== - dependencies: - defer-to-connect "^2.0.1" - -"@trysound/sax@0.2.0": - version "0.2.0" - resolved "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz" - integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== - -"@types/acorn@^4.0.0": - version "4.0.6" - resolved "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz" - integrity sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ== - dependencies: - "@types/estree" "*" - -"@types/body-parser@*": - version "1.19.5" - resolved "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz" - integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== - dependencies: - "@types/connect" "*" - "@types/node" "*" - -"@types/bonjour@^3.5.9": - version "3.5.13" - resolved "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz" - integrity sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ== - dependencies: - "@types/node" "*" - -"@types/connect-history-api-fallback@^1.3.5": - version "1.5.4" - resolved "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz" - integrity sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw== - dependencies: - "@types/express-serve-static-core" "*" - "@types/node" "*" - -"@types/connect@*": - version "3.4.38" - resolved "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz" - integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== - dependencies: - "@types/node" "*" - -"@types/debug@^4.0.0": - version "4.1.12" - resolved "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz" - integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== - dependencies: - "@types/ms" "*" - -"@types/eslint-scope@^3.7.3": - version "3.7.7" - resolved "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz" - integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg== - dependencies: - "@types/eslint" "*" - "@types/estree" "*" - -"@types/eslint@*": - version "8.56.2" - resolved "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.2.tgz" - integrity sha512-uQDwm1wFHmbBbCZCqAlq6Do9LYwByNZHWzXppSnay9SuwJ+VRbjkbLABer54kcPnMSlG6Fdiy2yaFXm/z9Z5gw== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree-jsx@^1.0.0": - version "1.0.4" - resolved "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.4.tgz" - integrity sha512-5idy3hvI9lAMqsyilBM+N+boaCf1MgoefbDxN6KEO5aK17TOHwFAYT9sjxzeKAiIWRUBgLxmZ9mPcnzZXtTcRQ== - dependencies: - "@types/estree" "*" - -"@types/estree@*", "@types/estree@^1.0.0", "@types/estree@^1.0.5": - version "1.0.5" - resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz" - integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== - -"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": - version "4.17.43" - resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz" - integrity sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg== - dependencies: - "@types/node" "*" - "@types/qs" "*" - "@types/range-parser" "*" - "@types/send" "*" - -"@types/express@*", "@types/express@^4.17.13": - version "4.17.21" - resolved "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz" - integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== - dependencies: - "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.33" - "@types/qs" "*" - "@types/serve-static" "*" - -"@types/gtag.js@^0.0.12": - version "0.0.12" - resolved "https://registry.npmjs.org/@types/gtag.js/-/gtag.js-0.0.12.tgz" - integrity sha512-YQV9bUsemkzG81Ea295/nF/5GijnD2Af7QhEofh7xu+kvCN6RdodgNwwGWXB5GMI3NoyvQo0odNctoH/qLMIpg== - -"@types/hast@^3.0.0", "@types/hast@^3.0.1": - version "3.0.4" - resolved "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz" - integrity sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ== - dependencies: - "@types/unist" "*" - -"@types/history@^4.7.11": - version "4.7.11" - resolved "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz" - integrity sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA== - -"@types/html-minifier-terser@^6.0.0": - version "6.1.0" - resolved "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz" - integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== - -"@types/http-cache-semantics@^4.0.2": - version "4.0.4" - resolved "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz" - integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== - -"@types/http-errors@*": - version "2.0.4" - resolved "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz" - integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== - -"@types/http-proxy@^1.17.8": - version "1.17.14" - resolved "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz" - integrity sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w== - dependencies: - "@types/node" "*" - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": - version "2.0.6" - resolved "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz" - integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== - -"@types/istanbul-lib-report@*": - version "3.0.3" - resolved "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz" - integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-reports@^3.0.0": - version "3.0.4" - resolved "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz" - integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== - dependencies: - "@types/istanbul-lib-report" "*" - -"@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": - version "7.0.15" - resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz" - integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== - -"@types/katex@^0.16.0": - version "0.16.7" - resolved "https://registry.npmjs.org/@types/katex/-/katex-0.16.7.tgz" - integrity sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ== - -"@types/mdast@^4.0.0", "@types/mdast@^4.0.1", "@types/mdast@^4.0.2": - version "4.0.3" - resolved "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz" - integrity sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg== - dependencies: - "@types/unist" "*" - -"@types/mdx@^2.0.0": - version "2.0.11" - resolved "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.11.tgz" - integrity sha512-HM5bwOaIQJIQbAYfax35HCKxx7a3KrK3nBtIqJgSOitivTD1y3oW9P3rxY9RkXYPUk7y/AjAohfHKmFpGE79zw== - -"@types/mime@*": - version "3.0.4" - resolved "https://registry.npmjs.org/@types/mime/-/mime-3.0.4.tgz" - integrity sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw== - -"@types/mime@^1": - version "1.3.5" - resolved "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz" - integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== - -"@types/ms@*": - version "0.7.34" - resolved "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz" - integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== - -"@types/node-forge@^1.3.0": - version "1.3.11" - resolved "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz" - integrity sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ== - dependencies: - "@types/node" "*" - -"@types/node@*": - version "20.11.20" - resolved "https://registry.npmjs.org/@types/node/-/node-20.11.20.tgz" - integrity sha512-7/rR21OS+fq8IyHTgtLkDK949uzsa6n8BkziAKtPVpugIkO6D+/ooXMvzXxDnZrmtXVfjb1bKQafYpb8s89LOg== - dependencies: - undici-types "~5.26.4" - -"@types/node@^17.0.5": - version "17.0.45" - resolved "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz" - integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== - -"@types/parse-json@^4.0.0": - version "4.0.2" - resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz" - integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== - -"@types/prismjs@^1.26.0": - version "1.26.3" - resolved "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.3.tgz" - integrity sha512-A0D0aTXvjlqJ5ZILMz3rNfDBOx9hHxLZYv2by47Sm/pqW35zzjusrZTryatjN/Rf8Us2gZrJD+KeHbUSTux1Cw== - -"@types/prop-types@*": - version "15.7.11" - resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz" - integrity sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng== - -"@types/qs@*": - version "6.9.11" - resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz" - integrity sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ== - -"@types/range-parser@*": - version "1.2.7" - resolved "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz" - integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== - -"@types/react-router-config@*", "@types/react-router-config@^5.0.7": - version "5.0.11" - resolved "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.11.tgz" - integrity sha512-WmSAg7WgqW7m4x8Mt4N6ZyKz0BubSj/2tVUMsAHp+Yd2AMwcSbeFq9WympT19p5heCFmF97R9eD5uUR/t4HEqw== - dependencies: - "@types/history" "^4.7.11" - "@types/react" "*" - "@types/react-router" "^5.1.0" - -"@types/react-router-dom@*": - version "5.3.3" - resolved "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz" - integrity sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw== - dependencies: - "@types/history" "^4.7.11" - "@types/react" "*" - "@types/react-router" "*" - -"@types/react-router@*", "@types/react-router@^5.1.0": - version "5.1.20" - resolved "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz" - integrity sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q== - dependencies: - "@types/history" "^4.7.11" - "@types/react" "*" - -"@types/react@*", "@types/react@>= 16.8.0 < 19.0.0", "@types/react@>=16": - version "18.2.57" - resolved "https://registry.npmjs.org/@types/react/-/react-18.2.57.tgz" - integrity sha512-ZvQsktJgSYrQiMirAN60y4O/LRevIV8hUzSOSNB6gfR3/o3wCBFQx3sPwIYtuDMeiVgsSS3UzCV26tEzgnfvQw== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - -"@types/retry@0.12.0": - version "0.12.0" - resolved "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz" - integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== - -"@types/sax@^1.2.1": - version "1.2.7" - resolved "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz" - integrity sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A== - dependencies: - "@types/node" "*" - -"@types/scheduler@*": - version "0.16.8" - resolved "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz" - integrity sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A== - -"@types/send@*": - version "0.17.4" - resolved "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz" - integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== - dependencies: - "@types/mime" "^1" - "@types/node" "*" - -"@types/serve-index@^1.9.1": - version "1.9.4" - resolved "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz" - integrity sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug== - dependencies: - "@types/express" "*" - -"@types/serve-static@*", "@types/serve-static@^1.13.10": - version "1.15.5" - resolved "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz" - integrity sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ== - dependencies: - "@types/http-errors" "*" - "@types/mime" "*" - "@types/node" "*" - -"@types/sockjs@^0.3.33": - version "0.3.36" - resolved "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz" - integrity sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q== - dependencies: - "@types/node" "*" - -"@types/unist@*", "@types/unist@^3.0.0": - version "3.0.2" - resolved "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz" - integrity sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ== - -"@types/unist@^2.0.0": - version "2.0.10" - resolved "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz" - integrity sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA== - -"@types/ws@^8.5.5": - version "8.5.10" - resolved "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz" - integrity sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A== - dependencies: - "@types/node" "*" - -"@types/yargs-parser@*": - version "21.0.3" - resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz" - integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== - -"@types/yargs@^17.0.8": - version "17.0.32" - resolved "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz" - integrity sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog== - dependencies: - "@types/yargs-parser" "*" - -"@ungap/structured-clone@^1.0.0": - version "1.2.0" - resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz" - integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== - -"@vercel/analytics@^1.1.2": - version "1.2.2" - resolved "https://registry.npmjs.org/@vercel/analytics/-/analytics-1.2.2.tgz" - integrity sha512-X0rctVWkQV1e5Y300ehVNqpOfSOufo7ieA5PIdna8yX/U7Vjz0GFsGf4qvAhxV02uQ2CVt7GYcrFfddXXK2Y4A== - dependencies: - server-only "^0.0.1" - -"@webassemblyjs/ast@^1.11.5", "@webassemblyjs/ast@1.11.6": - version "1.11.6" - resolved "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz" - integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q== - dependencies: - "@webassemblyjs/helper-numbers" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - -"@webassemblyjs/floating-point-hex-parser@1.11.6": - version "1.11.6" - resolved "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz" - integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== - -"@webassemblyjs/helper-api-error@1.11.6": - version "1.11.6" - resolved "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz" - integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== - -"@webassemblyjs/helper-buffer@1.11.6": - version "1.11.6" - resolved "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz" - integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA== - -"@webassemblyjs/helper-numbers@1.11.6": - version "1.11.6" - resolved "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz" - integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== - dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.11.6" - "@webassemblyjs/helper-api-error" "1.11.6" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/helper-wasm-bytecode@1.11.6": - version "1.11.6" - resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz" - integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== - -"@webassemblyjs/helper-wasm-section@1.11.6": - version "1.11.6" - resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz" - integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - -"@webassemblyjs/ieee754@1.11.6": - version "1.11.6" - resolved "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz" - integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.11.6": - version "1.11.6" - resolved "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz" - integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== - dependencies: - "@xtuc/long" "4.2.2" - -"@webassemblyjs/utf8@1.11.6": - version "1.11.6" - resolved "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz" - integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== - -"@webassemblyjs/wasm-edit@^1.11.5": - version "1.11.6" - resolved "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz" - integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/helper-wasm-section" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - "@webassemblyjs/wasm-opt" "1.11.6" - "@webassemblyjs/wasm-parser" "1.11.6" - "@webassemblyjs/wast-printer" "1.11.6" - -"@webassemblyjs/wasm-gen@1.11.6": - version "1.11.6" - resolved "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz" - integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/ieee754" "1.11.6" - "@webassemblyjs/leb128" "1.11.6" - "@webassemblyjs/utf8" "1.11.6" - -"@webassemblyjs/wasm-opt@1.11.6": - version "1.11.6" - resolved "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz" - integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - "@webassemblyjs/wasm-parser" "1.11.6" - -"@webassemblyjs/wasm-parser@^1.11.5", "@webassemblyjs/wasm-parser@1.11.6": - version "1.11.6" - resolved "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz" - integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-api-error" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/ieee754" "1.11.6" - "@webassemblyjs/leb128" "1.11.6" - "@webassemblyjs/utf8" "1.11.6" - -"@webassemblyjs/wast-printer@1.11.6": - version "1.11.6" - resolved "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz" - integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@xtuc/long" "4.2.2" - -"@xtuc/ieee754@^1.2.0": - version "1.2.0" - resolved "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz" - integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== - -"@xtuc/long@4.2.2": - version "4.2.2" - resolved "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz" - integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== - -accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: - version "1.3.8" - resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - -acorn-import-assertions@^1.9.0: - version "1.9.0" - resolved "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz" - integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== - -acorn-jsx@^5.0.0: - version "5.3.2" - resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn-walk@^8.0.0: - version "8.3.2" - resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz" - integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== - -"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8, acorn@^8.0.0, acorn@^8.0.4, acorn@^8.7.1, acorn@^8.8.2: - version "8.11.3" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz" - integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== - -address@^1.0.1, address@^1.1.2: - version "1.2.2" - resolved "https://registry.npmjs.org/address/-/address-1.2.2.tgz" - integrity sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA== - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ajv-formats@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz" - integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== - dependencies: - ajv "^8.0.0" - -ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: - version "3.5.2" - resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" - integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== - -ajv-keywords@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz" - integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== - dependencies: - fast-deep-equal "^3.1.3" - -ajv@^6.12.2, ajv@^6.12.5, ajv@^6.9.1: - version "6.12.6" - resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^8.0.0, ajv@^8.8.2, ajv@^8.9.0: - version "8.12.0" - resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -algoliasearch-helper@^3.13.3: - version "3.16.2" - resolved "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.16.2.tgz" - integrity sha512-Yl/Gu5Cq4Z5s/AJ0jR37OPI1H3+z7PHz657ibyaXgMOaWvPlZ3OACN13N+7HCLPUlB0BN+8BtmrG/CqTilowBA== - dependencies: - "@algolia/events" "^4.0.1" - -algoliasearch@^4.18.0, algoliasearch@^4.19.1, "algoliasearch@>= 3.1 < 6", "algoliasearch@>= 4.9.1 < 6": - version "4.22.1" - resolved "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.22.1.tgz" - integrity sha512-jwydKFQJKIx9kIZ8Jm44SdpigFwRGPESaxZBaHSV0XWN2yBJAOT4mT7ppvlrpA4UGzz92pqFnVKr/kaZXrcreg== - dependencies: - "@algolia/cache-browser-local-storage" "4.22.1" - "@algolia/cache-common" "4.22.1" - "@algolia/cache-in-memory" "4.22.1" - "@algolia/client-account" "4.22.1" - "@algolia/client-analytics" "4.22.1" - "@algolia/client-common" "4.22.1" - "@algolia/client-personalization" "4.22.1" - "@algolia/client-search" "4.22.1" - "@algolia/logger-common" "4.22.1" - "@algolia/logger-console" "4.22.1" - "@algolia/requester-browser-xhr" "4.22.1" - "@algolia/requester-common" "4.22.1" - "@algolia/requester-node-http" "4.22.1" - "@algolia/transporter" "4.22.1" - -ansi-align@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz" - integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== - dependencies: - string-width "^4.1.0" - -ansi-html-community@^0.0.8: - version "0.0.8" - resolved "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz" - integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - -ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^6.1.0: - version "6.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== - -anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -arg@^5.0.0: - version "5.0.2" - resolved "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz" - integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -assert@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz" - integrity sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw== - dependencies: - call-bind "^1.0.2" - is-nan "^1.3.2" - object-is "^1.1.5" - object.assign "^4.1.4" - util "^0.12.5" - -astring@^1.8.0: - version "1.8.6" - resolved "https://registry.npmjs.org/astring/-/astring-1.8.6.tgz" - integrity sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg== - -at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== - -autoprefixer@^10.4.14: - version "10.4.17" - resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.17.tgz" - integrity sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg== - dependencies: - browserslist "^4.22.2" - caniuse-lite "^1.0.30001578" - fraction.js "^4.3.7" - normalize-range "^0.1.2" - picocolors "^1.0.0" - postcss-value-parser "^4.2.0" - -autoprefixer@^10.4.19: - version "10.4.19" - resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz" - integrity sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew== - dependencies: - browserslist "^4.23.0" - caniuse-lite "^1.0.30001599" - fraction.js "^4.3.7" - normalize-range "^0.1.2" - picocolors "^1.0.0" - postcss-value-parser "^4.2.0" - -available-typed-arrays@^1.0.6: - version "1.0.7" - resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz" - integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== - dependencies: - possible-typed-array-names "^1.0.0" - -babel-loader@^9.1.3: - version "9.1.3" - resolved "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz" - integrity sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw== - dependencies: - find-cache-dir "^4.0.0" - schema-utils "^4.0.0" - -babel-plugin-dynamic-import-node@^2.3.3: - version "2.3.3" - resolved "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz" - integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== - dependencies: - object.assign "^4.1.0" - -babel-plugin-polyfill-corejs2@^0.4.10: - version "0.4.11" - resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz" - integrity sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q== - dependencies: - "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.6.2" - semver "^6.3.1" - -babel-plugin-polyfill-corejs2@^0.4.8: - version "0.4.8" - resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz" - integrity sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg== - dependencies: - "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.5.0" - semver "^6.3.1" - -babel-plugin-polyfill-corejs3@^0.10.4: - version "0.10.4" - resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz" - integrity sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.1" - core-js-compat "^3.36.1" - -babel-plugin-polyfill-corejs3@^0.9.0: - version "0.9.0" - resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz" - integrity sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.5.0" - core-js-compat "^3.34.0" - -babel-plugin-polyfill-regenerator@^0.5.5: - version "0.5.5" - resolved "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz" - integrity sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.5.0" - -babel-plugin-polyfill-regenerator@^0.6.1: - version "0.6.2" - resolved "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz" - integrity sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.2" - -bail@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz" - integrity sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw== - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -batch@0.6.1: - version "0.6.1" - resolved "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz" - integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== - -big.js@^5.2.2: - version "5.2.2" - resolved "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz" - integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -body-parser@1.20.1: - version "1.20.1" - resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz" - integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== - dependencies: - bytes "3.1.2" - content-type "~1.0.4" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.11.0" - raw-body "2.5.1" - type-is "~1.6.18" - unpipe "1.0.0" - -bonjour-service@^1.0.11: - version "1.2.1" - resolved "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz" - integrity sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw== - dependencies: - fast-deep-equal "^3.1.3" - multicast-dns "^7.2.5" - -boolbase@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" - integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== - -boxen@^6.2.1: - version "6.2.1" - resolved "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz" - integrity sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw== - dependencies: - ansi-align "^3.0.1" - camelcase "^6.2.0" - chalk "^4.1.2" - cli-boxes "^3.0.0" - string-width "^5.0.1" - type-fest "^2.5.0" - widest-line "^4.0.1" - wrap-ansi "^8.0.1" - -boxen@^7.0.0: - version "7.1.1" - resolved "https://registry.npmjs.org/boxen/-/boxen-7.1.1.tgz" - integrity sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog== - dependencies: - ansi-align "^3.0.1" - camelcase "^7.0.1" - chalk "^5.2.0" - cli-boxes "^3.0.0" - string-width "^5.1.2" - type-fest "^2.13.0" - widest-line "^4.0.1" - wrap-ansi "^8.1.0" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -browserslist@^4.0.0, browserslist@^4.18.1, browserslist@^4.21.10, browserslist@^4.22.2, browserslist@^4.22.3, browserslist@^4.23.0, browserslist@^4.24.0, "browserslist@>= 4.21.0": - version "4.24.2" - resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz" - integrity sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg== - dependencies: - caniuse-lite "^1.0.30001669" - electron-to-chromium "^1.5.41" - node-releases "^2.0.18" - update-browserslist-db "^1.1.1" - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz" - integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== - -bytes@3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -cacheable-lookup@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz" - integrity sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w== - -cacheable-request@^10.2.8: - version "10.2.14" - resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz" - integrity sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ== - dependencies: - "@types/http-cache-semantics" "^4.0.2" - get-stream "^6.0.1" - http-cache-semantics "^4.1.1" - keyv "^4.5.3" - mimic-response "^4.0.0" - normalize-url "^8.0.0" - responselike "^3.0.0" - -call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6: - version "1.0.7" - resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz" - integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - set-function-length "^1.2.1" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camel-case@^4.1.2: - version "4.1.2" - resolved "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz" - integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== - dependencies: - pascal-case "^3.1.2" - tslib "^2.0.3" - -camelcase@^6.2.0: - version "6.3.0" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -camelcase@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz" - integrity sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw== - -caniuse-api@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz" - integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== - dependencies: - browserslist "^4.0.0" - caniuse-lite "^1.0.0" - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" - -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001578, caniuse-lite@^1.0.30001599, caniuse-lite@^1.0.30001669: - version "1.0.30001687" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001687.tgz" - integrity sha512-0S/FDhf4ZiqrTUiQ39dKeUjYRjkv7lOZU1Dgif2rIqrTzX/1wV2hfKu9TOm1IHkdSijfLswxTFzl/cvir+SLSQ== - -ccount@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz" - integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== - -chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: - version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^5.0.1, chalk@^5.2.0: - version "5.3.0" - resolved "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz" - integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== - -char-regex@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz" - integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== - -character-entities-html4@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz" - integrity sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA== - -character-entities-legacy@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz" - integrity sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ== - -character-entities@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz" - integrity sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ== - -character-reference-invalid@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz" - integrity sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw== - -cheerio-select@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz" - integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g== - dependencies: - boolbase "^1.0.0" - css-select "^5.1.0" - css-what "^6.1.0" - domelementtype "^2.3.0" - domhandler "^5.0.3" - domutils "^3.0.1" - -cheerio@^1.0.0-rc.12: - version "1.0.0-rc.12" - resolved "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz" - integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== - dependencies: - cheerio-select "^2.1.0" - dom-serializer "^2.0.0" - domhandler "^5.0.3" - domutils "^3.0.1" - htmlparser2 "^8.0.1" - parse5 "^7.0.0" - parse5-htmlparser2-tree-adapter "^7.0.0" - -chokidar@^3.4.2, chokidar@^3.5.3: - version "3.6.0" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz" - integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chrome-trace-event@^1.0.2: - version "1.0.3" - resolved "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz" - integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== - -ci-info@^3.2.0: - version "3.9.0" - resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz" - integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== - -clean-css@^5.2.2, clean-css@^5.3.2, clean-css@~5.3.2: - version "5.3.3" - resolved "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz" - integrity sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg== - dependencies: - source-map "~0.6.0" - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cli-boxes@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz" - integrity sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g== - -cli-table3@^0.6.3: - version "0.6.3" - resolved "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz" - integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg== - dependencies: - string-width "^4.2.0" - optionalDependencies: - "@colors/colors" "1.5.0" - -clone-deep@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz" - integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== - dependencies: - is-plain-object "^2.0.4" - kind-of "^6.0.2" - shallow-clone "^3.0.0" - -clsx@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz" - integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== - -clsx@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz" - integrity sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg== - -collapse-white-space@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz" - integrity sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw== - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -colord@^2.9.3: - version "2.9.3" - resolved "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz" - integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== - -colorette@^2.0.10: - version "2.0.20" - resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz" - integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== - -combine-promises@^1.1.0: - version "1.2.0" - resolved "https://registry.npmjs.org/combine-promises/-/combine-promises-1.2.0.tgz" - integrity sha512-VcQB1ziGD0NXrhKxiwyNbCDmRzs/OShMs2GqW2DlU2A/Sd0nQxE1oWDAE5O0ygSx5mgQOn9eIFh7yKPgFRVkPQ== - -comma-separated-tokens@^2.0.0: - version "2.0.3" - resolved "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz" - integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== - -commander@^10.0.0: - version "10.0.1" - resolved "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz" - integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== - -commander@^2.20.0: - version "2.20.3" - resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commander@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz" - integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== - -commander@^7.2.0: - version "7.2.0" - resolved "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz" - integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== - -commander@^8.3.0: - version "8.3.0" - resolved "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz" - integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== - -common-path-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz" - integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== - -compressible@~2.0.16: - version "2.0.18" - resolved "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz" - integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== - dependencies: - mime-db ">= 1.43.0 < 2" - -compression@^1.7.4: - version "1.7.4" - resolved "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz" - integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== - dependencies: - accepts "~1.3.5" - bytes "3.0.0" - compressible "~2.0.16" - debug "2.6.9" - on-headers "~1.0.2" - safe-buffer "5.1.2" - vary "~1.1.2" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -config-chain@^1.1.11: - version "1.1.13" - resolved "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz" - integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - -configstore@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/configstore/-/configstore-6.0.0.tgz" - integrity sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA== - dependencies: - dot-prop "^6.0.1" - graceful-fs "^4.2.6" - unique-string "^3.0.0" - write-file-atomic "^3.0.3" - xdg-basedir "^5.0.1" - -connect-history-api-fallback@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz" - integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== - -consola@^2.15.3: - version "2.15.3" - resolved "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz" - integrity sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw== - -content-disposition@0.5.2: - version "0.5.2" - resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz" - integrity sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA== - -content-disposition@0.5.4: - version "0.5.4" - resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - -content-type@~1.0.4: - version "1.0.5" - resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz" - integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== - -convert-source-map@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz" - integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" - integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== - -cookie@0.5.0: - version "0.5.0" - resolved "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== - -copy-text-to-clipboard@^3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz" - integrity sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q== - -copy-webpack-plugin@^11.0.0: - version "11.0.0" - resolved "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz" - integrity sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ== - dependencies: - fast-glob "^3.2.11" - glob-parent "^6.0.1" - globby "^13.1.1" - normalize-path "^3.0.0" - schema-utils "^4.0.0" - serialize-javascript "^6.0.0" - -core-js-compat@^3.31.0, core-js-compat@^3.34.0: - version "3.36.0" - resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.36.0.tgz" - integrity sha512-iV9Pd/PsgjNWBXeq8XRtWVSgz2tKAfhfvBs7qxYty+RlRd+OCksaWmOnc4JKrTc1cToXL1N0s3l/vwlxPtdElw== - dependencies: - browserslist "^4.22.3" - -core-js-compat@^3.36.1: - version "3.37.1" - resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz" - integrity sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg== - dependencies: - browserslist "^4.23.0" - -core-js-pure@^3.30.2: - version "3.36.0" - resolved "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.36.0.tgz" - integrity sha512-cN28qmhRNgbMZZMc/RFu5w8pK9VJzpb2rJVR/lHuZJKwmXnoWOpXmMkxqBB514igkp1Hu8WGROsiOAzUcKdHOQ== - -core-js@^3.31.1: - version "3.36.0" - resolved "https://registry.npmjs.org/core-js/-/core-js-3.36.0.tgz" - integrity sha512-mt7+TUBbTFg5+GngsAxeKBTl5/VS0guFeJacYge9OmHb+m058UwwIm41SE9T4Den7ClatV57B6TYTuJ0CX1MAw== - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -cosmiconfig@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz" - integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.1.0" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.7.2" - -cosmiconfig@^7.0.1: - version "7.1.0" - resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz" - integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" - -cosmiconfig@^8.1.3, cosmiconfig@^8.3.5: - version "8.3.6" - resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz" - integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== - dependencies: - import-fresh "^3.3.0" - js-yaml "^4.1.0" - parse-json "^5.2.0" - path-type "^4.0.0" - -cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crypto-random-string@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz" - integrity sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA== - dependencies: - type-fest "^1.0.1" - -css-declaration-sorter@^7.2.0: - version "7.2.0" - resolved "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz" - integrity sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow== - -css-loader@^6.8.1: - version "6.10.0" - resolved "https://registry.npmjs.org/css-loader/-/css-loader-6.10.0.tgz" - integrity sha512-LTSA/jWbwdMlk+rhmElbDR2vbtQoTBPr7fkJE+mxrHj+7ru0hUmHafDRzWIjIHTwpitWVaqY2/UWGRca3yUgRw== - dependencies: - icss-utils "^5.1.0" - postcss "^8.4.33" - postcss-modules-extract-imports "^3.0.0" - postcss-modules-local-by-default "^4.0.4" - postcss-modules-scope "^3.1.1" - postcss-modules-values "^4.0.0" - postcss-value-parser "^4.2.0" - semver "^7.5.4" - -css-minimizer-webpack-plugin@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-5.0.1.tgz" - integrity sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg== - dependencies: - "@jridgewell/trace-mapping" "^0.3.18" - cssnano "^6.0.1" - jest-worker "^29.4.3" - postcss "^8.4.24" - schema-utils "^4.0.1" - serialize-javascript "^6.0.1" - -css-select@^4.1.3: - version "4.3.0" - resolved "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz" - integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== - dependencies: - boolbase "^1.0.0" - css-what "^6.0.1" - domhandler "^4.3.1" - domutils "^2.8.0" - nth-check "^2.0.1" - -css-select@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz" - integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== - dependencies: - boolbase "^1.0.0" - css-what "^6.1.0" - domhandler "^5.0.2" - domutils "^3.0.1" - nth-check "^2.0.1" - -css-tree@^1.1.2, css-tree@^1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz" - integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== - dependencies: - mdn-data "2.0.14" - source-map "^0.6.1" - -css-tree@^2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz" - integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw== - dependencies: - mdn-data "2.0.30" - source-map-js "^1.0.1" - -css-tree@~2.2.0: - version "2.2.1" - resolved "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz" - integrity sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA== - dependencies: - mdn-data "2.0.28" - source-map-js "^1.0.1" - -css-what@^6.0.1, css-what@^6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz" - integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - -cssnano-preset-advanced@^6.1.2: - version "6.1.2" - resolved "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-6.1.2.tgz" - integrity sha512-Nhao7eD8ph2DoHolEzQs5CfRpiEP0xa1HBdnFZ82kvqdmbwVBUr2r1QuQ4t1pi+D1ZpqpcO4T+wy/7RxzJ/WPQ== - dependencies: - autoprefixer "^10.4.19" - browserslist "^4.23.0" - cssnano-preset-default "^6.1.2" - postcss-discard-unused "^6.0.5" - postcss-merge-idents "^6.0.3" - postcss-reduce-idents "^6.0.3" - postcss-zindex "^6.0.2" - -cssnano-preset-default@^6.1.2: - version "6.1.2" - resolved "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz" - integrity sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg== - dependencies: - browserslist "^4.23.0" - css-declaration-sorter "^7.2.0" - cssnano-utils "^4.0.2" - postcss-calc "^9.0.1" - postcss-colormin "^6.1.0" - postcss-convert-values "^6.1.0" - postcss-discard-comments "^6.0.2" - postcss-discard-duplicates "^6.0.3" - postcss-discard-empty "^6.0.3" - postcss-discard-overridden "^6.0.2" - postcss-merge-longhand "^6.0.5" - postcss-merge-rules "^6.1.1" - postcss-minify-font-values "^6.1.0" - postcss-minify-gradients "^6.0.3" - postcss-minify-params "^6.1.0" - postcss-minify-selectors "^6.0.4" - postcss-normalize-charset "^6.0.2" - postcss-normalize-display-values "^6.0.2" - postcss-normalize-positions "^6.0.2" - postcss-normalize-repeat-style "^6.0.2" - postcss-normalize-string "^6.0.2" - postcss-normalize-timing-functions "^6.0.2" - postcss-normalize-unicode "^6.1.0" - postcss-normalize-url "^6.0.2" - postcss-normalize-whitespace "^6.0.2" - postcss-ordered-values "^6.0.2" - postcss-reduce-initial "^6.1.0" - postcss-reduce-transforms "^6.0.2" - postcss-svgo "^6.0.3" - postcss-unique-selectors "^6.0.4" - -cssnano-utils@^4.0.2: - version "4.0.2" - resolved "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.2.tgz" - integrity sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ== - -cssnano@^6.0.1, cssnano@^6.1.2: - version "6.1.2" - resolved "https://registry.npmjs.org/cssnano/-/cssnano-6.1.2.tgz" - integrity sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA== - dependencies: - cssnano-preset-default "^6.1.2" - lilconfig "^3.1.1" - -csso@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz" - integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== - dependencies: - css-tree "^1.1.2" - -csso@^5.0.5: - version "5.0.5" - resolved "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz" - integrity sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ== - dependencies: - css-tree "~2.2.0" - -csstype@^3.0.2: - version "3.1.3" - resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz" - integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== - -debounce@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz" - integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== - -debug@^2.6.0: - version "2.6.9" - resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@4: - version "4.3.4" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -debug@2.6.9: - version "2.6.9" - resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -decode-named-character-reference@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz" - integrity sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg== - dependencies: - character-entities "^2.0.0" - -decompress-response@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" - integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== - dependencies: - mimic-response "^3.1.0" - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -deepmerge@^4.2.2, deepmerge@^4.3.1: - version "4.3.1" - resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz" - integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== - -default-gateway@^6.0.3: - version "6.0.3" - resolved "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz" - integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== - dependencies: - execa "^5.0.0" - -defer-to-connect@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz" - integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== - -define-data-property@^1.0.1, define-data-property@^1.1.2: - version "1.1.4" - resolved "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz" - integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - gopd "^1.0.1" - -define-lazy-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz" - integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== - -define-properties@^1.1.3, define-properties@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz" - integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== - dependencies: - define-data-property "^1.0.1" - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -del@^6.1.1: - version "6.1.1" - resolved "https://registry.npmjs.org/del/-/del-6.1.1.tgz" - integrity sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg== - dependencies: - globby "^11.0.1" - graceful-fs "^4.2.4" - is-glob "^4.0.1" - is-path-cwd "^2.2.0" - is-path-inside "^3.0.2" - p-map "^4.0.0" - rimraf "^3.0.2" - slash "^3.0.0" - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" - integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== - -depd@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -dequal@^2.0.0: - version "2.0.3" - resolved "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz" - integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== - -destroy@1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -detect-node@^2.0.4: - version "2.1.0" - resolved "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz" - integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== - -detect-port-alt@^1.1.6: - version "1.1.6" - resolved "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz" - integrity sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q== - dependencies: - address "^1.0.1" - debug "^2.6.0" - -detect-port@^1.5.1: - version "1.5.1" - resolved "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz" - integrity sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ== - dependencies: - address "^1.0.1" - debug "4" - -devlop@^1.0.0, devlop@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz" - integrity sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA== - dependencies: - dequal "^2.0.0" - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -dns-packet@^5.2.2: - version "5.6.1" - resolved "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz" - integrity sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw== - dependencies: - "@leichtgewicht/ip-codec" "^2.0.1" - -dom-converter@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz" - integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== - dependencies: - utila "~0.4" - -dom-serializer@^1.0.1: - version "1.4.1" - resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz" - integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.2.0" - entities "^2.0.0" - -dom-serializer@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz" - integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== - dependencies: - domelementtype "^2.3.0" - domhandler "^5.0.2" - entities "^4.2.0" - -domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz" - integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== - -domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: - version "4.3.1" - resolved "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz" - integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== - dependencies: - domelementtype "^2.2.0" - -domhandler@^5.0.2, domhandler@^5.0.3: - version "5.0.3" - resolved "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz" - integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== - dependencies: - domelementtype "^2.3.0" - -domutils@^2.5.2: - version "2.8.0" - resolved "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz" - integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== - dependencies: - dom-serializer "^1.0.1" - domelementtype "^2.2.0" - domhandler "^4.2.0" - -domutils@^2.8.0: - version "2.8.0" - resolved "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz" - integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== - dependencies: - dom-serializer "^1.0.1" - domelementtype "^2.2.0" - domhandler "^4.2.0" - -domutils@^3.0.1: - version "3.1.0" - resolved "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz" - integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== - dependencies: - dom-serializer "^2.0.0" - domelementtype "^2.3.0" - domhandler "^5.0.3" - -dot-case@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz" - integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -dot-prop@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz" - integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA== - dependencies: - is-obj "^2.0.0" - -duplexer@^0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz" - integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== - -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - -electron-to-chromium@^1.5.41: - version "1.5.72" - resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.72.tgz" - integrity sha512-ZpSAUOZ2Izby7qnZluSrAlGgGQzucmFbN0n64dYzocYxnxV5ufurpj3VgEe4cUp7ir9LmeLxNYo8bVnlM8bQHw== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - -emojilib@^2.4.0: - version "2.4.0" - resolved "https://registry.npmjs.org/emojilib/-/emojilib-2.4.0.tgz" - integrity sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw== - -emojis-list@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz" - integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== - -emoticon@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/emoticon/-/emoticon-4.0.1.tgz" - integrity sha512-dqx7eA9YaqyvYtUhJwT4rC1HIp82j5ybS1/vQ42ur+jBe17dJMwZE4+gvL1XadSFfxaPFFGt3Xsw+Y8akThDlw== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - -enhanced-resolve@^5.15.0: - version "5.15.0" - resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz" - integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - -entities@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz" - integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== - -entities@^4.2.0, entities@^4.4.0: - version "4.5.0" - resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz" - integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es-define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz" - integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== - dependencies: - get-intrinsic "^1.2.4" - -es-errors@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz" - integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== - -es-module-lexer@^1.2.1: - version "1.4.1" - resolved "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz" - integrity sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w== - -escalade@^3.1.1, escalade@^3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz" - integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== - -escape-goat@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz" - integrity sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg== - -escape-html@^1.0.3, escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -escape-string-regexp@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz" - integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== - -eslint-scope@5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -estree-util-attach-comments@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz" - integrity sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw== - dependencies: - "@types/estree" "^1.0.0" - -estree-util-build-jsx@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz" - integrity sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ== - dependencies: - "@types/estree-jsx" "^1.0.0" - devlop "^1.0.0" - estree-util-is-identifier-name "^3.0.0" - estree-walker "^3.0.0" - -estree-util-is-identifier-name@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz" - integrity sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg== - -estree-util-to-js@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz" - integrity sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg== - dependencies: - "@types/estree-jsx" "^1.0.0" - astring "^1.8.0" - source-map "^0.7.0" - -estree-util-value-to-estree@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.0.1.tgz" - integrity sha512-b2tdzTurEIbwRh+mKrEcaWfu1wgb8J1hVsgREg7FFiecWwK/PhO8X0kyc+0bIcKNtD4sqxIdNoRy6/p/TvECEA== - dependencies: - "@types/estree" "^1.0.0" - is-plain-obj "^4.0.0" - -estree-util-visit@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz" - integrity sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww== - dependencies: - "@types/estree-jsx" "^1.0.0" - "@types/unist" "^3.0.0" - -estree-walker@^3.0.0: - version "3.0.3" - resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz" - integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== - dependencies: - "@types/estree" "^1.0.0" - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -eta@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/eta/-/eta-2.2.0.tgz" - integrity sha512-UVQ72Rqjy/ZKQalzV5dCCJP80GrmPrMxh6NlNf+erV6ObL0ZFkhCstWRawS85z3smdr3d2wXPsZEY7rDPfGd2g== - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" - integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== - -eval@^0.1.8: - version "0.1.8" - resolved "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz" - integrity sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw== - dependencies: - "@types/node" "*" - require-like ">= 0.1.1" - -eventemitter3@^4.0.0: - version "4.0.7" - resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - -events@^3.2.0: - version "3.3.0" - resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -execa@^5.0.0: - version "5.1.1" - resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - -express@^4.17.3: - version "4.18.2" - resolved "https://registry.npmjs.org/express/-/express-4.18.2.tgz" - integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.20.1" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.5.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "2.0.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.2.0" - fresh "0.5.2" - http-errors "2.0.0" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "2.4.1" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.7" - qs "6.11.0" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" - setprototypeof "1.2.0" - statuses "2.0.1" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz" - integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== - dependencies: - is-extendable "^0.1.0" - -extend@^3.0.0: - version "3.0.2" - resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-glob@^3.2.11, fast-glob@^3.2.9, fast-glob@^3.3.0: - version "3.3.2" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz" - integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-url-parser@1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz" - integrity sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ== - dependencies: - punycode "^1.3.2" - -fastq@^1.6.0: - version "1.17.1" - resolved "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz" - integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== - dependencies: - reusify "^1.0.4" - -fault@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz" - integrity sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ== - dependencies: - format "^0.2.0" - -faye-websocket@^0.11.3: - version "0.11.4" - resolved "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz" - integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== - dependencies: - websocket-driver ">=0.5.1" - -feed@^4.2.2: - version "4.2.2" - resolved "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz" - integrity sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ== - dependencies: - xml-js "^1.6.11" - -file-loader@*, file-loader@^6.2.0: - version "6.2.0" - resolved "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz" - integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - -filesize@^8.0.6: - version "8.0.7" - resolved "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz" - integrity sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ== - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -finalhandler@1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz" - integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "2.4.1" - parseurl "~1.3.3" - statuses "2.0.1" - unpipe "~1.0.0" - -find-cache-dir@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz" - integrity sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg== - dependencies: - common-path-prefix "^3.0.0" - pkg-dir "^7.0.0" - -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -find-up@^6.3.0: - version "6.3.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz" - integrity sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw== - dependencies: - locate-path "^7.1.0" - path-exists "^5.0.0" - -flat@^5.0.2: - version "5.0.2" - resolved "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz" - integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== - -follow-redirects@^1.0.0: - version "1.15.5" - resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz" - integrity sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw== - -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - -fork-ts-checker-webpack-plugin@^6.5.0: - version "6.5.3" - resolved "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz" - integrity sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ== - dependencies: - "@babel/code-frame" "^7.8.3" - "@types/json-schema" "^7.0.5" - chalk "^4.1.0" - chokidar "^3.4.2" - cosmiconfig "^6.0.0" - deepmerge "^4.2.2" - fs-extra "^9.0.0" - glob "^7.1.6" - memfs "^3.1.2" - minimatch "^3.0.4" - schema-utils "2.7.0" - semver "^7.3.2" - tapable "^1.0.0" - -form-data-encoder@^2.1.2: - version "2.1.4" - resolved "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz" - integrity sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw== - -format@^0.2.0: - version "0.2.2" - resolved "https://registry.npmjs.org/format/-/format-0.2.2.tgz" - integrity sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww== - -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - -fraction.js@^4.3.7: - version "4.3.7" - resolved "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz" - integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - -fs-extra@^11.1.1, fs-extra@^11.2.0: - version "11.2.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz" - integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-extra@^9.0.0: - version "9.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-monkey@^1.0.4: - version "1.0.5" - resolved "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz" - integrity sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew== - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@~2.3.2: - version "2.3.3" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -get-intrinsic@^1.1.3, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: - version "1.2.4" - resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz" - integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== - dependencies: - es-errors "^1.3.0" - function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - -get-own-enumerable-property-symbols@^3.0.0: - version "3.0.2" - resolved "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz" - integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== - -get-stream@^6.0.0, get-stream@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -github-slugger@^1.5.0: - version "1.5.0" - resolved "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz" - integrity sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw== - -glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.1: - version "6.0.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob-to-regexp@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" - integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== - -glob@^7.0.0, glob@^7.1.3, glob@^7.1.6: - version "7.2.3" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -global-dirs@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz" - integrity sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA== - dependencies: - ini "2.0.0" - -global-modules@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz" - integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== - dependencies: - global-prefix "^3.0.0" - -global-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz" - integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== - dependencies: - ini "^1.3.5" - kind-of "^6.0.2" - which "^1.3.1" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globby@^11.0.1, globby@^11.0.4, globby@^11.1.0: - version "11.1.0" - resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -globby@^13.1.1: - version "13.2.2" - resolved "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz" - integrity sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w== - dependencies: - dir-glob "^3.0.1" - fast-glob "^3.3.0" - ignore "^5.2.4" - merge2 "^1.4.1" - slash "^4.0.0" - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -got@^12.1.0: - version "12.6.1" - resolved "https://registry.npmjs.org/got/-/got-12.6.1.tgz" - integrity sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ== - dependencies: - "@sindresorhus/is" "^5.2.0" - "@szmarczak/http-timer" "^5.0.1" - cacheable-lookup "^7.0.0" - cacheable-request "^10.2.8" - decompress-response "^6.0.0" - form-data-encoder "^2.1.2" - get-stream "^6.0.1" - http2-wrapper "^2.1.10" - lowercase-keys "^3.0.0" - p-cancelable "^3.0.0" - responselike "^3.0.0" - -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: - version "4.2.11" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -graceful-fs@4.2.10: - version "4.2.10" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - -gray-matter@^4.0.3: - version "4.0.3" - resolved "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz" - integrity sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q== - dependencies: - js-yaml "^3.13.1" - kind-of "^6.0.2" - section-matter "^1.0.0" - strip-bom-string "^1.0.0" - -gzip-size@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz" - integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== - dependencies: - duplexer "^0.1.2" - -handle-thing@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz" - integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz" - integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== - dependencies: - es-define-property "^1.0.0" - -has-proto@^1.0.1: - version "1.0.3" - resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz" - integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== - -has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0, has-tostringtag@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz" - integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== - dependencies: - has-symbols "^1.0.3" - -has-yarn@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/has-yarn/-/has-yarn-3.0.0.tgz" - integrity sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA== - -hasown@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz" - integrity sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA== - dependencies: - function-bind "^1.1.2" - -hast-util-definition-list@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/hast-util-definition-list/-/hast-util-definition-list-2.0.0.tgz" - integrity sha512-EnkqD6a7R1fwyC9F5R6fu0ucpcwfkxjiga7/G8J7KU+uuUHVENzmgo/Da68fZBy9SZAkQOAC/8gK3m2BnuutUg== - dependencies: - "@types/hast" "^3.0.1" - "@types/mdast" "^4.0.1" - "@types/unist" "^3.0.0" - hast-util-to-mdast "^10.1.0" - mdast-util-definition-list "^2.0.0" - mdast-util-phrasing "^4.0.0" - -hast-util-embedded@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/hast-util-embedded/-/hast-util-embedded-3.0.0.tgz" - integrity sha512-naH8sld4Pe2ep03qqULEtvYr7EjrLK2QHY8KJR6RJkTUjPGObe1vnx585uzem2hGra+s1q08DZZpfgDVYRbaXA== - dependencies: - "@types/hast" "^3.0.0" - hast-util-is-element "^3.0.0" - -hast-util-from-dom@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/hast-util-from-dom/-/hast-util-from-dom-5.0.0.tgz" - integrity sha512-d6235voAp/XR3Hh5uy7aGLbM3S4KamdW0WEgOaU1YoewnuYw4HXb5eRtv9g65m/RFGEfUY1Mw4UqCc5Y8L4Stg== - dependencies: - "@types/hast" "^3.0.0" - hastscript "^8.0.0" - web-namespaces "^2.0.0" - -hast-util-from-html-isomorphic@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/hast-util-from-html-isomorphic/-/hast-util-from-html-isomorphic-2.0.0.tgz" - integrity sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw== - dependencies: - "@types/hast" "^3.0.0" - hast-util-from-dom "^5.0.0" - hast-util-from-html "^2.0.0" - unist-util-remove-position "^5.0.0" - -hast-util-from-html@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.1.tgz" - integrity sha512-RXQBLMl9kjKVNkJTIO6bZyb2n+cUH8LFaSSzo82jiLT6Tfc+Pt7VQCS+/h3YwG4jaNE2TA2sdJisGWR+aJrp0g== - dependencies: - "@types/hast" "^3.0.0" - devlop "^1.1.0" - hast-util-from-parse5 "^8.0.0" - parse5 "^7.0.0" - vfile "^6.0.0" - vfile-message "^4.0.0" - -hast-util-from-parse5@^8.0.0: - version "8.0.1" - resolved "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.1.tgz" - integrity sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ== - dependencies: - "@types/hast" "^3.0.0" - "@types/unist" "^3.0.0" - devlop "^1.0.0" - hastscript "^8.0.0" - property-information "^6.0.0" - vfile "^6.0.0" - vfile-location "^5.0.0" - web-namespaces "^2.0.0" - -hast-util-has-property@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/hast-util-has-property/-/hast-util-has-property-3.0.0.tgz" - integrity sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA== - dependencies: - "@types/hast" "^3.0.0" - -hast-util-is-body-ok-link@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/hast-util-is-body-ok-link/-/hast-util-is-body-ok-link-3.0.0.tgz" - integrity sha512-VFHY5bo2nY8HiV6nir2ynmEB1XkxzuUffhEGeVx7orbu/B1KaGyeGgMZldvMVx5xWrDlLLG/kQ6YkJAMkBEx0w== - dependencies: - "@types/hast" "^3.0.0" - -hast-util-is-element@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz" - integrity sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g== - dependencies: - "@types/hast" "^3.0.0" - -hast-util-is-element@1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-1.1.0.tgz" - integrity sha512-oUmNua0bFbdrD/ELDSSEadRVtWZOf3iF6Lbv81naqsIV99RnSCieTbWuWCY8BAeEfKJTKl0gRdokv+dELutHGQ== - -hast-util-parse-selector@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz" - integrity sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A== - dependencies: - "@types/hast" "^3.0.0" - -hast-util-phrasing@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/hast-util-phrasing/-/hast-util-phrasing-3.0.1.tgz" - integrity sha512-6h60VfI3uBQUxHqTyMymMZnEbNl1XmEGtOxxKYL7stY2o601COo62AWAYBQR9lZbYXYSBoxag8UpPRXK+9fqSQ== - dependencies: - "@types/hast" "^3.0.0" - hast-util-embedded "^3.0.0" - hast-util-has-property "^3.0.0" - hast-util-is-body-ok-link "^3.0.0" - hast-util-is-element "^3.0.0" - -hast-util-raw@^9.0.0: - version "9.0.2" - resolved "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.0.2.tgz" - integrity sha512-PldBy71wO9Uq1kyaMch9AHIghtQvIwxBUkv823pKmkTM3oV1JxtsTNYdevMxvUHqcnOAuO65JKU2+0NOxc2ksA== - dependencies: - "@types/hast" "^3.0.0" - "@types/unist" "^3.0.0" - "@ungap/structured-clone" "^1.0.0" - hast-util-from-parse5 "^8.0.0" - hast-util-to-parse5 "^8.0.0" - html-void-elements "^3.0.0" - mdast-util-to-hast "^13.0.0" - parse5 "^7.0.0" - unist-util-position "^5.0.0" - unist-util-visit "^5.0.0" - vfile "^6.0.0" - web-namespaces "^2.0.0" - zwitch "^2.0.0" - -hast-util-to-estree@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.0.tgz" - integrity sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw== - dependencies: - "@types/estree" "^1.0.0" - "@types/estree-jsx" "^1.0.0" - "@types/hast" "^3.0.0" - comma-separated-tokens "^2.0.0" - devlop "^1.0.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.0" - mdast-util-mdx-jsx "^3.0.0" - mdast-util-mdxjs-esm "^2.0.0" - property-information "^6.0.0" - space-separated-tokens "^2.0.0" - style-to-object "^0.4.0" - unist-util-position "^5.0.0" - zwitch "^2.0.0" - -hast-util-to-html@^9.0.0: - version "9.0.0" - resolved "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.0.tgz" - integrity sha512-IVGhNgg7vANuUA2XKrT6sOIIPgaYZnmLx3l/CCOAK0PtgfoHrZwX7jCSYyFxHTrGmC6S9q8aQQekjp4JPZF+cw== - dependencies: - "@types/hast" "^3.0.0" - "@types/unist" "^3.0.0" - ccount "^2.0.0" - comma-separated-tokens "^2.0.0" - hast-util-raw "^9.0.0" - hast-util-whitespace "^3.0.0" - html-void-elements "^3.0.0" - mdast-util-to-hast "^13.0.0" - property-information "^6.0.0" - space-separated-tokens "^2.0.0" - stringify-entities "^4.0.0" - zwitch "^2.0.4" - -hast-util-to-jsx-runtime@^2.0.0: - version "2.3.0" - resolved "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.0.tgz" - integrity sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ== - dependencies: - "@types/estree" "^1.0.0" - "@types/hast" "^3.0.0" - "@types/unist" "^3.0.0" - comma-separated-tokens "^2.0.0" - devlop "^1.0.0" - estree-util-is-identifier-name "^3.0.0" - hast-util-whitespace "^3.0.0" - mdast-util-mdx-expression "^2.0.0" - mdast-util-mdx-jsx "^3.0.0" - mdast-util-mdxjs-esm "^2.0.0" - property-information "^6.0.0" - space-separated-tokens "^2.0.0" - style-to-object "^1.0.0" - unist-util-position "^5.0.0" - vfile-message "^4.0.0" - -hast-util-to-mdast@^10.1.0: - version "10.1.0" - resolved "https://registry.npmjs.org/hast-util-to-mdast/-/hast-util-to-mdast-10.1.0.tgz" - integrity sha512-DsL/SvCK9V7+vfc6SLQ+vKIyBDXTk2KLSbfBYkH4zeF/uR1yBajHRhkzuaUSGOB1WJSTieJBdHwxlC+HLKvZZw== - dependencies: - "@types/hast" "^3.0.0" - "@types/mdast" "^4.0.0" - "@ungap/structured-clone" "^1.0.0" - hast-util-phrasing "^3.0.0" - hast-util-to-html "^9.0.0" - hast-util-to-text "^4.0.0" - hast-util-whitespace "^3.0.0" - mdast-util-phrasing "^4.0.0" - mdast-util-to-hast "^13.0.0" - mdast-util-to-string "^4.0.0" - rehype-minify-whitespace "^6.0.0" - trim-trailing-lines "^2.0.0" - unist-util-position "^5.0.0" - unist-util-visit "^5.0.0" - -hast-util-to-parse5@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz" - integrity sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw== - dependencies: - "@types/hast" "^3.0.0" - comma-separated-tokens "^2.0.0" - devlop "^1.0.0" - property-information "^6.0.0" - space-separated-tokens "^2.0.0" - web-namespaces "^2.0.0" - zwitch "^2.0.0" - -hast-util-to-text@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.0.tgz" - integrity sha512-EWiE1FSArNBPUo1cKWtzqgnuRQwEeQbQtnFJRYV1hb1BWDgrAlBU0ExptvZMM/KSA82cDpm2sFGf3Dmc5Mza3w== - dependencies: - "@types/hast" "^3.0.0" - "@types/unist" "^3.0.0" - hast-util-is-element "^3.0.0" - unist-util-find-after "^5.0.0" - -hast-util-whitespace@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz" - integrity sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw== - dependencies: - "@types/hast" "^3.0.0" - -hastscript@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/hastscript/-/hastscript-8.0.0.tgz" - integrity sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw== - dependencies: - "@types/hast" "^3.0.0" - comma-separated-tokens "^2.0.0" - hast-util-parse-selector "^4.0.0" - property-information "^6.0.0" - space-separated-tokens "^2.0.0" - -he@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -history@^4.9.0: - version "4.10.1" - resolved "https://registry.npmjs.org/history/-/history-4.10.1.tgz" - integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== - dependencies: - "@babel/runtime" "^7.1.2" - loose-envify "^1.2.0" - resolve-pathname "^3.0.0" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" - value-equal "^1.0.1" - -hoist-non-react-statics@^3.1.0: - version "3.3.2" - resolved "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz" - integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== - dependencies: - react-is "^16.7.0" - -hpack.js@^2.1.6: - version "2.1.6" - resolved "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz" - integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ== - dependencies: - inherits "^2.0.1" - obuf "^1.0.0" - readable-stream "^2.0.1" - wbuf "^1.1.0" - -html-entities@^2.3.2: - version "2.4.0" - resolved "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz" - integrity sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ== - -html-escaper@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== - -html-minifier-terser@^6.0.2: - version "6.1.0" - resolved "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz" - integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== - dependencies: - camel-case "^4.1.2" - clean-css "^5.2.2" - commander "^8.3.0" - he "^1.2.0" - param-case "^3.0.4" - relateurl "^0.2.7" - terser "^5.10.0" - -html-minifier-terser@^7.2.0: - version "7.2.0" - resolved "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz" - integrity sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA== - dependencies: - camel-case "^4.1.2" - clean-css "~5.3.2" - commander "^10.0.0" - entities "^4.4.0" - param-case "^3.0.4" - relateurl "^0.2.7" - terser "^5.15.1" - -html-tags@^3.3.1: - version "3.3.1" - resolved "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz" - integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ== - -html-void-elements@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz" - integrity sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg== - -html-webpack-plugin@^5.5.3: - version "5.6.0" - resolved "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz" - integrity sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw== - dependencies: - "@types/html-minifier-terser" "^6.0.0" - html-minifier-terser "^6.0.2" - lodash "^4.17.21" - pretty-error "^4.0.0" - tapable "^2.0.0" - -htmlparser2@^6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz" - integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.0.0" - domutils "^2.5.2" - entities "^2.0.0" - -htmlparser2@^8.0.1: - version "8.0.2" - resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz" - integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== - dependencies: - domelementtype "^2.3.0" - domhandler "^5.0.3" - domutils "^3.0.1" - entities "^4.4.0" - -http-cache-semantics@^4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz" - integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== - -http-deceiver@^1.2.7: - version "1.2.7" - resolved "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz" - integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== - -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" - integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - -http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - -http-parser-js@>=0.5.1: - version "0.5.8" - resolved "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz" - integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== - -http-proxy-middleware@^2.0.3: - version "2.0.6" - resolved "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz" - integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== - dependencies: - "@types/http-proxy" "^1.17.8" - http-proxy "^1.18.1" - is-glob "^4.0.1" - is-plain-obj "^3.0.0" - micromatch "^4.0.2" - -http-proxy@^1.18.1: - version "1.18.1" - resolved "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz" - integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== - dependencies: - eventemitter3 "^4.0.0" - follow-redirects "^1.0.0" - requires-port "^1.0.0" - -http2-wrapper@^2.1.10: - version "2.2.1" - resolved "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz" - integrity sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ== - dependencies: - quick-lru "^5.1.1" - resolve-alpn "^1.2.0" - -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -icss-utils@^5.0.0, icss-utils@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz" - integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== - -ignore@^5.2.0, ignore@^5.2.4: - version "5.3.1" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz" - integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== - -image-size@^1.0.2: - version "1.1.1" - resolved "https://registry.npmjs.org/image-size/-/image-size-1.1.1.tgz" - integrity sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ== - dependencies: - queue "6.0.2" - -immer@^9.0.7: - version "9.0.21" - resolved "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz" - integrity sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA== - -import-fresh@^3.1.0, import-fresh@^3.2.1, import-fresh@^3.3.0: - version "3.3.0" - resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-lazy@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz" - integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw== - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -infima@0.2.0-alpha.43: - version "0.2.0-alpha.43" - resolved "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.43.tgz" - integrity sha512-2uw57LvUqW0rK/SWYnd/2rRfxNA5DDNOh33jxF7fy46VWoNhGxiUQyVZHbBMjQ33mQem0cjdDVwgWVAmlRfgyQ== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3, inherits@2, inherits@2.0.4: - version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" - integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== - -ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: - version "1.3.8" - resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -ini@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz" - integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== - -inline-style-parser@0.1.1: - version "0.1.1" - resolved "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz" - integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== - -inline-style-parser@0.2.2: - version "0.2.2" - resolved "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.2.tgz" - integrity sha512-EcKzdTHVe8wFVOGEYXiW9WmJXPjqi1T+234YpJr98RiFYKHV3cdy1+3mkTE+KHTHxFFLH51SfaGOoUdW+v7ViQ== - -interpret@^1.0.0: - version "1.4.0" - resolved "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz" - integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== - -invariant@^2.2.4: - version "2.2.4" - resolved "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz" - integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== - dependencies: - loose-envify "^1.0.0" - -ipaddr.js@^2.0.1: - version "2.1.0" - resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz" - integrity sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ== - -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -is-alphabetical@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz" - integrity sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ== - -is-alphanumerical@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz" - integrity sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw== - dependencies: - is-alphabetical "^2.0.0" - is-decimal "^2.0.0" - -is-arguments@^1.0.4: - version "1.1.1" - resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" - integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-callable@^1.1.3: - version "1.2.7" - resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - -is-ci@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz" - integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== - dependencies: - ci-info "^3.2.0" - -is-core-module@^2.13.0: - version "2.13.1" - resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz" - integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== - dependencies: - hasown "^2.0.0" - -is-decimal@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz" - integrity sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A== - -is-docker@^2.0.0, is-docker@^2.1.1: - version "2.2.1" - resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - -is-extendable@^0.1.0: - version "0.1.1" - resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" - integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-generator-function@^1.0.7: - version "1.0.10" - resolved "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz" - integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== - dependencies: - has-tostringtag "^1.0.0" - -is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-hexadecimal@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz" - integrity sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg== - -is-installed-globally@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz" - integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== - dependencies: - global-dirs "^3.0.0" - is-path-inside "^3.0.2" - -is-nan@^1.3.2: - version "1.3.2" - resolved "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz" - integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - -is-npm@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/is-npm/-/is-npm-6.0.0.tgz" - integrity sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ== - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz" - integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== - -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - -is-path-cwd@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz" - integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== - -is-path-inside@^3.0.2: - version "3.0.3" - resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -is-plain-obj@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz" - integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== - -is-plain-obj@^4.0.0: - version "4.1.0" - resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz" - integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== - -is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-plain-object@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz" - integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== - -is-reference@^3.0.0: - version "3.0.2" - resolved "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz" - integrity sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg== - dependencies: - "@types/estree" "*" - -is-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz" - integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA== - -is-root@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz" - integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-typed-array@^1.1.3: - version "1.1.13" - resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz" - integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== - dependencies: - which-typed-array "^1.1.14" - -is-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - -is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - -is-yarn-global@^0.4.0: - version "0.4.1" - resolved "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.4.1.tgz" - integrity sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ== - -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" - integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" - integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== - -jest-util@^29.7.0: - version "29.7.0" - resolved "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz" - integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" - -jest-worker@^27.4.5: - version "27.5.1" - resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz" - integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -jest-worker@^29.4.3: - version "29.7.0" - resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz" - integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== - dependencies: - "@types/node" "*" - jest-util "^29.7.0" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -jiti@^1.20.0: - version "1.21.0" - resolved "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz" - integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== - -joi@^17.9.2: - version "17.12.2" - resolved "https://registry.npmjs.org/joi/-/joi-17.12.2.tgz" - integrity sha512-RonXAIzCiHLc8ss3Ibuz45u28GOsWE1UpfDXLbN/9NKbL4tCJf8TWYVKsoYuuh+sAUt7fsSNpA+r2+TBA6Wjmw== - dependencies: - "@hapi/hoek" "^9.3.0" - "@hapi/topo" "^5.1.0" - "@sideway/address" "^4.1.5" - "@sideway/formula" "^3.0.1" - "@sideway/pinpoint" "^2.0.0" - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -jsesc@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz" - integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g== - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz" - integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -json5@^2.1.2, json5@^2.2.3: - version "2.2.3" - resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -katex@^0.16.0: - version "0.16.9" - resolved "https://registry.npmjs.org/katex/-/katex-0.16.9.tgz" - integrity sha512-fsSYjWS0EEOwvy81j3vRA8TEAhQhKiqO+FQaKWp0m39qwOzHVBgAUBIXWj1pB+O2W3fIpNa6Y9KSKCVbfPhyAQ== - dependencies: - commander "^8.3.0" - -keyv@^4.5.3: - version "4.5.4" - resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz" - integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== - dependencies: - json-buffer "3.0.1" - -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - -latest-version@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz" - integrity sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg== - dependencies: - package-json "^8.1.0" - -launch-editor@^2.6.0: - version "2.6.1" - resolved "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz" - integrity sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw== - dependencies: - picocolors "^1.0.0" - shell-quote "^1.8.1" - -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== - -lilconfig@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz" - integrity sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ== - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -loader-runner@^4.2.0: - version "4.3.0" - resolved "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz" - integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== - -loader-utils@^2.0.0: - version "2.0.4" - resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz" - integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^2.1.2" - -loader-utils@^3.2.0: - version "3.2.1" - resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz" - integrity sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw== - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -locate-path@^7.1.0: - version "7.2.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz" - integrity sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA== - dependencies: - p-locate "^6.0.0" - -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" - integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== - -lodash.memoize@^4.1.2: - version "4.1.2" - resolved "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz" - integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== - -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz" - integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== - -lodash@^4.17.20, lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -longest-streak@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz" - integrity sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g== - -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -lower-case@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz" - integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== - dependencies: - tslib "^2.0.3" - -lowercase-keys@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz" - integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -markdown-extensions@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz" - integrity sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q== - -markdown-table@^3.0.0: - version "3.0.3" - resolved "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz" - integrity sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw== - -mdast-util-definition-list@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/mdast-util-definition-list/-/mdast-util-definition-list-2.0.0.tgz" - integrity sha512-aFWuASQs77BJndNSDcNdvB1HRqWZBptcEjwv67mnPbaAZsfwMHxI8MwoQxAz4I2bHx41hft/HDRC57ZkhpayOQ== - dependencies: - "@types/mdast" "^4.0.1" - "@types/unist" "^3.0.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-hast "^13.0.2" - mdast-util-to-markdown "^2.1.0" - micromark-extension-definition-list "^2.0.0" - unist-builder "^4.0.0" - -mdast-util-directive@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.0.0.tgz" - integrity sha512-JUpYOqKI4mM3sZcNxmF/ox04XYFFkNwr0CFlrQIkCwbvH0xzMCqkMqAde9wRd80VAhaUrwFwKm2nxretdT1h7Q== - dependencies: - "@types/mdast" "^4.0.0" - "@types/unist" "^3.0.0" - devlop "^1.0.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - parse-entities "^4.0.0" - stringify-entities "^4.0.0" - unist-util-visit-parents "^6.0.0" - -mdast-util-find-and-replace@^3.0.0, mdast-util-find-and-replace@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz" - integrity sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA== - dependencies: - "@types/mdast" "^4.0.0" - escape-string-regexp "^5.0.0" - unist-util-is "^6.0.0" - unist-util-visit-parents "^6.0.0" - -mdast-util-from-markdown@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz" - integrity sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA== - dependencies: - "@types/mdast" "^4.0.0" - "@types/unist" "^3.0.0" - decode-named-character-reference "^1.0.0" - devlop "^1.0.0" - mdast-util-to-string "^4.0.0" - micromark "^4.0.0" - micromark-util-decode-numeric-character-reference "^2.0.0" - micromark-util-decode-string "^2.0.0" - micromark-util-normalize-identifier "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - unist-util-stringify-position "^4.0.0" - -mdast-util-frontmatter@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz" - integrity sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA== - dependencies: - "@types/mdast" "^4.0.0" - devlop "^1.0.0" - escape-string-regexp "^5.0.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - micromark-extension-frontmatter "^2.0.0" - -mdast-util-gfm-autolink-literal@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.0.tgz" - integrity sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg== - dependencies: - "@types/mdast" "^4.0.0" - ccount "^2.0.0" - devlop "^1.0.0" - mdast-util-find-and-replace "^3.0.0" - micromark-util-character "^2.0.0" - -mdast-util-gfm-footnote@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz" - integrity sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ== - dependencies: - "@types/mdast" "^4.0.0" - devlop "^1.1.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - micromark-util-normalize-identifier "^2.0.0" - -mdast-util-gfm-strikethrough@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz" - integrity sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - -mdast-util-gfm-table@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz" - integrity sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg== - dependencies: - "@types/mdast" "^4.0.0" - devlop "^1.0.0" - markdown-table "^3.0.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - -mdast-util-gfm-task-list-item@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz" - integrity sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ== - dependencies: - "@types/mdast" "^4.0.0" - devlop "^1.0.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - -mdast-util-gfm@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz" - integrity sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw== - dependencies: - mdast-util-from-markdown "^2.0.0" - mdast-util-gfm-autolink-literal "^2.0.0" - mdast-util-gfm-footnote "^2.0.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.0.0" - -mdast-util-math@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/mdast-util-math/-/mdast-util-math-3.0.0.tgz" - integrity sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w== - dependencies: - "@types/hast" "^3.0.0" - "@types/mdast" "^4.0.0" - devlop "^1.0.0" - longest-streak "^3.0.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.1.0" - unist-util-remove-position "^5.0.0" - -mdast-util-mdx-expression@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.0.tgz" - integrity sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw== - dependencies: - "@types/estree-jsx" "^1.0.0" - "@types/hast" "^3.0.0" - "@types/mdast" "^4.0.0" - devlop "^1.0.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - -mdast-util-mdx-jsx@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.0.tgz" - integrity sha512-A8AJHlR7/wPQ3+Jre1+1rq040fX9A4Q1jG8JxmSNp/PLPHg80A6475wxTp3KzHpApFH6yWxFotHrJQA3dXP6/w== - dependencies: - "@types/estree-jsx" "^1.0.0" - "@types/hast" "^3.0.0" - "@types/mdast" "^4.0.0" - "@types/unist" "^3.0.0" - ccount "^2.0.0" - devlop "^1.1.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - parse-entities "^4.0.0" - stringify-entities "^4.0.0" - unist-util-remove-position "^5.0.0" - unist-util-stringify-position "^4.0.0" - vfile-message "^4.0.0" - -mdast-util-mdx@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz" - integrity sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w== - dependencies: - mdast-util-from-markdown "^2.0.0" - mdast-util-mdx-expression "^2.0.0" - mdast-util-mdx-jsx "^3.0.0" - mdast-util-mdxjs-esm "^2.0.0" - mdast-util-to-markdown "^2.0.0" - -mdast-util-mdxjs-esm@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz" - integrity sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg== - dependencies: - "@types/estree-jsx" "^1.0.0" - "@types/hast" "^3.0.0" - "@types/mdast" "^4.0.0" - devlop "^1.0.0" - mdast-util-from-markdown "^2.0.0" - mdast-util-to-markdown "^2.0.0" - -mdast-util-phrasing@^4.0.0: - version "4.1.0" - resolved "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz" - integrity sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w== - dependencies: - "@types/mdast" "^4.0.0" - unist-util-is "^6.0.0" - -mdast-util-to-hast@^13.0.0, mdast-util-to-hast@^13.0.2: - version "13.1.0" - resolved "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.1.0.tgz" - integrity sha512-/e2l/6+OdGp/FB+ctrJ9Avz71AN/GRH3oi/3KAx/kMnoUsD6q0woXlDT8lLEeViVKE7oZxE7RXzvO3T8kF2/sA== - dependencies: - "@types/hast" "^3.0.0" - "@types/mdast" "^4.0.0" - "@ungap/structured-clone" "^1.0.0" - devlop "^1.0.0" - micromark-util-sanitize-uri "^2.0.0" - trim-lines "^3.0.0" - unist-util-position "^5.0.0" - unist-util-visit "^5.0.0" - vfile "^6.0.0" - -mdast-util-to-markdown@^2.0.0, mdast-util-to-markdown@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz" - integrity sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ== - dependencies: - "@types/mdast" "^4.0.0" - "@types/unist" "^3.0.0" - longest-streak "^3.0.0" - mdast-util-phrasing "^4.0.0" - mdast-util-to-string "^4.0.0" - micromark-util-decode-string "^2.0.0" - unist-util-visit "^5.0.0" - zwitch "^2.0.0" - -mdast-util-to-string@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz" - integrity sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg== - dependencies: - "@types/mdast" "^4.0.0" - -mdn-data@2.0.14: - version "2.0.14" - resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz" - integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== - -mdn-data@2.0.28: - version "2.0.28" - resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz" - integrity sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g== - -mdn-data@2.0.30: - version "2.0.30" - resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz" - integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== - -memfs@^3.1.2, memfs@^3.4.3: - version "3.6.0" - resolved "https://registry.npmjs.org/memfs/-/memfs-3.6.0.tgz" - integrity sha512-EGowvkkgbMcIChjMTMkESFDbZeSh8xZ7kNSF0hAiAN4Jh6jgHCRS0Ga/+C8y6Au+oqpezRHCfPsmJ2+DwAgiwQ== - dependencies: - fs-monkey "^1.0.4" - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz" - integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" - integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== - -micromark-core-commonmark@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.0.tgz" - integrity sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA== - dependencies: - decode-named-character-reference "^1.0.0" - devlop "^1.0.0" - micromark-factory-destination "^2.0.0" - micromark-factory-label "^2.0.0" - micromark-factory-space "^2.0.0" - micromark-factory-title "^2.0.0" - micromark-factory-whitespace "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-chunked "^2.0.0" - micromark-util-classify-character "^2.0.0" - micromark-util-html-tag-name "^2.0.0" - micromark-util-normalize-identifier "^2.0.0" - micromark-util-resolve-all "^2.0.0" - micromark-util-subtokenize "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-definition-list@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-extension-definition-list/-/micromark-extension-definition-list-2.0.0.tgz" - integrity sha512-92SSfTdG7YIXiYj60sNDPoo3MTJXK94LRLfKsoDHgDqiE61p4w4pzdyCc9SuoQ74/bzb5SXPVK11kjlYnIjzKA== - dependencies: - assert "^2.0.0" - micromark-core-commonmark "^2.0.0" - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.1" - micromark-util-chunked "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - ts-dedent "^2.2.0" - -micromark-extension-directive@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-3.0.0.tgz" - integrity sha512-61OI07qpQrERc+0wEysLHMvoiO3s2R56x5u7glHq2Yqq6EHbH4dW25G9GfDdGCDYqA21KE6DWgNSzxSwHc2hSg== - dependencies: - devlop "^1.0.0" - micromark-factory-space "^2.0.0" - micromark-factory-whitespace "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - parse-entities "^4.0.0" - -micromark-extension-frontmatter@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz" - integrity sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg== - dependencies: - fault "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-gfm-autolink-literal@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.0.0.tgz" - integrity sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg== - dependencies: - micromark-util-character "^2.0.0" - micromark-util-sanitize-uri "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-gfm-footnote@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.0.0.tgz" - integrity sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg== - dependencies: - devlop "^1.0.0" - micromark-core-commonmark "^2.0.0" - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-normalize-identifier "^2.0.0" - micromark-util-sanitize-uri "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-gfm-strikethrough@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.0.0.tgz" - integrity sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw== - dependencies: - devlop "^1.0.0" - micromark-util-chunked "^2.0.0" - micromark-util-classify-character "^2.0.0" - micromark-util-resolve-all "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-gfm-table@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.0.0.tgz" - integrity sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw== - dependencies: - devlop "^1.0.0" - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-gfm-tagfilter@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz" - integrity sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg== - dependencies: - micromark-util-types "^2.0.0" - -micromark-extension-gfm-task-list-item@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.0.1.tgz" - integrity sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw== - dependencies: - devlop "^1.0.0" - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-gfm@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz" - integrity sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w== - dependencies: - micromark-extension-gfm-autolink-literal "^2.0.0" - micromark-extension-gfm-footnote "^2.0.0" - micromark-extension-gfm-strikethrough "^2.0.0" - micromark-extension-gfm-table "^2.0.0" - micromark-extension-gfm-tagfilter "^2.0.0" - micromark-extension-gfm-task-list-item "^2.0.0" - micromark-util-combine-extensions "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-math@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/micromark-extension-math/-/micromark-extension-math-3.1.0.tgz" - integrity sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg== - dependencies: - "@types/katex" "^0.16.0" - devlop "^1.0.0" - katex "^0.16.0" - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-mdx-expression@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.0.tgz" - integrity sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ== - dependencies: - "@types/estree" "^1.0.0" - devlop "^1.0.0" - micromark-factory-mdx-expression "^2.0.0" - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-events-to-acorn "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-extension-mdx-jsx@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.0.tgz" - integrity sha512-uvhhss8OGuzR4/N17L1JwvmJIpPhAd8oByMawEKx6NVdBCbesjH4t+vjEp3ZXft9DwvlKSD07fCeI44/N0Vf2w== - dependencies: - "@types/acorn" "^4.0.0" - "@types/estree" "^1.0.0" - devlop "^1.0.0" - estree-util-is-identifier-name "^3.0.0" - micromark-factory-mdx-expression "^2.0.0" - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - vfile-message "^4.0.0" - -micromark-extension-mdx-md@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz" - integrity sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ== - dependencies: - micromark-util-types "^2.0.0" - -micromark-extension-mdxjs-esm@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz" - integrity sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A== - dependencies: - "@types/estree" "^1.0.0" - devlop "^1.0.0" - micromark-core-commonmark "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-events-to-acorn "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - unist-util-position-from-estree "^2.0.0" - vfile-message "^4.0.0" - -micromark-extension-mdxjs@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz" - integrity sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ== - dependencies: - acorn "^8.0.0" - acorn-jsx "^5.0.0" - micromark-extension-mdx-expression "^3.0.0" - micromark-extension-mdx-jsx "^3.0.0" - micromark-extension-mdx-md "^2.0.0" - micromark-extension-mdxjs-esm "^3.0.0" - micromark-util-combine-extensions "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-factory-destination@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz" - integrity sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA== - dependencies: - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-factory-label@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz" - integrity sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw== - dependencies: - devlop "^1.0.0" - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-factory-mdx-expression@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.1.tgz" - integrity sha512-F0ccWIUHRLRrYp5TC9ZYXmZo+p2AM13ggbsW4T0b5CRKP8KHVRB8t4pwtBgTxtjRmwrK0Irwm7vs2JOZabHZfg== - dependencies: - "@types/estree" "^1.0.0" - devlop "^1.0.0" - micromark-util-character "^2.0.0" - micromark-util-events-to-acorn "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - unist-util-position-from-estree "^2.0.0" - vfile-message "^4.0.0" - -micromark-factory-space@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz" - integrity sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ== - dependencies: - micromark-util-character "^1.0.0" - micromark-util-types "^1.0.0" - -micromark-factory-space@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz" - integrity sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg== - dependencies: - micromark-util-character "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-factory-title@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz" - integrity sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A== - dependencies: - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-factory-whitespace@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz" - integrity sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA== - dependencies: - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-util-character@^1.0.0, micromark-util-character@^1.1.0: - version "1.2.0" - resolved "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz" - integrity sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg== - dependencies: - micromark-util-symbol "^1.0.0" - micromark-util-types "^1.0.0" - -micromark-util-character@^2.0.0, micromark-util-character@^2.0.1: - version "2.1.0" - resolved "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz" - integrity sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ== - dependencies: - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-util-chunked@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz" - integrity sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg== - dependencies: - micromark-util-symbol "^2.0.0" - -micromark-util-classify-character@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz" - integrity sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw== - dependencies: - micromark-util-character "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-util-combine-extensions@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz" - integrity sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ== - dependencies: - micromark-util-chunked "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-util-decode-numeric-character-reference@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz" - integrity sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ== - dependencies: - micromark-util-symbol "^2.0.0" - -micromark-util-decode-string@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz" - integrity sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA== - dependencies: - decode-named-character-reference "^1.0.0" - micromark-util-character "^2.0.0" - micromark-util-decode-numeric-character-reference "^2.0.0" - micromark-util-symbol "^2.0.0" - -micromark-util-encode@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz" - integrity sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA== - -micromark-util-events-to-acorn@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.2.tgz" - integrity sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA== - dependencies: - "@types/acorn" "^4.0.0" - "@types/estree" "^1.0.0" - "@types/unist" "^3.0.0" - devlop "^1.0.0" - estree-util-visit "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - vfile-message "^4.0.0" - -micromark-util-html-tag-name@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz" - integrity sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw== - -micromark-util-normalize-identifier@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz" - integrity sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w== - dependencies: - micromark-util-symbol "^2.0.0" - -micromark-util-resolve-all@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz" - integrity sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA== - dependencies: - micromark-util-types "^2.0.0" - -micromark-util-sanitize-uri@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz" - integrity sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw== - dependencies: - micromark-util-character "^2.0.0" - micromark-util-encode "^2.0.0" - micromark-util-symbol "^2.0.0" - -micromark-util-subtokenize@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.0.tgz" - integrity sha512-vc93L1t+gpR3p8jxeVdaYlbV2jTYteDje19rNSS/H5dlhxUYll5Fy6vJ2cDwP8RnsXi818yGty1ayP55y3W6fg== - dependencies: - devlop "^1.0.0" - micromark-util-chunked "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-util-symbol@^1.0.0, micromark-util-symbol@^1.0.1: - version "1.1.0" - resolved "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz" - integrity sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag== - -micromark-util-symbol@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz" - integrity sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw== - -micromark-util-types@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz" - integrity sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg== - -micromark-util-types@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz" - integrity sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w== - -micromark@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz" - integrity sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ== - dependencies: - "@types/debug" "^4.0.0" - debug "^4.0.0" - decode-named-character-reference "^1.0.0" - devlop "^1.0.0" - micromark-core-commonmark "^2.0.0" - micromark-factory-space "^2.0.0" - micromark-util-character "^2.0.0" - micromark-util-chunked "^2.0.0" - micromark-util-combine-extensions "^2.0.0" - micromark-util-decode-numeric-character-reference "^2.0.0" - micromark-util-encode "^2.0.0" - micromark-util-normalize-identifier "^2.0.0" - micromark-util-resolve-all "^2.0.0" - micromark-util-sanitize-uri "^2.0.0" - micromark-util-subtokenize "^2.0.0" - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: - version "4.0.5" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -"mime-db@>= 1.43.0 < 2", mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-db@~1.33.0: - version "1.33.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz" - integrity sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ== - -mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.35" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mime-types@2.1.18: - version "2.1.18" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz" - integrity sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ== - dependencies: - mime-db "~1.33.0" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mimic-response@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" - integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== - -mimic-response@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz" - integrity sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg== - -mini-css-extract-plugin@^2.7.6: - version "2.8.0" - resolved "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.8.0.tgz" - integrity sha512-CxmUYPFcTgET1zImteG/LZOy/4T5rTojesQXkSNBiquhydn78tfbCE9sjIjnJ/UcjNjOC1bphTCCW5rrS7cXAg== - dependencies: - schema-utils "^4.0.0" - tapable "^2.2.1" - -minimalistic-assert@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.2.0: - version "1.2.8" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -mrmime@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz" - integrity sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@2.1.3: - version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -multicast-dns@^7.2.5: - version "7.2.5" - resolved "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz" - integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg== - dependencies: - dns-packet "^5.2.2" - thunky "^1.0.2" - -nanoid@^3.3.7: - version "3.3.7" - resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz" - integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== - -negotiator@0.6.3: - version "0.6.3" - resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -neo-async@^2.6.2: - version "2.6.2" - resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -no-case@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz" - integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== - dependencies: - lower-case "^2.0.2" - tslib "^2.0.3" - -node-emoji@^2.1.0: - version "2.1.3" - resolved "https://registry.npmjs.org/node-emoji/-/node-emoji-2.1.3.tgz" - integrity sha512-E2WEOVsgs7O16zsURJ/eH8BqhF029wGpEOnv7Urwdo2wmQanOACwJQh0devF9D9RhoZru0+9JXIS0dBXIAz+lA== - dependencies: - "@sindresorhus/is" "^4.6.0" - char-regex "^1.0.2" - emojilib "^2.4.0" - skin-tone "^2.0.0" - -node-forge@^1: - version "1.3.1" - resolved "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz" - integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== - -node-releases@^2.0.18: - version "2.0.19" - resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz" - integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz" - integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== - -normalize-url@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz" - integrity sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw== - -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -nprogress@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz" - integrity sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA== - -nth-check@^2.0.1: - version "2.1.1" - resolved "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz" - integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== - dependencies: - boolbase "^1.0.0" - -object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -object-inspect@^1.13.1: - version "1.13.1" - resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz" - integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== - -object-is@^1.1.5: - version "1.1.5" - resolved "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz" - integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@^4.1.0, object.assign@^4.1.4: - version "4.1.5" - resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz" - integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== - dependencies: - call-bind "^1.0.5" - define-properties "^1.2.1" - has-symbols "^1.0.3" - object-keys "^1.1.1" - -obuf@^1.0.0, obuf@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz" - integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== - -on-finished@2.4.1: - version "2.4.1" - resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - -on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== - -once@^1.3.0: - version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -open@^8.0.9, open@^8.4.0: - version "8.4.2" - resolved "https://registry.npmjs.org/open/-/open-8.4.2.tgz" - integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== - dependencies: - define-lazy-prop "^2.0.0" - is-docker "^2.1.1" - is-wsl "^2.2.0" - -opener@^1.5.2: - version "1.5.2" - resolved "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz" - integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== - -p-cancelable@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz" - integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw== - -p-limit@^2.0.0: - version "2.3.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-limit@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz" - integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== - dependencies: - yocto-queue "^1.0.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -p-locate@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz" - integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw== - dependencies: - p-limit "^4.0.0" - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -p-retry@^4.5.0: - version "4.6.2" - resolved "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz" - integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== - dependencies: - "@types/retry" "0.12.0" - retry "^0.13.1" - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -package-json@^8.1.0: - version "8.1.1" - resolved "https://registry.npmjs.org/package-json/-/package-json-8.1.1.tgz" - integrity sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA== - dependencies: - got "^12.1.0" - registry-auth-token "^5.0.1" - registry-url "^6.0.0" - semver "^7.3.7" - -param-case@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz" - integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== - dependencies: - dot-case "^3.0.4" - tslib "^2.0.3" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-entities@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz" - integrity sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w== - dependencies: - "@types/unist" "^2.0.0" - character-entities "^2.0.0" - character-entities-legacy "^3.0.0" - character-reference-invalid "^2.0.0" - decode-named-character-reference "^1.0.0" - is-alphanumerical "^2.0.0" - is-decimal "^2.0.0" - is-hexadecimal "^2.0.0" - -parse-json@^5.0.0, parse-json@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - -parse-numeric-range@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz" - integrity sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ== - -parse5-htmlparser2-tree-adapter@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz" - integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g== - dependencies: - domhandler "^5.0.2" - parse5 "^7.0.0" - -parse5@^7.0.0: - version "7.1.2" - resolved "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz" - integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== - dependencies: - entities "^4.4.0" - -parseurl@~1.3.2, parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -pascal-case@^3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz" - integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" - integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-exists@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz" - integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-is-inside@1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz" - integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-to-regexp@^1.7.0: - version "1.8.0" - resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz" - integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== - dependencies: - isarray "0.0.1" - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" - integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== - -path-to-regexp@2.2.1: - version "2.2.1" - resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz" - integrity sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ== - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -periscopic@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz" - integrity sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw== - dependencies: - "@types/estree" "^1.0.0" - estree-walker "^3.0.0" - is-reference "^3.0.0" - -picocolors@^1.0.0, picocolors@^1.1.0: - version "1.1.1" - resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz" - integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pkg-dir@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz" - integrity sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA== - dependencies: - find-up "^6.3.0" - -pkg-up@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz" - integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== - dependencies: - find-up "^3.0.0" - -possible-typed-array-names@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz" - integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== - -postcss-calc@^9.0.1: - version "9.0.1" - resolved "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz" - integrity sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ== - dependencies: - postcss-selector-parser "^6.0.11" - postcss-value-parser "^4.2.0" - -postcss-colormin@^6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.1.0.tgz" - integrity sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw== - dependencies: - browserslist "^4.23.0" - caniuse-api "^3.0.0" - colord "^2.9.3" - postcss-value-parser "^4.2.0" - -postcss-convert-values@^6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz" - integrity sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w== - dependencies: - browserslist "^4.23.0" - postcss-value-parser "^4.2.0" - -postcss-discard-comments@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz" - integrity sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw== - -postcss-discard-duplicates@^6.0.3: - version "6.0.3" - resolved "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz" - integrity sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw== - -postcss-discard-empty@^6.0.3: - version "6.0.3" - resolved "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz" - integrity sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ== - -postcss-discard-overridden@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz" - integrity sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ== - -postcss-discard-unused@^6.0.5: - version "6.0.5" - resolved "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-6.0.5.tgz" - integrity sha512-wHalBlRHkaNnNwfC8z+ppX57VhvS+HWgjW508esjdaEYr3Mx7Gnn2xA4R/CKf5+Z9S5qsqC+Uzh4ueENWwCVUA== - dependencies: - postcss-selector-parser "^6.0.16" - -postcss-loader@^7.3.3: - version "7.3.4" - resolved "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.4.tgz" - integrity sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A== - dependencies: - cosmiconfig "^8.3.5" - jiti "^1.20.0" - semver "^7.5.4" - -postcss-merge-idents@^6.0.3: - version "6.0.3" - resolved "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-6.0.3.tgz" - integrity sha512-1oIoAsODUs6IHQZkLQGO15uGEbK3EAl5wi9SS8hs45VgsxQfMnxvt+L+zIr7ifZFIH14cfAeVe2uCTa+SPRa3g== - dependencies: - cssnano-utils "^4.0.2" - postcss-value-parser "^4.2.0" - -postcss-merge-longhand@^6.0.5: - version "6.0.5" - resolved "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz" - integrity sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w== - dependencies: - postcss-value-parser "^4.2.0" - stylehacks "^6.1.1" - -postcss-merge-rules@^6.1.1: - version "6.1.1" - resolved "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz" - integrity sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ== - dependencies: - browserslist "^4.23.0" - caniuse-api "^3.0.0" - cssnano-utils "^4.0.2" - postcss-selector-parser "^6.0.16" - -postcss-minify-font-values@^6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz" - integrity sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-minify-gradients@^6.0.3: - version "6.0.3" - resolved "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz" - integrity sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q== - dependencies: - colord "^2.9.3" - cssnano-utils "^4.0.2" - postcss-value-parser "^4.2.0" - -postcss-minify-params@^6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz" - integrity sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA== - dependencies: - browserslist "^4.23.0" - cssnano-utils "^4.0.2" - postcss-value-parser "^4.2.0" - -postcss-minify-selectors@^6.0.4: - version "6.0.4" - resolved "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz" - integrity sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ== - dependencies: - postcss-selector-parser "^6.0.16" - -postcss-modules-extract-imports@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz" - integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== - -postcss-modules-local-by-default@^4.0.4: - version "4.0.4" - resolved "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.4.tgz" - integrity sha512-L4QzMnOdVwRm1Qb8m4x8jsZzKAaPAgrUF1r/hjDR2Xj7R+8Zsf97jAlSQzWtKx5YNiNGN8QxmPFIc/sh+RQl+Q== - dependencies: - icss-utils "^5.0.0" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.1.0" - -postcss-modules-scope@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.1.1.tgz" - integrity sha512-uZgqzdTleelWjzJY+Fhti6F3C9iF1JR/dODLs/JDefozYcKTBCdD8BIl6nNPbTbcLnGrk56hzwZC2DaGNvYjzA== - dependencies: - postcss-selector-parser "^6.0.4" - -postcss-modules-values@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz" - integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== - dependencies: - icss-utils "^5.0.0" - -postcss-normalize-charset@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz" - integrity sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ== - -postcss-normalize-display-values@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz" - integrity sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-positions@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz" - integrity sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-repeat-style@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz" - integrity sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-string@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz" - integrity sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-timing-functions@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz" - integrity sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-unicode@^6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz" - integrity sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg== - dependencies: - browserslist "^4.23.0" - postcss-value-parser "^4.2.0" - -postcss-normalize-url@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz" - integrity sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-whitespace@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz" - integrity sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-ordered-values@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz" - integrity sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q== - dependencies: - cssnano-utils "^4.0.2" - postcss-value-parser "^4.2.0" - -postcss-reduce-idents@^6.0.3: - version "6.0.3" - resolved "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-6.0.3.tgz" - integrity sha512-G3yCqZDpsNPoQgbDUy3T0E6hqOQ5xigUtBQyrmq3tn2GxlyiL0yyl7H+T8ulQR6kOcHJ9t7/9H4/R2tv8tJbMA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-reduce-initial@^6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz" - integrity sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw== - dependencies: - browserslist "^4.23.0" - caniuse-api "^3.0.0" - -postcss-reduce-transforms@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz" - integrity sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.16: - version "6.1.0" - resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz" - integrity sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-selector-parser@^6.0.2: - version "6.0.15" - resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz" - integrity sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-selector-parser@^6.0.4: - version "6.0.15" - resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz" - integrity sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-sort-media-queries@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-5.2.0.tgz" - integrity sha512-AZ5fDMLD8SldlAYlvi8NIqo0+Z8xnXU2ia0jxmuhxAU+Lqt9K+AlmLNJ/zWEnE9x+Zx3qL3+1K20ATgNOr3fAA== - dependencies: - sort-css-media-queries "2.2.0" - -postcss-svgo@^6.0.3: - version "6.0.3" - resolved "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.3.tgz" - integrity sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g== - dependencies: - postcss-value-parser "^4.2.0" - svgo "^3.2.0" - -postcss-unique-selectors@^6.0.4: - version "6.0.4" - resolved "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz" - integrity sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg== - dependencies: - postcss-selector-parser "^6.0.16" - -postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" - integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== - -postcss-zindex@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-6.0.2.tgz" - integrity sha512-5BxW9l1evPB/4ZIc+2GobEBoKC+h8gPGCMi+jxsYvd2x0mjq7wazk6DrP71pStqxE9Foxh5TVnonbWpFZzXaYg== - -"postcss@^7.0.0 || ^8.0.1", postcss@^8.0.9, postcss@^8.1.0, postcss@^8.2.2, postcss@^8.4.21, postcss@^8.4.26, postcss@^8.4.31, postcss@^8.4.33: - version "8.4.35" - resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz" - integrity sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA== - dependencies: - nanoid "^3.3.7" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -postcss@^8.4.23, postcss@^8.4.38: - version "8.4.38" - resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz" - integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== - dependencies: - nanoid "^3.3.7" - picocolors "^1.0.0" - source-map-js "^1.2.0" - -postcss@^8.4.24: - version "8.4.38" - resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz" - integrity sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A== - dependencies: - nanoid "^3.3.7" - picocolors "^1.0.0" - source-map-js "^1.2.0" - -pretty-error@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz" - integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw== - dependencies: - lodash "^4.17.20" - renderkid "^3.0.0" - -pretty-time@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz" - integrity sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA== - -prism-react-renderer@^2.1.0, prism-react-renderer@^2.3.0: - version "2.3.1" - resolved "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.3.1.tgz" - integrity sha512-Rdf+HzBLR7KYjzpJ1rSoxT9ioO85nZngQEoFIhL07XhtJHlCU3SOz0GJ6+qvMyQe0Se+BV3qpe6Yd/NmQF5Juw== - dependencies: - "@types/prismjs" "^1.26.0" - clsx "^2.0.0" - -prismjs@^1.29.0: - version "1.29.0" - resolved "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz" - integrity sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q== - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -prompts@^2.4.2: - version "2.4.2" - resolved "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz" - integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" - -prop-types@^15.6.2, prop-types@^15.7.2: - version "15.8.1" - resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz" - integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.13.1" - -property-information@^6.0.0: - version "6.4.1" - resolved "https://registry.npmjs.org/property-information/-/property-information-6.4.1.tgz" - integrity sha512-OHYtXfu5aI2sS2LWFSN5rgJjrQ4pCy8i1jubJLe2QvMF8JJ++HXTUIVWFLfXJoaOfvYYjk2SN8J2wFUWIGXT4w== - -proto-list@~1.2.1: - version "1.2.4" - resolved "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz" - integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== - -proxy-addr@~2.0.7: - version "2.0.7" - resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - -punycode@^1.3.2: - version "1.4.1" - resolved "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz" - integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== - -punycode@^2.1.0, punycode@^2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" - integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== - -pupa@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/pupa/-/pupa-3.1.0.tgz" - integrity sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug== - dependencies: - escape-goat "^4.0.0" - -qs@6.11.0: - version "6.11.0" - resolved "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== - dependencies: - side-channel "^1.0.4" - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -queue@6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz" - integrity sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA== - dependencies: - inherits "~2.0.3" - -quick-lru@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz" - integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== - -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -range-parser@^1.2.1, range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -range-parser@1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz" - integrity sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A== - -raw-body@2.5.1: - version "2.5.1" - resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -rc@1.2.8: - version "1.2.8" - resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -react-dev-utils@^12.0.1: - version "12.0.1" - resolved "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz" - integrity sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ== - dependencies: - "@babel/code-frame" "^7.16.0" - address "^1.1.2" - browserslist "^4.18.1" - chalk "^4.1.2" - cross-spawn "^7.0.3" - detect-port-alt "^1.1.6" - escape-string-regexp "^4.0.0" - filesize "^8.0.6" - find-up "^5.0.0" - fork-ts-checker-webpack-plugin "^6.5.0" - global-modules "^2.0.0" - globby "^11.0.4" - gzip-size "^6.0.0" - immer "^9.0.7" - is-root "^2.1.0" - loader-utils "^3.2.0" - open "^8.4.0" - pkg-up "^3.1.0" - prompts "^2.4.2" - react-error-overlay "^6.0.11" - recursive-readdir "^2.2.2" - shell-quote "^1.7.3" - strip-ansi "^6.0.1" - text-table "^0.2.0" - -react-dom@*, "react-dom@^16.6.0 || ^17.0.0 || ^18.0.0", react-dom@^18.0.0, react-dom@^18.2.0, "react-dom@>= 16.8.0 < 19.0.0": - version "18.2.0" - resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz" - integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== - dependencies: - loose-envify "^1.1.0" - scheduler "^0.23.0" - -react-error-overlay@^6.0.11: - version "6.0.11" - resolved "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz" - integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg== - -react-fast-compare@^3.2.0, react-fast-compare@^3.2.2: - version "3.2.2" - resolved "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz" - integrity sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ== - -react-helmet-async@*: - version "2.0.4" - resolved "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-2.0.4.tgz" - integrity sha512-yxjQMWposw+akRfvpl5+8xejl4JtUlHnEBcji6u8/e6oc7ozT+P9PNTWMhCbz2y9tc5zPegw2BvKjQA+NwdEjQ== - dependencies: - invariant "^2.2.4" - react-fast-compare "^3.2.2" - shallowequal "^1.1.0" - -react-helmet-async@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz" - integrity sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg== - dependencies: - "@babel/runtime" "^7.12.5" - invariant "^2.2.4" - prop-types "^15.7.2" - react-fast-compare "^3.2.0" - shallowequal "^1.1.0" - -react-icons@^4.12.0: - version "4.12.0" - resolved "https://registry.npmjs.org/react-icons/-/react-icons-4.12.0.tgz" - integrity sha512-IBaDuHiShdZqmfc/TwHu6+d6k2ltNCf3AszxNmjJc1KUfXdEeRJOKyNvLmAHaarhzGmTSVygNdyu8/opXv2gaw== - -react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0: - version "16.13.1" - resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - -react-json-view-lite@^1.2.0: - version "1.2.1" - resolved "https://registry.npmjs.org/react-json-view-lite/-/react-json-view-lite-1.2.1.tgz" - integrity sha512-Itc0g86fytOmKZoIoJyGgvNqohWSbh3NXIKNgH6W6FT9PC1ck4xas1tT3Rr/b3UlFXyA9Jjaw9QSXdZy2JwGMQ== - -react-loadable-ssr-addon-v5-slorber@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz" - integrity sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A== - dependencies: - "@babel/runtime" "^7.10.3" - -react-loadable@*, "react-loadable@npm:@docusaurus/react-loadable@6.0.0": - version "6.0.0" - resolved "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-6.0.0.tgz" - integrity sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ== - dependencies: - "@types/react" "*" - -react-router-config@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz" - integrity sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg== - dependencies: - "@babel/runtime" "^7.1.2" - -react-router-dom@^5.3.4: - version "5.3.4" - resolved "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz" - integrity sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ== - dependencies: - "@babel/runtime" "^7.12.13" - history "^4.9.0" - loose-envify "^1.3.1" - prop-types "^15.6.2" - react-router "5.3.4" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" - -react-router@^5.3.4, react-router@>=5, react-router@5.3.4: - version "5.3.4" - resolved "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz" - integrity sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA== - dependencies: - "@babel/runtime" "^7.12.13" - history "^4.9.0" - hoist-non-react-statics "^3.1.0" - loose-envify "^1.3.1" - path-to-regexp "^1.7.0" - prop-types "^15.6.2" - react-is "^16.6.0" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" - -react@*, "react@^16.13.1 || ^17.0.0 || ^18.0.0", "react@^16.6.0 || ^17.0.0 || ^18.0.0", "react@^18 || ^19", react@^18.0.0, react@^18.2.0, "react@>= 16.8.0 < 19.0.0", react@>=15, react@>=16, react@>=16.0.0: - version "18.2.0" - resolved "https://registry.npmjs.org/react/-/react-18.2.0.tgz" - integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== - dependencies: - loose-envify "^1.1.0" - -readable-stream@^2.0.1: - version "2.3.8" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" - integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.0.6: - version "3.6.2" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -reading-time@^1.5.0: - version "1.5.0" - resolved "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz" - integrity sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg== - -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz" - integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== - dependencies: - resolve "^1.1.6" - -recursive-readdir@^2.2.2: - version "2.2.3" - resolved "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz" - integrity sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA== - dependencies: - minimatch "^3.0.5" - -regenerate-unicode-properties@^10.1.0: - version "10.1.1" - resolved "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz" - integrity sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q== - dependencies: - regenerate "^1.4.2" - -regenerate@^1.4.2: - version "1.4.2" - resolved "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz" - integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== - -regenerator-runtime@^0.14.0: - version "0.14.1" - resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz" - integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== - -regenerator-transform@^0.15.2: - version "0.15.2" - resolved "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz" - integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== - dependencies: - "@babel/runtime" "^7.8.4" - -regexpu-core@^5.3.1: - version "5.3.2" - resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz" - integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== - dependencies: - "@babel/regjsgen" "^0.8.0" - regenerate "^1.4.2" - regenerate-unicode-properties "^10.1.0" - regjsparser "^0.9.1" - unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.1.0" - -registry-auth-token@^5.0.1: - version "5.0.2" - resolved "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz" - integrity sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ== - dependencies: - "@pnpm/npm-conf" "^2.1.0" - -registry-url@^6.0.0: - version "6.0.1" - resolved "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz" - integrity sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q== - dependencies: - rc "1.2.8" - -regjsparser@^0.9.1: - version "0.9.1" - resolved "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz" - integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== - dependencies: - jsesc "~0.5.0" - -rehype-katex@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/rehype-katex/-/rehype-katex-7.0.1.tgz" - integrity sha512-OiM2wrZ/wuhKkigASodFoo8wimG3H12LWQaH8qSPVJn9apWKFSH3YOCtbKpBorTVw/eI7cuT21XBbvwEswbIOA== - dependencies: - "@types/hast" "^3.0.0" - "@types/katex" "^0.16.0" - hast-util-from-html-isomorphic "^2.0.0" - hast-util-to-text "^4.0.0" - katex "^0.16.0" - unist-util-visit-parents "^6.0.0" - vfile "^6.0.0" - -rehype-minify-whitespace@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/rehype-minify-whitespace/-/rehype-minify-whitespace-6.0.0.tgz" - integrity sha512-i9It4YHR0Sf3GsnlR5jFUKXRr9oayvEk9GKQUkwZv6hs70OH9q3OCZrq9PpLvIGKt3W+JxBOxCidNVpH/6rWdA== - dependencies: - "@types/hast" "^3.0.0" - hast-util-embedded "^3.0.0" - hast-util-is-element "^3.0.0" - hast-util-whitespace "^3.0.0" - unist-util-is "^6.0.0" - -rehype-raw@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz" - integrity sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww== - dependencies: - "@types/hast" "^3.0.0" - hast-util-raw "^9.0.0" - vfile "^6.0.0" - -relateurl@^0.2.7: - version "0.2.7" - resolved "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz" - integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== - -remark-definition-list@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/remark-definition-list/-/remark-definition-list-2.0.0.tgz" - integrity sha512-OOJ0zUrfUGITUNxOBnsipyFUjqq1m4AgYOqQk10jDXyz+RoODJL3qYvRn8qzYQDzRnz1wlCP3dbDEOpl05LlQw== - dependencies: - hast-util-definition-list "^2.0.0" - mdast-util-definition-list "^2.0.0" - micromark-extension-definition-list "^2.0.0" - -remark-directive@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/remark-directive/-/remark-directive-3.0.0.tgz" - integrity sha512-l1UyWJ6Eg1VPU7Hm/9tt0zKtReJQNOA4+iDMAxTyZNWnJnFlbS/7zhiel/rogTLQ2vMYwDzSJa4BiVNqGlqIMA== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-directive "^3.0.0" - micromark-extension-directive "^3.0.0" - unified "^11.0.0" - -remark-emoji@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/remark-emoji/-/remark-emoji-4.0.1.tgz" - integrity sha512-fHdvsTR1dHkWKev9eNyhTo4EFwbUvJ8ka9SgeWkMPYFX4WoI7ViVBms3PjlQYgw5TLvNQso3GUB/b/8t3yo+dg== - dependencies: - "@types/mdast" "^4.0.2" - emoticon "^4.0.1" - mdast-util-find-and-replace "^3.0.1" - node-emoji "^2.1.0" - unified "^11.0.4" - -remark-frontmatter@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-5.0.0.tgz" - integrity sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-frontmatter "^2.0.0" - micromark-extension-frontmatter "^2.0.0" - unified "^11.0.0" - -remark-gfm@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.0.tgz" - integrity sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-gfm "^3.0.0" - micromark-extension-gfm "^3.0.0" - remark-parse "^11.0.0" - remark-stringify "^11.0.0" - unified "^11.0.0" - -remark-math@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/remark-math/-/remark-math-6.0.0.tgz" - integrity sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-math "^3.0.0" - micromark-extension-math "^3.0.0" - unified "^11.0.0" - -remark-mdx@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.0.1.tgz" - integrity sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA== - dependencies: - mdast-util-mdx "^3.0.0" - micromark-extension-mdxjs "^3.0.0" - -remark-parse@^11.0.0: - version "11.0.0" - resolved "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz" - integrity sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-from-markdown "^2.0.0" - micromark-util-types "^2.0.0" - unified "^11.0.0" - -remark-rehype@^11.0.0: - version "11.1.0" - resolved "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.0.tgz" - integrity sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g== - dependencies: - "@types/hast" "^3.0.0" - "@types/mdast" "^4.0.0" - mdast-util-to-hast "^13.0.0" - unified "^11.0.0" - vfile "^6.0.0" - -remark-stringify@^11.0.0: - version "11.0.0" - resolved "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz" - integrity sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw== - dependencies: - "@types/mdast" "^4.0.0" - mdast-util-to-markdown "^2.0.0" - unified "^11.0.0" - -renderkid@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz" - integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg== - dependencies: - css-select "^4.1.3" - dom-converter "^0.2.0" - htmlparser2 "^6.1.0" - lodash "^4.17.21" - strip-ansi "^6.0.1" - -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -"require-like@>= 0.1.1": - version "0.1.2" - resolved "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz" - integrity sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A== - -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" - integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== - -resolve-alpn@^1.2.0: - version "1.2.1" - resolved "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz" - integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-pathname@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz" - integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== - -resolve@^1.1.6, resolve@^1.14.2: - version "1.22.8" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz" - integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -responselike@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz" - integrity sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg== - dependencies: - lowercase-keys "^3.0.0" - -retry@^0.13.1: - version "0.13.1" - resolved "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz" - integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -rtl-detect@^1.0.4: - version "1.1.2" - resolved "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.1.2.tgz" - integrity sha512-PGMBq03+TTG/p/cRB7HCLKJ1MgDIi07+QU1faSjiYRfmY5UsAttV9Hs08jDAHVwcOwmVLcSJkpwyfXszVjWfIQ== - -rtlcss@^4.1.0: - version "4.1.1" - resolved "https://registry.npmjs.org/rtlcss/-/rtlcss-4.1.1.tgz" - integrity sha512-/oVHgBtnPNcggP2aVXQjSy6N1mMAfHg4GSag0QtZBlD5bdDgAHwr4pydqJGd+SUCu9260+Pjqbjwtvu7EMH1KQ== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - postcss "^8.4.21" - strip-json-comments "^3.1.1" - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -safe-buffer@^5.1.0, safe-buffer@>=5.1.0, safe-buffer@~5.2.0, safe-buffer@5.2.1: - version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -"safer-buffer@>= 2.1.2 < 3": - version "2.1.2" - resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sax@^1.2.4: - version "1.3.0" - resolved "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz" - integrity sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA== - -scheduler@^0.23.0: - version "0.23.0" - resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz" - integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== - dependencies: - loose-envify "^1.1.0" - -schema-utils@^3.0.0: - version "3.3.0" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz" - integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== - dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -schema-utils@^3.1.1: - version "3.3.0" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz" - integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== - dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -schema-utils@^3.2.0: - version "3.3.0" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz" - integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== - dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -schema-utils@^4.0.0, schema-utils@^4.0.1: - version "4.2.0" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz" - integrity sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw== - dependencies: - "@types/json-schema" "^7.0.9" - ajv "^8.9.0" - ajv-formats "^2.1.1" - ajv-keywords "^5.1.0" - -schema-utils@2.7.0: - version "2.7.0" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz" - integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== - dependencies: - "@types/json-schema" "^7.0.4" - ajv "^6.12.2" - ajv-keywords "^3.4.1" - -"search-insights@>= 1 < 3": - version "2.17.3" - resolved "https://registry.npmjs.org/search-insights/-/search-insights-2.17.3.tgz" - integrity sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ== - -section-matter@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz" - integrity sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA== - dependencies: - extend-shallow "^2.0.1" - kind-of "^6.0.0" - -select-hose@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz" - integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== - -selfsigned@^2.1.1: - version "2.4.1" - resolved "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz" - integrity sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q== - dependencies: - "@types/node-forge" "^1.3.0" - node-forge "^1" - -semver-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz" - integrity sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA== - dependencies: - semver "^7.3.5" - -semver@^6.3.1: - version "6.3.1" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^7.3.2: - version "7.6.0" - resolved "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz" - integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== - dependencies: - lru-cache "^6.0.0" - -semver@^7.3.5: - version "7.6.0" - resolved "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz" - integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== - dependencies: - lru-cache "^6.0.0" - -semver@^7.3.7: - version "7.6.0" - resolved "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz" - integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== - dependencies: - lru-cache "^6.0.0" - -semver@^7.5.4: - version "7.6.0" - resolved "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz" - integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== - dependencies: - lru-cache "^6.0.0" - -send@0.18.0: - version "0.18.0" - resolved "https://registry.npmjs.org/send/-/send-0.18.0.tgz" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== - dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" - mime "1.6.0" - ms "2.1.3" - on-finished "2.4.1" - range-parser "~1.2.1" - statuses "2.0.1" - -serialize-javascript@^6.0.0, serialize-javascript@^6.0.1: - version "6.0.2" - resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz" - integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== - dependencies: - randombytes "^2.1.0" - -serve-handler@^6.1.5: - version "6.1.5" - resolved "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.5.tgz" - integrity sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg== - dependencies: - bytes "3.0.0" - content-disposition "0.5.2" - fast-url-parser "1.1.3" - mime-types "2.1.18" - minimatch "3.1.2" - path-is-inside "1.0.2" - path-to-regexp "2.2.1" - range-parser "1.2.0" - -serve-index@^1.9.1: - version "1.9.1" - resolved "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz" - integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== - dependencies: - accepts "~1.3.4" - batch "0.6.1" - debug "2.6.9" - escape-html "~1.0.3" - http-errors "~1.6.2" - mime-types "~2.1.17" - parseurl "~1.3.2" - -serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.18.0" - -server-only@^0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/server-only/-/server-only-0.0.1.tgz" - integrity sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA== - -set-function-length@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz" - integrity sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g== - dependencies: - define-data-property "^1.1.2" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.3" - gopd "^1.0.1" - has-property-descriptors "^1.0.1" - -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz" - integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -shallow-clone@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz" - integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== - dependencies: - kind-of "^6.0.2" - -shallowequal@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz" - integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shell-quote@^1.7.3, shell-quote@^1.8.1: - version "1.8.1" - resolved "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz" - integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== - -shelljs@^0.8.5: - version "0.8.5" - resolved "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz" - integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - -side-channel@^1.0.4: - version "1.0.5" - resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz" - integrity sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ== - dependencies: - call-bind "^1.0.6" - es-errors "^1.3.0" - get-intrinsic "^1.2.4" - object-inspect "^1.13.1" - -signal-exit@^3.0.2, signal-exit@^3.0.3: - version "3.0.7" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -sirv@^2.0.3: - version "2.0.4" - resolved "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz" - integrity sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ== - dependencies: - "@polka/url" "^1.0.0-next.24" - mrmime "^2.0.0" - totalist "^3.0.0" - -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== - -sitemap@^7.1.1: - version "7.1.1" - resolved "https://registry.npmjs.org/sitemap/-/sitemap-7.1.1.tgz" - integrity sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg== - dependencies: - "@types/node" "^17.0.5" - "@types/sax" "^1.2.1" - arg "^5.0.0" - sax "^1.2.4" - -skin-tone@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/skin-tone/-/skin-tone-2.0.0.tgz" - integrity sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA== - dependencies: - unicode-emoji-modifier-base "^1.0.0" - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slash@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz" - integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== - -snake-case@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz" - integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg== - dependencies: - dot-case "^3.0.4" - tslib "^2.0.3" - -sockjs@^0.3.24: - version "0.3.24" - resolved "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz" - integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== - dependencies: - faye-websocket "^0.11.3" - uuid "^8.3.2" - websocket-driver "^0.7.4" - -sort-css-media-queries@2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.2.0.tgz" - integrity sha512-0xtkGhWCC9MGt/EzgnvbbbKhqWjl1+/rncmhTh5qCpbYguXh6S/qwePfv/JQ8jePXXmqingylxoC49pCkSPIbA== - -source-map-js@^1.0.1, source-map-js@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz" - integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== - -source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== - -source-map-support@~0.5.20: - version "0.5.21" - resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0: - version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -source-map@^0.7.0: - version "0.7.4" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz" - integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== - -space-separated-tokens@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz" - integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q== - -spdy-transport@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz" - integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== - dependencies: - debug "^4.1.0" - detect-node "^2.0.4" - hpack.js "^2.1.6" - obuf "^1.1.2" - readable-stream "^3.0.6" - wbuf "^1.7.3" - -spdy@^4.0.2: - version "4.0.2" - resolved "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz" - integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== - dependencies: - debug "^4.1.0" - handle-thing "^2.0.0" - http-deceiver "^1.2.7" - select-hose "^2.0.0" - spdy-transport "^3.0.0" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - -srcset@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/srcset/-/srcset-4.0.0.tgz" - integrity sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw== - -stable@^0.1.8: - version "0.1.8" - resolved "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz" - integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== - -"statuses@>= 1.4.0 < 2": - version "1.5.0" - resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" - integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== - -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -std-env@^3.0.1: - version "3.7.0" - resolved "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz" - integrity sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg== - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -string-width@^4.1.0: - version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^4.2.0: - version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^5.0.1, string-width@^5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - -stringify-entities@^4.0.0: - version "4.0.3" - resolved "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.3.tgz" - integrity sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g== - dependencies: - character-entities-html4 "^2.0.0" - character-entities-legacy "^3.0.0" - -stringify-object@^3.3.0: - version "3.3.0" - resolved "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz" - integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== - dependencies: - get-own-enumerable-property-symbols "^3.0.0" - is-obj "^1.0.1" - is-regexp "^1.0.0" - -strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^7.0.1: - version "7.1.0" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz" - integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== - dependencies: - ansi-regex "^6.0.1" - -strip-bom-string@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz" - integrity sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g== - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" - integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== - -style-to-object@^0.4.0: - version "0.4.4" - resolved "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.4.tgz" - integrity sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg== - dependencies: - inline-style-parser "0.1.1" - -style-to-object@^1.0.0: - version "1.0.5" - resolved "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.5.tgz" - integrity sha512-rDRwHtoDD3UMMrmZ6BzOW0naTjMsVZLIjsGleSKS/0Oz+cgCfAPRspaqJuE8rDzpKha/nEvnM0IF4seEAZUTKQ== - dependencies: - inline-style-parser "0.2.2" - -stylehacks@^6.1.1: - version "6.1.1" - resolved "https://registry.npmjs.org/stylehacks/-/stylehacks-6.1.1.tgz" - integrity sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg== - dependencies: - browserslist "^4.23.0" - postcss-selector-parser "^6.0.16" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -svg-parser@^2.0.4: - version "2.0.4" - resolved "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz" - integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== - -svgo@^2.8.0: - version "2.8.0" - resolved "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz" - integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== - dependencies: - "@trysound/sax" "0.2.0" - commander "^7.2.0" - css-select "^4.1.3" - css-tree "^1.1.3" - csso "^4.2.0" - picocolors "^1.0.0" - stable "^0.1.8" - -svgo@^3.0.2, svgo@^3.2.0: - version "3.3.2" - resolved "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz" - integrity sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw== - dependencies: - "@trysound/sax" "0.2.0" - commander "^7.2.0" - css-select "^5.1.0" - css-tree "^2.3.1" - css-what "^6.1.0" - csso "^5.0.5" - picocolors "^1.0.0" - -tapable@^1.0.0: - version "1.1.3" - resolved "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz" - integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== - -tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0, tapable@^2.2.1: - version "2.2.1" - resolved "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz" - integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== - -terser-webpack-plugin@^5.3.10, terser-webpack-plugin@^5.3.9: - version "5.3.10" - resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz" - integrity sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w== - dependencies: - "@jridgewell/trace-mapping" "^0.3.20" - jest-worker "^27.4.5" - schema-utils "^3.1.1" - serialize-javascript "^6.0.1" - terser "^5.26.0" - -terser@^5.10.0, terser@^5.15.1, terser@^5.26.0: - version "5.27.2" - resolved "https://registry.npmjs.org/terser/-/terser-5.27.2.tgz" - integrity sha512-sHXmLSkImesJ4p5apTeT63DsV4Obe1s37qT8qvwHRmVxKTBH7Rv9Wr26VcAMmLbmk9UliiwK8z+657NyJHHy/w== - dependencies: - "@jridgewell/source-map" "^0.3.3" - acorn "^8.8.2" - commander "^2.20.0" - source-map-support "~0.5.20" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - -thunky@^1.0.2: - version "1.1.0" - resolved "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz" - integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== - -tiny-invariant@^1.0.2: - version "1.3.1" - resolved "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz" - integrity sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw== - -tiny-warning@^1.0.0: - version "1.0.3" - resolved "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz" - integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -totalist@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz" - integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ== - -trim-lines@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz" - integrity sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg== - -trim-trailing-lines@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-2.1.0.tgz" - integrity sha512-5UR5Biq4VlVOtzqkm2AZlgvSlDJtME46uV0br0gENbwN4l5+mMKT4b9gJKqWtuL2zAIqajGJGuvbCbcAJUZqBg== - -trough@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz" - integrity sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw== - -ts-dedent@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz" - integrity sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ== - -tslib@^2.0.3, tslib@^2.6.0: - version "2.6.2" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - -type-fest@^1.0.1: - version "1.4.0" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz" - integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== - -type-fest@^2.13.0, type-fest@^2.5.0: - version "2.19.0" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz" - integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== - -type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -"typescript@>= 2.7", typescript@>=4.9.5, typescript@~5.2.2: - version "5.2.2" - resolved "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz" - integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== - -undici-types@~5.26.4: - version "5.26.5" - resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz" - integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== - -unicode-canonical-property-names-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz" - integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== - -unicode-emoji-modifier-base@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz" - integrity sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g== - -unicode-match-property-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz" - integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== - dependencies: - unicode-canonical-property-names-ecmascript "^2.0.0" - unicode-property-aliases-ecmascript "^2.0.0" - -unicode-match-property-value-ecmascript@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz" - integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== - -unicode-property-aliases-ecmascript@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz" - integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== - -unified@^11.0.0, unified@^11.0.3, unified@^11.0.4: - version "11.0.4" - resolved "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz" - integrity sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ== - dependencies: - "@types/unist" "^3.0.0" - bail "^2.0.0" - devlop "^1.0.0" - extend "^3.0.0" - is-plain-obj "^4.0.0" - trough "^2.0.0" - vfile "^6.0.0" - -unique-string@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz" - integrity sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ== - dependencies: - crypto-random-string "^4.0.0" - -unist-builder@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/unist-builder/-/unist-builder-4.0.0.tgz" - integrity sha512-wmRFnH+BLpZnTKpc5L7O67Kac89s9HMrtELpnNaE6TAobq5DTZZs5YaTQfAZBA9bFPECx2uVAPO31c+GVug8mg== - dependencies: - "@types/unist" "^3.0.0" - -unist-util-find-after@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz" - integrity sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ== - dependencies: - "@types/unist" "^3.0.0" - unist-util-is "^6.0.0" - -unist-util-is@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz" - integrity sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw== - dependencies: - "@types/unist" "^3.0.0" - -unist-util-position-from-estree@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz" - integrity sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ== - dependencies: - "@types/unist" "^3.0.0" - -unist-util-position@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz" - integrity sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA== - dependencies: - "@types/unist" "^3.0.0" - -unist-util-remove-position@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz" - integrity sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q== - dependencies: - "@types/unist" "^3.0.0" - unist-util-visit "^5.0.0" - -unist-util-stringify-position@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz" - integrity sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ== - dependencies: - "@types/unist" "^3.0.0" - -unist-util-visit-parents@^6.0.0: - version "6.0.1" - resolved "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz" - integrity sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw== - dependencies: - "@types/unist" "^3.0.0" - unist-util-is "^6.0.0" - -unist-util-visit@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz" - integrity sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg== - dependencies: - "@types/unist" "^3.0.0" - unist-util-is "^6.0.0" - unist-util-visit-parents "^6.0.0" - -universalify@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz" - integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== - -unpipe@~1.0.0, unpipe@1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" - integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== - -update-browserslist-db@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz" - integrity sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A== - dependencies: - escalade "^3.2.0" - picocolors "^1.1.0" - -update-notifier@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/update-notifier/-/update-notifier-6.0.2.tgz" - integrity sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og== - dependencies: - boxen "^7.0.0" - chalk "^5.0.1" - configstore "^6.0.0" - has-yarn "^3.0.0" - import-lazy "^4.0.0" - is-ci "^3.0.1" - is-installed-globally "^0.4.0" - is-npm "^6.0.0" - is-yarn-global "^0.4.0" - latest-version "^7.0.0" - pupa "^3.1.0" - semver "^7.3.7" - semver-diff "^4.0.0" - xdg-basedir "^5.1.0" - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -url-loader@^4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz" - integrity sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA== - dependencies: - loader-utils "^2.0.0" - mime-types "^2.1.27" - schema-utils "^3.0.0" - -util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -util@^0.12.5: - version "0.12.5" - resolved "https://registry.npmjs.org/util/-/util-0.12.5.tgz" - integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== - dependencies: - inherits "^2.0.3" - is-arguments "^1.0.4" - is-generator-function "^1.0.7" - is-typed-array "^1.1.3" - which-typed-array "^1.1.2" - -utila@~0.4: - version "0.4.0" - resolved "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz" - integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== - -utility-types@^3.10.0: - version "3.11.0" - resolved "https://registry.npmjs.org/utility-types/-/utility-types-3.11.0.tgz" - integrity sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw== - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" - integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== - -uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -value-equal@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz" - integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== - -vfile-location@^5.0.0: - version "5.0.2" - resolved "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.2.tgz" - integrity sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg== - dependencies: - "@types/unist" "^3.0.0" - vfile "^6.0.0" - -vfile-message@^4.0.0: - version "4.0.2" - resolved "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz" - integrity sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw== - dependencies: - "@types/unist" "^3.0.0" - unist-util-stringify-position "^4.0.0" - -vfile@^6.0.0, vfile@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz" - integrity sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw== - dependencies: - "@types/unist" "^3.0.0" - unist-util-stringify-position "^4.0.0" - vfile-message "^4.0.0" - -watchpack@^2.4.0: - version "2.4.0" - resolved "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz" - integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== - dependencies: - glob-to-regexp "^0.4.1" - graceful-fs "^4.1.2" - -wbuf@^1.1.0, wbuf@^1.7.3: - version "1.7.3" - resolved "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz" - integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== - dependencies: - minimalistic-assert "^1.0.0" - -web-namespaces@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz" - integrity sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ== - -webpack-bundle-analyzer@^4.9.0: - version "4.10.1" - resolved "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.1.tgz" - integrity sha512-s3P7pgexgT/HTUSYgxJyn28A+99mmLq4HsJepMPzu0R8ImJc52QNqaFYW1Z2z2uIb1/J3eYgaAWVpaC+v/1aAQ== - dependencies: - "@discoveryjs/json-ext" "0.5.7" - acorn "^8.0.4" - acorn-walk "^8.0.0" - commander "^7.2.0" - debounce "^1.2.1" - escape-string-regexp "^4.0.0" - gzip-size "^6.0.0" - html-escaper "^2.0.2" - is-plain-object "^5.0.0" - opener "^1.5.2" - picocolors "^1.0.0" - sirv "^2.0.3" - ws "^7.3.1" - -webpack-dev-middleware@^5.3.1: - version "5.3.3" - resolved "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz" - integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA== - dependencies: - colorette "^2.0.10" - memfs "^3.4.3" - mime-types "^2.1.31" - range-parser "^1.2.1" - schema-utils "^4.0.0" - -webpack-dev-server@^4.15.1: - version "4.15.1" - resolved "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz" - integrity sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA== - dependencies: - "@types/bonjour" "^3.5.9" - "@types/connect-history-api-fallback" "^1.3.5" - "@types/express" "^4.17.13" - "@types/serve-index" "^1.9.1" - "@types/serve-static" "^1.13.10" - "@types/sockjs" "^0.3.33" - "@types/ws" "^8.5.5" - ansi-html-community "^0.0.8" - bonjour-service "^1.0.11" - chokidar "^3.5.3" - colorette "^2.0.10" - compression "^1.7.4" - connect-history-api-fallback "^2.0.0" - default-gateway "^6.0.3" - express "^4.17.3" - graceful-fs "^4.2.6" - html-entities "^2.3.2" - http-proxy-middleware "^2.0.3" - ipaddr.js "^2.0.1" - launch-editor "^2.6.0" - open "^8.0.9" - p-retry "^4.5.0" - rimraf "^3.0.2" - schema-utils "^4.0.0" - selfsigned "^2.1.1" - serve-index "^1.9.1" - sockjs "^0.3.24" - spdy "^4.0.2" - webpack-dev-middleware "^5.3.1" - ws "^8.13.0" - -webpack-merge@^5.9.0: - version "5.10.0" - resolved "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz" - integrity sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA== - dependencies: - clone-deep "^4.0.1" - flat "^5.0.2" - wildcard "^2.0.0" - -webpack-sources@^3.2.3: - version "3.2.3" - resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz" - integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== - -"webpack@^4.0.0 || ^5.0.0", "webpack@^4.37.0 || ^5.0.0", webpack@^5.0.0, webpack@^5.1.0, webpack@^5.20.0, webpack@^5.88.1, "webpack@>= 4", "webpack@>=4.41.1 || 5.x", webpack@>=5, "webpack@3 || 4 || 5": - version "5.90.3" - resolved "https://registry.npmjs.org/webpack/-/webpack-5.90.3.tgz" - integrity sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA== - dependencies: - "@types/eslint-scope" "^3.7.3" - "@types/estree" "^1.0.5" - "@webassemblyjs/ast" "^1.11.5" - "@webassemblyjs/wasm-edit" "^1.11.5" - "@webassemblyjs/wasm-parser" "^1.11.5" - acorn "^8.7.1" - acorn-import-assertions "^1.9.0" - browserslist "^4.21.10" - chrome-trace-event "^1.0.2" - enhanced-resolve "^5.15.0" - es-module-lexer "^1.2.1" - eslint-scope "5.1.1" - events "^3.2.0" - glob-to-regexp "^0.4.1" - graceful-fs "^4.2.9" - json-parse-even-better-errors "^2.3.1" - loader-runner "^4.2.0" - mime-types "^2.1.27" - neo-async "^2.6.2" - schema-utils "^3.2.0" - tapable "^2.1.1" - terser-webpack-plugin "^5.3.10" - watchpack "^2.4.0" - webpack-sources "^3.2.3" - -webpackbar@^5.0.2: - version "5.0.2" - resolved "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.2.tgz" - integrity sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ== - dependencies: - chalk "^4.1.0" - consola "^2.15.3" - pretty-time "^1.1.0" - std-env "^3.0.1" - -websocket-driver@^0.7.4, websocket-driver@>=0.5.1: - version "0.7.4" - resolved "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz" - integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== - dependencies: - http-parser-js ">=0.5.1" - safe-buffer ">=5.1.0" - websocket-extensions ">=0.1.1" - -websocket-extensions@>=0.1.1: - version "0.1.4" - resolved "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz" - integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== - -which-typed-array@^1.1.14, which-typed-array@^1.1.2: - version "1.1.14" - resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz" - integrity sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg== - dependencies: - available-typed-arrays "^1.0.6" - call-bind "^1.0.5" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.1" - -which@^1.3.1: - version "1.3.1" - resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -widest-line@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz" - integrity sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig== - dependencies: - string-width "^5.0.1" - -wildcard@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz" - integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== - -wrap-ansi@^8.0.1, wrap-ansi@^8.1.0: - version "8.1.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz" - integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== - dependencies: - ansi-styles "^6.1.0" - string-width "^5.0.1" - strip-ansi "^7.0.1" - -wrappy@1: - version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -write-file-atomic@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -ws@^7.3.1: - version "7.5.9" - resolved "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== - -ws@^8.13.0: - version "8.16.0" - resolved "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz" - integrity sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ== - -xdg-basedir@^5.0.1, xdg-basedir@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz" - integrity sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ== - -xml-js@^1.6.11: - version "1.6.11" - resolved "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz" - integrity sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g== - dependencies: - sax "^1.2.4" - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml@^1.10.0, yaml@^1.7.2: - version "1.10.2" - resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== - -yocto-queue@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz" - integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== - -zwitch@^2.0.0, zwitch@^2.0.4: - version "2.0.4" - resolved "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz" - integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A== +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 8 + cacheKey: 10c0 + +"@algolia/autocomplete-core@npm:1.17.9": + version: 1.17.9 + resolution: "@algolia/autocomplete-core@npm:1.17.9" + dependencies: + "@algolia/autocomplete-plugin-algolia-insights": "npm:1.17.9" + "@algolia/autocomplete-shared": "npm:1.17.9" + checksum: 10c0/e1111769a8723b9dd45fc38cd7edc535c86c1f908b84b5fdc5de06ba6b8c7aca14e5f52ebce84fa5f7adf857332e396b93b7e7933b157b2c9aefc0a19d9574ab + languageName: node + linkType: hard + +"@algolia/autocomplete-plugin-algolia-insights@npm:1.17.9": + version: 1.17.9 + resolution: "@algolia/autocomplete-plugin-algolia-insights@npm:1.17.9" + dependencies: + "@algolia/autocomplete-shared": "npm:1.17.9" + peerDependencies: + search-insights: ">= 1 < 3" + checksum: 10c0/05c21502631643abdcd6e9f70b5814a60d34bad59bca501e26e030fd72e689be5cecfb6e8939a0a1bdcb2394591e55e26a42a82c7247528eafeff714db0819a4 + languageName: node + linkType: hard + +"@algolia/autocomplete-preset-algolia@npm:1.17.9": + version: 1.17.9 + resolution: "@algolia/autocomplete-preset-algolia@npm:1.17.9" + dependencies: + "@algolia/autocomplete-shared": "npm:1.17.9" + peerDependencies: + "@algolia/client-search": ">= 4.9.1 < 6" + algoliasearch: ">= 4.9.1 < 6" + checksum: 10c0/99159c7e02a927d0d96717cb4cfd2f8dbc4da73267a8eae4f83af5bf74087089f6e7dbffd316512e713a4cc534e936b6a7ccb5c4a5ff84b4bf73f2d3cc050e79 + languageName: node + linkType: hard + +"@algolia/autocomplete-shared@npm:1.17.9": + version: 1.17.9 + resolution: "@algolia/autocomplete-shared@npm:1.17.9" + peerDependencies: + "@algolia/client-search": ">= 4.9.1 < 6" + algoliasearch: ">= 4.9.1 < 6" + checksum: 10c0/b318281aecdaae09171b47ee4f7bc66b613852cad4506e9d6278fff35ba68a12dd9cce2d90b5f4c3ba0e3d7d780583cbe46b22275260e41bbf09fb01e4a18f49 + languageName: node + linkType: hard + +"@algolia/client-abtesting@npm:5.25.0": + version: 5.25.0 + resolution: "@algolia/client-abtesting@npm:5.25.0" + dependencies: + "@algolia/client-common": "npm:5.25.0" + "@algolia/requester-browser-xhr": "npm:5.25.0" + "@algolia/requester-fetch": "npm:5.25.0" + "@algolia/requester-node-http": "npm:5.25.0" + checksum: 10c0/614044c066e34cbc41b74a2242c3b0a08e952e96f90e0f2afbcd04711cf29fa88dea211f15bcef162bfd15b3f27555641bff229618cdf45bb83fe7c48100a7bf + languageName: node + linkType: hard + +"@algolia/client-analytics@npm:5.25.0": + version: 5.25.0 + resolution: "@algolia/client-analytics@npm:5.25.0" + dependencies: + "@algolia/client-common": "npm:5.25.0" + "@algolia/requester-browser-xhr": "npm:5.25.0" + "@algolia/requester-fetch": "npm:5.25.0" + "@algolia/requester-node-http": "npm:5.25.0" + checksum: 10c0/76068a9558df85c469c77a8facd10927800c347363b1b73e43fbecc3e2de9d1404e0c3769c1e2d7e4670f0b435c819f239f5399d81728a9d735b72f9a1a9df53 + languageName: node + linkType: hard + +"@algolia/client-common@npm:5.25.0": + version: 5.25.0 + resolution: "@algolia/client-common@npm:5.25.0" + checksum: 10c0/e75370c9e5353badcd322db3b573a1f1cad1dbe5e576552e940c3db848778cd0849a028894da3f08dc551e3a53d1613239bc8cb06eef6dd4734e93ce5f49a895 + languageName: node + linkType: hard + +"@algolia/client-insights@npm:5.25.0": + version: 5.25.0 + resolution: "@algolia/client-insights@npm:5.25.0" + dependencies: + "@algolia/client-common": "npm:5.25.0" + "@algolia/requester-browser-xhr": "npm:5.25.0" + "@algolia/requester-fetch": "npm:5.25.0" + "@algolia/requester-node-http": "npm:5.25.0" + checksum: 10c0/8bbabcf7a86a649932b56525843d2b431c89077576e939832152859be398e9bf31a54b6c1565086b9e66deef045216d85adac8edcf538ebc9bcefc80f1a9711d + languageName: node + linkType: hard + +"@algolia/client-personalization@npm:5.25.0": + version: 5.25.0 + resolution: "@algolia/client-personalization@npm:5.25.0" + dependencies: + "@algolia/client-common": "npm:5.25.0" + "@algolia/requester-browser-xhr": "npm:5.25.0" + "@algolia/requester-fetch": "npm:5.25.0" + "@algolia/requester-node-http": "npm:5.25.0" + checksum: 10c0/0d937519adbf0231e985718e32e7b0e54d15d30a01bd0491c357eb937a4ebb44a6b8024de736cb1da5919ca23e10a6dbb1bdda06ed46848e15d1bb3a9533f0fc + languageName: node + linkType: hard + +"@algolia/client-query-suggestions@npm:5.25.0": + version: 5.25.0 + resolution: "@algolia/client-query-suggestions@npm:5.25.0" + dependencies: + "@algolia/client-common": "npm:5.25.0" + "@algolia/requester-browser-xhr": "npm:5.25.0" + "@algolia/requester-fetch": "npm:5.25.0" + "@algolia/requester-node-http": "npm:5.25.0" + checksum: 10c0/84f327d0bd98c2da8b37d3c51712baa794d44e78fd7e60f372899b882ac4d02e1836df27ed397dcb3deede820c7a8f20d1c043378166baaf1f855c89551cc5fd + languageName: node + linkType: hard + +"@algolia/client-search@npm:5.25.0": + version: 5.25.0 + resolution: "@algolia/client-search@npm:5.25.0" + dependencies: + "@algolia/client-common": "npm:5.25.0" + "@algolia/requester-browser-xhr": "npm:5.25.0" + "@algolia/requester-fetch": "npm:5.25.0" + "@algolia/requester-node-http": "npm:5.25.0" + checksum: 10c0/5a09f4e66aa802ec7a292595f8d08dcd7de12683d0ddde1feb640062011dbd8bd8b521627f7c904e27e0f3e80ad8a451e58e0bc790b0f2e4faf4e55dfe2df297 + languageName: node + linkType: hard + +"@algolia/events@npm:^4.0.1": + version: 4.0.1 + resolution: "@algolia/events@npm:4.0.1" + checksum: 10c0/f398d815c6ed21ac08f6caadf1e9155add74ac05d99430191c3b1f1335fd91deaf468c6b304e6225c9885d3d44c06037c53def101e33d9c22daff175b2a65ca9 + languageName: node + linkType: hard + +"@algolia/ingestion@npm:1.25.0": + version: 1.25.0 + resolution: "@algolia/ingestion@npm:1.25.0" + dependencies: + "@algolia/client-common": "npm:5.25.0" + "@algolia/requester-browser-xhr": "npm:5.25.0" + "@algolia/requester-fetch": "npm:5.25.0" + "@algolia/requester-node-http": "npm:5.25.0" + checksum: 10c0/6c2ffddaabfa62a87c45917ddd311d12adca1263de22be4c9023e7d526cc43c2a6fe1a5ea28f46a118762bd8a143bba903aded9ba3c70953e6f6af67e6b9e12f + languageName: node + linkType: hard + +"@algolia/monitoring@npm:1.25.0": + version: 1.25.0 + resolution: "@algolia/monitoring@npm:1.25.0" + dependencies: + "@algolia/client-common": "npm:5.25.0" + "@algolia/requester-browser-xhr": "npm:5.25.0" + "@algolia/requester-fetch": "npm:5.25.0" + "@algolia/requester-node-http": "npm:5.25.0" + checksum: 10c0/d28b0af9ff0e864ad8ada43e735d763052b605410813c26ea595c21b9a3bcc323ebf3b04e810bc23cc8c28840952dbda7d111d583b8884e91e5692a14ad427e8 + languageName: node + linkType: hard + +"@algolia/recommend@npm:5.25.0": + version: 5.25.0 + resolution: "@algolia/recommend@npm:5.25.0" + dependencies: + "@algolia/client-common": "npm:5.25.0" + "@algolia/requester-browser-xhr": "npm:5.25.0" + "@algolia/requester-fetch": "npm:5.25.0" + "@algolia/requester-node-http": "npm:5.25.0" + checksum: 10c0/cfab69aec97096ac4db3fb7a20af3e6263362ad65100e33f1523ddfdb37a3bd1ca8d4002e83f8b52009ca5650cb9486e9e38410fb0f0b49336cd8c2bed58cd0e + languageName: node + linkType: hard + +"@algolia/requester-browser-xhr@npm:5.25.0": + version: 5.25.0 + resolution: "@algolia/requester-browser-xhr@npm:5.25.0" + dependencies: + "@algolia/client-common": "npm:5.25.0" + checksum: 10c0/c190525b68d7d255568d20e6024094bb8b273f3234f698e4da52edb97697cddb5df99038f5dc780a54da9c89837c8e6d81e2e230ab2f819b6ec689ebbabd049a + languageName: node + linkType: hard + +"@algolia/requester-fetch@npm:5.25.0": + version: 5.25.0 + resolution: "@algolia/requester-fetch@npm:5.25.0" + dependencies: + "@algolia/client-common": "npm:5.25.0" + checksum: 10c0/126ed1c1cd6033a979da071018a5a1ada00df87e7ef5196385b6f241ca8f41f77c40827461a1aa04612a75ba651786c50b8e7a9f7636ba58b723c8bf8fd039a1 + languageName: node + linkType: hard + +"@algolia/requester-node-http@npm:5.25.0": + version: 5.25.0 + resolution: "@algolia/requester-node-http@npm:5.25.0" + dependencies: + "@algolia/client-common": "npm:5.25.0" + checksum: 10c0/310ecc88d6769b67d1959dfb11554699759ad358ce88b20edbe82cc007511efda3777451b3194ff26a600dc41bfe49588a74168c3f122302b945fe4e2e8b2063 + languageName: node + linkType: hard + +"@ampproject/remapping@npm:^2.2.0": + version: 2.3.0 + resolution: "@ampproject/remapping@npm:2.3.0" + dependencies: + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: 10c0/81d63cca5443e0f0c72ae18b544cc28c7c0ec2cea46e7cb888bb0e0f411a1191d0d6b7af798d54e30777d8d1488b2ec0732aac2be342d3d7d3ffd271c6f489ed + languageName: node + linkType: hard + +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.16.0, @babel/code-frame@npm:^7.27.1, @babel/code-frame@npm:^7.8.3": + version: 7.27.1 + resolution: "@babel/code-frame@npm:7.27.1" + dependencies: + "@babel/helper-validator-identifier": "npm:^7.27.1" + js-tokens: "npm:^4.0.0" + picocolors: "npm:^1.1.1" + checksum: 10c0/5dd9a18baa5fce4741ba729acc3a3272c49c25cb8736c4b18e113099520e7ef7b545a4096a26d600e4416157e63e87d66db46aa3fbf0a5f2286da2705c12da00 + languageName: node + linkType: hard + +"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.27.2": + version: 7.27.2 + resolution: "@babel/compat-data@npm:7.27.2" + checksum: 10c0/077c9e01af3b90decee384a6a44dcf353898e980cee22ec7941f9074655dbbe97ec317345536cdc7ef7391521e1497930c522a3816af473076dd524be7fccd32 + languageName: node + linkType: hard + +"@babel/core@npm:^7.21.3, @babel/core@npm:^7.25.9": + version: 7.27.1 + resolution: "@babel/core@npm:7.27.1" + dependencies: + "@ampproject/remapping": "npm:^2.2.0" + "@babel/code-frame": "npm:^7.27.1" + "@babel/generator": "npm:^7.27.1" + "@babel/helper-compilation-targets": "npm:^7.27.1" + "@babel/helper-module-transforms": "npm:^7.27.1" + "@babel/helpers": "npm:^7.27.1" + "@babel/parser": "npm:^7.27.1" + "@babel/template": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.1" + "@babel/types": "npm:^7.27.1" + convert-source-map: "npm:^2.0.0" + debug: "npm:^4.1.0" + gensync: "npm:^1.0.0-beta.2" + json5: "npm:^2.2.3" + semver: "npm:^6.3.1" + checksum: 10c0/0fc31f87f5401ac5d375528cb009f4ea5527fc8c5bb5b64b5b22c033b60fd0ad723388933a5f3f5db14e1edd13c958e9dd7e5c68f9b68c767aeb496199c8a4bb + languageName: node + linkType: hard + +"@babel/generator@npm:^7.25.9, @babel/generator@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/generator@npm:7.27.1" + dependencies: + "@babel/parser": "npm:^7.27.1" + "@babel/types": "npm:^7.27.1" + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.25" + jsesc: "npm:^3.0.2" + checksum: 10c0/c4156434b21818f558ebd93ce45f027c53ee570ce55a84fd2d9ba45a79ad204c17e0bff753c886fb6c07df3385445a9e34dc7ccb070d0ac7e80bb91c8b57f423 + languageName: node + linkType: hard + +"@babel/helper-annotate-as-pure@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-annotate-as-pure@npm:7.27.1" + dependencies: + "@babel/types": "npm:^7.27.1" + checksum: 10c0/fc4751b59c8f5417e1acb0455d6ffce53fa5e79b3aca690299fbbf73b1b65bfaef3d4a18abceb190024c5836bb6cfbc3711e83888648df93df54e18152a1196c + languageName: node + linkType: hard + +"@babel/helper-compilation-targets@npm:^7.22.6, @babel/helper-compilation-targets@npm:^7.27.1, @babel/helper-compilation-targets@npm:^7.27.2": + version: 7.27.2 + resolution: "@babel/helper-compilation-targets@npm:7.27.2" + dependencies: + "@babel/compat-data": "npm:^7.27.2" + "@babel/helper-validator-option": "npm:^7.27.1" + browserslist: "npm:^4.24.0" + lru-cache: "npm:^5.1.1" + semver: "npm:^6.3.1" + checksum: 10c0/f338fa00dcfea931804a7c55d1a1c81b6f0a09787e528ec580d5c21b3ecb3913f6cb0f361368973ce953b824d910d3ac3e8a8ee15192710d3563826447193ad1 + languageName: node + linkType: hard + +"@babel/helper-create-class-features-plugin@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-create-class-features-plugin@npm:7.27.1" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.27.1" + "@babel/helper-member-expression-to-functions": "npm:^7.27.1" + "@babel/helper-optimise-call-expression": "npm:^7.27.1" + "@babel/helper-replace-supers": "npm:^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.1" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/4ee199671d6b9bdd4988aa2eea4bdced9a73abfc831d81b00c7634f49a8fc271b3ceda01c067af58018eb720c6151322015d463abea7072a368ee13f35adbb4c + languageName: node + linkType: hard + +"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-create-regexp-features-plugin@npm:7.27.1" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.27.1" + regexpu-core: "npm:^6.2.0" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/591fe8bd3bb39679cc49588889b83bd628d8c4b99c55bafa81e80b1e605a348b64da955e3fd891c4ba3f36fd015367ba2eadea22af6a7de1610fbb5bcc2d3df0 + languageName: node + linkType: hard + +"@babel/helper-define-polyfill-provider@npm:^0.6.3, @babel/helper-define-polyfill-provider@npm:^0.6.4": + version: 0.6.4 + resolution: "@babel/helper-define-polyfill-provider@npm:0.6.4" + dependencies: + "@babel/helper-compilation-targets": "npm:^7.22.6" + "@babel/helper-plugin-utils": "npm:^7.22.5" + debug: "npm:^4.1.1" + lodash.debounce: "npm:^4.0.8" + resolve: "npm:^1.14.2" + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 10c0/b74f2b46e233a178618d19432bdae16e0137d0a603497ee901155e083c4a61f26fe01d79fb95d5f4c22131ade9d958d8f587088d412cca1302633587f070919d + languageName: node + linkType: hard + +"@babel/helper-member-expression-to-functions@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-member-expression-to-functions@npm:7.27.1" + dependencies: + "@babel/traverse": "npm:^7.27.1" + "@babel/types": "npm:^7.27.1" + checksum: 10c0/5762ad009b6a3d8b0e6e79ff6011b3b8fdda0fefad56cfa8bfbe6aa02d5a8a8a9680a45748fe3ac47e735a03d2d88c0a676e3f9f59f20ae9fadcc8d51ccd5a53 + languageName: node + linkType: hard + +"@babel/helper-module-imports@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-module-imports@npm:7.27.1" + dependencies: + "@babel/traverse": "npm:^7.27.1" + "@babel/types": "npm:^7.27.1" + checksum: 10c0/e00aace096e4e29290ff8648455c2bc4ed982f0d61dbf2db1b5e750b9b98f318bf5788d75a4f974c151bd318fd549e81dbcab595f46b14b81c12eda3023f51e8 + languageName: node + linkType: hard + +"@babel/helper-module-transforms@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-module-transforms@npm:7.27.1" + dependencies: + "@babel/helper-module-imports": "npm:^7.27.1" + "@babel/helper-validator-identifier": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/196ab29635fe6eb5ba6ead2972d41b1c0d40f400f99bd8fc109cef21440de24c26c972fabf932585e618694d590379ab8d22def8da65a54459d38ec46112ead7 + languageName: node + linkType: hard + +"@babel/helper-optimise-call-expression@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-optimise-call-expression@npm:7.27.1" + dependencies: + "@babel/types": "npm:^7.27.1" + checksum: 10c0/6b861e7fcf6031b9c9fc2de3cd6c005e94a459d6caf3621d93346b52774925800ca29d4f64595a5ceacf4d161eb0d27649ae385110ed69491d9776686fa488e6 + languageName: node + linkType: hard + +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.27.1, @babel/helper-plugin-utils@npm:^7.8.0": + version: 7.27.1 + resolution: "@babel/helper-plugin-utils@npm:7.27.1" + checksum: 10c0/94cf22c81a0c11a09b197b41ab488d416ff62254ce13c57e62912c85700dc2e99e555225787a4099ff6bae7a1812d622c80fbaeda824b79baa10a6c5ac4cf69b + languageName: node + linkType: hard + +"@babel/helper-remap-async-to-generator@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-remap-async-to-generator@npm:7.27.1" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.27.1" + "@babel/helper-wrap-function": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/5ba6258f4bb57c7c9fa76b55f416b2d18c867b48c1af4f9f2f7cd7cc933fe6da7514811d08ceb4972f1493be46f4b69c40282b811d1397403febae13c2ec57b5 + languageName: node + linkType: hard + +"@babel/helper-replace-supers@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-replace-supers@npm:7.27.1" + dependencies: + "@babel/helper-member-expression-to-functions": "npm:^7.27.1" + "@babel/helper-optimise-call-expression": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/4f2eaaf5fcc196580221a7ccd0f8873447b5d52745ad4096418f6101a1d2e712e9f93722c9a32bc9769a1dc197e001f60d6f5438d4dfde4b9c6a9e4df719354c + languageName: node + linkType: hard + +"@babel/helper-skip-transparent-expression-wrappers@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.27.1" + dependencies: + "@babel/traverse": "npm:^7.27.1" + "@babel/types": "npm:^7.27.1" + checksum: 10c0/f625013bcdea422c470223a2614e90d2c1cc9d832e97f32ca1b4f82b34bb4aa67c3904cb4b116375d3b5b753acfb3951ed50835a1e832e7225295c7b0c24dff7 + languageName: node + linkType: hard + +"@babel/helper-string-parser@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-string-parser@npm:7.27.1" + checksum: 10c0/8bda3448e07b5583727c103560bcf9c4c24b3c1051a4c516d4050ef69df37bb9a4734a585fe12725b8c2763de0a265aa1e909b485a4e3270b7cfd3e4dbe4b602 + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-validator-identifier@npm:7.27.1" + checksum: 10c0/c558f11c4871d526498e49d07a84752d1800bf72ac0d3dad100309a2eaba24efbf56ea59af5137ff15e3a00280ebe588560534b0e894a4750f8b1411d8f78b84 + languageName: node + linkType: hard + +"@babel/helper-validator-option@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-validator-option@npm:7.27.1" + checksum: 10c0/6fec5f006eba40001a20f26b1ef5dbbda377b7b68c8ad518c05baa9af3f396e780bdfded24c4eef95d14bb7b8fd56192a6ed38d5d439b97d10efc5f1a191d148 + languageName: node + linkType: hard + +"@babel/helper-wrap-function@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-wrap-function@npm:7.27.1" + dependencies: + "@babel/template": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.1" + "@babel/types": "npm:^7.27.1" + checksum: 10c0/c472f75c0951bc657ab0a117538c7c116566ae7579ed47ac3f572c42dc78bd6f1e18f52ebe80d38300c991c3fcaa06979e2f8864ee919369dabd59072288de30 + languageName: node + linkType: hard + +"@babel/helpers@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helpers@npm:7.27.1" + dependencies: + "@babel/template": "npm:^7.27.1" + "@babel/types": "npm:^7.27.1" + checksum: 10c0/e078257b9342dae2c041ac050276c5a28701434ad09478e6dc6976abd99f721a5a92e4bebddcbca6b1c3a7e8acace56a946340c701aad5e7507d2c87446459ba + languageName: node + linkType: hard + +"@babel/parser@npm:^7.27.1, @babel/parser@npm:^7.27.2": + version: 7.27.2 + resolution: "@babel/parser@npm:7.27.2" + dependencies: + "@babel/types": "npm:^7.27.1" + bin: + parser: ./bin/babel-parser.js + checksum: 10c0/3c06692768885c2f58207fc8c2cbdb4a44df46b7d93135a083f6eaa49310f7ced490ce76043a2a7606cdcc13f27e3d835e141b692f2f6337a2e7f43c1dbb04b4 + languageName: node + linkType: hard + +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/7dfffa978ae1cd179641a7c4b4ad688c6828c2c58ec96b118c2fb10bc3715223de6b88bff1ebff67056bb5fccc568ae773e3b83c592a1b843423319f80c99ebd + languageName: node + linkType: hard + +"@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/2cd7a55a856e5e59bbd9484247c092a41e0d9f966778e7019da324d9e0928892d26afc4fbb2ac3d76a3c5a631cd3cf0d72dd2653b44f634f6c663b9e6f80aacd + languageName: node + linkType: hard + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/cf29835498c4a25bd470908528919729a0799b2ec94e89004929a5532c94a5e4b1a49bc5d6673a22e5afe05d08465873e14ee3b28c42eb3db489cdf5ca47c680 + languageName: node + linkType: hard + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" + "@babel/plugin-transform-optional-chaining": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.13.0 + checksum: 10c0/eddcd056f76e198868cbff883eb148acfade8f0890973ab545295df0c08e39573a72e65372bcc0b0bfadba1b043fe1aea6b0907d0b4889453ac154c404194ebc + languageName: node + linkType: hard + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/b94e6c3fc019e988b1499490829c327a1067b4ddea8ad402f6d0554793c9124148c2125338c723661b6dff040951abc1f092afbf3f2d234319cd580b68e52445 + languageName: node + linkType: hard + +"@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2": + version: 7.21.0-placeholder-for-preset-env.2 + resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e605e0070da087f6c35579499e65801179a521b6842c15181a1e305c04fded2393f11c1efd09b087be7f8b083d1b75e8f3efcbc1292b4f60d3369e14812cff63 + languageName: node + linkType: hard + +"@babel/plugin-syntax-dynamic-import@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-dynamic-import@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/9c50927bf71adf63f60c75370e2335879402648f468d0172bc912e303c6a3876927d8eb35807331b57f415392732ed05ab9b42c68ac30a936813ab549e0246c5 + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-assertions@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-syntax-import-assertions@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/06a954ee672f7a7c44d52b6e55598da43a7064e80df219765c51c37a0692641277e90411028f7cae4f4d1dedeed084f0c453576fa421c35a81f1603c5e3e0146 + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-attributes@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-syntax-import-attributes@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e66f7a761b8360419bbb93ab67d87c8a97465ef4637a985ff682ce7ba6918b34b29d81190204cf908d0933058ee7b42737423cd8a999546c21b3aabad4affa9a + languageName: node + linkType: hard + +"@babel/plugin-syntax-jsx@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-syntax-jsx@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/bc5afe6a458d5f0492c02a54ad98c5756a0c13bd6d20609aae65acd560a9e141b0876da5f358dce34ea136f271c1016df58b461184d7ae9c4321e0f98588bc84 + languageName: node + linkType: hard + +"@babel/plugin-syntax-typescript@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-syntax-typescript@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/11589b4c89c66ef02d57bf56c6246267851ec0c361f58929327dc3e070b0dab644be625bbe7fb4c4df30c3634bfdfe31244e1f517be397d2def1487dbbe3c37d + languageName: node + linkType: hard + +"@babel/plugin-syntax-unicode-sets-regex@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-syntax-unicode-sets-regex@npm:7.18.6" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.18.6" + "@babel/helper-plugin-utils": "npm:^7.18.6" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/9144e5b02a211a4fb9a0ce91063f94fbe1004e80bde3485a0910c9f14897cf83fabd8c21267907cff25db8e224858178df0517f14333cfcf3380ad9a4139cb50 + languageName: node + linkType: hard + +"@babel/plugin-transform-arrow-functions@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-arrow-functions@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/19abd7a7d11eef58c9340408a4c2594503f6c4eaea1baa7b0e5fbdda89df097e50663edb3448ad2300170b39efca98a75e5767af05cad3b0facb4944326896a3 + languageName: node + linkType: hard + +"@babel/plugin-transform-async-generator-functions@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-async-generator-functions@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-remap-async-to-generator": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/772e449c69ee42a466443acefb07083bd89efb1a1d95679a4dc99ea3be9d8a3c43a2b74d2da95d7c818e9dd9e0b72bfa7c03217a1feaf108f21b7e542f0943c0 + languageName: node + linkType: hard + +"@babel/plugin-transform-async-to-generator@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-async-to-generator@npm:7.27.1" + dependencies: + "@babel/helper-module-imports": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-remap-async-to-generator": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e76b1f6f9c3bbf72e17d7639406d47f09481806de4db99a8de375a0bb40957ea309b20aa705f0c25ab1d7c845e3f365af67eafa368034521151a0e352a03ef2f + languageName: node + linkType: hard + +"@babel/plugin-transform-block-scoped-functions@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/3313130ba3bf0699baad0e60da1c8c3c2f0c2c0a7039cd0063e54e72e739c33f1baadfc9d8c73b3fea8c85dd7250c3964fb09c8e1fa62ba0b24a9fefe0a8dbde + languageName: node + linkType: hard + +"@babel/plugin-transform-block-scoping@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-block-scoping@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/d3f357beeb92fbdf3045aea2ba286a60dafc9c2d2a9f89065bb3c4bea9cc48934ee6689df3db0439d9ec518eda5e684f3156cab792b7c38c33ece2f8204ddee8 + languageName: node + linkType: hard + +"@babel/plugin-transform-class-properties@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-class-properties@npm:7.27.1" + dependencies: + "@babel/helper-create-class-features-plugin": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/cc0662633c0fe6df95819fef223506ddf26c369c8d64ab21a728d9007ec866bf9436a253909819216c24a82186b6ccbc1ec94d7aaf3f82df227c7c02fa6a704b + languageName: node + linkType: hard + +"@babel/plugin-transform-class-static-block@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-class-static-block@npm:7.27.1" + dependencies: + "@babel/helper-create-class-features-plugin": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.12.0 + checksum: 10c0/396997dd81fc1cf242b921e337d25089d6b9dc3596e81322ff11a6359326dc44f2f8b82dcc279c2e514cafaf8964dc7ed39e9fab4b8af1308b57387d111f6a20 + languageName: node + linkType: hard + +"@babel/plugin-transform-classes@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-classes@npm:7.27.1" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.27.1" + "@babel/helper-compilation-targets": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-replace-supers": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.1" + globals: "npm:^11.1.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/1071f4cb1ed5deb5e6f8d0442f2293a540cac5caa5ab3c25ad0571aadcbf961f61e26d367a67894976165a543e02f3a19e40b63b909afbed6e710801a590635c + languageName: node + linkType: hard + +"@babel/plugin-transform-computed-properties@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-computed-properties@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/template": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e09a12f8c8ae0e6a6144c102956947b4ec05f6c844169121d0ec4529c2d30ad1dc59fee67736193b87a402f44552c888a519a680a31853bdb4d34788c28af3b0 + languageName: node + linkType: hard + +"@babel/plugin-transform-destructuring@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-destructuring@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/56afda7a0b205f8d1af727daef4c529fc2e756887408affd39033ae4476e54d586d3d9dc1e72cfb15c74a2a5ca0653ab13dbaa8cbf79fbb2a3a746d0f107cb86 + languageName: node + linkType: hard + +"@babel/plugin-transform-dotall-regex@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-dotall-regex@npm:7.27.1" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/f9caddfad9a551b4dabe0dcb7c040f458fbaaa7bbb44200c20198b32c8259be8e050e58d2c853fdac901a4cfe490b86aa857036d8d461b192dd010d0e242dedb + languageName: node + linkType: hard + +"@babel/plugin-transform-duplicate-keys@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-duplicate-keys@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/22a822e5342b7066f83eaedc4fd9bb044ac6bc68725484690b33ba04a7104980e43ea3229de439286cb8db8e7db4a865733a3f05123ab58a10f189f03553746f + languageName: node + linkType: hard + +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:7.27.1" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/121502a252b3206913e1e990a47fea34397b4cbf7804d4cd872d45961bc45b603423f60ca87f3a3023a62528f5feb475ac1c9ec76096899ec182fcb135eba375 + languageName: node + linkType: hard + +"@babel/plugin-transform-dynamic-import@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-dynamic-import@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/8dcd3087aca134b064fc361d2cc34eec1f900f6be039b6368104afcef10bb75dea726bb18cabd046716b89b0edaa771f50189fa16bc5c5914a38cbcf166350f7 + languageName: node + linkType: hard + +"@babel/plugin-transform-exponentiation-operator@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/953d21e01fed76da8e08fb5094cade7bf8927c1bb79301916bec2db0593b41dbcfbca1024ad5db886b72208a93ada8f57a219525aad048cf15814eeb65cf760d + languageName: node + linkType: hard + +"@babel/plugin-transform-export-namespace-from@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-export-namespace-from@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/d7165cad11f571a54c8d9263d6c6bf2b817aff4874f747cb51e6e49efb32f2c9b37a6850cdb5e3b81e0b638141bb77dc782a6ec1a94128859fbdf7767581e07c + languageName: node + linkType: hard + +"@babel/plugin-transform-for-of@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-for-of@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/4635763173a23aae24480681f2b0996b4f54a0cb2368880301a1801638242e263132d1e8adbe112ab272913d1d900ee0d6f7dea79443aef9d3325168cd88b3fb + languageName: node + linkType: hard + +"@babel/plugin-transform-function-name@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-function-name@npm:7.27.1" + dependencies: + "@babel/helper-compilation-targets": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/5abdc7b5945fbd807269dcc6e76e52b69235056023b0b35d311e8f5dfd6c09d9f225839798998fc3b663f50cf701457ddb76517025a0d7a5474f3fe56e567a4c + languageName: node + linkType: hard + +"@babel/plugin-transform-json-strings@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-json-strings@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/2379714aca025516452a7c1afa1ca42a22b9b51a5050a653cc6198a51665ab82bdecf36106d32d731512706a1e373c5637f5ff635737319aa42f3827da2326d6 + languageName: node + linkType: hard + +"@babel/plugin-transform-literals@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-literals@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/c40dc3eb2f45a92ee476412314a40e471af51a0f51a24e91b85cef5fc59f4fe06758088f541643f07f949d2c67ee7bdce10e11c5ec56791ae09b15c3b451eeca + languageName: node + linkType: hard + +"@babel/plugin-transform-logical-assignment-operators@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/5b0abc7c0d09d562bf555c646dce63a30288e5db46fd2ce809a61d064415da6efc3b2b3c59b8e4fe98accd072c89a2f7c3765b400e4bf488651735d314d9feeb + languageName: node + linkType: hard + +"@babel/plugin-transform-member-expression-literals@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-member-expression-literals@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/0874ccebbd1c6a155e5f6b3b29729fade1221b73152567c1af1e1a7c12848004dffecbd7eded6dc463955120040ae57c17cb586b53fb5a7a27fcd88177034c30 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-amd@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-modules-amd@npm:7.27.1" + dependencies: + "@babel/helper-module-transforms": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/76e86cd278b6a3c5b8cca8dfb3428e9cd0c81a5df7096e04c783c506696b916a9561386d610a9d846ef64804640e0bd818ea47455fed0ee89b7f66c555b29537 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-commonjs@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.27.1" + dependencies: + "@babel/helper-module-transforms": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/4def972dcd23375a266ea1189115a4ff61744b2c9366fc1de648b3fab2c650faf1a94092de93a33ff18858d2e6c4dddeeee5384cb42ba0129baeab01a5cdf1e2 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-systemjs@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.27.1" + dependencies: + "@babel/helper-module-transforms": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-validator-identifier": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/f16fca62d144d9cbf558e7b5f83e13bb6d0f21fdeff3024b0cecd42ffdec0b4151461da42bd0963512783ece31aafa5ffe03446b4869220ddd095b24d414e2b5 + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-umd@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-modules-umd@npm:7.27.1" + dependencies: + "@babel/helper-module-transforms": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e5962a8874889da2ab1aa32eb93ec21d419c7423c766e4befb39b4bb512b9ad44b47837b6cd1c8f1065445cbbcc6dc2be10298ac6e734e5ca1059fc23698daed + languageName: node + linkType: hard + +"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.27.1" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/8eaa8c9aee00a00f3bd8bd8b561d3f569644d98cb2cfe3026d7398aabf9b29afd62f24f142b4112fa1f572d9b0e1928291b099cde59f56d6b59f4d565e58abf2 + languageName: node + linkType: hard + +"@babel/plugin-transform-new-target@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-new-target@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/9b0581412fcc5ab1b9a2d86a0c5407bd959391f0a1e77a46953fef9f7a57f3f4020d75f71098c5f9e5dcc680a87f9fd99b3205ab12e25ef8c19eed038c1e4b28 + languageName: node + linkType: hard + +"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/a435fc03aaa65c6ef8e99b2d61af0994eb5cdd4a28562d78c3b0b0228ca7e501aa255e1dff091a6996d7d3ea808eb5a65fd50ecd28dfb10687a8a1095dcadc7a + languageName: node + linkType: hard + +"@babel/plugin-transform-numeric-separator@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-numeric-separator@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/b72cbebbfe46fcf319504edc1cf59f3f41c992dd6840db766367f6a1d232cd2c52143c5eaf57e0316710bee251cae94be97c6d646b5022fcd9274ccb131b470c + languageName: node + linkType: hard + +"@babel/plugin-transform-object-rest-spread@npm:^7.27.2": + version: 7.27.2 + resolution: "@babel/plugin-transform-object-rest-spread@npm:7.27.2" + dependencies: + "@babel/helper-compilation-targets": "npm:^7.27.2" + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/plugin-transform-destructuring": "npm:^7.27.1" + "@babel/plugin-transform-parameters": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/5e255b262dd65c8700078d9f6ed87bd45f951a905dda6b3414be28d7b2781b18e6b812e9d71421e61360c9cf51e1e619c1d48348593bb7399496f61f5f221446 + languageName: node + linkType: hard + +"@babel/plugin-transform-object-super@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-object-super@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-replace-supers": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/efa2d092ef55105deb06d30aff4e460c57779b94861188128489b72378bf1f0ab0f06a4a4d68b9ae2a59a79719fbb2d148b9a3dca19ceff9c73b1f1a95e0527c + languageName: node + linkType: hard + +"@babel/plugin-transform-optional-catch-binding@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/807a4330f1fac08e2682d57bc82e714868fc651c8876f9a8b3a3fd8f53c129e87371f8243e712ac7dae11e090b737a2219a02fe1b6459a29e664fa073c3277bb + languageName: node + linkType: hard + +"@babel/plugin-transform-optional-chaining@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-optional-chaining@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/5b18ff5124e503f0a25d6b195be7351a028b3992d6f2a91fb4037e2a2c386400d66bc1df8f6df0a94c708524f318729e81a95c41906e5a7919a06a43e573a525 + languageName: node + linkType: hard + +"@babel/plugin-transform-parameters@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-parameters@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/453a9618735eeff5551d4c7f02c250606586fe1dd210ec9f69a4f15629ace180cd944339ebff2b0f11e1a40567d83a229ba1c567620e70b2ebedea576e12196a + languageName: node + linkType: hard + +"@babel/plugin-transform-private-methods@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-private-methods@npm:7.27.1" + dependencies: + "@babel/helper-create-class-features-plugin": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/232bedfe9d28df215fb03cc7623bdde468b1246bdd6dc24465ff4bf9cc5f5a256ae33daea1fafa6cc59705e4d29da9024bb79baccaa5cd92811ac5db9b9244f2 + languageName: node + linkType: hard + +"@babel/plugin-transform-private-property-in-object@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-private-property-in-object@npm:7.27.1" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.27.1" + "@babel/helper-create-class-features-plugin": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/a8c4536273ca716dcc98e74ea25ca76431528554922f184392be3ddaf1761d4aa0e06f1311577755bd1613f7054fb51d29de2ada1130f743d329170a1aa1fe56 + languageName: node + linkType: hard + +"@babel/plugin-transform-property-literals@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-property-literals@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/15713a87edd6db620d6e66eb551b4fbfff5b8232c460c7c76cedf98efdc5cd21080c97040231e19e06594c6d7dfa66e1ab3d0951e29d5814fb25e813f6d6209c + languageName: node + linkType: hard + +"@babel/plugin-transform-react-constant-elements@npm:^7.21.3": + version: 7.27.1 + resolution: "@babel/plugin-transform-react-constant-elements@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/07fa88dd312c97d05de95e344a11a78e24d711e7bde879076d8880869ad7b0dc69c5a5ad056790595043cb9c533fd93af0ba015eed4631315282295f767ccfbe + languageName: node + linkType: hard + +"@babel/plugin-transform-react-display-name@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-react-display-name@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/6cd474b5fb30a2255027d8fc19975aee1c1da54dd8bc8b79802676096182ca4136302ce65a24fbb277f8fe30f266006bbf327ef6be2846d3681eb57509744125 + languageName: node + linkType: hard + +"@babel/plugin-transform-react-jsx-development@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-react-jsx-development@npm:7.27.1" + dependencies: + "@babel/plugin-transform-react-jsx": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/eb8c4b6a79dc5c49b41e928e2037e1ee0bbfa722e4fd74c0b7c0d11103c82c2c25c434000e1b051d534c7261ab5c92b6d1e85313bf1b26e37db3f051ae217b58 + languageName: node + linkType: hard + +"@babel/plugin-transform-react-jsx@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-react-jsx@npm:7.27.1" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.27.1" + "@babel/helper-module-imports": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/plugin-syntax-jsx": "npm:^7.27.1" + "@babel/types": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/1a08637c39fc78c9760dd4a3ed363fdbc762994bf83ed7872ad5bda0232fcd0fc557332f2ce36b522c0226dfd9cc8faac6b88eddda535f24825198a689e571af + languageName: node + linkType: hard + +"@babel/plugin-transform-react-pure-annotations@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.27.1" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/34bc090f4a7e460d82a851971b4d0f32e4bb519bafb927154f4174506283fe02b0f471fc20655c6050a8bf7b748bfa31c7e8f7d688849476d8266623554fbb28 + languageName: node + linkType: hard + +"@babel/plugin-transform-regenerator@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-regenerator@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/42395908899310bb107d9ca31ebd4c302e14c582e3ad3ebfe1498fabafc43155c8f10850265c1e686a2afcf50d1f402cc5c5218fba72e167852607a4d8d6492e + languageName: node + linkType: hard + +"@babel/plugin-transform-regexp-modifiers@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-regexp-modifiers@npm:7.27.1" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/31ae596ab56751cf43468a6c0a9d6bc3521d306d2bee9c6957cdb64bea53812ce24bd13a32f766150d62b737bca5b0650b2c62db379382fff0dccbf076055c33 + languageName: node + linkType: hard + +"@babel/plugin-transform-reserved-words@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-reserved-words@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e1a87691cce21a644a474d7c9a8107d4486c062957be32042d40f0a3d0cc66e00a3150989655019c255ff020d2640ac16aaf544792717d586f219f3bad295567 + languageName: node + linkType: hard + +"@babel/plugin-transform-runtime@npm:^7.25.9": + version: 7.27.1 + resolution: "@babel/plugin-transform-runtime@npm:7.27.1" + dependencies: + "@babel/helper-module-imports": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + babel-plugin-polyfill-corejs2: "npm:^0.4.10" + babel-plugin-polyfill-corejs3: "npm:^0.11.0" + babel-plugin-polyfill-regenerator: "npm:^0.6.1" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/7abbae60a6441ba8546dee3fcbc00b38038304250ba2419adaf0c76267bff43420ff75b7049003a24a829e01d9fde2ac8a422352af6d88aebd31996a83f04c2f + languageName: node + linkType: hard + +"@babel/plugin-transform-shorthand-properties@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-shorthand-properties@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/bd5544b89520a22c41a6df5ddac9039821d3334c0ef364d18b0ba9674c5071c223bcc98be5867dc3865cb10796882b7594e2c40dedaff38e1b1273913fe353e1 + languageName: node + linkType: hard + +"@babel/plugin-transform-spread@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-spread@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/b34fc58b33bd35b47d67416655c2cbc8578fbb3948b4592bc15eb6d8b4046986e25c06e3b9929460fa4ab08e9653582415e7ef8b87d265e1239251bdf5a4c162 + languageName: node + linkType: hard + +"@babel/plugin-transform-sticky-regex@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-sticky-regex@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/5698df2d924f0b1b7bdb7ef370e83f99ed3f0964eb3b9c27d774d021bee7f6d45f9a73e2be369d90b4aff1603ce29827f8743f091789960e7669daf9c3cda850 + languageName: node + linkType: hard + +"@babel/plugin-transform-template-literals@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-template-literals@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/c90f403e42ef062b60654d1c122c70f3ec6f00c2f304b0931ebe6d0b432498ef8a5ef9266ddf00debc535f8390842207e44d3900eff1d2bab0cc1a700f03e083 + languageName: node + linkType: hard + +"@babel/plugin-transform-typeof-symbol@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-typeof-symbol@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/a13c68015311fefa06a51830bc69d5badd06c881b13d5cf9ba04bf7c73e3fc6311cc889e18d9645ce2a64a79456dc9c7be88476c0b6802f62a686cb6f662ecd6 + languageName: node + linkType: hard + +"@babel/plugin-transform-typescript@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-typescript@npm:7.27.1" + dependencies: + "@babel/helper-annotate-as-pure": "npm:^7.27.1" + "@babel/helper-create-class-features-plugin": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.27.1" + "@babel/plugin-syntax-typescript": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/48f1db5de17a0f9fc365ff4fb046010aedc7aad813a7aa42fb73fcdab6442f9e700dde2cc0481086e01b0dae662ae4d3e965a52cde154f0f146d243a8ac68e93 + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-escapes@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-unicode-escapes@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/a6809e0ca69d77ee9804e0c1164e8a2dea5e40718f6dcf234aeddf7292e7414f7ee331d87f17eb6f160823a329d1d6751bd49b35b392ac4a6efc032e4d3038d8 + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-property-regex@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.27.1" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/a332bc3cb3eeea67c47502bc52d13a0f8abae5a7bfcb08b93a8300ddaff8d9e1238f912969494c1b494c1898c6f19687054440706700b6d12cb0b90d88beb4d0 + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-regex@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-unicode-regex@npm:7.27.1" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/6abda1bcffb79feba6f5c691859cdbe984cc96481ea65d5af5ba97c2e843154005f0886e25006a37a2d213c0243506a06eaeafd93a040dbe1f79539016a0d17a + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-sets-regex@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.27.1" + dependencies: + "@babel/helper-create-regexp-features-plugin": "npm:^7.27.1" + "@babel/helper-plugin-utils": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/236645f4d0a1fba7c18dc8ffe3975933af93e478f2665650c2d91cf528cfa1587cde5cfe277e0e501fc03b5bf57638369575d6539cef478632fb93bd7d7d7178 + languageName: node + linkType: hard + +"@babel/preset-env@npm:^7.20.2, @babel/preset-env@npm:^7.25.9": + version: 7.27.2 + resolution: "@babel/preset-env@npm:7.27.2" + dependencies: + "@babel/compat-data": "npm:^7.27.2" + "@babel/helper-compilation-targets": "npm:^7.27.2" + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-validator-option": "npm:^7.27.1" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "npm:^7.27.1" + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "npm:^7.27.1" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "npm:^7.27.1" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.27.1" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "npm:^7.27.1" + "@babel/plugin-proposal-private-property-in-object": "npm:7.21.0-placeholder-for-preset-env.2" + "@babel/plugin-syntax-import-assertions": "npm:^7.27.1" + "@babel/plugin-syntax-import-attributes": "npm:^7.27.1" + "@babel/plugin-syntax-unicode-sets-regex": "npm:^7.18.6" + "@babel/plugin-transform-arrow-functions": "npm:^7.27.1" + "@babel/plugin-transform-async-generator-functions": "npm:^7.27.1" + "@babel/plugin-transform-async-to-generator": "npm:^7.27.1" + "@babel/plugin-transform-block-scoped-functions": "npm:^7.27.1" + "@babel/plugin-transform-block-scoping": "npm:^7.27.1" + "@babel/plugin-transform-class-properties": "npm:^7.27.1" + "@babel/plugin-transform-class-static-block": "npm:^7.27.1" + "@babel/plugin-transform-classes": "npm:^7.27.1" + "@babel/plugin-transform-computed-properties": "npm:^7.27.1" + "@babel/plugin-transform-destructuring": "npm:^7.27.1" + "@babel/plugin-transform-dotall-regex": "npm:^7.27.1" + "@babel/plugin-transform-duplicate-keys": "npm:^7.27.1" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "npm:^7.27.1" + "@babel/plugin-transform-dynamic-import": "npm:^7.27.1" + "@babel/plugin-transform-exponentiation-operator": "npm:^7.27.1" + "@babel/plugin-transform-export-namespace-from": "npm:^7.27.1" + "@babel/plugin-transform-for-of": "npm:^7.27.1" + "@babel/plugin-transform-function-name": "npm:^7.27.1" + "@babel/plugin-transform-json-strings": "npm:^7.27.1" + "@babel/plugin-transform-literals": "npm:^7.27.1" + "@babel/plugin-transform-logical-assignment-operators": "npm:^7.27.1" + "@babel/plugin-transform-member-expression-literals": "npm:^7.27.1" + "@babel/plugin-transform-modules-amd": "npm:^7.27.1" + "@babel/plugin-transform-modules-commonjs": "npm:^7.27.1" + "@babel/plugin-transform-modules-systemjs": "npm:^7.27.1" + "@babel/plugin-transform-modules-umd": "npm:^7.27.1" + "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.27.1" + "@babel/plugin-transform-new-target": "npm:^7.27.1" + "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.27.1" + "@babel/plugin-transform-numeric-separator": "npm:^7.27.1" + "@babel/plugin-transform-object-rest-spread": "npm:^7.27.2" + "@babel/plugin-transform-object-super": "npm:^7.27.1" + "@babel/plugin-transform-optional-catch-binding": "npm:^7.27.1" + "@babel/plugin-transform-optional-chaining": "npm:^7.27.1" + "@babel/plugin-transform-parameters": "npm:^7.27.1" + "@babel/plugin-transform-private-methods": "npm:^7.27.1" + "@babel/plugin-transform-private-property-in-object": "npm:^7.27.1" + "@babel/plugin-transform-property-literals": "npm:^7.27.1" + "@babel/plugin-transform-regenerator": "npm:^7.27.1" + "@babel/plugin-transform-regexp-modifiers": "npm:^7.27.1" + "@babel/plugin-transform-reserved-words": "npm:^7.27.1" + "@babel/plugin-transform-shorthand-properties": "npm:^7.27.1" + "@babel/plugin-transform-spread": "npm:^7.27.1" + "@babel/plugin-transform-sticky-regex": "npm:^7.27.1" + "@babel/plugin-transform-template-literals": "npm:^7.27.1" + "@babel/plugin-transform-typeof-symbol": "npm:^7.27.1" + "@babel/plugin-transform-unicode-escapes": "npm:^7.27.1" + "@babel/plugin-transform-unicode-property-regex": "npm:^7.27.1" + "@babel/plugin-transform-unicode-regex": "npm:^7.27.1" + "@babel/plugin-transform-unicode-sets-regex": "npm:^7.27.1" + "@babel/preset-modules": "npm:0.1.6-no-external-plugins" + babel-plugin-polyfill-corejs2: "npm:^0.4.10" + babel-plugin-polyfill-corejs3: "npm:^0.11.0" + babel-plugin-polyfill-regenerator: "npm:^0.6.1" + core-js-compat: "npm:^3.40.0" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/fd7ec310832a9ff26ed8d56bc0832cdbdb3a188e022050b74790796650649fb8373568af05b320b58b3ff922507979bad50ff95a4d504ab0081134480103504e + languageName: node + linkType: hard + +"@babel/preset-modules@npm:0.1.6-no-external-plugins": + version: 0.1.6-no-external-plugins + resolution: "@babel/preset-modules@npm:0.1.6-no-external-plugins" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.0.0" + "@babel/types": "npm:^7.4.4" + esutils: "npm:^2.0.2" + peerDependencies: + "@babel/core": ^7.0.0-0 || ^8.0.0-0 <8.0.0 + checksum: 10c0/9d02f70d7052446c5f3a4fb39e6b632695fb6801e46d31d7f7c5001f7c18d31d1ea8369212331ca7ad4e7877b73231f470b0d559162624128f1b80fe591409e6 + languageName: node + linkType: hard + +"@babel/preset-react@npm:^7.18.6, @babel/preset-react@npm:^7.25.9": + version: 7.27.1 + resolution: "@babel/preset-react@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-validator-option": "npm:^7.27.1" + "@babel/plugin-transform-react-display-name": "npm:^7.27.1" + "@babel/plugin-transform-react-jsx": "npm:^7.27.1" + "@babel/plugin-transform-react-jsx-development": "npm:^7.27.1" + "@babel/plugin-transform-react-pure-annotations": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/a80b02ef08b026cb9830d6512d08c7cd378eef4c0631dacba4aa1106240d9bb76af6373463f0255f4bbdbfcce40375a61e92735375906ba5871629b0c314bc45 + languageName: node + linkType: hard + +"@babel/preset-typescript@npm:^7.21.0, @babel/preset-typescript@npm:^7.25.9": + version: 7.27.1 + resolution: "@babel/preset-typescript@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.27.1" + "@babel/helper-validator-option": "npm:^7.27.1" + "@babel/plugin-syntax-jsx": "npm:^7.27.1" + "@babel/plugin-transform-modules-commonjs": "npm:^7.27.1" + "@babel/plugin-transform-typescript": "npm:^7.27.1" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/cba6ca793d915f8aff9fe2f13b0dfbf5fd3f2e9a17f17478ec9878e9af0d206dcfe93154b9fd353727f16c1dca7c7a3ceb4943f8d28b216235f106bc0fbbcaa3 + languageName: node + linkType: hard + +"@babel/runtime-corejs3@npm:^7.25.9": + version: 7.27.1 + resolution: "@babel/runtime-corejs3@npm:7.27.1" + dependencies: + core-js-pure: "npm:^3.30.2" + checksum: 10c0/81b46b6c73b590842abca14024a6b7c8751eaf0b519794f129b7c971043e13967e4d370933dbd7d0fdc78872ae45971b36013e0fa13c6d5c0130bfe971be0ac1 + languageName: node + linkType: hard + +"@babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.3, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.25.9": + version: 7.27.1 + resolution: "@babel/runtime@npm:7.27.1" + checksum: 10c0/530a7332f86ac5a7442250456823a930906911d895c0b743bf1852efc88a20a016ed4cd26d442d0ca40ae6d5448111e02a08dd638a4f1064b47d080e2875dc05 + languageName: node + linkType: hard + +"@babel/template@npm:^7.27.1": + version: 7.27.2 + resolution: "@babel/template@npm:7.27.2" + dependencies: + "@babel/code-frame": "npm:^7.27.1" + "@babel/parser": "npm:^7.27.2" + "@babel/types": "npm:^7.27.1" + checksum: 10c0/ed9e9022651e463cc5f2cc21942f0e74544f1754d231add6348ff1b472985a3b3502041c0be62dc99ed2d12cfae0c51394bf827452b98a2f8769c03b87aadc81 + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.25.9, @babel/traverse@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/traverse@npm:7.27.1" + dependencies: + "@babel/code-frame": "npm:^7.27.1" + "@babel/generator": "npm:^7.27.1" + "@babel/parser": "npm:^7.27.1" + "@babel/template": "npm:^7.27.1" + "@babel/types": "npm:^7.27.1" + debug: "npm:^4.3.1" + globals: "npm:^11.1.0" + checksum: 10c0/d912110037b03b1d70a2436cfd51316d930366a5f54252da2bced1ba38642f644f848240a951e5caf12f1ef6c40d3d96baa92ea6e84800f2e891c15e97b25d50 + languageName: node + linkType: hard + +"@babel/types@npm:^7.21.3, @babel/types@npm:^7.27.1, @babel/types@npm:^7.4.4": + version: 7.27.1 + resolution: "@babel/types@npm:7.27.1" + dependencies: + "@babel/helper-string-parser": "npm:^7.27.1" + "@babel/helper-validator-identifier": "npm:^7.27.1" + checksum: 10c0/ed736f14db2fdf0d36c539c8e06b6bb5e8f9649a12b5c0e1c516fed827f27ef35085abe08bf4d1302a4e20c9a254e762eed453bce659786d4a6e01ba26a91377 + languageName: node + linkType: hard + +"@colors/colors@npm:1.5.0": + version: 1.5.0 + resolution: "@colors/colors@npm:1.5.0" + checksum: 10c0/eb42729851adca56d19a08e48d5a1e95efd2a32c55ae0323de8119052be0510d4b7a1611f2abcbf28c044a6c11e6b7d38f99fccdad7429300c37a8ea5fb95b44 + languageName: node + linkType: hard + +"@csstools/cascade-layer-name-parser@npm:^2.0.4": + version: 2.0.4 + resolution: "@csstools/cascade-layer-name-parser@npm:2.0.4" + peerDependencies: + "@csstools/css-parser-algorithms": ^3.0.4 + "@csstools/css-tokenizer": ^3.0.3 + checksum: 10c0/774f2bcc96a576183853191bdfd31df15e22c51901ee01678ee47f1d1afcb4ab0e6d9a78e08f7383ac089c7e0b390013633f45ff1f1d577c9aefd252589bcced + languageName: node + linkType: hard + +"@csstools/color-helpers@npm:^5.0.2": + version: 5.0.2 + resolution: "@csstools/color-helpers@npm:5.0.2" + checksum: 10c0/bebaddb28b9eb58b0449edd5d0c0318fa88f3cb079602ee27e88c9118070d666dcc4e09a5aa936aba2fde6ba419922ade07b7b506af97dd7051abd08dfb2959b + languageName: node + linkType: hard + +"@csstools/css-calc@npm:^2.1.3": + version: 2.1.3 + resolution: "@csstools/css-calc@npm:2.1.3" + peerDependencies: + "@csstools/css-parser-algorithms": ^3.0.4 + "@csstools/css-tokenizer": ^3.0.3 + checksum: 10c0/85f5b4f96d60f395d5f0108056b0ddee037b22d6deba448d74324b50f1c554de284f84715ebfac7b2888b78e09d20d02a7cd213ee7bdaa71011ea9b4eee3a251 + languageName: node + linkType: hard + +"@csstools/css-color-parser@npm:^3.0.9": + version: 3.0.9 + resolution: "@csstools/css-color-parser@npm:3.0.9" + dependencies: + "@csstools/color-helpers": "npm:^5.0.2" + "@csstools/css-calc": "npm:^2.1.3" + peerDependencies: + "@csstools/css-parser-algorithms": ^3.0.4 + "@csstools/css-tokenizer": ^3.0.3 + checksum: 10c0/acc026a6bd6d8c4c641fa5f9b4d77cd5dfa54c57c3278ae52329d96b5837723428dcb93c34db4062bbea2f45a98451119df06eaf39fd196aaf6368c59d799f20 + languageName: node + linkType: hard + +"@csstools/css-parser-algorithms@npm:^3.0.4": + version: 3.0.4 + resolution: "@csstools/css-parser-algorithms@npm:3.0.4" + peerDependencies: + "@csstools/css-tokenizer": ^3.0.3 + checksum: 10c0/d411f07765e14eede17bccc6bd4f90ff303694df09aabfede3fd104b2dfacfd4fe3697cd25ddad14684c850328f3f9420ebfa9f78380892492974db24ae47dbd + languageName: node + linkType: hard + +"@csstools/css-tokenizer@npm:^3.0.3": + version: 3.0.3 + resolution: "@csstools/css-tokenizer@npm:3.0.3" + checksum: 10c0/c31bf410e1244b942e71798e37c54639d040cb59e0121b21712b40015fced2b0fb1ffe588434c5f8923c9cd0017cfc1c1c8f3921abc94c96edf471aac2eba5e5 + languageName: node + linkType: hard + +"@csstools/media-query-list-parser@npm:^4.0.2": + version: 4.0.2 + resolution: "@csstools/media-query-list-parser@npm:4.0.2" + peerDependencies: + "@csstools/css-parser-algorithms": ^3.0.4 + "@csstools/css-tokenizer": ^3.0.3 + checksum: 10c0/5d008a70f5d4fd96224066a433f5cdefa76cfd78a74416a20d6d5b2bb1bc8282b140e8373015d807d4dadb91daf3deb73eb13f853ec4e0479d0cb92e80c6f20d + languageName: node + linkType: hard + +"@csstools/postcss-cascade-layers@npm:^5.0.1": + version: 5.0.1 + resolution: "@csstools/postcss-cascade-layers@npm:5.0.1" + dependencies: + "@csstools/selector-specificity": "npm:^5.0.0" + postcss-selector-parser: "npm:^7.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/5cc3c6f220d9216f7ab16e716a20d6db845f127c917521e6236342bfa871accd63eb662a04c1e24a28e396412dcb47b1c4abccc490b88e4010cd704d14a702f1 + languageName: node + linkType: hard + +"@csstools/postcss-color-function@npm:^4.0.9": + version: 4.0.9 + resolution: "@csstools/postcss-color-function@npm:4.0.9" + dependencies: + "@csstools/css-color-parser": "npm:^3.0.9" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + "@csstools/postcss-progressive-custom-properties": "npm:^4.0.1" + "@csstools/utilities": "npm:^2.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/11f7e8a1a4d6ff113706928eb4702454d18ee8d6b07166b98d33b499ba1933cdf034876101a9c3d22fcc009d054ca6fe2df1455daf391d5eb4af86fa6b530e75 + languageName: node + linkType: hard + +"@csstools/postcss-color-mix-function@npm:^3.0.9": + version: 3.0.9 + resolution: "@csstools/postcss-color-mix-function@npm:3.0.9" + dependencies: + "@csstools/css-color-parser": "npm:^3.0.9" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + "@csstools/postcss-progressive-custom-properties": "npm:^4.0.1" + "@csstools/utilities": "npm:^2.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/e26ecec62ac6085e8c46225e444bfb6082fffad1559005c0746226b22f995727c2e4ede0fb347e37c81e8f4f2ac9cf4de88800184a650638351f4cbfb8baf1d3 + languageName: node + linkType: hard + +"@csstools/postcss-content-alt-text@npm:^2.0.5": + version: 2.0.5 + resolution: "@csstools/postcss-content-alt-text@npm:2.0.5" + dependencies: + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + "@csstools/postcss-progressive-custom-properties": "npm:^4.0.1" + "@csstools/utilities": "npm:^2.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/fd0543e8195b1a1228fa41995d48bafafb635d32b0b80bdae8edfc3af7fcccb75aa472a072e552420ed0bd2f62d38e764483e3b9cca25a41dc2b450098b2436d + languageName: node + linkType: hard + +"@csstools/postcss-exponential-functions@npm:^2.0.8": + version: 2.0.8 + resolution: "@csstools/postcss-exponential-functions@npm:2.0.8" + dependencies: + "@csstools/css-calc": "npm:^2.1.3" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/8ed7cea3ab7b3fce351dc678c97aad0c12d9e9eae43c9793081fc09e2b3281a89a9d67e57df02d87b6af40839d582b5d08523a9f9bfabbd4e05e319995ae7789 + languageName: node + linkType: hard + +"@csstools/postcss-font-format-keywords@npm:^4.0.0": + version: 4.0.0 + resolution: "@csstools/postcss-font-format-keywords@npm:4.0.0" + dependencies: + "@csstools/utilities": "npm:^2.0.0" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/eb794fb95fefcac75e606d185255e601636af177866a317b0c6b6c375055e7240be53918229fd8d4bba00df01bedd2256bdac2b0ad4a4c2ec64f9d27cd6ff639 + languageName: node + linkType: hard + +"@csstools/postcss-gamut-mapping@npm:^2.0.9": + version: 2.0.9 + resolution: "@csstools/postcss-gamut-mapping@npm:2.0.9" + dependencies: + "@csstools/css-color-parser": "npm:^3.0.9" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/a5985c74bfa8c0fc4406cec807818e35949c73d62b6acd2901dbdd54a30afa7d2094f839ba550812bca76f0df95205492f271df4bab03f4b15115cf10b06b1b5 + languageName: node + linkType: hard + +"@csstools/postcss-gradients-interpolation-method@npm:^5.0.9": + version: 5.0.9 + resolution: "@csstools/postcss-gradients-interpolation-method@npm:5.0.9" + dependencies: + "@csstools/css-color-parser": "npm:^3.0.9" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + "@csstools/postcss-progressive-custom-properties": "npm:^4.0.1" + "@csstools/utilities": "npm:^2.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/b284558e38c096e1abfb04306717e23eec841ab23979479adbe165332db84503493b74e6d23d7752abec9327b9bfc343857e9a2393957d5bb9fd2e249570467e + languageName: node + linkType: hard + +"@csstools/postcss-hwb-function@npm:^4.0.9": + version: 4.0.9 + resolution: "@csstools/postcss-hwb-function@npm:4.0.9" + dependencies: + "@csstools/css-color-parser": "npm:^3.0.9" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + "@csstools/postcss-progressive-custom-properties": "npm:^4.0.1" + "@csstools/utilities": "npm:^2.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/31f9b3540e8af221e1716944ed8719f97ae335e5f866dfc96a3d81f042ef8975ce0d6163925cb32514f4903cb35177bf8d814a571da3f44b63244f88b6b395ad + languageName: node + linkType: hard + +"@csstools/postcss-ic-unit@npm:^4.0.1": + version: 4.0.1 + resolution: "@csstools/postcss-ic-unit@npm:4.0.1" + dependencies: + "@csstools/postcss-progressive-custom-properties": "npm:^4.0.1" + "@csstools/utilities": "npm:^2.0.0" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/1097cbdc385bcf32e15df1ed2946477c5927e34ebaf273297f1ae46aeaf2084c7a63858ba1a7a5e1f241be441968a2e1c6deb43ddb101708110c7f608b6fc525 + languageName: node + linkType: hard + +"@csstools/postcss-initial@npm:^2.0.1": + version: 2.0.1 + resolution: "@csstools/postcss-initial@npm:2.0.1" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/dbff7084ef4f1c4647efe2b147001daf172003c15b5e22689f0540d03c8d362f2a332cd9cf136e6c8dcda7564ee30492a4267ea188f72cb9c1000fb9bcfbfef8 + languageName: node + linkType: hard + +"@csstools/postcss-is-pseudo-class@npm:^5.0.1": + version: 5.0.1 + resolution: "@csstools/postcss-is-pseudo-class@npm:5.0.1" + dependencies: + "@csstools/selector-specificity": "npm:^5.0.0" + postcss-selector-parser: "npm:^7.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/3aaab18ebb2dcf5565efa79813eaa987d40de1e086765358524392a09631c68ad1ee952e6aff8f42513b2c18ab84891787e065fe287f696128498fc641520b6c + languageName: node + linkType: hard + +"@csstools/postcss-light-dark-function@npm:^2.0.8": + version: 2.0.8 + resolution: "@csstools/postcss-light-dark-function@npm:2.0.8" + dependencies: + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + "@csstools/postcss-progressive-custom-properties": "npm:^4.0.1" + "@csstools/utilities": "npm:^2.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/5494516f52d467dcace80495a4fb0fbd24207ae13634bb82b5c24e5d52e84665aebc28cd31fed8d96a41e91bf822185aba5a3d01680a140278c484741516c383 + languageName: node + linkType: hard + +"@csstools/postcss-logical-float-and-clear@npm:^3.0.0": + version: 3.0.0 + resolution: "@csstools/postcss-logical-float-and-clear@npm:3.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/71a20e8c37877bf68ae615d7bb93fc11b4f8da8be8b1dc1a6e0fc69e27f189712ed71436b8ed51fa69fdb98b8e6718df2b5f42f246c4d39badaf0e43020fcfd4 + languageName: node + linkType: hard + +"@csstools/postcss-logical-overflow@npm:^2.0.0": + version: 2.0.0 + resolution: "@csstools/postcss-logical-overflow@npm:2.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/0e103343d3ff8b34eef01b02355c5e010d272fd12d149a242026bb13ab1577b7f3a11fd4514be9342d96f73d61dac1f093a9bd36ece591753ed09a84eb7fca0a + languageName: node + linkType: hard + +"@csstools/postcss-logical-overscroll-behavior@npm:^2.0.0": + version: 2.0.0 + resolution: "@csstools/postcss-logical-overscroll-behavior@npm:2.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/1649601bb26f04d760fb5ebc42cdf414fa2a380b8ec22fe1c117f664c286665a786bd7bbda01b7e7567eaf3cc018a4f36a5c9805f6751cc497da223e0ffe9524 + languageName: node + linkType: hard + +"@csstools/postcss-logical-resize@npm:^3.0.0": + version: 3.0.0 + resolution: "@csstools/postcss-logical-resize@npm:3.0.0" + dependencies: + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/4f12efcaf5468ff359bb3f32f0f66034b9acc9b3ac21fcd2f30a1c8998fc653ebac0091f35c8b7e8dbfe6ccf595aee67f9b06a67adf45a8844e49a82d98b4386 + languageName: node + linkType: hard + +"@csstools/postcss-logical-viewport-units@npm:^3.0.3": + version: 3.0.3 + resolution: "@csstools/postcss-logical-viewport-units@npm:3.0.3" + dependencies: + "@csstools/css-tokenizer": "npm:^3.0.3" + "@csstools/utilities": "npm:^2.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/8ec746598d7ce8697c3dafd83cb3a319a90079ad755dd78e3ec92f4ba9ad849c4cdaba33b16e9dcbac1e9489b3d7c48262030110c20ce1d88cdacbe9f5987cec + languageName: node + linkType: hard + +"@csstools/postcss-media-minmax@npm:^2.0.8": + version: 2.0.8 + resolution: "@csstools/postcss-media-minmax@npm:2.0.8" + dependencies: + "@csstools/css-calc": "npm:^2.1.3" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + "@csstools/media-query-list-parser": "npm:^4.0.2" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/aff72b83b888d3d0dc6441f219f7c2833a4aa0f59493da22db1087fce32763bb765f068c6ddedc0ddc6fe79f1843e6b1375af07fa572494ecac91e59b1dc324f + languageName: node + linkType: hard + +"@csstools/postcss-media-queries-aspect-ratio-number-values@npm:^3.0.4": + version: 3.0.4 + resolution: "@csstools/postcss-media-queries-aspect-ratio-number-values@npm:3.0.4" + dependencies: + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + "@csstools/media-query-list-parser": "npm:^4.0.2" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/27dc9419b0f4315774647588f599348e7cc593984f59b414c51c910066501fd087cbe232deb762907c18bd21dd4184e7b6e0e0b730e5c72341ab9cc696c75739 + languageName: node + linkType: hard + +"@csstools/postcss-nested-calc@npm:^4.0.0": + version: 4.0.0 + resolution: "@csstools/postcss-nested-calc@npm:4.0.0" + dependencies: + "@csstools/utilities": "npm:^2.0.0" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/fb61512fa4909bdf0ee32a23e771145086c445f2208a737b52093c8adfab7362c56d3aeaf2a6e33ffcec067e99a07219775465d2fbb1a3ac30cdcfb278b218b7 + languageName: node + linkType: hard + +"@csstools/postcss-normalize-display-values@npm:^4.0.0": + version: 4.0.0 + resolution: "@csstools/postcss-normalize-display-values@npm:4.0.0" + dependencies: + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/d3a3a362b532163bd791f97348ef28b7a43baf01987c7702b06285e751cdc5ea3e3a2553f088260515b4d28263d5c475923d4d4780ecb4078ec66dff50c9e638 + languageName: node + linkType: hard + +"@csstools/postcss-oklab-function@npm:^4.0.9": + version: 4.0.9 + resolution: "@csstools/postcss-oklab-function@npm:4.0.9" + dependencies: + "@csstools/css-color-parser": "npm:^3.0.9" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + "@csstools/postcss-progressive-custom-properties": "npm:^4.0.1" + "@csstools/utilities": "npm:^2.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/9955aafc1dfc0bb5c886b2af3a82abed2d0a707c7654b2b49886db4c7153e1a016f327f4cc0d94b5b28f3b6227d9b3422c63555f78412433655beec90f37b388 + languageName: node + linkType: hard + +"@csstools/postcss-progressive-custom-properties@npm:^4.0.1": + version: 4.0.1 + resolution: "@csstools/postcss-progressive-custom-properties@npm:4.0.1" + dependencies: + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/a33e2a67ac29e731b112df9718596f703990492900bb118c513fcee7c0dc0a03f58248b2c5467b14de3e757f0ef2c6d97882254af784d8df390c633780bdf1f9 + languageName: node + linkType: hard + +"@csstools/postcss-random-function@npm:^2.0.0": + version: 2.0.0 + resolution: "@csstools/postcss-random-function@npm:2.0.0" + dependencies: + "@csstools/css-calc": "npm:^2.1.3" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/e0744b1472c4037b6491aac232d005659c0c65bc08af785cbdc50b722efaf71330e38607f4c88b54322338294f92ec68817ec1cd6e688953aa127f27cd2a5b00 + languageName: node + linkType: hard + +"@csstools/postcss-relative-color-syntax@npm:^3.0.9": + version: 3.0.9 + resolution: "@csstools/postcss-relative-color-syntax@npm:3.0.9" + dependencies: + "@csstools/css-color-parser": "npm:^3.0.9" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + "@csstools/postcss-progressive-custom-properties": "npm:^4.0.1" + "@csstools/utilities": "npm:^2.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/486e6c91b1042ca96e6e5c3d94d95e343101c7862e772aee16cd48607633f7c93c42dd23b5adc44cfa8dc8cb32ef3ba0f1f86e3f9a23be5c8744533d23128624 + languageName: node + linkType: hard + +"@csstools/postcss-scope-pseudo-class@npm:^4.0.1": + version: 4.0.1 + resolution: "@csstools/postcss-scope-pseudo-class@npm:4.0.1" + dependencies: + postcss-selector-parser: "npm:^7.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/6a0ca50fae655f4498200d1ce298ca794c85fbe2e3fd5d6419843254f055df5007a973e09b5f1e78e376c02b54278e411516c8d824300c68b265d3e5b311d7ee + languageName: node + linkType: hard + +"@csstools/postcss-sign-functions@npm:^1.1.3": + version: 1.1.3 + resolution: "@csstools/postcss-sign-functions@npm:1.1.3" + dependencies: + "@csstools/css-calc": "npm:^2.1.3" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/97998443191ab0ef370bdc413b4952fd86d9274700fade2a83cdf5d59f449a4a7001ceda35dd6cb45fefebafb0959be35c3fcfa0e3333c55b1658f514eb64e96 + languageName: node + linkType: hard + +"@csstools/postcss-stepped-value-functions@npm:^4.0.8": + version: 4.0.8 + resolution: "@csstools/postcss-stepped-value-functions@npm:4.0.8" + dependencies: + "@csstools/css-calc": "npm:^2.1.3" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/515630c3d25029a5e3789d665ae7f4a394245e5442c79d99f0fff018c698e356680aea0f937819a00cb78563ce2285a43ede50e32992cee4e062e413d22df44f + languageName: node + linkType: hard + +"@csstools/postcss-text-decoration-shorthand@npm:^4.0.2": + version: 4.0.2 + resolution: "@csstools/postcss-text-decoration-shorthand@npm:4.0.2" + dependencies: + "@csstools/color-helpers": "npm:^5.0.2" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/01e2f3717e7a42224dc1a746491c55a381cf208cb7588f0308eeefe730675be4c7bb56c0cc557e75999c981e67da7d0b0bb68610635752c89ef251ee435b9cac + languageName: node + linkType: hard + +"@csstools/postcss-trigonometric-functions@npm:^4.0.8": + version: 4.0.8 + resolution: "@csstools/postcss-trigonometric-functions@npm:4.0.8" + dependencies: + "@csstools/css-calc": "npm:^2.1.3" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/609d03b752aae1c57d671eaefe4cdbde0a1d62c4b4d3ffb8bb39a41ebb61fdade7c7892a2c7c365d2997d9f93f4f3bb4034801a5baf1988b274120b3ec0ba6ad + languageName: node + linkType: hard + +"@csstools/postcss-unset-value@npm:^4.0.0": + version: 4.0.0 + resolution: "@csstools/postcss-unset-value@npm:4.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/8424ac700ded5bf59d49310335896f10c069e2c3fc6a676b5d13ca5a6fb78689b948f50494df875da284c4c76651deb005eafba70d87e693274628c5a685abfa + languageName: node + linkType: hard + +"@csstools/selector-resolve-nested@npm:^3.0.0": + version: 3.0.0 + resolution: "@csstools/selector-resolve-nested@npm:3.0.0" + peerDependencies: + postcss-selector-parser: ^7.0.0 + checksum: 10c0/2b01c36b3fa81388d5bddd8db962766465d76b021a815c8bb5a48c3a42c530154cc155fc496707ade627dbba6745eb8ecd9fa840c1972133c0f7d8811e0a959d + languageName: node + linkType: hard + +"@csstools/selector-specificity@npm:^5.0.0": + version: 5.0.0 + resolution: "@csstools/selector-specificity@npm:5.0.0" + peerDependencies: + postcss-selector-parser: ^7.0.0 + checksum: 10c0/186b444cabcdcdeb553bfe021f80c58bfe9ef38dcc444f2b1f34a5aab9be063ab4e753022b2d5792049c041c28cfbb78e4b707ec398459300e402030d35c07eb + languageName: node + linkType: hard + +"@csstools/utilities@npm:^2.0.0": + version: 2.0.0 + resolution: "@csstools/utilities@npm:2.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/be5c31437b726928f64cd4bb3e47f5b90bfd2e2a69a8eaabd8e89cc6c0977e4f0f7ee48de50c8ed8b07e04e3956a02293247e0da3236d521fb2e836f88f65822 + languageName: node + linkType: hard + +"@discoveryjs/json-ext@npm:0.5.7": + version: 0.5.7 + resolution: "@discoveryjs/json-ext@npm:0.5.7" + checksum: 10c0/e10f1b02b78e4812646ddf289b7d9f2cb567d336c363b266bd50cd223cf3de7c2c74018d91cd2613041568397ef3a4a2b500aba588c6e5bd78c38374ba68f38c + languageName: node + linkType: hard + +"@docsearch/css@npm:3.9.0": + version: 3.9.0 + resolution: "@docsearch/css@npm:3.9.0" + checksum: 10c0/6300551e1cab7a5487063ec3581ae78ddaee3d93ec799556b451054448559b3ba849751b825fbd8b678367ef944bd82b3f11bc1d9e74e08e3cc48db40487b396 + languageName: node + linkType: hard + +"@docsearch/react@npm:^3.5.2, @docsearch/react@npm:^3.8.1": + version: 3.9.0 + resolution: "@docsearch/react@npm:3.9.0" + dependencies: + "@algolia/autocomplete-core": "npm:1.17.9" + "@algolia/autocomplete-preset-algolia": "npm:1.17.9" + "@docsearch/css": "npm:3.9.0" + algoliasearch: "npm:^5.14.2" + peerDependencies: + "@types/react": ">= 16.8.0 < 20.0.0" + react: ">= 16.8.0 < 20.0.0" + react-dom: ">= 16.8.0 < 20.0.0" + search-insights: ">= 1 < 3" + peerDependenciesMeta: + "@types/react": + optional: true + react: + optional: true + react-dom: + optional: true + search-insights: + optional: true + checksum: 10c0/5e737a5d9ef1daae1cd93e89870214c1ab0c36a3a2193e898db044bcc5d9de59f85228b2360ec0e8f10cdac7fd2fe3c6ec8a05d943ee7e17d6c1cef2e6e9ff2d + languageName: node + linkType: hard + +"@docusaurus/babel@npm:3.7.0": + version: 3.7.0 + resolution: "@docusaurus/babel@npm:3.7.0" + dependencies: + "@babel/core": "npm:^7.25.9" + "@babel/generator": "npm:^7.25.9" + "@babel/plugin-syntax-dynamic-import": "npm:^7.8.3" + "@babel/plugin-transform-runtime": "npm:^7.25.9" + "@babel/preset-env": "npm:^7.25.9" + "@babel/preset-react": "npm:^7.25.9" + "@babel/preset-typescript": "npm:^7.25.9" + "@babel/runtime": "npm:^7.25.9" + "@babel/runtime-corejs3": "npm:^7.25.9" + "@babel/traverse": "npm:^7.25.9" + "@docusaurus/logger": "npm:3.7.0" + "@docusaurus/utils": "npm:3.7.0" + babel-plugin-dynamic-import-node: "npm:^2.3.3" + fs-extra: "npm:^11.1.1" + tslib: "npm:^2.6.0" + checksum: 10c0/563ad2a95f690d8d0172acd64f96202d646072dde042edd4d80d39ad01b6fb026a2d5fe124d0e3fc3a7447120ebca15a0b1ef5f5ea431905cae80596584d722f + languageName: node + linkType: hard + +"@docusaurus/bundler@npm:3.7.0": + version: 3.7.0 + resolution: "@docusaurus/bundler@npm:3.7.0" + dependencies: + "@babel/core": "npm:^7.25.9" + "@docusaurus/babel": "npm:3.7.0" + "@docusaurus/cssnano-preset": "npm:3.7.0" + "@docusaurus/logger": "npm:3.7.0" + "@docusaurus/types": "npm:3.7.0" + "@docusaurus/utils": "npm:3.7.0" + babel-loader: "npm:^9.2.1" + clean-css: "npm:^5.3.2" + copy-webpack-plugin: "npm:^11.0.0" + css-loader: "npm:^6.8.1" + css-minimizer-webpack-plugin: "npm:^5.0.1" + cssnano: "npm:^6.1.2" + file-loader: "npm:^6.2.0" + html-minifier-terser: "npm:^7.2.0" + mini-css-extract-plugin: "npm:^2.9.1" + null-loader: "npm:^4.0.1" + postcss: "npm:^8.4.26" + postcss-loader: "npm:^7.3.3" + postcss-preset-env: "npm:^10.1.0" + react-dev-utils: "npm:^12.0.1" + terser-webpack-plugin: "npm:^5.3.9" + tslib: "npm:^2.6.0" + url-loader: "npm:^4.1.1" + webpack: "npm:^5.95.0" + webpackbar: "npm:^6.0.1" + peerDependencies: + "@docusaurus/faster": "*" + peerDependenciesMeta: + "@docusaurus/faster": + optional: true + checksum: 10c0/79e167e704c8fcae106a9edd7e7b8082d432bb634f51802cc92124e7409ddd227aa9c89ac46776a4fbee7c5729dac61656f5aeade997677e4076f3c0d837a2bb + languageName: node + linkType: hard + +"@docusaurus/core@npm:3.7.0, @docusaurus/core@npm:^3.7.0": + version: 3.7.0 + resolution: "@docusaurus/core@npm:3.7.0" + dependencies: + "@docusaurus/babel": "npm:3.7.0" + "@docusaurus/bundler": "npm:3.7.0" + "@docusaurus/logger": "npm:3.7.0" + "@docusaurus/mdx-loader": "npm:3.7.0" + "@docusaurus/utils": "npm:3.7.0" + "@docusaurus/utils-common": "npm:3.7.0" + "@docusaurus/utils-validation": "npm:3.7.0" + boxen: "npm:^6.2.1" + chalk: "npm:^4.1.2" + chokidar: "npm:^3.5.3" + cli-table3: "npm:^0.6.3" + combine-promises: "npm:^1.1.0" + commander: "npm:^5.1.0" + core-js: "npm:^3.31.1" + del: "npm:^6.1.1" + detect-port: "npm:^1.5.1" + escape-html: "npm:^1.0.3" + eta: "npm:^2.2.0" + eval: "npm:^0.1.8" + fs-extra: "npm:^11.1.1" + html-tags: "npm:^3.3.1" + html-webpack-plugin: "npm:^5.6.0" + leven: "npm:^3.1.0" + lodash: "npm:^4.17.21" + p-map: "npm:^4.0.0" + prompts: "npm:^2.4.2" + react-dev-utils: "npm:^12.0.1" + react-helmet-async: "npm:@slorber/react-helmet-async@1.3.0" + react-loadable: "npm:@docusaurus/react-loadable@6.0.0" + react-loadable-ssr-addon-v5-slorber: "npm:^1.0.1" + react-router: "npm:^5.3.4" + react-router-config: "npm:^5.1.1" + react-router-dom: "npm:^5.3.4" + semver: "npm:^7.5.4" + serve-handler: "npm:^6.1.6" + shelljs: "npm:^0.8.5" + tslib: "npm:^2.6.0" + update-notifier: "npm:^6.0.2" + webpack: "npm:^5.95.0" + webpack-bundle-analyzer: "npm:^4.10.2" + webpack-dev-server: "npm:^4.15.2" + webpack-merge: "npm:^6.0.1" + peerDependencies: + "@mdx-js/react": ^3.0.0 + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + bin: + docusaurus: bin/docusaurus.mjs + checksum: 10c0/2b1034d27107da820f71c15d430aac308e9d63c2c144a1b2aff96927b4e703bd6abaae61a8a3434f5bb4eb25ca34ed793b2b5e6ddb9d2b41ce6e98332b281da4 + languageName: node + linkType: hard + +"@docusaurus/cssnano-preset@npm:3.7.0": + version: 3.7.0 + resolution: "@docusaurus/cssnano-preset@npm:3.7.0" + dependencies: + cssnano-preset-advanced: "npm:^6.1.2" + postcss: "npm:^8.4.38" + postcss-sort-media-queries: "npm:^5.2.0" + tslib: "npm:^2.6.0" + checksum: 10c0/e6324c50bb946da60692ec387ff1708d3e0ec91f60add539412ba92d92278b843b85c66b861dcb0f089697d5e42698b5c9786f9264cae8835789126c6451911a + languageName: node + linkType: hard + +"@docusaurus/logger@npm:3.7.0": + version: 3.7.0 + resolution: "@docusaurus/logger@npm:3.7.0" + dependencies: + chalk: "npm:^4.1.2" + tslib: "npm:^2.6.0" + checksum: 10c0/48f1b13d5f17d27515313f593f2d23b6efe29038dddaf914fd2bec9e8b598d2d7f972d8ae7b09827c9874835a7984101208287c0b93dfa3fe8c5357198378214 + languageName: node + linkType: hard + +"@docusaurus/mdx-loader@npm:3.7.0": + version: 3.7.0 + resolution: "@docusaurus/mdx-loader@npm:3.7.0" + dependencies: + "@docusaurus/logger": "npm:3.7.0" + "@docusaurus/utils": "npm:3.7.0" + "@docusaurus/utils-validation": "npm:3.7.0" + "@mdx-js/mdx": "npm:^3.0.0" + "@slorber/remark-comment": "npm:^1.0.0" + escape-html: "npm:^1.0.3" + estree-util-value-to-estree: "npm:^3.0.1" + file-loader: "npm:^6.2.0" + fs-extra: "npm:^11.1.1" + image-size: "npm:^1.0.2" + mdast-util-mdx: "npm:^3.0.0" + mdast-util-to-string: "npm:^4.0.0" + rehype-raw: "npm:^7.0.0" + remark-directive: "npm:^3.0.0" + remark-emoji: "npm:^4.0.0" + remark-frontmatter: "npm:^5.0.0" + remark-gfm: "npm:^4.0.0" + stringify-object: "npm:^3.3.0" + tslib: "npm:^2.6.0" + unified: "npm:^11.0.3" + unist-util-visit: "npm:^5.0.0" + url-loader: "npm:^4.1.1" + vfile: "npm:^6.0.1" + webpack: "npm:^5.88.1" + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + checksum: 10c0/08b397334b46230486cfd3b67d5d760087902b376201f2a870d33c9228671fe81d53358bb0fa1f441d69a844685ff60315f414ce717c5801dc7d7bb362dcf1c6 + languageName: node + linkType: hard + +"@docusaurus/module-type-aliases@npm:3.7.0, @docusaurus/module-type-aliases@npm:^3.7.0": + version: 3.7.0 + resolution: "@docusaurus/module-type-aliases@npm:3.7.0" + dependencies: + "@docusaurus/types": "npm:3.7.0" + "@types/history": "npm:^4.7.11" + "@types/react": "npm:*" + "@types/react-router-config": "npm:*" + "@types/react-router-dom": "npm:*" + react-helmet-async: "npm:@slorber/react-helmet-async@*" + react-loadable: "npm:@docusaurus/react-loadable@6.0.0" + peerDependencies: + react: "*" + react-dom: "*" + checksum: 10c0/fca90450afb0aaafbae20b70adc2b35af81fff20a1d0fcf3c652b0200ac9be870add257e577e227854b20b9ca375fa53f99242435d2576dfeb7ee791d3fb25ae + languageName: node + linkType: hard + +"@docusaurus/plugin-client-redirects@npm:^3.7.0": + version: 3.7.0 + resolution: "@docusaurus/plugin-client-redirects@npm:3.7.0" + dependencies: + "@docusaurus/core": "npm:3.7.0" + "@docusaurus/logger": "npm:3.7.0" + "@docusaurus/utils": "npm:3.7.0" + "@docusaurus/utils-common": "npm:3.7.0" + "@docusaurus/utils-validation": "npm:3.7.0" + eta: "npm:^2.2.0" + fs-extra: "npm:^11.1.1" + lodash: "npm:^4.17.21" + tslib: "npm:^2.6.0" + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + checksum: 10c0/ecdd5061a683541125f14b0f1e5e1afcecefc358bf16e1b71c8e4c66ae8f70f03fd18f00fcbb3525229c8692f8976158eaee1791a68baa7451047d521d619b95 + languageName: node + linkType: hard + +"@docusaurus/plugin-content-blog@npm:3.7.0": + version: 3.7.0 + resolution: "@docusaurus/plugin-content-blog@npm:3.7.0" + dependencies: + "@docusaurus/core": "npm:3.7.0" + "@docusaurus/logger": "npm:3.7.0" + "@docusaurus/mdx-loader": "npm:3.7.0" + "@docusaurus/theme-common": "npm:3.7.0" + "@docusaurus/types": "npm:3.7.0" + "@docusaurus/utils": "npm:3.7.0" + "@docusaurus/utils-common": "npm:3.7.0" + "@docusaurus/utils-validation": "npm:3.7.0" + cheerio: "npm:1.0.0-rc.12" + feed: "npm:^4.2.2" + fs-extra: "npm:^11.1.1" + lodash: "npm:^4.17.21" + reading-time: "npm:^1.5.0" + srcset: "npm:^4.0.0" + tslib: "npm:^2.6.0" + unist-util-visit: "npm:^5.0.0" + utility-types: "npm:^3.10.0" + webpack: "npm:^5.88.1" + peerDependencies: + "@docusaurus/plugin-content-docs": "*" + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + checksum: 10c0/8eb1e4f673763a3d5e727cbfe867b5334c67c65ca0804bcd81b818ca62e9ff33cf9c0db013958a40c590327bf4b8037cd5d510f39bc699e6ede8f02680f3af1b + languageName: node + linkType: hard + +"@docusaurus/plugin-content-docs@npm:3.7.0, @docusaurus/plugin-content-docs@npm:^3.7.0": + version: 3.7.0 + resolution: "@docusaurus/plugin-content-docs@npm:3.7.0" + dependencies: + "@docusaurus/core": "npm:3.7.0" + "@docusaurus/logger": "npm:3.7.0" + "@docusaurus/mdx-loader": "npm:3.7.0" + "@docusaurus/module-type-aliases": "npm:3.7.0" + "@docusaurus/theme-common": "npm:3.7.0" + "@docusaurus/types": "npm:3.7.0" + "@docusaurus/utils": "npm:3.7.0" + "@docusaurus/utils-common": "npm:3.7.0" + "@docusaurus/utils-validation": "npm:3.7.0" + "@types/react-router-config": "npm:^5.0.7" + combine-promises: "npm:^1.1.0" + fs-extra: "npm:^11.1.1" + js-yaml: "npm:^4.1.0" + lodash: "npm:^4.17.21" + tslib: "npm:^2.6.0" + utility-types: "npm:^3.10.0" + webpack: "npm:^5.88.1" + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + checksum: 10c0/eab3810b1b34d0b037cd802747892ece163d818013b4c33a9db40f973df05a6c12a3120f746afa2648b9c2c2b1ec711d6c4552a4cc8e2d904522c355cc02de71 + languageName: node + linkType: hard + +"@docusaurus/plugin-content-pages@npm:3.7.0": + version: 3.7.0 + resolution: "@docusaurus/plugin-content-pages@npm:3.7.0" + dependencies: + "@docusaurus/core": "npm:3.7.0" + "@docusaurus/mdx-loader": "npm:3.7.0" + "@docusaurus/types": "npm:3.7.0" + "@docusaurus/utils": "npm:3.7.0" + "@docusaurus/utils-validation": "npm:3.7.0" + fs-extra: "npm:^11.1.1" + tslib: "npm:^2.6.0" + webpack: "npm:^5.88.1" + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + checksum: 10c0/7f1df2f4eb9c4f74af1bfbd7a3fed9874e1bdc06a9d9772584e3f121d63c9686bc6e1c2d9e3304a95cb24b8f12db342ac28132fe08c0082a2cf925a347dd8115 + languageName: node + linkType: hard + +"@docusaurus/plugin-debug@npm:3.7.0": + version: 3.7.0 + resolution: "@docusaurus/plugin-debug@npm:3.7.0" + dependencies: + "@docusaurus/core": "npm:3.7.0" + "@docusaurus/types": "npm:3.7.0" + "@docusaurus/utils": "npm:3.7.0" + fs-extra: "npm:^11.1.1" + react-json-view-lite: "npm:^1.2.0" + tslib: "npm:^2.6.0" + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + checksum: 10c0/968a1c14ebe7fed9775269f1b6b86dbe09efbf48d2f0c9ac9ee5572fda9d22b41c970001b58b947d078419b42af6d70f60e87c1d8f24f92c7ce422f364ec32eb + languageName: node + linkType: hard + +"@docusaurus/plugin-google-analytics@npm:3.7.0": + version: 3.7.0 + resolution: "@docusaurus/plugin-google-analytics@npm:3.7.0" + dependencies: + "@docusaurus/core": "npm:3.7.0" + "@docusaurus/types": "npm:3.7.0" + "@docusaurus/utils-validation": "npm:3.7.0" + tslib: "npm:^2.6.0" + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + checksum: 10c0/f3881ac270ee38f582563f679d33e4755bfb24c5bf57f31185d8e7caebf7e9e73a480e57c7db88e4f3b15c0176a6b092919b1e4bed078fad58333076aeb116cf + languageName: node + linkType: hard + +"@docusaurus/plugin-google-gtag@npm:3.7.0": + version: 3.7.0 + resolution: "@docusaurus/plugin-google-gtag@npm:3.7.0" + dependencies: + "@docusaurus/core": "npm:3.7.0" + "@docusaurus/types": "npm:3.7.0" + "@docusaurus/utils-validation": "npm:3.7.0" + "@types/gtag.js": "npm:^0.0.12" + tslib: "npm:^2.6.0" + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + checksum: 10c0/899429408e2ff95504f8e9c79ffa23877fb717e12746d94d7e96d448a539f04f848b6111b99a15cd08af47b792d0ae2d985fd4af342263b713116cf835058f43 + languageName: node + linkType: hard + +"@docusaurus/plugin-google-tag-manager@npm:3.7.0": + version: 3.7.0 + resolution: "@docusaurus/plugin-google-tag-manager@npm:3.7.0" + dependencies: + "@docusaurus/core": "npm:3.7.0" + "@docusaurus/types": "npm:3.7.0" + "@docusaurus/utils-validation": "npm:3.7.0" + tslib: "npm:^2.6.0" + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + checksum: 10c0/9980d71196835e25f548ebbeac18181914e23c6f07b0441659a12bdfd4fbc15f41b9bfe97b314aae2d8e0e49c0cfd9f38f372452b0a92f3b9a48d2568104f0b9 + languageName: node + linkType: hard + +"@docusaurus/plugin-sitemap@npm:3.7.0": + version: 3.7.0 + resolution: "@docusaurus/plugin-sitemap@npm:3.7.0" + dependencies: + "@docusaurus/core": "npm:3.7.0" + "@docusaurus/logger": "npm:3.7.0" + "@docusaurus/types": "npm:3.7.0" + "@docusaurus/utils": "npm:3.7.0" + "@docusaurus/utils-common": "npm:3.7.0" + "@docusaurus/utils-validation": "npm:3.7.0" + fs-extra: "npm:^11.1.1" + sitemap: "npm:^7.1.1" + tslib: "npm:^2.6.0" + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + checksum: 10c0/06cce94a8bb81adb87903776086c16fc77029c418b7f07d96506d6ed4d569a7ce3a816627d74f15c1c6a1a98f0ce278c9fc12ca05246c8af8742c12d3b145f30 + languageName: node + linkType: hard + +"@docusaurus/plugin-svgr@npm:3.7.0": + version: 3.7.0 + resolution: "@docusaurus/plugin-svgr@npm:3.7.0" + dependencies: + "@docusaurus/core": "npm:3.7.0" + "@docusaurus/types": "npm:3.7.0" + "@docusaurus/utils": "npm:3.7.0" + "@docusaurus/utils-validation": "npm:3.7.0" + "@svgr/core": "npm:8.1.0" + "@svgr/webpack": "npm:^8.1.0" + tslib: "npm:^2.6.0" + webpack: "npm:^5.88.1" + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + checksum: 10c0/c776758b43db2dfeef234197c98345efb4d28a57f29d0158ea0a3f542391de063cd4f535f15f150d0311aee9de000d126b5730cf1e143120baa6c5a8ea1b527f + languageName: node + linkType: hard + +"@docusaurus/preset-classic@npm:^3.7.0": + version: 3.7.0 + resolution: "@docusaurus/preset-classic@npm:3.7.0" + dependencies: + "@docusaurus/core": "npm:3.7.0" + "@docusaurus/plugin-content-blog": "npm:3.7.0" + "@docusaurus/plugin-content-docs": "npm:3.7.0" + "@docusaurus/plugin-content-pages": "npm:3.7.0" + "@docusaurus/plugin-debug": "npm:3.7.0" + "@docusaurus/plugin-google-analytics": "npm:3.7.0" + "@docusaurus/plugin-google-gtag": "npm:3.7.0" + "@docusaurus/plugin-google-tag-manager": "npm:3.7.0" + "@docusaurus/plugin-sitemap": "npm:3.7.0" + "@docusaurus/plugin-svgr": "npm:3.7.0" + "@docusaurus/theme-classic": "npm:3.7.0" + "@docusaurus/theme-common": "npm:3.7.0" + "@docusaurus/theme-search-algolia": "npm:3.7.0" + "@docusaurus/types": "npm:3.7.0" + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + checksum: 10c0/25a77c337168f32ce7d6df9b9222c1b21dc3414506841bd4b72be058e10ccfac3ca4e27a392f14f2b591f36815131ed2240795b77d566630980b92952c41897a + languageName: node + linkType: hard + +"@docusaurus/theme-classic@npm:3.7.0, @docusaurus/theme-classic@npm:^3.7.0": + version: 3.7.0 + resolution: "@docusaurus/theme-classic@npm:3.7.0" + dependencies: + "@docusaurus/core": "npm:3.7.0" + "@docusaurus/logger": "npm:3.7.0" + "@docusaurus/mdx-loader": "npm:3.7.0" + "@docusaurus/module-type-aliases": "npm:3.7.0" + "@docusaurus/plugin-content-blog": "npm:3.7.0" + "@docusaurus/plugin-content-docs": "npm:3.7.0" + "@docusaurus/plugin-content-pages": "npm:3.7.0" + "@docusaurus/theme-common": "npm:3.7.0" + "@docusaurus/theme-translations": "npm:3.7.0" + "@docusaurus/types": "npm:3.7.0" + "@docusaurus/utils": "npm:3.7.0" + "@docusaurus/utils-common": "npm:3.7.0" + "@docusaurus/utils-validation": "npm:3.7.0" + "@mdx-js/react": "npm:^3.0.0" + clsx: "npm:^2.0.0" + copy-text-to-clipboard: "npm:^3.2.0" + infima: "npm:0.2.0-alpha.45" + lodash: "npm:^4.17.21" + nprogress: "npm:^0.2.0" + postcss: "npm:^8.4.26" + prism-react-renderer: "npm:^2.3.0" + prismjs: "npm:^1.29.0" + react-router-dom: "npm:^5.3.4" + rtlcss: "npm:^4.1.0" + tslib: "npm:^2.6.0" + utility-types: "npm:^3.10.0" + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + checksum: 10c0/e2ec1fdaedc71add6ae1e8ee83ae32132c679afe407850185fbbec82f96c66a3befd506df73a0de0d9e03333c04801017f4c668e63851cb6e814f2ddf6973ad0 + languageName: node + linkType: hard + +"@docusaurus/theme-common@npm:3.7.0, @docusaurus/theme-common@npm:^3.7.0": + version: 3.7.0 + resolution: "@docusaurus/theme-common@npm:3.7.0" + dependencies: + "@docusaurus/mdx-loader": "npm:3.7.0" + "@docusaurus/module-type-aliases": "npm:3.7.0" + "@docusaurus/utils": "npm:3.7.0" + "@docusaurus/utils-common": "npm:3.7.0" + "@types/history": "npm:^4.7.11" + "@types/react": "npm:*" + "@types/react-router-config": "npm:*" + clsx: "npm:^2.0.0" + parse-numeric-range: "npm:^1.3.0" + prism-react-renderer: "npm:^2.3.0" + tslib: "npm:^2.6.0" + utility-types: "npm:^3.10.0" + peerDependencies: + "@docusaurus/plugin-content-docs": "*" + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + checksum: 10c0/4b5ba21d2d5807a9582cd1fe5280fa0637a7debb8313253793d35435ce92e119406d47564766ec0bf0f93d7d2f8da412883ea4b16972f79bee5bda20ac6f354e + languageName: node + linkType: hard + +"@docusaurus/theme-search-algolia@npm:3.7.0, @docusaurus/theme-search-algolia@npm:^3.7.0": + version: 3.7.0 + resolution: "@docusaurus/theme-search-algolia@npm:3.7.0" + dependencies: + "@docsearch/react": "npm:^3.8.1" + "@docusaurus/core": "npm:3.7.0" + "@docusaurus/logger": "npm:3.7.0" + "@docusaurus/plugin-content-docs": "npm:3.7.0" + "@docusaurus/theme-common": "npm:3.7.0" + "@docusaurus/theme-translations": "npm:3.7.0" + "@docusaurus/utils": "npm:3.7.0" + "@docusaurus/utils-validation": "npm:3.7.0" + algoliasearch: "npm:^5.17.1" + algoliasearch-helper: "npm:^3.22.6" + clsx: "npm:^2.0.0" + eta: "npm:^2.2.0" + fs-extra: "npm:^11.1.1" + lodash: "npm:^4.17.21" + tslib: "npm:^2.6.0" + utility-types: "npm:^3.10.0" + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + checksum: 10c0/4766e2571b64cc895e7ab3af750e9158527f3ebe238605f325defe755ddd938af9b01d711b932b3c6639b31b2d69a6f360b2870fa1104599829c276a30457f6e + languageName: node + linkType: hard + +"@docusaurus/theme-translations@npm:3.7.0": + version: 3.7.0 + resolution: "@docusaurus/theme-translations@npm:3.7.0" + dependencies: + fs-extra: "npm:^11.1.1" + tslib: "npm:^2.6.0" + checksum: 10c0/47721f98fdaa34004e2df555e89dd4d751942c9d8efe2df3816bc6b761a068058e31887086a1d1498394fc53c859340b6ce9e15ee65e926e05c7c1e2429497ad + languageName: node + linkType: hard + +"@docusaurus/tsconfig@npm:^3.7.0": + version: 3.7.0 + resolution: "@docusaurus/tsconfig@npm:3.7.0" + checksum: 10c0/22a076fa3cf6da25a76f87fbe5b37c09997f5a8729fdc1a69c0c7955dff9f9850f16dc1de8c6d5096d258a95c428fb8839b252b9dbaa648acb7de8a0e5889dea + languageName: node + linkType: hard + +"@docusaurus/types@npm:3.7.0, @docusaurus/types@npm:^3.7.0": + version: 3.7.0 + resolution: "@docusaurus/types@npm:3.7.0" + dependencies: + "@mdx-js/mdx": "npm:^3.0.0" + "@types/history": "npm:^4.7.11" + "@types/react": "npm:*" + commander: "npm:^5.1.0" + joi: "npm:^17.9.2" + react-helmet-async: "npm:@slorber/react-helmet-async@1.3.0" + utility-types: "npm:^3.10.0" + webpack: "npm:^5.95.0" + webpack-merge: "npm:^5.9.0" + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + checksum: 10c0/256d3b579e0f663096d915cfd34851564a243dd3b587901f0b8de7988ea021bf4c9f9bcb9d632f52cddb37f53959be8d93728421ddbba7f9c98a36f0dec454cd + languageName: node + linkType: hard + +"@docusaurus/utils-common@npm:3.7.0": + version: 3.7.0 + resolution: "@docusaurus/utils-common@npm:3.7.0" + dependencies: + "@docusaurus/types": "npm:3.7.0" + tslib: "npm:^2.6.0" + checksum: 10c0/a02dc936f256ceb1a95e57556d556bd57576124eb903928fccfa19e3fa098ee5a2e637663b372c8f797c50ab9df7c0e94f59b3b728198a408fa191689f2aa7e7 + languageName: node + linkType: hard + +"@docusaurus/utils-validation@npm:3.7.0, @docusaurus/utils-validation@npm:^3": + version: 3.7.0 + resolution: "@docusaurus/utils-validation@npm:3.7.0" + dependencies: + "@docusaurus/logger": "npm:3.7.0" + "@docusaurus/utils": "npm:3.7.0" + "@docusaurus/utils-common": "npm:3.7.0" + fs-extra: "npm:^11.2.0" + joi: "npm:^17.9.2" + js-yaml: "npm:^4.1.0" + lodash: "npm:^4.17.21" + tslib: "npm:^2.6.0" + checksum: 10c0/f0b67f93879b23c3238f66dde0361999399e40a61bb2531ba044939d136ed112e4d0304a598f718942e897d6abd3fd4e75d03d21e559fc2197a0d6324926668f + languageName: node + linkType: hard + +"@docusaurus/utils@npm:3.7.0": + version: 3.7.0 + resolution: "@docusaurus/utils@npm:3.7.0" + dependencies: + "@docusaurus/logger": "npm:3.7.0" + "@docusaurus/types": "npm:3.7.0" + "@docusaurus/utils-common": "npm:3.7.0" + escape-string-regexp: "npm:^4.0.0" + file-loader: "npm:^6.2.0" + fs-extra: "npm:^11.1.1" + github-slugger: "npm:^1.5.0" + globby: "npm:^11.1.0" + gray-matter: "npm:^4.0.3" + jiti: "npm:^1.20.0" + js-yaml: "npm:^4.1.0" + lodash: "npm:^4.17.21" + micromatch: "npm:^4.0.5" + prompts: "npm:^2.4.2" + resolve-pathname: "npm:^3.0.0" + shelljs: "npm:^0.8.5" + tslib: "npm:^2.6.0" + url-loader: "npm:^4.1.1" + utility-types: "npm:^3.10.0" + webpack: "npm:^5.88.1" + checksum: 10c0/8d6dbb5c776e0cbf0c8437a81d0d97ff6f51ca259c9d3baa0e1b26849e48a016d02fb2ec80290dc2b8e434ca3dd1388ad4b44de2d101d5edea50de64531ccef1 + languageName: node + linkType: hard + +"@gracefullight/docusaurus-plugin-vercel-analytics@npm:^1.0.0": + version: 1.0.1 + resolution: "@gracefullight/docusaurus-plugin-vercel-analytics@npm:1.0.1" + dependencies: + "@docusaurus/utils-validation": "npm:^3" + checksum: 10c0/b17c05a16bdfff2fca8ce41001f6fe7cff0ce571ce18a9c484f67e6f51732a1f0589620750b8fc3b484d6b5db993d5904245dbcb4aeae010b84456e72c795f62 + languageName: node + linkType: hard + +"@hapi/hoek@npm:^9.0.0, @hapi/hoek@npm:^9.3.0": + version: 9.3.0 + resolution: "@hapi/hoek@npm:9.3.0" + checksum: 10c0/a096063805051fb8bba4c947e293c664b05a32b47e13bc654c0dd43813a1cec993bdd8f29ceb838020299e1d0f89f68dc0d62a603c13c9cc8541963f0beca055 + languageName: node + linkType: hard + +"@hapi/topo@npm:^5.1.0": + version: 5.1.0 + resolution: "@hapi/topo@npm:5.1.0" + dependencies: + "@hapi/hoek": "npm:^9.0.0" + checksum: 10c0/b16b06d9357947149e032bdf10151eb71aea8057c79c4046bf32393cb89d0d0f7ca501c40c0f7534a5ceca078de0700d2257ac855c15e59fe4e00bba2f25c86f + languageName: node + linkType: hard + +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + dependencies: + string-width: "npm:^5.1.2" + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: "npm:^7.0.1" + strip-ansi-cjs: "npm:strip-ansi@^6.0.1" + wrap-ansi: "npm:^8.1.0" + wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" + checksum: 10c0/b1bf42535d49f11dc137f18d5e4e63a28c5569de438a221c369483731e9dac9fb797af554e8bf02b6192d1e5eba6e6402cf93900c3d0ac86391d00d04876789e + languageName: node + linkType: hard + +"@isaacs/fs-minipass@npm:^4.0.0": + version: 4.0.1 + resolution: "@isaacs/fs-minipass@npm:4.0.1" + dependencies: + minipass: "npm:^7.0.4" + checksum: 10c0/c25b6dc1598790d5b55c0947a9b7d111cfa92594db5296c3b907e2f533c033666f692a3939eadac17b1c7c40d362d0b0635dc874cbfe3e70db7c2b07cc97a5d2 + languageName: node + linkType: hard + +"@jest/schemas@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/schemas@npm:29.6.3" + dependencies: + "@sinclair/typebox": "npm:^0.27.8" + checksum: 10c0/b329e89cd5f20b9278ae1233df74016ebf7b385e0d14b9f4c1ad18d096c4c19d1e687aa113a9c976b16ec07f021ae53dea811fb8c1248a50ac34fbe009fdf6be + languageName: node + linkType: hard + +"@jest/types@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/types@npm:29.6.3" + dependencies: + "@jest/schemas": "npm:^29.6.3" + "@types/istanbul-lib-coverage": "npm:^2.0.0" + "@types/istanbul-reports": "npm:^3.0.0" + "@types/node": "npm:*" + "@types/yargs": "npm:^17.0.8" + chalk: "npm:^4.0.0" + checksum: 10c0/ea4e493dd3fb47933b8ccab201ae573dcc451f951dc44ed2a86123cd8541b82aa9d2b1031caf9b1080d6673c517e2dcc25a44b2dc4f3fbc37bfc965d444888c0 + languageName: node + linkType: hard + +"@jridgewell/gen-mapping@npm:^0.3.5": + version: 0.3.8 + resolution: "@jridgewell/gen-mapping@npm:0.3.8" + dependencies: + "@jridgewell/set-array": "npm:^1.2.1" + "@jridgewell/sourcemap-codec": "npm:^1.4.10" + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: 10c0/c668feaf86c501d7c804904a61c23c67447b2137b813b9ce03eca82cb9d65ac7006d766c218685d76e3d72828279b6ee26c347aa1119dab23fbaf36aed51585a + languageName: node + linkType: hard + +"@jridgewell/resolve-uri@npm:^3.1.0": + version: 3.1.2 + resolution: "@jridgewell/resolve-uri@npm:3.1.2" + checksum: 10c0/d502e6fb516b35032331406d4e962c21fe77cdf1cbdb49c6142bcbd9e30507094b18972778a6e27cbad756209cfe34b1a27729e6fa08a2eb92b33943f680cf1e + languageName: node + linkType: hard + +"@jridgewell/set-array@npm:^1.2.1": + version: 1.2.1 + resolution: "@jridgewell/set-array@npm:1.2.1" + checksum: 10c0/2a5aa7b4b5c3464c895c802d8ae3f3d2b92fcbe84ad12f8d0bfbb1f5ad006717e7577ee1fd2eac00c088abe486c7adb27976f45d2941ff6b0b92b2c3302c60f4 + languageName: node + linkType: hard + +"@jridgewell/source-map@npm:^0.3.3": + version: 0.3.6 + resolution: "@jridgewell/source-map@npm:0.3.6" + dependencies: + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.25" + checksum: 10c0/6a4ecc713ed246ff8e5bdcc1ef7c49aaa93f7463d948ba5054dda18b02dcc6a055e2828c577bcceee058f302ce1fc95595713d44f5c45e43d459f88d267f2f04 + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14": + version: 1.5.0 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" + checksum: 10c0/2eb864f276eb1096c3c11da3e9bb518f6d9fc0023c78344cdc037abadc725172c70314bdb360f2d4b7bffec7f5d657ce006816bc5d4ecb35e61b66132db00c18 + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25": + version: 0.3.25 + resolution: "@jridgewell/trace-mapping@npm:0.3.25" + dependencies: + "@jridgewell/resolve-uri": "npm:^3.1.0" + "@jridgewell/sourcemap-codec": "npm:^1.4.14" + checksum: 10c0/3d1ce6ebc69df9682a5a8896b414c6537e428a1d68b02fcc8363b04284a8ca0df04d0ee3013132252ab14f2527bc13bea6526a912ecb5658f0e39fd2860b4df4 + languageName: node + linkType: hard + +"@leichtgewicht/ip-codec@npm:^2.0.1": + version: 2.0.5 + resolution: "@leichtgewicht/ip-codec@npm:2.0.5" + checksum: 10c0/14a0112bd59615eef9e3446fea018045720cd3da85a98f801a685a818b0d96ef2a1f7227e8d271def546b2e2a0fe91ef915ba9dc912ab7967d2317b1a051d66b + languageName: node + linkType: hard + +"@mdx-js/mdx@npm:^3.0.0": + version: 3.1.0 + resolution: "@mdx-js/mdx@npm:3.1.0" + dependencies: + "@types/estree": "npm:^1.0.0" + "@types/estree-jsx": "npm:^1.0.0" + "@types/hast": "npm:^3.0.0" + "@types/mdx": "npm:^2.0.0" + collapse-white-space: "npm:^2.0.0" + devlop: "npm:^1.0.0" + estree-util-is-identifier-name: "npm:^3.0.0" + estree-util-scope: "npm:^1.0.0" + estree-walker: "npm:^3.0.0" + hast-util-to-jsx-runtime: "npm:^2.0.0" + markdown-extensions: "npm:^2.0.0" + recma-build-jsx: "npm:^1.0.0" + recma-jsx: "npm:^1.0.0" + recma-stringify: "npm:^1.0.0" + rehype-recma: "npm:^1.0.0" + remark-mdx: "npm:^3.0.0" + remark-parse: "npm:^11.0.0" + remark-rehype: "npm:^11.0.0" + source-map: "npm:^0.7.0" + unified: "npm:^11.0.0" + unist-util-position-from-estree: "npm:^2.0.0" + unist-util-stringify-position: "npm:^4.0.0" + unist-util-visit: "npm:^5.0.0" + vfile: "npm:^6.0.0" + checksum: 10c0/e586ab772dcfee2bab334d5aac54c711e6d6d550085271c38a49c629b3e3954b5f41f488060761284a5e00649d0638d6aba6c0a7c66f91db80dee0ccc304ab32 + languageName: node + linkType: hard + +"@mdx-js/react@npm:^3.0.0": + version: 3.1.0 + resolution: "@mdx-js/react@npm:3.1.0" + dependencies: + "@types/mdx": "npm:^2.0.0" + peerDependencies: + "@types/react": ">=16" + react: ">=16" + checksum: 10c0/381ed1211ba2b8491bf0ad9ef0d8d1badcdd114e1931d55d44019d4b827cc2752586708f9c7d2f9c3244150ed81f1f671a6ca95fae0edd5797fb47a22e06ceca + languageName: node + linkType: hard + +"@noble/curves@npm:^1.3.0": + version: 1.9.7 + resolution: "@noble/curves@npm:1.9.7" + dependencies: + "@noble/hashes": "npm:1.8.0" + checksum: 10c0/150014751ebe8ca06a8654ca2525108452ea9ee0be23430332769f06808cddabfe84f248b6dbf836916bc869c27c2092957eec62c7506d68a1ed0a624017c2a3 + languageName: node + linkType: hard + +"@noble/hashes@npm:1.8.0, @noble/hashes@npm:^1.3.1, @noble/hashes@npm:^1.3.3": + version: 1.8.0 + resolution: "@noble/hashes@npm:1.8.0" + checksum: 10c0/06a0b52c81a6fa7f04d67762e08b2c476a00285858150caeaaff4037356dd5e119f45b2a530f638b77a5eeca013168ec1b655db41bae3236cb2e9d511484fc77 + languageName: node + linkType: hard + +"@nodelib/fs.scandir@npm:2.1.5": + version: 2.1.5 + resolution: "@nodelib/fs.scandir@npm:2.1.5" + dependencies: + "@nodelib/fs.stat": "npm:2.0.5" + run-parallel: "npm:^1.1.9" + checksum: 10c0/732c3b6d1b1e967440e65f284bd06e5821fedf10a1bea9ed2bb75956ea1f30e08c44d3def9d6a230666574edbaf136f8cfd319c14fd1f87c66e6a44449afb2eb + languageName: node + linkType: hard + +"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": + version: 2.0.5 + resolution: "@nodelib/fs.stat@npm:2.0.5" + checksum: 10c0/88dafe5e3e29a388b07264680dc996c17f4bda48d163a9d4f5c1112979f0ce8ec72aa7116122c350b4e7976bc5566dc3ddb579be1ceaacc727872eb4ed93926d + languageName: node + linkType: hard + +"@nodelib/fs.walk@npm:^1.2.3": + version: 1.2.8 + resolution: "@nodelib/fs.walk@npm:1.2.8" + dependencies: + "@nodelib/fs.scandir": "npm:2.1.5" + fastq: "npm:^1.6.0" + checksum: 10c0/db9de047c3bb9b51f9335a7bb46f4fcfb6829fb628318c12115fbaf7d369bfce71c15b103d1fc3b464812d936220ee9bc1c8f762d032c9f6be9acc99249095b1 + languageName: node + linkType: hard + +"@npmcli/agent@npm:^3.0.0": + version: 3.0.0 + resolution: "@npmcli/agent@npm:3.0.0" + dependencies: + agent-base: "npm:^7.1.0" + http-proxy-agent: "npm:^7.0.0" + https-proxy-agent: "npm:^7.0.1" + lru-cache: "npm:^10.0.1" + socks-proxy-agent: "npm:^8.0.3" + checksum: 10c0/efe37b982f30740ee77696a80c196912c274ecd2cb243bc6ae7053a50c733ce0f6c09fda085145f33ecf453be19654acca74b69e81eaad4c90f00ccffe2f9271 + languageName: node + linkType: hard + +"@npmcli/fs@npm:^4.0.0": + version: 4.0.0 + resolution: "@npmcli/fs@npm:4.0.0" + dependencies: + semver: "npm:^7.3.5" + checksum: 10c0/c90935d5ce670c87b6b14fab04a965a3b8137e585f8b2a6257263bd7f97756dd736cb165bb470e5156a9e718ecd99413dccc54b1138c1a46d6ec7cf325982fe5 + languageName: node + linkType: hard + +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 10c0/5bd7576bb1b38a47a7fc7b51ac9f38748e772beebc56200450c4a817d712232b8f1d3ef70532c80840243c657d491cf6a6be1e3a214cff907645819fdc34aadd + languageName: node + linkType: hard + +"@pnpm/config.env-replace@npm:^1.1.0": + version: 1.1.0 + resolution: "@pnpm/config.env-replace@npm:1.1.0" + checksum: 10c0/4cfc4a5c49ab3d0c6a1f196cfd4146374768b0243d441c7de8fa7bd28eaab6290f514b98490472cc65dbd080d34369447b3e9302585e1d5c099befd7c8b5e55f + languageName: node + linkType: hard + +"@pnpm/network.ca-file@npm:^1.0.1": + version: 1.0.2 + resolution: "@pnpm/network.ca-file@npm:1.0.2" + dependencies: + graceful-fs: "npm:4.2.10" + checksum: 10c0/95f6e0e38d047aca3283550719155ce7304ac00d98911e4ab026daedaf640a63bd83e3d13e17c623fa41ac72f3801382ba21260bcce431c14fbbc06430ecb776 + languageName: node + linkType: hard + +"@pnpm/npm-conf@npm:^2.1.0": + version: 2.3.1 + resolution: "@pnpm/npm-conf@npm:2.3.1" + dependencies: + "@pnpm/config.env-replace": "npm:^1.1.0" + "@pnpm/network.ca-file": "npm:^1.0.1" + config-chain: "npm:^1.1.11" + checksum: 10c0/778a3a34ff7d6000a2594d2a9821f873f737bc56367865718b2cf0ba5d366e49689efe7975148316d7afd8e6f1dcef7d736fbb6ea7ef55caadd1dc93a36bb302 + languageName: node + linkType: hard + +"@polka/url@npm:^1.0.0-next.24": + version: 1.0.0-next.29 + resolution: "@polka/url@npm:1.0.0-next.29" + checksum: 10c0/0d58e081844095cb029d3c19a659bfefd09d5d51a2f791bc61eba7ea826f13d6ee204a8a448c2f5a855c17df07b37517373ff916dd05801063c0568ae9937684 + languageName: node + linkType: hard + +"@polkadot-api/json-rpc-provider-proxy@npm:^0.1.0": + version: 0.1.0 + resolution: "@polkadot-api/json-rpc-provider-proxy@npm:0.1.0" + checksum: 10c0/e4b621fbbba5ae035f36932ce2ef6024d157a1612e26d8838ba6b92a78cd4718f4f12baa55ec7c700d213f8ecbe6e14569152ba3254b341b677b9e616c749f59 + languageName: node + linkType: hard + +"@polkadot-api/json-rpc-provider@npm:0.0.1, @polkadot-api/json-rpc-provider@npm:^0.0.1": + version: 0.0.1 + resolution: "@polkadot-api/json-rpc-provider@npm:0.0.1" + checksum: 10c0/90dc86693e7ef742c50484f4374d4b4f0eb7b5f7f618cf96a3dfed866fd18edf19132fc750b2944e8300d83c5601343f3876cbe60cd6bb1086301361d682ebd8 + languageName: node + linkType: hard + +"@polkadot-api/metadata-builders@npm:0.3.2": + version: 0.3.2 + resolution: "@polkadot-api/metadata-builders@npm:0.3.2" + dependencies: + "@polkadot-api/substrate-bindings": "npm:0.6.0" + "@polkadot-api/utils": "npm:0.1.0" + checksum: 10c0/ac536e8d5dea4c4e241839750a46d003a86e6149428dbf9bdb794907547fdab219d38c805ba5fa0ea7150a0083c214866e28d7c2ec10621be97d2f8f8b013edf + languageName: node + linkType: hard + +"@polkadot-api/observable-client@npm:^0.3.0": + version: 0.3.2 + resolution: "@polkadot-api/observable-client@npm:0.3.2" + dependencies: + "@polkadot-api/metadata-builders": "npm:0.3.2" + "@polkadot-api/substrate-bindings": "npm:0.6.0" + "@polkadot-api/utils": "npm:0.1.0" + peerDependencies: + "@polkadot-api/substrate-client": 0.1.4 + rxjs: ">=7.8.0" + checksum: 10c0/9f93fab03c37af0483f5c8487ec5250d366eb401a2c9744c014dfb4c7aa524645ae71f6b0e60761e2bca89bdcd862c119e4ac0e798123d8ee9f037eb2f4aaef3 + languageName: node + linkType: hard + +"@polkadot-api/substrate-bindings@npm:0.6.0": + version: 0.6.0 + resolution: "@polkadot-api/substrate-bindings@npm:0.6.0" + dependencies: + "@noble/hashes": "npm:^1.3.1" + "@polkadot-api/utils": "npm:0.1.0" + "@scure/base": "npm:^1.1.1" + scale-ts: "npm:^1.6.0" + checksum: 10c0/6c5d2d4f1120e95b3fb0207ea186e74302b9075671132d62d94d6abcb8b38fe081b8514384c744c3630615caa474764ebdd18968bef73d0c29203946941f1d99 + languageName: node + linkType: hard + +"@polkadot-api/substrate-client@npm:^0.1.2": + version: 0.1.4 + resolution: "@polkadot-api/substrate-client@npm:0.1.4" + dependencies: + "@polkadot-api/json-rpc-provider": "npm:0.0.1" + "@polkadot-api/utils": "npm:0.1.0" + checksum: 10c0/7c9138ce52745f7e5f365f35d8caf3c192aee405ee576492eab8c47f5e9d09547a6141cc455ba21e69cf9f0f813fe6f5bcb0763342c33435a7678432961713db + languageName: node + linkType: hard + +"@polkadot-api/utils@npm:0.1.0": + version: 0.1.0 + resolution: "@polkadot-api/utils@npm:0.1.0" + checksum: 10c0/9b24522a30d0519df2d2bbfc65f7dbc94233950f829c4a6b042e02cc43b70c0ec43a7d06056cd7084d09e32d7c42caa2695732d25f673a31430391bed116fcae + languageName: node + linkType: hard + +"@polkadot/api-augment@npm:16.4.8": + version: 16.4.8 + resolution: "@polkadot/api-augment@npm:16.4.8" + dependencies: + "@polkadot/api-base": "npm:16.4.8" + "@polkadot/rpc-augment": "npm:16.4.8" + "@polkadot/types": "npm:16.4.8" + "@polkadot/types-augment": "npm:16.4.8" + "@polkadot/types-codec": "npm:16.4.8" + "@polkadot/util": "npm:^13.5.6" + tslib: "npm:^2.8.1" + checksum: 10c0/b1c7058f7796001a076bbb05a369410fd23617218834a6390f73b290c8d47c8cd9a4708ec8820c27689b31b6b9ef805ff2d8d986ac5c5075bdd7e9ee79db9d02 + languageName: node + linkType: hard + +"@polkadot/api-base@npm:16.4.8": + version: 16.4.8 + resolution: "@polkadot/api-base@npm:16.4.8" + dependencies: + "@polkadot/rpc-core": "npm:16.4.8" + "@polkadot/types": "npm:16.4.8" + "@polkadot/util": "npm:^13.5.6" + rxjs: "npm:^7.8.1" + tslib: "npm:^2.8.1" + checksum: 10c0/b0d717e4b6222adeb7510a0bf8641062163f94ea6f37c10a373e0d9d2029dcbface38c5d591efea6e9da03b95ead76c83065db56027343d39c74487530af971c + languageName: node + linkType: hard + +"@polkadot/api-derive@npm:16.4.8": + version: 16.4.8 + resolution: "@polkadot/api-derive@npm:16.4.8" + dependencies: + "@polkadot/api": "npm:16.4.8" + "@polkadot/api-augment": "npm:16.4.8" + "@polkadot/api-base": "npm:16.4.8" + "@polkadot/rpc-core": "npm:16.4.8" + "@polkadot/types": "npm:16.4.8" + "@polkadot/types-codec": "npm:16.4.8" + "@polkadot/util": "npm:^13.5.6" + "@polkadot/util-crypto": "npm:^13.5.6" + rxjs: "npm:^7.8.1" + tslib: "npm:^2.8.1" + checksum: 10c0/c3bd63e9fd69755d64f980171204753114752c174acde161bf6fa730877a60c2a1639d41a57e413f4daa9b84bfbd380229e1532fd4e83111970458b0e7dddecc + languageName: node + linkType: hard + +"@polkadot/api@npm:16.4.8, @polkadot/api@npm:^16.4.8": + version: 16.4.8 + resolution: "@polkadot/api@npm:16.4.8" + dependencies: + "@polkadot/api-augment": "npm:16.4.8" + "@polkadot/api-base": "npm:16.4.8" + "@polkadot/api-derive": "npm:16.4.8" + "@polkadot/keyring": "npm:^13.5.6" + "@polkadot/rpc-augment": "npm:16.4.8" + "@polkadot/rpc-core": "npm:16.4.8" + "@polkadot/rpc-provider": "npm:16.4.8" + "@polkadot/types": "npm:16.4.8" + "@polkadot/types-augment": "npm:16.4.8" + "@polkadot/types-codec": "npm:16.4.8" + "@polkadot/types-create": "npm:16.4.8" + "@polkadot/types-known": "npm:16.4.8" + "@polkadot/util": "npm:^13.5.6" + "@polkadot/util-crypto": "npm:^13.5.6" + eventemitter3: "npm:^5.0.1" + rxjs: "npm:^7.8.1" + tslib: "npm:^2.8.1" + checksum: 10c0/640efbea0b582a05029489b3068181f561763dab5450c34460f2aef26126c64cf0cc534636e84e1fe78e4f86272c56b4306ef9c27b2402e81b861d6feb47ec2c + languageName: node + linkType: hard + +"@polkadot/keyring@npm:^13.5.6": + version: 13.5.6 + resolution: "@polkadot/keyring@npm:13.5.6" + dependencies: + "@polkadot/util": "npm:13.5.6" + "@polkadot/util-crypto": "npm:13.5.6" + tslib: "npm:^2.8.0" + peerDependencies: + "@polkadot/util": 13.5.6 + "@polkadot/util-crypto": 13.5.6 + checksum: 10c0/8877f5686f6111580f7ea08796936fadf8fa68171fae7cb2026699c18c72a09e7c5ab98134244f2da548d9b90fea505a43319c0b487428518629112d7ce7da60 + languageName: node + linkType: hard + +"@polkadot/networks@npm:13.5.6, @polkadot/networks@npm:^13.5.6": + version: 13.5.6 + resolution: "@polkadot/networks@npm:13.5.6" + dependencies: + "@polkadot/util": "npm:13.5.6" + "@substrate/ss58-registry": "npm:^1.51.0" + tslib: "npm:^2.8.0" + checksum: 10c0/53463a73597c78a10c27e845b1a38fc1e14f870f4e1ea56b39367b6bd3b60743b9d98813ced6b6a6bcfb01acf7a62bb12d875827dc29e7a2e30878e12f889b24 + languageName: node + linkType: hard + +"@polkadot/rpc-augment@npm:16.4.8": + version: 16.4.8 + resolution: "@polkadot/rpc-augment@npm:16.4.8" + dependencies: + "@polkadot/rpc-core": "npm:16.4.8" + "@polkadot/types": "npm:16.4.8" + "@polkadot/types-codec": "npm:16.4.8" + "@polkadot/util": "npm:^13.5.6" + tslib: "npm:^2.8.1" + checksum: 10c0/4b1fe4c83d822845844a1b23872f05f182078d6e1b5cc36a5653e42a4c6b57087831f8558fac216e2806acb90e565f68986bfb39fffdcd7d4bcd025c5e69b2ca + languageName: node + linkType: hard + +"@polkadot/rpc-core@npm:16.4.8": + version: 16.4.8 + resolution: "@polkadot/rpc-core@npm:16.4.8" + dependencies: + "@polkadot/rpc-augment": "npm:16.4.8" + "@polkadot/rpc-provider": "npm:16.4.8" + "@polkadot/types": "npm:16.4.8" + "@polkadot/util": "npm:^13.5.6" + rxjs: "npm:^7.8.1" + tslib: "npm:^2.8.1" + checksum: 10c0/43a3c79dab2d9a7fb21cb4f1cd02c441ecae4083f63cb9e690936c5b74dea24d833c4770244cf515f10dd409cf208a4c47dd23a878c25bf948814ffef682eeb4 + languageName: node + linkType: hard + +"@polkadot/rpc-provider@npm:16.4.8": + version: 16.4.8 + resolution: "@polkadot/rpc-provider@npm:16.4.8" + dependencies: + "@polkadot/keyring": "npm:^13.5.6" + "@polkadot/types": "npm:16.4.8" + "@polkadot/types-support": "npm:16.4.8" + "@polkadot/util": "npm:^13.5.6" + "@polkadot/util-crypto": "npm:^13.5.6" + "@polkadot/x-fetch": "npm:^13.5.6" + "@polkadot/x-global": "npm:^13.5.6" + "@polkadot/x-ws": "npm:^13.5.6" + "@substrate/connect": "npm:0.8.11" + eventemitter3: "npm:^5.0.1" + mock-socket: "npm:^9.3.1" + nock: "npm:^13.5.5" + tslib: "npm:^2.8.1" + dependenciesMeta: + "@substrate/connect": + optional: true + checksum: 10c0/a4025836a0140bf1af8828fa7432c2867f795944ba438b36e83e453eedfc02c7122cb9b6d695bc26dd2d9538bbfd65db497d45ff493410756a99afc087457d0b + languageName: node + linkType: hard + +"@polkadot/types-augment@npm:16.4.8": + version: 16.4.8 + resolution: "@polkadot/types-augment@npm:16.4.8" + dependencies: + "@polkadot/types": "npm:16.4.8" + "@polkadot/types-codec": "npm:16.4.8" + "@polkadot/util": "npm:^13.5.6" + tslib: "npm:^2.8.1" + checksum: 10c0/1d38c782b7607b56e4d07e57b7a40c9261d42918765e57342cf51f295ae88e993437b9adbd366b5b615ddebf4bbe1b6908cbb6f0f69ef4f1b421ea56b5b410f9 + languageName: node + linkType: hard + +"@polkadot/types-codec@npm:16.4.8": + version: 16.4.8 + resolution: "@polkadot/types-codec@npm:16.4.8" + dependencies: + "@polkadot/util": "npm:^13.5.6" + "@polkadot/x-bigint": "npm:^13.5.6" + tslib: "npm:^2.8.1" + checksum: 10c0/1fc0297ecdf304c6329031f4378a57527ce5db5c51ad938dfc46ee042ad9d2505ff5fa00d29365dfe793b63c3f3057233a11f294468dfdc421c3b133101c8c03 + languageName: node + linkType: hard + +"@polkadot/types-create@npm:16.4.8": + version: 16.4.8 + resolution: "@polkadot/types-create@npm:16.4.8" + dependencies: + "@polkadot/types-codec": "npm:16.4.8" + "@polkadot/util": "npm:^13.5.6" + tslib: "npm:^2.8.1" + checksum: 10c0/bb529a7f7f286d367c3f20d9f67150f7efd3acb00b5763f713f37e55ceab93889b7771acf275f5b7b970d4174db6e7e40f317cbf148db52f208f86809cf449ee + languageName: node + linkType: hard + +"@polkadot/types-known@npm:16.4.8": + version: 16.4.8 + resolution: "@polkadot/types-known@npm:16.4.8" + dependencies: + "@polkadot/networks": "npm:^13.5.6" + "@polkadot/types": "npm:16.4.8" + "@polkadot/types-codec": "npm:16.4.8" + "@polkadot/types-create": "npm:16.4.8" + "@polkadot/util": "npm:^13.5.6" + tslib: "npm:^2.8.1" + checksum: 10c0/7cd7c6cd5f3d64ba94471512ff1cdc52fc4bf1deec68352e6b919be0b1ff104d6852bbd60df6c4f3da5ea487c0a05c88f79dbcddcf71c9e33652f28c710fe450 + languageName: node + linkType: hard + +"@polkadot/types-support@npm:16.4.8": + version: 16.4.8 + resolution: "@polkadot/types-support@npm:16.4.8" + dependencies: + "@polkadot/util": "npm:^13.5.6" + tslib: "npm:^2.8.1" + checksum: 10c0/ff6ba9d5886696ea7b09292d4c0b877b18da8857cdc649d02086347b8350f213606d918c7e3a1ae6983c6f8184c190fffaad92cdafbe149979e3e8f34b44b808 + languageName: node + linkType: hard + +"@polkadot/types@npm:16.4.8": + version: 16.4.8 + resolution: "@polkadot/types@npm:16.4.8" + dependencies: + "@polkadot/keyring": "npm:^13.5.6" + "@polkadot/types-augment": "npm:16.4.8" + "@polkadot/types-codec": "npm:16.4.8" + "@polkadot/types-create": "npm:16.4.8" + "@polkadot/util": "npm:^13.5.6" + "@polkadot/util-crypto": "npm:^13.5.6" + rxjs: "npm:^7.8.1" + tslib: "npm:^2.8.1" + checksum: 10c0/05d93b2da7da85d44e3ee28af705eca5647ebb7dacba367746bb0e9b12a39f3a109ef8c8321356e0c2e32e9f97686e65cce1e518123f6002548125954111f431 + languageName: node + linkType: hard + +"@polkadot/util-crypto@npm:13.5.6, @polkadot/util-crypto@npm:^13.5.6": + version: 13.5.6 + resolution: "@polkadot/util-crypto@npm:13.5.6" + dependencies: + "@noble/curves": "npm:^1.3.0" + "@noble/hashes": "npm:^1.3.3" + "@polkadot/networks": "npm:13.5.6" + "@polkadot/util": "npm:13.5.6" + "@polkadot/wasm-crypto": "npm:^7.5.1" + "@polkadot/wasm-util": "npm:^7.5.1" + "@polkadot/x-bigint": "npm:13.5.6" + "@polkadot/x-randomvalues": "npm:13.5.6" + "@scure/base": "npm:^1.1.7" + tslib: "npm:^2.8.0" + peerDependencies: + "@polkadot/util": 13.5.6 + checksum: 10c0/2f9888848bce8f19e54520c0f27c81502fa14c0441ae6a91fbeab0dea9a2a5a28a0ed635a142fe3dc8ac62668249930dbafaaddc446dfff807144fad3aeaf9c9 + languageName: node + linkType: hard + +"@polkadot/util@npm:13.5.6, @polkadot/util@npm:^13.5.6": + version: 13.5.6 + resolution: "@polkadot/util@npm:13.5.6" + dependencies: + "@polkadot/x-bigint": "npm:13.5.6" + "@polkadot/x-global": "npm:13.5.6" + "@polkadot/x-textdecoder": "npm:13.5.6" + "@polkadot/x-textencoder": "npm:13.5.6" + "@types/bn.js": "npm:^5.1.6" + bn.js: "npm:^5.2.1" + tslib: "npm:^2.8.0" + checksum: 10c0/d644ce3ef1de412babd6af039f98ddfbfea9cfdaf7ee535a86d2963f57e93cb6c236038f6c8ad063b19674ebe61a2f04b3a299ea9154d544f8eaf674a7ffa8f0 + languageName: node + linkType: hard + +"@polkadot/wasm-bridge@npm:7.5.1": + version: 7.5.1 + resolution: "@polkadot/wasm-bridge@npm:7.5.1" + dependencies: + "@polkadot/wasm-util": "npm:7.5.1" + tslib: "npm:^2.7.0" + peerDependencies: + "@polkadot/util": "*" + "@polkadot/x-randomvalues": "*" + checksum: 10c0/862bd63415cef327482c6849cde9bbc3f777dcbb74b402e0c27b365321713a9f68d16a999dd47ca4f388d555f6ae88554528118aae2fafc19b32a7c2af630a16 + languageName: node + linkType: hard + +"@polkadot/wasm-crypto-asmjs@npm:7.5.1": + version: 7.5.1 + resolution: "@polkadot/wasm-crypto-asmjs@npm:7.5.1" + dependencies: + tslib: "npm:^2.7.0" + peerDependencies: + "@polkadot/util": "*" + checksum: 10c0/cf1569cf5ec3a4633289c9bb1a9530edc8d8a60e034b9a6c0ec6f34bb282da839f4e58d3dc6a978e1ec2b672b96d4d50aca830ba60f3dde0612e59da5f4e6f03 + languageName: node + linkType: hard + +"@polkadot/wasm-crypto-init@npm:7.5.1": + version: 7.5.1 + resolution: "@polkadot/wasm-crypto-init@npm:7.5.1" + dependencies: + "@polkadot/wasm-bridge": "npm:7.5.1" + "@polkadot/wasm-crypto-asmjs": "npm:7.5.1" + "@polkadot/wasm-crypto-wasm": "npm:7.5.1" + "@polkadot/wasm-util": "npm:7.5.1" + tslib: "npm:^2.7.0" + peerDependencies: + "@polkadot/util": "*" + "@polkadot/x-randomvalues": "*" + checksum: 10c0/681299700db9242c27ae5fc9d630e79429b0d8ee623a5e52b43e139ad5d196d6fb73647954a7c4d31826614fce3e54bb33c83f5c3f79c07a7d7cbb87fdc6a975 + languageName: node + linkType: hard + +"@polkadot/wasm-crypto-wasm@npm:7.5.1": + version: 7.5.1 + resolution: "@polkadot/wasm-crypto-wasm@npm:7.5.1" + dependencies: + "@polkadot/wasm-util": "npm:7.5.1" + tslib: "npm:^2.7.0" + peerDependencies: + "@polkadot/util": "*" + checksum: 10c0/e874d8bd5515b1c5f17c512e6b18acd7c5a0619af9a0bad01e6f8e9abbd02d1b4fd4a3acfd618319875916e4b02e7e022959ecd7ed3a9afd82be04439cd5d787 + languageName: node + linkType: hard + +"@polkadot/wasm-crypto@npm:^7.5.1": + version: 7.5.1 + resolution: "@polkadot/wasm-crypto@npm:7.5.1" + dependencies: + "@polkadot/wasm-bridge": "npm:7.5.1" + "@polkadot/wasm-crypto-asmjs": "npm:7.5.1" + "@polkadot/wasm-crypto-init": "npm:7.5.1" + "@polkadot/wasm-crypto-wasm": "npm:7.5.1" + "@polkadot/wasm-util": "npm:7.5.1" + tslib: "npm:^2.7.0" + peerDependencies: + "@polkadot/util": "*" + "@polkadot/x-randomvalues": "*" + checksum: 10c0/ec3ce276cdec8dbef26f571488987b21528782c69b51a0f1d50237a41c351063b7e7e527fceacd04272babd7d15055b5f3283d19b22369157694b429243a45d0 + languageName: node + linkType: hard + +"@polkadot/wasm-util@npm:7.5.1, @polkadot/wasm-util@npm:^7.5.1": + version: 7.5.1 + resolution: "@polkadot/wasm-util@npm:7.5.1" + dependencies: + tslib: "npm:^2.7.0" + peerDependencies: + "@polkadot/util": "*" + checksum: 10c0/0498f15545eeea9bcac2254596118d765adb609e6d734714907407d1507dfeedce12031c7416eaa8e5d0e187ea2a5c08ea4245eaed48a8b03c82eca99605e6b9 + languageName: node + linkType: hard + +"@polkadot/x-bigint@npm:13.5.6, @polkadot/x-bigint@npm:^13.5.6": + version: 13.5.6 + resolution: "@polkadot/x-bigint@npm:13.5.6" + dependencies: + "@polkadot/x-global": "npm:13.5.6" + tslib: "npm:^2.8.0" + checksum: 10c0/9c4e71e3d98e40e5df9a8b4999521d534cfa6a4755f217a67ccca66f1eae499f985196cf9ca41d11c5c318ecd04bb10c10a7829274b4cf5b577b8a84e22f2dbb + languageName: node + linkType: hard + +"@polkadot/x-fetch@npm:^13.5.6": + version: 13.5.6 + resolution: "@polkadot/x-fetch@npm:13.5.6" + dependencies: + "@polkadot/x-global": "npm:13.5.6" + node-fetch: "npm:^3.3.2" + tslib: "npm:^2.8.0" + checksum: 10c0/6d4725d79b0f028d6bdac967ebc8a77a3f4ac8401d4eed3f051c3b896f86a3867d773ec06d15fb0776e6c3254a18926d5cf9780b250a5dcf29376fc935a446d7 + languageName: node + linkType: hard + +"@polkadot/x-global@npm:13.5.6, @polkadot/x-global@npm:^13.5.6": + version: 13.5.6 + resolution: "@polkadot/x-global@npm:13.5.6" + dependencies: + tslib: "npm:^2.8.0" + checksum: 10c0/725832ea3b9d1fb39d131f6c9d4c558ba0fb35b41f1510396600316eeb190bb4faacf2467b3ed3d60363372e1361acde5988879f468e5ba403db3338e017a94d + languageName: node + linkType: hard + +"@polkadot/x-randomvalues@npm:13.5.6": + version: 13.5.6 + resolution: "@polkadot/x-randomvalues@npm:13.5.6" + dependencies: + "@polkadot/x-global": "npm:13.5.6" + tslib: "npm:^2.8.0" + peerDependencies: + "@polkadot/util": 13.5.6 + "@polkadot/wasm-util": "*" + checksum: 10c0/5214a371d873fb78a195be40255325513f8174b74447eff1663141e222c34b5143a17cdcfb705f9efb66c00cdf1216997304df14c0746dbc739a6255331fa709 + languageName: node + linkType: hard + +"@polkadot/x-textdecoder@npm:13.5.6": + version: 13.5.6 + resolution: "@polkadot/x-textdecoder@npm:13.5.6" + dependencies: + "@polkadot/x-global": "npm:13.5.6" + tslib: "npm:^2.8.0" + checksum: 10c0/4705c136f39c35c146e951179d58b1a193a9bdf898b583629d809c2b09291f981aa8547ad029363dd17babe02cf85b628d2dd45fbedc605110c67c4682e4539e + languageName: node + linkType: hard + +"@polkadot/x-textencoder@npm:13.5.6": + version: 13.5.6 + resolution: "@polkadot/x-textencoder@npm:13.5.6" + dependencies: + "@polkadot/x-global": "npm:13.5.6" + tslib: "npm:^2.8.0" + checksum: 10c0/0865cf8b6a506c26e23e1789e26dfba46d777e1bd251984aff248b1745c5006a7d1e12b22038c64fd1b43084b4a96919302c8633b8765713a49530db0f7fdb3b + languageName: node + linkType: hard + +"@polkadot/x-ws@npm:^13.5.6": + version: 13.5.6 + resolution: "@polkadot/x-ws@npm:13.5.6" + dependencies: + "@polkadot/x-global": "npm:13.5.6" + tslib: "npm:^2.8.0" + ws: "npm:^8.18.0" + checksum: 10c0/cb9d46e185f76eada2f28e9f077ca7efacf8cc394e5afe7a4024e886ab6b96bdb423c3a5144267829fa5a0bc409992cea0c1a843f9542dbf30341b37438eff9e + languageName: node + linkType: hard + +"@scure/base@npm:^1.1.1, @scure/base@npm:^1.1.7": + version: 1.2.6 + resolution: "@scure/base@npm:1.2.6" + checksum: 10c0/49bd5293371c4e062cb6ba689c8fe3ea3981b7bb9c000400dc4eafa29f56814cdcdd27c04311c2fec34de26bc373c593a1d6ca6d754398a488d587943b7c128a + languageName: node + linkType: hard + +"@sideway/address@npm:^4.1.5": + version: 4.1.5 + resolution: "@sideway/address@npm:4.1.5" + dependencies: + "@hapi/hoek": "npm:^9.0.0" + checksum: 10c0/638eb6f7e7dba209053dd6c8da74d7cc995e2b791b97644d0303a7dd3119263bcb7225a4f6804d4db2bc4f96e5a9d262975a014f58eae4d1753c27cbc96ef959 + languageName: node + linkType: hard + +"@sideway/formula@npm:^3.0.1": + version: 3.0.1 + resolution: "@sideway/formula@npm:3.0.1" + checksum: 10c0/3fe81fa9662efc076bf41612b060eb9b02e846ea4bea5bd114f1662b7f1541e9dedcf98aff0d24400bcb92f113964a50e0290b86e284edbdf6346fa9b7e2bf2c + languageName: node + linkType: hard + +"@sideway/pinpoint@npm:^2.0.0": + version: 2.0.0 + resolution: "@sideway/pinpoint@npm:2.0.0" + checksum: 10c0/d2ca75dacaf69b8fc0bb8916a204e01def3105ee44d8be16c355e5f58189eb94039e15ce831f3d544f229889ccfa35562a0ce2516179f3a7ee1bbe0b71e55b36 + languageName: node + linkType: hard + +"@sinclair/typebox@npm:^0.27.8": + version: 0.27.8 + resolution: "@sinclair/typebox@npm:0.27.8" + checksum: 10c0/ef6351ae073c45c2ac89494dbb3e1f87cc60a93ce4cde797b782812b6f97da0d620ae81973f104b43c9b7eaa789ad20ba4f6a1359f1cc62f63729a55a7d22d4e + languageName: node + linkType: hard + +"@sindresorhus/is@npm:^4.6.0": + version: 4.6.0 + resolution: "@sindresorhus/is@npm:4.6.0" + checksum: 10c0/33b6fb1d0834ec8dd7689ddc0e2781c2bfd8b9c4e4bacbcb14111e0ae00621f2c264b8a7d36541799d74888b5dccdf422a891a5cb5a709ace26325eedc81e22e + languageName: node + linkType: hard + +"@sindresorhus/is@npm:^5.2.0": + version: 5.6.0 + resolution: "@sindresorhus/is@npm:5.6.0" + checksum: 10c0/66727344d0c92edde5760b5fd1f8092b717f2298a162a5f7f29e4953e001479927402d9d387e245fb9dc7d3b37c72e335e93ed5875edfc5203c53be8ecba1b52 + languageName: node + linkType: hard + +"@slorber/remark-comment@npm:^1.0.0": + version: 1.0.0 + resolution: "@slorber/remark-comment@npm:1.0.0" + dependencies: + micromark-factory-space: "npm:^1.0.0" + micromark-util-character: "npm:^1.1.0" + micromark-util-symbol: "npm:^1.0.1" + checksum: 10c0/b8da9d8f560740959c421d3ce5be43952eace1c95cb65402d9473a15e66463346a37fb5f121a6b22a83af51e8845b0b4ff3c321f14ce31bd58fb126acf6c8ed9 + languageName: node + linkType: hard + +"@substrate/connect-extension-protocol@npm:^2.0.0": + version: 2.2.2 + resolution: "@substrate/connect-extension-protocol@npm:2.2.2" + checksum: 10c0/11eb887841a40ae9eafb34fd6f6aabddf4df1cc27aa144edd9be308baa10445b8c14b7b6ccf8de05683d84449cce5cabf43c59ef782eb91e2288c2139f7f6441 + languageName: node + linkType: hard + +"@substrate/connect-known-chains@npm:^1.1.5": + version: 1.10.3 + resolution: "@substrate/connect-known-chains@npm:1.10.3" + checksum: 10c0/ae4a73f1ba2c85a4846e12d4032db9917135825b0112f3bf7c4c4ebb94a062ac1e089174e67119e135178755d1485e8461cdf1ace2ebebba1fe132ef4f533ee1 + languageName: node + linkType: hard + +"@substrate/connect@npm:0.8.11": + version: 0.8.11 + resolution: "@substrate/connect@npm:0.8.11" + dependencies: + "@substrate/connect-extension-protocol": "npm:^2.0.0" + "@substrate/connect-known-chains": "npm:^1.1.5" + "@substrate/light-client-extension-helpers": "npm:^1.0.0" + smoldot: "npm:2.0.26" + checksum: 10c0/ad37dc5d6c806b95a346d42a94b1968b1aa3056ef7dd1a9af60670ab1fe6ecbc61ae52ae74e2b5a93a75b61db812bbe0c3409eb207bd4b438bec02d3554d6daa + languageName: node + linkType: hard + +"@substrate/light-client-extension-helpers@npm:^1.0.0": + version: 1.0.0 + resolution: "@substrate/light-client-extension-helpers@npm:1.0.0" + dependencies: + "@polkadot-api/json-rpc-provider": "npm:^0.0.1" + "@polkadot-api/json-rpc-provider-proxy": "npm:^0.1.0" + "@polkadot-api/observable-client": "npm:^0.3.0" + "@polkadot-api/substrate-client": "npm:^0.1.2" + "@substrate/connect-extension-protocol": "npm:^2.0.0" + "@substrate/connect-known-chains": "npm:^1.1.5" + rxjs: "npm:^7.8.1" + peerDependencies: + smoldot: 2.x + checksum: 10c0/41b692c4f8ec8ee5e67f7c184ea0556c92d2755401efd20c9ee440d0d1d76e00972b76c92514cc6850855a55bbf062b301f1188eeb3b926a7fc1adb914298e94 + languageName: node + linkType: hard + +"@substrate/ss58-registry@npm:^1.51.0": + version: 1.51.0 + resolution: "@substrate/ss58-registry@npm:1.51.0" + checksum: 10c0/f568ea2a5011ee1c288e577d23dd48a6ba0dc0db3611f268b1c35f41636b8ec39ae09fe0184f88d411e331b60d924e90054be736b1ff624cdcb9b742c94a9bf6 + languageName: node + linkType: hard + +"@svgr/babel-plugin-add-jsx-attribute@npm:8.0.0": + version: 8.0.0 + resolution: "@svgr/babel-plugin-add-jsx-attribute@npm:8.0.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/a50bd0baa34faf16bcba712091f94c7f0e230431fe99a9dfc3401fa92823ad3f68495b86ab9bf9044b53839e8c416cfbb37eb3f246ff33f261e0fa9ee1779c5b + languageName: node + linkType: hard + +"@svgr/babel-plugin-remove-jsx-attribute@npm:8.0.0": + version: 8.0.0 + resolution: "@svgr/babel-plugin-remove-jsx-attribute@npm:8.0.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/8a98e59bd9971e066815b4129409932f7a4db4866834fe75677ea6d517972fb40b380a69a4413189f20e7947411f9ab1b0f029dd5e8068686a5a0188d3ccd4c7 + languageName: node + linkType: hard + +"@svgr/babel-plugin-remove-jsx-empty-expression@npm:8.0.0": + version: 8.0.0 + resolution: "@svgr/babel-plugin-remove-jsx-empty-expression@npm:8.0.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/517dcca75223bd05d3f056a8514dbba3031278bea4eadf0842c576d84f4651e7a4e0e7082d3ee4ef42456de0f9c4531d8a1917c04876ca64b014b859ca8f1bde + languageName: node + linkType: hard + +"@svgr/babel-plugin-replace-jsx-attribute-value@npm:8.0.0": + version: 8.0.0 + resolution: "@svgr/babel-plugin-replace-jsx-attribute-value@npm:8.0.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/004bd1892053b7e9c1b0bb14acc44e77634ec393722b87b1e4fae53e2c35122a2dd0d5c15e9070dbeec274e22e7693a2b8b48506733a8009ee92b12946fcb10a + languageName: node + linkType: hard + +"@svgr/babel-plugin-svg-dynamic-title@npm:8.0.0": + version: 8.0.0 + resolution: "@svgr/babel-plugin-svg-dynamic-title@npm:8.0.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/80e0a7fcf902f984c705051ca5c82ea6050ccbb70b651a8fea6d0eb5809e4dac274b49ea6be2d87f1eb9dfc0e2d6cdfffe1669ec2117f44b67a60a07d4c0b8b8 + languageName: node + linkType: hard + +"@svgr/babel-plugin-svg-em-dimensions@npm:8.0.0": + version: 8.0.0 + resolution: "@svgr/babel-plugin-svg-em-dimensions@npm:8.0.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/73e92c8277a89279745c0c500f59f083279a8dc30cd552b22981fade2a77628fb2bd2819ee505725fcd2e93f923e3790b52efcff409a159e657b46604a0b9a21 + languageName: node + linkType: hard + +"@svgr/babel-plugin-transform-react-native-svg@npm:8.1.0": + version: 8.1.0 + resolution: "@svgr/babel-plugin-transform-react-native-svg@npm:8.1.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/655ed6bc7a208ceaa4ecff0a54ccc36008c3cb31efa90d11e171cab325ebbb21aa78f09c7b65f9b3ddeda3a85f348c0c862902c48be13c14b4de165c847974e3 + languageName: node + linkType: hard + +"@svgr/babel-plugin-transform-svg-component@npm:8.0.0": + version: 8.0.0 + resolution: "@svgr/babel-plugin-transform-svg-component@npm:8.0.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/4ac00bb99a3db4ef05e4362f116a3c608ee365a2d26cf7318d8d41a4a5b30a02c80455cce0e62c65b60ed815b5d632bedabac2ccd4b56f998fadef5286e3ded4 + languageName: node + linkType: hard + +"@svgr/babel-preset@npm:8.1.0": + version: 8.1.0 + resolution: "@svgr/babel-preset@npm:8.1.0" + dependencies: + "@svgr/babel-plugin-add-jsx-attribute": "npm:8.0.0" + "@svgr/babel-plugin-remove-jsx-attribute": "npm:8.0.0" + "@svgr/babel-plugin-remove-jsx-empty-expression": "npm:8.0.0" + "@svgr/babel-plugin-replace-jsx-attribute-value": "npm:8.0.0" + "@svgr/babel-plugin-svg-dynamic-title": "npm:8.0.0" + "@svgr/babel-plugin-svg-em-dimensions": "npm:8.0.0" + "@svgr/babel-plugin-transform-react-native-svg": "npm:8.1.0" + "@svgr/babel-plugin-transform-svg-component": "npm:8.0.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/49367d3ad0831f79b1056871b91766246f449d4d1168623af5e283fbaefce4a01d77ab00de6b045b55e956f9aae27895823198493cd232d88d3435ea4517ffc5 + languageName: node + linkType: hard + +"@svgr/core@npm:8.1.0": + version: 8.1.0 + resolution: "@svgr/core@npm:8.1.0" + dependencies: + "@babel/core": "npm:^7.21.3" + "@svgr/babel-preset": "npm:8.1.0" + camelcase: "npm:^6.2.0" + cosmiconfig: "npm:^8.1.3" + snake-case: "npm:^3.0.4" + checksum: 10c0/6a2f6b1bc79bce39f66f088d468985d518005fc5147ebf4f108570a933818b5951c2cb7da230ddff4b7c8028b5a672b2d33aa2acce012b8b9770073aa5a2d041 + languageName: node + linkType: hard + +"@svgr/hast-util-to-babel-ast@npm:8.0.0": + version: 8.0.0 + resolution: "@svgr/hast-util-to-babel-ast@npm:8.0.0" + dependencies: + "@babel/types": "npm:^7.21.3" + entities: "npm:^4.4.0" + checksum: 10c0/f4165b583ba9eaf6719e598977a7b3ed182f177983e55f9eb55a6a73982d81277510e9eb7ab41f255151fb9ed4edd11ac4bef95dd872f04ed64966d8c85e0f79 + languageName: node + linkType: hard + +"@svgr/plugin-jsx@npm:8.1.0": + version: 8.1.0 + resolution: "@svgr/plugin-jsx@npm:8.1.0" + dependencies: + "@babel/core": "npm:^7.21.3" + "@svgr/babel-preset": "npm:8.1.0" + "@svgr/hast-util-to-babel-ast": "npm:8.0.0" + svg-parser: "npm:^2.0.4" + peerDependencies: + "@svgr/core": "*" + checksum: 10c0/07b4d9e00de795540bf70556fa2cc258774d01e97a12a26234c6fdf42b309beb7c10f31ee24d1a71137239347b1547b8bb5587d3a6de10669f95dcfe99cddc56 + languageName: node + linkType: hard + +"@svgr/plugin-svgo@npm:8.1.0": + version: 8.1.0 + resolution: "@svgr/plugin-svgo@npm:8.1.0" + dependencies: + cosmiconfig: "npm:^8.1.3" + deepmerge: "npm:^4.3.1" + svgo: "npm:^3.0.2" + peerDependencies: + "@svgr/core": "*" + checksum: 10c0/bfd25460f23f1548bfb8f6f3bedd6d6972c1a4f8881bd35a4f8c115218da6e999e8f9ac0ef0ed88c4e0b93fcec37f382b94c0322f4ec2b26752a89e5cc8b9d7a + languageName: node + linkType: hard + +"@svgr/webpack@npm:^8.1.0": + version: 8.1.0 + resolution: "@svgr/webpack@npm:8.1.0" + dependencies: + "@babel/core": "npm:^7.21.3" + "@babel/plugin-transform-react-constant-elements": "npm:^7.21.3" + "@babel/preset-env": "npm:^7.20.2" + "@babel/preset-react": "npm:^7.18.6" + "@babel/preset-typescript": "npm:^7.21.0" + "@svgr/core": "npm:8.1.0" + "@svgr/plugin-jsx": "npm:8.1.0" + "@svgr/plugin-svgo": "npm:8.1.0" + checksum: 10c0/4c1cac45bd5890de8643e5a7bfb71f3bcd8b85ae5bbacf10b8ad9f939b7a98e8d601c3ada204ffb95223abf4a24beeac5a2a0d6928a52a1ab72a29da3c015c22 + languageName: node + linkType: hard + +"@szmarczak/http-timer@npm:^5.0.1": + version: 5.0.1 + resolution: "@szmarczak/http-timer@npm:5.0.1" + dependencies: + defer-to-connect: "npm:^2.0.1" + checksum: 10c0/4629d2fbb2ea67c2e9dc03af235c0991c79ebdddcbc19aed5d5732fb29ce01c13331e9b1a491584b9069bd6ecde6581dcbf871f11b7eefdebbab34de6cf2197e + languageName: node + linkType: hard + +"@trysound/sax@npm:0.2.0": + version: 0.2.0 + resolution: "@trysound/sax@npm:0.2.0" + checksum: 10c0/44907308549ce775a41c38a815f747009ac45929a45d642b836aa6b0a536e4978d30b8d7d680bbd116e9dd73b7dbe2ef0d1369dcfc2d09e83ba381e485ecbe12 + languageName: node + linkType: hard + +"@types/bn.js@npm:^5.1.6": + version: 5.2.0 + resolution: "@types/bn.js@npm:5.2.0" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/7a36114b8e61faba5c28b433c3e5aabded261745dabb8f3fe41b2d84e8c4c2b8282e52a88a842bd31a565ff5dbf685145ccd91171f1a8d657fb249025c17aa85 + languageName: node + linkType: hard + +"@types/body-parser@npm:*": + version: 1.19.5 + resolution: "@types/body-parser@npm:1.19.5" + dependencies: + "@types/connect": "npm:*" + "@types/node": "npm:*" + checksum: 10c0/aebeb200f25e8818d8cf39cd0209026750d77c9b85381cdd8deeb50913e4d18a1ebe4b74ca9b0b4d21952511eeaba5e9fbbf739b52731a2061e206ec60d568df + languageName: node + linkType: hard + +"@types/bonjour@npm:^3.5.9": + version: 3.5.13 + resolution: "@types/bonjour@npm:3.5.13" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/eebedbca185ac3c39dd5992ef18d9e2a9f99e7f3c2f52f5561f90e9ed482c5d224c7962db95362712f580ed5713264e777a98d8f0bd8747f4eadf62937baed16 + languageName: node + linkType: hard + +"@types/connect-history-api-fallback@npm:^1.3.5": + version: 1.5.4 + resolution: "@types/connect-history-api-fallback@npm:1.5.4" + dependencies: + "@types/express-serve-static-core": "npm:*" + "@types/node": "npm:*" + checksum: 10c0/1b4035b627dcd714b05a22557f942e24a57ca48e7377dde0d2f86313fe685bc0a6566512a73257a55b5665b96c3041fb29228ac93331d8133011716215de8244 + languageName: node + linkType: hard + +"@types/connect@npm:*": + version: 3.4.38 + resolution: "@types/connect@npm:3.4.38" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/2e1cdba2c410f25649e77856505cd60223250fa12dff7a503e492208dbfdd25f62859918f28aba95315251fd1f5e1ffbfca1e25e73037189ab85dd3f8d0a148c + languageName: node + linkType: hard + +"@types/debug@npm:^4.0.0": + version: 4.1.12 + resolution: "@types/debug@npm:4.1.12" + dependencies: + "@types/ms": "npm:*" + checksum: 10c0/5dcd465edbb5a7f226e9a5efd1f399c6172407ef5840686b73e3608ce135eeca54ae8037dcd9f16bdb2768ac74925b820a8b9ecc588a58ca09eca6acabe33e2f + languageName: node + linkType: hard + +"@types/eslint-scope@npm:^3.7.7": + version: 3.7.7 + resolution: "@types/eslint-scope@npm:3.7.7" + dependencies: + "@types/eslint": "npm:*" + "@types/estree": "npm:*" + checksum: 10c0/a0ecbdf2f03912679440550817ff77ef39a30fa8bfdacaf6372b88b1f931828aec392f52283240f0d648cf3055c5ddc564544a626bcf245f3d09fcb099ebe3cc + languageName: node + linkType: hard + +"@types/eslint@npm:*": + version: 9.6.1 + resolution: "@types/eslint@npm:9.6.1" + dependencies: + "@types/estree": "npm:*" + "@types/json-schema": "npm:*" + checksum: 10c0/69ba24fee600d1e4c5abe0df086c1a4d798abf13792d8cfab912d76817fe1a894359a1518557d21237fbaf6eda93c5ab9309143dee4c59ef54336d1b3570420e + languageName: node + linkType: hard + +"@types/estree-jsx@npm:^1.0.0": + version: 1.0.5 + resolution: "@types/estree-jsx@npm:1.0.5" + dependencies: + "@types/estree": "npm:*" + checksum: 10c0/07b354331516428b27a3ab99ee397547d47eb223c34053b48f84872fafb841770834b90cc1a0068398e7c7ccb15ec51ab00ec64b31dc5e3dbefd624638a35c6d + languageName: node + linkType: hard + +"@types/estree@npm:*, @types/estree@npm:^1.0.0, @types/estree@npm:^1.0.6": + version: 1.0.7 + resolution: "@types/estree@npm:1.0.7" + checksum: 10c0/be815254316882f7c40847336cd484c3bc1c3e34f710d197160d455dc9d6d050ffbf4c3bc76585dba86f737f020ab20bdb137ebe0e9116b0c86c7c0342221b8c + languageName: node + linkType: hard + +"@types/express-serve-static-core@npm:*, @types/express-serve-static-core@npm:^5.0.0": + version: 5.0.6 + resolution: "@types/express-serve-static-core@npm:5.0.6" + dependencies: + "@types/node": "npm:*" + "@types/qs": "npm:*" + "@types/range-parser": "npm:*" + "@types/send": "npm:*" + checksum: 10c0/aced8cc88c1718adbbd1fc488756b0f22d763368d9eff2ae21b350698fab4a77d8d13c3699056dc662a887e43a8b67a3e8f6289ff76102ecc6bad4a7710d31a6 + languageName: node + linkType: hard + +"@types/express-serve-static-core@npm:^4.17.33": + version: 4.19.6 + resolution: "@types/express-serve-static-core@npm:4.19.6" + dependencies: + "@types/node": "npm:*" + "@types/qs": "npm:*" + "@types/range-parser": "npm:*" + "@types/send": "npm:*" + checksum: 10c0/4281f4ead71723f376b3ddf64868ae26244d434d9906c101cf8d436d4b5c779d01bd046e4ea0ed1a394d3e402216fabfa22b1fa4dba501061cd7c81c54045983 + languageName: node + linkType: hard + +"@types/express@npm:*": + version: 5.0.1 + resolution: "@types/express@npm:5.0.1" + dependencies: + "@types/body-parser": "npm:*" + "@types/express-serve-static-core": "npm:^5.0.0" + "@types/serve-static": "npm:*" + checksum: 10c0/e1385028c7251360ce916aab0e304187b613ca18cb9aa3fa90794a337e5b2e0c76330d467f41d3b3e936ce5336c4f3e63e323dc01192cf20f9686905daa6d00a + languageName: node + linkType: hard + +"@types/express@npm:^4.17.13": + version: 4.17.21 + resolution: "@types/express@npm:4.17.21" + dependencies: + "@types/body-parser": "npm:*" + "@types/express-serve-static-core": "npm:^4.17.33" + "@types/qs": "npm:*" + "@types/serve-static": "npm:*" + checksum: 10c0/12e562c4571da50c7d239e117e688dc434db1bac8be55613294762f84fd77fbd0658ccd553c7d3ab02408f385bc93980992369dd30e2ecd2c68c358e6af8fabf + languageName: node + linkType: hard + +"@types/gtag.js@npm:^0.0.12": + version: 0.0.12 + resolution: "@types/gtag.js@npm:0.0.12" + checksum: 10c0/fee8f4c6e627301b89ab616c9e219bd53fa6ea1ffd1d0a8021e21363f0bdb2cf7eb1a5bcda0c6f1502186379bc7784ec29c932e21634f4e07f9e7a8c56887400 + languageName: node + linkType: hard + +"@types/hast@npm:^3.0.0, @types/hast@npm:^3.0.4": + version: 3.0.4 + resolution: "@types/hast@npm:3.0.4" + dependencies: + "@types/unist": "npm:*" + checksum: 10c0/3249781a511b38f1d330fd1e3344eed3c4e7ea8eff82e835d35da78e637480d36fad37a78be5a7aed8465d237ad0446abc1150859d0fde395354ea634decf9f7 + languageName: node + linkType: hard + +"@types/history@npm:^4.7.11": + version: 4.7.11 + resolution: "@types/history@npm:4.7.11" + checksum: 10c0/3facf37c2493d1f92b2e93a22cac7ea70b06351c2ab9aaceaa3c56aa6099fb63516f6c4ec1616deb5c56b4093c026a043ea2d3373e6c0644d55710364d02c934 + languageName: node + linkType: hard + +"@types/html-minifier-terser@npm:^6.0.0": + version: 6.1.0 + resolution: "@types/html-minifier-terser@npm:6.1.0" + checksum: 10c0/a62fb8588e2f3818d82a2d7b953ad60a4a52fd767ae04671de1c16f5788bd72f1ed3a6109ed63fd190c06a37d919e3c39d8adbc1793a005def76c15a3f5f5dab + languageName: node + linkType: hard + +"@types/http-cache-semantics@npm:^4.0.2": + version: 4.0.4 + resolution: "@types/http-cache-semantics@npm:4.0.4" + checksum: 10c0/51b72568b4b2863e0fe8d6ce8aad72a784b7510d72dc866215642da51d84945a9459fa89f49ec48f1e9a1752e6a78e85a4cda0ded06b1c73e727610c925f9ce6 + languageName: node + linkType: hard + +"@types/http-errors@npm:*": + version: 2.0.4 + resolution: "@types/http-errors@npm:2.0.4" + checksum: 10c0/494670a57ad4062fee6c575047ad5782506dd35a6b9ed3894cea65830a94367bd84ba302eb3dde331871f6d70ca287bfedb1b2cf658e6132cd2cbd427ab56836 + languageName: node + linkType: hard + +"@types/http-proxy@npm:^1.17.8": + version: 1.17.16 + resolution: "@types/http-proxy@npm:1.17.16" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/b71bbb7233b17604f1158bbbe33ebf8bb870179d2b6e15dc9483aa2a785ce0d19ffb6c2237225b558addf24211d1853c95e337ee496df058eb175b433418a941 + languageName: node + linkType: hard + +"@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0": + version: 2.0.6 + resolution: "@types/istanbul-lib-coverage@npm:2.0.6" + checksum: 10c0/3948088654f3eeb45363f1db158354fb013b362dba2a5c2c18c559484d5eb9f6fd85b23d66c0a7c2fcfab7308d0a585b14dadaca6cc8bf89ebfdc7f8f5102fb7 + languageName: node + linkType: hard + +"@types/istanbul-lib-report@npm:*": + version: 3.0.3 + resolution: "@types/istanbul-lib-report@npm:3.0.3" + dependencies: + "@types/istanbul-lib-coverage": "npm:*" + checksum: 10c0/247e477bbc1a77248f3c6de5dadaae85ff86ac2d76c5fc6ab1776f54512a745ff2a5f791d22b942e3990ddbd40f3ef5289317c4fca5741bedfaa4f01df89051c + languageName: node + linkType: hard + +"@types/istanbul-reports@npm:^3.0.0": + version: 3.0.4 + resolution: "@types/istanbul-reports@npm:3.0.4" + dependencies: + "@types/istanbul-lib-report": "npm:*" + checksum: 10c0/1647fd402aced5b6edac87274af14ebd6b3a85447ef9ad11853a70fd92a98d35f81a5d3ea9fcb5dbb5834e800c6e35b64475e33fcae6bfa9acc70d61497c54ee + languageName: node + linkType: hard + +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.15, @types/json-schema@npm:^7.0.4, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": + version: 7.0.15 + resolution: "@types/json-schema@npm:7.0.15" + checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db + languageName: node + linkType: hard + +"@types/katex@npm:^0.16.0": + version: 0.16.7 + resolution: "@types/katex@npm:0.16.7" + checksum: 10c0/68dcb9f68a90513ec78ca0196a142e15c2a2c270b1520d752bafd47a99207115085a64087b50140359017d7e9c870b3c68e7e4d36668c9e348a9ef0c48919b5a + languageName: node + linkType: hard + +"@types/mdast@npm:^4.0.0, @types/mdast@npm:^4.0.1, @types/mdast@npm:^4.0.2, @types/mdast@npm:^4.0.3": + version: 4.0.4 + resolution: "@types/mdast@npm:4.0.4" + dependencies: + "@types/unist": "npm:*" + checksum: 10c0/84f403dbe582ee508fd9c7643ac781ad8597fcbfc9ccb8d4715a2c92e4545e5772cbd0dbdf18eda65789386d81b009967fdef01b24faf6640f817287f54d9c82 + languageName: node + linkType: hard + +"@types/mdx@npm:^2.0.0": + version: 2.0.13 + resolution: "@types/mdx@npm:2.0.13" + checksum: 10c0/5edf1099505ac568da55f9ae8a93e7e314e8cbc13d3445d0be61b75941226b005e1390d9b95caecf5dcb00c9d1bab2f1f60f6ff9876dc091a48b547495007720 + languageName: node + linkType: hard + +"@types/mime@npm:^1": + version: 1.3.5 + resolution: "@types/mime@npm:1.3.5" + checksum: 10c0/c2ee31cd9b993804df33a694d5aa3fa536511a49f2e06eeab0b484fef59b4483777dbb9e42a4198a0809ffbf698081fdbca1e5c2218b82b91603dfab10a10fbc + languageName: node + linkType: hard + +"@types/ms@npm:*": + version: 2.1.0 + resolution: "@types/ms@npm:2.1.0" + checksum: 10c0/5ce692ffe1549e1b827d99ef8ff71187457e0eb44adbae38fdf7b9a74bae8d20642ee963c14516db1d35fa2652e65f47680fdf679dcbde52bbfadd021f497225 + languageName: node + linkType: hard + +"@types/node-forge@npm:^1.3.0": + version: 1.3.11 + resolution: "@types/node-forge@npm:1.3.11" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/3d7d23ca0ba38ac0cf74028393bd70f31169ab9aba43f21deb787840170d307d662644bac07287495effe2812ddd7ac8a14dbd43f16c2936bbb06312e96fc3b9 + languageName: node + linkType: hard + +"@types/node@npm:*": + version: 22.15.18 + resolution: "@types/node@npm:22.15.18" + dependencies: + undici-types: "npm:~6.21.0" + checksum: 10c0/e23178c568e2dc6b93b6aa3b8dfb45f9556e527918c947fe7406a4c92d2184c7396558912400c3b1b8d0fa952ec63819aca2b8e4d3545455fc6f1e9623e09ca6 + languageName: node + linkType: hard + +"@types/node@npm:^17.0.5": + version: 17.0.45 + resolution: "@types/node@npm:17.0.45" + checksum: 10c0/0db377133d709b33a47892581a21a41cd7958f22723a3cc6c71d55ac018121382de42fbfc7970d5ae3e7819dbe5f40e1c6a5174aedf7e7964e9cb8fa72b580b0 + languageName: node + linkType: hard + +"@types/parse-json@npm:^4.0.0": + version: 4.0.2 + resolution: "@types/parse-json@npm:4.0.2" + checksum: 10c0/b1b863ac34a2c2172fbe0807a1ec4d5cb684e48d422d15ec95980b81475fac4fdb3768a8b13eef39130203a7c04340fc167bae057c7ebcafd7dec9fe6c36aeb1 + languageName: node + linkType: hard + +"@types/prismjs@npm:^1.26.0": + version: 1.26.5 + resolution: "@types/prismjs@npm:1.26.5" + checksum: 10c0/5619cb449e0d8df098c8759d6f47bf8fdd510abf5dbdfa999e55c6a2545efbd1e209cc85a33d8d9f4ff2898089a1a6d9a70737c9baffaae635c46852c40d384a + languageName: node + linkType: hard + +"@types/qs@npm:*": + version: 6.9.18 + resolution: "@types/qs@npm:6.9.18" + checksum: 10c0/790b9091348e06dde2c8e4118b5771ab386a8c22a952139a2eb0675360a2070d0b155663bf6f75b23f258fd0a1f7ffc0ba0f059d99a719332c03c40d9e9cd63b + languageName: node + linkType: hard + +"@types/range-parser@npm:*": + version: 1.2.7 + resolution: "@types/range-parser@npm:1.2.7" + checksum: 10c0/361bb3e964ec5133fa40644a0b942279ed5df1949f21321d77de79f48b728d39253e5ce0408c9c17e4e0fd95ca7899da36841686393b9f7a1e209916e9381a3c + languageName: node + linkType: hard + +"@types/react-router-config@npm:*, @types/react-router-config@npm:^5.0.7": + version: 5.0.11 + resolution: "@types/react-router-config@npm:5.0.11" + dependencies: + "@types/history": "npm:^4.7.11" + "@types/react": "npm:*" + "@types/react-router": "npm:^5.1.0" + checksum: 10c0/3fa4daf8c14689a05f34e289fc53c4a892e97f35715455c507a8048d9875b19cd3d3142934ca973effed6a6c38f33539b6e173cd254f67e2021ecd5458d551c8 + languageName: node + linkType: hard + +"@types/react-router-dom@npm:*": + version: 5.3.3 + resolution: "@types/react-router-dom@npm:5.3.3" + dependencies: + "@types/history": "npm:^4.7.11" + "@types/react": "npm:*" + "@types/react-router": "npm:*" + checksum: 10c0/a9231a16afb9ed5142678147eafec9d48582809295754fb60946e29fcd3757a4c7a3180fa94b45763e4c7f6e3f02379e2fcb8dd986db479dcab40eff5fc62a91 + languageName: node + linkType: hard + +"@types/react-router@npm:*, @types/react-router@npm:^5.1.0": + version: 5.1.20 + resolution: "@types/react-router@npm:5.1.20" + dependencies: + "@types/history": "npm:^4.7.11" + "@types/react": "npm:*" + checksum: 10c0/1f7eee61981d2f807fa01a34a0ef98ebc0774023832b6611a69c7f28fdff01de5a38cabf399f32e376bf8099dcb7afaf724775bea9d38870224492bea4cb5737 + languageName: node + linkType: hard + +"@types/react@npm:*": + version: 19.1.4 + resolution: "@types/react@npm:19.1.4" + dependencies: + csstype: "npm:^3.0.2" + checksum: 10c0/501350d4f9cef13c5dd1b1496fa70ebaff52f6fa359b623b51c9d817e5bc4333fa3c8b7a6a4cbc88c643385052d66a243c3ceccfd6926062f917a2dd0535f6b3 + languageName: node + linkType: hard + +"@types/retry@npm:0.12.0": + version: 0.12.0 + resolution: "@types/retry@npm:0.12.0" + checksum: 10c0/7c5c9086369826f569b83a4683661557cab1361bac0897a1cefa1a915ff739acd10ca0d62b01071046fe3f5a3f7f2aec80785fe283b75602dc6726781ea3e328 + languageName: node + linkType: hard + +"@types/sax@npm:^1.2.1": + version: 1.2.7 + resolution: "@types/sax@npm:1.2.7" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/d077a761a0753b079bf8279b3993948030ca86ed9125437b9b29c1de40db9b2deb7fddc369f014b58861d450e8b8cc75f163aa29dc8cea81952efbfd859168cf + languageName: node + linkType: hard + +"@types/send@npm:*": + version: 0.17.4 + resolution: "@types/send@npm:0.17.4" + dependencies: + "@types/mime": "npm:^1" + "@types/node": "npm:*" + checksum: 10c0/7f17fa696cb83be0a104b04b424fdedc7eaba1c9a34b06027239aba513b398a0e2b7279778af521f516a397ced417c96960e5f50fcfce40c4bc4509fb1a5883c + languageName: node + linkType: hard + +"@types/serve-index@npm:^1.9.1": + version: 1.9.4 + resolution: "@types/serve-index@npm:1.9.4" + dependencies: + "@types/express": "npm:*" + checksum: 10c0/94c1b9e8f1ea36a229e098e1643d5665d9371f8c2658521718e259130a237c447059b903bac0dcc96ee2c15fd63f49aa647099b7d0d437a67a6946527a837438 + languageName: node + linkType: hard + +"@types/serve-static@npm:*, @types/serve-static@npm:^1.13.10": + version: 1.15.7 + resolution: "@types/serve-static@npm:1.15.7" + dependencies: + "@types/http-errors": "npm:*" + "@types/node": "npm:*" + "@types/send": "npm:*" + checksum: 10c0/26ec864d3a626ea627f8b09c122b623499d2221bbf2f470127f4c9ebfe92bd8a6bb5157001372d4c4bd0dd37a1691620217d9dc4df5aa8f779f3fd996b1c60ae + languageName: node + linkType: hard + +"@types/sockjs@npm:^0.3.33": + version: 0.3.36 + resolution: "@types/sockjs@npm:0.3.36" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/b20b7820ee813f22de4f2ce98bdd12c68c930e016a8912b1ed967595ac0d8a4cbbff44f4d486dd97f77f5927e7b5725bdac7472c9ec5b27f53a5a13179f0612f + languageName: node + linkType: hard + +"@types/unist@npm:*, @types/unist@npm:^3.0.0, @types/unist@npm:^3.0.2": + version: 3.0.3 + resolution: "@types/unist@npm:3.0.3" + checksum: 10c0/2b1e4adcab78388e088fcc3c0ae8700f76619dbcb4741d7d201f87e2cb346bfc29a89003cfea2d76c996e1061452e14fcd737e8b25aacf949c1f2d6b2bc3dd60 + languageName: node + linkType: hard + +"@types/unist@npm:^2.0.0": + version: 2.0.11 + resolution: "@types/unist@npm:2.0.11" + checksum: 10c0/24dcdf25a168f453bb70298145eb043cfdbb82472db0bc0b56d6d51cd2e484b9ed8271d4ac93000a80da568f2402e9339723db262d0869e2bf13bc58e081768d + languageName: node + linkType: hard + +"@types/ws@npm:^8.5.5": + version: 8.18.1 + resolution: "@types/ws@npm:8.18.1" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/61aff1129143fcc4312f083bc9e9e168aa3026b7dd6e70796276dcfb2c8211c4292603f9c4864fae702f2ed86e4abd4d38aa421831c2fd7f856c931a481afbab + languageName: node + linkType: hard + +"@types/yargs-parser@npm:*": + version: 21.0.3 + resolution: "@types/yargs-parser@npm:21.0.3" + checksum: 10c0/e71c3bd9d0b73ca82e10bee2064c384ab70f61034bbfb78e74f5206283fc16a6d85267b606b5c22cb2a3338373586786fed595b2009825d6a9115afba36560a0 + languageName: node + linkType: hard + +"@types/yargs@npm:^17.0.8": + version: 17.0.33 + resolution: "@types/yargs@npm:17.0.33" + dependencies: + "@types/yargs-parser": "npm:*" + checksum: 10c0/d16937d7ac30dff697801c3d6f235be2166df42e4a88bf730fa6dc09201de3727c0a9500c59a672122313341de5f24e45ee0ff579c08ce91928e519090b7906b + languageName: node + linkType: hard + +"@ungap/structured-clone@npm:^1.0.0": + version: 1.3.0 + resolution: "@ungap/structured-clone@npm:1.3.0" + checksum: 10c0/0fc3097c2540ada1fc340ee56d58d96b5b536a2a0dab6e3ec17d4bfc8c4c86db345f61a375a8185f9da96f01c69678f836a2b57eeaa9e4b8eeafd26428e57b0a + languageName: node + linkType: hard + +"@vercel/analytics@npm:^1.1.2": + version: 1.5.0 + resolution: "@vercel/analytics@npm:1.5.0" + peerDependencies: + "@remix-run/react": ^2 + "@sveltejs/kit": ^1 || ^2 + next: ">= 13" + react: ^18 || ^19 || ^19.0.0-rc + svelte: ">= 4" + vue: ^3 + vue-router: ^4 + peerDependenciesMeta: + "@remix-run/react": + optional: true + "@sveltejs/kit": + optional: true + next: + optional: true + react: + optional: true + svelte: + optional: true + vue: + optional: true + vue-router: + optional: true + checksum: 10c0/43d33ea83b32f5203fec21b7f43c399e398f0c37d2dd341d522969e0e6ee23fd652a2766a4203a3ce573f711beee5ee1ab7d36316f767a4901160e3e96ee31e5 + languageName: node + linkType: hard + +"@webassemblyjs/ast@npm:1.14.1, @webassemblyjs/ast@npm:^1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/ast@npm:1.14.1" + dependencies: + "@webassemblyjs/helper-numbers": "npm:1.13.2" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + checksum: 10c0/67a59be8ed50ddd33fbb2e09daa5193ac215bf7f40a9371be9a0d9797a114d0d1196316d2f3943efdb923a3d809175e1563a3cb80c814fb8edccd1e77494972b + languageName: node + linkType: hard + +"@webassemblyjs/floating-point-hex-parser@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.13.2" + checksum: 10c0/0e88bdb8b50507d9938be64df0867f00396b55eba9df7d3546eb5dc0ca64d62e06f8d881ec4a6153f2127d0f4c11d102b6e7d17aec2f26bb5ff95a5e60652412 + languageName: node + linkType: hard + +"@webassemblyjs/helper-api-error@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/helper-api-error@npm:1.13.2" + checksum: 10c0/31be497f996ed30aae4c08cac3cce50c8dcd5b29660383c0155fce1753804fc55d47fcba74e10141c7dd2899033164e117b3bcfcda23a6b043e4ded4f1003dfb + languageName: node + linkType: hard + +"@webassemblyjs/helper-buffer@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/helper-buffer@npm:1.14.1" + checksum: 10c0/0d54105dc373c0fe6287f1091e41e3a02e36cdc05e8cf8533cdc16c59ff05a646355415893449d3768cda588af451c274f13263300a251dc11a575bc4c9bd210 + languageName: node + linkType: hard + +"@webassemblyjs/helper-numbers@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/helper-numbers@npm:1.13.2" + dependencies: + "@webassemblyjs/floating-point-hex-parser": "npm:1.13.2" + "@webassemblyjs/helper-api-error": "npm:1.13.2" + "@xtuc/long": "npm:4.2.2" + checksum: 10c0/9c46852f31b234a8fb5a5a9d3f027bc542392a0d4de32f1a9c0075d5e8684aa073cb5929b56df565500b3f9cc0a2ab983b650314295b9bf208d1a1651bfc825a + languageName: node + linkType: hard + +"@webassemblyjs/helper-wasm-bytecode@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.13.2" + checksum: 10c0/c4355d14f369b30cf3cbdd3acfafc7d0488e086be6d578e3c9780bd1b512932352246be96e034e2a7fcfba4f540ec813352f312bfcbbfe5bcfbf694f82ccc682 + languageName: node + linkType: hard + +"@webassemblyjs/helper-wasm-section@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/helper-wasm-section@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-buffer": "npm:1.14.1" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + "@webassemblyjs/wasm-gen": "npm:1.14.1" + checksum: 10c0/1f9b33731c3c6dbac3a9c483269562fa00d1b6a4e7133217f40e83e975e636fd0f8736e53abd9a47b06b66082ecc976c7384391ab0a68e12d509ea4e4b948d64 + languageName: node + linkType: hard + +"@webassemblyjs/ieee754@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/ieee754@npm:1.13.2" + dependencies: + "@xtuc/ieee754": "npm:^1.2.0" + checksum: 10c0/2e732ca78c6fbae3c9b112f4915d85caecdab285c0b337954b180460290ccd0fb00d2b1dc4bb69df3504abead5191e0d28d0d17dfd6c9d2f30acac8c4961c8a7 + languageName: node + linkType: hard + +"@webassemblyjs/leb128@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/leb128@npm:1.13.2" + dependencies: + "@xtuc/long": "npm:4.2.2" + checksum: 10c0/dad5ef9e383c8ab523ce432dfd80098384bf01c45f70eb179d594f85ce5db2f80fa8c9cba03adafd85684e6d6310f0d3969a882538975989919329ac4c984659 + languageName: node + linkType: hard + +"@webassemblyjs/utf8@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/utf8@npm:1.13.2" + checksum: 10c0/d3fac9130b0e3e5a1a7f2886124a278e9323827c87a2b971e6d0da22a2ba1278ac9f66a4f2e363ecd9fac8da42e6941b22df061a119e5c0335f81006de9ee799 + languageName: node + linkType: hard + +"@webassemblyjs/wasm-edit@npm:^1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-edit@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-buffer": "npm:1.14.1" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + "@webassemblyjs/helper-wasm-section": "npm:1.14.1" + "@webassemblyjs/wasm-gen": "npm:1.14.1" + "@webassemblyjs/wasm-opt": "npm:1.14.1" + "@webassemblyjs/wasm-parser": "npm:1.14.1" + "@webassemblyjs/wast-printer": "npm:1.14.1" + checksum: 10c0/5ac4781086a2ca4b320bdbfd965a209655fe8a208ca38d89197148f8597e587c9a2c94fb6bd6f1a7dbd4527c49c6844fcdc2af981f8d793a97bf63a016aa86d2 + languageName: node + linkType: hard + +"@webassemblyjs/wasm-gen@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-gen@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + "@webassemblyjs/ieee754": "npm:1.13.2" + "@webassemblyjs/leb128": "npm:1.13.2" + "@webassemblyjs/utf8": "npm:1.13.2" + checksum: 10c0/d678810d7f3f8fecb2e2bdadfb9afad2ec1d2bc79f59e4711ab49c81cec578371e22732d4966f59067abe5fba8e9c54923b57060a729d28d408e608beef67b10 + languageName: node + linkType: hard + +"@webassemblyjs/wasm-opt@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-opt@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-buffer": "npm:1.14.1" + "@webassemblyjs/wasm-gen": "npm:1.14.1" + "@webassemblyjs/wasm-parser": "npm:1.14.1" + checksum: 10c0/515bfb15277ee99ba6b11d2232ddbf22aed32aad6d0956fe8a0a0a004a1b5a3a277a71d9a3a38365d0538ac40d1b7b7243b1a244ad6cd6dece1c1bb2eb5de7ee + languageName: node + linkType: hard + +"@webassemblyjs/wasm-parser@npm:1.14.1, @webassemblyjs/wasm-parser@npm:^1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-parser@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-api-error": "npm:1.13.2" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + "@webassemblyjs/ieee754": "npm:1.13.2" + "@webassemblyjs/leb128": "npm:1.13.2" + "@webassemblyjs/utf8": "npm:1.13.2" + checksum: 10c0/95427b9e5addbd0f647939bd28e3e06b8deefdbdadcf892385b5edc70091bf9b92fa5faac3fce8333554437c5d85835afef8c8a7d9d27ab6ba01ffab954db8c6 + languageName: node + linkType: hard + +"@webassemblyjs/wast-printer@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wast-printer@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": "npm:1.14.1" + "@xtuc/long": "npm:4.2.2" + checksum: 10c0/8d7768608996a052545251e896eac079c98e0401842af8dd4de78fba8d90bd505efb6c537e909cd6dae96e09db3fa2e765a6f26492553a675da56e2db51f9d24 + languageName: node + linkType: hard + +"@xtuc/ieee754@npm:^1.2.0": + version: 1.2.0 + resolution: "@xtuc/ieee754@npm:1.2.0" + checksum: 10c0/a8565d29d135039bd99ae4b2220d3e167d22cf53f867e491ed479b3f84f895742d0097f935b19aab90265a23d5d46711e4204f14c479ae3637fbf06c4666882f + languageName: node + linkType: hard + +"@xtuc/long@npm:4.2.2": + version: 4.2.2 + resolution: "@xtuc/long@npm:4.2.2" + checksum: 10c0/8582cbc69c79ad2d31568c412129bf23d2b1210a1dfb60c82d5a1df93334da4ee51f3057051658569e2c196d8dc33bc05ae6b974a711d0d16e801e1d0647ccd1 + languageName: node + linkType: hard + +"abbrev@npm:^3.0.0": + version: 3.0.1 + resolution: "abbrev@npm:3.0.1" + checksum: 10c0/21ba8f574ea57a3106d6d35623f2c4a9111d9ee3e9a5be47baed46ec2457d2eac46e07a5c4a60186f88cb98abbe3e24f2d4cca70bc2b12f1692523e2209a9ccf + languageName: node + linkType: hard + +"accepts@npm:~1.3.4, accepts@npm:~1.3.8": + version: 1.3.8 + resolution: "accepts@npm:1.3.8" + dependencies: + mime-types: "npm:~2.1.34" + negotiator: "npm:0.6.3" + checksum: 10c0/3a35c5f5586cfb9a21163ca47a5f77ac34fa8ceb5d17d2fa2c0d81f41cbd7f8c6fa52c77e2c039acc0f4d09e71abdc51144246900f6bef5e3c4b333f77d89362 + languageName: node + linkType: hard + +"acorn-jsx@npm:^5.0.0": + version: 5.3.2 + resolution: "acorn-jsx@npm:5.3.2" + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: 10c0/4c54868fbef3b8d58927d5e33f0a4de35f59012fe7b12cf9dfbb345fb8f46607709e1c4431be869a23fb63c151033d84c4198fa9f79385cec34fcb1dd53974c1 + languageName: node + linkType: hard + +"acorn-walk@npm:^8.0.0": + version: 8.3.4 + resolution: "acorn-walk@npm:8.3.4" + dependencies: + acorn: "npm:^8.11.0" + checksum: 10c0/76537ac5fb2c37a64560feaf3342023dadc086c46da57da363e64c6148dc21b57d49ace26f949e225063acb6fb441eabffd89f7a3066de5ad37ab3e328927c62 + languageName: node + linkType: hard + +"acorn@npm:^8.0.0, acorn@npm:^8.0.4, acorn@npm:^8.11.0, acorn@npm:^8.14.0, acorn@npm:^8.8.2": + version: 8.14.1 + resolution: "acorn@npm:8.14.1" + bin: + acorn: bin/acorn + checksum: 10c0/dbd36c1ed1d2fa3550140000371fcf721578095b18777b85a79df231ca093b08edc6858d75d6e48c73e431c174dcf9214edbd7e6fa5911b93bd8abfa54e47123 + languageName: node + linkType: hard + +"address@npm:^1.0.1, address@npm:^1.1.2": + version: 1.2.2 + resolution: "address@npm:1.2.2" + checksum: 10c0/1c8056b77fb124456997b78ed682ecc19d2fd7ea8bd5850a2aa8c3e3134c913847c57bcae418622efd32ba858fa1e242a40a251ac31da0515664fc0ac03a047d + languageName: node + linkType: hard + +"agent-base@npm:^7.1.0, agent-base@npm:^7.1.2": + version: 7.1.3 + resolution: "agent-base@npm:7.1.3" + checksum: 10c0/6192b580c5b1d8fb399b9c62bf8343d76654c2dd62afcb9a52b2cf44a8b6ace1e3b704d3fe3547d91555c857d3df02603341ff2cb961b9cfe2b12f9f3c38ee11 + languageName: node + linkType: hard + +"aggregate-error@npm:^3.0.0": + version: 3.1.0 + resolution: "aggregate-error@npm:3.1.0" + dependencies: + clean-stack: "npm:^2.0.0" + indent-string: "npm:^4.0.0" + checksum: 10c0/a42f67faa79e3e6687a4923050e7c9807db3848a037076f791d10e092677d65c1d2d863b7848560699f40fc0502c19f40963fb1cd1fb3d338a7423df8e45e039 + languageName: node + linkType: hard + +"ajv-formats@npm:^2.1.1": + version: 2.1.1 + resolution: "ajv-formats@npm:2.1.1" + dependencies: + ajv: "npm:^8.0.0" + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + checksum: 10c0/e43ba22e91b6a48d96224b83d260d3a3a561b42d391f8d3c6d2c1559f9aa5b253bfb306bc94bbeca1d967c014e15a6efe9a207309e95b3eaae07fcbcdc2af662 + languageName: node + linkType: hard + +"ajv-keywords@npm:^3.4.1, ajv-keywords@npm:^3.5.2": + version: 3.5.2 + resolution: "ajv-keywords@npm:3.5.2" + peerDependencies: + ajv: ^6.9.1 + checksum: 10c0/0c57a47cbd656e8cdfd99d7c2264de5868918ffa207c8d7a72a7f63379d4333254b2ba03d69e3c035e996a3fd3eb6d5725d7a1597cca10694296e32510546360 + languageName: node + linkType: hard + +"ajv-keywords@npm:^5.1.0": + version: 5.1.0 + resolution: "ajv-keywords@npm:5.1.0" + dependencies: + fast-deep-equal: "npm:^3.1.3" + peerDependencies: + ajv: ^8.8.2 + checksum: 10c0/18bec51f0171b83123ba1d8883c126e60c6f420cef885250898bf77a8d3e65e3bfb9e8564f497e30bdbe762a83e0d144a36931328616a973ee669dc74d4a9590 + languageName: node + linkType: hard + +"ajv@npm:^6.12.2, ajv@npm:^6.12.5": + version: 6.12.6 + resolution: "ajv@npm:6.12.6" + dependencies: + fast-deep-equal: "npm:^3.1.1" + fast-json-stable-stringify: "npm:^2.0.0" + json-schema-traverse: "npm:^0.4.1" + uri-js: "npm:^4.2.2" + checksum: 10c0/41e23642cbe545889245b9d2a45854ebba51cda6c778ebced9649420d9205f2efb39cb43dbc41e358409223b1ea43303ae4839db682c848b891e4811da1a5a71 + languageName: node + linkType: hard + +"ajv@npm:^8.0.0, ajv@npm:^8.9.0": + version: 8.17.1 + resolution: "ajv@npm:8.17.1" + dependencies: + fast-deep-equal: "npm:^3.1.3" + fast-uri: "npm:^3.0.1" + json-schema-traverse: "npm:^1.0.0" + require-from-string: "npm:^2.0.2" + checksum: 10c0/ec3ba10a573c6b60f94639ffc53526275917a2df6810e4ab5a6b959d87459f9ef3f00d5e7865b82677cb7d21590355b34da14d1d0b9c32d75f95a187e76fff35 + languageName: node + linkType: hard + +"algoliasearch-helper@npm:^3.22.6": + version: 3.25.0 + resolution: "algoliasearch-helper@npm:3.25.0" + dependencies: + "@algolia/events": "npm:^4.0.1" + peerDependencies: + algoliasearch: ">= 3.1 < 6" + checksum: 10c0/932e1397e702f7722450e12a852f6f366aa581dfb1801d078153d591a94d5ccf7da4098cd381f8c684463638aca738f468ba7e968da6e97a7bba14870aa3c5df + languageName: node + linkType: hard + +"algoliasearch@npm:^5.14.2, algoliasearch@npm:^5.17.1": + version: 5.25.0 + resolution: "algoliasearch@npm:5.25.0" + dependencies: + "@algolia/client-abtesting": "npm:5.25.0" + "@algolia/client-analytics": "npm:5.25.0" + "@algolia/client-common": "npm:5.25.0" + "@algolia/client-insights": "npm:5.25.0" + "@algolia/client-personalization": "npm:5.25.0" + "@algolia/client-query-suggestions": "npm:5.25.0" + "@algolia/client-search": "npm:5.25.0" + "@algolia/ingestion": "npm:1.25.0" + "@algolia/monitoring": "npm:1.25.0" + "@algolia/recommend": "npm:5.25.0" + "@algolia/requester-browser-xhr": "npm:5.25.0" + "@algolia/requester-fetch": "npm:5.25.0" + "@algolia/requester-node-http": "npm:5.25.0" + checksum: 10c0/fdf2b03c48415a7f284697bbe316bba41d4d6b0c5c76e886aa9841e69b8bc79305b0679d29dece71a347eef8ef3715980ed6a736febaca8f869b6551e470decf + languageName: node + linkType: hard + +"ansi-align@npm:^3.0.1": + version: 3.0.1 + resolution: "ansi-align@npm:3.0.1" + dependencies: + string-width: "npm:^4.1.0" + checksum: 10c0/ad8b755a253a1bc8234eb341e0cec68a857ab18bf97ba2bda529e86f6e30460416523e0ec58c32e5c21f0ca470d779503244892873a5895dbd0c39c788e82467 + languageName: node + linkType: hard + +"ansi-escapes@npm:^4.3.2": + version: 4.3.2 + resolution: "ansi-escapes@npm:4.3.2" + dependencies: + type-fest: "npm:^0.21.3" + checksum: 10c0/da917be01871525a3dfcf925ae2977bc59e8c513d4423368645634bf5d4ceba5401574eb705c1e92b79f7292af5a656f78c5725a4b0e1cec97c4b413705c1d50 + languageName: node + linkType: hard + +"ansi-html-community@npm:^0.0.8": + version: 0.0.8 + resolution: "ansi-html-community@npm:0.0.8" + bin: + ansi-html: bin/ansi-html + checksum: 10c0/45d3a6f0b4f10b04fdd44bef62972e2470bfd917bf00439471fa7473d92d7cbe31369c73db863cc45dda115cb42527f39e232e9256115534b8ee5806b0caeed4 + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 10c0/9a64bb8627b434ba9327b60c027742e5d17ac69277960d041898596271d992d4d52ba7267a63ca10232e29f6107fc8a835f6ce8d719b88c5f8493f8254813737 + languageName: node + linkType: hard + +"ansi-regex@npm:^6.0.1": + version: 6.1.0 + resolution: "ansi-regex@npm:6.1.0" + checksum: 10c0/a91daeddd54746338478eef88af3439a7edf30f8e23196e2d6ed182da9add559c601266dbef01c2efa46a958ad6f1f8b176799657616c702b5b02e799e7fd8dc + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: "npm:^2.0.1" + checksum: 10c0/895a23929da416f2bd3de7e9cb4eabd340949328ab85ddd6e484a637d8f6820d485f53933446f5291c3b760cbc488beb8e88573dd0f9c7daf83dccc8fe81b041 + languageName: node + linkType: hard + +"ansi-styles@npm:^6.1.0": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: 10c0/5d1ec38c123984bcedd996eac680d548f31828bd679a66db2bdf11844634dde55fec3efa9c6bb1d89056a5e79c1ac540c4c784d592ea1d25028a92227d2f2d5c + languageName: node + linkType: hard + +"anymatch@npm:~3.1.2": + version: 3.1.3 + resolution: "anymatch@npm:3.1.3" + dependencies: + normalize-path: "npm:^3.0.0" + picomatch: "npm:^2.0.4" + checksum: 10c0/57b06ae984bc32a0d22592c87384cd88fe4511b1dd7581497831c56d41939c8a001b28e7b853e1450f2bf61992dfcaa8ae2d0d161a0a90c4fb631ef07098fbac + languageName: node + linkType: hard + +"arg@npm:^5.0.0": + version: 5.0.2 + resolution: "arg@npm:5.0.2" + checksum: 10c0/ccaf86f4e05d342af6666c569f844bec426595c567d32a8289715087825c2ca7edd8a3d204e4d2fb2aa4602e09a57d0c13ea8c9eea75aac3dbb4af5514e6800e + languageName: node + linkType: hard + +"argparse@npm:^1.0.7": + version: 1.0.10 + resolution: "argparse@npm:1.0.10" + dependencies: + sprintf-js: "npm:~1.0.2" + checksum: 10c0/b2972c5c23c63df66bca144dbc65d180efa74f25f8fd9b7d9a0a6c88ae839db32df3d54770dcb6460cf840d232b60695d1a6b1053f599d84e73f7437087712de + languageName: node + linkType: hard + +"argparse@npm:^2.0.1": + version: 2.0.1 + resolution: "argparse@npm:2.0.1" + checksum: 10c0/c5640c2d89045371c7cedd6a70212a04e360fd34d6edeae32f6952c63949e3525ea77dbec0289d8213a99bbaeab5abfa860b5c12cf88a2e6cf8106e90dd27a7e + languageName: node + linkType: hard + +"array-flatten@npm:1.1.1": + version: 1.1.1 + resolution: "array-flatten@npm:1.1.1" + checksum: 10c0/806966c8abb2f858b08f5324d9d18d7737480610f3bd5d3498aaae6eb5efdc501a884ba019c9b4a8f02ff67002058749d05548fd42fa8643f02c9c7f22198b91 + languageName: node + linkType: hard + +"array-union@npm:^2.1.0": + version: 2.1.0 + resolution: "array-union@npm:2.1.0" + checksum: 10c0/429897e68110374f39b771ec47a7161fc6a8fc33e196857c0a396dc75df0b5f65e4d046674db764330b6bb66b39ef48dd7c53b6a2ee75cfb0681e0c1a7033962 + languageName: node + linkType: hard + +"astring@npm:^1.8.0": + version: 1.9.0 + resolution: "astring@npm:1.9.0" + bin: + astring: bin/astring + checksum: 10c0/e7519544d9824494e80ef0e722bb3a0c543a31440d59691c13aeaceb75b14502af536b23f08db50aa6c632dafaade54caa25f0788aa7550b6b2d6e2df89e0830 + languageName: node + linkType: hard + +"at-least-node@npm:^1.0.0": + version: 1.0.0 + resolution: "at-least-node@npm:1.0.0" + checksum: 10c0/4c058baf6df1bc5a1697cf182e2029c58cd99975288a13f9e70068ef5d6f4e1f1fd7c4d2c3c4912eae44797d1725be9700995736deca441b39f3e66d8dee97ef + languageName: node + linkType: hard + +"autoprefixer@npm:^10.4.19, autoprefixer@npm:^10.4.21": + version: 10.4.21 + resolution: "autoprefixer@npm:10.4.21" + dependencies: + browserslist: "npm:^4.24.4" + caniuse-lite: "npm:^1.0.30001702" + fraction.js: "npm:^4.3.7" + normalize-range: "npm:^0.1.2" + picocolors: "npm:^1.1.1" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.1.0 + bin: + autoprefixer: bin/autoprefixer + checksum: 10c0/de5b71d26d0baff4bbfb3d59f7cf7114a6030c9eeb66167acf49a32c5b61c68e308f1e0f869d92334436a221035d08b51cd1b2f2c4689b8d955149423c16d4d4 + languageName: node + linkType: hard + +"babel-loader@npm:^9.2.1": + version: 9.2.1 + resolution: "babel-loader@npm:9.2.1" + dependencies: + find-cache-dir: "npm:^4.0.0" + schema-utils: "npm:^4.0.0" + peerDependencies: + "@babel/core": ^7.12.0 + webpack: ">=5" + checksum: 10c0/efb82faff4c7c27e9c15bb28bf11c73200e61cf365118a9514e8d74dd489d0afc2a0d5aaa62cb4254eefc2ab631579224d95a03fd245410f28ea75e24de54ba4 + languageName: node + linkType: hard + +"babel-plugin-dynamic-import-node@npm:^2.3.3": + version: 2.3.3 + resolution: "babel-plugin-dynamic-import-node@npm:2.3.3" + dependencies: + object.assign: "npm:^4.1.0" + checksum: 10c0/1bd80df981e1fc1aff0cd4e390cf27aaa34f95f7620cd14dff07ba3bad56d168c098233a7d2deb2c9b1dc13643e596a6b94fc608a3412ee3c56e74a25cd2167e + languageName: node + linkType: hard + +"babel-plugin-polyfill-corejs2@npm:^0.4.10": + version: 0.4.13 + resolution: "babel-plugin-polyfill-corejs2@npm:0.4.13" + dependencies: + "@babel/compat-data": "npm:^7.22.6" + "@babel/helper-define-polyfill-provider": "npm:^0.6.4" + semver: "npm:^6.3.1" + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 10c0/b4a54561606d388e6f9499f39f03171af4be7f9ce2355e737135e40afa7086cf6790fdd706c2e59f488c8fa1f76123d28783708e07ddc84647dca8ed8fb98e06 + languageName: node + linkType: hard + +"babel-plugin-polyfill-corejs3@npm:^0.11.0": + version: 0.11.1 + resolution: "babel-plugin-polyfill-corejs3@npm:0.11.1" + dependencies: + "@babel/helper-define-polyfill-provider": "npm:^0.6.3" + core-js-compat: "npm:^3.40.0" + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 10c0/025f754b6296d84b20200aff63a3c1acdd85e8c621781f2bd27fe2512d0060526192d02329326947c6b29c27cf475fbcfaaff8c51eab1d2bfc7b79086bb64229 + languageName: node + linkType: hard + +"babel-plugin-polyfill-regenerator@npm:^0.6.1": + version: 0.6.4 + resolution: "babel-plugin-polyfill-regenerator@npm:0.6.4" + dependencies: + "@babel/helper-define-polyfill-provider": "npm:^0.6.4" + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + checksum: 10c0/ebaaf9e4e53201c02f496d3f686d815e94177b3e55b35f11223b99c60d197a29f907a2e87bbcccced8b7aff22a807fccc1adaf04722864a8e1862c8845ab830a + languageName: node + linkType: hard + +"bail@npm:^2.0.0": + version: 2.0.2 + resolution: "bail@npm:2.0.2" + checksum: 10c0/25cbea309ef6a1f56214187004e8f34014eb015713ea01fa5b9b7e9e776ca88d0fdffd64143ac42dc91966c915a4b7b683411b56e14929fad16153fc026ffb8b + languageName: node + linkType: hard + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 10c0/9308baf0a7e4838a82bbfd11e01b1cb0f0cf2893bc1676c27c2a8c0e70cbae1c59120c3268517a8ae7fb6376b4639ef81ca22582611dbee4ed28df945134aaee + languageName: node + linkType: hard + +"batch@npm:0.6.1": + version: 0.6.1 + resolution: "batch@npm:0.6.1" + checksum: 10c0/925a13897b4db80d4211082fe287bcf96d297af38e26448c857cee3e095c9792e3b8f26b37d268812e7f38a589f694609de8534a018b1937d7dc9f84e6b387c5 + languageName: node + linkType: hard + +"big.js@npm:^5.2.2": + version: 5.2.2 + resolution: "big.js@npm:5.2.2" + checksum: 10c0/230520f1ff920b2d2ce3e372d77a33faa4fa60d802fe01ca4ffbc321ee06023fe9a741ac02793ee778040a16b7e497f7d60c504d1c402b8fdab6f03bb785a25f + languageName: node + linkType: hard + +"binary-extensions@npm:^2.0.0": + version: 2.3.0 + resolution: "binary-extensions@npm:2.3.0" + checksum: 10c0/75a59cafc10fb12a11d510e77110c6c7ae3f4ca22463d52487709ca7f18f69d886aa387557cc9864fbdb10153d0bdb4caacabf11541f55e89ed6e18d12ece2b5 + languageName: node + linkType: hard + +"bittensor-docs@workspace:.": + version: 0.0.0-use.local + resolution: "bittensor-docs@workspace:." + dependencies: + "@docsearch/react": "npm:^3.5.2" + "@docusaurus/core": "npm:^3.7.0" + "@docusaurus/module-type-aliases": "npm:^3.7.0" + "@docusaurus/plugin-client-redirects": "npm:^3.7.0" + "@docusaurus/plugin-content-docs": "npm:^3.7.0" + "@docusaurus/preset-classic": "npm:^3.7.0" + "@docusaurus/theme-classic": "npm:^3.7.0" + "@docusaurus/theme-common": "npm:^3.7.0" + "@docusaurus/theme-search-algolia": "npm:^3.7.0" + "@docusaurus/tsconfig": "npm:^3.7.0" + "@docusaurus/types": "npm:^3.7.0" + "@gracefullight/docusaurus-plugin-vercel-analytics": "npm:^1.0.0" + "@mdx-js/react": "npm:^3.0.0" + "@polkadot/api": "npm:^16.4.8" + "@vercel/analytics": "npm:^1.1.2" + clsx: "npm:^1.2.1" + hast-util-is-element: "npm:1.1.0" + prism-react-renderer: "npm:^2.1.0" + punycode: "npm:^2.3.1" + react: "npm:^18.2.0" + react-dom: "npm:^18.2.0" + react-icons: "npm:^4.12.0" + rehype-katex: "npm:^7.0.1" + remark-definition-list: "npm:^2.0.0" + remark-math: "npm:^6.0.0" + typescript: "npm:~5.2.2" + zwitch: "npm:^2.0.4" + languageName: unknown + linkType: soft + +"bn.js@npm:^5.2.1": + version: 5.2.2 + resolution: "bn.js@npm:5.2.2" + checksum: 10c0/cb97827d476aab1a0194df33cd84624952480d92da46e6b4a19c32964aa01553a4a613502396712704da2ec8f831cf98d02e74ca03398404bd78a037ba93f2ab + languageName: node + linkType: hard + +"body-parser@npm:1.20.3": + version: 1.20.3 + resolution: "body-parser@npm:1.20.3" + dependencies: + bytes: "npm:3.1.2" + content-type: "npm:~1.0.5" + debug: "npm:2.6.9" + depd: "npm:2.0.0" + destroy: "npm:1.2.0" + http-errors: "npm:2.0.0" + iconv-lite: "npm:0.4.24" + on-finished: "npm:2.4.1" + qs: "npm:6.13.0" + raw-body: "npm:2.5.2" + type-is: "npm:~1.6.18" + unpipe: "npm:1.0.0" + checksum: 10c0/0a9a93b7518f222885498dcecaad528cf010dd109b071bf471c93def4bfe30958b83e03496eb9c1ad4896db543d999bb62be1a3087294162a88cfa1b42c16310 + languageName: node + linkType: hard + +"bonjour-service@npm:^1.0.11": + version: 1.3.0 + resolution: "bonjour-service@npm:1.3.0" + dependencies: + fast-deep-equal: "npm:^3.1.3" + multicast-dns: "npm:^7.2.5" + checksum: 10c0/5721fd9f9bb968e9cc16c1e8116d770863dd2329cb1f753231de1515870648c225142b7eefa71f14a5c22bc7b37ddd7fdeb018700f28a8c936d50d4162d433c7 + languageName: node + linkType: hard + +"boolbase@npm:^1.0.0": + version: 1.0.0 + resolution: "boolbase@npm:1.0.0" + checksum: 10c0/e4b53deb4f2b85c52be0e21a273f2045c7b6a6ea002b0e139c744cb6f95e9ec044439a52883b0d74dedd1ff3da55ed140cfdddfed7fb0cccbed373de5dce1bcf + languageName: node + linkType: hard + +"boxen@npm:^6.2.1": + version: 6.2.1 + resolution: "boxen@npm:6.2.1" + dependencies: + ansi-align: "npm:^3.0.1" + camelcase: "npm:^6.2.0" + chalk: "npm:^4.1.2" + cli-boxes: "npm:^3.0.0" + string-width: "npm:^5.0.1" + type-fest: "npm:^2.5.0" + widest-line: "npm:^4.0.1" + wrap-ansi: "npm:^8.0.1" + checksum: 10c0/2a50d059c950a50d9f3c873093702747740814ce8819225c4f8cbe92024c9f5a9219d2b7128f5cfa17c022644d929bbbc88b9591de67249c6ebe07f7486bdcfd + languageName: node + linkType: hard + +"boxen@npm:^7.0.0": + version: 7.1.1 + resolution: "boxen@npm:7.1.1" + dependencies: + ansi-align: "npm:^3.0.1" + camelcase: "npm:^7.0.1" + chalk: "npm:^5.2.0" + cli-boxes: "npm:^3.0.0" + string-width: "npm:^5.1.2" + type-fest: "npm:^2.13.0" + widest-line: "npm:^4.0.1" + wrap-ansi: "npm:^8.1.0" + checksum: 10c0/3a9891dc98ac40d582c9879e8165628258e2c70420c919e70fff0a53ccc7b42825e73cda6298199b2fbc1f41f5d5b93b492490ad2ae27623bed3897ddb4267f8 + languageName: node + linkType: hard + +"brace-expansion@npm:^1.1.7": + version: 1.1.11 + resolution: "brace-expansion@npm:1.1.11" + dependencies: + balanced-match: "npm:^1.0.0" + concat-map: "npm:0.0.1" + checksum: 10c0/695a56cd058096a7cb71fb09d9d6a7070113c7be516699ed361317aca2ec169f618e28b8af352e02ab4233fb54eb0168460a40dc320bab0034b36ab59aaad668 + languageName: node + linkType: hard + +"brace-expansion@npm:^2.0.1": + version: 2.0.1 + resolution: "brace-expansion@npm:2.0.1" + dependencies: + balanced-match: "npm:^1.0.0" + checksum: 10c0/b358f2fe060e2d7a87aa015979ecea07f3c37d4018f8d6deb5bd4c229ad3a0384fe6029bb76cd8be63c81e516ee52d1a0673edbe2023d53a5191732ae3c3e49f + languageName: node + linkType: hard + +"braces@npm:^3.0.3, braces@npm:~3.0.2": + version: 3.0.3 + resolution: "braces@npm:3.0.3" + dependencies: + fill-range: "npm:^7.1.1" + checksum: 10c0/7c6dfd30c338d2997ba77500539227b9d1f85e388a5f43220865201e407e076783d0881f2d297b9f80951b4c957fcf0b51c1d2d24227631643c3f7c284b0aa04 + languageName: node + linkType: hard + +"browserslist@npm:^4.0.0, browserslist@npm:^4.18.1, browserslist@npm:^4.23.0, browserslist@npm:^4.24.0, browserslist@npm:^4.24.4": + version: 4.24.5 + resolution: "browserslist@npm:4.24.5" + dependencies: + caniuse-lite: "npm:^1.0.30001716" + electron-to-chromium: "npm:^1.5.149" + node-releases: "npm:^2.0.19" + update-browserslist-db: "npm:^1.1.3" + bin: + browserslist: cli.js + checksum: 10c0/f4c1ce1a7d8fdfab5e5b88bb6e93d09e8a883c393f86801537a252da0362dbdcde4dbd97b318246c5d84c6607b2f6b47af732c1b000d6a8a881ee024bad29204 + languageName: node + linkType: hard + +"buffer-from@npm:^1.0.0": + version: 1.1.2 + resolution: "buffer-from@npm:1.1.2" + checksum: 10c0/124fff9d66d691a86d3b062eff4663fe437a9d9ee4b47b1b9e97f5a5d14f6d5399345db80f796827be7c95e70a8e765dd404b7c3ff3b3324f98e9b0c8826cc34 + languageName: node + linkType: hard + +"bytes@npm:3.0.0": + version: 3.0.0 + resolution: "bytes@npm:3.0.0" + checksum: 10c0/91d42c38601c76460519ffef88371caacaea483a354c8e4b8808e7b027574436a5713337c003ea3de63ee4991c2a9a637884fdfe7f761760d746929d9e8fec60 + languageName: node + linkType: hard + +"bytes@npm:3.1.2": + version: 3.1.2 + resolution: "bytes@npm:3.1.2" + checksum: 10c0/76d1c43cbd602794ad8ad2ae94095cddeb1de78c5dddaa7005c51af10b0176c69971a6d88e805a90c2b6550d76636e43c40d8427a808b8645ede885de4a0358e + languageName: node + linkType: hard + +"cacache@npm:^19.0.1": + version: 19.0.1 + resolution: "cacache@npm:19.0.1" + dependencies: + "@npmcli/fs": "npm:^4.0.0" + fs-minipass: "npm:^3.0.0" + glob: "npm:^10.2.2" + lru-cache: "npm:^10.0.1" + minipass: "npm:^7.0.3" + minipass-collect: "npm:^2.0.1" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + p-map: "npm:^7.0.2" + ssri: "npm:^12.0.0" + tar: "npm:^7.4.3" + unique-filename: "npm:^4.0.0" + checksum: 10c0/01f2134e1bd7d3ab68be851df96c8d63b492b1853b67f2eecb2c37bb682d37cb70bb858a16f2f0554d3c0071be6dfe21456a1ff6fa4b7eed996570d6a25ffe9c + languageName: node + linkType: hard + +"cacheable-lookup@npm:^7.0.0": + version: 7.0.0 + resolution: "cacheable-lookup@npm:7.0.0" + checksum: 10c0/63a9c144c5b45cb5549251e3ea774c04d63063b29e469f7584171d059d3a88f650f47869a974e2d07de62116463d742c287a81a625e791539d987115cb081635 + languageName: node + linkType: hard + +"cacheable-request@npm:^10.2.8": + version: 10.2.14 + resolution: "cacheable-request@npm:10.2.14" + dependencies: + "@types/http-cache-semantics": "npm:^4.0.2" + get-stream: "npm:^6.0.1" + http-cache-semantics: "npm:^4.1.1" + keyv: "npm:^4.5.3" + mimic-response: "npm:^4.0.0" + normalize-url: "npm:^8.0.0" + responselike: "npm:^3.0.0" + checksum: 10c0/41b6658db369f20c03128227ecd219ca7ac52a9d24fc0f499cc9aa5d40c097b48b73553504cebd137024d957c0ddb5b67cf3ac1439b136667f3586257763f88d + languageName: node + linkType: hard + +"call-bind-apply-helpers@npm:^1.0.0, call-bind-apply-helpers@npm:^1.0.1, call-bind-apply-helpers@npm:^1.0.2": + version: 1.0.2 + resolution: "call-bind-apply-helpers@npm:1.0.2" + dependencies: + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + checksum: 10c0/47bd9901d57b857590431243fea704ff18078b16890a6b3e021e12d279bbf211d039155e27d7566b374d49ee1f8189344bac9833dec7a20cdec370506361c938 + languageName: node + linkType: hard + +"call-bind@npm:^1.0.8": + version: 1.0.8 + resolution: "call-bind@npm:1.0.8" + dependencies: + call-bind-apply-helpers: "npm:^1.0.0" + es-define-property: "npm:^1.0.0" + get-intrinsic: "npm:^1.2.4" + set-function-length: "npm:^1.2.2" + checksum: 10c0/a13819be0681d915144467741b69875ae5f4eba8961eb0bf322aab63ec87f8250eb6d6b0dcbb2e1349876412a56129ca338592b3829ef4343527f5f18a0752d4 + languageName: node + linkType: hard + +"call-bound@npm:^1.0.2, call-bound@npm:^1.0.3": + version: 1.0.4 + resolution: "call-bound@npm:1.0.4" + dependencies: + call-bind-apply-helpers: "npm:^1.0.2" + get-intrinsic: "npm:^1.3.0" + checksum: 10c0/f4796a6a0941e71c766aea672f63b72bc61234c4f4964dc6d7606e3664c307e7d77845328a8f3359ce39ddb377fed67318f9ee203dea1d47e46165dcf2917644 + languageName: node + linkType: hard + +"callsites@npm:^3.0.0": + version: 3.1.0 + resolution: "callsites@npm:3.1.0" + checksum: 10c0/fff92277400eb06c3079f9e74f3af120db9f8ea03bad0e84d9aede54bbe2d44a56cccb5f6cf12211f93f52306df87077ecec5b712794c5a9b5dac6d615a3f301 + languageName: node + linkType: hard + +"camel-case@npm:^4.1.2": + version: 4.1.2 + resolution: "camel-case@npm:4.1.2" + dependencies: + pascal-case: "npm:^3.1.2" + tslib: "npm:^2.0.3" + checksum: 10c0/bf9eefaee1f20edbed2e9a442a226793bc72336e2b99e5e48c6b7252b6f70b080fc46d8246ab91939e2af91c36cdd422e0af35161e58dd089590f302f8f64c8a + languageName: node + linkType: hard + +"camelcase@npm:^6.2.0": + version: 6.3.0 + resolution: "camelcase@npm:6.3.0" + checksum: 10c0/0d701658219bd3116d12da3eab31acddb3f9440790c0792e0d398f0a520a6a4058018e546862b6fba89d7ae990efaeb97da71e1913e9ebf5a8b5621a3d55c710 + languageName: node + linkType: hard + +"camelcase@npm:^7.0.1": + version: 7.0.1 + resolution: "camelcase@npm:7.0.1" + checksum: 10c0/3adfc9a0e96d51b3a2f4efe90a84dad3e206aaa81dfc664f1bd568270e1bf3b010aad31f01db16345b4ffe1910e16ab411c7273a19a859addd1b98ef7cf4cfbd + languageName: node + linkType: hard + +"caniuse-api@npm:^3.0.0": + version: 3.0.0 + resolution: "caniuse-api@npm:3.0.0" + dependencies: + browserslist: "npm:^4.0.0" + caniuse-lite: "npm:^1.0.0" + lodash.memoize: "npm:^4.1.2" + lodash.uniq: "npm:^4.5.0" + checksum: 10c0/60f9e85a3331e6d761b1b03eec71ca38ef7d74146bece34694853033292156b815696573ed734b65583acf493e88163618eda915c6c826d46a024c71a9572b4c + languageName: node + linkType: hard + +"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001702, caniuse-lite@npm:^1.0.30001716": + version: 1.0.30001718 + resolution: "caniuse-lite@npm:1.0.30001718" + checksum: 10c0/67f9ad09bc16443e28d14f265d6e468480cd8dc1900d0d8b982222de80c699c4f2306599c3da8a3fa7139f110d4b30d49dbac78f215470f479abb6ffe141d5d3 + languageName: node + linkType: hard + +"ccount@npm:^2.0.0": + version: 2.0.1 + resolution: "ccount@npm:2.0.1" + checksum: 10c0/3939b1664390174484322bc3f45b798462e6c07ee6384cb3d645e0aa2f318502d174845198c1561930e1d431087f74cf1fe291ae9a4722821a9f4ba67e574350 + languageName: node + linkType: hard + +"chalk@npm:^4.0.0, chalk@npm:^4.1.0, chalk@npm:^4.1.2": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: "npm:^4.1.0" + supports-color: "npm:^7.1.0" + checksum: 10c0/4a3fef5cc34975c898ffe77141450f679721df9dde00f6c304353fa9c8b571929123b26a0e4617bde5018977eb655b31970c297b91b63ee83bb82aeb04666880 + languageName: node + linkType: hard + +"chalk@npm:^5.0.1, chalk@npm:^5.2.0": + version: 5.4.1 + resolution: "chalk@npm:5.4.1" + checksum: 10c0/b23e88132c702f4855ca6d25cb5538b1114343e41472d5263ee8a37cccfccd9c4216d111e1097c6a27830407a1dc81fecdf2a56f2c63033d4dbbd88c10b0dcef + languageName: node + linkType: hard + +"char-regex@npm:^1.0.2": + version: 1.0.2 + resolution: "char-regex@npm:1.0.2" + checksum: 10c0/57a09a86371331e0be35d9083ba429e86c4f4648ecbe27455dbfb343037c16ee6fdc7f6b61f433a57cc5ded5561d71c56a150e018f40c2ffb7bc93a26dae341e + languageName: node + linkType: hard + +"character-entities-html4@npm:^2.0.0": + version: 2.1.0 + resolution: "character-entities-html4@npm:2.1.0" + checksum: 10c0/fe61b553f083400c20c0b0fd65095df30a0b445d960f3bbf271536ae6c3ba676f39cb7af0b4bf2755812f08ab9b88f2feed68f9aebb73bb153f7a115fe5c6e40 + languageName: node + linkType: hard + +"character-entities-legacy@npm:^3.0.0": + version: 3.0.0 + resolution: "character-entities-legacy@npm:3.0.0" + checksum: 10c0/ec4b430af873661aa754a896a2b55af089b4e938d3d010fad5219299a6b6d32ab175142699ee250640678cd64bdecd6db3c9af0b8759ab7b155d970d84c4c7d1 + languageName: node + linkType: hard + +"character-entities@npm:^2.0.0": + version: 2.0.2 + resolution: "character-entities@npm:2.0.2" + checksum: 10c0/b0c645a45bcc90ff24f0e0140f4875a8436b8ef13b6bcd31ec02cfb2ca502b680362aa95386f7815bdc04b6464d48cf191210b3840d7c04241a149ede591a308 + languageName: node + linkType: hard + +"character-reference-invalid@npm:^2.0.0": + version: 2.0.1 + resolution: "character-reference-invalid@npm:2.0.1" + checksum: 10c0/2ae0dec770cd8659d7e8b0ce24392d83b4c2f0eb4a3395c955dce5528edd4cc030a794cfa06600fcdd700b3f2de2f9b8e40e309c0011c4180e3be64a0b42e6a1 + languageName: node + linkType: hard + +"cheerio-select@npm:^2.1.0": + version: 2.1.0 + resolution: "cheerio-select@npm:2.1.0" + dependencies: + boolbase: "npm:^1.0.0" + css-select: "npm:^5.1.0" + css-what: "npm:^6.1.0" + domelementtype: "npm:^2.3.0" + domhandler: "npm:^5.0.3" + domutils: "npm:^3.0.1" + checksum: 10c0/2242097e593919dba4aacb97d7b8275def8b9ec70b00aa1f43335456870cfc9e284eae2080bdc832ed232dabb9eefcf56c722d152da4a154813fb8814a55d282 + languageName: node + linkType: hard + +"cheerio@npm:1.0.0-rc.12": + version: 1.0.0-rc.12 + resolution: "cheerio@npm:1.0.0-rc.12" + dependencies: + cheerio-select: "npm:^2.1.0" + dom-serializer: "npm:^2.0.0" + domhandler: "npm:^5.0.3" + domutils: "npm:^3.0.1" + htmlparser2: "npm:^8.0.1" + parse5: "npm:^7.0.0" + parse5-htmlparser2-tree-adapter: "npm:^7.0.0" + checksum: 10c0/c85d2f2461e3f024345b78e0bb16ad8e41492356210470dd1e7d5a91391da9fcf6c0a7cb48a9ba8820330153f0cedb4d0a60c7af15d96ecdb3092299b9d9c0cc + languageName: node + linkType: hard + +"chokidar@npm:^3.4.2, chokidar@npm:^3.5.3": + version: 3.6.0 + resolution: "chokidar@npm:3.6.0" + dependencies: + anymatch: "npm:~3.1.2" + braces: "npm:~3.0.2" + fsevents: "npm:~2.3.2" + glob-parent: "npm:~5.1.2" + is-binary-path: "npm:~2.1.0" + is-glob: "npm:~4.0.1" + normalize-path: "npm:~3.0.0" + readdirp: "npm:~3.6.0" + dependenciesMeta: + fsevents: + optional: true + checksum: 10c0/8361dcd013f2ddbe260eacb1f3cb2f2c6f2b0ad118708a343a5ed8158941a39cb8fb1d272e0f389712e74ee90ce8ba864eece9e0e62b9705cb468a2f6d917462 + languageName: node + linkType: hard + +"chownr@npm:^3.0.0": + version: 3.0.0 + resolution: "chownr@npm:3.0.0" + checksum: 10c0/43925b87700f7e3893296c8e9c56cc58f926411cce3a6e5898136daaf08f08b9a8eb76d37d3267e707d0dcc17aed2e2ebdf5848c0c3ce95cf910a919935c1b10 + languageName: node + linkType: hard + +"chrome-trace-event@npm:^1.0.2": + version: 1.0.4 + resolution: "chrome-trace-event@npm:1.0.4" + checksum: 10c0/3058da7a5f4934b87cf6a90ef5fb68ebc5f7d06f143ed5a4650208e5d7acae47bc03ec844b29fbf5ba7e46e8daa6acecc878f7983a4f4bb7271593da91e61ff5 + languageName: node + linkType: hard + +"ci-info@npm:^3.2.0": + version: 3.9.0 + resolution: "ci-info@npm:3.9.0" + checksum: 10c0/6f0109e36e111684291d46123d491bc4e7b7a1934c3a20dea28cba89f1d4a03acd892f5f6a81ed3855c38647e285a150e3c9ba062e38943bef57fee6c1554c3a + languageName: node + linkType: hard + +"clean-css@npm:^5.2.2, clean-css@npm:^5.3.2, clean-css@npm:~5.3.2": + version: 5.3.3 + resolution: "clean-css@npm:5.3.3" + dependencies: + source-map: "npm:~0.6.0" + checksum: 10c0/381de7523e23f3762eb180e327dcc0cedafaf8cb1cd8c26b7cc1fc56e0829a92e734729c4f955394d65ed72fb62f82d8baf78af34b33b8a7d41ebad2accdd6fb + languageName: node + linkType: hard + +"clean-stack@npm:^2.0.0": + version: 2.2.0 + resolution: "clean-stack@npm:2.2.0" + checksum: 10c0/1f90262d5f6230a17e27d0c190b09d47ebe7efdd76a03b5a1127863f7b3c9aec4c3e6c8bb3a7bbf81d553d56a1fd35728f5a8ef4c63f867ac8d690109742a8c1 + languageName: node + linkType: hard + +"cli-boxes@npm:^3.0.0": + version: 3.0.0 + resolution: "cli-boxes@npm:3.0.0" + checksum: 10c0/4db3e8fbfaf1aac4fb3a6cbe5a2d3fa048bee741a45371b906439b9ffc821c6e626b0f108bdcd3ddf126a4a319409aedcf39a0730573ff050fdd7b6731e99fb9 + languageName: node + linkType: hard + +"cli-table3@npm:^0.6.3": + version: 0.6.5 + resolution: "cli-table3@npm:0.6.5" + dependencies: + "@colors/colors": "npm:1.5.0" + string-width: "npm:^4.2.0" + dependenciesMeta: + "@colors/colors": + optional: true + checksum: 10c0/d7cc9ed12212ae68241cc7a3133c52b844113b17856e11f4f81308acc3febcea7cc9fd298e70933e294dd642866b29fd5d113c2c098948701d0c35f09455de78 + languageName: node + linkType: hard + +"clone-deep@npm:^4.0.1": + version: 4.0.1 + resolution: "clone-deep@npm:4.0.1" + dependencies: + is-plain-object: "npm:^2.0.4" + kind-of: "npm:^6.0.2" + shallow-clone: "npm:^3.0.0" + checksum: 10c0/637753615aa24adf0f2d505947a1bb75e63964309034a1cf56ba4b1f30af155201edd38d26ffe26911adaae267a3c138b344a4947d39f5fc1b6d6108125aa758 + languageName: node + linkType: hard + +"clsx@npm:^1.2.1": + version: 1.2.1 + resolution: "clsx@npm:1.2.1" + checksum: 10c0/34dead8bee24f5e96f6e7937d711978380647e936a22e76380290e35486afd8634966ce300fc4b74a32f3762c7d4c0303f442c3e259f4ce02374eb0c82834f27 + languageName: node + linkType: hard + +"clsx@npm:^2.0.0": + version: 2.1.1 + resolution: "clsx@npm:2.1.1" + checksum: 10c0/c4c8eb865f8c82baab07e71bfa8897c73454881c4f99d6bc81585aecd7c441746c1399d08363dc096c550cceaf97bd4ce1e8854e1771e9998d9f94c4fe075839 + languageName: node + linkType: hard + +"collapse-white-space@npm:^2.0.0": + version: 2.1.0 + resolution: "collapse-white-space@npm:2.1.0" + checksum: 10c0/b2e2800f4ab261e62eb27a1fbe853378296e3a726d6695117ed033e82d61fb6abeae4ffc1465d5454499e237005de9cfc52c9562dc7ca4ac759b9a222ef14453 + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: "npm:~1.1.4" + checksum: 10c0/37e1150172f2e311fe1b2df62c6293a342ee7380da7b9cfdba67ea539909afbd74da27033208d01d6d5cfc65ee7868a22e18d7e7648e004425441c0f8a15a7d7 + languageName: node + linkType: hard + +"color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: 10c0/a1a3f914156960902f46f7f56bc62effc6c94e84b2cae157a526b1c1f74b677a47ec602bf68a61abfa2b42d15b7c5651c6dbe72a43af720bc588dff885b10f95 + languageName: node + linkType: hard + +"colord@npm:^2.9.3": + version: 2.9.3 + resolution: "colord@npm:2.9.3" + checksum: 10c0/9699e956894d8996b28c686afe8988720785f476f59335c80ce852ded76ab3ebe252703aec53d9bef54f6219aea6b960fb3d9a8300058a1d0c0d4026460cd110 + languageName: node + linkType: hard + +"colorette@npm:^2.0.10": + version: 2.0.20 + resolution: "colorette@npm:2.0.20" + checksum: 10c0/e94116ff33b0ff56f3b83b9ace895e5bf87c2a7a47b3401b8c3f3226e050d5ef76cf4072fb3325f9dc24d1698f9b730baf4e05eeaf861d74a1883073f4c98a40 + languageName: node + linkType: hard + +"combine-promises@npm:^1.1.0": + version: 1.2.0 + resolution: "combine-promises@npm:1.2.0" + checksum: 10c0/906ebf056006eff93c11548df0415053b6756145dae1f5a89579e743cb15fceeb0604555791321db4fba5072aa39bb4de6547e9cdf14589fe949b33d1613422c + languageName: node + linkType: hard + +"comma-separated-tokens@npm:^2.0.0": + version: 2.0.3 + resolution: "comma-separated-tokens@npm:2.0.3" + checksum: 10c0/91f90f1aae320f1755d6957ef0b864fe4f54737f3313bd95e0802686ee2ca38bff1dd381964d00ae5db42912dd1f4ae5c2709644e82706ffc6f6842a813cdd67 + languageName: node + linkType: hard + +"commander@npm:^10.0.0": + version: 10.0.1 + resolution: "commander@npm:10.0.1" + checksum: 10c0/53f33d8927758a911094adadda4b2cbac111a5b377d8706700587650fd8f45b0bbe336de4b5c3fe47fd61f420a3d9bd452b6e0e6e5600a7e74d7bf0174f6efe3 + languageName: node + linkType: hard + +"commander@npm:^2.20.0": + version: 2.20.3 + resolution: "commander@npm:2.20.3" + checksum: 10c0/74c781a5248c2402a0a3e966a0a2bba3c054aad144f5c023364be83265e796b20565aa9feff624132ff629aa64e16999fa40a743c10c12f7c61e96a794b99288 + languageName: node + linkType: hard + +"commander@npm:^5.1.0": + version: 5.1.0 + resolution: "commander@npm:5.1.0" + checksum: 10c0/da9d71dbe4ce039faf1fe9eac3771dca8c11d66963341f62602f7b66e36d2a3f8883407af4f9a37b1db1a55c59c0c1325f186425764c2e963dc1d67aec2a4b6d + languageName: node + linkType: hard + +"commander@npm:^7.2.0": + version: 7.2.0 + resolution: "commander@npm:7.2.0" + checksum: 10c0/8d690ff13b0356df7e0ebbe6c59b4712f754f4b724d4f473d3cc5b3fdcf978e3a5dc3078717858a2ceb50b0f84d0660a7f22a96cdc50fb877d0c9bb31593d23a + languageName: node + linkType: hard + +"commander@npm:^8.3.0": + version: 8.3.0 + resolution: "commander@npm:8.3.0" + checksum: 10c0/8b043bb8322ea1c39664a1598a95e0495bfe4ca2fad0d84a92d7d1d8d213e2a155b441d2470c8e08de7c4a28cf2bc6e169211c49e1b21d9f7edc6ae4d9356060 + languageName: node + linkType: hard + +"common-path-prefix@npm:^3.0.0": + version: 3.0.0 + resolution: "common-path-prefix@npm:3.0.0" + checksum: 10c0/c4a74294e1b1570f4a8ab435285d185a03976c323caa16359053e749db4fde44e3e6586c29cd051100335e11895767cbbd27ea389108e327d62f38daf4548fdb + languageName: node + linkType: hard + +"compressible@npm:~2.0.18": + version: 2.0.18 + resolution: "compressible@npm:2.0.18" + dependencies: + mime-db: "npm:>= 1.43.0 < 2" + checksum: 10c0/8a03712bc9f5b9fe530cc5a79e164e665550d5171a64575d7dcf3e0395d7b4afa2d79ab176c61b5b596e28228b350dd07c1a2a6ead12fd81d1b6cd632af2fef7 + languageName: node + linkType: hard + +"compression@npm:^1.7.4": + version: 1.8.0 + resolution: "compression@npm:1.8.0" + dependencies: + bytes: "npm:3.1.2" + compressible: "npm:~2.0.18" + debug: "npm:2.6.9" + negotiator: "npm:~0.6.4" + on-headers: "npm:~1.0.2" + safe-buffer: "npm:5.2.1" + vary: "npm:~1.1.2" + checksum: 10c0/804d3c8430939f4fd88e5128333f311b4035f6425a7f2959d74cfb5c98ef3a3e3e18143208f3f9d0fcae4cd3bcf3d2fbe525e0fcb955e6e146e070936f025a24 + languageName: node + linkType: hard + +"concat-map@npm:0.0.1": + version: 0.0.1 + resolution: "concat-map@npm:0.0.1" + checksum: 10c0/c996b1cfdf95b6c90fee4dae37e332c8b6eb7d106430c17d538034c0ad9a1630cb194d2ab37293b1bdd4d779494beee7786d586a50bd9376fd6f7bcc2bd4c98f + languageName: node + linkType: hard + +"config-chain@npm:^1.1.11": + version: 1.1.13 + resolution: "config-chain@npm:1.1.13" + dependencies: + ini: "npm:^1.3.4" + proto-list: "npm:~1.2.1" + checksum: 10c0/39d1df18739d7088736cc75695e98d7087aea43646351b028dfabd5508d79cf6ef4c5bcd90471f52cd87ae470d1c5490c0a8c1a292fbe6ee9ff688061ea0963e + languageName: node + linkType: hard + +"configstore@npm:^6.0.0": + version: 6.0.0 + resolution: "configstore@npm:6.0.0" + dependencies: + dot-prop: "npm:^6.0.1" + graceful-fs: "npm:^4.2.6" + unique-string: "npm:^3.0.0" + write-file-atomic: "npm:^3.0.3" + xdg-basedir: "npm:^5.0.1" + checksum: 10c0/6681a96038ab3e0397cbdf55e6e1624ac3dfa3afe955e219f683df060188a418bda043c9114a59a337e7aec9562b0a0c838ed7db24289e6d0c266bc8313b9580 + languageName: node + linkType: hard + +"connect-history-api-fallback@npm:^2.0.0": + version: 2.0.0 + resolution: "connect-history-api-fallback@npm:2.0.0" + checksum: 10c0/90fa8b16ab76e9531646cc70b010b1dbd078153730c510d3142f6cf07479ae8a812c5a3c0e40a28528dd1681a62395d0cfdef67da9e914c4772ac85d69a3ed87 + languageName: node + linkType: hard + +"consola@npm:^3.2.3": + version: 3.4.2 + resolution: "consola@npm:3.4.2" + checksum: 10c0/7cebe57ecf646ba74b300bcce23bff43034ed6fbec9f7e39c27cee1dc00df8a21cd336b466ad32e304ea70fba04ec9e890c200270de9a526ce021ba8a7e4c11a + languageName: node + linkType: hard + +"content-disposition@npm:0.5.2": + version: 0.5.2 + resolution: "content-disposition@npm:0.5.2" + checksum: 10c0/49eebaa0da1f9609b192e99d7fec31d1178cb57baa9d01f5b63b29787ac31e9d18b5a1033e854c68c9b6cce790e700a6f7fa60e43f95e2e416404e114a8f2f49 + languageName: node + linkType: hard + +"content-disposition@npm:0.5.4": + version: 0.5.4 + resolution: "content-disposition@npm:0.5.4" + dependencies: + safe-buffer: "npm:5.2.1" + checksum: 10c0/bac0316ebfeacb8f381b38285dc691c9939bf0a78b0b7c2d5758acadad242d04783cee5337ba7d12a565a19075af1b3c11c728e1e4946de73c6ff7ce45f3f1bb + languageName: node + linkType: hard + +"content-type@npm:~1.0.4, content-type@npm:~1.0.5": + version: 1.0.5 + resolution: "content-type@npm:1.0.5" + checksum: 10c0/b76ebed15c000aee4678c3707e0860cb6abd4e680a598c0a26e17f0bfae723ec9cc2802f0ff1bc6e4d80603719010431d2231018373d4dde10f9ccff9dadf5af + languageName: node + linkType: hard + +"convert-source-map@npm:^2.0.0": + version: 2.0.0 + resolution: "convert-source-map@npm:2.0.0" + checksum: 10c0/8f2f7a27a1a011cc6cc88cc4da2d7d0cfa5ee0369508baae3d98c260bb3ac520691464e5bbe4ae7cdf09860c1d69ecc6f70c63c6e7c7f7e3f18ec08484dc7d9b + languageName: node + linkType: hard + +"cookie-signature@npm:1.0.6": + version: 1.0.6 + resolution: "cookie-signature@npm:1.0.6" + checksum: 10c0/b36fd0d4e3fef8456915fcf7742e58fbfcc12a17a018e0eb9501c9d5ef6893b596466f03b0564b81af29ff2538fd0aa4b9d54fe5ccbfb4c90ea50ad29fe2d221 + languageName: node + linkType: hard + +"cookie@npm:0.7.1": + version: 0.7.1 + resolution: "cookie@npm:0.7.1" + checksum: 10c0/5de60c67a410e7c8dc8a46a4b72eb0fe925871d057c9a5d2c0e8145c4270a4f81076de83410c4d397179744b478e33cd80ccbcc457abf40a9409ad27dcd21dde + languageName: node + linkType: hard + +"copy-text-to-clipboard@npm:^3.2.0": + version: 3.2.0 + resolution: "copy-text-to-clipboard@npm:3.2.0" + checksum: 10c0/d60fdadc59d526e19d56ad23cec2b292d33c771a5091621bd322d138804edd3c10eb2367d46ec71b39f5f7f7116a2910b332281aeb36a5b679199d746a8a5381 + languageName: node + linkType: hard + +"copy-webpack-plugin@npm:^11.0.0": + version: 11.0.0 + resolution: "copy-webpack-plugin@npm:11.0.0" + dependencies: + fast-glob: "npm:^3.2.11" + glob-parent: "npm:^6.0.1" + globby: "npm:^13.1.1" + normalize-path: "npm:^3.0.0" + schema-utils: "npm:^4.0.0" + serialize-javascript: "npm:^6.0.0" + peerDependencies: + webpack: ^5.1.0 + checksum: 10c0/a667dd226b26f148584a35fb705f5af926d872584912cf9fd203c14f2b3a68f473a1f5cf768ec1dd5da23820823b850e5d50458b685c468e4a224b25c12a15b4 + languageName: node + linkType: hard + +"core-js-compat@npm:^3.40.0": + version: 3.42.0 + resolution: "core-js-compat@npm:3.42.0" + dependencies: + browserslist: "npm:^4.24.4" + checksum: 10c0/0138ce005c13ce642fc38e18e54a52a1c78ca8315ee6e4faad748d2a1b0ad2462ea615285ad4e6cf77afe48e47a868d898e64c70606c1eb1c9e6a9f19ee2b186 + languageName: node + linkType: hard + +"core-js-pure@npm:^3.30.2": + version: 3.42.0 + resolution: "core-js-pure@npm:3.42.0" + checksum: 10c0/e61b097bc83ec01839e7b04cad2e1d0dd8822275ea5a08a23dc7c907d13d2522aa2b09061cec68f0625fe40abb8b888be3b65a37c817eb53a695cf02c24217bf + languageName: node + linkType: hard + +"core-js@npm:^3.31.1": + version: 3.42.0 + resolution: "core-js@npm:3.42.0" + checksum: 10c0/2913d3d5452d54ad92f058d66046782d608c05e037bcc523aab79c04454fe640998f94e6011292969d66dfa472f398b085ce843dcb362056532a5799c627184e + languageName: node + linkType: hard + +"core-util-is@npm:~1.0.0": + version: 1.0.3 + resolution: "core-util-is@npm:1.0.3" + checksum: 10c0/90a0e40abbddfd7618f8ccd63a74d88deea94e77d0e8dbbea059fa7ebebb8fbb4e2909667fe26f3a467073de1a542ebe6ae4c73a73745ac5833786759cd906c9 + languageName: node + linkType: hard + +"cosmiconfig@npm:^6.0.0": + version: 6.0.0 + resolution: "cosmiconfig@npm:6.0.0" + dependencies: + "@types/parse-json": "npm:^4.0.0" + import-fresh: "npm:^3.1.0" + parse-json: "npm:^5.0.0" + path-type: "npm:^4.0.0" + yaml: "npm:^1.7.2" + checksum: 10c0/666ed8732d0bf7d7fe6f8516c8ee6041e0622032e8fa26201577b883d2767ad105d03f38b34b93d1f02f26b22a89e7bab4443b9d2e7f931f48d0e944ffa038b5 + languageName: node + linkType: hard + +"cosmiconfig@npm:^8.1.3, cosmiconfig@npm:^8.3.5": + version: 8.3.6 + resolution: "cosmiconfig@npm:8.3.6" + dependencies: + import-fresh: "npm:^3.3.0" + js-yaml: "npm:^4.1.0" + parse-json: "npm:^5.2.0" + path-type: "npm:^4.0.0" + peerDependencies: + typescript: ">=4.9.5" + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/0382a9ed13208f8bfc22ca2f62b364855207dffdb73dc26e150ade78c3093f1cf56172df2dd460c8caf2afa91c0ed4ec8a88c62f8f9cd1cf423d26506aa8797a + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.3, cross-spawn@npm:^7.0.6": + version: 7.0.6 + resolution: "cross-spawn@npm:7.0.6" + dependencies: + path-key: "npm:^3.1.0" + shebang-command: "npm:^2.0.0" + which: "npm:^2.0.1" + checksum: 10c0/053ea8b2135caff68a9e81470e845613e374e7309a47731e81639de3eaeb90c3d01af0e0b44d2ab9d50b43467223b88567dfeb3262db942dc063b9976718ffc1 + languageName: node + linkType: hard + +"crypto-random-string@npm:^4.0.0": + version: 4.0.0 + resolution: "crypto-random-string@npm:4.0.0" + dependencies: + type-fest: "npm:^1.0.1" + checksum: 10c0/16e11a3c8140398f5408b7fded35a961b9423c5dac39a60cbbd08bd3f0e07d7de130e87262adea7db03ec1a7a4b7551054e0db07ee5408b012bac5400cfc07a5 + languageName: node + linkType: hard + +"css-blank-pseudo@npm:^7.0.1": + version: 7.0.1 + resolution: "css-blank-pseudo@npm:7.0.1" + dependencies: + postcss-selector-parser: "npm:^7.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/46c3d3a611972fdb0c264db7c0b34fe437bc4300961d11945145cf04962f52a545a6ef55bc8ff4afd82b605bd692b4970f2b54582616dea00441105e725d4618 + languageName: node + linkType: hard + +"css-declaration-sorter@npm:^7.2.0": + version: 7.2.0 + resolution: "css-declaration-sorter@npm:7.2.0" + peerDependencies: + postcss: ^8.0.9 + checksum: 10c0/d8516be94f8f2daa233ef021688b965c08161624cbf830a4d7ee1099429437c0ee124d35c91b1c659cfd891a68e8888aa941726dab12279bc114aaed60a94606 + languageName: node + linkType: hard + +"css-has-pseudo@npm:^7.0.2": + version: 7.0.2 + resolution: "css-has-pseudo@npm:7.0.2" + dependencies: + "@csstools/selector-specificity": "npm:^5.0.0" + postcss-selector-parser: "npm:^7.0.0" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/456e9ce1eec8a535683c329956acfe53ce5a208345d7f2fcbe662626be8b3c98681e9041d7f4980316714397b0c1c3defde25653d629c396df17803d599c4edf + languageName: node + linkType: hard + +"css-loader@npm:^6.8.1": + version: 6.11.0 + resolution: "css-loader@npm:6.11.0" + dependencies: + icss-utils: "npm:^5.1.0" + postcss: "npm:^8.4.33" + postcss-modules-extract-imports: "npm:^3.1.0" + postcss-modules-local-by-default: "npm:^4.0.5" + postcss-modules-scope: "npm:^3.2.0" + postcss-modules-values: "npm:^4.0.0" + postcss-value-parser: "npm:^4.2.0" + semver: "npm:^7.5.4" + peerDependencies: + "@rspack/core": 0.x || 1.x + webpack: ^5.0.0 + peerDependenciesMeta: + "@rspack/core": + optional: true + webpack: + optional: true + checksum: 10c0/bb52434138085fed06a33e2ffbdae9ee9014ad23bf60f59d6b7ee67f28f26c6b1764024d3030bd19fd884d6ee6ee2224eaed64ad19eb18fbbb23d148d353a965 + languageName: node + linkType: hard + +"css-minimizer-webpack-plugin@npm:^5.0.1": + version: 5.0.1 + resolution: "css-minimizer-webpack-plugin@npm:5.0.1" + dependencies: + "@jridgewell/trace-mapping": "npm:^0.3.18" + cssnano: "npm:^6.0.1" + jest-worker: "npm:^29.4.3" + postcss: "npm:^8.4.24" + schema-utils: "npm:^4.0.1" + serialize-javascript: "npm:^6.0.1" + peerDependencies: + webpack: ^5.0.0 + peerDependenciesMeta: + "@parcel/css": + optional: true + "@swc/css": + optional: true + clean-css: + optional: true + csso: + optional: true + esbuild: + optional: true + lightningcss: + optional: true + checksum: 10c0/1792259e18f7c5ee25b6bbf60b38b64201747add83d1f751c8c654159b46ebacd0d1103d35f17d97197033e21e02d2ba4a4e9aa14c9c0d067b7c7653c721814e + languageName: node + linkType: hard + +"css-prefers-color-scheme@npm:^10.0.0": + version: 10.0.0 + resolution: "css-prefers-color-scheme@npm:10.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/a66c727bb2455328b18862f720819fc98ff5c1486b69f758bdb5c66f46cc6d484f9fc0bfa4f00f2693c5da6707ad136ca789496982f713ade693f08af624930e + languageName: node + linkType: hard + +"css-select@npm:^4.1.3": + version: 4.3.0 + resolution: "css-select@npm:4.3.0" + dependencies: + boolbase: "npm:^1.0.0" + css-what: "npm:^6.0.1" + domhandler: "npm:^4.3.1" + domutils: "npm:^2.8.0" + nth-check: "npm:^2.0.1" + checksum: 10c0/a489d8e5628e61063d5a8fe0fa1cc7ae2478cb334a388a354e91cf2908154be97eac9fa7ed4dffe87a3e06cf6fcaa6016553115335c4fd3377e13dac7bd5a8e1 + languageName: node + linkType: hard + +"css-select@npm:^5.1.0": + version: 5.1.0 + resolution: "css-select@npm:5.1.0" + dependencies: + boolbase: "npm:^1.0.0" + css-what: "npm:^6.1.0" + domhandler: "npm:^5.0.2" + domutils: "npm:^3.0.1" + nth-check: "npm:^2.0.1" + checksum: 10c0/551c60dba5b54054741032c1793b5734f6ba45e23ae9e82761a3c0ed1acbb8cfedfa443aaba3a3c1a54cac12b456d2012a09d2cd5f0e82e430454c1b9d84d500 + languageName: node + linkType: hard + +"css-tree@npm:^2.3.1": + version: 2.3.1 + resolution: "css-tree@npm:2.3.1" + dependencies: + mdn-data: "npm:2.0.30" + source-map-js: "npm:^1.0.1" + checksum: 10c0/6f8c1a11d5e9b14bf02d10717fc0351b66ba12594166f65abfbd8eb8b5b490dd367f5c7721db241a3c792d935fc6751fbc09f7e1598d421477ad9fadc30f4f24 + languageName: node + linkType: hard + +"css-tree@npm:~2.2.0": + version: 2.2.1 + resolution: "css-tree@npm:2.2.1" + dependencies: + mdn-data: "npm:2.0.28" + source-map-js: "npm:^1.0.1" + checksum: 10c0/47e87b0f02f8ac22f57eceb65c58011dd142d2158128882a0bf963cf2eabb81a4ebbc2e3790c8289be7919fa8b83750c7b69272bd66772c708143b772ba3c186 + languageName: node + linkType: hard + +"css-what@npm:^6.0.1, css-what@npm:^6.1.0": + version: 6.1.0 + resolution: "css-what@npm:6.1.0" + checksum: 10c0/a09f5a6b14ba8dcf57ae9a59474722e80f20406c53a61e9aedb0eedc693b135113ffe2983f4efc4b5065ae639442e9ae88df24941ef159c218b231011d733746 + languageName: node + linkType: hard + +"cssdb@npm:^8.2.5": + version: 8.2.5 + resolution: "cssdb@npm:8.2.5" + checksum: 10c0/3f6f2941c958ea0bdbcc1f807ee728d851ef60c370fbcd54360840e3192f082e0a0b2fa4ea600ca74fa771936c9130883727d7845132cc8bf135a4e0a1e55746 + languageName: node + linkType: hard + +"cssesc@npm:^3.0.0": + version: 3.0.0 + resolution: "cssesc@npm:3.0.0" + bin: + cssesc: bin/cssesc + checksum: 10c0/6bcfd898662671be15ae7827120472c5667afb3d7429f1f917737f3bf84c4176003228131b643ae74543f17a394446247df090c597bb9a728cce298606ed0aa7 + languageName: node + linkType: hard + +"cssnano-preset-advanced@npm:^6.1.2": + version: 6.1.2 + resolution: "cssnano-preset-advanced@npm:6.1.2" + dependencies: + autoprefixer: "npm:^10.4.19" + browserslist: "npm:^4.23.0" + cssnano-preset-default: "npm:^6.1.2" + postcss-discard-unused: "npm:^6.0.5" + postcss-merge-idents: "npm:^6.0.3" + postcss-reduce-idents: "npm:^6.0.3" + postcss-zindex: "npm:^6.0.2" + peerDependencies: + postcss: ^8.4.31 + checksum: 10c0/22d3ddab258e6b31e7e2e7c48712f023b60fadb2813929752dace0326e28cd250830b5420a33f81b01df52d2460cb5f999fff5907f58508809efe1a8a739a707 + languageName: node + linkType: hard + +"cssnano-preset-default@npm:^6.1.2": + version: 6.1.2 + resolution: "cssnano-preset-default@npm:6.1.2" + dependencies: + browserslist: "npm:^4.23.0" + css-declaration-sorter: "npm:^7.2.0" + cssnano-utils: "npm:^4.0.2" + postcss-calc: "npm:^9.0.1" + postcss-colormin: "npm:^6.1.0" + postcss-convert-values: "npm:^6.1.0" + postcss-discard-comments: "npm:^6.0.2" + postcss-discard-duplicates: "npm:^6.0.3" + postcss-discard-empty: "npm:^6.0.3" + postcss-discard-overridden: "npm:^6.0.2" + postcss-merge-longhand: "npm:^6.0.5" + postcss-merge-rules: "npm:^6.1.1" + postcss-minify-font-values: "npm:^6.1.0" + postcss-minify-gradients: "npm:^6.0.3" + postcss-minify-params: "npm:^6.1.0" + postcss-minify-selectors: "npm:^6.0.4" + postcss-normalize-charset: "npm:^6.0.2" + postcss-normalize-display-values: "npm:^6.0.2" + postcss-normalize-positions: "npm:^6.0.2" + postcss-normalize-repeat-style: "npm:^6.0.2" + postcss-normalize-string: "npm:^6.0.2" + postcss-normalize-timing-functions: "npm:^6.0.2" + postcss-normalize-unicode: "npm:^6.1.0" + postcss-normalize-url: "npm:^6.0.2" + postcss-normalize-whitespace: "npm:^6.0.2" + postcss-ordered-values: "npm:^6.0.2" + postcss-reduce-initial: "npm:^6.1.0" + postcss-reduce-transforms: "npm:^6.0.2" + postcss-svgo: "npm:^6.0.3" + postcss-unique-selectors: "npm:^6.0.4" + peerDependencies: + postcss: ^8.4.31 + checksum: 10c0/af99021f936763850f5f35dc9e6a9dfb0da30856dea36e0420b011da2a447099471db2a5f3d1f5f52c0489da186caf9a439d8f048a80f82617077efb018333fa + languageName: node + linkType: hard + +"cssnano-utils@npm:^4.0.2": + version: 4.0.2 + resolution: "cssnano-utils@npm:4.0.2" + peerDependencies: + postcss: ^8.4.31 + checksum: 10c0/260b8c8ffa48b908aa77ef129f9b8648ecd92aed405b20e7fe6b8370779dd603530344fc9d96683d53533246e48b36ac9d2aa5a476b4f81c547bbad86d187f35 + languageName: node + linkType: hard + +"cssnano@npm:^6.0.1, cssnano@npm:^6.1.2": + version: 6.1.2 + resolution: "cssnano@npm:6.1.2" + dependencies: + cssnano-preset-default: "npm:^6.1.2" + lilconfig: "npm:^3.1.1" + peerDependencies: + postcss: ^8.4.31 + checksum: 10c0/4df0dc0389b34b38acb09b7cfb07267b0eda95349c6d5e9b7666acc7200bb33359650869a60168e9d878298b05f4ad2c7f070815c90551720a3f4e1037f79691 + languageName: node + linkType: hard + +"csso@npm:^5.0.5": + version: 5.0.5 + resolution: "csso@npm:5.0.5" + dependencies: + css-tree: "npm:~2.2.0" + checksum: 10c0/ab4beb1e97dd7e207c10e9925405b45f15a6cd1b4880a8686ad573aa6d476aed28b4121a666cffd26c37a26179f7b54741f7c257543003bfb244d06a62ad569b + languageName: node + linkType: hard + +"csstype@npm:^3.0.2": + version: 3.1.3 + resolution: "csstype@npm:3.1.3" + checksum: 10c0/80c089d6f7e0c5b2bd83cf0539ab41474198579584fa10d86d0cafe0642202343cbc119e076a0b1aece191989477081415d66c9fefbf3c957fc2fc4b7009f248 + languageName: node + linkType: hard + +"data-uri-to-buffer@npm:^4.0.0": + version: 4.0.1 + resolution: "data-uri-to-buffer@npm:4.0.1" + checksum: 10c0/20a6b93107597530d71d4cb285acee17f66bcdfc03fd81040921a81252f19db27588d87fc8fc69e1950c55cfb0bf8ae40d0e5e21d907230813eb5d5a7f9eb45b + languageName: node + linkType: hard + +"debounce@npm:^1.2.1": + version: 1.2.1 + resolution: "debounce@npm:1.2.1" + checksum: 10c0/6c9320aa0973fc42050814621a7a8a78146c1975799b5b3cc1becf1f77ba9a5aa583987884230da0842a03f385def452fad5d60db97c3d1c8b824e38a8edf500 + languageName: node + linkType: hard + +"debug@npm:2.6.9, debug@npm:^2.6.0": + version: 2.6.9 + resolution: "debug@npm:2.6.9" + dependencies: + ms: "npm:2.0.0" + checksum: 10c0/121908fb839f7801180b69a7e218a40b5a0b718813b886b7d6bdb82001b931c938e2941d1e4450f33a1b1df1da653f5f7a0440c197f29fbf8a6e9d45ff6ef589 + languageName: node + linkType: hard + +"debug@npm:4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.4": + version: 4.4.1 + resolution: "debug@npm:4.4.1" + dependencies: + ms: "npm:^2.1.3" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 10c0/d2b44bc1afd912b49bb7ebb0d50a860dc93a4dd7d946e8de94abc957bb63726b7dd5aa48c18c2386c379ec024c46692e15ed3ed97d481729f929201e671fcd55 + languageName: node + linkType: hard + +"decode-named-character-reference@npm:^1.0.0": + version: 1.1.0 + resolution: "decode-named-character-reference@npm:1.1.0" + dependencies: + character-entities: "npm:^2.0.0" + checksum: 10c0/359c76305b47e67660ec096c5cd3f65972ed75b8a53a40435a7a967cfab3e9516e64b443cbe0c7edcf5ab77f65a6924f12fb1872b1e09e2f044f28f4fd10996a + languageName: node + linkType: hard + +"decompress-response@npm:^6.0.0": + version: 6.0.0 + resolution: "decompress-response@npm:6.0.0" + dependencies: + mimic-response: "npm:^3.1.0" + checksum: 10c0/bd89d23141b96d80577e70c54fb226b2f40e74a6817652b80a116d7befb8758261ad073a8895648a29cc0a5947021ab66705cb542fa9c143c82022b27c5b175e + languageName: node + linkType: hard + +"deep-extend@npm:^0.6.0": + version: 0.6.0 + resolution: "deep-extend@npm:0.6.0" + checksum: 10c0/1c6b0abcdb901e13a44c7d699116d3d4279fdb261983122a3783e7273844d5f2537dc2e1c454a23fcf645917f93fbf8d07101c1d03c015a87faa662755212566 + languageName: node + linkType: hard + +"deepmerge@npm:^4.2.2, deepmerge@npm:^4.3.1": + version: 4.3.1 + resolution: "deepmerge@npm:4.3.1" + checksum: 10c0/e53481aaf1aa2c4082b5342be6b6d8ad9dfe387bc92ce197a66dea08bd4265904a087e75e464f14d1347cf2ac8afe1e4c16b266e0561cc5df29382d3c5f80044 + languageName: node + linkType: hard + +"default-gateway@npm:^6.0.3": + version: 6.0.3 + resolution: "default-gateway@npm:6.0.3" + dependencies: + execa: "npm:^5.0.0" + checksum: 10c0/5184f9e6e105d24fb44ade9e8741efa54bb75e84625c1ea78c4ef8b81dff09ca52d6dbdd1185cf0dc655bb6b282a64fffaf7ed2dd561b8d9ad6f322b1f039aba + languageName: node + linkType: hard + +"defer-to-connect@npm:^2.0.1": + version: 2.0.1 + resolution: "defer-to-connect@npm:2.0.1" + checksum: 10c0/625ce28e1b5ad10cf77057b9a6a727bf84780c17660f6644dab61dd34c23de3001f03cedc401f7d30a4ed9965c2e8a7336e220a329146f2cf85d4eddea429782 + languageName: node + linkType: hard + +"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.4": + version: 1.1.4 + resolution: "define-data-property@npm:1.1.4" + dependencies: + es-define-property: "npm:^1.0.0" + es-errors: "npm:^1.3.0" + gopd: "npm:^1.0.1" + checksum: 10c0/dea0606d1483eb9db8d930d4eac62ca0fa16738b0b3e07046cddfacf7d8c868bbe13fa0cb263eb91c7d0d527960dc3f2f2471a69ed7816210307f6744fe62e37 + languageName: node + linkType: hard + +"define-lazy-prop@npm:^2.0.0": + version: 2.0.0 + resolution: "define-lazy-prop@npm:2.0.0" + checksum: 10c0/db6c63864a9d3b7dc9def55d52764968a5af296de87c1b2cc71d8be8142e445208071953649e0386a8cc37cfcf9a2067a47207f1eb9ff250c2a269658fdae422 + languageName: node + linkType: hard + +"define-properties@npm:^1.2.1": + version: 1.2.1 + resolution: "define-properties@npm:1.2.1" + dependencies: + define-data-property: "npm:^1.0.1" + has-property-descriptors: "npm:^1.0.0" + object-keys: "npm:^1.1.1" + checksum: 10c0/88a152319ffe1396ccc6ded510a3896e77efac7a1bfbaa174a7b00414a1747377e0bb525d303794a47cf30e805c2ec84e575758512c6e44a993076d29fd4e6c3 + languageName: node + linkType: hard + +"del@npm:^6.1.1": + version: 6.1.1 + resolution: "del@npm:6.1.1" + dependencies: + globby: "npm:^11.0.1" + graceful-fs: "npm:^4.2.4" + is-glob: "npm:^4.0.1" + is-path-cwd: "npm:^2.2.0" + is-path-inside: "npm:^3.0.2" + p-map: "npm:^4.0.0" + rimraf: "npm:^3.0.2" + slash: "npm:^3.0.0" + checksum: 10c0/8a095c5ccade42c867a60252914ae485ec90da243d735d1f63ec1e64c1cfbc2b8810ad69a29ab6326d159d4fddaa2f5bad067808c42072351ec458efff86708f + languageName: node + linkType: hard + +"depd@npm:2.0.0": + version: 2.0.0 + resolution: "depd@npm:2.0.0" + checksum: 10c0/58bd06ec20e19529b06f7ad07ddab60e504d9e0faca4bd23079fac2d279c3594334d736508dc350e06e510aba5e22e4594483b3a6562ce7c17dd797f4cc4ad2c + languageName: node + linkType: hard + +"depd@npm:~1.1.2": + version: 1.1.2 + resolution: "depd@npm:1.1.2" + checksum: 10c0/acb24aaf936ef9a227b6be6d495f0d2eb20108a9a6ad40585c5bda1a897031512fef6484e4fdbb80bd249fdaa82841fa1039f416ece03188e677ba11bcfda249 + languageName: node + linkType: hard + +"dequal@npm:^2.0.0": + version: 2.0.3 + resolution: "dequal@npm:2.0.3" + checksum: 10c0/f98860cdf58b64991ae10205137c0e97d384c3a4edc7f807603887b7c4b850af1224a33d88012009f150861cbee4fa2d322c4cc04b9313bee312e47f6ecaa888 + languageName: node + linkType: hard + +"destroy@npm:1.2.0": + version: 1.2.0 + resolution: "destroy@npm:1.2.0" + checksum: 10c0/bd7633942f57418f5a3b80d5cb53898127bcf53e24cdf5d5f4396be471417671f0fee48a4ebe9a1e9defbde2a31280011af58a57e090ff822f589b443ed4e643 + languageName: node + linkType: hard + +"detect-node@npm:^2.0.4": + version: 2.1.0 + resolution: "detect-node@npm:2.1.0" + checksum: 10c0/f039f601790f2e9d4654e499913259a798b1f5246ae24f86ab5e8bd4aaf3bce50484234c494f11fb00aecb0c6e2733aa7b1cf3f530865640b65fbbd65b2c4e09 + languageName: node + linkType: hard + +"detect-port-alt@npm:^1.1.6": + version: 1.1.6 + resolution: "detect-port-alt@npm:1.1.6" + dependencies: + address: "npm:^1.0.1" + debug: "npm:^2.6.0" + bin: + detect: ./bin/detect-port + detect-port: ./bin/detect-port + checksum: 10c0/7269e6aef7b782d98c77505c07a7a0f5e2ee98a9607dc791035fc0192fc58aa03cc833fae605e10eaf239a2a5a55cd938e0bb141dea764ac6180ca082fd62b23 + languageName: node + linkType: hard + +"detect-port@npm:^1.5.1": + version: 1.6.1 + resolution: "detect-port@npm:1.6.1" + dependencies: + address: "npm:^1.0.1" + debug: "npm:4" + bin: + detect: bin/detect-port.js + detect-port: bin/detect-port.js + checksum: 10c0/4ea9eb46a637cb21220dd0a62b6074792894fc77b2cacbc9de533d1908b2eedafa7bfd7547baaa2ac1e9c7ba7c289b34b17db896dca6da142f4fc6e2060eee17 + languageName: node + linkType: hard + +"devlop@npm:^1.0.0, devlop@npm:^1.1.0": + version: 1.1.0 + resolution: "devlop@npm:1.1.0" + dependencies: + dequal: "npm:^2.0.0" + checksum: 10c0/e0928ab8f94c59417a2b8389c45c55ce0a02d9ac7fd74ef62d01ba48060129e1d594501b77de01f3eeafc7cb00773819b0df74d96251cf20b31c5b3071f45c0e + languageName: node + linkType: hard + +"dir-glob@npm:^3.0.1": + version: 3.0.1 + resolution: "dir-glob@npm:3.0.1" + dependencies: + path-type: "npm:^4.0.0" + checksum: 10c0/dcac00920a4d503e38bb64001acb19df4efc14536ada475725e12f52c16777afdee4db827f55f13a908ee7efc0cb282e2e3dbaeeb98c0993dd93d1802d3bf00c + languageName: node + linkType: hard + +"dns-packet@npm:^5.2.2": + version: 5.6.1 + resolution: "dns-packet@npm:5.6.1" + dependencies: + "@leichtgewicht/ip-codec": "npm:^2.0.1" + checksum: 10c0/8948d3d03063fb68e04a1e386875f8c3bcc398fc375f535f2b438fad8f41bf1afa6f5e70893ba44f4ae884c089247e0a31045722fa6ff0f01d228da103f1811d + languageName: node + linkType: hard + +"dom-converter@npm:^0.2.0": + version: 0.2.0 + resolution: "dom-converter@npm:0.2.0" + dependencies: + utila: "npm:~0.4" + checksum: 10c0/e96aa63bd8c6ee3cd9ce19c3aecfc2c42e50a460e8087114794d4f5ecf3a4f052b34ea3bf2d73b5d80b4da619073b49905e6d7d788ceb7814ca4c29be5354a11 + languageName: node + linkType: hard + +"dom-serializer@npm:^1.0.1": + version: 1.4.1 + resolution: "dom-serializer@npm:1.4.1" + dependencies: + domelementtype: "npm:^2.0.1" + domhandler: "npm:^4.2.0" + entities: "npm:^2.0.0" + checksum: 10c0/67d775fa1ea3de52035c98168ddcd59418356943b5eccb80e3c8b3da53adb8e37edb2cc2f885802b7b1765bf5022aec21dfc32910d7f9e6de4c3148f095ab5e0 + languageName: node + linkType: hard + +"dom-serializer@npm:^2.0.0": + version: 2.0.0 + resolution: "dom-serializer@npm:2.0.0" + dependencies: + domelementtype: "npm:^2.3.0" + domhandler: "npm:^5.0.2" + entities: "npm:^4.2.0" + checksum: 10c0/d5ae2b7110ca3746b3643d3ef60ef823f5f078667baf530cec096433f1627ec4b6fa8c072f09d079d7cda915fd2c7bc1b7b935681e9b09e591e1e15f4040b8e2 + languageName: node + linkType: hard + +"domelementtype@npm:^2.0.1, domelementtype@npm:^2.2.0, domelementtype@npm:^2.3.0": + version: 2.3.0 + resolution: "domelementtype@npm:2.3.0" + checksum: 10c0/686f5a9ef0fff078c1412c05db73a0dce096190036f33e400a07e2a4518e9f56b1e324f5c576a0a747ef0e75b5d985c040b0d51945ce780c0dd3c625a18cd8c9 + languageName: node + linkType: hard + +"domhandler@npm:^4.0.0, domhandler@npm:^4.2.0, domhandler@npm:^4.3.1": + version: 4.3.1 + resolution: "domhandler@npm:4.3.1" + dependencies: + domelementtype: "npm:^2.2.0" + checksum: 10c0/5c199c7468cb052a8b5ab80b13528f0db3d794c64fc050ba793b574e158e67c93f8336e87fd81e9d5ee43b0e04aea4d8b93ed7be4899cb726a1601b3ba18538b + languageName: node + linkType: hard + +"domhandler@npm:^5.0.2, domhandler@npm:^5.0.3": + version: 5.0.3 + resolution: "domhandler@npm:5.0.3" + dependencies: + domelementtype: "npm:^2.3.0" + checksum: 10c0/bba1e5932b3e196ad6862286d76adc89a0dbf0c773e5ced1eb01f9af930c50093a084eff14b8de5ea60b895c56a04d5de8bbc4930c5543d029091916770b2d2a + languageName: node + linkType: hard + +"domutils@npm:^2.5.2, domutils@npm:^2.8.0": + version: 2.8.0 + resolution: "domutils@npm:2.8.0" + dependencies: + dom-serializer: "npm:^1.0.1" + domelementtype: "npm:^2.2.0" + domhandler: "npm:^4.2.0" + checksum: 10c0/d58e2ae01922f0dd55894e61d18119924d88091837887bf1438f2327f32c65eb76426bd9384f81e7d6dcfb048e0f83c19b222ad7101176ad68cdc9c695b563db + languageName: node + linkType: hard + +"domutils@npm:^3.0.1": + version: 3.2.2 + resolution: "domutils@npm:3.2.2" + dependencies: + dom-serializer: "npm:^2.0.0" + domelementtype: "npm:^2.3.0" + domhandler: "npm:^5.0.3" + checksum: 10c0/47938f473b987ea71cd59e59626eb8666d3aa8feba5266e45527f3b636c7883cca7e582d901531961f742c519d7514636b7973353b648762b2e3bedbf235fada + languageName: node + linkType: hard + +"dot-case@npm:^3.0.4": + version: 3.0.4 + resolution: "dot-case@npm:3.0.4" + dependencies: + no-case: "npm:^3.0.4" + tslib: "npm:^2.0.3" + checksum: 10c0/5b859ea65097a7ea870e2c91b5768b72ddf7fa947223fd29e167bcdff58fe731d941c48e47a38ec8aa8e43044c8fbd15cd8fa21689a526bc34b6548197cd5b05 + languageName: node + linkType: hard + +"dot-prop@npm:^6.0.1": + version: 6.0.1 + resolution: "dot-prop@npm:6.0.1" + dependencies: + is-obj: "npm:^2.0.0" + checksum: 10c0/30e51ec6408978a6951b21e7bc4938aad01a86f2fdf779efe52330205c6bb8a8ea12f35925c2029d6dc9d1df22f916f32f828ce1e9b259b1371c580541c22b5a + languageName: node + linkType: hard + +"dunder-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "dunder-proto@npm:1.0.1" + dependencies: + call-bind-apply-helpers: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + gopd: "npm:^1.2.0" + checksum: 10c0/199f2a0c1c16593ca0a145dbf76a962f8033ce3129f01284d48c45ed4e14fea9bbacd7b3610b6cdc33486cef20385ac054948fefc6272fcce645c09468f93031 + languageName: node + linkType: hard + +"duplexer@npm:^0.1.2": + version: 0.1.2 + resolution: "duplexer@npm:0.1.2" + checksum: 10c0/c57bcd4bdf7e623abab2df43a7b5b23d18152154529d166c1e0da6bee341d84c432d157d7e97b32fecb1bf3a8b8857dd85ed81a915789f550637ed25b8e64fc2 + languageName: node + linkType: hard + +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 10c0/26f364ebcdb6395f95124fda411f63137a4bfb5d3a06453f7f23dfe52502905bd84e0488172e0f9ec295fdc45f05c23d5d91baf16bd26f0fe9acd777a188dc39 + languageName: node + linkType: hard + +"ee-first@npm:1.1.1": + version: 1.1.1 + resolution: "ee-first@npm:1.1.1" + checksum: 10c0/b5bb125ee93161bc16bfe6e56c6b04de5ad2aa44234d8f644813cc95d861a6910903132b05093706de2b706599367c4130eb6d170f6b46895686b95f87d017b7 + languageName: node + linkType: hard + +"electron-to-chromium@npm:^1.5.149": + version: 1.5.152 + resolution: "electron-to-chromium@npm:1.5.152" + checksum: 10c0/99c58dc8fc6b22ea64f118599663a0d336aa28693fbd275d06f3e2c1d1a6c954fcb88f5b2390223267bb3487940d3e587b6acac8b1b2ebc4dc65c44cd7739c7c + languageName: node + linkType: hard + +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: 10c0/b6053ad39951c4cf338f9092d7bfba448cdfd46fe6a2a034700b149ac9ffbc137e361cbd3c442297f86bed2e5f7576c1b54cc0a6bf8ef5106cc62f496af35010 + languageName: node + linkType: hard + +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 10c0/af014e759a72064cf66e6e694a7fc6b0ed3d8db680427b021a89727689671cefe9d04151b2cad51dbaf85d5ba790d061cd167f1cf32eb7b281f6368b3c181639 + languageName: node + linkType: hard + +"emojilib@npm:^2.4.0": + version: 2.4.0 + resolution: "emojilib@npm:2.4.0" + checksum: 10c0/6e66ba8921175842193f974e18af448bb6adb0cf7aeea75e08b9d4ea8e9baba0e4a5347b46ed901491dcaba277485891c33a8d70b0560ca5cc9672a94c21ab8f + languageName: node + linkType: hard + +"emojis-list@npm:^3.0.0": + version: 3.0.0 + resolution: "emojis-list@npm:3.0.0" + checksum: 10c0/7dc4394b7b910444910ad64b812392159a21e1a7ecc637c775a440227dcb4f80eff7fe61f4453a7d7603fa23d23d30cc93fe9e4b5ed985b88d6441cd4a35117b + languageName: node + linkType: hard + +"emoticon@npm:^4.0.1": + version: 4.1.0 + resolution: "emoticon@npm:4.1.0" + checksum: 10c0/b3bc0a9b370445ac1e980ccba7baea614b4648199cc6fa0a51696a6d2393733e8f985edc4f1af381a1903f625789483dd155de427ec9fa2ea415fac116adc06d + languageName: node + linkType: hard + +"encodeurl@npm:~1.0.2": + version: 1.0.2 + resolution: "encodeurl@npm:1.0.2" + checksum: 10c0/f6c2387379a9e7c1156c1c3d4f9cb7bb11cf16dd4c1682e1f6746512564b053df5781029b6061296832b59fb22f459dbe250386d217c2f6e203601abb2ee0bec + languageName: node + linkType: hard + +"encodeurl@npm:~2.0.0": + version: 2.0.0 + resolution: "encodeurl@npm:2.0.0" + checksum: 10c0/5d317306acb13e6590e28e27924c754163946a2480de11865c991a3a7eed4315cd3fba378b543ca145829569eefe9b899f3d84bb09870f675ae60bc924b01ceb + languageName: node + linkType: hard + +"encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" + dependencies: + iconv-lite: "npm:^0.6.2" + checksum: 10c0/36d938712ff00fe1f4bac88b43bcffb5930c1efa57bbcdca9d67e1d9d6c57cfb1200fb01efe0f3109b2ce99b231f90779532814a81370a1bd3274a0f58585039 + languageName: node + linkType: hard + +"enhanced-resolve@npm:^5.17.1": + version: 5.18.1 + resolution: "enhanced-resolve@npm:5.18.1" + dependencies: + graceful-fs: "npm:^4.2.4" + tapable: "npm:^2.2.0" + checksum: 10c0/4cffd9b125225184e2abed9fdf0ed3dbd2224c873b165d0838fd066cde32e0918626cba2f1f4bf6860762f13a7e2364fd89a82b99566be2873d813573ac71846 + languageName: node + linkType: hard + +"entities@npm:^2.0.0": + version: 2.2.0 + resolution: "entities@npm:2.2.0" + checksum: 10c0/7fba6af1f116300d2ba1c5673fc218af1961b20908638391b4e1e6d5850314ee2ac3ec22d741b3a8060479911c99305164aed19b6254bde75e7e6b1b2c3f3aa3 + languageName: node + linkType: hard + +"entities@npm:^4.2.0, entities@npm:^4.4.0": + version: 4.5.0 + resolution: "entities@npm:4.5.0" + checksum: 10c0/5b039739f7621f5d1ad996715e53d964035f75ad3b9a4d38c6b3804bb226e282ffeae2443624d8fdd9c47d8e926ae9ac009c54671243f0c3294c26af7cc85250 + languageName: node + linkType: hard + +"entities@npm:^6.0.0": + version: 6.0.0 + resolution: "entities@npm:6.0.0" + checksum: 10c0/b82a7bd5de282860f3c36a91e815e41e874fd036c83956a568b82729678492eb088359d6f7e0a4f5c00776427263fcba04959b8340fefa430c39b9bce770427e + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 10c0/285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4 + languageName: node + linkType: hard + +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 10c0/b642f7b4dd4a376e954947550a3065a9ece6733ab8e51ad80db727aaae0817c2e99b02a97a3d6cecc648a97848305e728289cf312d09af395403a90c9d4d8a66 + languageName: node + linkType: hard + +"error-ex@npm:^1.3.1": + version: 1.3.2 + resolution: "error-ex@npm:1.3.2" + dependencies: + is-arrayish: "npm:^0.2.1" + checksum: 10c0/ba827f89369b4c93382cfca5a264d059dfefdaa56ecc5e338ffa58a6471f5ed93b71a20add1d52290a4873d92381174382658c885ac1a2305f7baca363ce9cce + languageName: node + linkType: hard + +"es-define-property@npm:^1.0.0, es-define-property@npm:^1.0.1": + version: 1.0.1 + resolution: "es-define-property@npm:1.0.1" + checksum: 10c0/3f54eb49c16c18707949ff25a1456728c883e81259f045003499efba399c08bad00deebf65cccde8c0e07908c1a225c9d472b7107e558f2a48e28d530e34527c + languageName: node + linkType: hard + +"es-errors@npm:^1.3.0": + version: 1.3.0 + resolution: "es-errors@npm:1.3.0" + checksum: 10c0/0a61325670072f98d8ae3b914edab3559b6caa980f08054a3b872052640d91da01d38df55df797fcc916389d77fc92b8d5906cf028f4db46d7e3003abecbca85 + languageName: node + linkType: hard + +"es-module-lexer@npm:^1.2.1": + version: 1.7.0 + resolution: "es-module-lexer@npm:1.7.0" + checksum: 10c0/4c935affcbfeba7fb4533e1da10fa8568043df1e3574b869385980de9e2d475ddc36769891936dbb07036edb3c3786a8b78ccf44964cd130dedc1f2c984b6c7b + languageName: node + linkType: hard + +"es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": + version: 1.1.1 + resolution: "es-object-atoms@npm:1.1.1" + dependencies: + es-errors: "npm:^1.3.0" + checksum: 10c0/65364812ca4daf48eb76e2a3b7a89b3f6a2e62a1c420766ce9f692665a29d94fe41fe88b65f24106f449859549711e4b40d9fb8002d862dfd7eb1c512d10be0c + languageName: node + linkType: hard + +"esast-util-from-estree@npm:^2.0.0": + version: 2.0.0 + resolution: "esast-util-from-estree@npm:2.0.0" + dependencies: + "@types/estree-jsx": "npm:^1.0.0" + devlop: "npm:^1.0.0" + estree-util-visit: "npm:^2.0.0" + unist-util-position-from-estree: "npm:^2.0.0" + checksum: 10c0/6c619bc6963314f8f64b32e3b101b321bf121f659e62b11e70f425619c2db6f1d25f4c594a57fd00908da96c67d9bfbf876eb5172abf9e13f47a71796f6630ff + languageName: node + linkType: hard + +"esast-util-from-js@npm:^2.0.0": + version: 2.0.1 + resolution: "esast-util-from-js@npm:2.0.1" + dependencies: + "@types/estree-jsx": "npm:^1.0.0" + acorn: "npm:^8.0.0" + esast-util-from-estree: "npm:^2.0.0" + vfile-message: "npm:^4.0.0" + checksum: 10c0/3a446fb0b0d7bcd7e0157aa44b3b692802a08c93edbea81cc0f7fe4437bfdfb4b72e4563fe63b4e36d390086b71185dba4ac921f4180cc6349985c263cc74421 + languageName: node + linkType: hard + +"escalade@npm:^3.1.1, escalade@npm:^3.2.0": + version: 3.2.0 + resolution: "escalade@npm:3.2.0" + checksum: 10c0/ced4dd3a78e15897ed3be74e635110bbf3b08877b0a41be50dcb325ee0e0b5f65fc2d50e9845194d7c4633f327e2e1c6cce00a71b617c5673df0374201d67f65 + languageName: node + linkType: hard + +"escape-goat@npm:^4.0.0": + version: 4.0.0 + resolution: "escape-goat@npm:4.0.0" + checksum: 10c0/9d2a8314e2370f2dd9436d177f6b3b1773525df8f895c8f3e1acb716f5fd6b10b336cb1cd9862d4709b36eb207dbe33664838deca9c6d55b8371be4eebb972f6 + languageName: node + linkType: hard + +"escape-html@npm:^1.0.3, escape-html@npm:~1.0.3": + version: 1.0.3 + resolution: "escape-html@npm:1.0.3" + checksum: 10c0/524c739d776b36c3d29fa08a22e03e8824e3b2fd57500e5e44ecf3cc4707c34c60f9ca0781c0e33d191f2991161504c295e98f68c78fe7baa6e57081ec6ac0a3 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^1.0.5": + version: 1.0.5 + resolution: "escape-string-regexp@npm:1.0.5" + checksum: 10c0/a968ad453dd0c2724e14a4f20e177aaf32bb384ab41b674a8454afe9a41c5e6fe8903323e0a1052f56289d04bd600f81278edf140b0fcc02f5cac98d0f5b5371 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^4.0.0": + version: 4.0.0 + resolution: "escape-string-regexp@npm:4.0.0" + checksum: 10c0/9497d4dd307d845bd7f75180d8188bb17ea8c151c1edbf6b6717c100e104d629dc2dfb687686181b0f4b7d732c7dfdc4d5e7a8ff72de1b0ca283a75bbb3a9cd9 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^5.0.0": + version: 5.0.0 + resolution: "escape-string-regexp@npm:5.0.0" + checksum: 10c0/6366f474c6f37a802800a435232395e04e9885919873e382b157ab7e8f0feb8fed71497f84a6f6a81a49aab41815522f5839112bd38026d203aea0c91622df95 + languageName: node + linkType: hard + +"eslint-scope@npm:5.1.1": + version: 5.1.1 + resolution: "eslint-scope@npm:5.1.1" + dependencies: + esrecurse: "npm:^4.3.0" + estraverse: "npm:^4.1.1" + checksum: 10c0/d30ef9dc1c1cbdece34db1539a4933fe3f9b14e1ffb27ecc85987902ee663ad7c9473bbd49a9a03195a373741e62e2f807c4938992e019b511993d163450e70a + languageName: node + linkType: hard + +"esprima@npm:^4.0.0": + version: 4.0.1 + resolution: "esprima@npm:4.0.1" + bin: + esparse: ./bin/esparse.js + esvalidate: ./bin/esvalidate.js + checksum: 10c0/ad4bab9ead0808cf56501750fd9d3fb276f6b105f987707d059005d57e182d18a7c9ec7f3a01794ebddcca676773e42ca48a32d67a250c9d35e009ca613caba3 + languageName: node + linkType: hard + +"esrecurse@npm:^4.3.0": + version: 4.3.0 + resolution: "esrecurse@npm:4.3.0" + dependencies: + estraverse: "npm:^5.2.0" + checksum: 10c0/81a37116d1408ded88ada45b9fb16dbd26fba3aadc369ce50fcaf82a0bac12772ebd7b24cd7b91fc66786bf2c1ac7b5f196bc990a473efff972f5cb338877cf5 + languageName: node + linkType: hard + +"estraverse@npm:^4.1.1": + version: 4.3.0 + resolution: "estraverse@npm:4.3.0" + checksum: 10c0/9cb46463ef8a8a4905d3708a652d60122a0c20bb58dec7e0e12ab0e7235123d74214fc0141d743c381813e1b992767e2708194f6f6e0f9fd00c1b4e0887b8b6d + languageName: node + linkType: hard + +"estraverse@npm:^5.2.0": + version: 5.3.0 + resolution: "estraverse@npm:5.3.0" + checksum: 10c0/1ff9447b96263dec95d6d67431c5e0771eb9776427421260a3e2f0fdd5d6bd4f8e37a7338f5ad2880c9f143450c9b1e4fc2069060724570a49cf9cf0312bd107 + languageName: node + linkType: hard + +"estree-util-attach-comments@npm:^3.0.0": + version: 3.0.0 + resolution: "estree-util-attach-comments@npm:3.0.0" + dependencies: + "@types/estree": "npm:^1.0.0" + checksum: 10c0/ee69bb5c45e2ad074725b90ed181c1c934b29d81bce4b0c7761431e83c4c6ab1b223a6a3d6a4fbeb92128bc5d5ee201d5dd36cf1770aa5e16a40b0cf36e8a1f1 + languageName: node + linkType: hard + +"estree-util-build-jsx@npm:^3.0.0": + version: 3.0.1 + resolution: "estree-util-build-jsx@npm:3.0.1" + dependencies: + "@types/estree-jsx": "npm:^1.0.0" + devlop: "npm:^1.0.0" + estree-util-is-identifier-name: "npm:^3.0.0" + estree-walker: "npm:^3.0.0" + checksum: 10c0/274c119817b8e7caa14a9778f1e497fea56cdd2b01df1a1ed037f843178992d3afe85e0d364d485e1e2e239255763553d1b647b15e4a7ba50851bcb43dc6bf80 + languageName: node + linkType: hard + +"estree-util-is-identifier-name@npm:^3.0.0": + version: 3.0.0 + resolution: "estree-util-is-identifier-name@npm:3.0.0" + checksum: 10c0/d1881c6ed14bd588ebd508fc90bf2a541811dbb9ca04dec2f39d27dcaa635f85b5ed9bbbe7fc6fb1ddfca68744a5f7c70456b4b7108b6c4c52780631cc787c5b + languageName: node + linkType: hard + +"estree-util-scope@npm:^1.0.0": + version: 1.0.0 + resolution: "estree-util-scope@npm:1.0.0" + dependencies: + "@types/estree": "npm:^1.0.0" + devlop: "npm:^1.0.0" + checksum: 10c0/ef8a573cc899277c613623a1722f630e2163abbc6e9e2f49e758c59b81b484e248b585df6df09a38c00fbfb6390117997cc80c1347b7a86bc1525d9e462b60d5 + languageName: node + linkType: hard + +"estree-util-to-js@npm:^2.0.0": + version: 2.0.0 + resolution: "estree-util-to-js@npm:2.0.0" + dependencies: + "@types/estree-jsx": "npm:^1.0.0" + astring: "npm:^1.8.0" + source-map: "npm:^0.7.0" + checksum: 10c0/ac88cb831401ef99e365f92f4af903755d56ae1ce0e0f0fb8ff66e678141f3d529194f0fb15f6c78cd7554c16fda36854df851d58f9e05cfab15bddf7a97cea0 + languageName: node + linkType: hard + +"estree-util-value-to-estree@npm:^3.0.1": + version: 3.4.0 + resolution: "estree-util-value-to-estree@npm:3.4.0" + dependencies: + "@types/estree": "npm:^1.0.0" + checksum: 10c0/e90e0c784b29182a3feb471589ab3c031be3ff1ab068b2b473e9ee96467f99442f2c571b2708ee3493906af5bf1a0aa9712d9f90fb113a30d99669100235ba4f + languageName: node + linkType: hard + +"estree-util-visit@npm:^2.0.0": + version: 2.0.0 + resolution: "estree-util-visit@npm:2.0.0" + dependencies: + "@types/estree-jsx": "npm:^1.0.0" + "@types/unist": "npm:^3.0.0" + checksum: 10c0/acda8b03cc8f890d79c7c7361f6c95331ba84b7ccc0c32b49f447fc30206b20002b37ffdfc97b6ad16e6fe065c63ecbae1622492e2b6b4775c15966606217f39 + languageName: node + linkType: hard + +"estree-walker@npm:^3.0.0": + version: 3.0.3 + resolution: "estree-walker@npm:3.0.3" + dependencies: + "@types/estree": "npm:^1.0.0" + checksum: 10c0/c12e3c2b2642d2bcae7d5aa495c60fa2f299160946535763969a1c83fc74518ffa9c2cd3a8b69ac56aea547df6a8aac25f729a342992ef0bbac5f1c73e78995d + languageName: node + linkType: hard + +"esutils@npm:^2.0.2": + version: 2.0.3 + resolution: "esutils@npm:2.0.3" + checksum: 10c0/9a2fe69a41bfdade834ba7c42de4723c97ec776e40656919c62cbd13607c45e127a003f05f724a1ea55e5029a4cf2de444b13009f2af71271e42d93a637137c7 + languageName: node + linkType: hard + +"eta@npm:^2.2.0": + version: 2.2.0 + resolution: "eta@npm:2.2.0" + checksum: 10c0/643b54d9539d2761bf6c5f4f48df1a5ea2d46c7f5a5fdc47a7d4802a8aa2b6262d4d61f724452e226c18cf82db02d48e65293fcc548f26a3f9d75a5ba7c3b859 + languageName: node + linkType: hard + +"etag@npm:~1.8.1": + version: 1.8.1 + resolution: "etag@npm:1.8.1" + checksum: 10c0/12be11ef62fb9817314d790089a0a49fae4e1b50594135dcb8076312b7d7e470884b5100d249b28c18581b7fd52f8b485689ffae22a11ed9ec17377a33a08f84 + languageName: node + linkType: hard + +"eval@npm:^0.1.8": + version: 0.1.8 + resolution: "eval@npm:0.1.8" + dependencies: + "@types/node": "npm:*" + require-like: "npm:>= 0.1.1" + checksum: 10c0/258e700bff09e3ce3344273d5b6691b8ec5b043538d84f738f14d8b0aded33d64c00c15b380de725b1401b15f428ab35a9e7ca19a7d25f162c4f877c71586be9 + languageName: node + linkType: hard + +"eventemitter3@npm:^4.0.0": + version: 4.0.7 + resolution: "eventemitter3@npm:4.0.7" + checksum: 10c0/5f6d97cbcbac47be798e6355e3a7639a84ee1f7d9b199a07017f1d2f1e2fe236004d14fa5dfaeba661f94ea57805385e326236a6debbc7145c8877fbc0297c6b + languageName: node + linkType: hard + +"eventemitter3@npm:^5.0.1": + version: 5.0.1 + resolution: "eventemitter3@npm:5.0.1" + checksum: 10c0/4ba5c00c506e6c786b4d6262cfbce90ddc14c10d4667e5c83ae993c9de88aa856033994dd2b35b83e8dc1170e224e66a319fa80adc4c32adcd2379bbc75da814 + languageName: node + linkType: hard + +"events@npm:^3.2.0": + version: 3.3.0 + resolution: "events@npm:3.3.0" + checksum: 10c0/d6b6f2adbccbcda74ddbab52ed07db727ef52e31a61ed26db9feb7dc62af7fc8e060defa65e5f8af9449b86b52cc1a1f6a79f2eafcf4e62add2b7a1fa4a432f6 + languageName: node + linkType: hard + +"execa@npm:^5.0.0": + version: 5.1.1 + resolution: "execa@npm:5.1.1" + dependencies: + cross-spawn: "npm:^7.0.3" + get-stream: "npm:^6.0.0" + human-signals: "npm:^2.1.0" + is-stream: "npm:^2.0.0" + merge-stream: "npm:^2.0.0" + npm-run-path: "npm:^4.0.1" + onetime: "npm:^5.1.2" + signal-exit: "npm:^3.0.3" + strip-final-newline: "npm:^2.0.0" + checksum: 10c0/c8e615235e8de4c5addf2fa4c3da3e3aa59ce975a3e83533b4f6a71750fb816a2e79610dc5f1799b6e28976c9ae86747a36a606655bf8cb414a74d8d507b304f + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.2 + resolution: "exponential-backoff@npm:3.1.2" + checksum: 10c0/d9d3e1eafa21b78464297df91f1776f7fbaa3d5e3f7f0995648ca5b89c069d17055033817348d9f4a43d1c20b0eab84f75af6991751e839df53e4dfd6f22e844 + languageName: node + linkType: hard + +"express@npm:^4.17.3": + version: 4.21.2 + resolution: "express@npm:4.21.2" + dependencies: + accepts: "npm:~1.3.8" + array-flatten: "npm:1.1.1" + body-parser: "npm:1.20.3" + content-disposition: "npm:0.5.4" + content-type: "npm:~1.0.4" + cookie: "npm:0.7.1" + cookie-signature: "npm:1.0.6" + debug: "npm:2.6.9" + depd: "npm:2.0.0" + encodeurl: "npm:~2.0.0" + escape-html: "npm:~1.0.3" + etag: "npm:~1.8.1" + finalhandler: "npm:1.3.1" + fresh: "npm:0.5.2" + http-errors: "npm:2.0.0" + merge-descriptors: "npm:1.0.3" + methods: "npm:~1.1.2" + on-finished: "npm:2.4.1" + parseurl: "npm:~1.3.3" + path-to-regexp: "npm:0.1.12" + proxy-addr: "npm:~2.0.7" + qs: "npm:6.13.0" + range-parser: "npm:~1.2.1" + safe-buffer: "npm:5.2.1" + send: "npm:0.19.0" + serve-static: "npm:1.16.2" + setprototypeof: "npm:1.2.0" + statuses: "npm:2.0.1" + type-is: "npm:~1.6.18" + utils-merge: "npm:1.0.1" + vary: "npm:~1.1.2" + checksum: 10c0/38168fd0a32756600b56e6214afecf4fc79ec28eca7f7a91c2ab8d50df4f47562ca3f9dee412da7f5cea6b1a1544b33b40f9f8586dbacfbdada0fe90dbb10a1f + languageName: node + linkType: hard + +"extend-shallow@npm:^2.0.1": + version: 2.0.1 + resolution: "extend-shallow@npm:2.0.1" + dependencies: + is-extendable: "npm:^0.1.0" + checksum: 10c0/ee1cb0a18c9faddb42d791b2d64867bd6cfd0f3affb711782eb6e894dd193e2934a7f529426aac7c8ddb31ac5d38000a00aa2caf08aa3dfc3e1c8ff6ba340bd9 + languageName: node + linkType: hard + +"extend@npm:^3.0.0": + version: 3.0.2 + resolution: "extend@npm:3.0.2" + checksum: 10c0/73bf6e27406e80aa3e85b0d1c4fd987261e628064e170ca781125c0b635a3dabad5e05adbf07595ea0cf1e6c5396cacb214af933da7cbaf24fe75ff14818e8f9 + languageName: node + linkType: hard + +"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": + version: 3.1.3 + resolution: "fast-deep-equal@npm:3.1.3" + checksum: 10c0/40dedc862eb8992c54579c66d914635afbec43350afbbe991235fdcb4e3a8d5af1b23ae7e79bef7d4882d0ecee06c3197488026998fb19f72dc95acff1d1b1d0 + languageName: node + linkType: hard + +"fast-glob@npm:^3.2.11, fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.0": + version: 3.3.3 + resolution: "fast-glob@npm:3.3.3" + dependencies: + "@nodelib/fs.stat": "npm:^2.0.2" + "@nodelib/fs.walk": "npm:^1.2.3" + glob-parent: "npm:^5.1.2" + merge2: "npm:^1.3.0" + micromatch: "npm:^4.0.8" + checksum: 10c0/f6aaa141d0d3384cf73cbcdfc52f475ed293f6d5b65bfc5def368b09163a9f7e5ec2b3014d80f733c405f58e470ee0cc451c2937685045cddcdeaa24199c43fe + languageName: node + linkType: hard + +"fast-json-stable-stringify@npm:^2.0.0": + version: 2.1.0 + resolution: "fast-json-stable-stringify@npm:2.1.0" + checksum: 10c0/7f081eb0b8a64e0057b3bb03f974b3ef00135fbf36c1c710895cd9300f13c94ba809bb3a81cf4e1b03f6e5285610a61abbd7602d0652de423144dfee5a389c9b + languageName: node + linkType: hard + +"fast-uri@npm:^3.0.1": + version: 3.0.6 + resolution: "fast-uri@npm:3.0.6" + checksum: 10c0/74a513c2af0584448aee71ce56005185f81239eab7a2343110e5bad50c39ad4fb19c5a6f99783ead1cac7ccaf3461a6034fda89fffa2b30b6d99b9f21c2f9d29 + languageName: node + linkType: hard + +"fastq@npm:^1.6.0": + version: 1.19.1 + resolution: "fastq@npm:1.19.1" + dependencies: + reusify: "npm:^1.0.4" + checksum: 10c0/ebc6e50ac7048daaeb8e64522a1ea7a26e92b3cee5cd1c7f2316cdca81ba543aa40a136b53891446ea5c3a67ec215fbaca87ad405f102dd97012f62916905630 + languageName: node + linkType: hard + +"fault@npm:^2.0.0": + version: 2.0.1 + resolution: "fault@npm:2.0.1" + dependencies: + format: "npm:^0.2.0" + checksum: 10c0/b80fbf1019b9ce8b08ee09ce86e02b028563e13a32ac3be34e42bfac00a97b96d8dee6d31e26578ffc16224eb6729e01ff1f97ddfeee00494f4f56c0aeed4bdd + languageName: node + linkType: hard + +"faye-websocket@npm:^0.11.3": + version: 0.11.4 + resolution: "faye-websocket@npm:0.11.4" + dependencies: + websocket-driver: "npm:>=0.5.1" + checksum: 10c0/c6052a0bb322778ce9f89af92890f6f4ce00d5ec92418a35e5f4c6864a4fe736fec0bcebd47eac7c0f0e979b01530746b1c85c83cb04bae789271abf19737420 + languageName: node + linkType: hard + +"fdir@npm:^6.4.4": + version: 6.4.4 + resolution: "fdir@npm:6.4.4" + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + checksum: 10c0/6ccc33be16945ee7bc841e1b4178c0b4cf18d3804894cb482aa514651c962a162f96da7ffc6ebfaf0df311689fb70091b04dd6caffe28d56b9ebdc0e7ccadfdd + languageName: node + linkType: hard + +"feed@npm:^4.2.2": + version: 4.2.2 + resolution: "feed@npm:4.2.2" + dependencies: + xml-js: "npm:^1.6.11" + checksum: 10c0/c0849bde569da94493224525db00614fd1855a5d7c2e990f6e8637bd0298e85c3d329efe476cba77e711e438c3fb48af60cd5ef0c409da5bcd1f479790b0a372 + languageName: node + linkType: hard + +"fetch-blob@npm:^3.1.2, fetch-blob@npm:^3.1.4": + version: 3.2.0 + resolution: "fetch-blob@npm:3.2.0" + dependencies: + node-domexception: "npm:^1.0.0" + web-streams-polyfill: "npm:^3.0.3" + checksum: 10c0/60054bf47bfa10fb0ba6cb7742acec2f37c1f56344f79a70bb8b1c48d77675927c720ff3191fa546410a0442c998d27ab05e9144c32d530d8a52fbe68f843b69 + languageName: node + linkType: hard + +"figures@npm:^3.2.0": + version: 3.2.0 + resolution: "figures@npm:3.2.0" + dependencies: + escape-string-regexp: "npm:^1.0.5" + checksum: 10c0/9c421646ede432829a50bc4e55c7a4eb4bcb7cc07b5bab2f471ef1ab9a344595bbebb6c5c21470093fbb730cd81bbca119624c40473a125293f656f49cb47629 + languageName: node + linkType: hard + +"file-loader@npm:^6.2.0": + version: 6.2.0 + resolution: "file-loader@npm:6.2.0" + dependencies: + loader-utils: "npm:^2.0.0" + schema-utils: "npm:^3.0.0" + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + checksum: 10c0/e176a57c2037ab0f78e5755dbf293a6b7f0f8392350a120bd03cc2ce2525bea017458ba28fea14ca535ff1848055e86d1a3a216bdb2561ef33395b27260a1dd3 + languageName: node + linkType: hard + +"filesize@npm:^8.0.6": + version: 8.0.7 + resolution: "filesize@npm:8.0.7" + checksum: 10c0/82072d94816484df5365d4d5acbb2327a65dc49704c64e403e8c40d8acb7364de1cf1e65cb512c77a15d353870f73e4fed46dad5c6153d0618d9ce7a64d09cfc + languageName: node + linkType: hard + +"fill-range@npm:^7.1.1": + version: 7.1.1 + resolution: "fill-range@npm:7.1.1" + dependencies: + to-regex-range: "npm:^5.0.1" + checksum: 10c0/b75b691bbe065472f38824f694c2f7449d7f5004aa950426a2c28f0306c60db9b880c0b0e4ed819997ffb882d1da02cfcfc819bddc94d71627f5269682edf018 + languageName: node + linkType: hard + +"finalhandler@npm:1.3.1": + version: 1.3.1 + resolution: "finalhandler@npm:1.3.1" + dependencies: + debug: "npm:2.6.9" + encodeurl: "npm:~2.0.0" + escape-html: "npm:~1.0.3" + on-finished: "npm:2.4.1" + parseurl: "npm:~1.3.3" + statuses: "npm:2.0.1" + unpipe: "npm:~1.0.0" + checksum: 10c0/d38035831865a49b5610206a3a9a9aae4e8523cbbcd01175d0480ffbf1278c47f11d89be3ca7f617ae6d94f29cf797546a4619cd84dd109009ef33f12f69019f + languageName: node + linkType: hard + +"find-cache-dir@npm:^4.0.0": + version: 4.0.0 + resolution: "find-cache-dir@npm:4.0.0" + dependencies: + common-path-prefix: "npm:^3.0.0" + pkg-dir: "npm:^7.0.0" + checksum: 10c0/0faa7956974726c8769671de696d24c643ca1e5b8f7a2401283caa9e07a5da093293e0a0f4bd18c920ec981d2ef945c7f5b946cde268dfc9077d833ad0293cff + languageName: node + linkType: hard + +"find-up@npm:^3.0.0": + version: 3.0.0 + resolution: "find-up@npm:3.0.0" + dependencies: + locate-path: "npm:^3.0.0" + checksum: 10c0/2c2e7d0a26db858e2f624f39038c74739e38306dee42b45f404f770db357947be9d0d587f1cac72d20c114deb38aa57316e879eb0a78b17b46da7dab0a3bd6e3 + languageName: node + linkType: hard + +"find-up@npm:^5.0.0": + version: 5.0.0 + resolution: "find-up@npm:5.0.0" + dependencies: + locate-path: "npm:^6.0.0" + path-exists: "npm:^4.0.0" + checksum: 10c0/062c5a83a9c02f53cdd6d175a37ecf8f87ea5bbff1fdfb828f04bfa021441bc7583e8ebc0872a4c1baab96221fb8a8a275a19809fb93fbc40bd69ec35634069a + languageName: node + linkType: hard + +"find-up@npm:^6.3.0": + version: 6.3.0 + resolution: "find-up@npm:6.3.0" + dependencies: + locate-path: "npm:^7.1.0" + path-exists: "npm:^5.0.0" + checksum: 10c0/07e0314362d316b2b13f7f11ea4692d5191e718ca3f7264110127520f3347996349bf9e16805abae3e196805814bc66ef4bff2b8904dc4a6476085fc9b0eba07 + languageName: node + linkType: hard + +"flat@npm:^5.0.2": + version: 5.0.2 + resolution: "flat@npm:5.0.2" + bin: + flat: cli.js + checksum: 10c0/f178b13482f0cd80c7fede05f4d10585b1f2fdebf26e12edc138e32d3150c6ea6482b7f12813a1091143bad52bb6d3596bca51a162257a21163c0ff438baa5fe + languageName: node + linkType: hard + +"follow-redirects@npm:^1.0.0": + version: 1.15.9 + resolution: "follow-redirects@npm:1.15.9" + peerDependenciesMeta: + debug: + optional: true + checksum: 10c0/5829165bd112c3c0e82be6c15b1a58fa9dcfaede3b3c54697a82fe4a62dd5ae5e8222956b448d2f98e331525f05d00404aba7d696de9e761ef6e42fdc780244f + languageName: node + linkType: hard + +"foreground-child@npm:^3.1.0": + version: 3.3.1 + resolution: "foreground-child@npm:3.3.1" + dependencies: + cross-spawn: "npm:^7.0.6" + signal-exit: "npm:^4.0.1" + checksum: 10c0/8986e4af2430896e65bc2788d6679067294d6aee9545daefc84923a0a4b399ad9c7a3ea7bd8c0b2b80fdf4a92de4c69df3f628233ff3224260e9c1541a9e9ed3 + languageName: node + linkType: hard + +"fork-ts-checker-webpack-plugin@npm:^6.5.0": + version: 6.5.3 + resolution: "fork-ts-checker-webpack-plugin@npm:6.5.3" + dependencies: + "@babel/code-frame": "npm:^7.8.3" + "@types/json-schema": "npm:^7.0.5" + chalk: "npm:^4.1.0" + chokidar: "npm:^3.4.2" + cosmiconfig: "npm:^6.0.0" + deepmerge: "npm:^4.2.2" + fs-extra: "npm:^9.0.0" + glob: "npm:^7.1.6" + memfs: "npm:^3.1.2" + minimatch: "npm:^3.0.4" + schema-utils: "npm:2.7.0" + semver: "npm:^7.3.2" + tapable: "npm:^1.0.0" + peerDependencies: + eslint: ">= 6" + typescript: ">= 2.7" + vue-template-compiler: "*" + webpack: ">= 4" + peerDependenciesMeta: + eslint: + optional: true + vue-template-compiler: + optional: true + checksum: 10c0/0885ea75474de011d4068ca3e2d3ca6e4cd318f5cfa018e28ff8fef23ef3a1f1c130160ef192d3e5d31ef7b6fe9f8fb1d920eab5e9e449fb30ce5cc96647245c + languageName: node + linkType: hard + +"form-data-encoder@npm:^2.1.2": + version: 2.1.4 + resolution: "form-data-encoder@npm:2.1.4" + checksum: 10c0/4c06ae2b79ad693a59938dc49ebd020ecb58e4584860a90a230f80a68b026483b022ba5e4143cff06ae5ac8fd446a0b500fabc87bbac3d1f62f2757f8dabcaf7 + languageName: node + linkType: hard + +"format@npm:^0.2.0": + version: 0.2.2 + resolution: "format@npm:0.2.2" + checksum: 10c0/6032ba747541a43abf3e37b402b2f72ee08ebcb58bf84d816443dd228959837f1cddf1e8775b29fa27ff133f4bd146d041bfca5f9cf27f048edf3d493cf8fee6 + languageName: node + linkType: hard + +"formdata-polyfill@npm:^4.0.10": + version: 4.0.10 + resolution: "formdata-polyfill@npm:4.0.10" + dependencies: + fetch-blob: "npm:^3.1.2" + checksum: 10c0/5392ec484f9ce0d5e0d52fb5a78e7486637d516179b0eb84d81389d7eccf9ca2f663079da56f761355c0a65792810e3b345dc24db9a8bbbcf24ef3c8c88570c6 + languageName: node + linkType: hard + +"forwarded@npm:0.2.0": + version: 0.2.0 + resolution: "forwarded@npm:0.2.0" + checksum: 10c0/9b67c3fac86acdbc9ae47ba1ddd5f2f81526fa4c8226863ede5600a3f7c7416ef451f6f1e240a3cc32d0fd79fcfe6beb08fd0da454f360032bde70bf80afbb33 + languageName: node + linkType: hard + +"fraction.js@npm:^4.3.7": + version: 4.3.7 + resolution: "fraction.js@npm:4.3.7" + checksum: 10c0/df291391beea9ab4c263487ffd9d17fed162dbb736982dee1379b2a8cc94e4e24e46ed508c6d278aded9080ba51872f1bc5f3a5fd8d7c74e5f105b508ac28711 + languageName: node + linkType: hard + +"fresh@npm:0.5.2": + version: 0.5.2 + resolution: "fresh@npm:0.5.2" + checksum: 10c0/c6d27f3ed86cc5b601404822f31c900dd165ba63fff8152a3ef714e2012e7535027063bc67ded4cb5b3a49fa596495d46cacd9f47d6328459cf570f08b7d9e5a + languageName: node + linkType: hard + +"fs-extra@npm:^11.1.1, fs-extra@npm:^11.2.0": + version: 11.3.0 + resolution: "fs-extra@npm:11.3.0" + dependencies: + graceful-fs: "npm:^4.2.0" + jsonfile: "npm:^6.0.1" + universalify: "npm:^2.0.0" + checksum: 10c0/5f95e996186ff45463059feb115a22fb048bdaf7e487ecee8a8646c78ed8fdca63630e3077d4c16ce677051f5e60d3355a06f3cd61f3ca43f48cc58822a44d0a + languageName: node + linkType: hard + +"fs-extra@npm:^9.0.0": + version: 9.1.0 + resolution: "fs-extra@npm:9.1.0" + dependencies: + at-least-node: "npm:^1.0.0" + graceful-fs: "npm:^4.2.0" + jsonfile: "npm:^6.0.1" + universalify: "npm:^2.0.0" + checksum: 10c0/9b808bd884beff5cb940773018179a6b94a966381d005479f00adda6b44e5e3d4abf765135773d849cc27efe68c349e4a7b86acd7d3306d5932c14f3a4b17a92 + languageName: node + linkType: hard + +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/63e80da2ff9b621e2cb1596abcb9207f1cf82b968b116ccd7b959e3323144cce7fb141462200971c38bbf2ecca51695069db45265705bed09a7cd93ae5b89f94 + languageName: node + linkType: hard + +"fs-monkey@npm:^1.0.4": + version: 1.0.6 + resolution: "fs-monkey@npm:1.0.6" + checksum: 10c0/6f2508e792a47e37b7eabd5afc79459c1ea72bce2a46007d2b7ed0bfc3a4d64af38975c6eb7e93edb69ac98bbb907c13ff1b1579b2cf52d3d02dbc0303fca79f + languageName: node + linkType: hard + +"fs.realpath@npm:^1.0.0": + version: 1.0.0 + resolution: "fs.realpath@npm:1.0.0" + checksum: 10c0/444cf1291d997165dfd4c0d58b69f0e4782bfd9149fd72faa4fe299e68e0e93d6db941660b37dd29153bf7186672ececa3b50b7e7249477b03fdf850f287c948 + languageName: node + linkType: hard + +"fsevents@npm:~2.3.2": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" + dependencies: + node-gyp: "npm:latest" + checksum: 10c0/a1f0c44595123ed717febbc478aa952e47adfc28e2092be66b8ab1635147254ca6cfe1df792a8997f22716d4cbafc73309899ff7bfac2ac3ad8cf2e4ecc3ec60 + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" + dependencies: + node-gyp: "npm:latest" + conditions: os=darwin + languageName: node + linkType: hard + +"function-bind@npm:^1.1.2": + version: 1.1.2 + resolution: "function-bind@npm:1.1.2" + checksum: 10c0/d8680ee1e5fcd4c197e4ac33b2b4dce03c71f4d91717292785703db200f5c21f977c568d28061226f9b5900cbcd2c84463646134fd5337e7925e0942bc3f46d5 + languageName: node + linkType: hard + +"gensync@npm:^1.0.0-beta.2": + version: 1.0.0-beta.2 + resolution: "gensync@npm:1.0.0-beta.2" + checksum: 10c0/782aba6cba65b1bb5af3b095d96249d20edbe8df32dbf4696fd49be2583faf676173bf4809386588828e4dd76a3354fcbeb577bab1c833ccd9fc4577f26103f8 + languageName: node + linkType: hard + +"get-intrinsic@npm:^1.2.4, get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.3.0": + version: 1.3.0 + resolution: "get-intrinsic@npm:1.3.0" + dependencies: + call-bind-apply-helpers: "npm:^1.0.2" + es-define-property: "npm:^1.0.1" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.1.1" + function-bind: "npm:^1.1.2" + get-proto: "npm:^1.0.1" + gopd: "npm:^1.2.0" + has-symbols: "npm:^1.1.0" + hasown: "npm:^2.0.2" + math-intrinsics: "npm:^1.1.0" + checksum: 10c0/52c81808af9a8130f581e6a6a83e1ba4a9f703359e7a438d1369a5267a25412322f03dcbd7c549edaef0b6214a0630a28511d7df0130c93cfd380f4fa0b5b66a + languageName: node + linkType: hard + +"get-own-enumerable-property-symbols@npm:^3.0.0": + version: 3.0.2 + resolution: "get-own-enumerable-property-symbols@npm:3.0.2" + checksum: 10c0/103999855f3d1718c631472437161d76962cbddcd95cc642a34c07bfb661ed41b6c09a9c669ccdff89ee965beb7126b80eec7b2101e20e31e9cc6c4725305e10 + languageName: node + linkType: hard + +"get-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "get-proto@npm:1.0.1" + dependencies: + dunder-proto: "npm:^1.0.1" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/9224acb44603c5526955e83510b9da41baf6ae73f7398875fba50edc5e944223a89c4a72b070fcd78beb5f7bdda58ecb6294adc28f7acfc0da05f76a2399643c + languageName: node + linkType: hard + +"get-stream@npm:^6.0.0, get-stream@npm:^6.0.1": + version: 6.0.1 + resolution: "get-stream@npm:6.0.1" + checksum: 10c0/49825d57d3fd6964228e6200a58169464b8e8970489b3acdc24906c782fb7f01f9f56f8e6653c4a50713771d6658f7cfe051e5eb8c12e334138c9c918b296341 + languageName: node + linkType: hard + +"github-slugger@npm:^1.5.0": + version: 1.5.0 + resolution: "github-slugger@npm:1.5.0" + checksum: 10c0/116f99732925f939cbfd6f2e57db1aa7e111a460db0d103e3b3f2fce6909d44311663d4542350706cad806345b9892358cc3b153674f88eeae77f43380b3bfca + languageName: node + linkType: hard + +"glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2": + version: 5.1.2 + resolution: "glob-parent@npm:5.1.2" + dependencies: + is-glob: "npm:^4.0.1" + checksum: 10c0/cab87638e2112bee3f839ef5f6e0765057163d39c66be8ec1602f3823da4692297ad4e972de876ea17c44d652978638d2fd583c6713d0eb6591706825020c9ee + languageName: node + linkType: hard + +"glob-parent@npm:^6.0.1": + version: 6.0.2 + resolution: "glob-parent@npm:6.0.2" + dependencies: + is-glob: "npm:^4.0.3" + checksum: 10c0/317034d88654730230b3f43bb7ad4f7c90257a426e872ea0bf157473ac61c99bf5d205fad8f0185f989be8d2fa6d3c7dce1645d99d545b6ea9089c39f838e7f8 + languageName: node + linkType: hard + +"glob-to-regexp@npm:^0.4.1": + version: 0.4.1 + resolution: "glob-to-regexp@npm:0.4.1" + checksum: 10c0/0486925072d7a916f052842772b61c3e86247f0a80cc0deb9b5a3e8a1a9faad5b04fb6f58986a09f34d3e96cd2a22a24b7e9882fb1cf904c31e9a310de96c429 + languageName: node + linkType: hard + +"glob@npm:^10.2.2": + version: 10.4.5 + resolution: "glob@npm:10.4.5" + dependencies: + foreground-child: "npm:^3.1.0" + jackspeak: "npm:^3.1.2" + minimatch: "npm:^9.0.4" + minipass: "npm:^7.1.2" + package-json-from-dist: "npm:^1.0.0" + path-scurry: "npm:^1.11.1" + bin: + glob: dist/esm/bin.mjs + checksum: 10c0/19a9759ea77b8e3ca0a43c2f07ecddc2ad46216b786bb8f993c445aee80d345925a21e5280c7b7c6c59e860a0154b84e4b2b60321fea92cd3c56b4a7489f160e + languageName: node + linkType: hard + +"glob@npm:^7.0.0, glob@npm:^7.1.3, glob@npm:^7.1.6": + version: 7.2.3 + resolution: "glob@npm:7.2.3" + dependencies: + fs.realpath: "npm:^1.0.0" + inflight: "npm:^1.0.4" + inherits: "npm:2" + minimatch: "npm:^3.1.1" + once: "npm:^1.3.0" + path-is-absolute: "npm:^1.0.0" + checksum: 10c0/65676153e2b0c9095100fe7f25a778bf45608eeb32c6048cf307f579649bcc30353277b3b898a3792602c65764e5baa4f643714dfbdfd64ea271d210c7a425fe + languageName: node + linkType: hard + +"global-dirs@npm:^3.0.0": + version: 3.0.1 + resolution: "global-dirs@npm:3.0.1" + dependencies: + ini: "npm:2.0.0" + checksum: 10c0/ef65e2241a47ff978f7006a641302bc7f4c03dfb98783d42bf7224c136e3a06df046e70ee3a010cf30214114755e46c9eb5eb1513838812fbbe0d92b14c25080 + languageName: node + linkType: hard + +"global-modules@npm:^2.0.0": + version: 2.0.0 + resolution: "global-modules@npm:2.0.0" + dependencies: + global-prefix: "npm:^3.0.0" + checksum: 10c0/43b770fe24aa6028f4b9770ea583a47f39750be15cf6e2578f851e4ccc9e4fa674b8541928c0b09c21461ca0763f0d36e4068cec86c914b07fd6e388e66ba5b9 + languageName: node + linkType: hard + +"global-prefix@npm:^3.0.0": + version: 3.0.0 + resolution: "global-prefix@npm:3.0.0" + dependencies: + ini: "npm:^1.3.5" + kind-of: "npm:^6.0.2" + which: "npm:^1.3.1" + checksum: 10c0/510f489fb68d1cc7060f276541709a0ee6d41356ef852de48f7906c648ac223082a1cc8fce86725ca6c0e032bcdc1189ae77b4744a624b29c34a9d0ece498269 + languageName: node + linkType: hard + +"globals@npm:^11.1.0": + version: 11.12.0 + resolution: "globals@npm:11.12.0" + checksum: 10c0/758f9f258e7b19226bd8d4af5d3b0dcf7038780fb23d82e6f98932c44e239f884847f1766e8fa9cc5635ccb3204f7fa7314d4408dd4002a5e8ea827b4018f0a1 + languageName: node + linkType: hard + +"globby@npm:^11.0.1, globby@npm:^11.0.4, globby@npm:^11.1.0": + version: 11.1.0 + resolution: "globby@npm:11.1.0" + dependencies: + array-union: "npm:^2.1.0" + dir-glob: "npm:^3.0.1" + fast-glob: "npm:^3.2.9" + ignore: "npm:^5.2.0" + merge2: "npm:^1.4.1" + slash: "npm:^3.0.0" + checksum: 10c0/b39511b4afe4bd8a7aead3a27c4ade2b9968649abab0a6c28b1a90141b96ca68ca5db1302f7c7bd29eab66bf51e13916b8e0a3d0ac08f75e1e84a39b35691189 + languageName: node + linkType: hard + +"globby@npm:^13.1.1": + version: 13.2.2 + resolution: "globby@npm:13.2.2" + dependencies: + dir-glob: "npm:^3.0.1" + fast-glob: "npm:^3.3.0" + ignore: "npm:^5.2.4" + merge2: "npm:^1.4.1" + slash: "npm:^4.0.0" + checksum: 10c0/a8d7cc7cbe5e1b2d0f81d467bbc5bc2eac35f74eaded3a6c85fc26d7acc8e6de22d396159db8a2fc340b8a342e74cac58de8f4aee74146d3d146921a76062664 + languageName: node + linkType: hard + +"gopd@npm:^1.0.1, gopd@npm:^1.2.0": + version: 1.2.0 + resolution: "gopd@npm:1.2.0" + checksum: 10c0/50fff1e04ba2b7737c097358534eacadad1e68d24cccee3272e04e007bed008e68d2614f3987788428fd192a5ae3889d08fb2331417e4fc4a9ab366b2043cead + languageName: node + linkType: hard + +"got@npm:^12.1.0": + version: 12.6.1 + resolution: "got@npm:12.6.1" + dependencies: + "@sindresorhus/is": "npm:^5.2.0" + "@szmarczak/http-timer": "npm:^5.0.1" + cacheable-lookup: "npm:^7.0.0" + cacheable-request: "npm:^10.2.8" + decompress-response: "npm:^6.0.0" + form-data-encoder: "npm:^2.1.2" + get-stream: "npm:^6.0.1" + http2-wrapper: "npm:^2.1.10" + lowercase-keys: "npm:^3.0.0" + p-cancelable: "npm:^3.0.0" + responselike: "npm:^3.0.0" + checksum: 10c0/2fe97fcbd7a9ffc7c2d0ecf59aca0a0562e73a7749cadada9770eeb18efbdca3086262625fb65590594edc220a1eca58fab0d26b0c93c2f9a008234da71ca66b + languageName: node + linkType: hard + +"graceful-fs@npm:4.2.10": + version: 4.2.10 + resolution: "graceful-fs@npm:4.2.10" + checksum: 10c0/4223a833e38e1d0d2aea630c2433cfb94ddc07dfc11d511dbd6be1d16688c5be848acc31f9a5d0d0ddbfb56d2ee5a6ae0278aceeb0ca6a13f27e06b9956fb952 + languageName: node + linkType: hard + +"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 + languageName: node + linkType: hard + +"gray-matter@npm:^4.0.3": + version: 4.0.3 + resolution: "gray-matter@npm:4.0.3" + dependencies: + js-yaml: "npm:^3.13.1" + kind-of: "npm:^6.0.2" + section-matter: "npm:^1.0.0" + strip-bom-string: "npm:^1.0.0" + checksum: 10c0/e38489906dad4f162ca01e0dcbdbed96d1a53740cef446b9bf76d80bec66fa799af07776a18077aee642346c5e1365ed95e4c91854a12bf40ba0d4fb43a625a6 + languageName: node + linkType: hard + +"gzip-size@npm:^6.0.0": + version: 6.0.0 + resolution: "gzip-size@npm:6.0.0" + dependencies: + duplexer: "npm:^0.1.2" + checksum: 10c0/4ccb924626c82125897a997d1c84f2377846a6ef57fbee38f7c0e6b41387fba4d00422274440747b58008b5d60114bac2349c2908e9aba55188345281af40a3f + languageName: node + linkType: hard + +"handle-thing@npm:^2.0.0": + version: 2.0.1 + resolution: "handle-thing@npm:2.0.1" + checksum: 10c0/7ae34ba286a3434f1993ebd1cc9c9e6b6d8ea672182db28b1afc0a7119229552fa7031e3e5f3cd32a76430ece4e94b7da6f12af2eb39d6239a7693e4bd63a998 + languageName: node + linkType: hard + +"has-flag@npm:^4.0.0": + version: 4.0.0 + resolution: "has-flag@npm:4.0.0" + checksum: 10c0/2e789c61b7888d66993e14e8331449e525ef42aac53c627cc53d1c3334e768bcb6abdc4f5f0de1478a25beec6f0bd62c7549058b7ac53e924040d4f301f02fd1 + languageName: node + linkType: hard + +"has-property-descriptors@npm:^1.0.0, has-property-descriptors@npm:^1.0.2": + version: 1.0.2 + resolution: "has-property-descriptors@npm:1.0.2" + dependencies: + es-define-property: "npm:^1.0.0" + checksum: 10c0/253c1f59e80bb476cf0dde8ff5284505d90c3bdb762983c3514d36414290475fe3fd6f574929d84de2a8eec00d35cf07cb6776205ff32efd7c50719125f00236 + languageName: node + linkType: hard + +"has-symbols@npm:^1.1.0": + version: 1.1.0 + resolution: "has-symbols@npm:1.1.0" + checksum: 10c0/dde0a734b17ae51e84b10986e651c664379018d10b91b6b0e9b293eddb32f0f069688c841fb40f19e9611546130153e0a2a48fd7f512891fb000ddfa36f5a20e + languageName: node + linkType: hard + +"has-yarn@npm:^3.0.0": + version: 3.0.0 + resolution: "has-yarn@npm:3.0.0" + checksum: 10c0/38c76618cb764e4a98ea114a3938e0bed6ceafb6bacab2ffb32e7c7d1e18b5e09cd03387d507ee87072388e1f20b1f80947fee62c41fc450edfbbdc02a665787 + languageName: node + linkType: hard + +"hasown@npm:^2.0.2": + version: 2.0.2 + resolution: "hasown@npm:2.0.2" + dependencies: + function-bind: "npm:^1.1.2" + checksum: 10c0/3769d434703b8ac66b209a4cca0737519925bbdb61dd887f93a16372b14694c63ff4e797686d87c90f08168e81082248b9b028bad60d4da9e0d1148766f56eb9 + languageName: node + linkType: hard + +"hast-util-definition-list@npm:^2.0.0": + version: 2.1.0 + resolution: "hast-util-definition-list@npm:2.1.0" + dependencies: + "@types/hast": "npm:^3.0.4" + "@types/mdast": "npm:^4.0.3" + "@types/unist": "npm:^3.0.2" + hast-util-to-mdast: "npm:^10.1.0" + mdast-util-definition-list: "npm:^2.0.0" + mdast-util-phrasing: "npm:^4.1.0" + checksum: 10c0/a81c420d4988c375be744c34c504e61dc0bd107d69a9df4ad81dcb677d3c9963d2e5667156760f74e7ada4cef2af0fd73c8ed92e91f2f664c2f1c67b1025cea3 + languageName: node + linkType: hard + +"hast-util-embedded@npm:^3.0.0": + version: 3.0.0 + resolution: "hast-util-embedded@npm:3.0.0" + dependencies: + "@types/hast": "npm:^3.0.0" + hast-util-is-element: "npm:^3.0.0" + checksum: 10c0/054c3d3b96fcd5c1d1c6f8d38ce1f7f33022ba6362129a022673d0b539f876acdcababbb9df29812fb927294f98ef7a2f44519a80d637fe3eea1819c9e69eeac + languageName: node + linkType: hard + +"hast-util-from-dom@npm:^5.0.0": + version: 5.0.1 + resolution: "hast-util-from-dom@npm:5.0.1" + dependencies: + "@types/hast": "npm:^3.0.0" + hastscript: "npm:^9.0.0" + web-namespaces: "npm:^2.0.0" + checksum: 10c0/9a90381e048107a093a3da758bb17b67aaf5322e222f02497f841c4990abf94aa177d38d5b9bf61ad07b3601d0409f34f5b556d89578cc189230c6b994d2af77 + languageName: node + linkType: hard + +"hast-util-from-html-isomorphic@npm:^2.0.0": + version: 2.0.0 + resolution: "hast-util-from-html-isomorphic@npm:2.0.0" + dependencies: + "@types/hast": "npm:^3.0.0" + hast-util-from-dom: "npm:^5.0.0" + hast-util-from-html: "npm:^2.0.0" + unist-util-remove-position: "npm:^5.0.0" + checksum: 10c0/fc68d9245e794483a802d5c85a9f6c25959e00db78cc796411efc965134f3206f9cc9fa38134572ea781ad74663e801f1f83202007b208e27a770855566a62b6 + languageName: node + linkType: hard + +"hast-util-from-html@npm:^2.0.0": + version: 2.0.3 + resolution: "hast-util-from-html@npm:2.0.3" + dependencies: + "@types/hast": "npm:^3.0.0" + devlop: "npm:^1.1.0" + hast-util-from-parse5: "npm:^8.0.0" + parse5: "npm:^7.0.0" + vfile: "npm:^6.0.0" + vfile-message: "npm:^4.0.0" + checksum: 10c0/993ef707c1a12474c8d4094fc9706a72826c660a7e308ea54c50ad893353d32e139b7cbc67510c2e82feac572b320e3b05aeb13d0f9c6302d61261f337b46764 + languageName: node + linkType: hard + +"hast-util-from-parse5@npm:^8.0.0": + version: 8.0.3 + resolution: "hast-util-from-parse5@npm:8.0.3" + dependencies: + "@types/hast": "npm:^3.0.0" + "@types/unist": "npm:^3.0.0" + devlop: "npm:^1.0.0" + hastscript: "npm:^9.0.0" + property-information: "npm:^7.0.0" + vfile: "npm:^6.0.0" + vfile-location: "npm:^5.0.0" + web-namespaces: "npm:^2.0.0" + checksum: 10c0/40ace6c0ad43c26f721c7499fe408e639cde917b2350c9299635e6326559855896dae3c3ebf7440df54766b96c4276a7823e8f376a2b6a28b37b591f03412545 + languageName: node + linkType: hard + +"hast-util-has-property@npm:^3.0.0": + version: 3.0.0 + resolution: "hast-util-has-property@npm:3.0.0" + dependencies: + "@types/hast": "npm:^3.0.0" + checksum: 10c0/6e2c0e22ca893c6ebb60f8390e184c4deb041c36d09796756f02cd121c1789c0f5c862ed06caea8f1a80ea8c0ef6a7854dd57946c2eebb76488727bd4a1c952e + languageName: node + linkType: hard + +"hast-util-is-body-ok-link@npm:^3.0.0": + version: 3.0.1 + resolution: "hast-util-is-body-ok-link@npm:3.0.1" + dependencies: + "@types/hast": "npm:^3.0.0" + checksum: 10c0/c320cbd9a9a834b007a6f2f8c271e98b8331c0193adf06e0a7c5ea0acae664e97ce28eb4436e0658bc5cdb8f47390ec1c6cba7c4fe1ded10951fcdd1432f60bf + languageName: node + linkType: hard + +"hast-util-is-element@npm:1.1.0": + version: 1.1.0 + resolution: "hast-util-is-element@npm:1.1.0" + checksum: 10c0/9f95b1e356af3d891a293c1e63560480cb9c2aa33c14e0da3abfaf76aa3f2de8e178643f8459b10e1e2d11a0bc4553c628b57e5afa607791073b61d456f77926 + languageName: node + linkType: hard + +"hast-util-is-element@npm:^3.0.0": + version: 3.0.0 + resolution: "hast-util-is-element@npm:3.0.0" + dependencies: + "@types/hast": "npm:^3.0.0" + checksum: 10c0/f5361e4c9859c587ca8eb0d8343492f3077ccaa0f58a44cd09f35d5038f94d65152288dcd0c19336ef2c9491ec4d4e45fde2176b05293437021570aa0bc3613b + languageName: node + linkType: hard + +"hast-util-minify-whitespace@npm:^1.0.0": + version: 1.0.1 + resolution: "hast-util-minify-whitespace@npm:1.0.1" + dependencies: + "@types/hast": "npm:^3.0.0" + hast-util-embedded: "npm:^3.0.0" + hast-util-is-element: "npm:^3.0.0" + hast-util-whitespace: "npm:^3.0.0" + unist-util-is: "npm:^6.0.0" + checksum: 10c0/20a7d64947e080463084f444ad09c7f28c40e7648ca2d9c6c036e42a67f8e945d352560ff599304c988257c1e477abcf6a1f508c0900211fa58ec1ba21b36533 + languageName: node + linkType: hard + +"hast-util-parse-selector@npm:^4.0.0": + version: 4.0.0 + resolution: "hast-util-parse-selector@npm:4.0.0" + dependencies: + "@types/hast": "npm:^3.0.0" + checksum: 10c0/5e98168cb44470dc274aabf1a28317e4feb09b1eaf7a48bbaa8c1de1b43a89cd195cb1284e535698e658e3ec26ad91bc5e52c9563c36feb75abbc68aaf68fb9f + languageName: node + linkType: hard + +"hast-util-phrasing@npm:^3.0.0": + version: 3.0.1 + resolution: "hast-util-phrasing@npm:3.0.1" + dependencies: + "@types/hast": "npm:^3.0.0" + hast-util-embedded: "npm:^3.0.0" + hast-util-has-property: "npm:^3.0.0" + hast-util-is-body-ok-link: "npm:^3.0.0" + hast-util-is-element: "npm:^3.0.0" + checksum: 10c0/d77e186ea3d7d62f6db9c4a55c3e6d9f1f6affd5f40250e8de9d73f167ae19fcc02fafe1601dfbe36e90f76ed5013ac004f0b6b398aee3a04a7a81de12788600 + languageName: node + linkType: hard + +"hast-util-raw@npm:^9.0.0": + version: 9.1.0 + resolution: "hast-util-raw@npm:9.1.0" + dependencies: + "@types/hast": "npm:^3.0.0" + "@types/unist": "npm:^3.0.0" + "@ungap/structured-clone": "npm:^1.0.0" + hast-util-from-parse5: "npm:^8.0.0" + hast-util-to-parse5: "npm:^8.0.0" + html-void-elements: "npm:^3.0.0" + mdast-util-to-hast: "npm:^13.0.0" + parse5: "npm:^7.0.0" + unist-util-position: "npm:^5.0.0" + unist-util-visit: "npm:^5.0.0" + vfile: "npm:^6.0.0" + web-namespaces: "npm:^2.0.0" + zwitch: "npm:^2.0.0" + checksum: 10c0/d0d909d2aedecef6a06f0005cfae410d6475e6e182d768bde30c3af9fcbbe4f9beb0522bdc21d0679cb3c243c0df40385797ed255148d68b3d3f12e82d12aacc + languageName: node + linkType: hard + +"hast-util-to-estree@npm:^3.0.0": + version: 3.1.3 + resolution: "hast-util-to-estree@npm:3.1.3" + dependencies: + "@types/estree": "npm:^1.0.0" + "@types/estree-jsx": "npm:^1.0.0" + "@types/hast": "npm:^3.0.0" + comma-separated-tokens: "npm:^2.0.0" + devlop: "npm:^1.0.0" + estree-util-attach-comments: "npm:^3.0.0" + estree-util-is-identifier-name: "npm:^3.0.0" + hast-util-whitespace: "npm:^3.0.0" + mdast-util-mdx-expression: "npm:^2.0.0" + mdast-util-mdx-jsx: "npm:^3.0.0" + mdast-util-mdxjs-esm: "npm:^2.0.0" + property-information: "npm:^7.0.0" + space-separated-tokens: "npm:^2.0.0" + style-to-js: "npm:^1.0.0" + unist-util-position: "npm:^5.0.0" + zwitch: "npm:^2.0.0" + checksum: 10c0/8e86c075319082c8a6304c5bcdf24ec02466074571e993f58bfa2cfd70850ef46d33b5c402208597a87fe0f02f1e620bda5958217efb1b7396c81c486373b75f + languageName: node + linkType: hard + +"hast-util-to-html@npm:^9.0.0": + version: 9.0.5 + resolution: "hast-util-to-html@npm:9.0.5" + dependencies: + "@types/hast": "npm:^3.0.0" + "@types/unist": "npm:^3.0.0" + ccount: "npm:^2.0.0" + comma-separated-tokens: "npm:^2.0.0" + hast-util-whitespace: "npm:^3.0.0" + html-void-elements: "npm:^3.0.0" + mdast-util-to-hast: "npm:^13.0.0" + property-information: "npm:^7.0.0" + space-separated-tokens: "npm:^2.0.0" + stringify-entities: "npm:^4.0.0" + zwitch: "npm:^2.0.4" + checksum: 10c0/b7a08c30bab4371fc9b4a620965c40b270e5ae7a8e94cf885f43b21705179e28c8e43b39c72885d1647965fb3738654e6962eb8b58b0c2a84271655b4d748836 + languageName: node + linkType: hard + +"hast-util-to-jsx-runtime@npm:^2.0.0": + version: 2.3.6 + resolution: "hast-util-to-jsx-runtime@npm:2.3.6" + dependencies: + "@types/estree": "npm:^1.0.0" + "@types/hast": "npm:^3.0.0" + "@types/unist": "npm:^3.0.0" + comma-separated-tokens: "npm:^2.0.0" + devlop: "npm:^1.0.0" + estree-util-is-identifier-name: "npm:^3.0.0" + hast-util-whitespace: "npm:^3.0.0" + mdast-util-mdx-expression: "npm:^2.0.0" + mdast-util-mdx-jsx: "npm:^3.0.0" + mdast-util-mdxjs-esm: "npm:^2.0.0" + property-information: "npm:^7.0.0" + space-separated-tokens: "npm:^2.0.0" + style-to-js: "npm:^1.0.0" + unist-util-position: "npm:^5.0.0" + vfile-message: "npm:^4.0.0" + checksum: 10c0/27297e02848fe37ef219be04a26ce708d17278a175a807689e94a821dcffc88aa506d62c3a85beed1f9a8544f7211bdcbcde0528b7b456a57c2e342c3fd11056 + languageName: node + linkType: hard + +"hast-util-to-mdast@npm:^10.1.0": + version: 10.1.2 + resolution: "hast-util-to-mdast@npm:10.1.2" + dependencies: + "@types/hast": "npm:^3.0.0" + "@types/mdast": "npm:^4.0.0" + "@ungap/structured-clone": "npm:^1.0.0" + hast-util-phrasing: "npm:^3.0.0" + hast-util-to-html: "npm:^9.0.0" + hast-util-to-text: "npm:^4.0.0" + hast-util-whitespace: "npm:^3.0.0" + mdast-util-phrasing: "npm:^4.0.0" + mdast-util-to-hast: "npm:^13.0.0" + mdast-util-to-string: "npm:^4.0.0" + rehype-minify-whitespace: "npm:^6.0.0" + trim-trailing-lines: "npm:^2.0.0" + unist-util-position: "npm:^5.0.0" + unist-util-visit: "npm:^5.0.0" + checksum: 10c0/2edd4521b147734078d66e03cd43c571a0a3aeefd3fcc34659c783b25e9222ddb5c8c759b12a86ebc70a25b3888505dc59b913ff36ae17cca04d52050592a963 + languageName: node + linkType: hard + +"hast-util-to-parse5@npm:^8.0.0": + version: 8.0.0 + resolution: "hast-util-to-parse5@npm:8.0.0" + dependencies: + "@types/hast": "npm:^3.0.0" + comma-separated-tokens: "npm:^2.0.0" + devlop: "npm:^1.0.0" + property-information: "npm:^6.0.0" + space-separated-tokens: "npm:^2.0.0" + web-namespaces: "npm:^2.0.0" + zwitch: "npm:^2.0.0" + checksum: 10c0/3c0c7fba026e0c4be4675daf7277f9ff22ae6da801435f1b7104f7740de5422576f1c025023c7b3df1d0a161e13a04c6ab8f98ada96eb50adb287b537849a2bd + languageName: node + linkType: hard + +"hast-util-to-text@npm:^4.0.0": + version: 4.0.2 + resolution: "hast-util-to-text@npm:4.0.2" + dependencies: + "@types/hast": "npm:^3.0.0" + "@types/unist": "npm:^3.0.0" + hast-util-is-element: "npm:^3.0.0" + unist-util-find-after: "npm:^5.0.0" + checksum: 10c0/93ecc10e68fe5391c6e634140eb330942e71dea2724c8e0c647c73ed74a8ec930a4b77043b5081284808c96f73f2bee64ee416038ece75a63a467e8d14f09946 + languageName: node + linkType: hard + +"hast-util-whitespace@npm:^3.0.0": + version: 3.0.0 + resolution: "hast-util-whitespace@npm:3.0.0" + dependencies: + "@types/hast": "npm:^3.0.0" + checksum: 10c0/b898bc9fe27884b272580d15260b6bbdabe239973a147e97fa98c45fa0ffec967a481aaa42291ec34fb56530dc2d484d473d7e2bae79f39c83f3762307edfea8 + languageName: node + linkType: hard + +"hastscript@npm:^9.0.0": + version: 9.0.1 + resolution: "hastscript@npm:9.0.1" + dependencies: + "@types/hast": "npm:^3.0.0" + comma-separated-tokens: "npm:^2.0.0" + hast-util-parse-selector: "npm:^4.0.0" + property-information: "npm:^7.0.0" + space-separated-tokens: "npm:^2.0.0" + checksum: 10c0/18dc8064e5c3a7a2ae862978e626b97a254e1c8a67ee9d0c9f06d373bba155ed805fc5b5ce21b990fb7bc174624889e5e1ce1cade264f1b1d58b48f994bc85ce + languageName: node + linkType: hard + +"he@npm:^1.2.0": + version: 1.2.0 + resolution: "he@npm:1.2.0" + bin: + he: bin/he + checksum: 10c0/a27d478befe3c8192f006cdd0639a66798979dfa6e2125c6ac582a19a5ebfec62ad83e8382e6036170d873f46e4536a7e795bf8b95bf7c247f4cc0825ccc8c17 + languageName: node + linkType: hard + +"history@npm:^4.9.0": + version: 4.10.1 + resolution: "history@npm:4.10.1" + dependencies: + "@babel/runtime": "npm:^7.1.2" + loose-envify: "npm:^1.2.0" + resolve-pathname: "npm:^3.0.0" + tiny-invariant: "npm:^1.0.2" + tiny-warning: "npm:^1.0.0" + value-equal: "npm:^1.0.1" + checksum: 10c0/35377694e4f10f2cf056a9cb1a8ee083e04e4b4717a63baeee4afd565658a62c7e73700bf9e82aa53dbe1ec94e0a25a83c080d63bad8ee6b274a98d2fbc5ed4c + languageName: node + linkType: hard + +"hoist-non-react-statics@npm:^3.1.0": + version: 3.3.2 + resolution: "hoist-non-react-statics@npm:3.3.2" + dependencies: + react-is: "npm:^16.7.0" + checksum: 10c0/fe0889169e845d738b59b64badf5e55fa3cf20454f9203d1eb088df322d49d4318df774828e789898dcb280e8a5521bb59b3203385662ca5e9218a6ca5820e74 + languageName: node + linkType: hard + +"hpack.js@npm:^2.1.6": + version: 2.1.6 + resolution: "hpack.js@npm:2.1.6" + dependencies: + inherits: "npm:^2.0.1" + obuf: "npm:^1.0.0" + readable-stream: "npm:^2.0.1" + wbuf: "npm:^1.1.0" + checksum: 10c0/55b9e824430bab82a19d079cb6e33042d7d0640325678c9917fcc020c61d8a08ca671b6c942c7f0aae9bb6e4b67ffb50734a72f9e21d66407c3138c1983b70f0 + languageName: node + linkType: hard + +"html-entities@npm:^2.3.2": + version: 2.6.0 + resolution: "html-entities@npm:2.6.0" + checksum: 10c0/7c8b15d9ea0cd00dc9279f61bab002ba6ca8a7a0f3c36ed2db3530a67a9621c017830d1d2c1c65beb9b8e3436ea663e9cf8b230472e0e413359399413b27c8b7 + languageName: node + linkType: hard + +"html-escaper@npm:^2.0.2": + version: 2.0.2 + resolution: "html-escaper@npm:2.0.2" + checksum: 10c0/208e8a12de1a6569edbb14544f4567e6ce8ecc30b9394fcaa4e7bb1e60c12a7c9a1ed27e31290817157e8626f3a4f29e76c8747030822eb84a6abb15c255f0a0 + languageName: node + linkType: hard + +"html-minifier-terser@npm:^6.0.2": + version: 6.1.0 + resolution: "html-minifier-terser@npm:6.1.0" + dependencies: + camel-case: "npm:^4.1.2" + clean-css: "npm:^5.2.2" + commander: "npm:^8.3.0" + he: "npm:^1.2.0" + param-case: "npm:^3.0.4" + relateurl: "npm:^0.2.7" + terser: "npm:^5.10.0" + bin: + html-minifier-terser: cli.js + checksum: 10c0/1aa4e4f01cf7149e3ac5ea84fb7a1adab86da40d38d77a6fff42852b5ee3daccb78b615df97264e3a6a5c33e57f0c77f471d607ca1e1debd1dab9b58286f4b5a + languageName: node + linkType: hard + +"html-minifier-terser@npm:^7.2.0": + version: 7.2.0 + resolution: "html-minifier-terser@npm:7.2.0" + dependencies: + camel-case: "npm:^4.1.2" + clean-css: "npm:~5.3.2" + commander: "npm:^10.0.0" + entities: "npm:^4.4.0" + param-case: "npm:^3.0.4" + relateurl: "npm:^0.2.7" + terser: "npm:^5.15.1" + bin: + html-minifier-terser: cli.js + checksum: 10c0/ffc97c17299d9ec30e17269781b816ea2fc411a9206fc9e768be8f2decb1ea1470892809babb23bb4e3ab1f64d606d97e1803bf526ae3af71edc0fd3070b94b9 + languageName: node + linkType: hard + +"html-tags@npm:^3.3.1": + version: 3.3.1 + resolution: "html-tags@npm:3.3.1" + checksum: 10c0/680165e12baa51bad7397452d247dbcc5a5c29dac0e6754b1187eee3bf26f514bc1907a431dd2f7eb56207611ae595ee76a0acc8eaa0d931e72c791dd6463d79 + languageName: node + linkType: hard + +"html-void-elements@npm:^3.0.0": + version: 3.0.0 + resolution: "html-void-elements@npm:3.0.0" + checksum: 10c0/a8b9ec5db23b7c8053876dad73a0336183e6162bf6d2677376d8b38d654fdc59ba74fdd12f8812688f7db6fad451210c91b300e472afc0909224e0a44c8610d2 + languageName: node + linkType: hard + +"html-webpack-plugin@npm:^5.6.0": + version: 5.6.3 + resolution: "html-webpack-plugin@npm:5.6.3" + dependencies: + "@types/html-minifier-terser": "npm:^6.0.0" + html-minifier-terser: "npm:^6.0.2" + lodash: "npm:^4.17.21" + pretty-error: "npm:^4.0.0" + tapable: "npm:^2.0.0" + peerDependencies: + "@rspack/core": 0.x || 1.x + webpack: ^5.20.0 + peerDependenciesMeta: + "@rspack/core": + optional: true + webpack: + optional: true + checksum: 10c0/25a21f83a8823d3711396dd8050bc0080c0ae55537352d432903eff58a7d9838fc811e3c26462419036190720357e67c7977efd106fb9a252770632824f0cc25 + languageName: node + linkType: hard + +"htmlparser2@npm:^6.1.0": + version: 6.1.0 + resolution: "htmlparser2@npm:6.1.0" + dependencies: + domelementtype: "npm:^2.0.1" + domhandler: "npm:^4.0.0" + domutils: "npm:^2.5.2" + entities: "npm:^2.0.0" + checksum: 10c0/3058499c95634f04dc66be8c2e0927cd86799413b2d6989d8ae542ca4dbf5fa948695d02c27d573acf44843af977aec6d9a7bdd0f6faa6b2d99e2a729b2a31b6 + languageName: node + linkType: hard + +"htmlparser2@npm:^8.0.1": + version: 8.0.2 + resolution: "htmlparser2@npm:8.0.2" + dependencies: + domelementtype: "npm:^2.3.0" + domhandler: "npm:^5.0.3" + domutils: "npm:^3.0.1" + entities: "npm:^4.4.0" + checksum: 10c0/609cca85886d0bf2c9a5db8c6926a89f3764596877492e2caa7a25a789af4065bc6ee2cdc81807fe6b1d03a87bf8a373b5a754528a4cc05146b713c20575aab4 + languageName: node + linkType: hard + +"http-cache-semantics@npm:^4.1.1": + version: 4.2.0 + resolution: "http-cache-semantics@npm:4.2.0" + checksum: 10c0/45b66a945cf13ec2d1f29432277201313babf4a01d9e52f44b31ca923434083afeca03f18417f599c9ab3d0e7b618ceb21257542338b57c54b710463b4a53e37 + languageName: node + linkType: hard + +"http-deceiver@npm:^1.2.7": + version: 1.2.7 + resolution: "http-deceiver@npm:1.2.7" + checksum: 10c0/8bb9b716f5fc55f54a451da7f49b9c695c3e45498a789634daec26b61e4add7c85613a4a9e53726c39d09de7a163891ecd6eb5809adb64500a840fd86fe81d03 + languageName: node + linkType: hard + +"http-errors@npm:2.0.0": + version: 2.0.0 + resolution: "http-errors@npm:2.0.0" + dependencies: + depd: "npm:2.0.0" + inherits: "npm:2.0.4" + setprototypeof: "npm:1.2.0" + statuses: "npm:2.0.1" + toidentifier: "npm:1.0.1" + checksum: 10c0/fc6f2715fe188d091274b5ffc8b3657bd85c63e969daa68ccb77afb05b071a4b62841acb7a21e417b5539014dff2ebf9550f0b14a9ff126f2734a7c1387f8e19 + languageName: node + linkType: hard + +"http-errors@npm:~1.6.2": + version: 1.6.3 + resolution: "http-errors@npm:1.6.3" + dependencies: + depd: "npm:~1.1.2" + inherits: "npm:2.0.3" + setprototypeof: "npm:1.1.0" + statuses: "npm:>= 1.4.0 < 2" + checksum: 10c0/17ec4046ee974477778bfdd525936c254b872054703ec2caa4d6f099566b8adade636ae6aeeacb39302c5cd6e28fb407ebd937f500f5010d0b6850750414ff78 + languageName: node + linkType: hard + +"http-parser-js@npm:>=0.5.1": + version: 0.5.10 + resolution: "http-parser-js@npm:0.5.10" + checksum: 10c0/8bbcf1832a8d70b2bd515270112116333add88738a2cc05bfb94ba6bde3be4b33efee5611584113818d2bcf654fdc335b652503be5a6b4c0b95e46f214187d93 + languageName: node + linkType: hard + +"http-proxy-agent@npm:^7.0.0": + version: 7.0.2 + resolution: "http-proxy-agent@npm:7.0.2" + dependencies: + agent-base: "npm:^7.1.0" + debug: "npm:^4.3.4" + checksum: 10c0/4207b06a4580fb85dd6dff521f0abf6db517489e70863dca1a0291daa7f2d3d2d6015a57bd702af068ea5cf9f1f6ff72314f5f5b4228d299c0904135d2aef921 + languageName: node + linkType: hard + +"http-proxy-middleware@npm:^2.0.3": + version: 2.0.9 + resolution: "http-proxy-middleware@npm:2.0.9" + dependencies: + "@types/http-proxy": "npm:^1.17.8" + http-proxy: "npm:^1.18.1" + is-glob: "npm:^4.0.1" + is-plain-obj: "npm:^3.0.0" + micromatch: "npm:^4.0.2" + peerDependencies: + "@types/express": ^4.17.13 + peerDependenciesMeta: + "@types/express": + optional: true + checksum: 10c0/8e9032af625f7c9f2f0d318f6cdb14eb725cc16ffe7b4ccccea25cf591fa819bb7c3bb579e0b543e0ae9c73059b505a6d728290c757bff27bae526a6ed11c05e + languageName: node + linkType: hard + +"http-proxy@npm:^1.18.1": + version: 1.18.1 + resolution: "http-proxy@npm:1.18.1" + dependencies: + eventemitter3: "npm:^4.0.0" + follow-redirects: "npm:^1.0.0" + requires-port: "npm:^1.0.0" + checksum: 10c0/148dfa700a03fb421e383aaaf88ac1d94521dfc34072f6c59770528c65250983c2e4ec996f2f03aa9f3fe46cd1270a593126068319311e3e8d9e610a37533e94 + languageName: node + linkType: hard + +"http2-wrapper@npm:^2.1.10": + version: 2.2.1 + resolution: "http2-wrapper@npm:2.2.1" + dependencies: + quick-lru: "npm:^5.1.1" + resolve-alpn: "npm:^1.2.0" + checksum: 10c0/7207201d3c6e53e72e510c9b8912e4f3e468d3ecc0cf3bf52682f2aac9cd99358b896d1da4467380adc151cf97c412bedc59dc13dae90c523f42053a7449eedb + languageName: node + linkType: hard + +"https-proxy-agent@npm:^7.0.1": + version: 7.0.6 + resolution: "https-proxy-agent@npm:7.0.6" + dependencies: + agent-base: "npm:^7.1.2" + debug: "npm:4" + checksum: 10c0/f729219bc735edb621fa30e6e84e60ee5d00802b8247aac0d7b79b0bd6d4b3294737a337b93b86a0bd9e68099d031858a39260c976dc14cdbba238ba1f8779ac + languageName: node + linkType: hard + +"human-signals@npm:^2.1.0": + version: 2.1.0 + resolution: "human-signals@npm:2.1.0" + checksum: 10c0/695edb3edfcfe9c8b52a76926cd31b36978782062c0ed9b1192b36bebc75c4c87c82e178dfcb0ed0fc27ca59d434198aac0bd0be18f5781ded775604db22304a + languageName: node + linkType: hard + +"iconv-lite@npm:0.4.24": + version: 0.4.24 + resolution: "iconv-lite@npm:0.4.24" + dependencies: + safer-buffer: "npm:>= 2.1.2 < 3" + checksum: 10c0/c6886a24cc00f2a059767440ec1bc00d334a89f250db8e0f7feb4961c8727118457e27c495ba94d082e51d3baca378726cd110aaf7ded8b9bbfd6a44760cf1d4 + languageName: node + linkType: hard + +"iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: "npm:>= 2.1.2 < 3.0.0" + checksum: 10c0/98102bc66b33fcf5ac044099d1257ba0b7ad5e3ccd3221f34dd508ab4070edff183276221684e1e0555b145fce0850c9f7d2b60a9fcac50fbb4ea0d6e845a3b1 + languageName: node + linkType: hard + +"icss-utils@npm:^5.0.0, icss-utils@npm:^5.1.0": + version: 5.1.0 + resolution: "icss-utils@npm:5.1.0" + peerDependencies: + postcss: ^8.1.0 + checksum: 10c0/39c92936fabd23169c8611d2b5cc39e39d10b19b0d223352f20a7579f75b39d5f786114a6b8fc62bee8c5fed59ba9e0d38f7219a4db383e324fb3061664b043d + languageName: node + linkType: hard + +"ignore@npm:^5.2.0, ignore@npm:^5.2.4": + version: 5.3.2 + resolution: "ignore@npm:5.3.2" + checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337 + languageName: node + linkType: hard + +"image-size@npm:^1.0.2": + version: 1.2.1 + resolution: "image-size@npm:1.2.1" + dependencies: + queue: "npm:6.0.2" + bin: + image-size: bin/image-size.js + checksum: 10c0/f8b3c19d4476513f1d7e55c3e6db80997b315444743e2040d545cbcaee59be03d2eb40c46be949a8372697b7003fdb0c04925d704390a7f606bc8181e25c0ed4 + languageName: node + linkType: hard + +"immer@npm:^9.0.7": + version: 9.0.21 + resolution: "immer@npm:9.0.21" + checksum: 10c0/03ea3ed5d4d72e8bd428df4a38ad7e483ea8308e9a113d3b42e0ea2cc0cc38340eb0a6aca69592abbbf047c685dbda04e3d34bf2ff438ab57339ed0a34cc0a05 + languageName: node + linkType: hard + +"import-fresh@npm:^3.1.0, import-fresh@npm:^3.3.0": + version: 3.3.1 + resolution: "import-fresh@npm:3.3.1" + dependencies: + parent-module: "npm:^1.0.0" + resolve-from: "npm:^4.0.0" + checksum: 10c0/bf8cc494872fef783249709385ae883b447e3eb09db0ebd15dcead7d9afe7224dad7bd7591c6b73b0b19b3c0f9640eb8ee884f01cfaf2887ab995b0b36a0cbec + languageName: node + linkType: hard + +"import-lazy@npm:^4.0.0": + version: 4.0.0 + resolution: "import-lazy@npm:4.0.0" + checksum: 10c0/a3520313e2c31f25c0b06aa66d167f329832b68a4f957d7c9daf6e0fa41822b6e84948191648b9b9d8ca82f94740cdf15eecf2401a5b42cd1c33fd84f2225cca + languageName: node + linkType: hard + +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 10c0/8b51313850dd33605c6c9d3fd9638b714f4c4c40250cff658209f30d40da60f78992fb2df5dabee4acf589a6a82bbc79ad5486550754bd9ec4e3fc0d4a57d6a6 + languageName: node + linkType: hard + +"indent-string@npm:^4.0.0": + version: 4.0.0 + resolution: "indent-string@npm:4.0.0" + checksum: 10c0/1e1904ddb0cb3d6cce7cd09e27a90184908b7a5d5c21b92e232c93579d314f0b83c246ffb035493d0504b1e9147ba2c9b21df0030f48673fba0496ecd698161f + languageName: node + linkType: hard + +"infima@npm:0.2.0-alpha.45": + version: 0.2.0-alpha.45 + resolution: "infima@npm:0.2.0-alpha.45" + checksum: 10c0/b50d103f6864687742067414d09392ccf3be363cf27503925a943ff56bb2392118e2bfdb6b2f89933417015e1770e58f81b2b0caf823f2adfb67f32b1702d469 + languageName: node + linkType: hard + +"inflight@npm:^1.0.4": + version: 1.0.6 + resolution: "inflight@npm:1.0.6" + dependencies: + once: "npm:^1.3.0" + wrappy: "npm:1" + checksum: 10c0/7faca22584600a9dc5b9fca2cd5feb7135ac8c935449837b315676b4c90aa4f391ec4f42240178244b5a34e8bede1948627fda392ca3191522fc46b34e985ab2 + languageName: node + linkType: hard + +"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:~2.0.3": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 + languageName: node + linkType: hard + +"inherits@npm:2.0.3": + version: 2.0.3 + resolution: "inherits@npm:2.0.3" + checksum: 10c0/6e56402373149ea076a434072671f9982f5fad030c7662be0332122fe6c0fa490acb3cc1010d90b6eff8d640b1167d77674add52dfd1bb85d545cf29e80e73e7 + languageName: node + linkType: hard + +"ini@npm:2.0.0": + version: 2.0.0 + resolution: "ini@npm:2.0.0" + checksum: 10c0/2e0c8f386369139029da87819438b20a1ff3fe58372d93fb1a86e9d9344125ace3a806b8ec4eb160a46e64cbc422fe68251869441676af49b7fc441af2389c25 + languageName: node + linkType: hard + +"ini@npm:^1.3.4, ini@npm:^1.3.5, ini@npm:~1.3.0": + version: 1.3.8 + resolution: "ini@npm:1.3.8" + checksum: 10c0/ec93838d2328b619532e4f1ff05df7909760b6f66d9c9e2ded11e5c1897d6f2f9980c54dd638f88654b00919ce31e827040631eab0a3969e4d1abefa0719516a + languageName: node + linkType: hard + +"inline-style-parser@npm:0.2.4": + version: 0.2.4 + resolution: "inline-style-parser@npm:0.2.4" + checksum: 10c0/ddc0b210eaa03e0f98d677b9836242c583c7c6051e84ce0e704ae4626e7871c5b78f8e30853480218b446355745775df318d4f82d33087ff7e393245efa9a881 + languageName: node + linkType: hard + +"interpret@npm:^1.0.0": + version: 1.4.0 + resolution: "interpret@npm:1.4.0" + checksum: 10c0/08c5ad30032edeec638485bc3f6db7d0094d9b3e85e0f950866600af3c52e9fd69715416d29564731c479d9f4d43ff3e4d302a178196bdc0e6837ec147640450 + languageName: node + linkType: hard + +"invariant@npm:^2.2.4": + version: 2.2.4 + resolution: "invariant@npm:2.2.4" + dependencies: + loose-envify: "npm:^1.0.0" + checksum: 10c0/5af133a917c0bcf65e84e7f23e779e7abc1cd49cb7fdc62d00d1de74b0d8c1b5ee74ac7766099fb3be1b05b26dfc67bab76a17030d2fe7ea2eef867434362dfc + languageName: node + linkType: hard + +"ip-address@npm:^9.0.5": + version: 9.0.5 + resolution: "ip-address@npm:9.0.5" + dependencies: + jsbn: "npm:1.1.0" + sprintf-js: "npm:^1.1.3" + checksum: 10c0/331cd07fafcb3b24100613e4b53e1a2b4feab11e671e655d46dc09ee233da5011284d09ca40c4ecbdfe1d0004f462958675c224a804259f2f78d2465a87824bc + languageName: node + linkType: hard + +"ipaddr.js@npm:1.9.1": + version: 1.9.1 + resolution: "ipaddr.js@npm:1.9.1" + checksum: 10c0/0486e775047971d3fdb5fb4f063829bac45af299ae0b82dcf3afa2145338e08290563a2a70f34b732d795ecc8311902e541a8530eeb30d75860a78ff4e94ce2a + languageName: node + linkType: hard + +"ipaddr.js@npm:^2.0.1": + version: 2.2.0 + resolution: "ipaddr.js@npm:2.2.0" + checksum: 10c0/e4ee875dc1bd92ac9d27e06cfd87cdb63ca786ff9fd7718f1d4f7a8ef27db6e5d516128f52d2c560408cbb75796ac2f83ead669e73507c86282d45f84c5abbb6 + languageName: node + linkType: hard + +"is-alphabetical@npm:^2.0.0": + version: 2.0.1 + resolution: "is-alphabetical@npm:2.0.1" + checksum: 10c0/932367456f17237533fd1fc9fe179df77957271020b83ea31da50e5cc472d35ef6b5fb8147453274ffd251134472ce24eb6f8d8398d96dee98237cdb81a6c9a7 + languageName: node + linkType: hard + +"is-alphanumerical@npm:^2.0.0": + version: 2.0.1 + resolution: "is-alphanumerical@npm:2.0.1" + dependencies: + is-alphabetical: "npm:^2.0.0" + is-decimal: "npm:^2.0.0" + checksum: 10c0/4b35c42b18e40d41378293f82a3ecd9de77049b476f748db5697c297f686e1e05b072a6aaae2d16f54d2a57f85b00cbbe755c75f6d583d1c77d6657bd0feb5a2 + languageName: node + linkType: hard + +"is-arrayish@npm:^0.2.1": + version: 0.2.1 + resolution: "is-arrayish@npm:0.2.1" + checksum: 10c0/e7fb686a739068bb70f860b39b67afc62acc62e36bb61c5f965768abce1873b379c563e61dd2adad96ebb7edf6651111b385e490cf508378959b0ed4cac4e729 + languageName: node + linkType: hard + +"is-binary-path@npm:~2.1.0": + version: 2.1.0 + resolution: "is-binary-path@npm:2.1.0" + dependencies: + binary-extensions: "npm:^2.0.0" + checksum: 10c0/a16eaee59ae2b315ba36fad5c5dcaf8e49c3e27318f8ab8fa3cdb8772bf559c8d1ba750a589c2ccb096113bb64497084361a25960899cb6172a6925ab6123d38 + languageName: node + linkType: hard + +"is-ci@npm:^3.0.1": + version: 3.0.1 + resolution: "is-ci@npm:3.0.1" + dependencies: + ci-info: "npm:^3.2.0" + bin: + is-ci: bin.js + checksum: 10c0/0e81caa62f4520d4088a5bef6d6337d773828a88610346c4b1119fb50c842587ed8bef1e5d9a656835a599e7209405b5761ddf2339668f2d0f4e889a92fe6051 + languageName: node + linkType: hard + +"is-core-module@npm:^2.16.0": + version: 2.16.1 + resolution: "is-core-module@npm:2.16.1" + dependencies: + hasown: "npm:^2.0.2" + checksum: 10c0/898443c14780a577e807618aaae2b6f745c8538eca5c7bc11388a3f2dc6de82b9902bcc7eb74f07be672b11bbe82dd6a6edded44a00cb3d8f933d0459905eedd + languageName: node + linkType: hard + +"is-decimal@npm:^2.0.0": + version: 2.0.1 + resolution: "is-decimal@npm:2.0.1" + checksum: 10c0/8085dd66f7d82f9de818fba48b9e9c0429cb4291824e6c5f2622e96b9680b54a07a624cfc663b24148b8e853c62a1c987cfe8b0b5a13f5156991afaf6736e334 + languageName: node + linkType: hard + +"is-docker@npm:^2.0.0, is-docker@npm:^2.1.1": + version: 2.2.1 + resolution: "is-docker@npm:2.2.1" + bin: + is-docker: cli.js + checksum: 10c0/e828365958d155f90c409cdbe958f64051d99e8aedc2c8c4cd7c89dcf35329daed42f7b99346f7828df013e27deb8f721cf9408ba878c76eb9e8290235fbcdcc + languageName: node + linkType: hard + +"is-extendable@npm:^0.1.0": + version: 0.1.1 + resolution: "is-extendable@npm:0.1.1" + checksum: 10c0/dd5ca3994a28e1740d1e25192e66eed128e0b2ff161a7ea348e87ae4f616554b486854de423877a2a2c171d5f7cd6e8093b91f54533bc88a59ee1c9838c43879 + languageName: node + linkType: hard + +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: 10c0/5487da35691fbc339700bbb2730430b07777a3c21b9ebaecb3072512dfd7b4ba78ac2381a87e8d78d20ea08affb3f1971b4af629173a6bf435ff8a4c47747912 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: 10c0/bb11d825e049f38e04c06373a8d72782eee0205bda9d908cc550ccb3c59b99d750ff9537982e01733c1c94a58e35400661f57042158ff5e8f3e90cf936daf0fc + languageName: node + linkType: hard + +"is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: "npm:^2.1.1" + checksum: 10c0/17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a + languageName: node + linkType: hard + +"is-hexadecimal@npm:^2.0.0": + version: 2.0.1 + resolution: "is-hexadecimal@npm:2.0.1" + checksum: 10c0/3eb60fe2f1e2bbc760b927dcad4d51eaa0c60138cf7fc671803f66353ad90c301605b502c7ea4c6bb0548e1c7e79dfd37b73b632652e3b76030bba603a7e9626 + languageName: node + linkType: hard + +"is-installed-globally@npm:^0.4.0": + version: 0.4.0 + resolution: "is-installed-globally@npm:0.4.0" + dependencies: + global-dirs: "npm:^3.0.0" + is-path-inside: "npm:^3.0.2" + checksum: 10c0/f3e6220ee5824b845c9ed0d4b42c24272701f1f9926936e30c0e676254ca5b34d1b92c6205cae11b283776f9529212c0cdabb20ec280a6451677d6493ca9c22d + languageName: node + linkType: hard + +"is-npm@npm:^6.0.0": + version: 6.0.0 + resolution: "is-npm@npm:6.0.0" + checksum: 10c0/1f064c66325cba6e494783bee4e635caa2655aad7f853a0e045d086e0bb7d83d2d6cdf1745dc9a7c7c93dacbf816fbee1f8d9179b02d5d01674d4f92541dc0d9 + languageName: node + linkType: hard + +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: 10c0/b4686d0d3053146095ccd45346461bc8e53b80aeb7671cc52a4de02dbbf7dc0d1d2a986e2fe4ae206984b4d34ef37e8b795ebc4f4295c978373e6575e295d811 + languageName: node + linkType: hard + +"is-obj@npm:^1.0.1": + version: 1.0.1 + resolution: "is-obj@npm:1.0.1" + checksum: 10c0/5003acba0af7aa47dfe0760e545a89bbac89af37c12092c3efadc755372cdaec034f130e7a3653a59eb3c1843cfc72ca71eaf1a6c3bafe5a0bab3611a47f9945 + languageName: node + linkType: hard + +"is-obj@npm:^2.0.0": + version: 2.0.0 + resolution: "is-obj@npm:2.0.0" + checksum: 10c0/85044ed7ba8bd169e2c2af3a178cacb92a97aa75de9569d02efef7f443a824b5e153eba72b9ae3aca6f8ce81955271aa2dc7da67a8b720575d3e38104208cb4e + languageName: node + linkType: hard + +"is-path-cwd@npm:^2.2.0": + version: 2.2.0 + resolution: "is-path-cwd@npm:2.2.0" + checksum: 10c0/afce71533a427a759cd0329301c18950333d7589533c2c90205bd3fdcf7b91eb92d1940493190567a433134d2128ec9325de2fd281e05be1920fbee9edd22e0a + languageName: node + linkType: hard + +"is-path-inside@npm:^3.0.2": + version: 3.0.3 + resolution: "is-path-inside@npm:3.0.3" + checksum: 10c0/cf7d4ac35fb96bab6a1d2c3598fe5ebb29aafb52c0aaa482b5a3ed9d8ba3edc11631e3ec2637660c44b3ce0e61a08d54946e8af30dec0b60a7c27296c68ffd05 + languageName: node + linkType: hard + +"is-plain-obj@npm:^3.0.0": + version: 3.0.0 + resolution: "is-plain-obj@npm:3.0.0" + checksum: 10c0/8e6483bfb051d42ec9c704c0ede051a821c6b6f9a6c7a3e3b55aa855e00981b0580c8f3b1f5e2e62649b39179b1abfee35d6f8086d999bfaa32c1908d29b07bc + languageName: node + linkType: hard + +"is-plain-obj@npm:^4.0.0": + version: 4.1.0 + resolution: "is-plain-obj@npm:4.1.0" + checksum: 10c0/32130d651d71d9564dc88ba7e6fda0e91a1010a3694648e9f4f47bb6080438140696d3e3e15c741411d712e47ac9edc1a8a9de1fe76f3487b0d90be06ac9975e + languageName: node + linkType: hard + +"is-plain-object@npm:^2.0.4": + version: 2.0.4 + resolution: "is-plain-object@npm:2.0.4" + dependencies: + isobject: "npm:^3.0.1" + checksum: 10c0/f050fdd5203d9c81e8c4df1b3ff461c4bc64e8b5ca383bcdde46131361d0a678e80bcf00b5257646f6c636197629644d53bd8e2375aea633de09a82d57e942f4 + languageName: node + linkType: hard + +"is-regexp@npm:^1.0.0": + version: 1.0.0 + resolution: "is-regexp@npm:1.0.0" + checksum: 10c0/34cacda1901e00f6e44879378f1d2fa96320ea956c1bec27713130aaf1d44f6e7bd963eed28945bfe37e600cb27df1cf5207302680dad8bdd27b9baff8ecf611 + languageName: node + linkType: hard + +"is-root@npm:^2.1.0": + version: 2.1.0 + resolution: "is-root@npm:2.1.0" + checksum: 10c0/83d3f5b052c3f28fbdbdf0d564bdd34fa14933f5694c78704f85cd1871255bc017fbe3fe2bc2fff2d227c6be5927ad2149b135c0a7c0060e7ac4e610d81a4f01 + languageName: node + linkType: hard + +"is-stream@npm:^2.0.0": + version: 2.0.1 + resolution: "is-stream@npm:2.0.1" + checksum: 10c0/7c284241313fc6efc329b8d7f08e16c0efeb6baab1b4cd0ba579eb78e5af1aa5da11e68559896a2067cd6c526bd29241dda4eb1225e627d5aa1a89a76d4635a5 + languageName: node + linkType: hard + +"is-typedarray@npm:^1.0.0": + version: 1.0.0 + resolution: "is-typedarray@npm:1.0.0" + checksum: 10c0/4c096275ba041a17a13cca33ac21c16bc4fd2d7d7eb94525e7cd2c2f2c1a3ab956e37622290642501ff4310601e413b675cf399ad6db49855527d2163b3eeeec + languageName: node + linkType: hard + +"is-wsl@npm:^2.2.0": + version: 2.2.0 + resolution: "is-wsl@npm:2.2.0" + dependencies: + is-docker: "npm:^2.0.0" + checksum: 10c0/a6fa2d370d21be487c0165c7a440d567274fbba1a817f2f0bfa41cc5e3af25041d84267baa22df66696956038a43973e72fca117918c91431920bdef490fa25e + languageName: node + linkType: hard + +"is-yarn-global@npm:^0.4.0": + version: 0.4.1 + resolution: "is-yarn-global@npm:0.4.1" + checksum: 10c0/8ff66f33454614f8e913ad91cc4de0d88d519a46c1ed41b3f589da79504ed0fcfa304064fe3096dda9360c5f35aa210cb8e978fd36798f3118cb66a4de64d365 + languageName: node + linkType: hard + +"isarray@npm:0.0.1": + version: 0.0.1 + resolution: "isarray@npm:0.0.1" + checksum: 10c0/ed1e62da617f71fe348907c71743b5ed550448b455f8d269f89a7c7ddb8ae6e962de3dab6a74a237b06f5eb7f6ece7a45ada8ce96d87fe972926530f91ae3311 + languageName: node + linkType: hard + +"isarray@npm:~1.0.0": + version: 1.0.0 + resolution: "isarray@npm:1.0.0" + checksum: 10c0/18b5be6669be53425f0b84098732670ed4e727e3af33bc7f948aac01782110eb9a18b3b329c5323bcdd3acdaae547ee077d3951317e7f133bff7105264b3003d + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 10c0/228cfa503fadc2c31596ab06ed6aa82c9976eec2bfd83397e7eaf06d0ccf42cd1dfd6743bf9aeb01aebd4156d009994c5f76ea898d2832c1fe342da923ca457d + languageName: node + linkType: hard + +"isexe@npm:^3.1.1": + version: 3.1.1 + resolution: "isexe@npm:3.1.1" + checksum: 10c0/9ec257654093443eb0a528a9c8cbba9c0ca7616ccb40abd6dde7202734d96bb86e4ac0d764f0f8cd965856aacbff2f4ce23e730dc19dfb41e3b0d865ca6fdcc7 + languageName: node + linkType: hard + +"isobject@npm:^3.0.1": + version: 3.0.1 + resolution: "isobject@npm:3.0.1" + checksum: 10c0/03344f5064a82f099a0cd1a8a407f4c0d20b7b8485e8e816c39f249e9416b06c322e8dec5b842b6bb8a06de0af9cb48e7bc1b5352f0fadc2f0abac033db3d4db + languageName: node + linkType: hard + +"jackspeak@npm:^3.1.2": + version: 3.4.3 + resolution: "jackspeak@npm:3.4.3" + dependencies: + "@isaacs/cliui": "npm:^8.0.2" + "@pkgjs/parseargs": "npm:^0.11.0" + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 10c0/6acc10d139eaefdbe04d2f679e6191b3abf073f111edf10b1de5302c97ec93fffeb2fdd8681ed17f16268aa9dd4f8c588ed9d1d3bffbbfa6e8bf897cbb3149b9 + languageName: node + linkType: hard + +"jest-util@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-util@npm:29.7.0" + dependencies: + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + chalk: "npm:^4.0.0" + ci-info: "npm:^3.2.0" + graceful-fs: "npm:^4.2.9" + picomatch: "npm:^2.2.3" + checksum: 10c0/bc55a8f49fdbb8f51baf31d2a4f312fb66c9db1483b82f602c9c990e659cdd7ec529c8e916d5a89452ecbcfae4949b21b40a7a59d4ffc0cd813a973ab08c8150 + languageName: node + linkType: hard + +"jest-worker@npm:^27.4.5": + version: 27.5.1 + resolution: "jest-worker@npm:27.5.1" + dependencies: + "@types/node": "npm:*" + merge-stream: "npm:^2.0.0" + supports-color: "npm:^8.0.0" + checksum: 10c0/8c4737ffd03887b3c6768e4cc3ca0269c0336c1e4b1b120943958ddb035ed2a0fc6acab6dc99631720a3720af4e708ff84fb45382ad1e83c27946adf3623969b + languageName: node + linkType: hard + +"jest-worker@npm:^29.4.3": + version: 29.7.0 + resolution: "jest-worker@npm:29.7.0" + dependencies: + "@types/node": "npm:*" + jest-util: "npm:^29.7.0" + merge-stream: "npm:^2.0.0" + supports-color: "npm:^8.0.0" + checksum: 10c0/5570a3a005b16f46c131968b8a5b56d291f9bbb85ff4217e31c80bd8a02e7de799e59a54b95ca28d5c302f248b54cbffde2d177c2f0f52ffcee7504c6eabf660 + languageName: node + linkType: hard + +"jiti@npm:^1.20.0": + version: 1.21.7 + resolution: "jiti@npm:1.21.7" + bin: + jiti: bin/jiti.js + checksum: 10c0/77b61989c758ff32407cdae8ddc77f85e18e1a13fc4977110dbd2e05fc761842f5f71bce684d9a01316e1c4263971315a111385759951080bbfe17cbb5de8f7a + languageName: node + linkType: hard + +"joi@npm:^17.9.2": + version: 17.13.3 + resolution: "joi@npm:17.13.3" + dependencies: + "@hapi/hoek": "npm:^9.3.0" + "@hapi/topo": "npm:^5.1.0" + "@sideway/address": "npm:^4.1.5" + "@sideway/formula": "npm:^3.0.1" + "@sideway/pinpoint": "npm:^2.0.0" + checksum: 10c0/9262aef1da3f1bec5b03caf50c46368899fe03b8ff26cbe3d53af4584dd1049079fc97230bbf1500b6149db7cc765b9ee45f0deb24bb6fc3fa06229d7148c17f + languageName: node + linkType: hard + +"js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": + version: 4.0.0 + resolution: "js-tokens@npm:4.0.0" + checksum: 10c0/e248708d377aa058eacf2037b07ded847790e6de892bbad3dac0abba2e759cb9f121b00099a65195616badcb6eca8d14d975cb3e89eb1cfda644756402c8aeed + languageName: node + linkType: hard + +"js-yaml@npm:^3.13.1": + version: 3.14.1 + resolution: "js-yaml@npm:3.14.1" + dependencies: + argparse: "npm:^1.0.7" + esprima: "npm:^4.0.0" + bin: + js-yaml: bin/js-yaml.js + checksum: 10c0/6746baaaeac312c4db8e75fa22331d9a04cccb7792d126ed8ce6a0bbcfef0cedaddd0c5098fade53db067c09fe00aa1c957674b4765610a8b06a5a189e46433b + languageName: node + linkType: hard + +"js-yaml@npm:^4.1.0": + version: 4.1.0 + resolution: "js-yaml@npm:4.1.0" + dependencies: + argparse: "npm:^2.0.1" + bin: + js-yaml: bin/js-yaml.js + checksum: 10c0/184a24b4eaacfce40ad9074c64fd42ac83cf74d8c8cd137718d456ced75051229e5061b8633c3366b8aada17945a7a356b337828c19da92b51ae62126575018f + languageName: node + linkType: hard + +"jsbn@npm:1.1.0": + version: 1.1.0 + resolution: "jsbn@npm:1.1.0" + checksum: 10c0/4f907fb78d7b712e11dea8c165fe0921f81a657d3443dde75359ed52eb2b5d33ce6773d97985a089f09a65edd80b11cb75c767b57ba47391fee4c969f7215c96 + languageName: node + linkType: hard + +"jsesc@npm:^3.0.2": + version: 3.1.0 + resolution: "jsesc@npm:3.1.0" + bin: + jsesc: bin/jsesc + checksum: 10c0/531779df5ec94f47e462da26b4cbf05eb88a83d9f08aac2ba04206508fc598527a153d08bd462bae82fc78b3eaa1a908e1a4a79f886e9238641c4cdefaf118b1 + languageName: node + linkType: hard + +"jsesc@npm:~3.0.2": + version: 3.0.2 + resolution: "jsesc@npm:3.0.2" + bin: + jsesc: bin/jsesc + checksum: 10c0/ef22148f9e793180b14d8a145ee6f9f60f301abf443288117b4b6c53d0ecd58354898dc506ccbb553a5f7827965cd38bc5fb726575aae93c5e8915e2de8290e1 + languageName: node + linkType: hard + +"json-buffer@npm:3.0.1": + version: 3.0.1 + resolution: "json-buffer@npm:3.0.1" + checksum: 10c0/0d1c91569d9588e7eef2b49b59851f297f3ab93c7b35c7c221e288099322be6b562767d11e4821da500f3219542b9afd2e54c5dc573107c1126ed1080f8e96d7 + languageName: node + linkType: hard + +"json-parse-even-better-errors@npm:^2.3.0, json-parse-even-better-errors@npm:^2.3.1": + version: 2.3.1 + resolution: "json-parse-even-better-errors@npm:2.3.1" + checksum: 10c0/140932564c8f0b88455432e0f33c4cb4086b8868e37524e07e723f4eaedb9425bdc2bafd71bd1d9765bd15fd1e2d126972bc83990f55c467168c228c24d665f3 + languageName: node + linkType: hard + +"json-schema-traverse@npm:^0.4.1": + version: 0.4.1 + resolution: "json-schema-traverse@npm:0.4.1" + checksum: 10c0/108fa90d4cc6f08243aedc6da16c408daf81793bf903e9fd5ab21983cda433d5d2da49e40711da016289465ec2e62e0324dcdfbc06275a607fe3233fde4942ce + languageName: node + linkType: hard + +"json-schema-traverse@npm:^1.0.0": + version: 1.0.0 + resolution: "json-schema-traverse@npm:1.0.0" + checksum: 10c0/71e30015d7f3d6dc1c316d6298047c8ef98a06d31ad064919976583eb61e1018a60a0067338f0f79cabc00d84af3fcc489bd48ce8a46ea165d9541ba17fb30c6 + languageName: node + linkType: hard + +"json-stringify-safe@npm:^5.0.1": + version: 5.0.1 + resolution: "json-stringify-safe@npm:5.0.1" + checksum: 10c0/7dbf35cd0411d1d648dceb6d59ce5857ec939e52e4afc37601aa3da611f0987d5cee5b38d58329ceddf3ed48bd7215229c8d52059ab01f2444a338bf24ed0f37 + languageName: node + linkType: hard + +"json5@npm:^2.1.2, json5@npm:^2.2.3": + version: 2.2.3 + resolution: "json5@npm:2.2.3" + bin: + json5: lib/cli.js + checksum: 10c0/5a04eed94810fa55c5ea138b2f7a5c12b97c3750bc63d11e511dcecbfef758003861522a070c2272764ee0f4e3e323862f386945aeb5b85b87ee43f084ba586c + languageName: node + linkType: hard + +"jsonfile@npm:^6.0.1": + version: 6.1.0 + resolution: "jsonfile@npm:6.1.0" + dependencies: + graceful-fs: "npm:^4.1.6" + universalify: "npm:^2.0.0" + dependenciesMeta: + graceful-fs: + optional: true + checksum: 10c0/4f95b5e8a5622b1e9e8f33c96b7ef3158122f595998114d1e7f03985649ea99cb3cd99ce1ed1831ae94c8c8543ab45ebd044207612f31a56fd08462140e46865 + languageName: node + linkType: hard + +"katex@npm:^0.16.0": + version: 0.16.22 + resolution: "katex@npm:0.16.22" + dependencies: + commander: "npm:^8.3.0" + bin: + katex: cli.js + checksum: 10c0/07b8b1f07ae53171b5f1ea0cf6f18841d2055825c8b11cd81cfe039afcd3af2cfc84ad033531ee3875088329105195b039c267e0dd4b0c237807e3c3b2009913 + languageName: node + linkType: hard + +"keyv@npm:^4.5.3": + version: 4.5.4 + resolution: "keyv@npm:4.5.4" + dependencies: + json-buffer: "npm:3.0.1" + checksum: 10c0/aa52f3c5e18e16bb6324876bb8b59dd02acf782a4b789c7b2ae21107fab95fab3890ed448d4f8dba80ce05391eeac4bfabb4f02a20221342982f806fa2cf271e + languageName: node + linkType: hard + +"kind-of@npm:^6.0.0, kind-of@npm:^6.0.2": + version: 6.0.3 + resolution: "kind-of@npm:6.0.3" + checksum: 10c0/61cdff9623dabf3568b6445e93e31376bee1cdb93f8ba7033d86022c2a9b1791a1d9510e026e6465ebd701a6dd2f7b0808483ad8838341ac52f003f512e0b4c4 + languageName: node + linkType: hard + +"kleur@npm:^3.0.3": + version: 3.0.3 + resolution: "kleur@npm:3.0.3" + checksum: 10c0/cd3a0b8878e7d6d3799e54340efe3591ca787d9f95f109f28129bdd2915e37807bf8918bb295ab86afb8c82196beec5a1adcaf29042ce3f2bd932b038fe3aa4b + languageName: node + linkType: hard + +"latest-version@npm:^7.0.0": + version: 7.0.0 + resolution: "latest-version@npm:7.0.0" + dependencies: + package-json: "npm:^8.1.0" + checksum: 10c0/68045f5e419e005c12e595ae19687dd88317dd0108b83a8773197876622c7e9d164fe43aacca4f434b2cba105c92848b89277f658eabc5d50e81fb743bbcddb1 + languageName: node + linkType: hard + +"launch-editor@npm:^2.6.0": + version: 2.10.0 + resolution: "launch-editor@npm:2.10.0" + dependencies: + picocolors: "npm:^1.0.0" + shell-quote: "npm:^1.8.1" + checksum: 10c0/8b5a26be6b0da1da039ed2254b837dea0651a6406ea4dc4c9a5b28ea72862f1b12880135c495baf9d8a08997473b44034172506781744cf82e155451a40b7d51 + languageName: node + linkType: hard + +"leven@npm:^3.1.0": + version: 3.1.0 + resolution: "leven@npm:3.1.0" + checksum: 10c0/cd778ba3fbab0f4d0500b7e87d1f6e1f041507c56fdcd47e8256a3012c98aaee371d4c15e0a76e0386107af2d42e2b7466160a2d80688aaa03e66e49949f42df + languageName: node + linkType: hard + +"lilconfig@npm:^3.1.1": + version: 3.1.3 + resolution: "lilconfig@npm:3.1.3" + checksum: 10c0/f5604e7240c5c275743561442fbc5abf2a84ad94da0f5adc71d25e31fa8483048de3dcedcb7a44112a942fed305fd75841cdf6c9681c7f640c63f1049e9a5dcc + languageName: node + linkType: hard + +"lines-and-columns@npm:^1.1.6": + version: 1.2.4 + resolution: "lines-and-columns@npm:1.2.4" + checksum: 10c0/3da6ee62d4cd9f03f5dc90b4df2540fb85b352081bee77fe4bbcd12c9000ead7f35e0a38b8d09a9bb99b13223446dd8689ff3c4959807620726d788701a83d2d + languageName: node + linkType: hard + +"loader-runner@npm:^4.2.0": + version: 4.3.0 + resolution: "loader-runner@npm:4.3.0" + checksum: 10c0/a44d78aae0907a72f73966fe8b82d1439c8c485238bd5a864b1b9a2a3257832effa858790241e6b37876b5446a78889adf2fcc8dd897ce54c089ecc0a0ce0bf0 + languageName: node + linkType: hard + +"loader-utils@npm:^2.0.0": + version: 2.0.4 + resolution: "loader-utils@npm:2.0.4" + dependencies: + big.js: "npm:^5.2.2" + emojis-list: "npm:^3.0.0" + json5: "npm:^2.1.2" + checksum: 10c0/d5654a77f9d339ec2a03d88221a5a695f337bf71eb8dea031b3223420bb818964ba8ed0069145c19b095f6c8b8fd386e602a3fc7ca987042bd8bb1dcc90d7100 + languageName: node + linkType: hard + +"loader-utils@npm:^3.2.0": + version: 3.3.1 + resolution: "loader-utils@npm:3.3.1" + checksum: 10c0/f2af4eb185ac5bf7e56e1337b666f90744e9f443861ac521b48f093fb9e8347f191c8960b4388a3365147d218913bc23421234e7788db69f385bacfefa0b4758 + languageName: node + linkType: hard + +"locate-path@npm:^3.0.0": + version: 3.0.0 + resolution: "locate-path@npm:3.0.0" + dependencies: + p-locate: "npm:^3.0.0" + path-exists: "npm:^3.0.0" + checksum: 10c0/3db394b7829a7fe2f4fbdd25d3c4689b85f003c318c5da4052c7e56eed697da8f1bce5294f685c69ff76e32cba7a33629d94396976f6d05fb7f4c755c5e2ae8b + languageName: node + linkType: hard + +"locate-path@npm:^6.0.0": + version: 6.0.0 + resolution: "locate-path@npm:6.0.0" + dependencies: + p-locate: "npm:^5.0.0" + checksum: 10c0/d3972ab70dfe58ce620e64265f90162d247e87159b6126b01314dd67be43d50e96a50b517bce2d9452a79409c7614054c277b5232377de50416564a77ac7aad3 + languageName: node + linkType: hard + +"locate-path@npm:^7.1.0": + version: 7.2.0 + resolution: "locate-path@npm:7.2.0" + dependencies: + p-locate: "npm:^6.0.0" + checksum: 10c0/139e8a7fe11cfbd7f20db03923cacfa5db9e14fa14887ea121345597472b4a63c1a42a8a5187defeeff6acf98fd568da7382aa39682d38f0af27433953a97751 + languageName: node + linkType: hard + +"lodash.debounce@npm:^4.0.8": + version: 4.0.8 + resolution: "lodash.debounce@npm:4.0.8" + checksum: 10c0/762998a63e095412b6099b8290903e0a8ddcb353ac6e2e0f2d7e7d03abd4275fe3c689d88960eb90b0dde4f177554d51a690f22a343932ecbc50a5d111849987 + languageName: node + linkType: hard + +"lodash.memoize@npm:^4.1.2": + version: 4.1.2 + resolution: "lodash.memoize@npm:4.1.2" + checksum: 10c0/c8713e51eccc650422716a14cece1809cfe34bc5ab5e242b7f8b4e2241c2483697b971a604252807689b9dd69bfe3a98852e19a5b89d506b000b4187a1285df8 + languageName: node + linkType: hard + +"lodash.uniq@npm:^4.5.0": + version: 4.5.0 + resolution: "lodash.uniq@npm:4.5.0" + checksum: 10c0/262d400bb0952f112162a320cc4a75dea4f66078b9e7e3075ffbc9c6aa30b3e9df3cf20e7da7d566105e1ccf7804e4fbd7d804eee0b53de05d83f16ffbf41c5e + languageName: node + linkType: hard + +"lodash@npm:^4.17.20, lodash@npm:^4.17.21": + version: 4.17.21 + resolution: "lodash@npm:4.17.21" + checksum: 10c0/d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c + languageName: node + linkType: hard + +"longest-streak@npm:^3.0.0": + version: 3.1.0 + resolution: "longest-streak@npm:3.1.0" + checksum: 10c0/7c2f02d0454b52834d1bcedef79c557bd295ee71fdabb02d041ff3aa9da48a90b5df7c0409156dedbc4df9b65da18742652aaea4759d6ece01f08971af6a7eaa + languageName: node + linkType: hard + +"loose-envify@npm:^1.0.0, loose-envify@npm:^1.1.0, loose-envify@npm:^1.2.0, loose-envify@npm:^1.3.1, loose-envify@npm:^1.4.0": + version: 1.4.0 + resolution: "loose-envify@npm:1.4.0" + dependencies: + js-tokens: "npm:^3.0.0 || ^4.0.0" + bin: + loose-envify: cli.js + checksum: 10c0/655d110220983c1a4b9c0c679a2e8016d4b67f6e9c7b5435ff5979ecdb20d0813f4dec0a08674fcbdd4846a3f07edbb50a36811fd37930b94aaa0d9daceb017e + languageName: node + linkType: hard + +"lower-case@npm:^2.0.2": + version: 2.0.2 + resolution: "lower-case@npm:2.0.2" + dependencies: + tslib: "npm:^2.0.3" + checksum: 10c0/3d925e090315cf7dc1caa358e0477e186ffa23947740e4314a7429b6e62d72742e0bbe7536a5ae56d19d7618ce998aba05caca53c2902bd5742fdca5fc57fd7b + languageName: node + linkType: hard + +"lowercase-keys@npm:^3.0.0": + version: 3.0.0 + resolution: "lowercase-keys@npm:3.0.0" + checksum: 10c0/ef62b9fa5690ab0a6e4ef40c94efce68e3ed124f583cc3be38b26ff871da0178a28b9a84ce0c209653bb25ca135520ab87fea7cd411a54ac4899cb2f30501430 + languageName: node + linkType: hard + +"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": + version: 10.4.3 + resolution: "lru-cache@npm:10.4.3" + checksum: 10c0/ebd04fbca961e6c1d6c0af3799adcc966a1babe798f685bb84e6599266599cd95d94630b10262f5424539bc4640107e8a33aa28585374abf561d30d16f4b39fb + languageName: node + linkType: hard + +"lru-cache@npm:^5.1.1": + version: 5.1.1 + resolution: "lru-cache@npm:5.1.1" + dependencies: + yallist: "npm:^3.0.2" + checksum: 10c0/89b2ef2ef45f543011e38737b8a8622a2f8998cddf0e5437174ef8f1f70a8b9d14a918ab3e232cb3ba343b7abddffa667f0b59075b2b80e6b4d63c3de6127482 + languageName: node + linkType: hard + +"make-fetch-happen@npm:^14.0.3": + version: 14.0.3 + resolution: "make-fetch-happen@npm:14.0.3" + dependencies: + "@npmcli/agent": "npm:^3.0.0" + cacache: "npm:^19.0.1" + http-cache-semantics: "npm:^4.1.1" + minipass: "npm:^7.0.2" + minipass-fetch: "npm:^4.0.0" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + negotiator: "npm:^1.0.0" + proc-log: "npm:^5.0.0" + promise-retry: "npm:^2.0.1" + ssri: "npm:^12.0.0" + checksum: 10c0/c40efb5e5296e7feb8e37155bde8eb70bc57d731b1f7d90e35a092fde403d7697c56fb49334d92d330d6f1ca29a98142036d6480a12681133a0a1453164cb2f0 + languageName: node + linkType: hard + +"markdown-extensions@npm:^2.0.0": + version: 2.0.0 + resolution: "markdown-extensions@npm:2.0.0" + checksum: 10c0/406139da2aa0d5ebad86195c8e8c02412f873c452b4c087ae7bc767af37956141be449998223bb379eea179b5fd38dfa610602b6f29c22ddab5d51e627a7e41d + languageName: node + linkType: hard + +"markdown-table@npm:^2.0.0": + version: 2.0.0 + resolution: "markdown-table@npm:2.0.0" + dependencies: + repeat-string: "npm:^1.0.0" + checksum: 10c0/f257e0781ea50eb946919df84bdee4ba61f983971b277a369ca7276f89740fd0e2749b9b187163a42df4c48682b71962d4007215ce3523480028f06c11ddc2e6 + languageName: node + linkType: hard + +"markdown-table@npm:^3.0.0": + version: 3.0.4 + resolution: "markdown-table@npm:3.0.4" + checksum: 10c0/1257b31827629a54c24a5030a3dac952256c559174c95ce3ef89bebd6bff0cb1444b1fd667b1a1bb53307f83278111505b3e26f0c4e7b731e0060d435d2d930b + languageName: node + linkType: hard + +"math-intrinsics@npm:^1.1.0": + version: 1.1.0 + resolution: "math-intrinsics@npm:1.1.0" + checksum: 10c0/7579ff94e899e2f76ab64491d76cf606274c874d8f2af4a442c016bd85688927fcfca157ba6bf74b08e9439dc010b248ce05b96cc7c126a354c3bae7fcb48b7f + languageName: node + linkType: hard + +"mdast-util-definition-list@npm:^2.0.0": + version: 2.0.0 + resolution: "mdast-util-definition-list@npm:2.0.0" + dependencies: + "@types/mdast": "npm:^4.0.1" + "@types/unist": "npm:^3.0.0" + mdast-util-from-markdown: "npm:^2.0.0" + mdast-util-to-hast: "npm:^13.0.2" + mdast-util-to-markdown: "npm:^2.1.0" + micromark-extension-definition-list: "npm:^2.0.0" + unist-builder: "npm:^4.0.0" + checksum: 10c0/ece475bd485598b8a2c4fd24ef26832abebd8cc081dab099db857a7010fac75eb74543507ec5af7d99207626378d9be8631b3144842a3b8724e45b2bfc20b18e + languageName: node + linkType: hard + +"mdast-util-directive@npm:^3.0.0": + version: 3.1.0 + resolution: "mdast-util-directive@npm:3.1.0" + dependencies: + "@types/mdast": "npm:^4.0.0" + "@types/unist": "npm:^3.0.0" + ccount: "npm:^2.0.0" + devlop: "npm:^1.0.0" + mdast-util-from-markdown: "npm:^2.0.0" + mdast-util-to-markdown: "npm:^2.0.0" + parse-entities: "npm:^4.0.0" + stringify-entities: "npm:^4.0.0" + unist-util-visit-parents: "npm:^6.0.0" + checksum: 10c0/596b093b940197cf43af4d0de12e82a1d2b1eb5add73dd16077aa80e0d0e1f208ea642c420726e59ccd352c193d6ecd5c106d6fab769f252617c75333f91a314 + languageName: node + linkType: hard + +"mdast-util-find-and-replace@npm:^3.0.0, mdast-util-find-and-replace@npm:^3.0.1": + version: 3.0.2 + resolution: "mdast-util-find-and-replace@npm:3.0.2" + dependencies: + "@types/mdast": "npm:^4.0.0" + escape-string-regexp: "npm:^5.0.0" + unist-util-is: "npm:^6.0.0" + unist-util-visit-parents: "npm:^6.0.0" + checksum: 10c0/c8417a35605d567772ff5c1aa08363ff3010b0d60c8ea68c53cba09bf25492e3dd261560425c1756535f3b7107f62e7ff3857cdd8fb1e62d1b2cc2ea6e074ca2 + languageName: node + linkType: hard + +"mdast-util-from-markdown@npm:^2.0.0": + version: 2.0.2 + resolution: "mdast-util-from-markdown@npm:2.0.2" + dependencies: + "@types/mdast": "npm:^4.0.0" + "@types/unist": "npm:^3.0.0" + decode-named-character-reference: "npm:^1.0.0" + devlop: "npm:^1.0.0" + mdast-util-to-string: "npm:^4.0.0" + micromark: "npm:^4.0.0" + micromark-util-decode-numeric-character-reference: "npm:^2.0.0" + micromark-util-decode-string: "npm:^2.0.0" + micromark-util-normalize-identifier: "npm:^2.0.0" + micromark-util-symbol: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + unist-util-stringify-position: "npm:^4.0.0" + checksum: 10c0/76eb2bd2c6f7a0318087c73376b8af6d7561c1e16654e7667e640f391341096c56142618fd0ff62f6d39e5ab4895898b9789c84cd7cec2874359a437a0e1ff15 + languageName: node + linkType: hard + +"mdast-util-frontmatter@npm:^2.0.0": + version: 2.0.1 + resolution: "mdast-util-frontmatter@npm:2.0.1" + dependencies: + "@types/mdast": "npm:^4.0.0" + devlop: "npm:^1.0.0" + escape-string-regexp: "npm:^5.0.0" + mdast-util-from-markdown: "npm:^2.0.0" + mdast-util-to-markdown: "npm:^2.0.0" + micromark-extension-frontmatter: "npm:^2.0.0" + checksum: 10c0/d9b0b70dd9c574cc0220d4e05dd8e9d86ac972a6a5af9e0c49c839b31cb750d4313445cfbbdf9264a7fbe3f8c8d920b45358b8500f4286e6b9dc830095b25b9a + languageName: node + linkType: hard + +"mdast-util-gfm-autolink-literal@npm:^2.0.0": + version: 2.0.1 + resolution: "mdast-util-gfm-autolink-literal@npm:2.0.1" + dependencies: + "@types/mdast": "npm:^4.0.0" + ccount: "npm:^2.0.0" + devlop: "npm:^1.0.0" + mdast-util-find-and-replace: "npm:^3.0.0" + micromark-util-character: "npm:^2.0.0" + checksum: 10c0/963cd22bd42aebdec7bdd0a527c9494d024d1ad0739c43dc040fee35bdfb5e29c22564330a7418a72b5eab51d47a6eff32bc0255ef3ccb5cebfe8970e91b81b6 + languageName: node + linkType: hard + +"mdast-util-gfm-footnote@npm:^2.0.0": + version: 2.1.0 + resolution: "mdast-util-gfm-footnote@npm:2.1.0" + dependencies: + "@types/mdast": "npm:^4.0.0" + devlop: "npm:^1.1.0" + mdast-util-from-markdown: "npm:^2.0.0" + mdast-util-to-markdown: "npm:^2.0.0" + micromark-util-normalize-identifier: "npm:^2.0.0" + checksum: 10c0/8ab965ee6be3670d76ec0e95b2ba3101fc7444eec47564943ab483d96ac17d29da2a4e6146a2a288be30c21b48c4f3938a1e54b9a46fbdd321d49a5bc0077ed0 + languageName: node + linkType: hard + +"mdast-util-gfm-strikethrough@npm:^2.0.0": + version: 2.0.0 + resolution: "mdast-util-gfm-strikethrough@npm:2.0.0" + dependencies: + "@types/mdast": "npm:^4.0.0" + mdast-util-from-markdown: "npm:^2.0.0" + mdast-util-to-markdown: "npm:^2.0.0" + checksum: 10c0/b053e93d62c7545019bd914271ea9e5667ad3b3b57d16dbf68e56fea39a7e19b4a345e781312714eb3d43fdd069ff7ee22a3ca7f6149dfa774554f19ce3ac056 + languageName: node + linkType: hard + +"mdast-util-gfm-table@npm:^2.0.0": + version: 2.0.0 + resolution: "mdast-util-gfm-table@npm:2.0.0" + dependencies: + "@types/mdast": "npm:^4.0.0" + devlop: "npm:^1.0.0" + markdown-table: "npm:^3.0.0" + mdast-util-from-markdown: "npm:^2.0.0" + mdast-util-to-markdown: "npm:^2.0.0" + checksum: 10c0/128af47c503a53bd1c79f20642561e54a510ad5e2db1e418d28fefaf1294ab839e6c838e341aef5d7e404f9170b9ca3d1d89605f234efafde93ee51174a6e31e + languageName: node + linkType: hard + +"mdast-util-gfm-task-list-item@npm:^2.0.0": + version: 2.0.0 + resolution: "mdast-util-gfm-task-list-item@npm:2.0.0" + dependencies: + "@types/mdast": "npm:^4.0.0" + devlop: "npm:^1.0.0" + mdast-util-from-markdown: "npm:^2.0.0" + mdast-util-to-markdown: "npm:^2.0.0" + checksum: 10c0/258d725288482b636c0a376c296431390c14b4f29588675297cb6580a8598ed311fc73ebc312acfca12cc8546f07a3a285a53a3b082712e2cbf5c190d677d834 + languageName: node + linkType: hard + +"mdast-util-gfm@npm:^3.0.0": + version: 3.1.0 + resolution: "mdast-util-gfm@npm:3.1.0" + dependencies: + mdast-util-from-markdown: "npm:^2.0.0" + mdast-util-gfm-autolink-literal: "npm:^2.0.0" + mdast-util-gfm-footnote: "npm:^2.0.0" + mdast-util-gfm-strikethrough: "npm:^2.0.0" + mdast-util-gfm-table: "npm:^2.0.0" + mdast-util-gfm-task-list-item: "npm:^2.0.0" + mdast-util-to-markdown: "npm:^2.0.0" + checksum: 10c0/4bedcfb6a20e39901c8772f0d2bb2d7a64ae87a54c13cbd92eec062cf470fbb68c2ad754e149af5b30794e2de61c978ab1de1ace03c0c40f443ca9b9b8044f81 + languageName: node + linkType: hard + +"mdast-util-math@npm:^3.0.0": + version: 3.0.0 + resolution: "mdast-util-math@npm:3.0.0" + dependencies: + "@types/hast": "npm:^3.0.0" + "@types/mdast": "npm:^4.0.0" + devlop: "npm:^1.0.0" + longest-streak: "npm:^3.0.0" + mdast-util-from-markdown: "npm:^2.0.0" + mdast-util-to-markdown: "npm:^2.1.0" + unist-util-remove-position: "npm:^5.0.0" + checksum: 10c0/d4e839e38719f26872ed78aac18339805a892f1b56585a9cb8668f34e221b4f0660b9dfe49ec96dbbe79fd1b63b648608a64046d8286bcd2f9d576e80b48a0a1 + languageName: node + linkType: hard + +"mdast-util-mdx-expression@npm:^2.0.0": + version: 2.0.1 + resolution: "mdast-util-mdx-expression@npm:2.0.1" + dependencies: + "@types/estree-jsx": "npm:^1.0.0" + "@types/hast": "npm:^3.0.0" + "@types/mdast": "npm:^4.0.0" + devlop: "npm:^1.0.0" + mdast-util-from-markdown: "npm:^2.0.0" + mdast-util-to-markdown: "npm:^2.0.0" + checksum: 10c0/9a1e57940f66431f10312fa239096efa7627f375e7933b5d3162c0b5c1712a72ac87447aff2b6838d2bbd5c1311b188718cc90b33b67dc67a88550e0a6ef6183 + languageName: node + linkType: hard + +"mdast-util-mdx-jsx@npm:^3.0.0": + version: 3.2.0 + resolution: "mdast-util-mdx-jsx@npm:3.2.0" + dependencies: + "@types/estree-jsx": "npm:^1.0.0" + "@types/hast": "npm:^3.0.0" + "@types/mdast": "npm:^4.0.0" + "@types/unist": "npm:^3.0.0" + ccount: "npm:^2.0.0" + devlop: "npm:^1.1.0" + mdast-util-from-markdown: "npm:^2.0.0" + mdast-util-to-markdown: "npm:^2.0.0" + parse-entities: "npm:^4.0.0" + stringify-entities: "npm:^4.0.0" + unist-util-stringify-position: "npm:^4.0.0" + vfile-message: "npm:^4.0.0" + checksum: 10c0/3acadaf3b962254f7ad2990fed4729961dc0217ca31fde9917986e880843f3ecf3392b1f22d569235cacd180d50894ad266db7af598aedca69d330d33c7ac613 + languageName: node + linkType: hard + +"mdast-util-mdx@npm:^3.0.0": + version: 3.0.0 + resolution: "mdast-util-mdx@npm:3.0.0" + dependencies: + mdast-util-from-markdown: "npm:^2.0.0" + mdast-util-mdx-expression: "npm:^2.0.0" + mdast-util-mdx-jsx: "npm:^3.0.0" + mdast-util-mdxjs-esm: "npm:^2.0.0" + mdast-util-to-markdown: "npm:^2.0.0" + checksum: 10c0/4faea13f77d6bc9aa64ee41a5e4779110b73444a17fda363df6ebe880ecfa58b321155b71f8801c3faa6d70d6222a32a00cbd6dbf5fad8db417f4688bc9c74e1 + languageName: node + linkType: hard + +"mdast-util-mdxjs-esm@npm:^2.0.0": + version: 2.0.1 + resolution: "mdast-util-mdxjs-esm@npm:2.0.1" + dependencies: + "@types/estree-jsx": "npm:^1.0.0" + "@types/hast": "npm:^3.0.0" + "@types/mdast": "npm:^4.0.0" + devlop: "npm:^1.0.0" + mdast-util-from-markdown: "npm:^2.0.0" + mdast-util-to-markdown: "npm:^2.0.0" + checksum: 10c0/5bda92fc154141705af2b804a534d891f28dac6273186edf1a4c5e3f045d5b01dbcac7400d27aaf91b7e76e8dce007c7b2fdf136c11ea78206ad00bdf9db46bc + languageName: node + linkType: hard + +"mdast-util-phrasing@npm:^4.0.0, mdast-util-phrasing@npm:^4.1.0": + version: 4.1.0 + resolution: "mdast-util-phrasing@npm:4.1.0" + dependencies: + "@types/mdast": "npm:^4.0.0" + unist-util-is: "npm:^6.0.0" + checksum: 10c0/bf6c31d51349aa3d74603d5e5a312f59f3f65662ed16c58017169a5fb0f84ca98578f626c5ee9e4aa3e0a81c996db8717096705521bddb4a0185f98c12c9b42f + languageName: node + linkType: hard + +"mdast-util-to-hast@npm:^13.0.0, mdast-util-to-hast@npm:^13.0.2": + version: 13.2.0 + resolution: "mdast-util-to-hast@npm:13.2.0" + dependencies: + "@types/hast": "npm:^3.0.0" + "@types/mdast": "npm:^4.0.0" + "@ungap/structured-clone": "npm:^1.0.0" + devlop: "npm:^1.0.0" + micromark-util-sanitize-uri: "npm:^2.0.0" + trim-lines: "npm:^3.0.0" + unist-util-position: "npm:^5.0.0" + unist-util-visit: "npm:^5.0.0" + vfile: "npm:^6.0.0" + checksum: 10c0/9ee58def9287df8350cbb6f83ced90f9c088d72d4153780ad37854f87144cadc6f27b20347073b285173b1649b0723ddf0b9c78158608a804dcacb6bda6e1816 + languageName: node + linkType: hard + +"mdast-util-to-markdown@npm:^2.0.0, mdast-util-to-markdown@npm:^2.1.0": + version: 2.1.2 + resolution: "mdast-util-to-markdown@npm:2.1.2" + dependencies: + "@types/mdast": "npm:^4.0.0" + "@types/unist": "npm:^3.0.0" + longest-streak: "npm:^3.0.0" + mdast-util-phrasing: "npm:^4.0.0" + mdast-util-to-string: "npm:^4.0.0" + micromark-util-classify-character: "npm:^2.0.0" + micromark-util-decode-string: "npm:^2.0.0" + unist-util-visit: "npm:^5.0.0" + zwitch: "npm:^2.0.0" + checksum: 10c0/4649722a6099f12e797bd8d6469b2b43b44e526b5182862d9c7766a3431caad2c0112929c538a972f214e63c015395e5d3f54bd81d9ac1b16e6d8baaf582f749 + languageName: node + linkType: hard + +"mdast-util-to-string@npm:^4.0.0": + version: 4.0.0 + resolution: "mdast-util-to-string@npm:4.0.0" + dependencies: + "@types/mdast": "npm:^4.0.0" + checksum: 10c0/2d3c1af29bf3fe9c20f552ee9685af308002488f3b04b12fa66652c9718f66f41a32f8362aa2d770c3ff464c034860b41715902ada2306bb0a055146cef064d7 + languageName: node + linkType: hard + +"mdn-data@npm:2.0.28": + version: 2.0.28 + resolution: "mdn-data@npm:2.0.28" + checksum: 10c0/20000932bc4cd1cde9cba4e23f08cc4f816398af4c15ec81040ed25421d6bf07b5cf6b17095972577fb498988f40f4cb589e3169b9357bb436a12d8e07e5ea7b + languageName: node + linkType: hard + +"mdn-data@npm:2.0.30": + version: 2.0.30 + resolution: "mdn-data@npm:2.0.30" + checksum: 10c0/a2c472ea16cee3911ae742593715aa4c634eb3d4b9f1e6ada0902aa90df13dcbb7285d19435f3ff213ebaa3b2e0c0265c1eb0e3fb278fda7f8919f046a410cd9 + languageName: node + linkType: hard + +"media-typer@npm:0.3.0": + version: 0.3.0 + resolution: "media-typer@npm:0.3.0" + checksum: 10c0/d160f31246907e79fed398470285f21bafb45a62869dc469b1c8877f3f064f5eabc4bcc122f9479b8b605bc5c76187d7871cf84c4ee3ecd3e487da1993279928 + languageName: node + linkType: hard + +"memfs@npm:^3.1.2, memfs@npm:^3.4.3": + version: 3.6.0 + resolution: "memfs@npm:3.6.0" + dependencies: + fs-monkey: "npm:^1.0.4" + checksum: 10c0/af567f9038bbb5bbacf100b35d5839e90a89f882d191d8a1c7002faeb224c6cfcebd0e97c0150e9af8be95ec7b5b75a52af56fcd109d0bc18807c1f4e004f053 + languageName: node + linkType: hard + +"merge-descriptors@npm:1.0.3": + version: 1.0.3 + resolution: "merge-descriptors@npm:1.0.3" + checksum: 10c0/866b7094afd9293b5ea5dcd82d71f80e51514bed33b4c4e9f516795dc366612a4cbb4dc94356e943a8a6914889a914530badff27f397191b9b75cda20b6bae93 + languageName: node + linkType: hard + +"merge-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "merge-stream@npm:2.0.0" + checksum: 10c0/867fdbb30a6d58b011449b8885601ec1690c3e41c759ecd5a9d609094f7aed0096c37823ff4a7190ef0b8f22cc86beb7049196ff68c016e3b3c671d0dac91ce5 + languageName: node + linkType: hard + +"merge2@npm:^1.3.0, merge2@npm:^1.4.1": + version: 1.4.1 + resolution: "merge2@npm:1.4.1" + checksum: 10c0/254a8a4605b58f450308fc474c82ac9a094848081bf4c06778200207820e5193726dc563a0d2c16468810516a5c97d9d3ea0ca6585d23c58ccfff2403e8dbbeb + languageName: node + linkType: hard + +"methods@npm:~1.1.2": + version: 1.1.2 + resolution: "methods@npm:1.1.2" + checksum: 10c0/bdf7cc72ff0a33e3eede03708c08983c4d7a173f91348b4b1e4f47d4cdbf734433ad971e7d1e8c77247d9e5cd8adb81ea4c67b0a2db526b758b2233d7814b8b2 + languageName: node + linkType: hard + +"micromark-core-commonmark@npm:^2.0.0": + version: 2.0.3 + resolution: "micromark-core-commonmark@npm:2.0.3" + dependencies: + decode-named-character-reference: "npm:^1.0.0" + devlop: "npm:^1.0.0" + micromark-factory-destination: "npm:^2.0.0" + micromark-factory-label: "npm:^2.0.0" + micromark-factory-space: "npm:^2.0.0" + micromark-factory-title: "npm:^2.0.0" + micromark-factory-whitespace: "npm:^2.0.0" + micromark-util-character: "npm:^2.0.0" + micromark-util-chunked: "npm:^2.0.0" + micromark-util-classify-character: "npm:^2.0.0" + micromark-util-html-tag-name: "npm:^2.0.0" + micromark-util-normalize-identifier: "npm:^2.0.0" + micromark-util-resolve-all: "npm:^2.0.0" + micromark-util-subtokenize: "npm:^2.0.0" + micromark-util-symbol: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + checksum: 10c0/bd4a794fdc9e88dbdf59eaf1c507ddf26e5f7ddf4e52566c72239c0f1b66adbcd219ba2cd42350debbe24471434d5f5e50099d2b3f4e5762ca222ba8e5b549ee + languageName: node + linkType: hard + +"micromark-extension-definition-list@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-extension-definition-list@npm:2.0.1" + dependencies: + micromark-core-commonmark: "npm:^2.0.0" + micromark-factory-space: "npm:^2.0.0" + micromark-util-character: "npm:^2.0.1" + micromark-util-chunked: "npm:^2.0.0" + micromark-util-symbol: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + ts-dedent: "npm:^2.2.0" + checksum: 10c0/0dc542965cf351712855c631ba415bf9c9fbd93fcdaaf5f13e3df88a1c584772bd0a7d8d14ae75680192ed465db96a015114ff43f56e16773e82f65a51a28f98 + languageName: node + linkType: hard + +"micromark-extension-directive@npm:^3.0.0": + version: 3.0.2 + resolution: "micromark-extension-directive@npm:3.0.2" + dependencies: + devlop: "npm:^1.0.0" + micromark-factory-space: "npm:^2.0.0" + micromark-factory-whitespace: "npm:^2.0.0" + micromark-util-character: "npm:^2.0.0" + micromark-util-symbol: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + parse-entities: "npm:^4.0.0" + checksum: 10c0/74137485375f02c1b640c2120dd6b9f6aa1e39ca5cd2463df7974ef1cc80203f5ef90448ce009973355a49ba169ef1441eabe57a36877c7b86373788612773da + languageName: node + linkType: hard + +"micromark-extension-frontmatter@npm:^2.0.0": + version: 2.0.0 + resolution: "micromark-extension-frontmatter@npm:2.0.0" + dependencies: + fault: "npm:^2.0.0" + micromark-util-character: "npm:^2.0.0" + micromark-util-symbol: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + checksum: 10c0/7d0d876e598917a67146d29f536d6fbbf9d1b2401a77e2f64a3f80f934a63ff26fa94b01759c9185c24b2a91e4e6abf908fa7aa246f00a7778a6b37a17464300 + languageName: node + linkType: hard + +"micromark-extension-gfm-autolink-literal@npm:^2.0.0": + version: 2.1.0 + resolution: "micromark-extension-gfm-autolink-literal@npm:2.1.0" + dependencies: + micromark-util-character: "npm:^2.0.0" + micromark-util-sanitize-uri: "npm:^2.0.0" + micromark-util-symbol: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + checksum: 10c0/84e6fbb84ea7c161dfa179665dc90d51116de4c28f3e958260c0423e5a745372b7dcbc87d3cde98213b532e6812f847eef5ae561c9397d7f7da1e59872ef3efe + languageName: node + linkType: hard + +"micromark-extension-gfm-footnote@npm:^2.0.0": + version: 2.1.0 + resolution: "micromark-extension-gfm-footnote@npm:2.1.0" + dependencies: + devlop: "npm:^1.0.0" + micromark-core-commonmark: "npm:^2.0.0" + micromark-factory-space: "npm:^2.0.0" + micromark-util-character: "npm:^2.0.0" + micromark-util-normalize-identifier: "npm:^2.0.0" + micromark-util-sanitize-uri: "npm:^2.0.0" + micromark-util-symbol: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + checksum: 10c0/d172e4218968b7371b9321af5cde8c77423f73b233b2b0fcf3ff6fd6f61d2e0d52c49123a9b7910612478bf1f0d5e88c75a3990dd68f70f3933fe812b9f77edc + languageName: node + linkType: hard + +"micromark-extension-gfm-strikethrough@npm:^2.0.0": + version: 2.1.0 + resolution: "micromark-extension-gfm-strikethrough@npm:2.1.0" + dependencies: + devlop: "npm:^1.0.0" + micromark-util-chunked: "npm:^2.0.0" + micromark-util-classify-character: "npm:^2.0.0" + micromark-util-resolve-all: "npm:^2.0.0" + micromark-util-symbol: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + checksum: 10c0/ef4f248b865bdda71303b494671b7487808a340b25552b11ca6814dff3fcfaab9be8d294643060bbdb50f79313e4a686ab18b99cbe4d3ee8a4170fcd134234fb + languageName: node + linkType: hard + +"micromark-extension-gfm-table@npm:^2.0.0": + version: 2.1.1 + resolution: "micromark-extension-gfm-table@npm:2.1.1" + dependencies: + devlop: "npm:^1.0.0" + micromark-factory-space: "npm:^2.0.0" + micromark-util-character: "npm:^2.0.0" + micromark-util-symbol: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + checksum: 10c0/04bc00e19b435fa0add62cd029d8b7eb6137522f77832186b1d5ef34544a9bd030c9cf85e92ddfcc5c31f6f0a58a43d4b96dba4fc21316037c734630ee12c912 + languageName: node + linkType: hard + +"micromark-extension-gfm-tagfilter@npm:^2.0.0": + version: 2.0.0 + resolution: "micromark-extension-gfm-tagfilter@npm:2.0.0" + dependencies: + micromark-util-types: "npm:^2.0.0" + checksum: 10c0/995558843fff137ae4e46aecb878d8a4691cdf23527dcf1e2f0157d66786be9f7bea0109c52a8ef70e68e3f930af811828ba912239438e31a9cfb9981f44d34d + languageName: node + linkType: hard + +"micromark-extension-gfm-task-list-item@npm:^2.0.0": + version: 2.1.0 + resolution: "micromark-extension-gfm-task-list-item@npm:2.1.0" + dependencies: + devlop: "npm:^1.0.0" + micromark-factory-space: "npm:^2.0.0" + micromark-util-character: "npm:^2.0.0" + micromark-util-symbol: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + checksum: 10c0/78aa537d929e9309f076ba41e5edc99f78d6decd754b6734519ccbbfca8abd52e1c62df68d41a6ae64d2a3fc1646cea955893c79680b0b4385ced4c52296181f + languageName: node + linkType: hard + +"micromark-extension-gfm@npm:^3.0.0": + version: 3.0.0 + resolution: "micromark-extension-gfm@npm:3.0.0" + dependencies: + micromark-extension-gfm-autolink-literal: "npm:^2.0.0" + micromark-extension-gfm-footnote: "npm:^2.0.0" + micromark-extension-gfm-strikethrough: "npm:^2.0.0" + micromark-extension-gfm-table: "npm:^2.0.0" + micromark-extension-gfm-tagfilter: "npm:^2.0.0" + micromark-extension-gfm-task-list-item: "npm:^2.0.0" + micromark-util-combine-extensions: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + checksum: 10c0/970e28df6ebdd7c7249f52a0dda56e0566fbfa9ae56c8eeeb2445d77b6b89d44096880cd57a1c01e7821b1f4e31009109fbaca4e89731bff7b83b8519690e5d9 + languageName: node + linkType: hard + +"micromark-extension-math@npm:^3.0.0": + version: 3.1.0 + resolution: "micromark-extension-math@npm:3.1.0" + dependencies: + "@types/katex": "npm:^0.16.0" + devlop: "npm:^1.0.0" + katex: "npm:^0.16.0" + micromark-factory-space: "npm:^2.0.0" + micromark-util-character: "npm:^2.0.0" + micromark-util-symbol: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + checksum: 10c0/56e6f2185a4613f9d47e7e98cf8605851c990957d9229c942b005e286c8087b61dc9149448d38b2f8be6d42cc6a64aad7e1f2778ddd86fbbb1a2f48a3ca1872f + languageName: node + linkType: hard + +"micromark-extension-mdx-expression@npm:^3.0.0": + version: 3.0.1 + resolution: "micromark-extension-mdx-expression@npm:3.0.1" + dependencies: + "@types/estree": "npm:^1.0.0" + devlop: "npm:^1.0.0" + micromark-factory-mdx-expression: "npm:^2.0.0" + micromark-factory-space: "npm:^2.0.0" + micromark-util-character: "npm:^2.0.0" + micromark-util-events-to-acorn: "npm:^2.0.0" + micromark-util-symbol: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + checksum: 10c0/4d8cc5353b083b06bd51c98389de9c198261a5b2b440b75e85000a18d10511f21ba77538d6dfde0e0589df9de3fba9a1d14c2448d30c92d6b461c26d86e397f4 + languageName: node + linkType: hard + +"micromark-extension-mdx-jsx@npm:^3.0.0": + version: 3.0.2 + resolution: "micromark-extension-mdx-jsx@npm:3.0.2" + dependencies: + "@types/estree": "npm:^1.0.0" + devlop: "npm:^1.0.0" + estree-util-is-identifier-name: "npm:^3.0.0" + micromark-factory-mdx-expression: "npm:^2.0.0" + micromark-factory-space: "npm:^2.0.0" + micromark-util-character: "npm:^2.0.0" + micromark-util-events-to-acorn: "npm:^2.0.0" + micromark-util-symbol: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + vfile-message: "npm:^4.0.0" + checksum: 10c0/5693b2e51934ac29a6aab521eaa2151f891d1fe092550bbd4ce24e4dd7567c1421a54f5e585a57dfa1769a79570f6df57ddd7a98bf0889dd11d495847a266dd7 + languageName: node + linkType: hard + +"micromark-extension-mdx-md@npm:^2.0.0": + version: 2.0.0 + resolution: "micromark-extension-mdx-md@npm:2.0.0" + dependencies: + micromark-util-types: "npm:^2.0.0" + checksum: 10c0/bae91c61273de0e5ba80a980c03470e6cd9d7924aa936f46fbda15d780704d9386e945b99eda200e087b96254fbb4271a9545d5ce02676cd6ae67886a8bf82df + languageName: node + linkType: hard + +"micromark-extension-mdxjs-esm@npm:^3.0.0": + version: 3.0.0 + resolution: "micromark-extension-mdxjs-esm@npm:3.0.0" + dependencies: + "@types/estree": "npm:^1.0.0" + devlop: "npm:^1.0.0" + micromark-core-commonmark: "npm:^2.0.0" + micromark-util-character: "npm:^2.0.0" + micromark-util-events-to-acorn: "npm:^2.0.0" + micromark-util-symbol: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + unist-util-position-from-estree: "npm:^2.0.0" + vfile-message: "npm:^4.0.0" + checksum: 10c0/13e3f726495a960650cdedcba39198ace5bdc953ccb12c14d71fc9ed9bb88e40cc3ba9231e973f6984da3b3573e7ddb23ce409f7c16f52a8d57b608bf46c748d + languageName: node + linkType: hard + +"micromark-extension-mdxjs@npm:^3.0.0": + version: 3.0.0 + resolution: "micromark-extension-mdxjs@npm:3.0.0" + dependencies: + acorn: "npm:^8.0.0" + acorn-jsx: "npm:^5.0.0" + micromark-extension-mdx-expression: "npm:^3.0.0" + micromark-extension-mdx-jsx: "npm:^3.0.0" + micromark-extension-mdx-md: "npm:^2.0.0" + micromark-extension-mdxjs-esm: "npm:^3.0.0" + micromark-util-combine-extensions: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + checksum: 10c0/fd84f036ddad0aabbc12e7f1b3e9dcfe31573bbc413c5ae903779ef0366d7a4c08193547e7ba75718c9f45654e45f52e575cfc2f23a5f89205a8a70d9a506aea + languageName: node + linkType: hard + +"micromark-factory-destination@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-factory-destination@npm:2.0.1" + dependencies: + micromark-util-character: "npm:^2.0.0" + micromark-util-symbol: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + checksum: 10c0/bbafcf869cee5bf511161354cb87d61c142592fbecea051000ff116068dc85216e6d48519d147890b9ea5d7e2864a6341c0c09d9948c203bff624a80a476023c + languageName: node + linkType: hard + +"micromark-factory-label@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-factory-label@npm:2.0.1" + dependencies: + devlop: "npm:^1.0.0" + micromark-util-character: "npm:^2.0.0" + micromark-util-symbol: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + checksum: 10c0/0137716b4ecb428114165505e94a2f18855c8bbea21b07a8b5ce514b32a595ed789d2b967125718fc44c4197ceaa48f6609d58807a68e778138d2e6b91b824e8 + languageName: node + linkType: hard + +"micromark-factory-mdx-expression@npm:^2.0.0": + version: 2.0.3 + resolution: "micromark-factory-mdx-expression@npm:2.0.3" + dependencies: + "@types/estree": "npm:^1.0.0" + devlop: "npm:^1.0.0" + micromark-factory-space: "npm:^2.0.0" + micromark-util-character: "npm:^2.0.0" + micromark-util-events-to-acorn: "npm:^2.0.0" + micromark-util-symbol: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + unist-util-position-from-estree: "npm:^2.0.0" + vfile-message: "npm:^4.0.0" + checksum: 10c0/a6004ef6272dd01a5d718f2affd7bfb5e08f0849340f5fd96ac823fbc5e9d3b3343acedda50805873ccda5e3b8af4d5fbb302abc874544044ac90c217345cf97 + languageName: node + linkType: hard + +"micromark-factory-space@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-factory-space@npm:1.1.0" + dependencies: + micromark-util-character: "npm:^1.0.0" + micromark-util-types: "npm:^1.0.0" + checksum: 10c0/3da81187ce003dd4178c7adc4674052fb8befc8f1a700ae4c8227755f38581a4ae963866dc4857488d62d1dc9837606c9f2f435fa1332f62a0f1c49b83c6a822 + languageName: node + linkType: hard + +"micromark-factory-space@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-factory-space@npm:2.0.1" + dependencies: + micromark-util-character: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + checksum: 10c0/f9ed43f1c0652d8d898de0ac2be3f77f776fffe7dd96bdbba1e02d7ce33d3853c6ff5daa52568fc4fa32cdf3a62d86b85ead9b9189f7211e1d69ff2163c450fb + languageName: node + linkType: hard + +"micromark-factory-title@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-factory-title@npm:2.0.1" + dependencies: + micromark-factory-space: "npm:^2.0.0" + micromark-util-character: "npm:^2.0.0" + micromark-util-symbol: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + checksum: 10c0/e72fad8d6e88823514916890099a5af20b6a9178ccf78e7e5e05f4de99bb8797acb756257d7a3a57a53854cb0086bf8aab15b1a9e9db8982500dd2c9ff5948b6 + languageName: node + linkType: hard + +"micromark-factory-whitespace@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-factory-whitespace@npm:2.0.1" + dependencies: + micromark-factory-space: "npm:^2.0.0" + micromark-util-character: "npm:^2.0.0" + micromark-util-symbol: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + checksum: 10c0/20a1ec58698f24b766510a309b23a10175034fcf1551eaa9da3adcbed3e00cd53d1ebe5f030cf873f76a1cec3c34eb8c50cc227be3344caa9ed25d56cf611224 + languageName: node + linkType: hard + +"micromark-util-character@npm:^1.0.0, micromark-util-character@npm:^1.1.0": + version: 1.2.0 + resolution: "micromark-util-character@npm:1.2.0" + dependencies: + micromark-util-symbol: "npm:^1.0.0" + micromark-util-types: "npm:^1.0.0" + checksum: 10c0/3390a675a50731b58a8e5493cd802e190427f10fa782079b455b00f6b54e406e36882df7d4a3bd32b709f7a2c3735b4912597ebc1c0a99566a8d8d0b816e2cd4 + languageName: node + linkType: hard + +"micromark-util-character@npm:^2.0.0, micromark-util-character@npm:^2.0.1": + version: 2.1.1 + resolution: "micromark-util-character@npm:2.1.1" + dependencies: + micromark-util-symbol: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + checksum: 10c0/d3fe7a5e2c4060fc2a076f9ce699c82a2e87190a3946e1e5eea77f563869b504961f5668d9c9c014724db28ac32fa909070ea8b30c3a39bd0483cc6c04cc76a1 + languageName: node + linkType: hard + +"micromark-util-chunked@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-util-chunked@npm:2.0.1" + dependencies: + micromark-util-symbol: "npm:^2.0.0" + checksum: 10c0/b68c0c16fe8106949537bdcfe1be9cf36c0ccd3bc54c4007003cb0984c3750b6cdd0fd77d03f269a3382b85b0de58bde4f6eedbe7ecdf7244759112289b1ab56 + languageName: node + linkType: hard + +"micromark-util-classify-character@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-util-classify-character@npm:2.0.1" + dependencies: + micromark-util-character: "npm:^2.0.0" + micromark-util-symbol: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + checksum: 10c0/8a02e59304005c475c332f581697e92e8c585bcd45d5d225a66c1c1b14ab5a8062705188c2ccec33cc998d33502514121478b2091feddbc751887fc9c290ed08 + languageName: node + linkType: hard + +"micromark-util-combine-extensions@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-util-combine-extensions@npm:2.0.1" + dependencies: + micromark-util-chunked: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + checksum: 10c0/f15e282af24c8372cbb10b9b0b3e2c0aa681fea0ca323a44d6bc537dc1d9382c819c3689f14eaa000118f5a163245358ce6276b2cda9a84439cdb221f5d86ae7 + languageName: node + linkType: hard + +"micromark-util-decode-numeric-character-reference@npm:^2.0.0": + version: 2.0.2 + resolution: "micromark-util-decode-numeric-character-reference@npm:2.0.2" + dependencies: + micromark-util-symbol: "npm:^2.0.0" + checksum: 10c0/9c8a9f2c790e5593ffe513901c3a110e9ec8882a08f466da014112a25e5059b51551ca0aeb7ff494657d86eceb2f02ee556c6558b8d66aadc61eae4a240da0df + languageName: node + linkType: hard + +"micromark-util-decode-string@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-util-decode-string@npm:2.0.1" + dependencies: + decode-named-character-reference: "npm:^1.0.0" + micromark-util-character: "npm:^2.0.0" + micromark-util-decode-numeric-character-reference: "npm:^2.0.0" + micromark-util-symbol: "npm:^2.0.0" + checksum: 10c0/f24d75b2e5310be6e7b6dee532e0d17d3bf46996841d6295f2a9c87a2046fff4ab603c52ab9d7a7a6430a8b787b1574ae895849c603d262d1b22eef71736b5cb + languageName: node + linkType: hard + +"micromark-util-encode@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-util-encode@npm:2.0.1" + checksum: 10c0/b2b29f901093845da8a1bf997ea8b7f5e061ffdba85070dfe14b0197c48fda64ffcf82bfe53c90cf9dc185e69eef8c5d41cae3ba918b96bc279326921b59008a + languageName: node + linkType: hard + +"micromark-util-events-to-acorn@npm:^2.0.0": + version: 2.0.3 + resolution: "micromark-util-events-to-acorn@npm:2.0.3" + dependencies: + "@types/estree": "npm:^1.0.0" + "@types/unist": "npm:^3.0.0" + devlop: "npm:^1.0.0" + estree-util-visit: "npm:^2.0.0" + micromark-util-symbol: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + vfile-message: "npm:^4.0.0" + checksum: 10c0/a4e0716e943ffdd16a918edf51d4f8291ec2692f5c4d04693dbef3358716fba891f288197afd102c14f4d98dac09d52351046ab7aad1d50b74677bdd5fa683c0 + languageName: node + linkType: hard + +"micromark-util-html-tag-name@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-util-html-tag-name@npm:2.0.1" + checksum: 10c0/ae80444db786fde908e9295f19a27a4aa304171852c77414516418650097b8afb401961c9edb09d677b06e97e8370cfa65638dde8438ebd41d60c0a8678b85b9 + languageName: node + linkType: hard + +"micromark-util-normalize-identifier@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-util-normalize-identifier@npm:2.0.1" + dependencies: + micromark-util-symbol: "npm:^2.0.0" + checksum: 10c0/5299265fa360769fc499a89f40142f10a9d4a5c3dd8e6eac8a8ef3c2e4a6570e4c009cf75ea46dce5ee31c01f25587bde2f4a5cc0a935584ae86dd857f2babbd + languageName: node + linkType: hard + +"micromark-util-resolve-all@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-util-resolve-all@npm:2.0.1" + dependencies: + micromark-util-types: "npm:^2.0.0" + checksum: 10c0/bb6ca28764696bb479dc44a2d5b5fe003e7177aeae1d6b0d43f24cc223bab90234092d9c3ce4a4d2b8df095ccfd820537b10eb96bb7044d635f385d65a4c984a + languageName: node + linkType: hard + +"micromark-util-sanitize-uri@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-util-sanitize-uri@npm:2.0.1" + dependencies: + micromark-util-character: "npm:^2.0.0" + micromark-util-encode: "npm:^2.0.0" + micromark-util-symbol: "npm:^2.0.0" + checksum: 10c0/60e92166e1870fd4f1961468c2651013ff760617342918e0e0c3c4e872433aa2e60c1e5a672bfe5d89dc98f742d6b33897585cf86ae002cda23e905a3c02527c + languageName: node + linkType: hard + +"micromark-util-subtokenize@npm:^2.0.0": + version: 2.1.0 + resolution: "micromark-util-subtokenize@npm:2.1.0" + dependencies: + devlop: "npm:^1.0.0" + micromark-util-chunked: "npm:^2.0.0" + micromark-util-symbol: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + checksum: 10c0/bee69eece4393308e657c293ba80d92ebcb637e5f55e21dcf9c3fa732b91a8eda8ac248d76ff375e675175bfadeae4712e5158ef97eef1111789da1ce7ab5067 + languageName: node + linkType: hard + +"micromark-util-symbol@npm:^1.0.0, micromark-util-symbol@npm:^1.0.1": + version: 1.1.0 + resolution: "micromark-util-symbol@npm:1.1.0" + checksum: 10c0/10ceaed33a90e6bfd3a5d57053dbb53f437d4809cc11430b5a09479c0ba601577059be9286df4a7eae6e350a60a2575dc9fa9d9872b5b8d058c875e075c33803 + languageName: node + linkType: hard + +"micromark-util-symbol@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-util-symbol@npm:2.0.1" + checksum: 10c0/f2d1b207771e573232436618e78c5e46cd4b5c560dd4a6d63863d58018abbf49cb96ec69f7007471e51434c60de3c9268ef2bf46852f26ff4aacd10f9da16fe9 + languageName: node + linkType: hard + +"micromark-util-types@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-util-types@npm:1.1.0" + checksum: 10c0/a9749cb0a12a252ff536baabcb7012421b6fad4d91a5fdd80d7b33dc7b4c22e2d0c4637dfe5b902d00247fe6c9b01f4a24fce6b572b16ccaa4da90e6ce2a11e4 + languageName: node + linkType: hard + +"micromark-util-types@npm:^2.0.0": + version: 2.0.2 + resolution: "micromark-util-types@npm:2.0.2" + checksum: 10c0/c8c15b96c858db781c4393f55feec10004bf7df95487636c9a9f7209e51002a5cca6a047c5d2a5dc669ff92da20e57aaa881e81a268d9ccadb647f9dce305298 + languageName: node + linkType: hard + +"micromark@npm:^4.0.0": + version: 4.0.2 + resolution: "micromark@npm:4.0.2" + dependencies: + "@types/debug": "npm:^4.0.0" + debug: "npm:^4.0.0" + decode-named-character-reference: "npm:^1.0.0" + devlop: "npm:^1.0.0" + micromark-core-commonmark: "npm:^2.0.0" + micromark-factory-space: "npm:^2.0.0" + micromark-util-character: "npm:^2.0.0" + micromark-util-chunked: "npm:^2.0.0" + micromark-util-combine-extensions: "npm:^2.0.0" + micromark-util-decode-numeric-character-reference: "npm:^2.0.0" + micromark-util-encode: "npm:^2.0.0" + micromark-util-normalize-identifier: "npm:^2.0.0" + micromark-util-resolve-all: "npm:^2.0.0" + micromark-util-sanitize-uri: "npm:^2.0.0" + micromark-util-subtokenize: "npm:^2.0.0" + micromark-util-symbol: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + checksum: 10c0/07462287254219d6eda6eac8a3cebaff2994e0575499e7088027b825105e096e4f51e466b14b2a81b71933a3b6c48ee069049d87bc2c2127eee50d9cc69e8af6 + languageName: node + linkType: hard + +"micromatch@npm:^4.0.2, micromatch@npm:^4.0.5, micromatch@npm:^4.0.8": + version: 4.0.8 + resolution: "micromatch@npm:4.0.8" + dependencies: + braces: "npm:^3.0.3" + picomatch: "npm:^2.3.1" + checksum: 10c0/166fa6eb926b9553f32ef81f5f531d27b4ce7da60e5baf8c021d043b27a388fb95e46a8038d5045877881e673f8134122b59624d5cecbd16eb50a42e7a6b5ca8 + languageName: node + linkType: hard + +"mime-db@npm:1.52.0": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 10c0/0557a01deebf45ac5f5777fe7740b2a5c309c6d62d40ceab4e23da9f821899ce7a900b7ac8157d4548ddbb7beffe9abc621250e6d182b0397ec7f10c7b91a5aa + languageName: node + linkType: hard + +"mime-db@npm:>= 1.43.0 < 2": + version: 1.54.0 + resolution: "mime-db@npm:1.54.0" + checksum: 10c0/8d907917bc2a90fa2df842cdf5dfeaf509adc15fe0531e07bb2f6ab15992416479015828d6a74200041c492e42cce3ebf78e5ce714388a0a538ea9c53eece284 + languageName: node + linkType: hard + +"mime-db@npm:~1.33.0": + version: 1.33.0 + resolution: "mime-db@npm:1.33.0" + checksum: 10c0/79172ce5468c8503b49dddfdddc18d3f5fe2599f9b5fe1bc321a8cbee14c96730fc6db22f907b23701b05b2936f865795f62ec3a78a7f3c8cb2450bb68c6763e + languageName: node + linkType: hard + +"mime-types@npm:2.1.18": + version: 2.1.18 + resolution: "mime-types@npm:2.1.18" + dependencies: + mime-db: "npm:~1.33.0" + checksum: 10c0/a96a8d12f4bb98bc7bfac6a8ccbd045f40368fc1030d9366050c3613825d3715d1c1f393e10a75a885d2cdc1a26cd6d5e11f3a2a0d5c4d361f00242139430a0f + languageName: node + linkType: hard + +"mime-types@npm:^2.1.27, mime-types@npm:^2.1.31, mime-types@npm:~2.1.17, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": + version: 2.1.35 + resolution: "mime-types@npm:2.1.35" + dependencies: + mime-db: "npm:1.52.0" + checksum: 10c0/82fb07ec56d8ff1fc999a84f2f217aa46cb6ed1033fefaabd5785b9a974ed225c90dc72fff460259e66b95b73648596dbcc50d51ed69cdf464af2d237d3149b2 + languageName: node + linkType: hard + +"mime@npm:1.6.0": + version: 1.6.0 + resolution: "mime@npm:1.6.0" + bin: + mime: cli.js + checksum: 10c0/b92cd0adc44888c7135a185bfd0dddc42c32606401c72896a842ae15da71eb88858f17669af41e498b463cd7eb998f7b48939a25b08374c7924a9c8a6f8a81b0 + languageName: node + linkType: hard + +"mimic-fn@npm:^2.1.0": + version: 2.1.0 + resolution: "mimic-fn@npm:2.1.0" + checksum: 10c0/b26f5479d7ec6cc2bce275a08f146cf78f5e7b661b18114e2506dd91ec7ec47e7a25bf4360e5438094db0560bcc868079fb3b1fb3892b833c1ecbf63f80c95a4 + languageName: node + linkType: hard + +"mimic-response@npm:^3.1.0": + version: 3.1.0 + resolution: "mimic-response@npm:3.1.0" + checksum: 10c0/0d6f07ce6e03e9e4445bee655202153bdb8a98d67ee8dc965ac140900d7a2688343e6b4c9a72cfc9ef2f7944dfd76eef4ab2482eb7b293a68b84916bac735362 + languageName: node + linkType: hard + +"mimic-response@npm:^4.0.0": + version: 4.0.0 + resolution: "mimic-response@npm:4.0.0" + checksum: 10c0/761d788d2668ae9292c489605ffd4fad220f442fbae6832adce5ebad086d691e906a6d5240c290293c7a11e99fbdbbef04abbbed498bf8699a4ee0f31315e3fb + languageName: node + linkType: hard + +"mini-css-extract-plugin@npm:^2.9.1": + version: 2.9.2 + resolution: "mini-css-extract-plugin@npm:2.9.2" + dependencies: + schema-utils: "npm:^4.0.0" + tapable: "npm:^2.2.1" + peerDependencies: + webpack: ^5.0.0 + checksum: 10c0/5d3218dbd7db48b572925ddac05162a7415bf81b321f1a0c07016ec643cb5720c8a836ae68d45f5de826097a3013b601706c9c5aacb7f610dc2041b271de2ce0 + languageName: node + linkType: hard + +"minimalistic-assert@npm:^1.0.0": + version: 1.0.1 + resolution: "minimalistic-assert@npm:1.0.1" + checksum: 10c0/96730e5601cd31457f81a296f521eb56036e6f69133c0b18c13fe941109d53ad23a4204d946a0d638d7f3099482a0cec8c9bb6d642604612ce43ee536be3dddd + languageName: node + linkType: hard + +"minimatch@npm:3.1.2, minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1": + version: 3.1.2 + resolution: "minimatch@npm:3.1.2" + dependencies: + brace-expansion: "npm:^1.1.7" + checksum: 10c0/0262810a8fc2e72cca45d6fd86bd349eee435eb95ac6aa45c9ea2180e7ee875ef44c32b55b5973ceabe95ea12682f6e3725cbb63d7a2d1da3ae1163c8b210311 + languageName: node + linkType: hard + +"minimatch@npm:^9.0.4": + version: 9.0.5 + resolution: "minimatch@npm:9.0.5" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 10c0/de96cf5e35bdf0eab3e2c853522f98ffbe9a36c37797778d2665231ec1f20a9447a7e567cb640901f89e4daaa95ae5d70c65a9e8aa2bb0019b6facbc3c0575ed + languageName: node + linkType: hard + +"minimist@npm:^1.2.0": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 10c0/19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6 + languageName: node + linkType: hard + +"minipass-collect@npm:^2.0.1": + version: 2.0.1 + resolution: "minipass-collect@npm:2.0.1" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/5167e73f62bb74cc5019594709c77e6a742051a647fe9499abf03c71dca75515b7959d67a764bdc4f8b361cf897fbf25e2d9869ee039203ed45240f48b9aa06e + languageName: node + linkType: hard + +"minipass-fetch@npm:^4.0.0": + version: 4.0.1 + resolution: "minipass-fetch@npm:4.0.1" + dependencies: + encoding: "npm:^0.1.13" + minipass: "npm:^7.0.3" + minipass-sized: "npm:^1.0.3" + minizlib: "npm:^3.0.1" + dependenciesMeta: + encoding: + optional: true + checksum: 10c0/a3147b2efe8e078c9bf9d024a0059339c5a09c5b1dded6900a219c218cc8b1b78510b62dae556b507304af226b18c3f1aeb1d48660283602d5b6586c399eed5c + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.5 + resolution: "minipass-flush@npm:1.0.5" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/2a51b63feb799d2bb34669205eee7c0eaf9dce01883261a5b77410c9408aa447e478efd191b4de6fc1101e796ff5892f8443ef20d9544385819093dbb32d36bd + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/cbda57cea20b140b797505dc2cac71581a70b3247b84480c1fed5ca5ba46c25ecc25f68bfc9e6dcb1a6e9017dab5c7ada5eab73ad4f0a49d84e35093e0c643f2 + languageName: node + linkType: hard + +"minipass-sized@npm:^1.0.3": + version: 1.0.3 + resolution: "minipass-sized@npm:1.0.3" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/298f124753efdc745cfe0f2bdfdd81ba25b9f4e753ca4a2066eb17c821f25d48acea607dfc997633ee5bf7b6dfffb4eee4f2051eb168663f0b99fad2fa4829cb + languageName: node + linkType: hard + +"minipass@npm:^3.0.0": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: "npm:^4.0.0" + checksum: 10c0/a114746943afa1dbbca8249e706d1d38b85ed1298b530f5808ce51f8e9e941962e2a5ad2e00eae7dd21d8a4aae6586a66d4216d1a259385e9d0358f0c1eba16c + languageName: node + linkType: hard + +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4, minipass@npm:^7.1.2": + version: 7.1.2 + resolution: "minipass@npm:7.1.2" + checksum: 10c0/b0fd20bb9fb56e5fa9a8bfac539e8915ae07430a619e4b86ff71f5fc757ef3924b23b2c4230393af1eda647ed3d75739e4e0acb250a6b1eb277cf7f8fe449557 + languageName: node + linkType: hard + +"minizlib@npm:^3.0.1": + version: 3.0.2 + resolution: "minizlib@npm:3.0.2" + dependencies: + minipass: "npm:^7.1.2" + checksum: 10c0/9f3bd35e41d40d02469cb30470c55ccc21cae0db40e08d1d0b1dff01cc8cc89a6f78e9c5d2b7c844e485ec0a8abc2238111213fdc5b2038e6d1012eacf316f78 + languageName: node + linkType: hard + +"mkdirp@npm:^3.0.1": + version: 3.0.1 + resolution: "mkdirp@npm:3.0.1" + bin: + mkdirp: dist/cjs/src/bin.js + checksum: 10c0/9f2b975e9246351f5e3a40dcfac99fcd0baa31fbfab615fe059fb11e51f10e4803c63de1f384c54d656e4db31d000e4767e9ef076a22e12a641357602e31d57d + languageName: node + linkType: hard + +"mock-socket@npm:^9.3.1": + version: 9.3.1 + resolution: "mock-socket@npm:9.3.1" + checksum: 10c0/0c53baa4acca12ed1ff9bddfdd4bc0cabe0fc96a3ed25a42a00d23b7a111eb6edfc2b44d93aef9a0c93a4a000b4d2d8dcff028488cd2a1e9cc416477ee341ce0 + languageName: node + linkType: hard + +"mrmime@npm:^2.0.0": + version: 2.0.1 + resolution: "mrmime@npm:2.0.1" + checksum: 10c0/af05afd95af202fdd620422f976ad67dc18e6ee29beb03dd1ce950ea6ef664de378e44197246df4c7cdd73d47f2e7143a6e26e473084b9e4aa2095c0ad1e1761 + languageName: node + linkType: hard + +"ms@npm:2.0.0": + version: 2.0.0 + resolution: "ms@npm:2.0.0" + checksum: 10c0/f8fda810b39fd7255bbdc451c46286e549794fcc700dc9cd1d25658bbc4dc2563a5de6fe7c60f798a16a60c6ceb53f033cb353f493f0cf63e5199b702943159d + languageName: node + linkType: hard + +"ms@npm:2.1.3, ms@npm:^2.1.3": + version: 2.1.3 + resolution: "ms@npm:2.1.3" + checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 + languageName: node + linkType: hard + +"multicast-dns@npm:^7.2.5": + version: 7.2.5 + resolution: "multicast-dns@npm:7.2.5" + dependencies: + dns-packet: "npm:^5.2.2" + thunky: "npm:^1.0.2" + bin: + multicast-dns: cli.js + checksum: 10c0/5120171d4bdb1577764c5afa96e413353bff530d1b37081cb29cccc747f989eb1baf40574fe8e27060fc1aef72b59c042f72b9b208413de33bcf411343c69057 + languageName: node + linkType: hard + +"nanoid@npm:^3.3.8": + version: 3.3.11 + resolution: "nanoid@npm:3.3.11" + bin: + nanoid: bin/nanoid.cjs + checksum: 10c0/40e7f70b3d15f725ca072dfc4f74e81fcf1fbb02e491cf58ac0c79093adc9b0a73b152bcde57df4b79cd097e13023d7504acb38404a4da7bc1cd8e887b82fe0b + languageName: node + linkType: hard + +"negotiator@npm:0.6.3": + version: 0.6.3 + resolution: "negotiator@npm:0.6.3" + checksum: 10c0/3ec9fd413e7bf071c937ae60d572bc67155262068ed522cf4b3be5edbe6ddf67d095ec03a3a14ebf8fc8e95f8e1d61be4869db0dbb0de696f6b837358bd43fc2 + languageName: node + linkType: hard + +"negotiator@npm:^1.0.0": + version: 1.0.0 + resolution: "negotiator@npm:1.0.0" + checksum: 10c0/4c559dd52669ea48e1914f9d634227c561221dd54734070791f999c52ed0ff36e437b2e07d5c1f6e32909fc625fe46491c16e4a8f0572567d4dd15c3a4fda04b + languageName: node + linkType: hard + +"negotiator@npm:~0.6.4": + version: 0.6.4 + resolution: "negotiator@npm:0.6.4" + checksum: 10c0/3e677139c7fb7628a6f36335bf11a885a62c21d5390204590a1a214a5631fcbe5ea74ef6a610b60afe84b4d975cbe0566a23f20ee17c77c73e74b80032108dea + languageName: node + linkType: hard + +"neo-async@npm:^2.6.2": + version: 2.6.2 + resolution: "neo-async@npm:2.6.2" + checksum: 10c0/c2f5a604a54a8ec5438a342e1f356dff4bc33ccccdb6dc668d94fe8e5eccfc9d2c2eea6064b0967a767ba63b33763f51ccf2cd2441b461a7322656c1f06b3f5d + languageName: node + linkType: hard + +"no-case@npm:^3.0.4": + version: 3.0.4 + resolution: "no-case@npm:3.0.4" + dependencies: + lower-case: "npm:^2.0.2" + tslib: "npm:^2.0.3" + checksum: 10c0/8ef545f0b3f8677c848f86ecbd42ca0ff3cd9dd71c158527b344c69ba14710d816d8489c746b6ca225e7b615108938a0bda0a54706f8c255933703ac1cf8e703 + languageName: node + linkType: hard + +"nock@npm:^13.5.5": + version: 13.5.6 + resolution: "nock@npm:13.5.6" + dependencies: + debug: "npm:^4.1.0" + json-stringify-safe: "npm:^5.0.1" + propagate: "npm:^2.0.0" + checksum: 10c0/94249a294176a6e521bbb763c214de4aa6b6ab63dff1e299aaaf455886a465d38906891d7f24570d94a43b1e376c239c54d89ff7697124bc57ef188006acc25e + languageName: node + linkType: hard + +"node-domexception@npm:^1.0.0": + version: 1.0.0 + resolution: "node-domexception@npm:1.0.0" + checksum: 10c0/5e5d63cda29856402df9472335af4bb13875e1927ad3be861dc5ebde38917aecbf9ae337923777af52a48c426b70148815e890a5d72760f1b4d758cc671b1a2b + languageName: node + linkType: hard + +"node-emoji@npm:^2.1.0": + version: 2.2.0 + resolution: "node-emoji@npm:2.2.0" + dependencies: + "@sindresorhus/is": "npm:^4.6.0" + char-regex: "npm:^1.0.2" + emojilib: "npm:^2.4.0" + skin-tone: "npm:^2.0.0" + checksum: 10c0/9525defbd90a82a2131758c2470203fa2a2faa8edd177147a8654a26307fe03594e52847ecbe2746d06cfc5c50acd12bd500f035350a7609e8217c9894c19aad + languageName: node + linkType: hard + +"node-fetch@npm:^3.3.2": + version: 3.3.2 + resolution: "node-fetch@npm:3.3.2" + dependencies: + data-uri-to-buffer: "npm:^4.0.0" + fetch-blob: "npm:^3.1.4" + formdata-polyfill: "npm:^4.0.10" + checksum: 10c0/f3d5e56190562221398c9f5750198b34cf6113aa304e34ee97c94fd300ec578b25b2c2906edba922050fce983338fde0d5d34fcb0fc3336ade5bd0e429ad7538 + languageName: node + linkType: hard + +"node-forge@npm:^1": + version: 1.3.1 + resolution: "node-forge@npm:1.3.1" + checksum: 10c0/e882819b251a4321f9fc1d67c85d1501d3004b4ee889af822fd07f64de3d1a8e272ff00b689570af0465d65d6bf5074df9c76e900e0aff23e60b847f2a46fbe8 + languageName: node + linkType: hard + +"node-gyp@npm:latest": + version: 11.2.0 + resolution: "node-gyp@npm:11.2.0" + dependencies: + env-paths: "npm:^2.2.0" + exponential-backoff: "npm:^3.1.1" + graceful-fs: "npm:^4.2.6" + make-fetch-happen: "npm:^14.0.3" + nopt: "npm:^8.0.0" + proc-log: "npm:^5.0.0" + semver: "npm:^7.3.5" + tar: "npm:^7.4.3" + tinyglobby: "npm:^0.2.12" + which: "npm:^5.0.0" + bin: + node-gyp: bin/node-gyp.js + checksum: 10c0/bd8d8c76b06be761239b0c8680f655f6a6e90b48e44d43415b11c16f7e8c15be346fba0cbf71588c7cdfb52c419d928a7d3db353afc1d952d19756237d8f10b9 + languageName: node + linkType: hard + +"node-releases@npm:^2.0.19": + version: 2.0.19 + resolution: "node-releases@npm:2.0.19" + checksum: 10c0/52a0dbd25ccf545892670d1551690fe0facb6a471e15f2cfa1b20142a5b255b3aa254af5f59d6ecb69c2bec7390bc643c43aa63b13bf5e64b6075952e716b1aa + languageName: node + linkType: hard + +"nopt@npm:^8.0.0": + version: 8.1.0 + resolution: "nopt@npm:8.1.0" + dependencies: + abbrev: "npm:^3.0.0" + bin: + nopt: bin/nopt.js + checksum: 10c0/62e9ea70c7a3eb91d162d2c706b6606c041e4e7b547cbbb48f8b3695af457dd6479904d7ace600856bf923dd8d1ed0696f06195c8c20f02ac87c1da0e1d315ef + languageName: node + linkType: hard + +"normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": + version: 3.0.0 + resolution: "normalize-path@npm:3.0.0" + checksum: 10c0/e008c8142bcc335b5e38cf0d63cfd39d6cf2d97480af9abdbe9a439221fd4d749763bab492a8ee708ce7a194bb00c9da6d0a115018672310850489137b3da046 + languageName: node + linkType: hard + +"normalize-range@npm:^0.1.2": + version: 0.1.2 + resolution: "normalize-range@npm:0.1.2" + checksum: 10c0/bf39b73a63e0a42ad1a48c2bd1bda5a07ede64a7e2567307a407674e595bcff0fa0d57e8e5f1e7fa5e91000797c7615e13613227aaaa4d6d6e87f5bd5cc95de6 + languageName: node + linkType: hard + +"normalize-url@npm:^8.0.0": + version: 8.0.1 + resolution: "normalize-url@npm:8.0.1" + checksum: 10c0/eb439231c4b84430f187530e6fdac605c5048ef4ec556447a10c00a91fc69b52d8d8298d9d608e68d3e0f7dc2d812d3455edf425e0f215993667c3183bcab1ef + languageName: node + linkType: hard + +"npm-run-path@npm:^4.0.1": + version: 4.0.1 + resolution: "npm-run-path@npm:4.0.1" + dependencies: + path-key: "npm:^3.0.0" + checksum: 10c0/6f9353a95288f8455cf64cbeb707b28826a7f29690244c1e4bb61ec573256e021b6ad6651b394eb1ccfd00d6ec50147253aba2c5fe58a57ceb111fad62c519ac + languageName: node + linkType: hard + +"nprogress@npm:^0.2.0": + version: 0.2.0 + resolution: "nprogress@npm:0.2.0" + checksum: 10c0/eab9a923a1ad1eed71a455ecfbc358442dd9bcd71b9fa3fa1c67eddf5159360b182c218f76fca320c97541a1b45e19ced04e6dcb044a662244c5419f8ae9e821 + languageName: node + linkType: hard + +"nth-check@npm:^2.0.1": + version: 2.1.1 + resolution: "nth-check@npm:2.1.1" + dependencies: + boolbase: "npm:^1.0.0" + checksum: 10c0/5fee7ff309727763689cfad844d979aedd2204a817fbaaf0e1603794a7c20db28548d7b024692f953557df6ce4a0ee4ae46cd8ebd9b36cfb300b9226b567c479 + languageName: node + linkType: hard + +"null-loader@npm:^4.0.1": + version: 4.0.1 + resolution: "null-loader@npm:4.0.1" + dependencies: + loader-utils: "npm:^2.0.0" + schema-utils: "npm:^3.0.0" + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + checksum: 10c0/fe9a74a928c9ddc1eab7be0e4322516439562d6efd6feeb0f7c61777d4b79a6a8e5a6bc8133deb59408f3f423bdf84c154a88168154a583154e9e33d544b4d42 + languageName: node + linkType: hard + +"object-assign@npm:^4.1.1": + version: 4.1.1 + resolution: "object-assign@npm:4.1.1" + checksum: 10c0/1f4df9945120325d041ccf7b86f31e8bcc14e73d29171e37a7903050e96b81323784ec59f93f102ec635bcf6fa8034ba3ea0a8c7e69fa202b87ae3b6cec5a414 + languageName: node + linkType: hard + +"object-inspect@npm:^1.13.3": + version: 1.13.4 + resolution: "object-inspect@npm:1.13.4" + checksum: 10c0/d7f8711e803b96ea3191c745d6f8056ce1f2496e530e6a19a0e92d89b0fa3c76d910c31f0aa270432db6bd3b2f85500a376a83aaba849a8d518c8845b3211692 + languageName: node + linkType: hard + +"object-keys@npm:^1.1.1": + version: 1.1.1 + resolution: "object-keys@npm:1.1.1" + checksum: 10c0/b11f7ccdbc6d406d1f186cdadb9d54738e347b2692a14439ca5ac70c225fa6db46db809711b78589866d47b25fc3e8dee0b4c722ac751e11180f9380e3d8601d + languageName: node + linkType: hard + +"object.assign@npm:^4.1.0": + version: 4.1.7 + resolution: "object.assign@npm:4.1.7" + dependencies: + call-bind: "npm:^1.0.8" + call-bound: "npm:^1.0.3" + define-properties: "npm:^1.2.1" + es-object-atoms: "npm:^1.0.0" + has-symbols: "npm:^1.1.0" + object-keys: "npm:^1.1.1" + checksum: 10c0/3b2732bd860567ea2579d1567525168de925a8d852638612846bd8082b3a1602b7b89b67b09913cbb5b9bd6e95923b2ae73580baa9d99cb4e990564e8cbf5ddc + languageName: node + linkType: hard + +"obuf@npm:^1.0.0, obuf@npm:^1.1.2": + version: 1.1.2 + resolution: "obuf@npm:1.1.2" + checksum: 10c0/520aaac7ea701618eacf000fc96ae458e20e13b0569845800fc582f81b386731ab22d55354b4915d58171db00e79cfcd09c1638c02f89577ef092b38c65b7d81 + languageName: node + linkType: hard + +"on-finished@npm:2.4.1": + version: 2.4.1 + resolution: "on-finished@npm:2.4.1" + dependencies: + ee-first: "npm:1.1.1" + checksum: 10c0/46fb11b9063782f2d9968863d9cbba33d77aa13c17f895f56129c274318b86500b22af3a160fe9995aa41317efcd22941b6eba747f718ced08d9a73afdb087b4 + languageName: node + linkType: hard + +"on-headers@npm:~1.0.2": + version: 1.0.2 + resolution: "on-headers@npm:1.0.2" + checksum: 10c0/f649e65c197bf31505a4c0444875db0258e198292f34b884d73c2f751e91792ef96bb5cf89aa0f4fecc2e4dc662461dda606b1274b0e564f539cae5d2f5fc32f + languageName: node + linkType: hard + +"once@npm:^1.3.0": + version: 1.4.0 + resolution: "once@npm:1.4.0" + dependencies: + wrappy: "npm:1" + checksum: 10c0/5d48aca287dfefabd756621c5dfce5c91a549a93e9fdb7b8246bc4c4790aa2ec17b34a260530474635147aeb631a2dcc8b32c613df0675f96041cbb8244517d0 + languageName: node + linkType: hard + +"onetime@npm:^5.1.2": + version: 5.1.2 + resolution: "onetime@npm:5.1.2" + dependencies: + mimic-fn: "npm:^2.1.0" + checksum: 10c0/ffcef6fbb2692c3c40749f31ea2e22677a876daea92959b8a80b521d95cca7a668c884d8b2045d1d8ee7d56796aa405c405462af112a1477594cc63531baeb8f + languageName: node + linkType: hard + +"open@npm:^8.0.9, open@npm:^8.4.0": + version: 8.4.2 + resolution: "open@npm:8.4.2" + dependencies: + define-lazy-prop: "npm:^2.0.0" + is-docker: "npm:^2.1.1" + is-wsl: "npm:^2.2.0" + checksum: 10c0/bb6b3a58401dacdb0aad14360626faf3fb7fba4b77816b373495988b724fb48941cad80c1b65d62bb31a17609b2cd91c41a181602caea597ca80dfbcc27e84c9 + languageName: node + linkType: hard + +"opener@npm:^1.5.2": + version: 1.5.2 + resolution: "opener@npm:1.5.2" + bin: + opener: bin/opener-bin.js + checksum: 10c0/dd56256ab0cf796585617bc28e06e058adf09211781e70b264c76a1dbe16e90f868c974e5bf5309c93469157c7d14b89c35dc53fe7293b0e40b4d2f92073bc79 + languageName: node + linkType: hard + +"p-cancelable@npm:^3.0.0": + version: 3.0.0 + resolution: "p-cancelable@npm:3.0.0" + checksum: 10c0/948fd4f8e87b956d9afc2c6c7392de9113dac817cb1cecf4143f7a3d4c57ab5673614a80be3aba91ceec5e4b69fd8c869852d7e8048bc3d9273c4c36ce14b9aa + languageName: node + linkType: hard + +"p-limit@npm:^2.0.0": + version: 2.3.0 + resolution: "p-limit@npm:2.3.0" + dependencies: + p-try: "npm:^2.0.0" + checksum: 10c0/8da01ac53efe6a627080fafc127c873da40c18d87b3f5d5492d465bb85ec7207e153948df6b9cbaeb130be70152f874229b8242ee2be84c0794082510af97f12 + languageName: node + linkType: hard + +"p-limit@npm:^3.0.2": + version: 3.1.0 + resolution: "p-limit@npm:3.1.0" + dependencies: + yocto-queue: "npm:^0.1.0" + checksum: 10c0/9db675949dbdc9c3763c89e748d0ef8bdad0afbb24d49ceaf4c46c02c77d30db4e0652ed36d0a0a7a95154335fab810d95c86153105bb73b3a90448e2bb14e1a + languageName: node + linkType: hard + +"p-limit@npm:^4.0.0": + version: 4.0.0 + resolution: "p-limit@npm:4.0.0" + dependencies: + yocto-queue: "npm:^1.0.0" + checksum: 10c0/a56af34a77f8df2ff61ddfb29431044557fcbcb7642d5a3233143ebba805fc7306ac1d448de724352861cb99de934bc9ab74f0d16fe6a5460bdbdf938de875ad + languageName: node + linkType: hard + +"p-locate@npm:^3.0.0": + version: 3.0.0 + resolution: "p-locate@npm:3.0.0" + dependencies: + p-limit: "npm:^2.0.0" + checksum: 10c0/7b7f06f718f19e989ce6280ed4396fb3c34dabdee0df948376483032f9d5ec22fdf7077ec942143a75827bb85b11da72016497fc10dac1106c837ed593969ee8 + languageName: node + linkType: hard + +"p-locate@npm:^5.0.0": + version: 5.0.0 + resolution: "p-locate@npm:5.0.0" + dependencies: + p-limit: "npm:^3.0.2" + checksum: 10c0/2290d627ab7903b8b70d11d384fee714b797f6040d9278932754a6860845c4d3190603a0772a663c8cb5a7b21d1b16acb3a6487ebcafa9773094edc3dfe6009a + languageName: node + linkType: hard + +"p-locate@npm:^6.0.0": + version: 6.0.0 + resolution: "p-locate@npm:6.0.0" + dependencies: + p-limit: "npm:^4.0.0" + checksum: 10c0/d72fa2f41adce59c198270aa4d3c832536c87a1806e0f69dffb7c1a7ca998fb053915ca833d90f166a8c082d3859eabfed95f01698a3214c20df6bb8de046312 + languageName: node + linkType: hard + +"p-map@npm:^4.0.0": + version: 4.0.0 + resolution: "p-map@npm:4.0.0" + dependencies: + aggregate-error: "npm:^3.0.0" + checksum: 10c0/592c05bd6262c466ce269ff172bb8de7c6975afca9b50c975135b974e9bdaafbfe80e61aaaf5be6d1200ba08b30ead04b88cfa7e25ff1e3b93ab28c9f62a2c75 + languageName: node + linkType: hard + +"p-map@npm:^7.0.2": + version: 7.0.3 + resolution: "p-map@npm:7.0.3" + checksum: 10c0/46091610da2b38ce47bcd1d8b4835a6fa4e832848a6682cf1652bc93915770f4617afc844c10a77d1b3e56d2472bb2d5622353fa3ead01a7f42b04fc8e744a5c + languageName: node + linkType: hard + +"p-retry@npm:^4.5.0": + version: 4.6.2 + resolution: "p-retry@npm:4.6.2" + dependencies: + "@types/retry": "npm:0.12.0" + retry: "npm:^0.13.1" + checksum: 10c0/d58512f120f1590cfedb4c2e0c42cb3fa66f3cea8a4646632fcb834c56055bb7a6f138aa57b20cc236fb207c9d694e362e0b5c2b14d9b062f67e8925580c73b0 + languageName: node + linkType: hard + +"p-try@npm:^2.0.0": + version: 2.2.0 + resolution: "p-try@npm:2.2.0" + checksum: 10c0/c36c19907734c904b16994e6535b02c36c2224d433e01a2f1ab777237f4d86e6289fd5fd464850491e940379d4606ed850c03e0f9ab600b0ebddb511312e177f + languageName: node + linkType: hard + +"package-json-from-dist@npm:^1.0.0": + version: 1.0.1 + resolution: "package-json-from-dist@npm:1.0.1" + checksum: 10c0/62ba2785eb655fec084a257af34dbe24292ab74516d6aecef97ef72d4897310bc6898f6c85b5cd22770eaa1ce60d55a0230e150fb6a966e3ecd6c511e23d164b + languageName: node + linkType: hard + +"package-json@npm:^8.1.0": + version: 8.1.1 + resolution: "package-json@npm:8.1.1" + dependencies: + got: "npm:^12.1.0" + registry-auth-token: "npm:^5.0.1" + registry-url: "npm:^6.0.0" + semver: "npm:^7.3.7" + checksum: 10c0/83b057878bca229033aefad4ef51569b484e63a65831ddf164dc31f0486817e17ffcb58c819c7af3ef3396042297096b3ffc04e107fd66f8f48756f6d2071c8f + languageName: node + linkType: hard + +"param-case@npm:^3.0.4": + version: 3.0.4 + resolution: "param-case@npm:3.0.4" + dependencies: + dot-case: "npm:^3.0.4" + tslib: "npm:^2.0.3" + checksum: 10c0/ccc053f3019f878eca10e70ec546d92f51a592f762917dafab11c8b532715dcff58356118a6f350976e4ab109e321756f05739643ed0ca94298e82291e6f9e76 + languageName: node + linkType: hard + +"parent-module@npm:^1.0.0": + version: 1.0.1 + resolution: "parent-module@npm:1.0.1" + dependencies: + callsites: "npm:^3.0.0" + checksum: 10c0/c63d6e80000d4babd11978e0d3fee386ca7752a02b035fd2435960ffaa7219dc42146f07069fb65e6e8bf1caef89daf9af7535a39bddf354d78bf50d8294f556 + languageName: node + linkType: hard + +"parse-entities@npm:^4.0.0": + version: 4.0.2 + resolution: "parse-entities@npm:4.0.2" + dependencies: + "@types/unist": "npm:^2.0.0" + character-entities-legacy: "npm:^3.0.0" + character-reference-invalid: "npm:^2.0.0" + decode-named-character-reference: "npm:^1.0.0" + is-alphanumerical: "npm:^2.0.0" + is-decimal: "npm:^2.0.0" + is-hexadecimal: "npm:^2.0.0" + checksum: 10c0/a13906b1151750b78ed83d386294066daf5fb559e08c5af9591b2d98cc209123103016a01df776f65f8219ad26652d6d6b210d0974d452049cddfc53a8916c34 + languageName: node + linkType: hard + +"parse-json@npm:^5.0.0, parse-json@npm:^5.2.0": + version: 5.2.0 + resolution: "parse-json@npm:5.2.0" + dependencies: + "@babel/code-frame": "npm:^7.0.0" + error-ex: "npm:^1.3.1" + json-parse-even-better-errors: "npm:^2.3.0" + lines-and-columns: "npm:^1.1.6" + checksum: 10c0/77947f2253005be7a12d858aedbafa09c9ae39eb4863adf330f7b416ca4f4a08132e453e08de2db46459256fb66afaac5ee758b44fe6541b7cdaf9d252e59585 + languageName: node + linkType: hard + +"parse-numeric-range@npm:^1.3.0": + version: 1.3.0 + resolution: "parse-numeric-range@npm:1.3.0" + checksum: 10c0/53465afaa92111e86697281b684aa4574427360889cc23a1c215488c06b72441febdbf09f47ab0bef9a0c701e059629f3eebd2fe6fb241a254ad7a7a642aebe8 + languageName: node + linkType: hard + +"parse5-htmlparser2-tree-adapter@npm:^7.0.0": + version: 7.1.0 + resolution: "parse5-htmlparser2-tree-adapter@npm:7.1.0" + dependencies: + domhandler: "npm:^5.0.3" + parse5: "npm:^7.0.0" + checksum: 10c0/e5a4e0b834c84c9e244b5749f8d007f4baaeafac7a1da2c54be3421ffd9ef8fdec4f198bf55cda22e88e6ba95e9943f6ed5aa3ae5900b39972ebf5dc8c3f4722 + languageName: node + linkType: hard + +"parse5@npm:^7.0.0": + version: 7.3.0 + resolution: "parse5@npm:7.3.0" + dependencies: + entities: "npm:^6.0.0" + checksum: 10c0/7fd2e4e247e85241d6f2a464d0085eed599a26d7b0a5233790c49f53473232eb85350e8133344d9b3fd58b89339e7ad7270fe1f89d28abe50674ec97b87f80b5 + languageName: node + linkType: hard + +"parseurl@npm:~1.3.2, parseurl@npm:~1.3.3": + version: 1.3.3 + resolution: "parseurl@npm:1.3.3" + checksum: 10c0/90dd4760d6f6174adb9f20cf0965ae12e23879b5f5464f38e92fce8073354341e4b3b76fa3d878351efe7d01e617121955284cfd002ab087fba1a0726ec0b4f5 + languageName: node + linkType: hard + +"pascal-case@npm:^3.1.2": + version: 3.1.2 + resolution: "pascal-case@npm:3.1.2" + dependencies: + no-case: "npm:^3.0.4" + tslib: "npm:^2.0.3" + checksum: 10c0/05ff7c344809fd272fc5030ae0ee3da8e4e63f36d47a1e0a4855ca59736254192c5a27b5822ed4bae96e54048eec5f6907713cfcfff7cdf7a464eaf7490786d8 + languageName: node + linkType: hard + +"path-exists@npm:^3.0.0": + version: 3.0.0 + resolution: "path-exists@npm:3.0.0" + checksum: 10c0/17d6a5664bc0a11d48e2b2127d28a0e58822c6740bde30403f08013da599182289c56518bec89407e3f31d3c2b6b296a4220bc3f867f0911fee6952208b04167 + languageName: node + linkType: hard + +"path-exists@npm:^4.0.0": + version: 4.0.0 + resolution: "path-exists@npm:4.0.0" + checksum: 10c0/8c0bd3f5238188197dc78dced15207a4716c51cc4e3624c44fc97acf69558f5ebb9a2afff486fe1b4ee148e0c133e96c5e11a9aa5c48a3006e3467da070e5e1b + languageName: node + linkType: hard + +"path-exists@npm:^5.0.0": + version: 5.0.0 + resolution: "path-exists@npm:5.0.0" + checksum: 10c0/b170f3060b31604cde93eefdb7392b89d832dfbc1bed717c9718cbe0f230c1669b7e75f87e19901da2250b84d092989a0f9e44d2ef41deb09aa3ad28e691a40a + languageName: node + linkType: hard + +"path-is-absolute@npm:^1.0.0": + version: 1.0.1 + resolution: "path-is-absolute@npm:1.0.1" + checksum: 10c0/127da03c82172a2a50099cddbf02510c1791fc2cc5f7713ddb613a56838db1e8168b121a920079d052e0936c23005562059756d653b7c544c53185efe53be078 + languageName: node + linkType: hard + +"path-is-inside@npm:1.0.2": + version: 1.0.2 + resolution: "path-is-inside@npm:1.0.2" + checksum: 10c0/7fdd4b41672c70461cce734fc222b33e7b447fa489c7c4377c95e7e6852d83d69741f307d88ec0cc3b385b41cb4accc6efac3c7c511cd18512e95424f5fa980c + languageName: node + linkType: hard + +"path-key@npm:^3.0.0, path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 10c0/748c43efd5a569c039d7a00a03b58eecd1d75f3999f5a28303d75f521288df4823bc057d8784eb72358b2895a05f29a070bc9f1f17d28226cc4e62494cc58c4c + languageName: node + linkType: hard + +"path-parse@npm:^1.0.7": + version: 1.0.7 + resolution: "path-parse@npm:1.0.7" + checksum: 10c0/11ce261f9d294cc7a58d6a574b7f1b935842355ec66fba3c3fd79e0f036462eaf07d0aa95bb74ff432f9afef97ce1926c720988c6a7451d8a584930ae7de86e1 + languageName: node + linkType: hard + +"path-scurry@npm:^1.11.1": + version: 1.11.1 + resolution: "path-scurry@npm:1.11.1" + dependencies: + lru-cache: "npm:^10.2.0" + minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" + checksum: 10c0/32a13711a2a505616ae1cc1b5076801e453e7aae6ac40ab55b388bb91b9d0547a52f5aaceff710ea400205f18691120d4431e520afbe4266b836fadede15872d + languageName: node + linkType: hard + +"path-to-regexp@npm:0.1.12": + version: 0.1.12 + resolution: "path-to-regexp@npm:0.1.12" + checksum: 10c0/1c6ff10ca169b773f3bba943bbc6a07182e332464704572962d277b900aeee81ac6aa5d060ff9e01149636c30b1f63af6e69dd7786ba6e0ddb39d4dee1f0645b + languageName: node + linkType: hard + +"path-to-regexp@npm:3.3.0": + version: 3.3.0 + resolution: "path-to-regexp@npm:3.3.0" + checksum: 10c0/ffa0ebe7088d38d435a8d08b0fe6e8c93ceb2a81a65d4dd1d9a538f52e09d5e3474ed5f553cb3b180d894b0caa10698a68737ab599fd1e56b4663d1a64c9f77b + languageName: node + linkType: hard + +"path-to-regexp@npm:^1.7.0": + version: 1.9.0 + resolution: "path-to-regexp@npm:1.9.0" + dependencies: + isarray: "npm:0.0.1" + checksum: 10c0/de9ddb01b84d9c2c8e2bed18630d8d039e2d6f60a6538595750fa08c7a6482512257464c8da50616f266ab2cdd2428387e85f3b089e4c3f25d0c537e898a0751 + languageName: node + linkType: hard + +"path-type@npm:^4.0.0": + version: 4.0.0 + resolution: "path-type@npm:4.0.0" + checksum: 10c0/666f6973f332f27581371efaf303fd6c272cc43c2057b37aa99e3643158c7e4b2626549555d88626e99ea9e046f82f32e41bbde5f1508547e9a11b149b52387c + languageName: node + linkType: hard + +"picocolors@npm:^1.0.0, picocolors@npm:^1.1.1": + version: 1.1.1 + resolution: "picocolors@npm:1.1.1" + checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58 + languageName: node + linkType: hard + +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": + version: 2.3.1 + resolution: "picomatch@npm:2.3.1" + checksum: 10c0/26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be + languageName: node + linkType: hard + +"picomatch@npm:^4.0.2": + version: 4.0.2 + resolution: "picomatch@npm:4.0.2" + checksum: 10c0/7c51f3ad2bb42c776f49ebf964c644958158be30d0a510efd5a395e8d49cb5acfed5b82c0c5b365523ce18e6ab85013c9ebe574f60305892ec3fa8eee8304ccc + languageName: node + linkType: hard + +"pkg-dir@npm:^7.0.0": + version: 7.0.0 + resolution: "pkg-dir@npm:7.0.0" + dependencies: + find-up: "npm:^6.3.0" + checksum: 10c0/1afb23d2efb1ec9d8b2c4a0c37bf146822ad2774f074cb05b853be5dca1b40815c5960dd126df30ab8908349262a266f31b771e877235870a3b8fd313beebec5 + languageName: node + linkType: hard + +"pkg-up@npm:^3.1.0": + version: 3.1.0 + resolution: "pkg-up@npm:3.1.0" + dependencies: + find-up: "npm:^3.0.0" + checksum: 10c0/ecb60e1f8e1f611c0bdf1a0b6a474d6dfb51185567dc6f29cdef37c8d480ecba5362e006606bb290519bbb6f49526c403fabea93c3090c20368d98bb90c999ab + languageName: node + linkType: hard + +"postcss-attribute-case-insensitive@npm:^7.0.1": + version: 7.0.1 + resolution: "postcss-attribute-case-insensitive@npm:7.0.1" + dependencies: + postcss-selector-parser: "npm:^7.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/48945abe2024e2d2e4c37d30b8c1aaf37af720f24f6a996f7ea7e7ed33621f5c22cf247ed22028c0c922de040c58c0802729bc39b903cb1693f4b63c0b49da34 + languageName: node + linkType: hard + +"postcss-calc@npm:^9.0.1": + version: 9.0.1 + resolution: "postcss-calc@npm:9.0.1" + dependencies: + postcss-selector-parser: "npm:^6.0.11" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.2.2 + checksum: 10c0/e0df07337162dbcaac5d6e030c7fd289e21da8766a9daca5d6b2b3c8094bb524ae5d74c70048ea7fe5fe4960ce048c60ac97922d917c3bbff34f58e9d2b0eb0e + languageName: node + linkType: hard + +"postcss-clamp@npm:^4.1.0": + version: 4.1.0 + resolution: "postcss-clamp@npm:4.1.0" + dependencies: + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4.6 + checksum: 10c0/701261026b38a4c27b3c3711635fac96005f36d3270adb76dbdb1eebc950fc841db45283ee66068a7121565592e9d7967d5534e15b6e4dd266afcabf9eafa905 + languageName: node + linkType: hard + +"postcss-color-functional-notation@npm:^7.0.9": + version: 7.0.9 + resolution: "postcss-color-functional-notation@npm:7.0.9" + dependencies: + "@csstools/css-color-parser": "npm:^3.0.9" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + "@csstools/postcss-progressive-custom-properties": "npm:^4.0.1" + "@csstools/utilities": "npm:^2.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/62ffe51ec200df8e01daca3f45b2e05e7e509b57bfe50c880490878aff9bc63ed36cc92db42f0274a21f21330acd8fb1dff6529f7e3a202d100ea74914cf4cfd + languageName: node + linkType: hard + +"postcss-color-hex-alpha@npm:^10.0.0": + version: 10.0.0 + resolution: "postcss-color-hex-alpha@npm:10.0.0" + dependencies: + "@csstools/utilities": "npm:^2.0.0" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/8a6dcb27403d04b55d6de88bf3074622bcea537fc4436bbcb346e92289c4d17059444e2e6c3554c325e7a777bb4cdc711e764a83123b4000aec211052e957d5b + languageName: node + linkType: hard + +"postcss-color-rebeccapurple@npm:^10.0.0": + version: 10.0.0 + resolution: "postcss-color-rebeccapurple@npm:10.0.0" + dependencies: + "@csstools/utilities": "npm:^2.0.0" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/308e33f76f2b48c1c2121d4502fc053e869f3415898de7d30314353df680e79b37497e7b628e3447edc1049091da3672f7d891e45604f238598e846e06b893ed + languageName: node + linkType: hard + +"postcss-colormin@npm:^6.1.0": + version: 6.1.0 + resolution: "postcss-colormin@npm:6.1.0" + dependencies: + browserslist: "npm:^4.23.0" + caniuse-api: "npm:^3.0.0" + colord: "npm:^2.9.3" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4.31 + checksum: 10c0/0802963fa0d8f2fe408b2e088117670f5303c69a58c135f0ecf0e5ceff69e95e87111b22c4e29c9adb2f69aa8d3bc175f4e8e8708eeb99c9ffc36c17064de427 + languageName: node + linkType: hard + +"postcss-convert-values@npm:^6.1.0": + version: 6.1.0 + resolution: "postcss-convert-values@npm:6.1.0" + dependencies: + browserslist: "npm:^4.23.0" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4.31 + checksum: 10c0/a80066965cb58fe8fcaf79f306b32c83fc678e1f0678e43f4db3e9fee06eed6db92cf30631ad348a17492769d44757400493c91a33ee865ee8dedea9234a11f5 + languageName: node + linkType: hard + +"postcss-custom-media@npm:^11.0.5": + version: 11.0.5 + resolution: "postcss-custom-media@npm:11.0.5" + dependencies: + "@csstools/cascade-layer-name-parser": "npm:^2.0.4" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + "@csstools/media-query-list-parser": "npm:^4.0.2" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/5ba1ca0383818e83d5f6f398a2b0c12cfda066b5d552adfc0e030a2c5f8690c2cc6224f9a1832a9c780dae3fd8d00d78c4a5c88eb36b731da1752f0c3917d488 + languageName: node + linkType: hard + +"postcss-custom-properties@npm:^14.0.4": + version: 14.0.4 + resolution: "postcss-custom-properties@npm:14.0.4" + dependencies: + "@csstools/cascade-layer-name-parser": "npm:^2.0.4" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + "@csstools/utilities": "npm:^2.0.0" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/5b101ee71289657cc2e5a16f4912009c10441052e2c54bd9e4f3d4d72b652bab56adb662ddaa96881413e375cf9852e2159b3c778d953442ce86efb781c3b2bf + languageName: node + linkType: hard + +"postcss-custom-selectors@npm:^8.0.4": + version: 8.0.4 + resolution: "postcss-custom-selectors@npm:8.0.4" + dependencies: + "@csstools/cascade-layer-name-parser": "npm:^2.0.4" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + postcss-selector-parser: "npm:^7.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/09d494d2580d0a99f57684f79793d03358286c32460b61a84063c33bdde24865771cb1205efe9a8e26a508be24eba4fb93fc7f1e96ba21ca96a5d17fadb24863 + languageName: node + linkType: hard + +"postcss-dir-pseudo-class@npm:^9.0.1": + version: 9.0.1 + resolution: "postcss-dir-pseudo-class@npm:9.0.1" + dependencies: + postcss-selector-parser: "npm:^7.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/da9d3387648c5c3161a653d354c8f3e70a299108df3977e8aa65cf10793e4dd58a2711b3426cd63716245b13584ca8d95adcd6e10e3c9adbc61d08743e2d8690 + languageName: node + linkType: hard + +"postcss-discard-comments@npm:^6.0.2": + version: 6.0.2 + resolution: "postcss-discard-comments@npm:6.0.2" + peerDependencies: + postcss: ^8.4.31 + checksum: 10c0/338a1fcba7e2314d956e5e5b9bd1e12e6541991bf85ac72aed6e229a029bf60edb31f11576b677623576169aa7d9c75e1be259ac7b50d0b735b841b5518f9da9 + languageName: node + linkType: hard + +"postcss-discard-duplicates@npm:^6.0.3": + version: 6.0.3 + resolution: "postcss-discard-duplicates@npm:6.0.3" + peerDependencies: + postcss: ^8.4.31 + checksum: 10c0/24d2f00e54668f2837eb38a64b1751d7a4a73b2752f9749e61eb728f1fae837984bc2b339f7f5207aff5f66f72551253489114b59b9ba21782072677a81d7d1b + languageName: node + linkType: hard + +"postcss-discard-empty@npm:^6.0.3": + version: 6.0.3 + resolution: "postcss-discard-empty@npm:6.0.3" + peerDependencies: + postcss: ^8.4.31 + checksum: 10c0/1af08bb29f18eda41edf3602b257d89a4cf0a16f79fc773cfebd4a37251f8dbd9b77ac18efe55d0677d000b43a8adf2ef9328d31961c810e9433a38494a1fa65 + languageName: node + linkType: hard + +"postcss-discard-overridden@npm:^6.0.2": + version: 6.0.2 + resolution: "postcss-discard-overridden@npm:6.0.2" + peerDependencies: + postcss: ^8.4.31 + checksum: 10c0/fda70ef3cd4cb508369c5bbbae44d7760c40ec9f2e65df1cd1b6e0314317fb1d25ae7f64987ca84e66889c1e9d1862487a6ce391c159dfe04d536597bfc5030d + languageName: node + linkType: hard + +"postcss-discard-unused@npm:^6.0.5": + version: 6.0.5 + resolution: "postcss-discard-unused@npm:6.0.5" + dependencies: + postcss-selector-parser: "npm:^6.0.16" + peerDependencies: + postcss: ^8.4.31 + checksum: 10c0/fca82f17395a7fcc78eab4e03dfb05958beb240c10cacb3836b832c6ea99f5259980c70890a9b7d8b67adf8071b61f3fcf1b432c7a116397aaf67909366da5cc + languageName: node + linkType: hard + +"postcss-double-position-gradients@npm:^6.0.1": + version: 6.0.1 + resolution: "postcss-double-position-gradients@npm:6.0.1" + dependencies: + "@csstools/postcss-progressive-custom-properties": "npm:^4.0.1" + "@csstools/utilities": "npm:^2.0.0" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/4c6cf3f54b2154cd622cdcaea58a7634c2e19bc0c366c73c46a27a3e31aa280c8721ee2b21cdd5cdca3166052cf5881c16bab2836b8896e71578213957021d52 + languageName: node + linkType: hard + +"postcss-focus-visible@npm:^10.0.1": + version: 10.0.1 + resolution: "postcss-focus-visible@npm:10.0.1" + dependencies: + postcss-selector-parser: "npm:^7.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/c5ecc8536a708a49a99d0abd68a88a160664e6c832c808db8edd9f0221e7017a258daa87e49daf2cb098cb037005d46cf492403c8c9c92ad8835d30adaccf665 + languageName: node + linkType: hard + +"postcss-focus-within@npm:^9.0.1": + version: 9.0.1 + resolution: "postcss-focus-within@npm:9.0.1" + dependencies: + postcss-selector-parser: "npm:^7.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/d6ab49d2a7f33485a9e137dc77ec92c5619a3ec92e1e672734fc604853ff1f3c0c189085c12461614be4fcb03ea0347d91791a45986a18d50b5228d161eda57a + languageName: node + linkType: hard + +"postcss-font-variant@npm:^5.0.0": + version: 5.0.0 + resolution: "postcss-font-variant@npm:5.0.0" + peerDependencies: + postcss: ^8.1.0 + checksum: 10c0/ccc96460cf6a52b5439c26c9a5ea0589882e46161e3c2331d4353de7574448f5feef667d1a68f7f39b9fe3ee75d85957383ae82bbfcf87c3162c7345df4a444e + languageName: node + linkType: hard + +"postcss-gap-properties@npm:^6.0.0": + version: 6.0.0 + resolution: "postcss-gap-properties@npm:6.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/4e07e0d3927d0e65d67eaf047ac39e08d39cb1bf74e16e10c7df7f0d01b184a77ea59f63fd5691b5ed6df159970b972db28cb784d883e26e981137696460897d + languageName: node + linkType: hard + +"postcss-image-set-function@npm:^7.0.0": + version: 7.0.0 + resolution: "postcss-image-set-function@npm:7.0.0" + dependencies: + "@csstools/utilities": "npm:^2.0.0" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/913fd9492f00122aa0c2550fb0d72130428cbe1e6465bc65e8fe71e9deb10ac0c01d7caceb68b560da759139e8cbc6c90ed22dfe6cf34949af49bb86bcbf4d3a + languageName: node + linkType: hard + +"postcss-lab-function@npm:^7.0.9": + version: 7.0.9 + resolution: "postcss-lab-function@npm:7.0.9" + dependencies: + "@csstools/css-color-parser": "npm:^3.0.9" + "@csstools/css-parser-algorithms": "npm:^3.0.4" + "@csstools/css-tokenizer": "npm:^3.0.3" + "@csstools/postcss-progressive-custom-properties": "npm:^4.0.1" + "@csstools/utilities": "npm:^2.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/4180669e7555d474b660d106de5fa1d4a705d693451254123bf56ab6dc1a82e4e175c387868703c14e4637d795d461b5e7f10e74d7b42df55a31f6b52bfa048e + languageName: node + linkType: hard + +"postcss-loader@npm:^7.3.3": + version: 7.3.4 + resolution: "postcss-loader@npm:7.3.4" + dependencies: + cosmiconfig: "npm:^8.3.5" + jiti: "npm:^1.20.0" + semver: "npm:^7.5.4" + peerDependencies: + postcss: ^7.0.0 || ^8.0.1 + webpack: ^5.0.0 + checksum: 10c0/1bf7614aeea9ad1f8ee6be3a5451576c059391688ea67f825aedc2674056369597faeae4e4a81fe10843884c9904a71403d9a54197e1f560e8fbb9e61f2a2680 + languageName: node + linkType: hard + +"postcss-logical@npm:^8.1.0": + version: 8.1.0 + resolution: "postcss-logical@npm:8.1.0" + dependencies: + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/0e2e9e901d8a550db7f682d46b1f7e4f363c1ada061dc8e4548e2b563c5e39f3684a2d7c3f11fe061188782bca37874e34967fc6179fa6d98a49ff66a0076d27 + languageName: node + linkType: hard + +"postcss-merge-idents@npm:^6.0.3": + version: 6.0.3 + resolution: "postcss-merge-idents@npm:6.0.3" + dependencies: + cssnano-utils: "npm:^4.0.2" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4.31 + checksum: 10c0/fdb51d971df33218bd5fdd9619e5a4d854e23affcea51f96bf4391260cb8d0bec937854582fa9a19bde1fa1b2a43fa5a2f179da23a3adeb8e8d292a4749a8ed7 + languageName: node + linkType: hard + +"postcss-merge-longhand@npm:^6.0.5": + version: 6.0.5 + resolution: "postcss-merge-longhand@npm:6.0.5" + dependencies: + postcss-value-parser: "npm:^4.2.0" + stylehacks: "npm:^6.1.1" + peerDependencies: + postcss: ^8.4.31 + checksum: 10c0/5a223a7f698c05ab42e9997108a7ff27ea1e0c33a11a353d65a04fc89c3b5b750b9e749550d76b6406329117a055adfc79dde7fee48dca5c8e167a2854ae3fea + languageName: node + linkType: hard + +"postcss-merge-rules@npm:^6.1.1": + version: 6.1.1 + resolution: "postcss-merge-rules@npm:6.1.1" + dependencies: + browserslist: "npm:^4.23.0" + caniuse-api: "npm:^3.0.0" + cssnano-utils: "npm:^4.0.2" + postcss-selector-parser: "npm:^6.0.16" + peerDependencies: + postcss: ^8.4.31 + checksum: 10c0/6d8952dbb19b1e59bf5affe0871fa1be6515103466857cff5af879d6cf619659f8642ec7a931cabb7cdbd393d8c1e91748bf70bee70fa3edea010d4e25786d04 + languageName: node + linkType: hard + +"postcss-minify-font-values@npm:^6.1.0": + version: 6.1.0 + resolution: "postcss-minify-font-values@npm:6.1.0" + dependencies: + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4.31 + checksum: 10c0/0d6567170c22a7db42096b5eac298f041614890fbe01759a9fa5ccda432f2bb09efd399d92c11bf6675ae13ccd259db4602fad3c358317dee421df5f7ab0a003 + languageName: node + linkType: hard + +"postcss-minify-gradients@npm:^6.0.3": + version: 6.0.3 + resolution: "postcss-minify-gradients@npm:6.0.3" + dependencies: + colord: "npm:^2.9.3" + cssnano-utils: "npm:^4.0.2" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4.31 + checksum: 10c0/7fcbcec94fe5455b89fe1b424a451198e60e0407c894bbacdc062d9fdef2f8571b483b5c3bb17f22d2f1249431251b2de22e1e4e8b0614d10624f8ee6e71afd2 + languageName: node + linkType: hard + +"postcss-minify-params@npm:^6.1.0": + version: 6.1.0 + resolution: "postcss-minify-params@npm:6.1.0" + dependencies: + browserslist: "npm:^4.23.0" + cssnano-utils: "npm:^4.0.2" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4.31 + checksum: 10c0/e5c38c3e5fb42e2ca165764f983716e57d854a63a477f7389ccc94cd2ab8123707006613bd7f29acc6eafd296fff513aa6d869c98ac52590f886d641cb21a59e + languageName: node + linkType: hard + +"postcss-minify-selectors@npm:^6.0.4": + version: 6.0.4 + resolution: "postcss-minify-selectors@npm:6.0.4" + dependencies: + postcss-selector-parser: "npm:^6.0.16" + peerDependencies: + postcss: ^8.4.31 + checksum: 10c0/695ec2e1e3a7812b0cabe1105d0ed491760be3d8e9433914fb5af1fc30a84e6dc24089cd31b7e300de620b8e7adf806526c1acf8dd14077a7d1d2820c60a327c + languageName: node + linkType: hard + +"postcss-modules-extract-imports@npm:^3.1.0": + version: 3.1.0 + resolution: "postcss-modules-extract-imports@npm:3.1.0" + peerDependencies: + postcss: ^8.1.0 + checksum: 10c0/402084bcab376083c4b1b5111b48ec92974ef86066f366f0b2d5b2ac2b647d561066705ade4db89875a13cb175b33dd6af40d16d32b2ea5eaf8bac63bd2bf219 + languageName: node + linkType: hard + +"postcss-modules-local-by-default@npm:^4.0.5": + version: 4.2.0 + resolution: "postcss-modules-local-by-default@npm:4.2.0" + dependencies: + icss-utils: "npm:^5.0.0" + postcss-selector-parser: "npm:^7.0.0" + postcss-value-parser: "npm:^4.1.0" + peerDependencies: + postcss: ^8.1.0 + checksum: 10c0/b0b83feb2a4b61f5383979d37f23116c99bc146eba1741ca3cf1acca0e4d0dbf293ac1810a6ab4eccbe1ee76440dd0a9eb2db5b3bba4f99fc1b3ded16baa6358 + languageName: node + linkType: hard + +"postcss-modules-scope@npm:^3.2.0": + version: 3.2.1 + resolution: "postcss-modules-scope@npm:3.2.1" + dependencies: + postcss-selector-parser: "npm:^7.0.0" + peerDependencies: + postcss: ^8.1.0 + checksum: 10c0/bd2d81f79e3da0ef6365b8e2c78cc91469d05b58046b4601592cdeef6c4050ed8fe1478ae000a1608042fc7e692cb51fecbd2d9bce3f4eace4d32e883ffca10b + languageName: node + linkType: hard + +"postcss-modules-values@npm:^4.0.0": + version: 4.0.0 + resolution: "postcss-modules-values@npm:4.0.0" + dependencies: + icss-utils: "npm:^5.0.0" + peerDependencies: + postcss: ^8.1.0 + checksum: 10c0/dd18d7631b5619fb9921b198c86847a2a075f32e0c162e0428d2647685e318c487a2566cc8cc669fc2077ef38115cde7a068e321f46fb38be3ad49646b639dbc + languageName: node + linkType: hard + +"postcss-nesting@npm:^13.0.1": + version: 13.0.1 + resolution: "postcss-nesting@npm:13.0.1" + dependencies: + "@csstools/selector-resolve-nested": "npm:^3.0.0" + "@csstools/selector-specificity": "npm:^5.0.0" + postcss-selector-parser: "npm:^7.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/549307c272cdd4cb5105d8fbcd582f15a1cb74e5bba240b05b27f77fe0422730be966699a49a9ad15fd9d1bc551c1edbaefb21a69686a9b131b585dbc9d90ebf + languageName: node + linkType: hard + +"postcss-normalize-charset@npm:^6.0.2": + version: 6.0.2 + resolution: "postcss-normalize-charset@npm:6.0.2" + peerDependencies: + postcss: ^8.4.31 + checksum: 10c0/af32a3b4cf94163d728b8aa935b2494c9f69fbc96a33b35f67ae15dbdef7fcc8732569df97cbaaf20ca6c0103c39adad0cfce2ba07ffed283796787f6c36f410 + languageName: node + linkType: hard + +"postcss-normalize-display-values@npm:^6.0.2": + version: 6.0.2 + resolution: "postcss-normalize-display-values@npm:6.0.2" + dependencies: + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4.31 + checksum: 10c0/782761850c7e697fdb6c3ff53076de716a71b60f9e835efb2f7ef238de347c88b5d55f0d43cf5c608e1ee58de65360e3d9fccd5f20774bba08ded7c87d8a5651 + languageName: node + linkType: hard + +"postcss-normalize-positions@npm:^6.0.2": + version: 6.0.2 + resolution: "postcss-normalize-positions@npm:6.0.2" + dependencies: + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4.31 + checksum: 10c0/9fdd42a47226bbda5f68774f3c4c3a90eb4fa708aef5a997c6a52fe6cac06585c9774038fe3bc1aa86a203c29223b8d8db6ebe7580c1aa293154f2b48db0b038 + languageName: node + linkType: hard + +"postcss-normalize-repeat-style@npm:^6.0.2": + version: 6.0.2 + resolution: "postcss-normalize-repeat-style@npm:6.0.2" + dependencies: + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4.31 + checksum: 10c0/9133ccbdf1286920c1cd0d01c1c5fa0bd3251b717f2f3e47d691dcc44978ac1dc419d20d9ae5428bd48ee542059e66b823ba699356f5968ccced5606c7c7ca34 + languageName: node + linkType: hard + +"postcss-normalize-string@npm:^6.0.2": + version: 6.0.2 + resolution: "postcss-normalize-string@npm:6.0.2" + dependencies: + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4.31 + checksum: 10c0/fecc2d52c4029b24fecf2ca2fb45df5dbdf9f35012194ad4ea80bc7be3252cdcb21a0976400902320595aa6178f2cc625cc804c6b6740aef6efa42105973a205 + languageName: node + linkType: hard + +"postcss-normalize-timing-functions@npm:^6.0.2": + version: 6.0.2 + resolution: "postcss-normalize-timing-functions@npm:6.0.2" + dependencies: + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4.31 + checksum: 10c0/a22af0b3374704e59ae70bbbcc66b7029137e284f04e30a2ad548818d1540d6c1ed748dd8f689b9b6df5c1064085a00ad07b6f7e25ffaad49d4e661b616cdeae + languageName: node + linkType: hard + +"postcss-normalize-unicode@npm:^6.1.0": + version: 6.1.0 + resolution: "postcss-normalize-unicode@npm:6.1.0" + dependencies: + browserslist: "npm:^4.23.0" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4.31 + checksum: 10c0/ff5746670d94dd97b49a0955c3c71ff516fb4f54bbae257f877d179bacc44a62e50a0fd6e7ddf959f2ca35c335de4266b0c275d880bb57ad7827189339ab1582 + languageName: node + linkType: hard + +"postcss-normalize-url@npm:^6.0.2": + version: 6.0.2 + resolution: "postcss-normalize-url@npm:6.0.2" + dependencies: + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4.31 + checksum: 10c0/4718f1c0657788d2c560b340ee8e0a4eb3eb053eba6fbbf489e9a6e739b4c5f9ce1957f54bd03497c50a1f39962bf6ab9ff6ba4976b69dd160f6afd1670d69b7 + languageName: node + linkType: hard + +"postcss-normalize-whitespace@npm:^6.0.2": + version: 6.0.2 + resolution: "postcss-normalize-whitespace@npm:6.0.2" + dependencies: + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4.31 + checksum: 10c0/d5275a88e29a894aeb83a2a833e816d2456dbf3f39961628df596ce205dcc4895186a023812ff691945e0804241ccc53e520d16591b5812288474b474bbaf652 + languageName: node + linkType: hard + +"postcss-opacity-percentage@npm:^3.0.0": + version: 3.0.0 + resolution: "postcss-opacity-percentage@npm:3.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/15c7d66036fa966d265c8737196646b3f93deb83d4eea0b17ed5033460599afc31d3a989345e4d7c472963b2a2bb75c83d06979d5d30d6a60fcc7f74cb6d8d40 + languageName: node + linkType: hard + +"postcss-ordered-values@npm:^6.0.2": + version: 6.0.2 + resolution: "postcss-ordered-values@npm:6.0.2" + dependencies: + cssnano-utils: "npm:^4.0.2" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4.31 + checksum: 10c0/aece23a289228aa804217a85f8da198d22b9123f02ca1310b81834af380d6fbe115e4300683599b4a2ab7f1c6a1dbd6789724c47c38e2b0a3774f2ea4b4f0963 + languageName: node + linkType: hard + +"postcss-overflow-shorthand@npm:^6.0.0": + version: 6.0.0 + resolution: "postcss-overflow-shorthand@npm:6.0.0" + dependencies: + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/6598321b2ed0b68461135395bba9c7f76a4672617770df1e8487f459bc975f4ded6c3d37b6f72a44f4f77f7b6789e0c6f927e66dbbf1bcde1537167dbea39968 + languageName: node + linkType: hard + +"postcss-page-break@npm:^3.0.4": + version: 3.0.4 + resolution: "postcss-page-break@npm:3.0.4" + peerDependencies: + postcss: ^8 + checksum: 10c0/eaaf4d8922b35f2acd637eb059f7e2510b24d65eb8f31424799dd5a98447b6ef010b41880c26e78f818e00f842295638ec75f89d5d489067f53e3dd3db74a00f + languageName: node + linkType: hard + +"postcss-place@npm:^10.0.0": + version: 10.0.0 + resolution: "postcss-place@npm:10.0.0" + dependencies: + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/ebb13deaac7648ba6042622375a31f78fbcc5209b7d196e478debbdf94525963fe621c932f4737a5b6b3d487af3b5ed6d059ed6193fdcbff6d3d5b150886ccc1 + languageName: node + linkType: hard + +"postcss-preset-env@npm:^10.1.0": + version: 10.1.6 + resolution: "postcss-preset-env@npm:10.1.6" + dependencies: + "@csstools/postcss-cascade-layers": "npm:^5.0.1" + "@csstools/postcss-color-function": "npm:^4.0.9" + "@csstools/postcss-color-mix-function": "npm:^3.0.9" + "@csstools/postcss-content-alt-text": "npm:^2.0.5" + "@csstools/postcss-exponential-functions": "npm:^2.0.8" + "@csstools/postcss-font-format-keywords": "npm:^4.0.0" + "@csstools/postcss-gamut-mapping": "npm:^2.0.9" + "@csstools/postcss-gradients-interpolation-method": "npm:^5.0.9" + "@csstools/postcss-hwb-function": "npm:^4.0.9" + "@csstools/postcss-ic-unit": "npm:^4.0.1" + "@csstools/postcss-initial": "npm:^2.0.1" + "@csstools/postcss-is-pseudo-class": "npm:^5.0.1" + "@csstools/postcss-light-dark-function": "npm:^2.0.8" + "@csstools/postcss-logical-float-and-clear": "npm:^3.0.0" + "@csstools/postcss-logical-overflow": "npm:^2.0.0" + "@csstools/postcss-logical-overscroll-behavior": "npm:^2.0.0" + "@csstools/postcss-logical-resize": "npm:^3.0.0" + "@csstools/postcss-logical-viewport-units": "npm:^3.0.3" + "@csstools/postcss-media-minmax": "npm:^2.0.8" + "@csstools/postcss-media-queries-aspect-ratio-number-values": "npm:^3.0.4" + "@csstools/postcss-nested-calc": "npm:^4.0.0" + "@csstools/postcss-normalize-display-values": "npm:^4.0.0" + "@csstools/postcss-oklab-function": "npm:^4.0.9" + "@csstools/postcss-progressive-custom-properties": "npm:^4.0.1" + "@csstools/postcss-random-function": "npm:^2.0.0" + "@csstools/postcss-relative-color-syntax": "npm:^3.0.9" + "@csstools/postcss-scope-pseudo-class": "npm:^4.0.1" + "@csstools/postcss-sign-functions": "npm:^1.1.3" + "@csstools/postcss-stepped-value-functions": "npm:^4.0.8" + "@csstools/postcss-text-decoration-shorthand": "npm:^4.0.2" + "@csstools/postcss-trigonometric-functions": "npm:^4.0.8" + "@csstools/postcss-unset-value": "npm:^4.0.0" + autoprefixer: "npm:^10.4.21" + browserslist: "npm:^4.24.4" + css-blank-pseudo: "npm:^7.0.1" + css-has-pseudo: "npm:^7.0.2" + css-prefers-color-scheme: "npm:^10.0.0" + cssdb: "npm:^8.2.5" + postcss-attribute-case-insensitive: "npm:^7.0.1" + postcss-clamp: "npm:^4.1.0" + postcss-color-functional-notation: "npm:^7.0.9" + postcss-color-hex-alpha: "npm:^10.0.0" + postcss-color-rebeccapurple: "npm:^10.0.0" + postcss-custom-media: "npm:^11.0.5" + postcss-custom-properties: "npm:^14.0.4" + postcss-custom-selectors: "npm:^8.0.4" + postcss-dir-pseudo-class: "npm:^9.0.1" + postcss-double-position-gradients: "npm:^6.0.1" + postcss-focus-visible: "npm:^10.0.1" + postcss-focus-within: "npm:^9.0.1" + postcss-font-variant: "npm:^5.0.0" + postcss-gap-properties: "npm:^6.0.0" + postcss-image-set-function: "npm:^7.0.0" + postcss-lab-function: "npm:^7.0.9" + postcss-logical: "npm:^8.1.0" + postcss-nesting: "npm:^13.0.1" + postcss-opacity-percentage: "npm:^3.0.0" + postcss-overflow-shorthand: "npm:^6.0.0" + postcss-page-break: "npm:^3.0.4" + postcss-place: "npm:^10.0.0" + postcss-pseudo-class-any-link: "npm:^10.0.1" + postcss-replace-overflow-wrap: "npm:^4.0.0" + postcss-selector-not: "npm:^8.0.1" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/89af9060f3528e254005e6b81e88c57589e6e7f74125b10d50ca8a05f830c9ac206f8197af1b3c4b7ba82d97993118dd121f1a11cfc9fd026e18d01ca6f7ad2d + languageName: node + linkType: hard + +"postcss-pseudo-class-any-link@npm:^10.0.1": + version: 10.0.1 + resolution: "postcss-pseudo-class-any-link@npm:10.0.1" + dependencies: + postcss-selector-parser: "npm:^7.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/95e883996e87baf14fc09d25f9a763a2e9d599eb3b9c6b736e83a8c3d0b55841bcb886bccdf51b5b7fefc128cbd0187ad8841f59878f85bd1613642e592d7673 + languageName: node + linkType: hard + +"postcss-reduce-idents@npm:^6.0.3": + version: 6.0.3 + resolution: "postcss-reduce-idents@npm:6.0.3" + dependencies: + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4.31 + checksum: 10c0/d9f9209e52ebb3d1d7feefc0be24fc74792e064e0fdec99554f050c6b882c61073d5d40986c545061b30e5ead881615e92c965dc765d8d83b2dec10d6a664e1f + languageName: node + linkType: hard + +"postcss-reduce-initial@npm:^6.1.0": + version: 6.1.0 + resolution: "postcss-reduce-initial@npm:6.1.0" + dependencies: + browserslist: "npm:^4.23.0" + caniuse-api: "npm:^3.0.0" + peerDependencies: + postcss: ^8.4.31 + checksum: 10c0/a8f28cf51ce9a1b9423cce1a01c1d7cbee90125930ec36435a0073e73aef402d90affe2fd3600c964b679cf738869fda447b95a9acce74414e9d67d5c6ba8646 + languageName: node + linkType: hard + +"postcss-reduce-transforms@npm:^6.0.2": + version: 6.0.2 + resolution: "postcss-reduce-transforms@npm:6.0.2" + dependencies: + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4.31 + checksum: 10c0/755ef27b3d083f586ac831f0c611a66e76f504d27e2100dc7674f6b86afad597901b4520cb889fe58ca70e852aa7fd0c0acb69a63d39dfe6a95860b472394e7c + languageName: node + linkType: hard + +"postcss-replace-overflow-wrap@npm:^4.0.0": + version: 4.0.0 + resolution: "postcss-replace-overflow-wrap@npm:4.0.0" + peerDependencies: + postcss: ^8.0.3 + checksum: 10c0/451361b714528cd3632951256ef073769cde725a46cda642a6864f666fb144921fa55e614aec1bcf5946f37d6ffdcca3b932b76f3d997c07b076e8db152b128d + languageName: node + linkType: hard + +"postcss-selector-not@npm:^8.0.1": + version: 8.0.1 + resolution: "postcss-selector-not@npm:8.0.1" + dependencies: + postcss-selector-parser: "npm:^7.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10c0/491ea3dcc421cd90135be786078521605e2062fb93624ea8813cfd5ba0d35143f931e2e608d5f20effd5ea7d3f4786d2afea2afa42d117779a0288e135f132b6 + languageName: node + linkType: hard + +"postcss-selector-parser@npm:^6.0.11, postcss-selector-parser@npm:^6.0.16": + version: 6.1.2 + resolution: "postcss-selector-parser@npm:6.1.2" + dependencies: + cssesc: "npm:^3.0.0" + util-deprecate: "npm:^1.0.2" + checksum: 10c0/523196a6bd8cf660bdf537ad95abd79e546d54180f9afb165a4ab3e651ac705d0f8b8ce6b3164fb9e3279ce482c5f751a69eb2d3a1e8eb0fd5e82294fb3ef13e + languageName: node + linkType: hard + +"postcss-selector-parser@npm:^7.0.0": + version: 7.1.0 + resolution: "postcss-selector-parser@npm:7.1.0" + dependencies: + cssesc: "npm:^3.0.0" + util-deprecate: "npm:^1.0.2" + checksum: 10c0/0fef257cfd1c0fe93c18a3f8a6e739b4438b527054fd77e9a62730a89b2d0ded1b59314a7e4aaa55bc256204f40830fecd2eb50f20f8cb7ab3a10b52aa06c8aa + languageName: node + linkType: hard + +"postcss-sort-media-queries@npm:^5.2.0": + version: 5.2.0 + resolution: "postcss-sort-media-queries@npm:5.2.0" + dependencies: + sort-css-media-queries: "npm:2.2.0" + peerDependencies: + postcss: ^8.4.23 + checksum: 10c0/5e7f265a21999bdbf6592f7e15b3e889dd93bc9b15fe048958e8f85603ac276e69ef50305e8b41b10f4eea68917c9c25c7956fa9c3ba7f8577c1149416d35c4e + languageName: node + linkType: hard + +"postcss-svgo@npm:^6.0.3": + version: 6.0.3 + resolution: "postcss-svgo@npm:6.0.3" + dependencies: + postcss-value-parser: "npm:^4.2.0" + svgo: "npm:^3.2.0" + peerDependencies: + postcss: ^8.4.31 + checksum: 10c0/994b15a88cbb411f32cfa98957faa5623c76f2d75fede51f5f47238f06b367ebe59c204fecbdaf21ccb9e727239a4b290087e04c502392658a0c881ddfbd61f2 + languageName: node + linkType: hard + +"postcss-unique-selectors@npm:^6.0.4": + version: 6.0.4 + resolution: "postcss-unique-selectors@npm:6.0.4" + dependencies: + postcss-selector-parser: "npm:^6.0.16" + peerDependencies: + postcss: ^8.4.31 + checksum: 10c0/bfb99d8a7c675c93f2e65c9d9d563477bfd46fdce9e2727d42d57982b31ccbaaf944e8034bfbefe48b3119e77fba7eb1b181c19b91cb3a5448058fa66a7c9ae9 + languageName: node + linkType: hard + +"postcss-value-parser@npm:^4.1.0, postcss-value-parser@npm:^4.2.0": + version: 4.2.0 + resolution: "postcss-value-parser@npm:4.2.0" + checksum: 10c0/f4142a4f56565f77c1831168e04e3effd9ffcc5aebaf0f538eee4b2d465adfd4b85a44257bb48418202a63806a7da7fe9f56c330aebb3cac898e46b4cbf49161 + languageName: node + linkType: hard + +"postcss-zindex@npm:^6.0.2": + version: 6.0.2 + resolution: "postcss-zindex@npm:6.0.2" + peerDependencies: + postcss: ^8.4.31 + checksum: 10c0/346291703e1f2dd954144d2bb251713dad6ae10e8aa05c3873dee2fc7a30d72da7866bec060abd932b9b839bc1495f73d813dde5312750a69d7ad33c435ce7ea + languageName: node + linkType: hard + +"postcss@npm:^8.4.21, postcss@npm:^8.4.24, postcss@npm:^8.4.26, postcss@npm:^8.4.33, postcss@npm:^8.4.38": + version: 8.5.3 + resolution: "postcss@npm:8.5.3" + dependencies: + nanoid: "npm:^3.3.8" + picocolors: "npm:^1.1.1" + source-map-js: "npm:^1.2.1" + checksum: 10c0/b75510d7b28c3ab728c8733dd01538314a18c52af426f199a3c9177e63eb08602a3938bfb66b62dc01350b9aed62087eabbf229af97a1659eb8d3513cec823b3 + languageName: node + linkType: hard + +"pretty-error@npm:^4.0.0": + version: 4.0.0 + resolution: "pretty-error@npm:4.0.0" + dependencies: + lodash: "npm:^4.17.20" + renderkid: "npm:^3.0.0" + checksum: 10c0/dc292c087e2857b2e7592784ab31e37a40f3fa918caa11eba51f9fb2853e1d4d6e820b219917e35f5721d833cfd20fdf4f26ae931a90fd1ad0cae2125c345138 + languageName: node + linkType: hard + +"pretty-time@npm:^1.1.0": + version: 1.1.0 + resolution: "pretty-time@npm:1.1.0" + checksum: 10c0/ba9d7af19cd43838fb2b147654990949575e400dc2cc24bf71ec4a6c4033a38ba8172b1014b597680c6d4d3c075e94648b2c13a7206c5f0c90b711c7388726f3 + languageName: node + linkType: hard + +"prism-react-renderer@npm:^2.1.0, prism-react-renderer@npm:^2.3.0": + version: 2.4.1 + resolution: "prism-react-renderer@npm:2.4.1" + dependencies: + "@types/prismjs": "npm:^1.26.0" + clsx: "npm:^2.0.0" + peerDependencies: + react: ">=16.0.0" + checksum: 10c0/ebbe8feb975224344bbdd046b3a937d121592dbe4b8f22ba0be31f5af37b9a8219f441138ef6cab1c5b96f2aa6b529015200959f7e5e85b60ca69c81d35edcd4 + languageName: node + linkType: hard + +"prismjs@npm:^1.29.0": + version: 1.30.0 + resolution: "prismjs@npm:1.30.0" + checksum: 10c0/f56205bfd58ef71ccfcbcb691fd0eb84adc96c6ff21b0b69fc6fdcf02be42d6ef972ba4aed60466310de3d67733f6a746f89f2fb79c00bf217406d465b3e8f23 + languageName: node + linkType: hard + +"proc-log@npm:^5.0.0": + version: 5.0.0 + resolution: "proc-log@npm:5.0.0" + checksum: 10c0/bbe5edb944b0ad63387a1d5b1911ae93e05ce8d0f60de1035b218cdcceedfe39dbd2c697853355b70f1a090f8f58fe90da487c85216bf9671f9499d1a897e9e3 + languageName: node + linkType: hard + +"process-nextick-args@npm:~2.0.0": + version: 2.0.1 + resolution: "process-nextick-args@npm:2.0.1" + checksum: 10c0/bec089239487833d46b59d80327a1605e1c5287eaad770a291add7f45fda1bb5e28b38e0e061add0a1d0ee0984788ce74fa394d345eed1c420cacf392c554367 + languageName: node + linkType: hard + +"promise-retry@npm:^2.0.1": + version: 2.0.1 + resolution: "promise-retry@npm:2.0.1" + dependencies: + err-code: "npm:^2.0.2" + retry: "npm:^0.12.0" + checksum: 10c0/9c7045a1a2928094b5b9b15336dcd2a7b1c052f674550df63cc3f36cd44028e5080448175b6f6ca32b642de81150f5e7b1a98b728f15cb069f2dd60ac2616b96 + languageName: node + linkType: hard + +"prompts@npm:^2.4.2": + version: 2.4.2 + resolution: "prompts@npm:2.4.2" + dependencies: + kleur: "npm:^3.0.3" + sisteransi: "npm:^1.0.5" + checksum: 10c0/16f1ac2977b19fe2cf53f8411cc98db7a3c8b115c479b2ca5c82b5527cd937aa405fa04f9a5960abeb9daef53191b53b4d13e35c1f5d50e8718c76917c5f1ea4 + languageName: node + linkType: hard + +"prop-types@npm:^15.6.2, prop-types@npm:^15.7.2": + version: 15.8.1 + resolution: "prop-types@npm:15.8.1" + dependencies: + loose-envify: "npm:^1.4.0" + object-assign: "npm:^4.1.1" + react-is: "npm:^16.13.1" + checksum: 10c0/59ece7ca2fb9838031d73a48d4becb9a7cc1ed10e610517c7d8f19a1e02fa47f7c27d557d8a5702bec3cfeccddc853579832b43f449e54635803f277b1c78077 + languageName: node + linkType: hard + +"propagate@npm:^2.0.0": + version: 2.0.1 + resolution: "propagate@npm:2.0.1" + checksum: 10c0/01e1023b60ae4050d1a2783f976d7db702022dbdb70dba797cceedad8cfc01b3939c41e77032f8c32aa9d93192fe937ebba1345e8604e5ce61fd3b62ee3003b8 + languageName: node + linkType: hard + +"property-information@npm:^6.0.0": + version: 6.5.0 + resolution: "property-information@npm:6.5.0" + checksum: 10c0/981e0f9cc2e5acdb414a6fd48a99dd0fd3a4079e7a91ab41cf97a8534cf43e0e0bc1ffada6602a1b3d047a33db8b5fc2ef46d863507eda712d5ceedac443f0ef + languageName: node + linkType: hard + +"property-information@npm:^7.0.0": + version: 7.1.0 + resolution: "property-information@npm:7.1.0" + checksum: 10c0/e0fe22cff26103260ad0e82959229106563fa115a54c4d6c183f49d88054e489cc9f23452d3ad584179dc13a8b7b37411a5df873746b5e4086c865874bfa968e + languageName: node + linkType: hard + +"proto-list@npm:~1.2.1": + version: 1.2.4 + resolution: "proto-list@npm:1.2.4" + checksum: 10c0/b9179f99394ec8a68b8afc817690185f3b03933f7b46ce2e22c1930dc84b60d09f5ad222beab4e59e58c6c039c7f7fcf620397235ef441a356f31f9744010e12 + languageName: node + linkType: hard + +"proxy-addr@npm:~2.0.7": + version: 2.0.7 + resolution: "proxy-addr@npm:2.0.7" + dependencies: + forwarded: "npm:0.2.0" + ipaddr.js: "npm:1.9.1" + checksum: 10c0/c3eed999781a35f7fd935f398b6d8920b6fb00bbc14287bc6de78128ccc1a02c89b95b56742bf7cf0362cc333c61d138532049c7dedc7a328ef13343eff81210 + languageName: node + linkType: hard + +"punycode@npm:^2.1.0, punycode@npm:^2.3.1": + version: 2.3.1 + resolution: "punycode@npm:2.3.1" + checksum: 10c0/14f76a8206bc3464f794fb2e3d3cc665ae416c01893ad7a02b23766eb07159144ee612ad67af5e84fa4479ccfe67678c4feb126b0485651b302babf66f04f9e9 + languageName: node + linkType: hard + +"pupa@npm:^3.1.0": + version: 3.1.0 + resolution: "pupa@npm:3.1.0" + dependencies: + escape-goat: "npm:^4.0.0" + checksum: 10c0/02afa6e4547a733484206aaa8f8eb3fbfb12d3dd17d7ca4fa1ea390a7da2cb8f381e38868bbf68009c4d372f8f6059f553171b6a712d8f2802c7cd43d513f06c + languageName: node + linkType: hard + +"qs@npm:6.13.0": + version: 6.13.0 + resolution: "qs@npm:6.13.0" + dependencies: + side-channel: "npm:^1.0.6" + checksum: 10c0/62372cdeec24dc83a9fb240b7533c0fdcf0c5f7e0b83343edd7310f0ab4c8205a5e7c56406531f2e47e1b4878a3821d652be4192c841de5b032ca83619d8f860 + languageName: node + linkType: hard + +"queue-microtask@npm:^1.2.2": + version: 1.2.3 + resolution: "queue-microtask@npm:1.2.3" + checksum: 10c0/900a93d3cdae3acd7d16f642c29a642aea32c2026446151f0778c62ac089d4b8e6c986811076e1ae180a694cedf077d453a11b58ff0a865629a4f82ab558e102 + languageName: node + linkType: hard + +"queue@npm:6.0.2": + version: 6.0.2 + resolution: "queue@npm:6.0.2" + dependencies: + inherits: "npm:~2.0.3" + checksum: 10c0/cf987476cc72e7d3aaabe23ccefaab1cd757a2b5e0c8d80b67c9575a6b5e1198807ffd4f0948a3f118b149d1111d810ee773473530b77a5c606673cac2c9c996 + languageName: node + linkType: hard + +"quick-lru@npm:^5.1.1": + version: 5.1.1 + resolution: "quick-lru@npm:5.1.1" + checksum: 10c0/a24cba5da8cec30d70d2484be37622580f64765fb6390a928b17f60cd69e8dbd32a954b3ff9176fa1b86d86ff2ba05252fae55dc4d40d0291c60412b0ad096da + languageName: node + linkType: hard + +"randombytes@npm:^2.1.0": + version: 2.1.0 + resolution: "randombytes@npm:2.1.0" + dependencies: + safe-buffer: "npm:^5.1.0" + checksum: 10c0/50395efda7a8c94f5dffab564f9ff89736064d32addf0cc7e8bf5e4166f09f8ded7a0849ca6c2d2a59478f7d90f78f20d8048bca3cdf8be09d8e8a10790388f3 + languageName: node + linkType: hard + +"range-parser@npm:1.2.0": + version: 1.2.0 + resolution: "range-parser@npm:1.2.0" + checksum: 10c0/c7aef4f6588eb974c475649c157f197d07437d8c6c8ff7e36280a141463fb5ab7a45918417334ebd7b665c6b8321cf31c763f7631dd5f5db9372249261b8b02a + languageName: node + linkType: hard + +"range-parser@npm:^1.2.1, range-parser@npm:~1.2.1": + version: 1.2.1 + resolution: "range-parser@npm:1.2.1" + checksum: 10c0/96c032ac2475c8027b7a4e9fe22dc0dfe0f6d90b85e496e0f016fbdb99d6d066de0112e680805075bd989905e2123b3b3d002765149294dce0c1f7f01fcc2ea0 + languageName: node + linkType: hard + +"raw-body@npm:2.5.2": + version: 2.5.2 + resolution: "raw-body@npm:2.5.2" + dependencies: + bytes: "npm:3.1.2" + http-errors: "npm:2.0.0" + iconv-lite: "npm:0.4.24" + unpipe: "npm:1.0.0" + checksum: 10c0/b201c4b66049369a60e766318caff5cb3cc5a900efd89bdac431463822d976ad0670912c931fdbdcf5543207daf6f6833bca57aa116e1661d2ea91e12ca692c4 + languageName: node + linkType: hard + +"rc@npm:1.2.8": + version: 1.2.8 + resolution: "rc@npm:1.2.8" + dependencies: + deep-extend: "npm:^0.6.0" + ini: "npm:~1.3.0" + minimist: "npm:^1.2.0" + strip-json-comments: "npm:~2.0.1" + bin: + rc: ./cli.js + checksum: 10c0/24a07653150f0d9ac7168e52943cc3cb4b7a22c0e43c7dff3219977c2fdca5a2760a304a029c20811a0e79d351f57d46c9bde216193a0f73978496afc2b85b15 + languageName: node + linkType: hard + +"react-dev-utils@npm:^12.0.1": + version: 12.0.1 + resolution: "react-dev-utils@npm:12.0.1" + dependencies: + "@babel/code-frame": "npm:^7.16.0" + address: "npm:^1.1.2" + browserslist: "npm:^4.18.1" + chalk: "npm:^4.1.2" + cross-spawn: "npm:^7.0.3" + detect-port-alt: "npm:^1.1.6" + escape-string-regexp: "npm:^4.0.0" + filesize: "npm:^8.0.6" + find-up: "npm:^5.0.0" + fork-ts-checker-webpack-plugin: "npm:^6.5.0" + global-modules: "npm:^2.0.0" + globby: "npm:^11.0.4" + gzip-size: "npm:^6.0.0" + immer: "npm:^9.0.7" + is-root: "npm:^2.1.0" + loader-utils: "npm:^3.2.0" + open: "npm:^8.4.0" + pkg-up: "npm:^3.1.0" + prompts: "npm:^2.4.2" + react-error-overlay: "npm:^6.0.11" + recursive-readdir: "npm:^2.2.2" + shell-quote: "npm:^1.7.3" + strip-ansi: "npm:^6.0.1" + text-table: "npm:^0.2.0" + checksum: 10c0/94bc4ee5014290ca47a025e53ab2205c5dc0299670724d46a0b1bacbdd48904827b5ae410842d0a3a92481509097ae032e4a9dc7ca70db437c726eaba6411e82 + languageName: node + linkType: hard + +"react-dom@npm:^18.2.0": + version: 18.3.1 + resolution: "react-dom@npm:18.3.1" + dependencies: + loose-envify: "npm:^1.1.0" + scheduler: "npm:^0.23.2" + peerDependencies: + react: ^18.3.1 + checksum: 10c0/a752496c1941f958f2e8ac56239172296fcddce1365ce45222d04a1947e0cc5547df3e8447f855a81d6d39f008d7c32eab43db3712077f09e3f67c4874973e85 + languageName: node + linkType: hard + +"react-error-overlay@npm:^6.0.11": + version: 6.1.0 + resolution: "react-error-overlay@npm:6.1.0" + checksum: 10c0/2b52308b9e489dfaa25df85c7ed5c200371bc214245161a0833b729f9c6b1a2e591e1d1e07c3d3859ffa19b84a386c219d93df9ba13d819be34c20f40e71a555 + languageName: node + linkType: hard + +"react-fast-compare@npm:^3.2.0": + version: 3.2.2 + resolution: "react-fast-compare@npm:3.2.2" + checksum: 10c0/0bbd2f3eb41ab2ff7380daaa55105db698d965c396df73e6874831dbafec8c4b5b08ba36ff09df01526caa3c61595247e3269558c284e37646241cba2b90a367 + languageName: node + linkType: hard + +"react-helmet-async@npm:@slorber/react-helmet-async@*, react-helmet-async@npm:@slorber/react-helmet-async@1.3.0": + version: 1.3.0 + resolution: "@slorber/react-helmet-async@npm:1.3.0" + dependencies: + "@babel/runtime": "npm:^7.12.5" + invariant: "npm:^2.2.4" + prop-types: "npm:^15.7.2" + react-fast-compare: "npm:^3.2.0" + shallowequal: "npm:^1.1.0" + peerDependencies: + react: ^16.6.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.6.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + checksum: 10c0/7a13470a0d27d6305657c7fa6b066443c94acdb22bd0decca772298bc852ce04fdc65f1207f0d546995bf7d4ca09e21c81f96b4954544937c01eda82e2caa142 + languageName: node + linkType: hard + +"react-icons@npm:^4.12.0": + version: 4.12.0 + resolution: "react-icons@npm:4.12.0" + peerDependencies: + react: "*" + checksum: 10c0/2170f43031ee7365539f72d4075cbe6c7fbf9a66d6cf4494aa9393b194272da0564f5b19d1b24dbfc567c0ac89f5fe5b8974d92dd83f61e252388dde6a226fb8 + languageName: node + linkType: hard + +"react-is@npm:^16.13.1, react-is@npm:^16.6.0, react-is@npm:^16.7.0": + version: 16.13.1 + resolution: "react-is@npm:16.13.1" + checksum: 10c0/33977da7a5f1a287936a0c85639fec6ca74f4f15ef1e59a6bc20338fc73dc69555381e211f7a3529b8150a1f71e4225525b41b60b52965bda53ce7d47377ada1 + languageName: node + linkType: hard + +"react-json-view-lite@npm:^1.2.0": + version: 1.5.0 + resolution: "react-json-view-lite@npm:1.5.0" + peerDependencies: + react: ^16.13.1 || ^17.0.0 || ^18.0.0 + checksum: 10c0/e707717cb6b9d6cca5b138cdfb066e35ee7e493d1c88d4497e3a3a42b7651c8ff924ff53ad2da142a12b23b11379d39f38d8eee278c98c46cd6bc8844864b285 + languageName: node + linkType: hard + +"react-loadable-ssr-addon-v5-slorber@npm:^1.0.1": + version: 1.0.1 + resolution: "react-loadable-ssr-addon-v5-slorber@npm:1.0.1" + dependencies: + "@babel/runtime": "npm:^7.10.3" + peerDependencies: + react-loadable: "*" + webpack: ">=4.41.1 || 5.x" + checksum: 10c0/7b0645f66adec56646f985ba8094c66a1c0a4627d96ad80eea32431d773ef1f79aa47d3247a8f21db3b064a0c6091653c5b5d3483b7046722eb64e55bffe635c + languageName: node + linkType: hard + +"react-loadable@npm:@docusaurus/react-loadable@6.0.0": + version: 6.0.0 + resolution: "@docusaurus/react-loadable@npm:6.0.0" + dependencies: + "@types/react": "npm:*" + peerDependencies: + react: "*" + checksum: 10c0/6b145d1a8d2e7342ceef58dd154aa990322f72a6cb98955ab8ce8e3f0dc7f0c5d00f9c2e4efa8d356c5effed72a130b5588857332b11faba0398f5429b484b04 + languageName: node + linkType: hard + +"react-router-config@npm:^5.1.1": + version: 5.1.1 + resolution: "react-router-config@npm:5.1.1" + dependencies: + "@babel/runtime": "npm:^7.1.2" + peerDependencies: + react: ">=15" + react-router: ">=5" + checksum: 10c0/1f8f4e55ca68b7b012293e663eb0ee4d670a3df929b78928f713ef98cd9d62c7f5c30a098d6668e64bbb11c7d6bb24e9e6b9c985a8b82465a1858dc7ba663f2b + languageName: node + linkType: hard + +"react-router-dom@npm:^5.3.4": + version: 5.3.4 + resolution: "react-router-dom@npm:5.3.4" + dependencies: + "@babel/runtime": "npm:^7.12.13" + history: "npm:^4.9.0" + loose-envify: "npm:^1.3.1" + prop-types: "npm:^15.6.2" + react-router: "npm:5.3.4" + tiny-invariant: "npm:^1.0.2" + tiny-warning: "npm:^1.0.0" + peerDependencies: + react: ">=15" + checksum: 10c0/f04f727e2ed2e9d1d3830af02cc61690ff67b1524c0d18690582bfba0f4d14142ccc88fb6da6befad644fddf086f5ae4c2eb7048c67da8a0b0929c19426421b0 + languageName: node + linkType: hard + +"react-router@npm:5.3.4, react-router@npm:^5.3.4": + version: 5.3.4 + resolution: "react-router@npm:5.3.4" + dependencies: + "@babel/runtime": "npm:^7.12.13" + history: "npm:^4.9.0" + hoist-non-react-statics: "npm:^3.1.0" + loose-envify: "npm:^1.3.1" + path-to-regexp: "npm:^1.7.0" + prop-types: "npm:^15.6.2" + react-is: "npm:^16.6.0" + tiny-invariant: "npm:^1.0.2" + tiny-warning: "npm:^1.0.0" + peerDependencies: + react: ">=15" + checksum: 10c0/e15c00dfef199249b4c6e6d98e5e76cc352ce66f3270f13df37cc069ddf7c05e43281e8c308fc407e4435d72924373baef1d2890e0f6b0b1eb423cf47315a053 + languageName: node + linkType: hard + +"react@npm:^18.2.0": + version: 18.3.1 + resolution: "react@npm:18.3.1" + dependencies: + loose-envify: "npm:^1.1.0" + checksum: 10c0/283e8c5efcf37802c9d1ce767f302dd569dd97a70d9bb8c7be79a789b9902451e0d16334b05d73299b20f048cbc3c7d288bbbde10b701fa194e2089c237dbea3 + languageName: node + linkType: hard + +"readable-stream@npm:^2.0.1": + version: 2.3.8 + resolution: "readable-stream@npm:2.3.8" + dependencies: + core-util-is: "npm:~1.0.0" + inherits: "npm:~2.0.3" + isarray: "npm:~1.0.0" + process-nextick-args: "npm:~2.0.0" + safe-buffer: "npm:~5.1.1" + string_decoder: "npm:~1.1.1" + util-deprecate: "npm:~1.0.1" + checksum: 10c0/7efdb01f3853bc35ac62ea25493567bf588773213f5f4a79f9c365e1ad13bab845ac0dae7bc946270dc40c3929483228415e92a3fc600cc7e4548992f41ee3fa + languageName: node + linkType: hard + +"readable-stream@npm:^3.0.6": + version: 3.6.2 + resolution: "readable-stream@npm:3.6.2" + dependencies: + inherits: "npm:^2.0.3" + string_decoder: "npm:^1.1.1" + util-deprecate: "npm:^1.0.1" + checksum: 10c0/e37be5c79c376fdd088a45fa31ea2e423e5d48854be7a22a58869b4e84d25047b193f6acb54f1012331e1bcd667ffb569c01b99d36b0bd59658fb33f513511b7 + languageName: node + linkType: hard + +"readdirp@npm:~3.6.0": + version: 3.6.0 + resolution: "readdirp@npm:3.6.0" + dependencies: + picomatch: "npm:^2.2.1" + checksum: 10c0/6fa848cf63d1b82ab4e985f4cf72bd55b7dcfd8e0a376905804e48c3634b7e749170940ba77b32804d5fe93b3cc521aa95a8d7e7d725f830da6d93f3669ce66b + languageName: node + linkType: hard + +"reading-time@npm:^1.5.0": + version: 1.5.0 + resolution: "reading-time@npm:1.5.0" + checksum: 10c0/0f730852fd4fb99e5f78c5b0cf36ab8c3fa15db96f87d9563843f6fd07a47864273ade539ebb184b785b728cde81a70283aa2d9b80cba5ca03b81868be03cabc + languageName: node + linkType: hard + +"rechoir@npm:^0.6.2": + version: 0.6.2 + resolution: "rechoir@npm:0.6.2" + dependencies: + resolve: "npm:^1.1.6" + checksum: 10c0/22c4bb32f4934a9468468b608417194f7e3ceba9a508512125b16082c64f161915a28467562368eeb15dc16058eb5b7c13a20b9eb29ff9927d1ebb3b5aa83e84 + languageName: node + linkType: hard + +"recma-build-jsx@npm:^1.0.0": + version: 1.0.0 + resolution: "recma-build-jsx@npm:1.0.0" + dependencies: + "@types/estree": "npm:^1.0.0" + estree-util-build-jsx: "npm:^3.0.0" + vfile: "npm:^6.0.0" + checksum: 10c0/ca30f5163887b44c74682355da2625f7b49f33267699d22247913e513e043650cbdd6a7497cf13c60f09ad9e7bc2bd35bd20853672773c19188569814b56bb04 + languageName: node + linkType: hard + +"recma-jsx@npm:^1.0.0": + version: 1.0.0 + resolution: "recma-jsx@npm:1.0.0" + dependencies: + acorn-jsx: "npm:^5.0.0" + estree-util-to-js: "npm:^2.0.0" + recma-parse: "npm:^1.0.0" + recma-stringify: "npm:^1.0.0" + unified: "npm:^11.0.0" + checksum: 10c0/26c2af6dd69336c810468b778be1e4cbac5702cf9382454f17c29cf9b03a4fde47d10385bb26a7ccb34f36fe01af34c24cab9fb0deeed066ea53294be0081f07 + languageName: node + linkType: hard + +"recma-parse@npm:^1.0.0": + version: 1.0.0 + resolution: "recma-parse@npm:1.0.0" + dependencies: + "@types/estree": "npm:^1.0.0" + esast-util-from-js: "npm:^2.0.0" + unified: "npm:^11.0.0" + vfile: "npm:^6.0.0" + checksum: 10c0/37c0990859a562d082e02d475ca5f4c8ef0840d285270f6699fe888cbb06260f97eb098585eda4aae416182c207fd19cf05e4f0b2dcf55cbf81dde4406d95545 + languageName: node + linkType: hard + +"recma-stringify@npm:^1.0.0": + version: 1.0.0 + resolution: "recma-stringify@npm:1.0.0" + dependencies: + "@types/estree": "npm:^1.0.0" + estree-util-to-js: "npm:^2.0.0" + unified: "npm:^11.0.0" + vfile: "npm:^6.0.0" + checksum: 10c0/c2ed4c0e8cf8a09aedcd47c5d016d47f6e1ff6c2d4b220e2abaf1b77713bf404756af2ea3ea7999aec5862e8825aff035edceb370c7fd8603a7e9da03bd6987e + languageName: node + linkType: hard + +"recursive-readdir@npm:^2.2.2": + version: 2.2.3 + resolution: "recursive-readdir@npm:2.2.3" + dependencies: + minimatch: "npm:^3.0.5" + checksum: 10c0/d0238f137b03af9cd645e1e0b40ae78b6cda13846e3ca57f626fcb58a66c79ae018a10e926b13b3a460f1285acc946a4e512ea8daa2e35df4b76a105709930d1 + languageName: node + linkType: hard + +"regenerate-unicode-properties@npm:^10.2.0": + version: 10.2.0 + resolution: "regenerate-unicode-properties@npm:10.2.0" + dependencies: + regenerate: "npm:^1.4.2" + checksum: 10c0/5510785eeaf56bbfdf4e663d6753f125c08d2a372d4107bc1b756b7bf142e2ed80c2733a8b54e68fb309ba37690e66a0362699b0e21d5c1f0255dea1b00e6460 + languageName: node + linkType: hard + +"regenerate@npm:^1.4.2": + version: 1.4.2 + resolution: "regenerate@npm:1.4.2" + checksum: 10c0/f73c9eba5d398c818edc71d1c6979eaa05af7a808682749dd079f8df2a6d91a9b913db216c2c9b03e0a8ba2bba8701244a93f45211afbff691c32c7b275db1b8 + languageName: node + linkType: hard + +"regexpu-core@npm:^6.2.0": + version: 6.2.0 + resolution: "regexpu-core@npm:6.2.0" + dependencies: + regenerate: "npm:^1.4.2" + regenerate-unicode-properties: "npm:^10.2.0" + regjsgen: "npm:^0.8.0" + regjsparser: "npm:^0.12.0" + unicode-match-property-ecmascript: "npm:^2.0.0" + unicode-match-property-value-ecmascript: "npm:^2.1.0" + checksum: 10c0/bbcb83a854bf96ce4005ee4e4618b71c889cda72674ce6092432f0039b47890c2d0dfeb9057d08d440999d9ea03879ebbb7f26ca005ccf94390e55c348859b98 + languageName: node + linkType: hard + +"registry-auth-token@npm:^5.0.1": + version: 5.1.0 + resolution: "registry-auth-token@npm:5.1.0" + dependencies: + "@pnpm/npm-conf": "npm:^2.1.0" + checksum: 10c0/316229bd8a4acc29a362a7a3862ff809e608256f0fd9e0b133412b43d6a9ea18743756a0ec5ee1467a5384e1023602b85461b3d88d1336b11879e42f7cf02c12 + languageName: node + linkType: hard + +"registry-url@npm:^6.0.0": + version: 6.0.1 + resolution: "registry-url@npm:6.0.1" + dependencies: + rc: "npm:1.2.8" + checksum: 10c0/66e2221c8113fc35ee9d23fe58cb516fc8d556a189fb8d6f1011a02efccc846c4c9b5075b4027b99a5d5c9ad1345ac37f297bea3c0ca30d607ec8084bf561b90 + languageName: node + linkType: hard + +"regjsgen@npm:^0.8.0": + version: 0.8.0 + resolution: "regjsgen@npm:0.8.0" + checksum: 10c0/44f526c4fdbf0b29286101a282189e4dbb303f4013cf3fea058668d96d113b9180d3d03d1e13f6d4cbde38b7728bf951aecd9dc199938c080093a9a6f0d7a6bd + languageName: node + linkType: hard + +"regjsparser@npm:^0.12.0": + version: 0.12.0 + resolution: "regjsparser@npm:0.12.0" + dependencies: + jsesc: "npm:~3.0.2" + bin: + regjsparser: bin/parser + checksum: 10c0/99d3e4e10c8c7732eb7aa843b8da2fd8b647fe144d3711b480e4647dc3bff4b1e96691ccf17f3ace24aa866a50b064236177cb25e6e4fbbb18285d99edaed83b + languageName: node + linkType: hard + +"rehype-katex@npm:^7.0.1": + version: 7.0.1 + resolution: "rehype-katex@npm:7.0.1" + dependencies: + "@types/hast": "npm:^3.0.0" + "@types/katex": "npm:^0.16.0" + hast-util-from-html-isomorphic: "npm:^2.0.0" + hast-util-to-text: "npm:^4.0.0" + katex: "npm:^0.16.0" + unist-util-visit-parents: "npm:^6.0.0" + vfile: "npm:^6.0.0" + checksum: 10c0/73c770319536128b75055d904d06951789d00a0552c11724c0dac2e244dcb21041630552d118a11cc42233fdcd1bfee525e78a0020fde635bd916cceb281dfb1 + languageName: node + linkType: hard + +"rehype-minify-whitespace@npm:^6.0.0": + version: 6.0.2 + resolution: "rehype-minify-whitespace@npm:6.0.2" + dependencies: + "@types/hast": "npm:^3.0.0" + hast-util-minify-whitespace: "npm:^1.0.0" + checksum: 10c0/e808a452068392070dcba4ea0fdc24c783e21ddc9c70008f90827ddd29afa6fb82f77473bba91e06b48cef8575553f906fa8ab44ae59700f945eb0910927acd9 + languageName: node + linkType: hard + +"rehype-raw@npm:^7.0.0": + version: 7.0.0 + resolution: "rehype-raw@npm:7.0.0" + dependencies: + "@types/hast": "npm:^3.0.0" + hast-util-raw: "npm:^9.0.0" + vfile: "npm:^6.0.0" + checksum: 10c0/1435b4b6640a5bc3abe3b2133885c4dbff5ef2190ef9cfe09d6a63f74dd7d7ffd0cede70603278560ccf1acbfb9da9faae4b68065a28bc5aa88ad18e40f32d52 + languageName: node + linkType: hard + +"rehype-recma@npm:^1.0.0": + version: 1.0.0 + resolution: "rehype-recma@npm:1.0.0" + dependencies: + "@types/estree": "npm:^1.0.0" + "@types/hast": "npm:^3.0.0" + hast-util-to-estree: "npm:^3.0.0" + checksum: 10c0/be60d7433a7f788a14f41da3e93ba9d9272c908ddef47757026cc4bbcc912f6301d56810349adf876d294a8d048626a0dbf6988aaa574afbfc29eac1ddc1eb74 + languageName: node + linkType: hard + +"relateurl@npm:^0.2.7": + version: 0.2.7 + resolution: "relateurl@npm:0.2.7" + checksum: 10c0/c248b4e3b32474f116a804b537fa6343d731b80056fb506dffd91e737eef4cac6be47a65aae39b522b0db9d0b1011d1a12e288d82a109ecd94a5299d82f6573a + languageName: node + linkType: hard + +"remark-definition-list@npm:^2.0.0": + version: 2.0.0 + resolution: "remark-definition-list@npm:2.0.0" + dependencies: + hast-util-definition-list: "npm:^2.0.0" + mdast-util-definition-list: "npm:^2.0.0" + micromark-extension-definition-list: "npm:^2.0.0" + checksum: 10c0/f352e41b0ee441be23cd70cf8e4e334c68020d638701a558d9d5d734319288089154a7552a56fe04226f933e99de3b3d2e975cef8af64300313a561da0bfe830 + languageName: node + linkType: hard + +"remark-directive@npm:^3.0.0": + version: 3.0.1 + resolution: "remark-directive@npm:3.0.1" + dependencies: + "@types/mdast": "npm:^4.0.0" + mdast-util-directive: "npm:^3.0.0" + micromark-extension-directive: "npm:^3.0.0" + unified: "npm:^11.0.0" + checksum: 10c0/ac0e60bdfd97063e2b4e18a96842567ae2ffea75f2545fcd7e4fe54806fb31629d60cef55b565333bda172eddee36766fe2535ca0b59208394bde676cd98094c + languageName: node + linkType: hard + +"remark-emoji@npm:^4.0.0": + version: 4.0.1 + resolution: "remark-emoji@npm:4.0.1" + dependencies: + "@types/mdast": "npm:^4.0.2" + emoticon: "npm:^4.0.1" + mdast-util-find-and-replace: "npm:^3.0.1" + node-emoji: "npm:^2.1.0" + unified: "npm:^11.0.4" + checksum: 10c0/27f88892215f3efe8f25c43f226a82d70144a1ae5906d36f6e09390b893b2d5524d5949bd8ca6a02be0e3cb5cba908b35c4221f4e07f34e93d13d6ff9347dbb8 + languageName: node + linkType: hard + +"remark-frontmatter@npm:^5.0.0": + version: 5.0.0 + resolution: "remark-frontmatter@npm:5.0.0" + dependencies: + "@types/mdast": "npm:^4.0.0" + mdast-util-frontmatter: "npm:^2.0.0" + micromark-extension-frontmatter: "npm:^2.0.0" + unified: "npm:^11.0.0" + checksum: 10c0/102325d5edbcf30eaf74de8a0a6e03096cc2370dfef19080fd2dd208f368fbb2323388751ac9931a1aa38a4f2828fa4bad6c52dc5249dcadcd34861693b52bf9 + languageName: node + linkType: hard + +"remark-gfm@npm:^4.0.0": + version: 4.0.1 + resolution: "remark-gfm@npm:4.0.1" + dependencies: + "@types/mdast": "npm:^4.0.0" + mdast-util-gfm: "npm:^3.0.0" + micromark-extension-gfm: "npm:^3.0.0" + remark-parse: "npm:^11.0.0" + remark-stringify: "npm:^11.0.0" + unified: "npm:^11.0.0" + checksum: 10c0/427ecc6af3e76222662061a5f670a3e4e33ec5fffe2cabf04034da6a3f9a1bda1fc023e838a636385ba314e66e2bebbf017ca61ebea357eb0f5200fe0625a4b7 + languageName: node + linkType: hard + +"remark-math@npm:^6.0.0": + version: 6.0.0 + resolution: "remark-math@npm:6.0.0" + dependencies: + "@types/mdast": "npm:^4.0.0" + mdast-util-math: "npm:^3.0.0" + micromark-extension-math: "npm:^3.0.0" + unified: "npm:^11.0.0" + checksum: 10c0/859613c4db194bb6b3c9c063661dc52b8ceda9c5cf3256b42f73d93eb8f38a6d634eb5f976fe094425f6f1035aaf329eb49ada314feb3b2b1073326b6d3aaa02 + languageName: node + linkType: hard + +"remark-mdx@npm:^3.0.0": + version: 3.1.0 + resolution: "remark-mdx@npm:3.1.0" + dependencies: + mdast-util-mdx: "npm:^3.0.0" + micromark-extension-mdxjs: "npm:^3.0.0" + checksum: 10c0/247800fa8561624bdca5776457c5965d99e5e60080e80262c600fe12ddd573862e029e39349e1e36e4c3bf79c8e571ecf4d3d2d8c13485b758391fb500e24a1a + languageName: node + linkType: hard + +"remark-parse@npm:^11.0.0": + version: 11.0.0 + resolution: "remark-parse@npm:11.0.0" + dependencies: + "@types/mdast": "npm:^4.0.0" + mdast-util-from-markdown: "npm:^2.0.0" + micromark-util-types: "npm:^2.0.0" + unified: "npm:^11.0.0" + checksum: 10c0/6eed15ddb8680eca93e04fcb2d1b8db65a743dcc0023f5007265dda558b09db595a087f622062ccad2630953cd5cddc1055ce491d25a81f3317c858348a8dd38 + languageName: node + linkType: hard + +"remark-rehype@npm:^11.0.0": + version: 11.1.2 + resolution: "remark-rehype@npm:11.1.2" + dependencies: + "@types/hast": "npm:^3.0.0" + "@types/mdast": "npm:^4.0.0" + mdast-util-to-hast: "npm:^13.0.0" + unified: "npm:^11.0.0" + vfile: "npm:^6.0.0" + checksum: 10c0/f9eccacfb596d9605581dc05bfad28635d6ded5dd0a18e88af5fd4df0d3fcf9612e1501d4513bc2164d833cfe9636dab20400080b09e53f155c6e1442a1231fb + languageName: node + linkType: hard + +"remark-stringify@npm:^11.0.0": + version: 11.0.0 + resolution: "remark-stringify@npm:11.0.0" + dependencies: + "@types/mdast": "npm:^4.0.0" + mdast-util-to-markdown: "npm:^2.0.0" + unified: "npm:^11.0.0" + checksum: 10c0/0cdb37ce1217578f6f847c7ec9f50cbab35df5b9e3903d543e74b405404e67c07defcb23cd260a567b41b769400f6de03c2c3d9cd6ae7a6707d5c8d89ead489f + languageName: node + linkType: hard + +"renderkid@npm:^3.0.0": + version: 3.0.0 + resolution: "renderkid@npm:3.0.0" + dependencies: + css-select: "npm:^4.1.3" + dom-converter: "npm:^0.2.0" + htmlparser2: "npm:^6.1.0" + lodash: "npm:^4.17.21" + strip-ansi: "npm:^6.0.1" + checksum: 10c0/24a9fae4cc50e731d059742d1b3eec163dc9e3872b12010d120c3fcbd622765d9cda41f79a1bbb4bf63c1d3442f18a08f6e1642cb5d7ebf092a0ce3f7a3bd143 + languageName: node + linkType: hard + +"repeat-string@npm:^1.0.0": + version: 1.6.1 + resolution: "repeat-string@npm:1.6.1" + checksum: 10c0/87fa21bfdb2fbdedc44b9a5b118b7c1239bdd2c2c1e42742ef9119b7d412a5137a1d23f1a83dc6bb686f4f27429ac6f542e3d923090b44181bafa41e8ac0174d + languageName: node + linkType: hard + +"require-from-string@npm:^2.0.2": + version: 2.0.2 + resolution: "require-from-string@npm:2.0.2" + checksum: 10c0/aaa267e0c5b022fc5fd4eef49d8285086b15f2a1c54b28240fdf03599cbd9c26049fee3eab894f2e1f6ca65e513b030a7c264201e3f005601e80c49fb2937ce2 + languageName: node + linkType: hard + +"require-like@npm:>= 0.1.1": + version: 0.1.2 + resolution: "require-like@npm:0.1.2" + checksum: 10c0/9035ff6c4000a56ede6fc51dd5c56541fafa5a7dddc9b1c3a5f9148d95ee21c603c9bf5c6e37b19fc7de13d9294260842d8590b2ffd6c7c773e78603d1af8050 + languageName: node + linkType: hard + +"requires-port@npm:^1.0.0": + version: 1.0.0 + resolution: "requires-port@npm:1.0.0" + checksum: 10c0/b2bfdd09db16c082c4326e573a82c0771daaf7b53b9ce8ad60ea46aa6e30aaf475fe9b164800b89f93b748d2c234d8abff945d2551ba47bf5698e04cd7713267 + languageName: node + linkType: hard + +"resolve-alpn@npm:^1.2.0": + version: 1.2.1 + resolution: "resolve-alpn@npm:1.2.1" + checksum: 10c0/b70b29c1843bc39781ef946c8cd4482e6d425976599c0f9c138cec8209e4e0736161bf39319b01676a847000085dfdaf63583c6fb4427bf751a10635bd2aa0c4 + languageName: node + linkType: hard + +"resolve-from@npm:^4.0.0": + version: 4.0.0 + resolution: "resolve-from@npm:4.0.0" + checksum: 10c0/8408eec31a3112ef96e3746c37be7d64020cda07c03a920f5024e77290a218ea758b26ca9529fd7b1ad283947f34b2291c1c0f6aa0ed34acfdda9c6014c8d190 + languageName: node + linkType: hard + +"resolve-pathname@npm:^3.0.0": + version: 3.0.0 + resolution: "resolve-pathname@npm:3.0.0" + checksum: 10c0/c6ec49b670dc35b9a303c47fa83ba9348a71e92d64a4c4bb85e1b659a29b407aa1ac1cb14a9b5b502982132ca77482bd80534bca147439d66880d35a137fe723 + languageName: node + linkType: hard + +"resolve@npm:^1.1.6, resolve@npm:^1.14.2": + version: 1.22.10 + resolution: "resolve@npm:1.22.10" + dependencies: + is-core-module: "npm:^2.16.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/8967e1f4e2cc40f79b7e080b4582b9a8c5ee36ffb46041dccb20e6461161adf69f843b43067b4a375de926a2cd669157e29a29578191def399dd5ef89a1b5203 + languageName: node + linkType: hard + +"resolve@patch:resolve@npm%3A^1.1.6#optional!builtin, resolve@patch:resolve@npm%3A^1.14.2#optional!builtin": + version: 1.22.10 + resolution: "resolve@patch:resolve@npm%3A1.22.10#optional!builtin::version=1.22.10&hash=c3c19d" + dependencies: + is-core-module: "npm:^2.16.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/52a4e505bbfc7925ac8f4cd91fd8c4e096b6a89728b9f46861d3b405ac9a1ccf4dcbf8befb4e89a2e11370dacd0160918163885cbc669369590f2f31f4c58939 + languageName: node + linkType: hard + +"responselike@npm:^3.0.0": + version: 3.0.0 + resolution: "responselike@npm:3.0.0" + dependencies: + lowercase-keys: "npm:^3.0.0" + checksum: 10c0/8af27153f7e47aa2c07a5f2d538cb1e5872995f0e9ff77def858ecce5c3fe677d42b824a62cde502e56d275ab832b0a8bd350d5cd6b467ac0425214ac12ae658 + languageName: node + linkType: hard + +"retry@npm:^0.12.0": + version: 0.12.0 + resolution: "retry@npm:0.12.0" + checksum: 10c0/59933e8501727ba13ad73ef4a04d5280b3717fd650408460c987392efe9d7be2040778ed8ebe933c5cbd63da3dcc37919c141ef8af0a54a6e4fca5a2af177bfe + languageName: node + linkType: hard + +"retry@npm:^0.13.1": + version: 0.13.1 + resolution: "retry@npm:0.13.1" + checksum: 10c0/9ae822ee19db2163497e074ea919780b1efa00431d197c7afdb950e42bf109196774b92a49fc9821f0b8b328a98eea6017410bfc5e8a0fc19c85c6d11adb3772 + languageName: node + linkType: hard + +"reusify@npm:^1.0.4": + version: 1.1.0 + resolution: "reusify@npm:1.1.0" + checksum: 10c0/4eff0d4a5f9383566c7d7ec437b671cc51b25963bd61bf127c3f3d3f68e44a026d99b8d2f1ad344afff8d278a8fe70a8ea092650a716d22287e8bef7126bb2fa + languageName: node + linkType: hard + +"rimraf@npm:^3.0.2": + version: 3.0.2 + resolution: "rimraf@npm:3.0.2" + dependencies: + glob: "npm:^7.1.3" + bin: + rimraf: bin.js + checksum: 10c0/9cb7757acb489bd83757ba1a274ab545eafd75598a9d817e0c3f8b164238dd90eba50d6b848bd4dcc5f3040912e882dc7ba71653e35af660d77b25c381d402e8 + languageName: node + linkType: hard + +"rtlcss@npm:^4.1.0": + version: 4.3.0 + resolution: "rtlcss@npm:4.3.0" + dependencies: + escalade: "npm:^3.1.1" + picocolors: "npm:^1.0.0" + postcss: "npm:^8.4.21" + strip-json-comments: "npm:^3.1.1" + bin: + rtlcss: bin/rtlcss.js + checksum: 10c0/ec59db839e1446b4cd6dcef618c8986f00d67e0ac3c2d40bd9041f1909aaacd668072c90849906ca692dea25cd993f46e9188b4c36adfa5bd3eebeb945fb28f2 + languageName: node + linkType: hard + +"run-parallel@npm:^1.1.9": + version: 1.2.0 + resolution: "run-parallel@npm:1.2.0" + dependencies: + queue-microtask: "npm:^1.2.2" + checksum: 10c0/200b5ab25b5b8b7113f9901bfe3afc347e19bb7475b267d55ad0eb86a62a46d77510cb0f232507c9e5d497ebda569a08a9867d0d14f57a82ad5564d991588b39 + languageName: node + linkType: hard + +"rxjs@npm:^7.8.1": + version: 7.8.2 + resolution: "rxjs@npm:7.8.2" + dependencies: + tslib: "npm:^2.1.0" + checksum: 10c0/1fcd33d2066ada98ba8f21fcbbcaee9f0b271de1d38dc7f4e256bfbc6ffcdde68c8bfb69093de7eeb46f24b1fb820620bf0223706cff26b4ab99a7ff7b2e2c45 + languageName: node + linkType: hard + +"safe-buffer@npm:5.2.1, safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.1.0, safe-buffer@npm:~5.2.0": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: 10c0/6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3 + languageName: node + linkType: hard + +"safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": + version: 5.1.2 + resolution: "safe-buffer@npm:5.1.2" + checksum: 10c0/780ba6b5d99cc9a40f7b951d47152297d0e260f0df01472a1b99d4889679a4b94a13d644f7dbc4f022572f09ae9005fa2fbb93bbbd83643316f365a3e9a45b21 + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 + languageName: node + linkType: hard + +"sax@npm:^1.2.4": + version: 1.4.1 + resolution: "sax@npm:1.4.1" + checksum: 10c0/6bf86318a254c5d898ede6bd3ded15daf68ae08a5495a2739564eb265cd13bcc64a07ab466fb204f67ce472bb534eb8612dac587435515169593f4fffa11de7c + languageName: node + linkType: hard + +"scale-ts@npm:^1.6.0": + version: 1.6.1 + resolution: "scale-ts@npm:1.6.1" + checksum: 10c0/bbcf476029095152189c5bd210922b43342e8bfb712bf56237de172d55b528e090419e80da67c627a8f706a228237346b82de527755d7f197bb4d822c6383dfd + languageName: node + linkType: hard + +"scheduler@npm:^0.23.2": + version: 0.23.2 + resolution: "scheduler@npm:0.23.2" + dependencies: + loose-envify: "npm:^1.1.0" + checksum: 10c0/26383305e249651d4c58e6705d5f8425f153211aef95f15161c151f7b8de885f24751b377e4a0b3dd42cce09aad3f87a61dab7636859c0d89b7daf1a1e2a5c78 + languageName: node + linkType: hard + +"schema-utils@npm:2.7.0": + version: 2.7.0 + resolution: "schema-utils@npm:2.7.0" + dependencies: + "@types/json-schema": "npm:^7.0.4" + ajv: "npm:^6.12.2" + ajv-keywords: "npm:^3.4.1" + checksum: 10c0/723c3c856a0313a89aa81c5fb2c93d4b11225f5cdd442665fddd55d3c285ae72e079f5286a3a9a1a973affe888f6c33554a2cf47b79b24cd8de2f1f756a6fb1b + languageName: node + linkType: hard + +"schema-utils@npm:^3.0.0": + version: 3.3.0 + resolution: "schema-utils@npm:3.3.0" + dependencies: + "@types/json-schema": "npm:^7.0.8" + ajv: "npm:^6.12.5" + ajv-keywords: "npm:^3.5.2" + checksum: 10c0/fafdbde91ad8aa1316bc543d4b61e65ea86970aebbfb750bfb6d8a6c287a23e415e0e926c2498696b242f63af1aab8e585252637fabe811fd37b604351da6500 + languageName: node + linkType: hard + +"schema-utils@npm:^4.0.0, schema-utils@npm:^4.0.1, schema-utils@npm:^4.3.0, schema-utils@npm:^4.3.2": + version: 4.3.2 + resolution: "schema-utils@npm:4.3.2" + dependencies: + "@types/json-schema": "npm:^7.0.9" + ajv: "npm:^8.9.0" + ajv-formats: "npm:^2.1.1" + ajv-keywords: "npm:^5.1.0" + checksum: 10c0/981632f9bf59f35b15a9bcdac671dd183f4946fe4b055ae71a301e66a9797b95e5dd450de581eb6cca56fb6583ce8f24d67b2d9f8e1b2936612209697f6c277e + languageName: node + linkType: hard + +"section-matter@npm:^1.0.0": + version: 1.0.0 + resolution: "section-matter@npm:1.0.0" + dependencies: + extend-shallow: "npm:^2.0.1" + kind-of: "npm:^6.0.0" + checksum: 10c0/8007f91780adc5aaa781a848eaae50b0f680bbf4043b90cf8a96778195b8fab690c87fe7a989e02394ce69890e330811ec8dab22397d384673ce59f7d750641d + languageName: node + linkType: hard + +"select-hose@npm:^2.0.0": + version: 2.0.0 + resolution: "select-hose@npm:2.0.0" + checksum: 10c0/01cc52edd29feddaf379efb4328aededa633f0ac43c64b11a8abd075ff34f05b0d280882c4fbcbdf1a0658202c9cd2ea8d5985174dcf9a2dac7e3a4996fa9b67 + languageName: node + linkType: hard + +"selfsigned@npm:^2.1.1": + version: 2.4.1 + resolution: "selfsigned@npm:2.4.1" + dependencies: + "@types/node-forge": "npm:^1.3.0" + node-forge: "npm:^1" + checksum: 10c0/521829ec36ea042f7e9963bf1da2ed040a815cf774422544b112ec53b7edc0bc50a0f8cc2ae7aa6cc19afa967c641fd96a15de0fc650c68651e41277d2e1df09 + languageName: node + linkType: hard + +"semver-diff@npm:^4.0.0": + version: 4.0.0 + resolution: "semver-diff@npm:4.0.0" + dependencies: + semver: "npm:^7.3.5" + checksum: 10c0/3ed1bb22f39b4b6e98785bb066e821eabb9445d3b23e092866c50e7df8b9bd3eda617b242f81db4159586e0e39b0deb908dd160a24f783bd6f52095b22cd68ea + languageName: node + linkType: hard + +"semver@npm:^6.3.1": + version: 6.3.1 + resolution: "semver@npm:6.3.1" + bin: + semver: bin/semver.js + checksum: 10c0/e3d79b609071caa78bcb6ce2ad81c7966a46a7431d9d58b8800cfa9cb6a63699b3899a0e4bcce36167a284578212d9ae6942b6929ba4aa5015c079a67751d42d + languageName: node + linkType: hard + +"semver@npm:^7.3.2, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.4": + version: 7.7.2 + resolution: "semver@npm:7.7.2" + bin: + semver: bin/semver.js + checksum: 10c0/aca305edfbf2383c22571cb7714f48cadc7ac95371b4b52362fb8eeffdfbc0de0669368b82b2b15978f8848f01d7114da65697e56cd8c37b0dab8c58e543f9ea + languageName: node + linkType: hard + +"send@npm:0.19.0": + version: 0.19.0 + resolution: "send@npm:0.19.0" + dependencies: + debug: "npm:2.6.9" + depd: "npm:2.0.0" + destroy: "npm:1.2.0" + encodeurl: "npm:~1.0.2" + escape-html: "npm:~1.0.3" + etag: "npm:~1.8.1" + fresh: "npm:0.5.2" + http-errors: "npm:2.0.0" + mime: "npm:1.6.0" + ms: "npm:2.1.3" + on-finished: "npm:2.4.1" + range-parser: "npm:~1.2.1" + statuses: "npm:2.0.1" + checksum: 10c0/ea3f8a67a8f0be3d6bf9080f0baed6d2c51d11d4f7b4470de96a5029c598a7011c497511ccc28968b70ef05508675cebff27da9151dd2ceadd60be4e6cf845e3 + languageName: node + linkType: hard + +"serialize-javascript@npm:^6.0.0, serialize-javascript@npm:^6.0.1, serialize-javascript@npm:^6.0.2": + version: 6.0.2 + resolution: "serialize-javascript@npm:6.0.2" + dependencies: + randombytes: "npm:^2.1.0" + checksum: 10c0/2dd09ef4b65a1289ba24a788b1423a035581bef60817bea1f01eda8e3bda623f86357665fe7ac1b50f6d4f583f97db9615b3f07b2a2e8cbcb75033965f771dd2 + languageName: node + linkType: hard + +"serve-handler@npm:^6.1.6": + version: 6.1.6 + resolution: "serve-handler@npm:6.1.6" + dependencies: + bytes: "npm:3.0.0" + content-disposition: "npm:0.5.2" + mime-types: "npm:2.1.18" + minimatch: "npm:3.1.2" + path-is-inside: "npm:1.0.2" + path-to-regexp: "npm:3.3.0" + range-parser: "npm:1.2.0" + checksum: 10c0/1e1cb6bbc51ee32bc1505f2e0605bdc2e96605c522277c977b67f83be9d66bd1eec8604388714a4d728e036d86b629bc9aec02120ea030d3d2c3899d44696503 + languageName: node + linkType: hard + +"serve-index@npm:^1.9.1": + version: 1.9.1 + resolution: "serve-index@npm:1.9.1" + dependencies: + accepts: "npm:~1.3.4" + batch: "npm:0.6.1" + debug: "npm:2.6.9" + escape-html: "npm:~1.0.3" + http-errors: "npm:~1.6.2" + mime-types: "npm:~2.1.17" + parseurl: "npm:~1.3.2" + checksum: 10c0/a666471a24196f74371edf2c3c7bcdd82adbac52f600804508754b5296c3567588bf694258b19e0cb23a567acfa20d9721bfdaed3286007b81f9741ada8a3a9c + languageName: node + linkType: hard + +"serve-static@npm:1.16.2": + version: 1.16.2 + resolution: "serve-static@npm:1.16.2" + dependencies: + encodeurl: "npm:~2.0.0" + escape-html: "npm:~1.0.3" + parseurl: "npm:~1.3.3" + send: "npm:0.19.0" + checksum: 10c0/528fff6f5e12d0c5a391229ad893910709bc51b5705962b09404a1d813857578149b8815f35d3ee5752f44cd378d0f31669d4b1d7e2d11f41e08283d5134bd1f + languageName: node + linkType: hard + +"set-function-length@npm:^1.2.2": + version: 1.2.2 + resolution: "set-function-length@npm:1.2.2" + dependencies: + define-data-property: "npm:^1.1.4" + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + get-intrinsic: "npm:^1.2.4" + gopd: "npm:^1.0.1" + has-property-descriptors: "npm:^1.0.2" + checksum: 10c0/82850e62f412a258b71e123d4ed3873fa9377c216809551192bb6769329340176f109c2eeae8c22a8d386c76739855f78e8716515c818bcaef384b51110f0f3c + languageName: node + linkType: hard + +"setprototypeof@npm:1.1.0": + version: 1.1.0 + resolution: "setprototypeof@npm:1.1.0" + checksum: 10c0/a77b20876689c6a89c3b42f0c3596a9cae02f90fc902570cbd97198e9e8240382086c9303ad043e88cee10f61eae19f1004e51d885395a1e9bf49f9ebed12872 + languageName: node + linkType: hard + +"setprototypeof@npm:1.2.0": + version: 1.2.0 + resolution: "setprototypeof@npm:1.2.0" + checksum: 10c0/68733173026766fa0d9ecaeb07f0483f4c2dc70ca376b3b7c40b7cda909f94b0918f6c5ad5ce27a9160bdfb475efaa9d5e705a11d8eaae18f9835d20976028bc + languageName: node + linkType: hard + +"shallow-clone@npm:^3.0.0": + version: 3.0.1 + resolution: "shallow-clone@npm:3.0.1" + dependencies: + kind-of: "npm:^6.0.2" + checksum: 10c0/7bab09613a1b9f480c85a9823aebec533015579fa055ba6634aa56ba1f984380670eaf33b8217502931872aa1401c9fcadaa15f9f604d631536df475b05bcf1e + languageName: node + linkType: hard + +"shallowequal@npm:^1.1.0": + version: 1.1.0 + resolution: "shallowequal@npm:1.1.0" + checksum: 10c0/b926efb51cd0f47aa9bc061add788a4a650550bbe50647962113a4579b60af2abe7b62f9b02314acc6f97151d4cf87033a2b15fc20852fae306d1a095215396c + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: "npm:^3.0.0" + checksum: 10c0/a41692e7d89a553ef21d324a5cceb5f686d1f3c040759c50aab69688634688c5c327f26f3ecf7001ebfd78c01f3c7c0a11a7c8bfd0a8bc9f6240d4f40b224e4e + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 10c0/1dbed0726dd0e1152a92696c76c7f06084eb32a90f0528d11acd764043aacf76994b2fb30aa1291a21bd019d6699164d048286309a278855ee7bec06cf6fb690 + languageName: node + linkType: hard + +"shell-quote@npm:^1.7.3, shell-quote@npm:^1.8.1": + version: 1.8.2 + resolution: "shell-quote@npm:1.8.2" + checksum: 10c0/85fdd44f2ad76e723d34eb72c753f04d847ab64e9f1f10677e3f518d0e5b0752a176fd805297b30bb8c3a1556ebe6e77d2288dbd7b7b0110c7e941e9e9c20ce1 + languageName: node + linkType: hard + +"shelljs@npm:^0.8.5": + version: 0.8.5 + resolution: "shelljs@npm:0.8.5" + dependencies: + glob: "npm:^7.0.0" + interpret: "npm:^1.0.0" + rechoir: "npm:^0.6.2" + bin: + shjs: bin/shjs + checksum: 10c0/feb25289a12e4bcd04c40ddfab51aff98a3729f5c2602d5b1a1b95f6819ec7804ac8147ebd8d9a85dfab69d501bcf92d7acef03247320f51c1552cec8d8e2382 + languageName: node + linkType: hard + +"side-channel-list@npm:^1.0.0": + version: 1.0.0 + resolution: "side-channel-list@npm:1.0.0" + dependencies: + es-errors: "npm:^1.3.0" + object-inspect: "npm:^1.13.3" + checksum: 10c0/644f4ac893456c9490ff388bf78aea9d333d5e5bfc64cfb84be8f04bf31ddc111a8d4b83b85d7e7e8a7b845bc185a9ad02c052d20e086983cf59f0be517d9b3d + languageName: node + linkType: hard + +"side-channel-map@npm:^1.0.1": + version: 1.0.1 + resolution: "side-channel-map@npm:1.0.1" + dependencies: + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.5" + object-inspect: "npm:^1.13.3" + checksum: 10c0/010584e6444dd8a20b85bc926d934424bd809e1a3af941cace229f7fdcb751aada0fb7164f60c2e22292b7fa3c0ff0bce237081fd4cdbc80de1dc68e95430672 + languageName: node + linkType: hard + +"side-channel-weakmap@npm:^1.0.2": + version: 1.0.2 + resolution: "side-channel-weakmap@npm:1.0.2" + dependencies: + call-bound: "npm:^1.0.2" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.5" + object-inspect: "npm:^1.13.3" + side-channel-map: "npm:^1.0.1" + checksum: 10c0/71362709ac233e08807ccd980101c3e2d7efe849edc51455030327b059f6c4d292c237f94dc0685031dd11c07dd17a68afde235d6cf2102d949567f98ab58185 + languageName: node + linkType: hard + +"side-channel@npm:^1.0.6": + version: 1.1.0 + resolution: "side-channel@npm:1.1.0" + dependencies: + es-errors: "npm:^1.3.0" + object-inspect: "npm:^1.13.3" + side-channel-list: "npm:^1.0.0" + side-channel-map: "npm:^1.0.1" + side-channel-weakmap: "npm:^1.0.2" + checksum: 10c0/cb20dad41eb032e6c24c0982e1e5a24963a28aa6122b4f05b3f3d6bf8ae7fd5474ef382c8f54a6a3ab86e0cac4d41a23bd64ede3970e5bfb50326ba02a7996e6 + languageName: node + linkType: hard + +"signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3": + version: 3.0.7 + resolution: "signal-exit@npm:3.0.7" + checksum: 10c0/25d272fa73e146048565e08f3309d5b942c1979a6f4a58a8c59d5fa299728e9c2fcd1a759ec870863b1fd38653670240cd420dad2ad9330c71f36608a6a1c912 + languageName: node + linkType: hard + +"signal-exit@npm:^4.0.1": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 10c0/41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 + languageName: node + linkType: hard + +"sirv@npm:^2.0.3": + version: 2.0.4 + resolution: "sirv@npm:2.0.4" + dependencies: + "@polka/url": "npm:^1.0.0-next.24" + mrmime: "npm:^2.0.0" + totalist: "npm:^3.0.0" + checksum: 10c0/68f8ee857f6a9415e9c07a1f31c7c561df8d5f1b1ba79bee3de583fa37da8718def5309f6b1c6e2c3ef77de45d74f5e49efc7959214443aa92d42e9c99180a4e + languageName: node + linkType: hard + +"sisteransi@npm:^1.0.5": + version: 1.0.5 + resolution: "sisteransi@npm:1.0.5" + checksum: 10c0/230ac975cca485b7f6fe2b96a711aa62a6a26ead3e6fb8ba17c5a00d61b8bed0d7adc21f5626b70d7c33c62ff4e63933017a6462942c719d1980bb0b1207ad46 + languageName: node + linkType: hard + +"sitemap@npm:^7.1.1": + version: 7.1.2 + resolution: "sitemap@npm:7.1.2" + dependencies: + "@types/node": "npm:^17.0.5" + "@types/sax": "npm:^1.2.1" + arg: "npm:^5.0.0" + sax: "npm:^1.2.4" + bin: + sitemap: dist/cli.js + checksum: 10c0/01dd1268c0d4b89f8ef082bcb9ef18d0182d00d1622e9c54743474918169491e5360538f9a01a769262e0fe23d6e3822a90680eff0f076cf87b68d459014a34c + languageName: node + linkType: hard + +"skin-tone@npm:^2.0.0": + version: 2.0.0 + resolution: "skin-tone@npm:2.0.0" + dependencies: + unicode-emoji-modifier-base: "npm:^1.0.0" + checksum: 10c0/82d4c2527864f9cbd6cb7f3c4abb31e2224752234d5013b881d3e34e9ab543545b05206df5a17d14b515459fcb265ce409f9cfe443903176b0360cd20e4e4ba5 + languageName: node + linkType: hard + +"slash@npm:^3.0.0": + version: 3.0.0 + resolution: "slash@npm:3.0.0" + checksum: 10c0/e18488c6a42bdfd4ac5be85b2ced3ccd0224773baae6ad42cfbb9ec74fc07f9fa8396bd35ee638084ead7a2a0818eb5e7151111544d4731ce843019dab4be47b + languageName: node + linkType: hard + +"slash@npm:^4.0.0": + version: 4.0.0 + resolution: "slash@npm:4.0.0" + checksum: 10c0/b522ca75d80d107fd30d29df0549a7b2537c83c4c4ecd12cd7d4ea6c8aaca2ab17ada002e7a1d78a9d736a0261509f26ea5b489082ee443a3a810586ef8eff18 + languageName: node + linkType: hard + +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: 10c0/a16775323e1404dd43fabafe7460be13a471e021637bc7889468eb45ce6a6b207261f454e4e530a19500cc962c4cc5348583520843b363f4193cee5c00e1e539 + languageName: node + linkType: hard + +"smoldot@npm:2.0.26": + version: 2.0.26 + resolution: "smoldot@npm:2.0.26" + dependencies: + ws: "npm:^8.8.1" + checksum: 10c0/a4788fb92e5ed6e8c3d171d00474712c6f98f62cae68543f1029e7976a64ce9c8126956e50d6bd89482df8568f8ac043d5eb50b63f44f9a6062cbc49f0ef2dad + languageName: node + linkType: hard + +"snake-case@npm:^3.0.4": + version: 3.0.4 + resolution: "snake-case@npm:3.0.4" + dependencies: + dot-case: "npm:^3.0.4" + tslib: "npm:^2.0.3" + checksum: 10c0/ab19a913969f58f4474fe9f6e8a026c8a2142a01f40b52b79368068343177f818cdfef0b0c6b9558f298782441d5ca8ed5932eb57822439fad791d866e62cecd + languageName: node + linkType: hard + +"sockjs@npm:^0.3.24": + version: 0.3.24 + resolution: "sockjs@npm:0.3.24" + dependencies: + faye-websocket: "npm:^0.11.3" + uuid: "npm:^8.3.2" + websocket-driver: "npm:^0.7.4" + checksum: 10c0/aa102c7d921bf430215754511c81ea7248f2dcdf268fbdb18e4d8183493a86b8793b164c636c52f474a886f747447c962741df2373888823271efdb9d2594f33 + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^8.0.3": + version: 8.0.5 + resolution: "socks-proxy-agent@npm:8.0.5" + dependencies: + agent-base: "npm:^7.1.2" + debug: "npm:^4.3.4" + socks: "npm:^2.8.3" + checksum: 10c0/5d2c6cecba6821389aabf18728325730504bf9bb1d9e342e7987a5d13badd7a98838cc9a55b8ed3cb866ad37cc23e1086f09c4d72d93105ce9dfe76330e9d2a6 + languageName: node + linkType: hard + +"socks@npm:^2.8.3": + version: 2.8.4 + resolution: "socks@npm:2.8.4" + dependencies: + ip-address: "npm:^9.0.5" + smart-buffer: "npm:^4.2.0" + checksum: 10c0/00c3271e233ccf1fb83a3dd2060b94cc37817e0f797a93c560b9a7a86c4a0ec2961fb31263bdd24a3c28945e24868b5f063cd98744171d9e942c513454b50ae5 + languageName: node + linkType: hard + +"sort-css-media-queries@npm:2.2.0": + version: 2.2.0 + resolution: "sort-css-media-queries@npm:2.2.0" + checksum: 10c0/7478308c7ca93409f959ab993d41de2f0515ed5f51b671908ecb777aae0d63be97b454d59d80e14ee4874884618a2e825d4ae7ccb225779276904dd175f4e766 + languageName: node + linkType: hard + +"source-map-js@npm:^1.0.1, source-map-js@npm:^1.2.1": + version: 1.2.1 + resolution: "source-map-js@npm:1.2.1" + checksum: 10c0/7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf + languageName: node + linkType: hard + +"source-map-support@npm:~0.5.20": + version: 0.5.21 + resolution: "source-map-support@npm:0.5.21" + dependencies: + buffer-from: "npm:^1.0.0" + source-map: "npm:^0.6.0" + checksum: 10c0/9ee09942f415e0f721d6daad3917ec1516af746a8120bba7bb56278707a37f1eb8642bde456e98454b8a885023af81a16e646869975f06afc1a711fb90484e7d + languageName: node + linkType: hard + +"source-map@npm:^0.6.0, source-map@npm:~0.6.0": + version: 0.6.1 + resolution: "source-map@npm:0.6.1" + checksum: 10c0/ab55398007c5e5532957cb0beee2368529618ac0ab372d789806f5718123cc4367d57de3904b4e6a4170eb5a0b0f41373066d02ca0735a0c4d75c7d328d3e011 + languageName: node + linkType: hard + +"source-map@npm:^0.7.0": + version: 0.7.4 + resolution: "source-map@npm:0.7.4" + checksum: 10c0/dc0cf3768fe23c345ea8760487f8c97ef6fca8a73c83cd7c9bf2fde8bc2c34adb9c0824d6feb14bc4f9e37fb522e18af621543f1289038a66ac7586da29aa7dc + languageName: node + linkType: hard + +"space-separated-tokens@npm:^2.0.0": + version: 2.0.2 + resolution: "space-separated-tokens@npm:2.0.2" + checksum: 10c0/6173e1d903dca41dcab6a2deed8b4caf61bd13b6d7af8374713500570aa929ff9414ae09a0519f4f8772df993300305a395d4871f35bc4ca72b6db57e1f30af8 + languageName: node + linkType: hard + +"spdy-transport@npm:^3.0.0": + version: 3.0.0 + resolution: "spdy-transport@npm:3.0.0" + dependencies: + debug: "npm:^4.1.0" + detect-node: "npm:^2.0.4" + hpack.js: "npm:^2.1.6" + obuf: "npm:^1.1.2" + readable-stream: "npm:^3.0.6" + wbuf: "npm:^1.7.3" + checksum: 10c0/eaf7440fa90724fffc813c386d4a8a7427d967d6e46d7c51d8f8a533d1a6911b9823ea9218703debbae755337e85f110185d7a00ae22ec5c847077b908ce71bb + languageName: node + linkType: hard + +"spdy@npm:^4.0.2": + version: 4.0.2 + resolution: "spdy@npm:4.0.2" + dependencies: + debug: "npm:^4.1.0" + handle-thing: "npm:^2.0.0" + http-deceiver: "npm:^1.2.7" + select-hose: "npm:^2.0.0" + spdy-transport: "npm:^3.0.0" + checksum: 10c0/983509c0be9d06fd00bb9dff713c5b5d35d3ffd720db869acdd5ad7aa6fc0e02c2318b58f75328957d8ff772acdf1f7d19382b6047df342044ff3e2d6805ccdf + languageName: node + linkType: hard + +"sprintf-js@npm:^1.1.3": + version: 1.1.3 + resolution: "sprintf-js@npm:1.1.3" + checksum: 10c0/09270dc4f30d479e666aee820eacd9e464215cdff53848b443964202bf4051490538e5dd1b42e1a65cf7296916ca17640aebf63dae9812749c7542ee5f288dec + languageName: node + linkType: hard + +"sprintf-js@npm:~1.0.2": + version: 1.0.3 + resolution: "sprintf-js@npm:1.0.3" + checksum: 10c0/ecadcfe4c771890140da5023d43e190b7566d9cf8b2d238600f31bec0fc653f328da4450eb04bd59a431771a8e9cc0e118f0aa3974b683a4981b4e07abc2a5bb + languageName: node + linkType: hard + +"srcset@npm:^4.0.0": + version: 4.0.0 + resolution: "srcset@npm:4.0.0" + checksum: 10c0/0685c3bd2423b33831734fb71560cd8784f024895e70ee2ac2c392e30047c27ffd9481e001950fb0503f4906bc3fe963145935604edad77944d09c9800990660 + languageName: node + linkType: hard + +"ssri@npm:^12.0.0": + version: 12.0.0 + resolution: "ssri@npm:12.0.0" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/caddd5f544b2006e88fa6b0124d8d7b28208b83c72d7672d5ade44d794525d23b540f3396108c4eb9280dcb7c01f0bef50682f5b4b2c34291f7c5e211fd1417d + languageName: node + linkType: hard + +"statuses@npm:2.0.1": + version: 2.0.1 + resolution: "statuses@npm:2.0.1" + checksum: 10c0/34378b207a1620a24804ce8b5d230fea0c279f00b18a7209646d5d47e419d1cc23e7cbf33a25a1e51ac38973dc2ac2e1e9c647a8e481ef365f77668d72becfd0 + languageName: node + linkType: hard + +"statuses@npm:>= 1.4.0 < 2": + version: 1.5.0 + resolution: "statuses@npm:1.5.0" + checksum: 10c0/e433900956357b3efd79b1c547da4d291799ac836960c016d10a98f6a810b1b5c0dcc13b5a7aa609a58239b5190e1ea176ad9221c2157d2fd1c747393e6b2940 + languageName: node + linkType: hard + +"std-env@npm:^3.7.0": + version: 3.9.0 + resolution: "std-env@npm:3.9.0" + checksum: 10c0/4a6f9218aef3f41046c3c7ecf1f98df00b30a07f4f35c6d47b28329bc2531eef820828951c7d7b39a1c5eb19ad8a46e3ddfc7deb28f0a2f3ceebee11bab7ba50 + languageName: node + linkType: hard + +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0": + version: 4.2.3 + resolution: "string-width@npm:4.2.3" + dependencies: + emoji-regex: "npm:^8.0.0" + is-fullwidth-code-point: "npm:^3.0.0" + strip-ansi: "npm:^6.0.1" + checksum: 10c0/1e525e92e5eae0afd7454086eed9c818ee84374bb80328fc41217ae72ff5f065ef1c9d7f72da41de40c75fa8bb3dee63d92373fd492c84260a552c636392a47b + languageName: node + linkType: hard + +"string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: "npm:^0.2.0" + emoji-regex: "npm:^9.2.2" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/ab9c4264443d35b8b923cbdd513a089a60de339216d3b0ed3be3ba57d6880e1a192b70ae17225f764d7adbf5994e9bb8df253a944736c15a0240eff553c678ca + languageName: node + linkType: hard + +"string_decoder@npm:^1.1.1": + version: 1.3.0 + resolution: "string_decoder@npm:1.3.0" + dependencies: + safe-buffer: "npm:~5.2.0" + checksum: 10c0/810614ddb030e271cd591935dcd5956b2410dd079d64ff92a1844d6b7588bf992b3e1b69b0f4d34a3e06e0bd73046ac646b5264c1987b20d0601f81ef35d731d + languageName: node + linkType: hard + +"string_decoder@npm:~1.1.1": + version: 1.1.1 + resolution: "string_decoder@npm:1.1.1" + dependencies: + safe-buffer: "npm:~5.1.0" + checksum: 10c0/b4f89f3a92fd101b5653ca3c99550e07bdf9e13b35037e9e2a1c7b47cec4e55e06ff3fc468e314a0b5e80bfbaf65c1ca5a84978764884ae9413bec1fc6ca924e + languageName: node + linkType: hard + +"stringify-entities@npm:^4.0.0": + version: 4.0.4 + resolution: "stringify-entities@npm:4.0.4" + dependencies: + character-entities-html4: "npm:^2.0.0" + character-entities-legacy: "npm:^3.0.0" + checksum: 10c0/537c7e656354192406bdd08157d759cd615724e9d0873602d2c9b2f6a5c0a8d0b1d73a0a08677848105c5eebac6db037b57c0b3a4ec86331117fa7319ed50448 + languageName: node + linkType: hard + +"stringify-object@npm:^3.3.0": + version: 3.3.0 + resolution: "stringify-object@npm:3.3.0" + dependencies: + get-own-enumerable-property-symbols: "npm:^3.0.0" + is-obj: "npm:^1.0.1" + is-regexp: "npm:^1.0.0" + checksum: 10c0/ba8078f84128979ee24b3de9a083489cbd3c62cb8572a061b47d4d82601a8ae4b4d86fa8c54dd955593da56bb7c16a6de51c27221fdc6b7139bb4f29d815f35b + languageName: node + linkType: hard + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: "npm:^5.0.1" + checksum: 10c0/1ae5f212a126fe5b167707f716942490e3933085a5ff6c008ab97ab2f272c8025d3aa218b7bd6ab25729ca20cc81cddb252102f8751e13482a5199e873680952 + languageName: node + linkType: hard + +"strip-ansi@npm:^7.0.1": + version: 7.1.0 + resolution: "strip-ansi@npm:7.1.0" + dependencies: + ansi-regex: "npm:^6.0.1" + checksum: 10c0/a198c3762e8832505328cbf9e8c8381de14a4fa50a4f9b2160138158ea88c0f5549fb50cb13c651c3088f47e63a108b34622ec18c0499b6c8c3a5ddf6b305ac4 + languageName: node + linkType: hard + +"strip-bom-string@npm:^1.0.0": + version: 1.0.0 + resolution: "strip-bom-string@npm:1.0.0" + checksum: 10c0/5c5717e2643225aa6a6d659d34176ab2657037f1fe2423ac6fcdb488f135e14fef1022030e426d8b4d0989e09adbd5c3288d5d3b9c632abeefd2358dfc512bca + languageName: node + linkType: hard + +"strip-final-newline@npm:^2.0.0": + version: 2.0.0 + resolution: "strip-final-newline@npm:2.0.0" + checksum: 10c0/bddf8ccd47acd85c0e09ad7375409d81653f645fda13227a9d459642277c253d877b68f2e5e4d819fe75733b0e626bac7e954c04f3236f6d196f79c94fa4a96f + languageName: node + linkType: hard + +"strip-json-comments@npm:^3.1.1": + version: 3.1.1 + resolution: "strip-json-comments@npm:3.1.1" + checksum: 10c0/9681a6257b925a7fa0f285851c0e613cc934a50661fa7bb41ca9cbbff89686bb4a0ee366e6ecedc4daafd01e83eee0720111ab294366fe7c185e935475ebcecd + languageName: node + linkType: hard + +"strip-json-comments@npm:~2.0.1": + version: 2.0.1 + resolution: "strip-json-comments@npm:2.0.1" + checksum: 10c0/b509231cbdee45064ff4f9fd73609e2bcc4e84a4d508e9dd0f31f70356473fde18abfb5838c17d56fb236f5a06b102ef115438de0600b749e818a35fbbc48c43 + languageName: node + linkType: hard + +"style-to-js@npm:^1.0.0": + version: 1.1.16 + resolution: "style-to-js@npm:1.1.16" + dependencies: + style-to-object: "npm:1.0.8" + checksum: 10c0/578a4dff804539ec7e64d3cc8d327540befb9ad30e3cd0b6b0392f93f793f3a028f90084a9aaff088bffb87818fa2c6c153f0df576f61f9ab0b0938b582bcac7 + languageName: node + linkType: hard + +"style-to-object@npm:1.0.8": + version: 1.0.8 + resolution: "style-to-object@npm:1.0.8" + dependencies: + inline-style-parser: "npm:0.2.4" + checksum: 10c0/daa6646b1ff18258c0ca33ed281fbe73485c8391192db1b56ce89d40c93ea64507a41e8701d0dadfe771bc2f540c46c9b295135f71584c8e5cb23d6a19be9430 + languageName: node + linkType: hard + +"stylehacks@npm:^6.1.1": + version: 6.1.1 + resolution: "stylehacks@npm:6.1.1" + dependencies: + browserslist: "npm:^4.23.0" + postcss-selector-parser: "npm:^6.0.16" + peerDependencies: + postcss: ^8.4.31 + checksum: 10c0/2dd2bccfd8311ff71492e63a7b8b86c3d7b1fff55d4ba5a2357aff97743e633d351cdc2f5ae3c0057637d00dab4ef5fc5b218a1b370e4585a41df22b5a5128be + languageName: node + linkType: hard + +"supports-color@npm:^7.1.0": + version: 7.2.0 + resolution: "supports-color@npm:7.2.0" + dependencies: + has-flag: "npm:^4.0.0" + checksum: 10c0/afb4c88521b8b136b5f5f95160c98dee7243dc79d5432db7efc27efb219385bbc7d9427398e43dd6cc730a0f87d5085ce1652af7efbe391327bc0a7d0f7fc124 + languageName: node + linkType: hard + +"supports-color@npm:^8.0.0": + version: 8.1.1 + resolution: "supports-color@npm:8.1.1" + dependencies: + has-flag: "npm:^4.0.0" + checksum: 10c0/ea1d3c275dd604c974670f63943ed9bd83623edc102430c05adb8efc56ba492746b6e95386e7831b872ec3807fd89dd8eb43f735195f37b5ec343e4234cc7e89 + languageName: node + linkType: hard + +"supports-preserve-symlinks-flag@npm:^1.0.0": + version: 1.0.0 + resolution: "supports-preserve-symlinks-flag@npm:1.0.0" + checksum: 10c0/6c4032340701a9950865f7ae8ef38578d8d7053f5e10518076e6554a9381fa91bd9c6850193695c141f32b21f979c985db07265a758867bac95de05f7d8aeb39 + languageName: node + linkType: hard + +"svg-parser@npm:^2.0.4": + version: 2.0.4 + resolution: "svg-parser@npm:2.0.4" + checksum: 10c0/02f6cb155dd7b63ebc2f44f36365bc294543bebb81b614b7628f1af3c54ab64f7e1cec20f06e252bf95bdde78441ae295a412c68ad1678f16a6907d924512b7a + languageName: node + linkType: hard + +"svgo@npm:^3.0.2, svgo@npm:^3.2.0": + version: 3.3.2 + resolution: "svgo@npm:3.3.2" + dependencies: + "@trysound/sax": "npm:0.2.0" + commander: "npm:^7.2.0" + css-select: "npm:^5.1.0" + css-tree: "npm:^2.3.1" + css-what: "npm:^6.1.0" + csso: "npm:^5.0.5" + picocolors: "npm:^1.0.0" + bin: + svgo: ./bin/svgo + checksum: 10c0/a6badbd3d1d6dbb177f872787699ab34320b990d12e20798ecae915f0008796a0f3c69164f1485c9def399e0ce0a5683eb4a8045e51a5e1c364bb13a0d9f79e1 + languageName: node + linkType: hard + +"tapable@npm:^1.0.0": + version: 1.1.3 + resolution: "tapable@npm:1.1.3" + checksum: 10c0/c9f0265e55e45821ec672b9b9ee8a35d95bf3ea6b352199f8606a2799018e89cfe4433c554d424b31fc67c4be26b05d4f36dc3c607def416fdb2514cd63dba50 + languageName: node + linkType: hard + +"tapable@npm:^2.0.0, tapable@npm:^2.1.1, tapable@npm:^2.2.0, tapable@npm:^2.2.1": + version: 2.2.1 + resolution: "tapable@npm:2.2.1" + checksum: 10c0/bc40e6efe1e554d075469cedaba69a30eeb373552aaf41caeaaa45bf56ffacc2674261b106245bd566b35d8f3329b52d838e851ee0a852120acae26e622925c9 + languageName: node + linkType: hard + +"tar@npm:^7.4.3": + version: 7.4.3 + resolution: "tar@npm:7.4.3" + dependencies: + "@isaacs/fs-minipass": "npm:^4.0.0" + chownr: "npm:^3.0.0" + minipass: "npm:^7.1.2" + minizlib: "npm:^3.0.1" + mkdirp: "npm:^3.0.1" + yallist: "npm:^5.0.0" + checksum: 10c0/d4679609bb2a9b48eeaf84632b6d844128d2412b95b6de07d53d8ee8baf4ca0857c9331dfa510390a0727b550fd543d4d1a10995ad86cdf078423fbb8d99831d + languageName: node + linkType: hard + +"terser-webpack-plugin@npm:^5.3.11, terser-webpack-plugin@npm:^5.3.9": + version: 5.3.14 + resolution: "terser-webpack-plugin@npm:5.3.14" + dependencies: + "@jridgewell/trace-mapping": "npm:^0.3.25" + jest-worker: "npm:^27.4.5" + schema-utils: "npm:^4.3.0" + serialize-javascript: "npm:^6.0.2" + terser: "npm:^5.31.1" + peerDependencies: + webpack: ^5.1.0 + peerDependenciesMeta: + "@swc/core": + optional: true + esbuild: + optional: true + uglify-js: + optional: true + checksum: 10c0/9b060947241af43bd6fd728456f60e646186aef492163672a35ad49be6fbc7f63b54a7356c3f6ff40a8f83f00a977edc26f044b8e106cc611c053c8c0eaf8569 + languageName: node + linkType: hard + +"terser@npm:^5.10.0, terser@npm:^5.15.1, terser@npm:^5.31.1": + version: 5.39.1 + resolution: "terser@npm:5.39.1" + dependencies: + "@jridgewell/source-map": "npm:^0.3.3" + acorn: "npm:^8.8.2" + commander: "npm:^2.20.0" + source-map-support: "npm:~0.5.20" + bin: + terser: bin/terser + checksum: 10c0/d49e06dd4dd03661dac41f45c9cf187b2aa3fe80775235e838398c29311705169387c007f398ab44cd1bd8f89b14a1eea383feaa95c1cae29e3f5b6b606b6b37 + languageName: node + linkType: hard + +"text-table@npm:^0.2.0": + version: 0.2.0 + resolution: "text-table@npm:0.2.0" + checksum: 10c0/02805740c12851ea5982686810702e2f14369a5f4c5c40a836821e3eefc65ffeec3131ba324692a37608294b0fd8c1e55a2dd571ffed4909822787668ddbee5c + languageName: node + linkType: hard + +"thunky@npm:^1.0.2": + version: 1.1.0 + resolution: "thunky@npm:1.1.0" + checksum: 10c0/369764f39de1ce1de2ba2fa922db4a3f92e9c7f33bcc9a713241bc1f4a5238b484c17e0d36d1d533c625efb00e9e82c3e45f80b47586945557b45abb890156d2 + languageName: node + linkType: hard + +"tiny-invariant@npm:^1.0.2": + version: 1.3.3 + resolution: "tiny-invariant@npm:1.3.3" + checksum: 10c0/65af4a07324b591a059b35269cd696aba21bef2107f29b9f5894d83cc143159a204b299553435b03874ebb5b94d019afa8b8eff241c8a4cfee95872c2e1c1c4a + languageName: node + linkType: hard + +"tiny-warning@npm:^1.0.0": + version: 1.0.3 + resolution: "tiny-warning@npm:1.0.3" + checksum: 10c0/ef8531f581b30342f29670cb41ca248001c6fd7975ce22122bd59b8d62b4fc84ad4207ee7faa95cde982fa3357cd8f4be650142abc22805538c3b1392d7084fa + languageName: node + linkType: hard + +"tinyglobby@npm:^0.2.12": + version: 0.2.13 + resolution: "tinyglobby@npm:0.2.13" + dependencies: + fdir: "npm:^6.4.4" + picomatch: "npm:^4.0.2" + checksum: 10c0/ef07dfaa7b26936601d3f6d999f7928a4d1c6234c5eb36896bb88681947c0d459b7ebe797022400e555fe4b894db06e922b95d0ce60cb05fd827a0a66326b18c + languageName: node + linkType: hard + +"to-regex-range@npm:^5.0.1": + version: 5.0.1 + resolution: "to-regex-range@npm:5.0.1" + dependencies: + is-number: "npm:^7.0.0" + checksum: 10c0/487988b0a19c654ff3e1961b87f471702e708fa8a8dd02a298ef16da7206692e8552a0250e8b3e8759270f62e9d8314616f6da274734d3b558b1fc7b7724e892 + languageName: node + linkType: hard + +"toidentifier@npm:1.0.1": + version: 1.0.1 + resolution: "toidentifier@npm:1.0.1" + checksum: 10c0/93937279934bd66cc3270016dd8d0afec14fb7c94a05c72dc57321f8bd1fa97e5bea6d1f7c89e728d077ca31ea125b78320a616a6c6cd0e6b9cb94cb864381c1 + languageName: node + linkType: hard + +"totalist@npm:^3.0.0": + version: 3.0.1 + resolution: "totalist@npm:3.0.1" + checksum: 10c0/4bb1fadb69c3edbef91c73ebef9d25b33bbf69afe1e37ce544d5f7d13854cda15e47132f3e0dc4cafe300ddb8578c77c50a65004d8b6e97e77934a69aa924863 + languageName: node + linkType: hard + +"trim-lines@npm:^3.0.0": + version: 3.0.1 + resolution: "trim-lines@npm:3.0.1" + checksum: 10c0/3a1611fa9e52aa56a94c69951a9ea15b8aaad760eaa26c56a65330dc8adf99cb282fc07cc9d94968b7d4d88003beba220a7278bbe2063328eb23fb56f9509e94 + languageName: node + linkType: hard + +"trim-trailing-lines@npm:^2.0.0": + version: 2.1.0 + resolution: "trim-trailing-lines@npm:2.1.0" + checksum: 10c0/9b010d16b191422d08678f5a4988213dffd8ae9445e1b0f7f7b3e5b28ffdb062a8465a7988b66999b90589b386ddc93b56d23545ba75a74ebaf5838b30594cb9 + languageName: node + linkType: hard + +"trough@npm:^2.0.0": + version: 2.2.0 + resolution: "trough@npm:2.2.0" + checksum: 10c0/58b671fc970e7867a48514168894396dd94e6d9d6456aca427cc299c004fe67f35ed7172a36449086b2edde10e78a71a284ec0076809add6834fb8f857ccb9b0 + languageName: node + linkType: hard + +"ts-dedent@npm:^2.2.0": + version: 2.2.0 + resolution: "ts-dedent@npm:2.2.0" + checksum: 10c0/175adea838468cc2ff7d5e97f970dcb798bbcb623f29c6088cb21aa2880d207c5784be81ab1741f56b9ac37840cbaba0c0d79f7f8b67ffe61c02634cafa5c303 + languageName: node + linkType: hard + +"tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.6.0, tslib@npm:^2.7.0, tslib@npm:^2.8.0, tslib@npm:^2.8.1": + version: 2.8.1 + resolution: "tslib@npm:2.8.1" + checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62 + languageName: node + linkType: hard + +"type-fest@npm:^0.21.3": + version: 0.21.3 + resolution: "type-fest@npm:0.21.3" + checksum: 10c0/902bd57bfa30d51d4779b641c2bc403cdf1371fb9c91d3c058b0133694fcfdb817aef07a47f40faf79039eecbaa39ee9d3c532deff244f3a19ce68cea71a61e8 + languageName: node + linkType: hard + +"type-fest@npm:^1.0.1": + version: 1.4.0 + resolution: "type-fest@npm:1.4.0" + checksum: 10c0/a3c0f4ee28ff6ddf800d769eafafcdeab32efa38763c1a1b8daeae681920f6e345d7920bf277245235561d8117dab765cb5f829c76b713b4c9de0998a5397141 + languageName: node + linkType: hard + +"type-fest@npm:^2.13.0, type-fest@npm:^2.5.0": + version: 2.19.0 + resolution: "type-fest@npm:2.19.0" + checksum: 10c0/a5a7ecf2e654251613218c215c7493574594951c08e52ab9881c9df6a6da0aeca7528c213c622bc374b4e0cb5c443aa3ab758da4e3c959783ce884c3194e12cb + languageName: node + linkType: hard + +"type-is@npm:~1.6.18": + version: 1.6.18 + resolution: "type-is@npm:1.6.18" + dependencies: + media-typer: "npm:0.3.0" + mime-types: "npm:~2.1.24" + checksum: 10c0/a23daeb538591b7efbd61ecf06b6feb2501b683ffdc9a19c74ef5baba362b4347e42f1b4ed81f5882a8c96a3bfff7f93ce3ffaf0cbbc879b532b04c97a55db9d + languageName: node + linkType: hard + +"typedarray-to-buffer@npm:^3.1.5": + version: 3.1.5 + resolution: "typedarray-to-buffer@npm:3.1.5" + dependencies: + is-typedarray: "npm:^1.0.0" + checksum: 10c0/4ac5b7a93d604edabf3ac58d3a2f7e07487e9f6e98195a080e81dbffdc4127817f470f219d794a843b87052cedef102b53ac9b539855380b8c2172054b7d5027 + languageName: node + linkType: hard + +"typescript@npm:~5.2.2": + version: 5.2.2 + resolution: "typescript@npm:5.2.2" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/91ae3e6193d0ddb8656d4c418a033f0f75dec5e077ebbc2bd6d76439b93f35683936ee1bdc0e9cf94ec76863aa49f27159b5788219b50e1cd0cd6d110aa34b07 + languageName: node + linkType: hard + +"typescript@patch:typescript@npm%3A~5.2.2#optional!builtin": + version: 5.2.2 + resolution: "typescript@patch:typescript@npm%3A5.2.2#optional!builtin::version=5.2.2&hash=f3b441" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/062c1cee1990e6b9419ce8a55162b8dc917eb87f807e4de0327dbc1c2fa4e5f61bc0dd4e034d38ff541d1ed0479b53bcee8e4de3a4075c51a1724eb6216cb6f5 + languageName: node + linkType: hard + +"undici-types@npm:~6.21.0": + version: 6.21.0 + resolution: "undici-types@npm:6.21.0" + checksum: 10c0/c01ed51829b10aa72fc3ce64b747f8e74ae9b60eafa19a7b46ef624403508a54c526ffab06a14a26b3120d055e1104d7abe7c9017e83ced038ea5cf52f8d5e04 + languageName: node + linkType: hard + +"unicode-canonical-property-names-ecmascript@npm:^2.0.0": + version: 2.0.1 + resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.1" + checksum: 10c0/f83bc492fdbe662860795ef37a85910944df7310cac91bd778f1c19ebc911e8b9cde84e703de631e5a2fcca3905e39896f8fc5fc6a44ddaf7f4aff1cda24f381 + languageName: node + linkType: hard + +"unicode-emoji-modifier-base@npm:^1.0.0": + version: 1.0.0 + resolution: "unicode-emoji-modifier-base@npm:1.0.0" + checksum: 10c0/b37623fcf0162186debd20f116483e035a2d5b905b932a2c472459d9143d446ebcbefb2a494e2fe4fa7434355396e2a95ec3fc1f0c29a3bc8f2c827220e79c66 + languageName: node + linkType: hard + +"unicode-match-property-ecmascript@npm:^2.0.0": + version: 2.0.0 + resolution: "unicode-match-property-ecmascript@npm:2.0.0" + dependencies: + unicode-canonical-property-names-ecmascript: "npm:^2.0.0" + unicode-property-aliases-ecmascript: "npm:^2.0.0" + checksum: 10c0/4d05252cecaf5c8e36d78dc5332e03b334c6242faf7cf16b3658525441386c0a03b5f603d42cbec0f09bb63b9fd25c9b3b09667aee75463cac3efadae2cd17ec + languageName: node + linkType: hard + +"unicode-match-property-value-ecmascript@npm:^2.1.0": + version: 2.2.0 + resolution: "unicode-match-property-value-ecmascript@npm:2.2.0" + checksum: 10c0/1d0a2deefd97974ddff5b7cb84f9884177f4489928dfcebb4b2b091d6124f2739df51fc6ea15958e1b5637ac2a24cff9bf21ea81e45335086ac52c0b4c717d6d + languageName: node + linkType: hard + +"unicode-property-aliases-ecmascript@npm:^2.0.0": + version: 2.1.0 + resolution: "unicode-property-aliases-ecmascript@npm:2.1.0" + checksum: 10c0/50ded3f8c963c7785e48c510a3b7c6bc4e08a579551489aa0349680a35b1ceceec122e33b2b6c1b579d0be2250f34bb163ac35f5f8695fe10bbc67fb757f0af8 + languageName: node + linkType: hard + +"unified@npm:^11.0.0, unified@npm:^11.0.3, unified@npm:^11.0.4": + version: 11.0.5 + resolution: "unified@npm:11.0.5" + dependencies: + "@types/unist": "npm:^3.0.0" + bail: "npm:^2.0.0" + devlop: "npm:^1.0.0" + extend: "npm:^3.0.0" + is-plain-obj: "npm:^4.0.0" + trough: "npm:^2.0.0" + vfile: "npm:^6.0.0" + checksum: 10c0/53c8e685f56d11d9d458a43e0e74328a4d6386af51c8ac37a3dcabec74ce5026da21250590d4aff6733ccd7dc203116aae2b0769abc18cdf9639a54ae528dfc9 + languageName: node + linkType: hard + +"unique-filename@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-filename@npm:4.0.0" + dependencies: + unique-slug: "npm:^5.0.0" + checksum: 10c0/38ae681cceb1408ea0587b6b01e29b00eee3c84baee1e41fd5c16b9ed443b80fba90c40e0ba69627e30855570a34ba8b06702d4a35035d4b5e198bf5a64c9ddc + languageName: node + linkType: hard + +"unique-slug@npm:^5.0.0": + version: 5.0.0 + resolution: "unique-slug@npm:5.0.0" + dependencies: + imurmurhash: "npm:^0.1.4" + checksum: 10c0/d324c5a44887bd7e105ce800fcf7533d43f29c48757ac410afd42975de82cc38ea2035c0483f4de82d186691bf3208ef35c644f73aa2b1b20b8e651be5afd293 + languageName: node + linkType: hard + +"unique-string@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-string@npm:3.0.0" + dependencies: + crypto-random-string: "npm:^4.0.0" + checksum: 10c0/b35ea034b161b2a573666ec16c93076b4b6106b8b16c2415808d747ab3a0566b5db0c4be231d4b11cfbc16d7fd915c9d8a45884bff0e2db11b799775b2e1e017 + languageName: node + linkType: hard + +"unist-builder@npm:^4.0.0": + version: 4.0.0 + resolution: "unist-builder@npm:4.0.0" + dependencies: + "@types/unist": "npm:^3.0.0" + checksum: 10c0/8296a70703bb1be8dfaa2fb59c05480a84df464f359ce61c7db98db2dc4dfb2219a17020a3feaca65c44841e631133cbf829047b9f92941b30dad003f9052d14 + languageName: node + linkType: hard + +"unist-util-find-after@npm:^5.0.0": + version: 5.0.0 + resolution: "unist-util-find-after@npm:5.0.0" + dependencies: + "@types/unist": "npm:^3.0.0" + unist-util-is: "npm:^6.0.0" + checksum: 10c0/a7cea473c4384df8de867c456b797ff1221b20f822e1af673ff5812ed505358b36f47f3b084ac14c3622cb879ed833b71b288e8aa71025352a2aab4c2925a6eb + languageName: node + linkType: hard + +"unist-util-is@npm:^6.0.0": + version: 6.0.0 + resolution: "unist-util-is@npm:6.0.0" + dependencies: + "@types/unist": "npm:^3.0.0" + checksum: 10c0/9419352181eaa1da35eca9490634a6df70d2217815bb5938a04af3a662c12c5607a2f1014197ec9c426fbef18834f6371bfdb6f033040fa8aa3e965300d70e7e + languageName: node + linkType: hard + +"unist-util-position-from-estree@npm:^2.0.0": + version: 2.0.0 + resolution: "unist-util-position-from-estree@npm:2.0.0" + dependencies: + "@types/unist": "npm:^3.0.0" + checksum: 10c0/39127bf5f0594e0a76d9241dec4f7aa26323517120ce1edd5ed91c8c1b9df7d6fb18af556e4b6250f1c7368825720ed892e2b6923be5cdc08a9bb16536dc37b3 + languageName: node + linkType: hard + +"unist-util-position@npm:^5.0.0": + version: 5.0.0 + resolution: "unist-util-position@npm:5.0.0" + dependencies: + "@types/unist": "npm:^3.0.0" + checksum: 10c0/dde3b31e314c98f12b4dc6402f9722b2bf35e96a4f2d463233dd90d7cde2d4928074a7a11eff0a5eb1f4e200f27fc1557e0a64a7e8e4da6558542f251b1b7400 + languageName: node + linkType: hard + +"unist-util-remove-position@npm:^5.0.0": + version: 5.0.0 + resolution: "unist-util-remove-position@npm:5.0.0" + dependencies: + "@types/unist": "npm:^3.0.0" + unist-util-visit: "npm:^5.0.0" + checksum: 10c0/e8c76da4399446b3da2d1c84a97c607b37d03d1d92561e14838cbe4fdcb485bfc06c06cfadbb808ccb72105a80643976d0660d1fe222ca372203075be9d71105 + languageName: node + linkType: hard + +"unist-util-stringify-position@npm:^4.0.0": + version: 4.0.0 + resolution: "unist-util-stringify-position@npm:4.0.0" + dependencies: + "@types/unist": "npm:^3.0.0" + checksum: 10c0/dfe1dbe79ba31f589108cb35e523f14029b6675d741a79dea7e5f3d098785045d556d5650ec6a8338af11e9e78d2a30df12b1ee86529cded1098da3f17ee999e + languageName: node + linkType: hard + +"unist-util-visit-parents@npm:^6.0.0": + version: 6.0.1 + resolution: "unist-util-visit-parents@npm:6.0.1" + dependencies: + "@types/unist": "npm:^3.0.0" + unist-util-is: "npm:^6.0.0" + checksum: 10c0/51b1a5b0aa23c97d3e03e7288f0cdf136974df2217d0999d3de573c05001ef04cccd246f51d2ebdfb9e8b0ed2704451ad90ba85ae3f3177cf9772cef67f56206 + languageName: node + linkType: hard + +"unist-util-visit@npm:^5.0.0": + version: 5.0.0 + resolution: "unist-util-visit@npm:5.0.0" + dependencies: + "@types/unist": "npm:^3.0.0" + unist-util-is: "npm:^6.0.0" + unist-util-visit-parents: "npm:^6.0.0" + checksum: 10c0/51434a1d80252c1540cce6271a90fd1a106dbe624997c09ed8879279667fb0b2d3a685e02e92bf66598dcbe6cdffa7a5f5fb363af8fdf90dda6c855449ae39a5 + languageName: node + linkType: hard + +"universalify@npm:^2.0.0": + version: 2.0.1 + resolution: "universalify@npm:2.0.1" + checksum: 10c0/73e8ee3809041ca8b818efb141801a1004e3fc0002727f1531f4de613ea281b494a40909596dae4a042a4fb6cd385af5d4db2e137b1362e0e91384b828effd3a + languageName: node + linkType: hard + +"unpipe@npm:1.0.0, unpipe@npm:~1.0.0": + version: 1.0.0 + resolution: "unpipe@npm:1.0.0" + checksum: 10c0/193400255bd48968e5c5383730344fbb4fa114cdedfab26e329e50dd2d81b134244bb8a72c6ac1b10ab0281a58b363d06405632c9d49ca9dfd5e90cbd7d0f32c + languageName: node + linkType: hard + +"update-browserslist-db@npm:^1.1.3": + version: 1.1.3 + resolution: "update-browserslist-db@npm:1.1.3" + dependencies: + escalade: "npm:^3.2.0" + picocolors: "npm:^1.1.1" + peerDependencies: + browserslist: ">= 4.21.0" + bin: + update-browserslist-db: cli.js + checksum: 10c0/682e8ecbf9de474a626f6462aa85927936cdd256fe584c6df2508b0df9f7362c44c957e9970df55dfe44d3623807d26316ea2c7d26b80bb76a16c56c37233c32 + languageName: node + linkType: hard + +"update-notifier@npm:^6.0.2": + version: 6.0.2 + resolution: "update-notifier@npm:6.0.2" + dependencies: + boxen: "npm:^7.0.0" + chalk: "npm:^5.0.1" + configstore: "npm:^6.0.0" + has-yarn: "npm:^3.0.0" + import-lazy: "npm:^4.0.0" + is-ci: "npm:^3.0.1" + is-installed-globally: "npm:^0.4.0" + is-npm: "npm:^6.0.0" + is-yarn-global: "npm:^0.4.0" + latest-version: "npm:^7.0.0" + pupa: "npm:^3.1.0" + semver: "npm:^7.3.7" + semver-diff: "npm:^4.0.0" + xdg-basedir: "npm:^5.1.0" + checksum: 10c0/ad3980073312df904133a6e6c554a7f9d0832ed6275e55f5a546313fe77a0f20f23a7b1b4aeb409e20a78afb06f4d3b2b28b332d9cfb55745b5d1ea155810bcc + languageName: node + linkType: hard + +"uri-js@npm:^4.2.2": + version: 4.4.1 + resolution: "uri-js@npm:4.4.1" + dependencies: + punycode: "npm:^2.1.0" + checksum: 10c0/4ef57b45aa820d7ac6496e9208559986c665e49447cb072744c13b66925a362d96dd5a46c4530a6b8e203e5db5fe849369444440cb22ecfc26c679359e5dfa3c + languageName: node + linkType: hard + +"url-loader@npm:^4.1.1": + version: 4.1.1 + resolution: "url-loader@npm:4.1.1" + dependencies: + loader-utils: "npm:^2.0.0" + mime-types: "npm:^2.1.27" + schema-utils: "npm:^3.0.0" + peerDependencies: + file-loader: "*" + webpack: ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + file-loader: + optional: true + checksum: 10c0/71b6300e02ce26c70625eae1a2297c0737635038c62691bb3007ac33e85c0130efc74bfb444baf5c6b3bad5953491159d31d66498967d1417865d0c7e7cd1a64 + languageName: node + linkType: hard + +"util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1": + version: 1.0.2 + resolution: "util-deprecate@npm:1.0.2" + checksum: 10c0/41a5bdd214df2f6c3ecf8622745e4a366c4adced864bc3c833739791aeeeb1838119af7daed4ba36428114b5c67dcda034a79c882e97e43c03e66a4dd7389942 + languageName: node + linkType: hard + +"utila@npm:~0.4": + version: 0.4.0 + resolution: "utila@npm:0.4.0" + checksum: 10c0/2791604e09ca4f77ae314df83e80d1805f867eb5c7e13e7413caee01273c278cf2c9a3670d8d25c889a877f7b149d892fe61b0181a81654b425e9622ab23d42e + languageName: node + linkType: hard + +"utility-types@npm:^3.10.0": + version: 3.11.0 + resolution: "utility-types@npm:3.11.0" + checksum: 10c0/2f1580137b0c3e6cf5405f37aaa8f5249961a76d26f1ca8efc0ff49a2fc0e0b2db56de8e521a174d075758e0c7eb3e590edec0832eb44478b958f09914920f19 + languageName: node + linkType: hard + +"utils-merge@npm:1.0.1": + version: 1.0.1 + resolution: "utils-merge@npm:1.0.1" + checksum: 10c0/02ba649de1b7ca8854bfe20a82f1dfbdda3fb57a22ab4a8972a63a34553cf7aa51bc9081cf7e001b035b88186d23689d69e71b510e610a09a4c66f68aa95b672 + languageName: node + linkType: hard + +"uuid@npm:^8.3.2": + version: 8.3.2 + resolution: "uuid@npm:8.3.2" + bin: + uuid: dist/bin/uuid + checksum: 10c0/bcbb807a917d374a49f475fae2e87fdca7da5e5530820ef53f65ba1d12131bd81a92ecf259cc7ce317cbe0f289e7d79fdfebcef9bfa3087c8c8a2fa304c9be54 + languageName: node + linkType: hard + +"value-equal@npm:^1.0.1": + version: 1.0.1 + resolution: "value-equal@npm:1.0.1" + checksum: 10c0/79068098355483ef29f4d3753999ad880875b87625d7e9055cad9346ea4b7662aad3a66f87976801b0dd7a6f828ba973d28b1669ebcd37eaf88cc5f687c1a691 + languageName: node + linkType: hard + +"vary@npm:~1.1.2": + version: 1.1.2 + resolution: "vary@npm:1.1.2" + checksum: 10c0/f15d588d79f3675135ba783c91a4083dcd290a2a5be9fcb6514220a1634e23df116847b1cc51f66bfb0644cf9353b2abb7815ae499bab06e46dd33c1a6bf1f4f + languageName: node + linkType: hard + +"vfile-location@npm:^5.0.0": + version: 5.0.3 + resolution: "vfile-location@npm:5.0.3" + dependencies: + "@types/unist": "npm:^3.0.0" + vfile: "npm:^6.0.0" + checksum: 10c0/1711f67802a5bc175ea69750d59863343ed43d1b1bb25c0a9063e4c70595e673e53e2ed5cdbb6dcdc370059b31605144d95e8c061b9361bcc2b036b8f63a4966 + languageName: node + linkType: hard + +"vfile-message@npm:^4.0.0": + version: 4.0.2 + resolution: "vfile-message@npm:4.0.2" + dependencies: + "@types/unist": "npm:^3.0.0" + unist-util-stringify-position: "npm:^4.0.0" + checksum: 10c0/07671d239a075f888b78f318bc1d54de02799db4e9dce322474e67c35d75ac4a5ac0aaf37b18801d91c9f8152974ea39678aa72d7198758b07f3ba04fb7d7514 + languageName: node + linkType: hard + +"vfile@npm:^6.0.0, vfile@npm:^6.0.1": + version: 6.0.3 + resolution: "vfile@npm:6.0.3" + dependencies: + "@types/unist": "npm:^3.0.0" + vfile-message: "npm:^4.0.0" + checksum: 10c0/e5d9eb4810623f23758cfc2205323e33552fb5972e5c2e6587babe08fe4d24859866277404fb9e2a20afb71013860d96ec806cb257536ae463c87d70022ab9ef + languageName: node + linkType: hard + +"watchpack@npm:^2.4.1": + version: 2.4.2 + resolution: "watchpack@npm:2.4.2" + dependencies: + glob-to-regexp: "npm:^0.4.1" + graceful-fs: "npm:^4.1.2" + checksum: 10c0/ec60a5f0e9efaeca0102fd9126346b3b2d523e01c34030d3fddf5813a7125765121ebdc2552981136dcd2c852deb1af0b39340f2fcc235f292db5399d0283577 + languageName: node + linkType: hard + +"wbuf@npm:^1.1.0, wbuf@npm:^1.7.3": + version: 1.7.3 + resolution: "wbuf@npm:1.7.3" + dependencies: + minimalistic-assert: "npm:^1.0.0" + checksum: 10c0/56edcc5ef2b3d30913ba8f1f5cccc364d180670b24d5f3f8849c1e6fb514e5c7e3a87548ae61227a82859eba6269c11393ae24ce12a2ea1ecb9b465718ddced7 + languageName: node + linkType: hard + +"web-namespaces@npm:^2.0.0": + version: 2.0.1 + resolution: "web-namespaces@npm:2.0.1" + checksum: 10c0/df245f466ad83bd5cd80bfffc1674c7f64b7b84d1de0e4d2c0934fb0782e0a599164e7197a4bce310ee3342fd61817b8047ff04f076a1ce12dd470584142a4bd + languageName: node + linkType: hard + +"web-streams-polyfill@npm:^3.0.3": + version: 3.3.3 + resolution: "web-streams-polyfill@npm:3.3.3" + checksum: 10c0/64e855c47f6c8330b5436147db1c75cb7e7474d924166800e8e2aab5eb6c76aac4981a84261dd2982b3e754490900b99791c80ae1407a9fa0dcff74f82ea3a7f + languageName: node + linkType: hard + +"webpack-bundle-analyzer@npm:^4.10.2": + version: 4.10.2 + resolution: "webpack-bundle-analyzer@npm:4.10.2" + dependencies: + "@discoveryjs/json-ext": "npm:0.5.7" + acorn: "npm:^8.0.4" + acorn-walk: "npm:^8.0.0" + commander: "npm:^7.2.0" + debounce: "npm:^1.2.1" + escape-string-regexp: "npm:^4.0.0" + gzip-size: "npm:^6.0.0" + html-escaper: "npm:^2.0.2" + opener: "npm:^1.5.2" + picocolors: "npm:^1.0.0" + sirv: "npm:^2.0.3" + ws: "npm:^7.3.1" + bin: + webpack-bundle-analyzer: lib/bin/analyzer.js + checksum: 10c0/00603040e244ead15b2d92981f0559fa14216381349412a30070a7358eb3994cd61a8221d34a3b3fb8202dc3d1c5ee1fbbe94c5c52da536e5b410aa1cf279a48 + languageName: node + linkType: hard + +"webpack-dev-middleware@npm:^5.3.4": + version: 5.3.4 + resolution: "webpack-dev-middleware@npm:5.3.4" + dependencies: + colorette: "npm:^2.0.10" + memfs: "npm:^3.4.3" + mime-types: "npm:^2.1.31" + range-parser: "npm:^1.2.1" + schema-utils: "npm:^4.0.0" + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + checksum: 10c0/257df7d6bc5494d1d3cb66bba70fbdf5a6e0423e39b6420f7631aeb52435afbfbff8410a62146dcdf3d2f945c62e03193aae2ac1194a2f7d5a2523b9d194e9e1 + languageName: node + linkType: hard + +"webpack-dev-server@npm:^4.15.2": + version: 4.15.2 + resolution: "webpack-dev-server@npm:4.15.2" + dependencies: + "@types/bonjour": "npm:^3.5.9" + "@types/connect-history-api-fallback": "npm:^1.3.5" + "@types/express": "npm:^4.17.13" + "@types/serve-index": "npm:^1.9.1" + "@types/serve-static": "npm:^1.13.10" + "@types/sockjs": "npm:^0.3.33" + "@types/ws": "npm:^8.5.5" + ansi-html-community: "npm:^0.0.8" + bonjour-service: "npm:^1.0.11" + chokidar: "npm:^3.5.3" + colorette: "npm:^2.0.10" + compression: "npm:^1.7.4" + connect-history-api-fallback: "npm:^2.0.0" + default-gateway: "npm:^6.0.3" + express: "npm:^4.17.3" + graceful-fs: "npm:^4.2.6" + html-entities: "npm:^2.3.2" + http-proxy-middleware: "npm:^2.0.3" + ipaddr.js: "npm:^2.0.1" + launch-editor: "npm:^2.6.0" + open: "npm:^8.0.9" + p-retry: "npm:^4.5.0" + rimraf: "npm:^3.0.2" + schema-utils: "npm:^4.0.0" + selfsigned: "npm:^2.1.1" + serve-index: "npm:^1.9.1" + sockjs: "npm:^0.3.24" + spdy: "npm:^4.0.2" + webpack-dev-middleware: "npm:^5.3.4" + ws: "npm:^8.13.0" + peerDependencies: + webpack: ^4.37.0 || ^5.0.0 + peerDependenciesMeta: + webpack: + optional: true + webpack-cli: + optional: true + bin: + webpack-dev-server: bin/webpack-dev-server.js + checksum: 10c0/625bd5b79360afcf98782c8b1fd710b180bb0e96d96b989defff550c546890010ceea82ffbecb2a0a23f7f018bc72f2dee7b3070f7b448fb0110df6657fb2904 + languageName: node + linkType: hard + +"webpack-merge@npm:^5.9.0": + version: 5.10.0 + resolution: "webpack-merge@npm:5.10.0" + dependencies: + clone-deep: "npm:^4.0.1" + flat: "npm:^5.0.2" + wildcard: "npm:^2.0.0" + checksum: 10c0/b607c84cabaf74689f965420051a55a08722d897bdd6c29cb0b2263b451c090f962d41ecf8c9bf56b0ab3de56e65476ace0a8ecda4f4a4663684243d90e0512b + languageName: node + linkType: hard + +"webpack-merge@npm:^6.0.1": + version: 6.0.1 + resolution: "webpack-merge@npm:6.0.1" + dependencies: + clone-deep: "npm:^4.0.1" + flat: "npm:^5.0.2" + wildcard: "npm:^2.0.1" + checksum: 10c0/bf1429567858b353641801b8a2696ca0aac270fc8c55d4de8a7b586fe07d27fdcfc83099a98ab47e6162383db8dd63bb8cc25b1beb2ec82150422eec843b0dc0 + languageName: node + linkType: hard + +"webpack-sources@npm:^3.2.3": + version: 3.2.3 + resolution: "webpack-sources@npm:3.2.3" + checksum: 10c0/2ef63d77c4fad39de4a6db17323d75eb92897b32674e97d76f0a1e87c003882fc038571266ad0ef581ac734cbe20952912aaa26155f1905e96ce251adbb1eb4e + languageName: node + linkType: hard + +"webpack@npm:^5.88.1, webpack@npm:^5.95.0": + version: 5.99.8 + resolution: "webpack@npm:5.99.8" + dependencies: + "@types/eslint-scope": "npm:^3.7.7" + "@types/estree": "npm:^1.0.6" + "@types/json-schema": "npm:^7.0.15" + "@webassemblyjs/ast": "npm:^1.14.1" + "@webassemblyjs/wasm-edit": "npm:^1.14.1" + "@webassemblyjs/wasm-parser": "npm:^1.14.1" + acorn: "npm:^8.14.0" + browserslist: "npm:^4.24.0" + chrome-trace-event: "npm:^1.0.2" + enhanced-resolve: "npm:^5.17.1" + es-module-lexer: "npm:^1.2.1" + eslint-scope: "npm:5.1.1" + events: "npm:^3.2.0" + glob-to-regexp: "npm:^0.4.1" + graceful-fs: "npm:^4.2.11" + json-parse-even-better-errors: "npm:^2.3.1" + loader-runner: "npm:^4.2.0" + mime-types: "npm:^2.1.27" + neo-async: "npm:^2.6.2" + schema-utils: "npm:^4.3.2" + tapable: "npm:^2.1.1" + terser-webpack-plugin: "npm:^5.3.11" + watchpack: "npm:^2.4.1" + webpack-sources: "npm:^3.2.3" + peerDependenciesMeta: + webpack-cli: + optional: true + bin: + webpack: bin/webpack.js + checksum: 10c0/c4852c3b795ed3fba799d2925802a4e259b2de7c2c597f0aaf0e228acfdc6755389ed8c29f1dad86610a9c6ad968c0b57c702b93891d60f09d302af63b2debe0 + languageName: node + linkType: hard + +"webpackbar@npm:^6.0.1": + version: 6.0.1 + resolution: "webpackbar@npm:6.0.1" + dependencies: + ansi-escapes: "npm:^4.3.2" + chalk: "npm:^4.1.2" + consola: "npm:^3.2.3" + figures: "npm:^3.2.0" + markdown-table: "npm:^2.0.0" + pretty-time: "npm:^1.1.0" + std-env: "npm:^3.7.0" + wrap-ansi: "npm:^7.0.0" + peerDependencies: + webpack: 3 || 4 || 5 + checksum: 10c0/8dfa2c55f8122f729c7efd515a2b50fb752c0d0cb27ec2ecdbc70d90a86d5f69f466c9c5d01004f71b500dafba957ecd4413fca196a98cf99a39b705f98cae97 + languageName: node + linkType: hard + +"websocket-driver@npm:>=0.5.1, websocket-driver@npm:^0.7.4": + version: 0.7.4 + resolution: "websocket-driver@npm:0.7.4" + dependencies: + http-parser-js: "npm:>=0.5.1" + safe-buffer: "npm:>=5.1.0" + websocket-extensions: "npm:>=0.1.1" + checksum: 10c0/5f09547912b27bdc57bac17b7b6527d8993aa4ac8a2d10588bb74aebaf785fdcf64fea034aae0c359b7adff2044dd66f3d03866e4685571f81b13e548f9021f1 + languageName: node + linkType: hard + +"websocket-extensions@npm:>=0.1.1": + version: 0.1.4 + resolution: "websocket-extensions@npm:0.1.4" + checksum: 10c0/bbc8c233388a0eb8a40786ee2e30d35935cacbfe26ab188b3e020987e85d519c2009fe07cfc37b7f718b85afdba7e54654c9153e6697301f72561bfe429177e0 + languageName: node + linkType: hard + +"which@npm:^1.3.1": + version: 1.3.1 + resolution: "which@npm:1.3.1" + dependencies: + isexe: "npm:^2.0.0" + bin: + which: ./bin/which + checksum: 10c0/e945a8b6bbf6821aaaef7f6e0c309d4b615ef35699576d5489b4261da9539f70393c6b2ce700ee4321c18f914ebe5644bc4631b15466ffbaad37d83151f6af59 + languageName: node + linkType: hard + +"which@npm:^2.0.1": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: "npm:^2.0.0" + bin: + node-which: ./bin/node-which + checksum: 10c0/66522872a768b60c2a65a57e8ad184e5372f5b6a9ca6d5f033d4b0dc98aff63995655a7503b9c0a2598936f532120e81dd8cc155e2e92ed662a2b9377cc4374f + languageName: node + linkType: hard + +"which@npm:^5.0.0": + version: 5.0.0 + resolution: "which@npm:5.0.0" + dependencies: + isexe: "npm:^3.1.1" + bin: + node-which: bin/which.js + checksum: 10c0/e556e4cd8b7dbf5df52408c9a9dd5ac6518c8c5267c8953f5b0564073c66ed5bf9503b14d876d0e9c7844d4db9725fb0dcf45d6e911e17e26ab363dc3965ae7b + languageName: node + linkType: hard + +"widest-line@npm:^4.0.1": + version: 4.0.1 + resolution: "widest-line@npm:4.0.1" + dependencies: + string-width: "npm:^5.0.1" + checksum: 10c0/7da9525ba45eaf3e4ed1a20f3dcb9b85bd9443962450694dae950f4bdd752839747bbc14713522b0b93080007de8e8af677a61a8c2114aa553ad52bde72d0f9c + languageName: node + linkType: hard + +"wildcard@npm:^2.0.0, wildcard@npm:^2.0.1": + version: 2.0.1 + resolution: "wildcard@npm:2.0.1" + checksum: 10c0/08f70cd97dd9a20aea280847a1fe8148e17cae7d231640e41eb26d2388697cbe65b67fd9e68715251c39b080c5ae4f76d71a9a69fa101d897273efdfb1b58bf7 + languageName: node + linkType: hard + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" + dependencies: + ansi-styles: "npm:^4.0.0" + string-width: "npm:^4.1.0" + strip-ansi: "npm:^6.0.0" + checksum: 10c0/d15fc12c11e4cbc4044a552129ebc75ee3f57aa9c1958373a4db0292d72282f54373b536103987a4a7594db1ef6a4f10acf92978f79b98c49306a4b58c77d4da + languageName: node + linkType: hard + +"wrap-ansi@npm:^8.0.1, wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" + dependencies: + ansi-styles: "npm:^6.1.0" + string-width: "npm:^5.0.1" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/138ff58a41d2f877eae87e3282c0630fc2789012fc1af4d6bd626eeb9a2f9a65ca92005e6e69a75c7b85a68479fe7443c7dbe1eb8fbaa681a4491364b7c55c60 + languageName: node + linkType: hard + +"wrappy@npm:1": + version: 1.0.2 + resolution: "wrappy@npm:1.0.2" + checksum: 10c0/56fece1a4018c6a6c8e28fbc88c87e0fbf4ea8fd64fc6c63b18f4acc4bd13e0ad2515189786dd2c30d3eec9663d70f4ecf699330002f8ccb547e4a18231fc9f0 + languageName: node + linkType: hard + +"write-file-atomic@npm:^3.0.3": + version: 3.0.3 + resolution: "write-file-atomic@npm:3.0.3" + dependencies: + imurmurhash: "npm:^0.1.4" + is-typedarray: "npm:^1.0.0" + signal-exit: "npm:^3.0.2" + typedarray-to-buffer: "npm:^3.1.5" + checksum: 10c0/7fb67affd811c7a1221bed0c905c26e28f0041e138fb19ccf02db57a0ef93ea69220959af3906b920f9b0411d1914474cdd90b93a96e5cd9e8368d9777caac0e + languageName: node + linkType: hard + +"ws@npm:^7.3.1": + version: 7.5.10 + resolution: "ws@npm:7.5.10" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 10c0/bd7d5f4aaf04fae7960c23dcb6c6375d525e00f795dd20b9385902bd008c40a94d3db3ce97d878acc7573df852056ca546328b27b39f47609f80fb22a0a9b61d + languageName: node + linkType: hard + +"ws@npm:^8.13.0": + version: 8.18.2 + resolution: "ws@npm:8.18.2" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 10c0/4b50f67931b8c6943c893f59c524f0e4905bbd183016cfb0f2b8653aa7f28dad4e456b9d99d285bbb67cca4fedd9ce90dfdfaa82b898a11414ebd66ee99141e4 + languageName: node + linkType: hard + +"ws@npm:^8.18.0, ws@npm:^8.8.1": + version: 8.18.3 + resolution: "ws@npm:8.18.3" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 10c0/eac918213de265ef7cb3d4ca348b891a51a520d839aa51cdb8ca93d4fa7ff9f6ccb339ccee89e4075324097f0a55157c89fa3f7147bde9d8d7e90335dc087b53 + languageName: node + linkType: hard + +"xdg-basedir@npm:^5.0.1, xdg-basedir@npm:^5.1.0": + version: 5.1.0 + resolution: "xdg-basedir@npm:5.1.0" + checksum: 10c0/c88efabc71ffd996ba9ad8923a8cc1c7c020a03e2c59f0ffa72e06be9e724ad2a0fccef488757bc6ed3d8849d753dd25082d1035d95cb179e79eae4d034d0b80 + languageName: node + linkType: hard + +"xml-js@npm:^1.6.11": + version: 1.6.11 + resolution: "xml-js@npm:1.6.11" + dependencies: + sax: "npm:^1.2.4" + bin: + xml-js: ./bin/cli.js + checksum: 10c0/c83631057f10bf90ea785cee434a8a1a0030c7314fe737ad9bf568a281083b565b28b14c9e9ba82f11fc9dc582a3a907904956af60beb725be1c9ad4b030bc5a + languageName: node + linkType: hard + +"yallist@npm:^3.0.2": + version: 3.1.1 + resolution: "yallist@npm:3.1.1" + checksum: 10c0/c66a5c46bc89af1625476f7f0f2ec3653c1a1791d2f9407cfb4c2ba812a1e1c9941416d71ba9719876530e3340a99925f697142989371b72d93b9ee628afd8c1 + languageName: node + linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 10c0/2286b5e8dbfe22204ab66e2ef5cc9bbb1e55dfc873bbe0d568aa943eb255d131890dfd5bf243637273d31119b870f49c18fcde2c6ffbb7a7a092b870dc90625a + languageName: node + linkType: hard + +"yallist@npm:^5.0.0": + version: 5.0.0 + resolution: "yallist@npm:5.0.0" + checksum: 10c0/a499c81ce6d4a1d260d4ea0f6d49ab4da09681e32c3f0472dee16667ed69d01dae63a3b81745a24bd78476ec4fcf856114cb4896ace738e01da34b2c42235416 + languageName: node + linkType: hard + +"yaml@npm:^1.7.2": + version: 1.10.2 + resolution: "yaml@npm:1.10.2" + checksum: 10c0/5c28b9eb7adc46544f28d9a8d20c5b3cb1215a886609a2fd41f51628d8aaa5878ccd628b755dbcd29f6bb4921bd04ffbc6dcc370689bb96e594e2f9813d2605f + languageName: node + linkType: hard + +"yocto-queue@npm:^0.1.0": + version: 0.1.0 + resolution: "yocto-queue@npm:0.1.0" + checksum: 10c0/dceb44c28578b31641e13695d200d34ec4ab3966a5729814d5445b194933c096b7ced71494ce53a0e8820685d1d010df8b2422e5bf2cdea7e469d97ffbea306f + languageName: node + linkType: hard + +"yocto-queue@npm:^1.0.0": + version: 1.2.1 + resolution: "yocto-queue@npm:1.2.1" + checksum: 10c0/5762caa3d0b421f4bdb7a1926b2ae2189fc6e4a14469258f183600028eb16db3e9e0306f46e8ebf5a52ff4b81a881f22637afefbef5399d6ad440824e9b27f9f + languageName: node + linkType: hard + +"zwitch@npm:^2.0.0, zwitch@npm:^2.0.4": + version: 2.0.4 + resolution: "zwitch@npm:2.0.4" + checksum: 10c0/3c7830cdd3378667e058ffdb4cf2bb78ac5711214e2725900873accb23f3dfe5f9e7e5a06dcdc5f29605da976fc45c26d9a13ca334d6eea2245a15e77b8fc06e + languageName: node + linkType: hard