From 265ec389a8165ca07e37a391ae8e74370eecfa52 Mon Sep 17 00:00:00 2001 From: Andreja Markovic Date: Tue, 21 Oct 2025 12:47:59 +0200 Subject: [PATCH 01/28] add assets page --- .nav.yml | 1 + reference/polkadot-hub/.nav.yml | 3 +- .../assets-and-smart-contracts.md | 235 ------------------ reference/polkadot-hub/assets.md | 215 ++++++++++++++++ reference/polkadot-hub/smart-contracts.md | 150 +++++++++++ 5 files changed, 368 insertions(+), 236 deletions(-) delete mode 100644 reference/polkadot-hub/assets-and-smart-contracts.md create mode 100644 reference/polkadot-hub/assets.md create mode 100644 reference/polkadot-hub/smart-contracts.md diff --git a/.nav.yml b/.nav.yml index 0bb75ad17..7e671e3fa 100644 --- a/.nav.yml +++ b/.nav.yml @@ -3,5 +3,6 @@ nav: - 'Smart Contracts': smart-contracts - 'Parachains': parachains - 'Chain Interactions': chain-interactions + - 'Technical Reference': reference # 'Get Support': get-support - 'Nodes and Validators': nodes-and-validators diff --git a/reference/polkadot-hub/.nav.yml b/reference/polkadot-hub/.nav.yml index 51b83e908..4cb55d4c8 100644 --- a/reference/polkadot-hub/.nav.yml +++ b/reference/polkadot-hub/.nav.yml @@ -1,7 +1,8 @@ nav: - 'Overview': index.md - 'Consensus and Security': consensus-and-security - - 'Assets and Smart Contracts': assets-and-smart-contracts + - 'Assets': assets.md + - 'Smart Contracts': smart-contracts.md - 'Bridging': bridging.md - 'People and Identity': people-and-identity.md - 'Collectives and DAOs': collectives-and-daos.md diff --git a/reference/polkadot-hub/assets-and-smart-contracts.md b/reference/polkadot-hub/assets-and-smart-contracts.md deleted file mode 100644 index a8b5bb112..000000000 --- a/reference/polkadot-hub/assets-and-smart-contracts.md +++ /dev/null @@ -1,235 +0,0 @@ ---- -title: Asset Hub -description: Learn about Asset Hub in Polkadot, managing on-chain assets, foreign asset integration, and using XCM for cross-chain asset transfers. -categories: Polkadot Protocol ---- - -# Asset Hub - -## Introduction - -The Asset Hub is a critical component in the Polkadot ecosystem, enabling the management of fungible and non-fungible assets across the network. Since the relay chain focuses on maintaining security and consensus without direct asset management, Asset Hub provides a streamlined platform for creating, managing, and using on-chain assets in a fee-efficient manner. This guide outlines the core features of Asset Hub, including how it handles asset operations, cross-chain transfers, and asset integration using XCM, as well as essential tools like [API Sidecar](#api-sidecar) and [`TxWrapper`](#txwrapper) for developers working with on-chain assets. - -## Assets Basics - -In the Polkadot ecosystem, the relay chain does not natively support additional assets beyond its native token (DOT for Polkadot, KSM for Kusama). The Asset Hub parachain on Polkadot and Kusama provides a fungible and non-fungible assets framework. Asset Hub allows developers and users to create, manage, and use assets across the ecosystem. - -Asset creators can use Asset Hub to track their asset issuance across multiple parachains and manage assets through operations such as minting, burning, and transferring. Projects that need a standardized method of handling on-chain assets will find this particularly useful. The fungible asset interface provided by Asset Hub closely resembles Ethereum's ERC-20 standard but is directly integrated into Polkadot's runtime, making it more efficient in terms of speed and transaction fees. - -Integrating with Asset Hub offers several key benefits, particularly for infrastructure providers and users: - -- **Support for non-native on-chain assets**: Asset Hub enables seamless asset creation and management, allowing projects to develop tokens or assets that can interact with the broader ecosystem. -- **Lower transaction fees**: Asset Hub offers significantly lower transaction costs—approximately one-tenth of the fees on the relay chain, providing cost-efficiency for regular operations. -- **Reduced deposit requirements**: Depositing assets in Asset Hub is more accessible, with deposit requirements that are around one one-hundredth of those on the relay chain. -- **Payment of transaction fees with non-native assets**: Users can pay transaction fees in assets other than the native token (DOT or KSM), offering more flexibility for developers and users. - -Assets created on the Asset Hub are stored as part of a map, where each asset has a unique ID that links to information about the asset, including details like: - -- The management team. -- The total supply. -- The number of accounts holding the asset. -- **Sufficiency for account existence**: Whether the asset alone is enough to maintain an account without a native token balance. -- The metadata of the asset, including its name, symbol, and the number of decimals for representation. - -Some assets can be regarded as sufficient to maintain an account's existence, meaning that users can create accounts on the network without needing a native token balance (i.e., no existential deposit required). Developers can also set minimum balances for their assets. If an account's balance drops below the minimum, the balance is considered dust and may be cleared. - -## Assets Pallet - -The Polkadot SDK's Assets pallet is a powerful module designated for creating and managing fungible asset classes with a fixed supply. It offers a secure and flexible way to issue, transfer, freeze, and destroy assets. The pallet supports various operations and includes permissioned and non-permissioned functions to cater to simple and advanced use cases. - -Visit the [Assets Pallet Rust docs](https://paritytech.github.io/polkadot-sdk/master/pallet_assets/index.html){target=\_blank} for more in-depth information. - -### Key Features - -Key features of the Assets pallet include: - -- **Asset issuance**: Allows the creation of a new asset, where the total supply is assigned to the creator's account. -- **Asset transfer**: Enables transferring assets between accounts while maintaining a balance in both accounts. -- **Asset freezing**: Prevents transfers of a specific asset from one account, locking it from further transactions. -- **Asset destruction**: Allows accounts to burn or destroy their holdings, removing those assets from circulation. -- **Non-custodial transfers**: A non-custodial mechanism to enable one account to approve a transfer of assets on behalf of another. - -### Main Functions - -The Assets pallet provides a broad interface for managing fungible assets. Some of the main dispatchable functions include: - -- **`create()`**: Create a new asset class by placing a deposit, applicable when asset creation is permissionless. -- **`issue()`**: Mint a fixed supply of a new asset and assign it to the creator's account. -- **`transfer()`**: Transfer a specified amount of an asset between two accounts. -- **`approve_transfer()`**: Approve a non-custodial transfer, allowing a third party to move assets between accounts. -- **`destroy()`**: Destroy an entire asset class, removing it permanently from the chain. -- **`freeze()` and `thaw()`**: Administrators or privileged users can lock or unlock assets from being transferred. - -For a full list of dispatchable and privileged functions, see the [dispatchables Rust docs](https://docs.rs/pallet-assets/latest/pallet_assets/pallet/enum.Call.html){target=\_blank}. - -### Querying Functions - -The Assets pallet exposes several key querying functions that developers can interact with programmatically. These functions allow you to query asset information and perform operations essential for managing assets across accounts. The two main querying functions are: - -- **`balance(asset_id, account)`**: Retrieves the balance of a given asset for a specified account. Useful for checking the holdings of an asset class across different accounts. - -- **`total_supply(asset_id)`**: Returns the total supply of the asset identified by `asset_id`. Allows users to verify how much of the asset exists on-chain. - -In addition to these basic functions, other utility functions are available for querying asset metadata and performing asset transfers. You can view the complete list of querying functions in the [Struct Pallet Rust docs](https://docs.rs/pallet-assets/latest/pallet_assets/pallet/struct.Pallet.html){target=\_blank}. - -### Permission Models and Roles - -The Assets pallet incorporates a robust permission model, enabling control over who can perform specific operations like minting, transferring, or freezing assets. The key roles within the permission model are: - -- **Admin**: Can freeze (preventing transfers) and forcibly transfer assets between accounts. Admins also have the power to reduce the balance of an asset class across arbitrary accounts. They manage the more sensitive and administrative aspects of the asset class. -- **Issuer**: Responsible for minting new tokens. When new assets are created, the Issuer is the account that controls their distribution to other accounts. -- **Freezer**: Can lock the transfer of assets from an account, preventing the account holder from moving their balance. This function is useful for freezing accounts involved in disputes or fraud. -- **Owner**: Has overarching control, including destroying an entire asset class. Owners can also set or update the Issuer, Freezer, and Admin roles. - -These permissions provide fine-grained control over assets, enabling developers and asset managers to ensure secure, controlled operations. Each of these roles is crucial for managing asset lifecycles and ensuring that assets are used appropriately across the network. - -### Asset Freezing - -The Assets pallet allows you to freeze assets. This feature prevents transfers or spending from a specific account, effectively locking the balance of an asset class until it is explicitly unfrozen. Asset freezing is beneficial when assets are restricted due to security concerns or disputes. - -Freezing assets is controlled by the Freezer role, as mentioned earlier. Only the account with the Freezer privilege can perform these operations. Here are the key freezing functions: - -- **`freeze(asset_id, account)`**: Locks the specified asset of the account. While the asset is frozen, no transfers can be made from the frozen account. -- **`thaw(asset_id, account)`**: Corresponding function for unfreezing, allowing the asset to be transferred again. - -This approach enables secure and flexible asset management, providing administrators the tools to control asset movement in special circumstances. - -### Non-Custodial Transfers (Approval API) - -The Assets pallet also supports non-custodial transfers through the Approval API. This feature allows one account to approve another account to transfer a specific amount of its assets to a third-party recipient without granting full control over the account's balance. Non-custodial transfers enable secure transactions where trust is required between multiple parties. - -Here's a brief overview of the key functions for non-custodial asset transfers: - -- **`approve_transfer(asset_id, delegate, amount)`**: Approves a delegate to transfer up to a certain amount of the asset on behalf of the original account holder. -- **`cancel_approval(asset_id, delegate)`**: Cancels a previous approval for the delegate. Once canceled, the delegate no longer has permission to transfer the approved amount. -- **`transfer_approved(asset_id, owner, recipient, amount)`**: Executes the approved asset transfer from the owner’s account to the recipient. The delegate account can call this function once approval is granted. - -These delegated operations make it easier to manage multi-step transactions and dApps that require complex asset flows between participants. - -## Foreign Assets - -Foreign assets in Asset Hub refer to assets originating from external blockchains or parachains that are registered in the Asset Hub. These assets are typically native tokens from other parachains within the Polkadot ecosystem or bridged tokens from external blockchains such as Ethereum. - -Once a foreign asset is registered in the Asset Hub by its originating blockchain's root origin, users are able to send these tokens to the Asset Hub and interact with them as they would any other asset within the Polkadot ecosystem. - -### Handling Foreign Assets - -The Foreign Assets pallet, an instance of the Assets pallet, manages these assets. Since foreign assets are integrated into the same interface as native assets, developers can use the same functionalities, such as transferring and querying balances. However, there are important distinctions when dealing with foreign assets. - -- **Asset identifier**: Unlike native assets, foreign assets are identified using an XCM Multilocation rather than a simple numeric `AssetId`. This multilocation identifier represents the cross-chain location of the asset and provides a standardized way to reference it across different parachains and relay chains. - -- **Transfers**: Once registered in the Asset Hub, foreign assets can be transferred between accounts, just like native assets. Users can also send these assets back to their originating blockchain if supported by the relevant cross-chain messaging mechanisms. - -## Integration - -Asset Hub supports a variety of integration tools that make it easy for developers to manage assets and interact with the blockchain in their applications. The tools and libraries provided by Parity Technologies enable streamlined operations, such as querying asset information, building transactions, and monitoring cross-chain asset transfers. - -Developers can integrate Asset Hub into their projects using these core tools: - -### API Sidecar - -[API Sidecar](https://github.com/paritytech/substrate-api-sidecar){target=\_blank} is a RESTful service that can be deployed alongside Polkadot and Kusama nodes. It provides endpoints to retrieve real-time blockchain data, including asset information. When used with Asset Hub, Sidecar allows querying: - -- **Asset look-ups**: Retrieve specific assets using `AssetId`. -- **Asset balances**: View the balance of a particular asset on Asset Hub. - -Public instances of API Sidecar connected to Asset Hub are available, such as: - -- [Polkadot Asset Hub Sidecar](https://polkadot-asset-hub-public-sidecar.parity-chains.parity.io/){target=\_blank} -- [Kusama Asset Hub Sidecar](https://kusama-asset-hub-public-sidecar.parity-chains.parity.io/){target=\_blank} - -These public instances are primarily for ad-hoc testing and quick checks. - -### TxWrapper - -[`TxWrapper`](https://github.com/paritytech/txwrapper-core){target=\_blank} is a library that simplifies constructing and signing transactions for Polkadot SDK-based chains, including Polkadot and Kusama. This tool includes support for working with Asset Hub, enabling developers to: - -- Construct offline transactions. -- Leverage asset-specific functions such as minting, burning, and transferring assets. - -`TxWrapper` provides the flexibility needed to integrate asset operations into custom applications while maintaining the security and efficiency of Polkadot's transaction model. - -### ParaSpell - -[ParaSpell](https://paraspell.xyz/){target=\_blank} is a collection of open-source XCM tools designed to streamline cross-chain asset transfers and interactions within the Polkadot and Kusama ecosystems. It equips developers with an intuitive interface to manage and optimize XCM-based functionalities. Some key points included by ParaSpell are: - -- **[XCM SDK](https://paraspell.xyz/#xcm-sdk){target=\_blank}**: Provides a unified layer to incorporate XCM into decentralized applications, simplifying complex cross-chain interactions. -- **[XCM API](https://paraspell.xyz/#xcm-api){target=\_blank}**: Offers an efficient, package-free approach to integrating XCM functionality while offloading heavy computing tasks, minimizing costs and improving application performance. -- **[XCM router](https://paraspell.xyz/#xcm-router){target=\_blank}**: Enables cross-chain asset swaps in a single command, allowing developers to send one asset type (such as DOT on Polkadot) and receive a different asset on another chain (like ASTR on Astar). -- **[XCM analyser](https://paraspell.xyz/#xcm-analyser){target=\_blank}**: Decodes and translates complex XCM multilocation data into readable information, supporting easier troubleshooting and debugging. -- **[XCM visualizator](https://paraspell.xyz/#xcm-visualizator){target=\_blank}**: A tool designed to give developers a clear, interactive view of XCM activity across the Polkadot ecosystem, providing insights into cross-chain communication flow. - -ParaSpell's tools make it simple for developers to build, test, and deploy cross-chain solutions without needing extensive knowledge of the XCM protocol. With features like message composition, decoding, and practical utility functions for parachain interactions, ParaSpell is especially useful for debugging and optimizing cross-chain communications. - -### Parachain Node - -To fully leverage the Asset Hub's functionality, developers will need to run a system parachain node. Setting up an Asset Hub node allows users to interact with the parachain in real time, syncing data and participating in the broader Polkadot ecosystem. Guidelines for setting up an [Asset Hub node](https://github.com/paritytech/polkadot-sdk/tree/{{dependencies.repositories.polkadot_sdk.version}}/cumulus#asset-hub-){target=\_blank} are available in the Parity documentation. - -Using these integration tools, developers can manage assets seamlessly and integrate Asset Hub functionality into their applications, leveraging Polkadot's powerful infrastructure. - -## XCM Transfer Monitoring - -Since Asset Hub facilitates cross-chain asset transfers across the Polkadot ecosystem, XCM transfer monitoring becomes an essential practice for developers and infrastructure providers. This section outlines how to monitor the cross-chain movement of assets between parachains, the relay chain, and other systems. - -### Monitor XCM Deposits - -As assets move between chains, tracking the cross-chain transfers in real time is crucial. Whether assets are transferred via a teleport from system parachains or through a reserve-backed transfer from any other parachain, each transfer emits a relevant event (such as the `balances.minted` event). - -To ensure accurate monitoring of these events: - -- **Track XCM deposits**: Query every new block created in the relay chain or Asset Hub, loop through the events array, and filter for any `balances.minted` events which confirm the asset was successfully transferred to the account. -- **Track event origins**: Each `balances.minted` event points to a specific address. By monitoring this, service providers can verify that assets have arrived in the correct account. - -### Track XCM Information Back to the Source - -While the `balances.minted` event confirms the arrival of assets, there may be instances where you need to trace the origin of the cross-chain message that triggered the event. In such cases, you can: - -1. Query the relevant chain at the block where the `balances.minted` event was emitted. -2. Look for a `messageQueue(Processed)` event within that block's initialization. This event contains a parameter (`Id`) that identifies the cross-chain message received by the relay chain or Asset Hub. You can use this `Id` to trace the message back to its origin chain, offering full visibility of the asset transfer's journey. - -### Practical Monitoring Examples - -The preceding sections outline the process of monitoring XCM deposits to specific accounts and then tracing back the origin of these deposits. The process of tracking an XCM transfer and the specific events to monitor may vary based on the direction of the XCM message. Here are some examples to showcase the slight differences: - -- **Transfer from parachain to relay chain**: Track `parachainsystem(UpwardMessageSent)` on the parachain and `messagequeue(Processed)` on the relay chain. -- **Transfer from relay chain to parachain**: Track `xcmPallet(sent)` on the relay chain and `dmpqueue(ExecutedDownward)` on the parachain. -- **Transfer between parachains**: Track `xcmpqueue(XcmpMessageSent)` on the system parachain and `xcmpqueue(Success)` on the destination parachain. - -### Monitor for Failed XCM Transfers - -Sometimes, XCM transfers may fail due to liquidity or other errors. Failed transfers emit specific error events, which are key to resolving issues in asset transfers. Monitoring for these failure events helps catch issues before they affect asset balances. - -- **Relay chain to system parachain**: Look for the `dmpqueue(ExecutedDownward)` event on the parachain with an `Incomplete` outcome and an error type such as `UntrustedReserveLocation`. -- **Parachain to parachain**: Monitor for `xcmpqueue(Fail)` on the destination parachain with error types like `TooExpensive`. - -For detailed error management in XCM, see Gavin Wood's blog post on [XCM Execution and Error Management](https://polkadot.com/blog/xcm-part-three-execution-and-error-management/){target=\_blank}. - -## Where to Go Next - -
- -- Tutorial __Register a Local Asset__ - - --- - - Comprehensive guide to registering a local asset on the Asset Hub system parachain, including step-by-step instructions. - - [:octicons-arrow-right-24: Reference](/chain-interactions/token-operations/register-local-asset/) - -- Tutorial __Register a Foreign Asset__ - - --- - - An in-depth guide to registering a foreign asset on the Asset Hub parachain, providing clear, step-by-step instructions. - - [:octicons-arrow-right-24: Reference](/chain-interactions/token-operations/register-foreign-asset/) - -- Tutorial __Convert Assets__ - - --- - - A guide detailing the step-by-step process of converting assets on Asset Hub, helping users efficiently navigate asset management on the platform. - - [:octicons-arrow-right-24: Reference](/chain-interactions/token-operations/convert-assets/) - -
\ No newline at end of file diff --git a/reference/polkadot-hub/assets.md b/reference/polkadot-hub/assets.md new file mode 100644 index 000000000..5979470ea --- /dev/null +++ b/reference/polkadot-hub/assets.md @@ -0,0 +1,215 @@ +--- +title: Asset Hub +description: Learn about Asset Hub in Polkadot, managing on-chain assets, foreign asset integration, and using XCM for cross-chain asset transfers. +categories: Polkadot Protocol +--- + +# Assets + +## Introduction + +Asset Hub is Polkadot’s system parachain for issuing and managing on-chain assets. While the Relay Chain provides security, Asset Hub handles asset logic—minting, burning, transfers, and metadata—in a cost-efficient environment. + +It’s worth noting that Asset Hub also supports EVM smart contracts. This means assets can be managed not only through the native Assets pallet, but also using familiar ERC-20 contract standards. + +Built for interoperability, it enables cross-chain asset transfers with XCM and supports foreign asset registration from other parachains. This guide covers core asset operations, XCM transfers, and developer tooling such as [API Sidecar](#api-sidecar) and [`TxWrapper`](#txwrapper). + +## Asset Basics + +The Polkadot Relay Chain supports only its native token (DOT), so Asset Hub provides a standardized framework for creating and managing fungible and non-fungible assets. It enables projects to issue tokens, manage supply, and transfer assets across parachains. + +Assets on Asset Hub support familiar operations such as minting, burning, transfers, and metadata management, similar to ERC-20 on Ethereum but built directly into Polkadot’s runtime for lower latency and fees. + +### Why use Asset Hub? + +- **Custom asset creation**: Issue tokens or NFTs with configurable permissions and metadata. +- **Low fees**: Transactions cost roughly one-tenth of Relay Chain fees. +- **Lower deposits**: Minimal on-chain storage costs for asset data. +- **Pay fees in any asset**: Users don’t need DOT to transact; supported assets can cover fees. +- **Cross-chain ready**: Assets can be transferred to other parachains using XCM. + +### Asset structure + +Each asset is identified by a unique ID and stores: + +- Asset administrators +- Total supply and holder count +- Minimum balance configuration +- **Sufficiency** – Whether the asset can keep an account alive without DOT +- Metadata (name, symbol, decimals) + +If a balance falls below the configured minimum, it may be removed as “dust.” This ensures efficient storage while giving developers control over asset economics. + +## Assets Pallet + +The Assets pallet in the Polkadot SDK provides the core logic behind fungible assets on Asset Hub. It enables developers to create and manage asset classes with configurable permissions. + +The pallet supports both permissioned and permissionless asset creation, making it suitable for simple tokens as well as governed assets controlled by teams or DAOs. + +For full API details, see the [Assets Pallet Rust docs](https://paritytech.github.io/polkadot-sdk/master/pallet_assets/index.html){target=_blank}. + +### Key Features + +The Assets pallet includes: + +- **Asset issuance**: Create new assets and assign initial supply. +- **Transfers**: Move assets between accounts with balance tracking. +- **Freezing**: Lock an account’s balance to prevent transfers. +- **Burning**: Reduce total supply by destroying tokens. +- **Non-custodial transfers**: Approve transfers on behalf of another account without giving up custody. + +### Main Functions + +The Assets pallet exposes a set of dispatchable functions for managing asset lifecycles: + +- **`create()`**: Register a new asset class (with a deposit when creation is permissionless). +- **`issue()`**: Mint an initial supply of a new asset. +- **`transfer()`**: Send assets between accounts. +- **`approve_transfer()`**: Authorize a third party to transfer assets on your behalf. +- **`destroy()`**: Remove an entire asset class from the chain. +- **`freeze()` / `thaw()`**: Restrict or restore an account’s ability to transfer assets. + +See the full API in the [dispatchable functions reference](https://docs.rs/pallet-assets/latest/pallet_assets/pallet/enum.Call.html){target=_blank}. + +### Querying Functions + +The Assets pallet also provides read-only functions to retrieve on-chain asset data, commonly used in dApps and backend services: + +- **`balance(asset_id, account)`** – Retrieves the balance of a given asset for a specified account. Useful for checking the holdings of an asset class across different accounts. +- **`total_supply(asset_id)`** – RReturns the total supply of the asset identified by asset_id. Allows users to verify how much of the asset exists on-chain. + +Additional queries include metadata lookups, account status, and asset details. See the full list in the [Pallet reference](https://docs.rs/pallet-assets/latest/pallet_assets/pallet/struct.Pallet.html){target=_blank}. + +### Permission Models and Roles + +The Assets pallet uses role-based permissions to control who can manage different parts of an asset’s lifecycle: + +- **Owner**: Has overarching control, including destroying an entire asset class. Owners can also set or update the Issuer, Freezer, and Admin roles. +- **Admin**: Can freeze (preventing transfers) and forcibly transfer assets between accounts. Admins also have the power to reduce the balance of an asset class across arbitrary accounts. +- **Issuer**: Responsible for minting new tokens. When new assets are created, the Issuer is the account that controls their distribution to other accounts. +- **Freezer**: Can lock the transfer of assets from an account, preventing the account holder from moving their balance. + +These roles allow projects to enforce governance and security policies around their assets. + +### Asset Freezing + +Assets can be temporarily locked to prevent transfers from specific accounts. This is useful for dispute resolution, fraud prevention, or compliance controls. + +Only the **Freezer** role can perform freezing actions: + +- **`freeze(asset_id, account)`**: Locks the specified asset of the account. While the asset is frozen, no transfers can be made from the frozen account. +- **`thaw(asset_id, account)`**: Corresponding function for unfreezing, allowing the asset to be transferred again. + +Freezing does not burn or remove assets. It simply pauses their movement until re-enabled. + +### Non-Custodial Transfers (Approval API) + +The Assets pallet supports delegated transfers using an Approval API. This lets one account authorize another to transfer a limited amount of its assets—without handing over full control. It’s useful for escrow logic, automated payments, and multi-party dApps. + +Key functions: + +- **`approve_transfer(asset_id, delegate, amount)`**: Approves a delegate to transfer up to a certain amount of the asset on behalf of the original account holder. +- **`cancel_approval(asset_id, delegate)`**: Cancels a previous approval for the delegate. Once canceled, the delegate no longer has permission to transfer the approved amount. +- **`transfer_approved(asset_id, owner, recipient, amount)`**: Executes the approved asset transfer from the owner’s account to the recipient. The delegate account can call this function once approval is granted. + +These delegated operations make it easier to manage multi-step transactions and dApps that require complex asset flows between participants. + +## Foreign Assets + +Foreign assets are tokens that originate outside Asset Hub—either from other Polkadot parachains or from external networks like Ethereum via bridges. + +Once registered on Asset Hub by the originating chain’s root origin, these assets can be held, transferred, and used just like native assets within the Polkadot ecosystem. + +### Handling Foreign Assets + +Foreign assets are managed by the **Foreign Assets pallet**, which functions similarly to the standard Assets pallet. Most operations—like transfers and balance queries—use the same API, but with a few key differences: + +- **Asset Identifier**: Unlike native assets, foreign assets are identified using an XCM Multilocation rather than a simple numeric AssetId. This multilocation identifier represents the cross-chain location of the asset and provides a standardized way to reference it across different parachains and relay chains. +- **Transfers**: Once registered in the Asset Hub, foreign assets can be transferred between accounts, just like native assets. Users can also send these assets back to their originating blockchain if supported by the relevant cross-chain messaging mechanisms. + +This unified interface makes it easy for dApps to handle both native and cross-chain assets. + +## Integration + +Asset Hub provides developer tools and libraries for querying assets, submitting transactions, and handling cross-chain transfers in applications. These integrations make it easy to build wallets, dApps, and backend services on top of Asset Hub. + +Core tools include: + +### API Sidecar + +[API Sidecar](https://github.com/paritytech/substrate-api-sidecar){target=\_blank} is a RESTful service that can be deployed alongside Polkadot and Kusama nodes. It provides endpoints to retrieve real-time blockchain data, including asset information. When used with Asset Hub, Sidecar allows querying: + +- **Asset look-ups**: Retrieve specific assets using `AssetId`. +- **Asset balances**: View the balance of a particular asset on Asset Hub. + +Public instances of API Sidecar connected to Asset Hub are available, such as: + +- [Polkadot Asset Hub Sidecar](https://polkadot-asset-hub-public-sidecar.parity-chains.parity.io/){target=\_blank} +- [Kusama Asset Hub Sidecar](https://kusama-asset-hub-public-sidecar.parity-chains.parity.io/){target=\_blank} + +These public instances are primarily for ad-hoc testing and quick checks. + +### TxWrapper + +[`TxWrapper`](https://github.com/paritytech/txwrapper-core){target=\_blank} is a library that simplifies constructing and signing transactions for Polkadot SDK-based chains, including Polkadot and Kusama. This tool includes support for working with Asset Hub, enabling developers to: + +- Construct offline transactions. +- Leverage asset-specific functions such as minting, burning, and transferring assets. + +`TxWrapper` provides the flexibility needed to integrate asset operations into custom applications while maintaining the security and efficiency of Polkadot's transaction model. + +### ParaSpell + +[ParaSpell](https://paraspell.xyz/){target=\_blank} is a collection of open-source XCM tools designed to streamline cross-chain asset transfers and interactions within the Polkadot and Kusama ecosystems. It equips developers with an intuitive interface to manage and optimize XCM-based functionalities. Some key points included by ParaSpell are: + +- **[XCM SDK](https://paraspell.xyz/#xcm-sdk){target=\_blank}**: Provides a unified layer to incorporate XCM into decentralized applications, simplifying complex cross-chain interactions. +- **[XCM API](https://paraspell.xyz/#xcm-api){target=\_blank}**: Lightweight hosted API for XCM execution without running infrastructure. +- **[XCM router](https://paraspell.xyz/#xcm-router){target=\_blank}**: Enables cross-chain asset swaps in a single command, allowing developers to send one asset type and receive a different asset on another chain. +- **[XCM analyser](https://paraspell.xyz/#xcm-analyser){target=\_blank}**: Decodes and translates complex XCM multilocation data into readable information, supporting easier troubleshooting and debugging. +- **[XCM visualizator](https://paraspell.xyz/#xcm-visualizator){target=\_blank}**: A tool designed to give developers a clear, interactive view of XCM activity across the Polkadot ecosystem, providing insights into cross-chain communication flow. + +ParaSpell lets developers build cross-chain features without deep XCM expertise. Its utilities for message composition, decoding, and parachain routing make it especially useful for testing, debugging, and optimizing cross-chain transfers. + +### Parachain Node + +To fully use Asset Hub features, developers may also run a local system parachain node. This enables real-time interaction, full RPC access, and custom testing. Setup instructions are available in the Parity docs: +[Run an Asset Hub node](https://github.com/paritytech/polkadot-sdk/tree/{{dependencies.repositories.polkadot_sdk.version}}/cumulus#asset-hub-){target=_blank}. + +With the tools above, developers can integrate Asset Hub into wallets, services, and dApps while taking advantage of Polkadot’s cross-chain infrastructure. + +## XCM Transfer Monitoring + +Since Asset Hub enables cross-chain transfers, monitoring XCM messages is essential for tracking asset movement between parachains and the Relay Chain. This section explains how to observe and verify XCM transfer status during cross-chain operations. + +### Monitor XCM Deposits + +As assets move between chains, tracking the cross-chain transfers in real time is crucial. Whether assets are transferred via a teleport from system parachains or through a reserve-backed transfer from any other parachain, each transfer emits a relevant event (such as the `balances.minted` event). + +To ensure accurate monitoring of these events: + +- **Track XCM deposits**: Query every new block created in the relay chain or Asset Hub, loop through the events array, and filter for any `balances.minted` events which confirm the asset was successfully transferred to the account. +- **Track event origins**: Each `balances.minted` event points to a specific address. By monitoring this, service providers can verify that assets have arrived in the correct account. + +### Track XCM Information Back to the Source + +While the `balances.minted` event confirms the arrival of assets, there may be instances where you need to trace the origin of the cross-chain message that triggered the event. In such cases, you can: + +1. Query the relevant chain at the block where the `balances.minted` event was emitted. +2. Look for the `messageQueue.Processed` event during the block’s initialization. It includes an `Id` that uniquely identifies the inbound XCM message to the Relay Chain or Asset Hub. Use this `Id` to correlate events across chains and trace the transfer back to its origin (and any intermediate hops) for end-to-end visibility. + +### Practical Monitoring Examples + +The preceding sections outline the process of monitoring XCM deposits to specific accounts and then tracing back the origin of these deposits. The process of tracking an XCM transfer and the specific events to monitor may vary based on the direction of the XCM message. Here are some examples to showcase the slight differences: + +- **Transfer from parachain to relay chain**: Track `parachainsystem(UpwardMessageSent)` on the parachain and `messagequeue(Processed)` on the relay chain. +- **Transfer from relay chain to parachain**: Track `xcmPallet(sent)` on the relay chain and `dmpqueue(ExecutedDownward)` on the parachain. +- **Transfer between parachains**: Track `xcmpqueue(XcmpMessageSent)` on the system parachain and `xcmpqueue(Success)` on the destination parachain. + +### Monitor for Failed XCM Transfers + +Sometimes, XCM transfers may fail due to liquidity or other errors. Failed transfers emit specific error events, which are key to resolving issues in asset transfers. Monitoring for these failure events helps catch issues before they affect asset balances. + +- **Relay chain to system parachain**: Look for the `dmpqueue(ExecutedDownward)` event on the parachain with an `Incomplete` outcome and an error type such as `UntrustedReserveLocation`. +- **Parachain to parachain**: Monitor for `xcmpqueue(Fail)` on the destination parachain with error types like `TooExpensive`. + +For detailed error management in XCM, see Gavin Wood's blog post on [XCM Execution and Error Management](https://polkadot.com/blog/xcm-part-three-execution-and-error-management/){target=\_blank}. diff --git a/reference/polkadot-hub/smart-contracts.md b/reference/polkadot-hub/smart-contracts.md new file mode 100644 index 000000000..d5b49dab3 --- /dev/null +++ b/reference/polkadot-hub/smart-contracts.md @@ -0,0 +1,150 @@ +--- +title: Smart Contracts +description: Learn how developers can build smart contracts on Polkadot by leveraging either Wasm/ink! or EVM contracts across many parachains. +categories: Basics, Polkadot Protocol +--- + +# An Overview of the Smart Contract Landscape on Polkadot + +--8<-- 'text/smart-contracts/polkaVM-warning.md' + +## Introduction + +Polkadot is designed to support an ecosystem of parachains, rather than hosting smart contracts directly. Developers aiming to build smart contract applications on Polkadot rely on parachains within the ecosystem that provide smart contract functionality. + +This guide outlines the primary approaches to developing smart contracts in the Polkadot ecosystem: + +- **PolkaVM-compatible contracts**: Support Solidity and any language that compiles down to RISC-V while maintaining compatibility with Ethereum based tools. +- **EVM-compatible contracts**: Support languages like [Solidity](https://soliditylang.org/){target=\_blank} and [Vyper](https://vyperlang.org/){target=\_blank}, offering compatibility with popular Ethereum tools and wallets. +- **Wasm-based smart contracts**: Using [ink!](https://use.ink/){target=\_blank}, a Rust-based embedded domain-specific language (eDSL), enabling developers to leverage Rust’s safety and tooling. + +You'll explore the key differences between these development paths, along with considerations for parachain developers integrating smart contract functionality. + +One of the + +!!!note "Parachain Developer?" + If you are a parachain developer looking to add smart contract functionality to your chain, please refer to the [Add Smart Contract Functionality](/parachains/customize-runtime/add-smart-contract-functionality){target=\_blank} page, which covers both Wasm and EVM-based contract implementations. + +## Smart Contracts Versus Parachains + +A smart contract is a program that executes specific logic isolated to the chain on which it is being executed. All the logic executed is bound to the same state transition rules determined by the underlying virtual machine (VM). Consequently, smart contracts are more streamlined to develop, and programs can easily interact with each other through similar interfaces. + +``` mermaid +flowchart LR + subgraph A[Chain State] + direction LR + B["Program Logic and Storage
(Smart Contract)"] + C["Tx Relevant Storage"] + end + A --> D[[Virtual Machine]] + E[Transaction] --> D + D --> F[(New State)] + D --> G[Execution Logs] + style A stroke:#000000,stroke-width:1px +``` + +In addition, because smart contracts are programs that execute on top of existing chains, teams don't have to think about the underlying consensus they are built on. + +These strengths do come with certain limitations. Some smart contracts environments, like EVM, tend to be immutable by default. Developers have developed different [proxy strategies](https://www.openzeppelin.com/news/proxy-patterns){target=\_blank} to be able to upgrade smart contracts over time. The typical pattern relies on a proxy contract which holds the program storage forwarding a call to an implementation contract where the execution logic resides. Smart contract upgrades require changing the implementation contract while retaining the same storage structure, necessitating careful planning. + +Another downside is that smart contracts often follow a gas metering model, where program execution is associated with a given unit and a marketplace is set up to pay for such an execution unit. This fee system is often very rigid, and some complex flows, like account abstraction, have been developed to circumvent this problem. + +In contrast, parachains can create their own custom logics (known as pallets or modules), and combine them as the state transition function (STF or runtime) thanks to the modularity provided by the [Polkadot-SDK](https://github.com/paritytech/polkadot-sdk/){target=\_blank}. The different pallets within the parachain runtime can give developers a lot of flexibility when building applications on top of it. + +``` mermaid +flowchart LR + A[(Chain State)] --> B[["STF
[Pallet 1]
[Pallet 2]
...
[Pallet N]"]] + C[Transaction
Targeting Pallet 2] --> B + B --> E[(New State)] + B --> F[Execution Logs] +``` + +Parachains inherently offer features such as logic upgradeability, flexible transaction fee mechanisms, and chain abstraction logic. More so, by using Polkadot, parachains can benefit from robust consensus guarantees with little engineering overhead. + +To read more about the differences between smart contracts and parachain runtimes, see the [Runtime vs. Smart Contracts](https://paritytech.github.io/polkadot-sdk/master/polkadot_sdk_docs/reference_docs/runtime_vs_smart_contract/index.html){target=\_blank} section of the Polkadot SDK Rust docs. For a more in-depth discussion about choosing between runtime development and smart contract development, see the Stack Overflow post on [building a Polkadot SDK runtime versus a smart contract](https://stackoverflow.com/a/56041305){target=\_blank}. + +## Building a Smart Contract + +The Polkadot SDK supports multiple smart contract execution environments: + +- **PolkaVM**: A cutting-edge virtual machine tailored to optimize smart contract execution on Polkadot. Unlike traditional EVMs, PolkaVM is built with a [RISC-V-based register architecture](https://en.wikipedia.org/wiki/RISC-V){target=\_blank} for increased performance and scalability. +- **EVM**: Through [Frontier](https://github.com/polkadot-evm/frontier){target=\_blank}. It consists of a full Ethereum JSON RPC compatible client, an Ethereum emulation layer, and a [Rust-based EVM](https://github.com/rust-ethereum/evm){target=\_blank}. This is used by chains like [Acala](https://acala.network/){target=\_blank}, [Astar](https://astar.network/){target=\_blank}, [Moonbeam](https://moonbeam.network){target=\_blank} and more. +- **Wasm**: [ink!](https://use.ink/){target=\_blank} is a domain-specific language (DSL) for Rust smart contract development that uses the [Contracts pallet](https://github.com/paritytech/polkadot-sdk/blob/master/substrate/frame/contracts/){target=\_blank} with [`cargo-contract`](https://github.com/use-ink/cargo-contract){target=\_blank} serving as the compiler to WebAssembly. Wasm contracts can be used by chains like [Astar](https://astar.network/){target=\_blank}. + +### PolkaVM Contracts + +A component of the Asset Hub parachain, PolkaVM helps enable the deployment of Solidity-based smart contracts directly on Asset Hub. Learn more about how this cutting edge virtual machine facilitates using familiar Ethereum-compatible contracts and tools with Asset Hub by visiting the [Native Smart Contracts](/develop/smart-contracts/overview#native-smart-contracts){target=\_blank} guide. + +### EVM Contracts + +The [Frontier](https://github.com/polkadot-evm/frontier){target=\_blank} project provides a set of modules that enables a Polkadot SDK-based chain to run an Ethereum emulation layer that allows the execution of EVM smart contracts natively with the same API/RPC interface. + +[Ethereum addresses (ECDSA)](https://ethereum.org/en/glossary/#address){target=\_blank} can also be mapped directly to and from the Polkadot SDK's SS58 scheme from existing accounts. Moreover, you can modify Polkadot SDK to use the ECDSA signature scheme directly to avoid any mapping. + +At a high level, [Frontier](https://github.com/polkadot-evm/frontier){target=\_blank} is composed of three main components: + +- **[Ethereum Client](https://github.com/polkadot-evm/frontier/tree/master/client){target=\_blank}**: An Ethereum JSON RPC compliant client that allows any request coming from an Ethereum tool, such as [Remix](https://remix.ethereum.org/){target=\_blank}, [Hardhat](https://hardhat.org/){target=\_blank} or [Foundry](https://getfoundry.sh/){target=\_blank}, to be admitted by the network. +- **[Pallet Ethereum](https://docs.rs/pallet-ethereum/latest/pallet_ethereum/){target=\_blank}**: A block emulation and Ethereum transaction validation layer that works jointly with the Ethereum client to ensure compatibility with Ethereum tools. +- **[Pallet EVM](https://docs.rs/pallet-evm/latest/pallet_evm/){target=\_blank}**: Access layer to the [Rust-based EVM](https://github.com/rust-ethereum/evm){target=\_blank}, enabling the execution of EVM smart contract logic natively. + +The following diagram illustrates a high-level overview of the path an EVM transaction follows when using this configuration: + +``` mermaid +flowchart TD + A[Users and Devs] -->|Send Tx| B[Frontier RPC Ext] + subgraph C[Pallet Ethereum] + D[Validate Tx] + E[Send
Valid Tx] + end + B -->|Interact with| C + D --> E + subgraph F[Pallet EVM] + G[Rust EVM] + end + I[(Current EVM
Emulated State)] + + H[Smart Contract
Solidity, Vyper...] <-->|Compiled to EVM
Bytecode| I + + C --> F + I --> F + F --> J[(New Ethereum
Emulated State)] + F --> K[Execution Logs] + + style C stroke:#000000,stroke-width:1px + style F stroke:#000000,stroke-width:1px +``` + +Although it seems complex, users and developers are abstracted of that complexity, and tools can easily interact with the parachain as they would with any other Ethereum-compatible environment. + +The Rust EVM is capable of executing regular [EVM bytecode](https://www.ethervm.io/){target=\_blank}. Consequently, any language that compiles to EVM bytecode can be used to create programs that the parachain can execute. + +### Wasm Contracts + +The [`pallet_contracts`](https://docs.rs/pallet-contracts/latest/pallet_contracts/index.html#contracts-pallet){target=\_blank} provides the execution environment for Wasm-based smart contracts. Consequently, any smart contract language that compiles to Wasm can be executed in a parachain that enables this module. + +At the time of writing there are two main languages that can be used for Wasm programs: + +- **[ink!](https://use.ink/){target=\_blank}**: A Rust-based language that compiles to Wasm. It allows developers to inherit all its safety guarantees and use normal Rust tooling, being the dedicated domain-specific language. +- **Solidity**: Can be compiled to Wasm via the [Solang](https://github.com/hyperledger-solang/solang/){target=\_blank} compiler. Consequently, developers can write Solidity 0.8 smart contracts that can be executed as Wasm programs in parachains. + +The following diagram illustrates a high-level overview of the path a transaction follows when using [`pallet_contracts`](https://docs.rs/pallet-contracts/latest/pallet_contracts/index.html#contracts-pallet){target=\_blank}: + +``` mermaid +flowchart TD + + subgraph A[Wasm Bytecode API] + C[Pallet Contracts] + end + + B[Users and Devs] -- Interact with ---> A + + D[(Current State)] + + E[Smart Contract
ink!, Solidity...] <-->|Compiled to Wasm
Bytecode| D + + D --> A + A --> F[(New State)] + A --> G[Execution Logs] + + style A stroke:#000000,stroke-width:1px +``` \ No newline at end of file From c3bd29a99fbddb2381d46883000f573e9c5405c8 Mon Sep 17 00:00:00 2001 From: Andreja Markovic Date: Tue, 21 Oct 2025 15:14:37 +0200 Subject: [PATCH 02/28] add smart contract page --- reference/polkadot-hub/smart-contracts.md | 156 ++++++---------------- 1 file changed, 39 insertions(+), 117 deletions(-) diff --git a/reference/polkadot-hub/smart-contracts.md b/reference/polkadot-hub/smart-contracts.md index d5b49dab3..27fc94cef 100644 --- a/reference/polkadot-hub/smart-contracts.md +++ b/reference/polkadot-hub/smart-contracts.md @@ -1,150 +1,72 @@ --- -title: Smart Contracts -description: Learn how developers can build smart contracts on Polkadot by leveraging either Wasm/ink! or EVM contracts across many parachains. +title: Asset Hub Smart Contracts +description: Learn how developers can build smart contracts on Asset Hub by leveraging either Wasm/ink! or EVM contracts across many parachains. categories: Basics, Polkadot Protocol --- -# An Overview of the Smart Contract Landscape on Polkadot +# Smart Contracts on Asset Hub --8<-- 'text/smart-contracts/polkaVM-warning.md' ## Introduction -Polkadot is designed to support an ecosystem of parachains, rather than hosting smart contracts directly. Developers aiming to build smart contract applications on Polkadot rely on parachains within the ecosystem that provide smart contract functionality. - -This guide outlines the primary approaches to developing smart contracts in the Polkadot ecosystem: - -- **PolkaVM-compatible contracts**: Support Solidity and any language that compiles down to RISC-V while maintaining compatibility with Ethereum based tools. -- **EVM-compatible contracts**: Support languages like [Solidity](https://soliditylang.org/){target=\_blank} and [Vyper](https://vyperlang.org/){target=\_blank}, offering compatibility with popular Ethereum tools and wallets. -- **Wasm-based smart contracts**: Using [ink!](https://use.ink/){target=\_blank}, a Rust-based embedded domain-specific language (eDSL), enabling developers to leverage Rust’s safety and tooling. - -You'll explore the key differences between these development paths, along with considerations for parachain developers integrating smart contract functionality. - -One of the - -!!!note "Parachain Developer?" - If you are a parachain developer looking to add smart contract functionality to your chain, please refer to the [Add Smart Contract Functionality](/parachains/customize-runtime/add-smart-contract-functionality){target=\_blank} page, which covers both Wasm and EVM-based contract implementations. - -## Smart Contracts Versus Parachains - -A smart contract is a program that executes specific logic isolated to the chain on which it is being executed. All the logic executed is bound to the same state transition rules determined by the underlying virtual machine (VM). Consequently, smart contracts are more streamlined to develop, and programs can easily interact with each other through similar interfaces. - -``` mermaid -flowchart LR - subgraph A[Chain State] - direction LR - B["Program Logic and Storage
(Smart Contract)"] - C["Tx Relevant Storage"] - end - A --> D[[Virtual Machine]] - E[Transaction] --> D - D --> F[(New State)] - D --> G[Execution Logs] - style A stroke:#000000,stroke-width:1px -``` - -In addition, because smart contracts are programs that execute on top of existing chains, teams don't have to think about the underlying consensus they are built on. - -These strengths do come with certain limitations. Some smart contracts environments, like EVM, tend to be immutable by default. Developers have developed different [proxy strategies](https://www.openzeppelin.com/news/proxy-patterns){target=\_blank} to be able to upgrade smart contracts over time. The typical pattern relies on a proxy contract which holds the program storage forwarding a call to an implementation contract where the execution logic resides. Smart contract upgrades require changing the implementation contract while retaining the same storage structure, necessitating careful planning. - -Another downside is that smart contracts often follow a gas metering model, where program execution is associated with a given unit and a marketplace is set up to pay for such an execution unit. This fee system is often very rigid, and some complex flows, like account abstraction, have been developed to circumvent this problem. - -In contrast, parachains can create their own custom logics (known as pallets or modules), and combine them as the state transition function (STF or runtime) thanks to the modularity provided by the [Polkadot-SDK](https://github.com/paritytech/polkadot-sdk/){target=\_blank}. The different pallets within the parachain runtime can give developers a lot of flexibility when building applications on top of it. - -``` mermaid -flowchart LR - A[(Chain State)] --> B[["STF
[Pallet 1]
[Pallet 2]
...
[Pallet N]"]] - C[Transaction
Targeting Pallet 2] --> B - B --> E[(New State)] - B --> F[Execution Logs] -``` - -Parachains inherently offer features such as logic upgradeability, flexible transaction fee mechanisms, and chain abstraction logic. More so, by using Polkadot, parachains can benefit from robust consensus guarantees with little engineering overhead. - -To read more about the differences between smart contracts and parachain runtimes, see the [Runtime vs. Smart Contracts](https://paritytech.github.io/polkadot-sdk/master/polkadot_sdk_docs/reference_docs/runtime_vs_smart_contract/index.html){target=\_blank} section of the Polkadot SDK Rust docs. For a more in-depth discussion about choosing between runtime development and smart contract development, see the Stack Overflow post on [building a Polkadot SDK runtime versus a smart contract](https://stackoverflow.com/a/56041305){target=\_blank}. +Polkadot’s Relay Chain does not support smart contracts directly, so developers build contract-based applications on parachains that provide execution environments. Asset Hub is one of those parachains, offering flexible smart contract capabilities alongside native asset management. ## Building a Smart Contract -The Polkadot SDK supports multiple smart contract execution environments: - -- **PolkaVM**: A cutting-edge virtual machine tailored to optimize smart contract execution on Polkadot. Unlike traditional EVMs, PolkaVM is built with a [RISC-V-based register architecture](https://en.wikipedia.org/wiki/RISC-V){target=\_blank} for increased performance and scalability. -- **EVM**: Through [Frontier](https://github.com/polkadot-evm/frontier){target=\_blank}. It consists of a full Ethereum JSON RPC compatible client, an Ethereum emulation layer, and a [Rust-based EVM](https://github.com/rust-ethereum/evm){target=\_blank}. This is used by chains like [Acala](https://acala.network/){target=\_blank}, [Astar](https://astar.network/){target=\_blank}, [Moonbeam](https://moonbeam.network){target=\_blank} and more. -- **Wasm**: [ink!](https://use.ink/){target=\_blank} is a domain-specific language (DSL) for Rust smart contract development that uses the [Contracts pallet](https://github.com/paritytech/polkadot-sdk/blob/master/substrate/frame/contracts/){target=\_blank} with [`cargo-contract`](https://github.com/use-ink/cargo-contract){target=\_blank} serving as the compiler to WebAssembly. Wasm contracts can be used by chains like [Astar](https://astar.network/){target=\_blank}. +Asset Hub supports multiple smart contract environments, giving developers the freedom to choose the workflow and tooling that best fits their project: -### PolkaVM Contracts +- **PolkaVM**: A next-generation virtual machine designed specifically for Polkadot. Built on a high-performance [RISC-V-based register architecture](https://en.wikipedia.org/wiki/RISC-V){target=_blank}, PolkaVM enables fast, scalable execution and is optimized for modern smart contract development. +- **REVM**: The [REVM backend](https://github.com/bluealloy/revm){target=_blank} brings a full Rust implementation of the EVM to Asset Hub. This allows developers to deploy existing Solidity contracts without modification, preserving compatibility with Ethereum tools and libraries. -A component of the Asset Hub parachain, PolkaVM helps enable the deployment of Solidity-based smart contracts directly on Asset Hub. Learn more about how this cutting edge virtual machine facilitates using familiar Ethereum-compatible contracts and tools with Asset Hub by visiting the [Native Smart Contracts](/develop/smart-contracts/overview#native-smart-contracts){target=\_blank} guide. +Each of these environments is fully compatible with Asset Hub, giving teams the option to reuse Ethereum code, build with Rust security guarantees, or explore high-performance innovation with PolkaVM. -### EVM Contracts - -The [Frontier](https://github.com/polkadot-evm/frontier){target=\_blank} project provides a set of modules that enables a Polkadot SDK-based chain to run an Ethereum emulation layer that allows the execution of EVM smart contracts natively with the same API/RPC interface. - -[Ethereum addresses (ECDSA)](https://ethereum.org/en/glossary/#address){target=\_blank} can also be mapped directly to and from the Polkadot SDK's SS58 scheme from existing accounts. Moreover, you can modify Polkadot SDK to use the ECDSA signature scheme directly to avoid any mapping. - -At a high level, [Frontier](https://github.com/polkadot-evm/frontier){target=\_blank} is composed of three main components: +### PolkaVM Contracts -- **[Ethereum Client](https://github.com/polkadot-evm/frontier/tree/master/client){target=\_blank}**: An Ethereum JSON RPC compliant client that allows any request coming from an Ethereum tool, such as [Remix](https://remix.ethereum.org/){target=\_blank}, [Hardhat](https://hardhat.org/){target=\_blank} or [Foundry](https://getfoundry.sh/){target=\_blank}, to be admitted by the network. -- **[Pallet Ethereum](https://docs.rs/pallet-ethereum/latest/pallet_ethereum/){target=\_blank}**: A block emulation and Ethereum transaction validation layer that works jointly with the Ethereum client to ensure compatibility with Ethereum tools. -- **[Pallet EVM](https://docs.rs/pallet-evm/latest/pallet_evm/){target=\_blank}**: Access layer to the [Rust-based EVM](https://github.com/rust-ethereum/evm){target=\_blank}, enabling the execution of EVM smart contract logic natively. +PolkaVM is Asset Hub’s native execution environment for smart contracts, designed to go beyond the limitations of the traditional EVM. Instead of emulating Ethereum bytecode, PolkaVM uses a high-performance RISC-V instruction set to natively execute smart contracts. -The following diagram illustrates a high-level overview of the path an EVM transaction follows when using this configuration: +This architecture enables faster execution, better parallelization, and lower resource consumption while still maintaining compatibility with Solidity tooling. -``` mermaid -flowchart TD - A[Users and Devs] -->|Send Tx| B[Frontier RPC Ext] - subgraph C[Pallet Ethereum] - D[Validate Tx] - E[Send
Valid Tx] - end - B -->|Interact with| C - D --> E - subgraph F[Pallet EVM] - G[Rust EVM] - end - I[(Current EVM
Emulated State)] +Smart contracts written for PolkaVM compile down to a RISC-V bytecode format, which is optimized for verification and execution within Polkadot’s Wasm-based runtime. Developers can interact with PolkaVM using familiar Ethereum developer tools. - H[Smart Contract
Solidity, Vyper...] <-->|Compiled to EVM
Bytecode| I +### REVM Contracts - C --> F - I --> F - F --> J[(New Ethereum
Emulated State)] - F --> K[Execution Logs] +### PolkaVM Contracts - style C stroke:#000000,stroke-width:1px - style F stroke:#000000,stroke-width:1px -``` +PolkaVM is Asset Hub’s native, high-performance smart contract engine. Instead of emulating EVM bytecode, it executes contracts compiled to a RISC-V instruction set, giving tighter control over execution, metering, and parallelization while staying friendly to Ethereum-style development. -Although it seems complex, users and developers are abstracted of that complexity, and tools can easily interact with the parachain as they would with any other Ethereum-compatible environment. +**What it enables for developers** +- **Ethereum-compatible development** – Write contracts in Solidity and use familiar tooling (e.g., Hardhat/Foundry workflows) with PolkaVM targets. +- **Fast, predictable execution** – RISC-V bytecode is designed for efficient interpretation and careful gas/weight metering within the Substrate runtime. +- **Seamless Asset Hub integration** – Call into native pallets (Assets / Foreign Assets), use fee payment options, and compose with XCM for cross-chain flows. +- **Better observability** – Substrate events + contract logs for clean indexing and debugging. -The Rust EVM is capable of executing regular [EVM bytecode](https://www.ethervm.io/){target=\_blank}. Consequently, any language that compiles to EVM bytecode can be used to create programs that the parachain can execute. +**How it works (at a glance)** -### Wasm Contracts +1. **Author & compile** – Your Solidity contract is compiled for PolkaVM (RISC-V target), producing bytecode plus ABI. +2. **Deploy** – Submit a signed extrinsic to Asset Hub; collators include it in a parachain block. +3. **Execute** – PolkaVM runs the contract code, mapping gas ↔ weight and persisting state via Substrate storage. +4. **Integrate** – Contracts can interact with Asset Hub pallets and send/receive XCM messages for cross-chain actions. +5. **Finalize & index** – The Relay Chain finalizes the block; events/logs are available to indexers and UIs. -The [`pallet_contracts`](https://docs.rs/pallet-contracts/latest/pallet_contracts/index.html#contracts-pallet){target=\_blank} provides the execution environment for Wasm-based smart contracts. Consequently, any smart contract language that compiles to Wasm can be executed in a parachain that enables this module. +**When to choose PolkaVM** -At the time of writing there are two main languages that can be used for Wasm programs: +- You want **max performance** and tighter execution control than a traditional EVM. +- You plan to **compose with Substrate pallets** (assets, governance) and **XCM** frequently. +- You prefer a path that’s **Solidity-friendly** but optimized for Polkadot’s architecture. -- **[ink!](https://use.ink/){target=\_blank}**: A Rust-based language that compiles to Wasm. It allows developers to inherit all its safety guarantees and use normal Rust tooling, being the dedicated domain-specific language. -- **Solidity**: Can be compiled to Wasm via the [Solang](https://github.com/hyperledger-solang/solang/){target=\_blank} compiler. Consequently, developers can write Solidity 0.8 smart contracts that can be executed as Wasm programs in parachains. +### REVM Contracts -The following diagram illustrates a high-level overview of the path a transaction follows when using [`pallet_contracts`](https://docs.rs/pallet-contracts/latest/pallet_contracts/index.html#contracts-pallet){target=\_blank}: +REVM brings full EVM compatibility to Asset Hub through a fast, memory-safe Rust implementation of the Ethereum Virtual Machine. Unlike PolkaVM, which compiles contracts to RISC-V for native execution, REVM executes standard Ethereum bytecode directly—making it ideal for teams who want to migrate existing Solidity projects to Polkadot with minimal changes. -``` mermaid -flowchart TD - - subgraph A[Wasm Bytecode API] - C[Pallet Contracts] - end +With REVM, developers can: - B[Users and Devs] -- Interact with ---> A - - D[(Current State)] +- Deploy existing Solidity contracts without rewriting them. +- Use familiar Ethereum tooling like Hardhat, Foundry, Remix, and MetaMask. +- Interact with other parachains and on-chain assets using XCM and Asset Hub features. - E[Smart Contract
ink!, Solidity...] <-->|Compiled to Wasm
Bytecode| D +REVM builds on Rust’s safety guarantees and performance optimizations while retaining full opcode compatibility with the EVM. This provides a reliable path for Ethereum-native developers to access Polkadot’s cross-chain ecosystem. - D --> A - A --> F[(New State)] - A --> G[Execution Logs] +For more details, explore the REVM integration in the Asset Hub smart contract documentation. - style A stroke:#000000,stroke-width:1px -``` \ No newline at end of file +If you want to learn more about the dual virtual stack please go to the [DualVM Stack](polkadot-docs/smart-contracts/for-eth-devs/dual-vm-stack.md){target=_blank}. \ No newline at end of file From a1bf70ca915ad7be9a293325434c39686c5f8b38 Mon Sep 17 00:00:00 2001 From: Andreja Markovic <104647242+kapetan3sid@users.noreply.github.com> Date: Tue, 21 Oct 2025 15:38:43 +0200 Subject: [PATCH 03/28] Apply suggestion from @Copilot Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- reference/polkadot-hub/assets.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reference/polkadot-hub/assets.md b/reference/polkadot-hub/assets.md index 5979470ea..b54256134 100644 --- a/reference/polkadot-hub/assets.md +++ b/reference/polkadot-hub/assets.md @@ -76,7 +76,7 @@ See the full API in the [dispatchable functions reference](https://docs.rs/palle The Assets pallet also provides read-only functions to retrieve on-chain asset data, commonly used in dApps and backend services: - **`balance(asset_id, account)`** – Retrieves the balance of a given asset for a specified account. Useful for checking the holdings of an asset class across different accounts. -- **`total_supply(asset_id)`** – RReturns the total supply of the asset identified by asset_id. Allows users to verify how much of the asset exists on-chain. +- **`total_supply(asset_id)`** – Returns the total supply of the asset identified by asset_id. Allows users to verify how much of the asset exists on-chain. Additional queries include metadata lookups, account status, and asset details. See the full list in the [Pallet reference](https://docs.rs/pallet-assets/latest/pallet_assets/pallet/struct.Pallet.html){target=_blank}. From efc824df0c99d13cd3bed3f43b1aa603e32f9a2f Mon Sep 17 00:00:00 2001 From: Andreja Markovic <104647242+kapetan3sid@users.noreply.github.com> Date: Tue, 21 Oct 2025 15:39:04 +0200 Subject: [PATCH 04/28] Apply suggestion from @Copilot Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- reference/polkadot-hub/assets.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reference/polkadot-hub/assets.md b/reference/polkadot-hub/assets.md index b54256134..b742a7513 100644 --- a/reference/polkadot-hub/assets.md +++ b/reference/polkadot-hub/assets.md @@ -163,7 +163,7 @@ These public instances are primarily for ad-hoc testing and quick checks. [ParaSpell](https://paraspell.xyz/){target=\_blank} is a collection of open-source XCM tools designed to streamline cross-chain asset transfers and interactions within the Polkadot and Kusama ecosystems. It equips developers with an intuitive interface to manage and optimize XCM-based functionalities. Some key points included by ParaSpell are: - **[XCM SDK](https://paraspell.xyz/#xcm-sdk){target=\_blank}**: Provides a unified layer to incorporate XCM into decentralized applications, simplifying complex cross-chain interactions. -- **[XCM API](https://paraspell.xyz/#xcm-api){target=\_blank}**: Lightweight hosted API for XCM execution without running infrastructure. +- **[XCM API](https://paraspell.xyz/#xcm-api){target=\_blank}**: Offers an efficient, package-free approach to integrating XCM functionality while offloading heavy computing tasks, minimizing costs, and improving application performance. This lightweight hosted API enables XCM execution without the need to run your own infrastructure. - **[XCM router](https://paraspell.xyz/#xcm-router){target=\_blank}**: Enables cross-chain asset swaps in a single command, allowing developers to send one asset type and receive a different asset on another chain. - **[XCM analyser](https://paraspell.xyz/#xcm-analyser){target=\_blank}**: Decodes and translates complex XCM multilocation data into readable information, supporting easier troubleshooting and debugging. - **[XCM visualizator](https://paraspell.xyz/#xcm-visualizator){target=\_blank}**: A tool designed to give developers a clear, interactive view of XCM activity across the Polkadot ecosystem, providing insights into cross-chain communication flow. From 8626c59ff47202c2bdcd9c17a7d192b1233adac5 Mon Sep 17 00:00:00 2001 From: Andreja Markovic <104647242+kapetan3sid@users.noreply.github.com> Date: Tue, 21 Oct 2025 15:39:27 +0200 Subject: [PATCH 05/28] Apply suggestion from @Copilot Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- reference/polkadot-hub/assets.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reference/polkadot-hub/assets.md b/reference/polkadot-hub/assets.md index b742a7513..5717c4b50 100644 --- a/reference/polkadot-hub/assets.md +++ b/reference/polkadot-hub/assets.md @@ -195,7 +195,7 @@ To ensure accurate monitoring of these events: While the `balances.minted` event confirms the arrival of assets, there may be instances where you need to trace the origin of the cross-chain message that triggered the event. In such cases, you can: 1. Query the relevant chain at the block where the `balances.minted` event was emitted. -2. Look for the `messageQueue.Processed` event during the block’s initialization. It includes an `Id` that uniquely identifies the inbound XCM message to the Relay Chain or Asset Hub. Use this `Id` to correlate events across chains and trace the transfer back to its origin (and any intermediate hops) for end-to-end visibility. +2. Look for the `messageQueue.Processed` event during the block’s initialization. It includes an `Id` that uniquely identifies the inbound XCM message to the Relay Chain or Asset Hub. Use this `Id` to correlate events across chains and trace the transfer back to its origin, offering full visibility of the asset transfer's journey—including any intermediate hops. ### Practical Monitoring Examples From dcb65b2d0be8b506683cb042a6fed060a9487d21 Mon Sep 17 00:00:00 2001 From: Andreja Markovic <104647242+kapetan3sid@users.noreply.github.com> Date: Tue, 21 Oct 2025 15:39:54 +0200 Subject: [PATCH 06/28] Apply suggestion from @Copilot Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- reference/polkadot-hub/smart-contracts.md | 26 ----------------------- 1 file changed, 26 deletions(-) diff --git a/reference/polkadot-hub/smart-contracts.md b/reference/polkadot-hub/smart-contracts.md index 27fc94cef..1b031d1e4 100644 --- a/reference/polkadot-hub/smart-contracts.md +++ b/reference/polkadot-hub/smart-contracts.md @@ -31,32 +31,6 @@ Smart contracts written for PolkaVM compile down to a RISC-V bytecode format, wh ### REVM Contracts -### PolkaVM Contracts - -PolkaVM is Asset Hub’s native, high-performance smart contract engine. Instead of emulating EVM bytecode, it executes contracts compiled to a RISC-V instruction set, giving tighter control over execution, metering, and parallelization while staying friendly to Ethereum-style development. - -**What it enables for developers** -- **Ethereum-compatible development** – Write contracts in Solidity and use familiar tooling (e.g., Hardhat/Foundry workflows) with PolkaVM targets. -- **Fast, predictable execution** – RISC-V bytecode is designed for efficient interpretation and careful gas/weight metering within the Substrate runtime. -- **Seamless Asset Hub integration** – Call into native pallets (Assets / Foreign Assets), use fee payment options, and compose with XCM for cross-chain flows. -- **Better observability** – Substrate events + contract logs for clean indexing and debugging. - -**How it works (at a glance)** - -1. **Author & compile** – Your Solidity contract is compiled for PolkaVM (RISC-V target), producing bytecode plus ABI. -2. **Deploy** – Submit a signed extrinsic to Asset Hub; collators include it in a parachain block. -3. **Execute** – PolkaVM runs the contract code, mapping gas ↔ weight and persisting state via Substrate storage. -4. **Integrate** – Contracts can interact with Asset Hub pallets and send/receive XCM messages for cross-chain actions. -5. **Finalize & index** – The Relay Chain finalizes the block; events/logs are available to indexers and UIs. - -**When to choose PolkaVM** - -- You want **max performance** and tighter execution control than a traditional EVM. -- You plan to **compose with Substrate pallets** (assets, governance) and **XCM** frequently. -- You prefer a path that’s **Solidity-friendly** but optimized for Polkadot’s architecture. - -### REVM Contracts - REVM brings full EVM compatibility to Asset Hub through a fast, memory-safe Rust implementation of the Ethereum Virtual Machine. Unlike PolkaVM, which compiles contracts to RISC-V for native execution, REVM executes standard Ethereum bytecode directly—making it ideal for teams who want to migrate existing Solidity projects to Polkadot with minimal changes. With REVM, developers can: From cb74a1774c126c6a85d744493380a798f7afdb5c Mon Sep 17 00:00:00 2001 From: Andreja Markovic <104647242+kapetan3sid@users.noreply.github.com> Date: Tue, 21 Oct 2025 15:40:03 +0200 Subject: [PATCH 07/28] Apply suggestion from @Copilot Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- reference/polkadot-hub/smart-contracts.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reference/polkadot-hub/smart-contracts.md b/reference/polkadot-hub/smart-contracts.md index 1b031d1e4..bad71e686 100644 --- a/reference/polkadot-hub/smart-contracts.md +++ b/reference/polkadot-hub/smart-contracts.md @@ -43,4 +43,4 @@ REVM builds on Rust’s safety guarantees and performance optimizations while re For more details, explore the REVM integration in the Asset Hub smart contract documentation. -If you want to learn more about the dual virtual stack please go to the [DualVM Stack](polkadot-docs/smart-contracts/for-eth-devs/dual-vm-stack.md){target=_blank}. \ No newline at end of file +If you want to learn more about the dual virtual stack please go to the [DualVM Stack](/smart-contracts/for-eth-devs/dual-vm-stack.md){target=_blank}. \ No newline at end of file From 05f66271b0d10a0f78377cdf126450aa925d91b4 Mon Sep 17 00:00:00 2001 From: Andreja Markovic <104647242+kapetan3sid@users.noreply.github.com> Date: Mon, 27 Oct 2025 12:46:04 +0100 Subject: [PATCH 08/28] Update .nav.yml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Nicolás Hussein <80422357+nhussein11@users.noreply.github.com> --- .nav.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.nav.yml b/.nav.yml index 7e671e3fa..0bb75ad17 100644 --- a/.nav.yml +++ b/.nav.yml @@ -3,6 +3,5 @@ nav: - 'Smart Contracts': smart-contracts - 'Parachains': parachains - 'Chain Interactions': chain-interactions - - 'Technical Reference': reference # 'Get Support': get-support - 'Nodes and Validators': nodes-and-validators From 05e60487aaf96fae9d7ba6ccffee27a3bf956909 Mon Sep 17 00:00:00 2001 From: Andreja Markovic <104647242+kapetan3sid@users.noreply.github.com> Date: Mon, 27 Oct 2025 12:46:36 +0100 Subject: [PATCH 09/28] Update reference/polkadot-hub/smart-contracts.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Nicolás Hussein <80422357+nhussein11@users.noreply.github.com> --- reference/polkadot-hub/smart-contracts.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reference/polkadot-hub/smart-contracts.md b/reference/polkadot-hub/smart-contracts.md index bad71e686..da38efb9a 100644 --- a/reference/polkadot-hub/smart-contracts.md +++ b/reference/polkadot-hub/smart-contracts.md @@ -17,7 +17,7 @@ Polkadot’s Relay Chain does not support smart contracts directly, so developer Asset Hub supports multiple smart contract environments, giving developers the freedom to choose the workflow and tooling that best fits their project: - **PolkaVM**: A next-generation virtual machine designed specifically for Polkadot. Built on a high-performance [RISC-V-based register architecture](https://en.wikipedia.org/wiki/RISC-V){target=_blank}, PolkaVM enables fast, scalable execution and is optimized for modern smart contract development. -- **REVM**: The [REVM backend](https://github.com/bluealloy/revm){target=_blank} brings a full Rust implementation of the EVM to Asset Hub. This allows developers to deploy existing Solidity contracts without modification, preserving compatibility with Ethereum tools and libraries. +- **REVM**: The [REVM backend](https://github.com/bluealloy/revm){target=_blank} brings a full Rust implementation of the EVM to the Polkadot Hub. This allows developers to deploy existing Solidity contracts without modification, preserving compatibility with Ethereum tools and libraries. Each of these environments is fully compatible with Asset Hub, giving teams the option to reuse Ethereum code, build with Rust security guarantees, or explore high-performance innovation with PolkaVM. From 8cf8a3fd2d2c66c78726601b5e6df07f67a159c3 Mon Sep 17 00:00:00 2001 From: Andreja Markovic Date: Mon, 27 Oct 2025 14:15:34 +0100 Subject: [PATCH 10/28] merge pages and apply feedback --- reference/polkadot-hub/.nav.yml | 3 +- .../polkadot-hub/assets-and-contracts.md | 197 ++++++++++++++++ reference/polkadot-hub/assets.md | 215 ------------------ reference/polkadot-hub/smart-contracts.md | 46 ---- 4 files changed, 198 insertions(+), 263 deletions(-) create mode 100644 reference/polkadot-hub/assets-and-contracts.md delete mode 100644 reference/polkadot-hub/assets.md delete mode 100644 reference/polkadot-hub/smart-contracts.md diff --git a/reference/polkadot-hub/.nav.yml b/reference/polkadot-hub/.nav.yml index 4cb55d4c8..132fb3655 100644 --- a/reference/polkadot-hub/.nav.yml +++ b/reference/polkadot-hub/.nav.yml @@ -1,8 +1,7 @@ nav: - 'Overview': index.md - 'Consensus and Security': consensus-and-security - - 'Assets': assets.md - - 'Smart Contracts': smart-contracts.md + - 'Assets & Contracts': assets-and-contracts.md - 'Bridging': bridging.md - 'People and Identity': people-and-identity.md - 'Collectives and DAOs': collectives-and-daos.md diff --git a/reference/polkadot-hub/assets-and-contracts.md b/reference/polkadot-hub/assets-and-contracts.md new file mode 100644 index 000000000..68abe49ae --- /dev/null +++ b/reference/polkadot-hub/assets-and-contracts.md @@ -0,0 +1,197 @@ +--- +title: Polkadot Hub +description: Learn how Polkadot Hub enables smart contracts and asset management across the Polkadot network — including Wasm/ink! and EVM contract support, on-chain and foreign asset handling, and cross-chain transfers via XCM. +categories: Basics, Polkadot Protocol +--- + +# Assets & Contracts + +## Assets + +### Introduction + +Polkadot Hubis Polkadot’s system parachain for issuing and managing on-chain assets. While the Relay Chain provides security, Polkadot Hub handles asset logic—minting, burning, transfers, and metadata—in a cost-efficient environment. + +It’s worth noting that Polkadot Hub also supports EVM smart contracts. This means assets can be managed not only through the native Assets pallet, but also using familiar ERC-20 contract standards. + +Built for interoperability, it enables cross-chain asset transfers with XCM and supports foreign asset registration from other parachains. This guide covers core asset operations, XCM transfers, and developer tooling such as [API Sidecar](#api-sidecar) and [`TxWrapper`](#txwrapper). + +### Asset Basics + +The Polkadot Relay Chain supports only its native token (DOT), so Polkadot Hub provides a standardized framework for creating and managing fungible and non-fungible assets. It enables projects to issue tokens, manage supply, and transfer assets across parachains. + +Assets on Polkadot Hub support familiar operations such as minting, burning, transfers, and metadata management, similar to ERC-20 on Ethereum but built directly into Polkadot’s runtime for lower latency and fees. + +#### Why use Polkadot Hub? + +- **Custom asset creation**: Issue tokens or NFTs with configurable permissions and metadata. +- **Low fees**: Transactions cost roughly one-tenth of Relay Chain fees. +- **Lower deposits**: Minimal on-chain storage costs for asset data. +- **Pay fees in any asset**: Users don’t need DOT to transact; supported assets can cover fees. +- **Cross-chain ready**: Assets can be transferred to other parachains using XCM. + +#### Asset structure + +Each asset is identified by a unique ID and stores: + +- Asset administrators +- Total supply and holder count +- Minimum balance configuration +- **Sufficiency** – Whether the asset can keep an account alive without DOT +- Metadata (name, symbol, decimals) + +If a balance falls below the configured minimum, it may be removed as “dust.” This ensures efficient storage while giving developers control over asset economics. + +### Assets Pallet + +The Assets pallet in the Polkadot SDK provides the core logic behind fungible assets on Polkadot Hub. It enables developers to create and manage asset classes with configurable permissions. + +The pallet supports both permissioned and permissionless asset creation, making it suitable for simple tokens as well as governed assets controlled by teams or DAOs. + +For full API details, see the [Assets Pallet Rust docs](https://paritytech.github.io/polkadot-sdk/master/pallet_assets/index.html){target=_blank}. + +#### Key Features + +The Assets pallet includes: + +- **Asset issuance**: Create new assets and assign initial supply. +- **Transfers**: Move assets between accounts with balance tracking. +- **Freezing**: Lock an account’s balance to prevent transfers. +- **Burning**: Reduce total supply by destroying tokens. +- **Non-custodial transfers**: Approve transfers on behalf of another account without giving up custody. + +!!! note "Main Functions" + For the full list of supported extrinsics, see the + [pallet-assets dispatchable functions reference](https://docs.rs/pallet-assets/latest/pallet_assets/pallet/enum.Call.html){target=_blank}. + +#### Querying Functions + +The Assets pallet also provides read-only functions to retrieve on-chain asset data, commonly used in dApps and backend services: + +- **`balance(asset_id, account)`** – Retrieves the balance of a given asset for a specified account. Useful for checking the holdings of an asset class across different accounts. +- **`total_supply(asset_id)`** – RReturns the total supply of the asset identified by asset_id. Allows users to verify how much of the asset exists on-chain. + +Additional queries include metadata lookups, account status, and asset details. See the full list in the [Pallet reference](https://docs.rs/pallet-assets/latest/pallet_assets/pallet/struct.Pallet.html){target=_blank}. + +#### Permission Models and Roles + +The Assets pallet uses role-based permissions to control who can manage different parts of an asset’s lifecycle: + +- **Owner**: Has overarching control, including destroying an entire asset class. Owners can also set or update the Issuer, Freezer, and Admin roles. +- **Admin**: Can freeze (preventing transfers) and forcibly transfer assets between accounts. Admins also have the power to reduce the balance of an asset class across arbitrary accounts. +- **Issuer**: Responsible for minting new tokens. When new assets are created, the Issuer is the account that controls their distribution to other accounts. +- **Freezer**: Can lock the transfer of assets from an account, preventing the account holder from moving their balance. + +These roles allow projects to enforce governance and security policies around their assets. + +#### Asset Freezing + +Assets can be temporarily locked to prevent transfers from specific accounts. This is useful for dispute resolution, fraud prevention, or compliance controls. + +Only the **Freezer** role can perform freezing actions: + +- **`freeze(asset_id, account)`**: Locks the specified asset of the account. While the asset is frozen, no transfers can be made from the frozen account. +- **`thaw(asset_id, account)`**: Corresponding function for unfreezing, allowing the asset to be transferred again. + +Freezing does not burn or remove assets. It simply pauses their movement until re-enabled. + +### Non-Custodial Transfers (Approval API) + +The Assets pallet supports delegated transfers using an Approval API. This lets one account authorize another to transfer a limited amount of its assets—without handing over full control. It’s useful for escrow logic, automated payments, and multi-party dApps. + +Key functions: + +- **`approve_transfer(asset_id, delegate, amount)`**: Approves a delegate to transfer up to a certain amount of the asset on behalf of the original account holder. +- **`cancel_approval(asset_id, delegate)`**: Cancels a previous approval for the delegate. Once canceled, the delegate no longer has permission to transfer the approved amount. +- **`transfer_approved(asset_id, owner, recipient, amount)`**: Executes the approved asset transfer from the owner’s account to the recipient. The delegate account can call this function once approval is granted. + +These delegated operations make it easier to manage multi-step transactions and dApps that require complex asset flows between participants. + +### Foreign Assets + +Foreign assets are tokens that originate outside Polkadot Hub—either from other Polkadot parachains or from external networks like Ethereum via bridges. + +Once registered on Polkadot Hub by the originating chain’s root origin, these assets can be held, transferred, and used just like native assets within the Polkadot ecosystem. + +#### Handling Foreign Assets + +Foreign assets are managed by the **Foreign Assets pallet**, which functions similarly to the standard Assets pallet. Most operations—like transfers and balance queries—use the same API, but with a few key differences: + +- **Asset Identifier**: Unlike native assets, foreign assets are identified using an XCM Multilocation rather than a simple numeric AssetId. This multilocation identifier represents the cross-chain location of the asset and provides a standardized way to reference it across different parachains and relay chains. +- **Transfers**: Once registered in the Polkadot Hub, foreign assets can be transferred between accounts, just like native assets. Users can also send these assets back to their originating blockchain if supported by the relevant cross-chain messaging mechanisms. + +This unified interface makes it easy for dApps to handle both native and cross-chain assets. + +### Assets & XCM + +Cross-chain asset transfers in Polkadot Hub use **XCM (Cross-Consensus Messaging)**. Monitoring these transfers is essential to verify asset movement between parachains and the Relay Chain. + +### Monitoring Successful Transfers +- Watch for inbound asset events on the **Relay Chain or Polkadot Hub**. +- Key event: **`balances.minted`** – confirms assets were received. +- Track each block and filter for this event to detect deposits and verify the target account. + +### Tracing Transfer Origins +To trace where a transfer came from: +1. Check the block where the `balances.minted` event was emitted. +2. Locate the **`messageQueue.Processed`** event. +3. Use the **message `Id`** from this event to correlate the XCM message across chains. + +!!! note + To learn more about **Asset Transfers with XCM**, please refer to the [XCM Get Started](/parachains/interoperability/get-started.md) page. + +## Smart Contracts on Polkadot Hub + +--8<-- 'text/smart-contracts/polkaVM-warning.md' + +### Introduction + +Polkadot’s Relay Chain does not support smart contracts directly, so developers build contract-based applications on parachains that provide execution environments. Polkadot Hub is one of those parachains, offering flexible smart contract capabilities alongside native asset management. + +### Building a Smart Contract + +Polkadot Hub supports multiple smart contract environments, giving developers the freedom to choose the workflow and tooling that best fits their project: + +- **PolkaVM**: A next-generation virtual machine designed specifically for Polkadot. Built on a high-performance [RISC-V-based register architecture](https://en.wikipedia.org/wiki/RISC-V){target=_blank}, PolkaVM enables fast, scalable execution and is optimized for modern smart contract development. +- **REVM**: The [REVM backend](https://github.com/bluealloy/revm){target=_blank} brings a full Rust implementation of the EVM to Polkadot Hub. This allows developers to deploy existing Solidity contracts without modification, preserving compatibility with Ethereum tools and libraries. + +Each of these environments is fully compatible with Polkadot Hub, giving teams the option to reuse Ethereum code, build with Rust security guarantees, or explore high-performance innovation with PolkaVM. + +#### PolkaVM Contracts + +PolkaVM is Polkadot Hub’s native, high-performance smart contract engine. Instead of emulating EVM bytecode, it executes contracts compiled to a RISC-V instruction set, giving tighter control over execution, metering, and parallelization while staying friendly to Ethereum-style development. + +**What it enables for developers** +- **Ethereum-compatible development** – Write contracts in Solidity and use familiar tooling (e.g., Hardhat/Foundry workflows) with PolkaVM targets. +- **Fast, predictable execution** – RISC-V bytecode is designed for efficient interpretation and careful gas/weight metering within the Substrate runtime. +- **Better observability** – Substrate events + contract logs for clean indexing and debugging. + +**How it works (at a glance)** + +1. **Author & compile** – Your Solidity contract is compiled for PolkaVM (RISC-V target), producing bytecode plus ABI. +2. **Deploy** – Submit a signed extrinsic to Polkadot Hub; collators include it in a parachain block. +3. **Execute** – PolkaVM runs the contract code, mapping gas ↔ weight and persisting state via Substrate storage. +4. **Integrate** – Contracts can interact with Polkadot Hub pallets and send/receive XCM messages for cross-chain actions. +5. **Finalize & index** – The Relay Chain finalizes the block; events/logs are available to indexers and UIs. + +**When to choose PolkaVM** + +- You want **max performance** and tighter execution control than a traditional EVM. +- You plan to **compose with Substrate pallets** (assets, governance) and **XCM** frequently. +- You prefer a path that’s **Solidity-friendly** but optimized for Polkadot’s architecture. + +#### REVM Contracts + +REVM brings full EVM compatibility to Polkadot Hub through a fast, memory-safe Rust implementation of the Ethereum Virtual Machine. Unlike PolkaVM, which compiles contracts to RISC-V for native execution, REVM executes standard Ethereum bytecode directly—making it ideal for teams who want to migrate existing Solidity projects to Polkadot with minimal changes. + +With REVM, developers can: + +- Deploy existing Solidity contracts without rewriting them. +- Use familiar Ethereum tooling like Hardhat, Foundry, Remix, and MetaMask. +- Interact with other parachains and on-chain assets using XCM and Polkadot Hub features. + +REVM builds on Rust’s safety guarantees and performance optimizations while retaining full opcode compatibility with the EVM. This provides a reliable path for Ethereum-native developers to access Polkadot’s cross-chain ecosystem. + +For more details, explore the REVM integration in the Polkadot Hub smart contract documentation. + +If you want to learn more about the dual virtual stack please go to the [DualVM Stack](polkadot-docs/smart-contracts/for-eth-devs/dual-vm-stack.md){target=_blank}. \ No newline at end of file diff --git a/reference/polkadot-hub/assets.md b/reference/polkadot-hub/assets.md deleted file mode 100644 index 5717c4b50..000000000 --- a/reference/polkadot-hub/assets.md +++ /dev/null @@ -1,215 +0,0 @@ ---- -title: Asset Hub -description: Learn about Asset Hub in Polkadot, managing on-chain assets, foreign asset integration, and using XCM for cross-chain asset transfers. -categories: Polkadot Protocol ---- - -# Assets - -## Introduction - -Asset Hub is Polkadot’s system parachain for issuing and managing on-chain assets. While the Relay Chain provides security, Asset Hub handles asset logic—minting, burning, transfers, and metadata—in a cost-efficient environment. - -It’s worth noting that Asset Hub also supports EVM smart contracts. This means assets can be managed not only through the native Assets pallet, but also using familiar ERC-20 contract standards. - -Built for interoperability, it enables cross-chain asset transfers with XCM and supports foreign asset registration from other parachains. This guide covers core asset operations, XCM transfers, and developer tooling such as [API Sidecar](#api-sidecar) and [`TxWrapper`](#txwrapper). - -## Asset Basics - -The Polkadot Relay Chain supports only its native token (DOT), so Asset Hub provides a standardized framework for creating and managing fungible and non-fungible assets. It enables projects to issue tokens, manage supply, and transfer assets across parachains. - -Assets on Asset Hub support familiar operations such as minting, burning, transfers, and metadata management, similar to ERC-20 on Ethereum but built directly into Polkadot’s runtime for lower latency and fees. - -### Why use Asset Hub? - -- **Custom asset creation**: Issue tokens or NFTs with configurable permissions and metadata. -- **Low fees**: Transactions cost roughly one-tenth of Relay Chain fees. -- **Lower deposits**: Minimal on-chain storage costs for asset data. -- **Pay fees in any asset**: Users don’t need DOT to transact; supported assets can cover fees. -- **Cross-chain ready**: Assets can be transferred to other parachains using XCM. - -### Asset structure - -Each asset is identified by a unique ID and stores: - -- Asset administrators -- Total supply and holder count -- Minimum balance configuration -- **Sufficiency** – Whether the asset can keep an account alive without DOT -- Metadata (name, symbol, decimals) - -If a balance falls below the configured minimum, it may be removed as “dust.” This ensures efficient storage while giving developers control over asset economics. - -## Assets Pallet - -The Assets pallet in the Polkadot SDK provides the core logic behind fungible assets on Asset Hub. It enables developers to create and manage asset classes with configurable permissions. - -The pallet supports both permissioned and permissionless asset creation, making it suitable for simple tokens as well as governed assets controlled by teams or DAOs. - -For full API details, see the [Assets Pallet Rust docs](https://paritytech.github.io/polkadot-sdk/master/pallet_assets/index.html){target=_blank}. - -### Key Features - -The Assets pallet includes: - -- **Asset issuance**: Create new assets and assign initial supply. -- **Transfers**: Move assets between accounts with balance tracking. -- **Freezing**: Lock an account’s balance to prevent transfers. -- **Burning**: Reduce total supply by destroying tokens. -- **Non-custodial transfers**: Approve transfers on behalf of another account without giving up custody. - -### Main Functions - -The Assets pallet exposes a set of dispatchable functions for managing asset lifecycles: - -- **`create()`**: Register a new asset class (with a deposit when creation is permissionless). -- **`issue()`**: Mint an initial supply of a new asset. -- **`transfer()`**: Send assets between accounts. -- **`approve_transfer()`**: Authorize a third party to transfer assets on your behalf. -- **`destroy()`**: Remove an entire asset class from the chain. -- **`freeze()` / `thaw()`**: Restrict or restore an account’s ability to transfer assets. - -See the full API in the [dispatchable functions reference](https://docs.rs/pallet-assets/latest/pallet_assets/pallet/enum.Call.html){target=_blank}. - -### Querying Functions - -The Assets pallet also provides read-only functions to retrieve on-chain asset data, commonly used in dApps and backend services: - -- **`balance(asset_id, account)`** – Retrieves the balance of a given asset for a specified account. Useful for checking the holdings of an asset class across different accounts. -- **`total_supply(asset_id)`** – Returns the total supply of the asset identified by asset_id. Allows users to verify how much of the asset exists on-chain. - -Additional queries include metadata lookups, account status, and asset details. See the full list in the [Pallet reference](https://docs.rs/pallet-assets/latest/pallet_assets/pallet/struct.Pallet.html){target=_blank}. - -### Permission Models and Roles - -The Assets pallet uses role-based permissions to control who can manage different parts of an asset’s lifecycle: - -- **Owner**: Has overarching control, including destroying an entire asset class. Owners can also set or update the Issuer, Freezer, and Admin roles. -- **Admin**: Can freeze (preventing transfers) and forcibly transfer assets between accounts. Admins also have the power to reduce the balance of an asset class across arbitrary accounts. -- **Issuer**: Responsible for minting new tokens. When new assets are created, the Issuer is the account that controls their distribution to other accounts. -- **Freezer**: Can lock the transfer of assets from an account, preventing the account holder from moving their balance. - -These roles allow projects to enforce governance and security policies around their assets. - -### Asset Freezing - -Assets can be temporarily locked to prevent transfers from specific accounts. This is useful for dispute resolution, fraud prevention, or compliance controls. - -Only the **Freezer** role can perform freezing actions: - -- **`freeze(asset_id, account)`**: Locks the specified asset of the account. While the asset is frozen, no transfers can be made from the frozen account. -- **`thaw(asset_id, account)`**: Corresponding function for unfreezing, allowing the asset to be transferred again. - -Freezing does not burn or remove assets. It simply pauses their movement until re-enabled. - -### Non-Custodial Transfers (Approval API) - -The Assets pallet supports delegated transfers using an Approval API. This lets one account authorize another to transfer a limited amount of its assets—without handing over full control. It’s useful for escrow logic, automated payments, and multi-party dApps. - -Key functions: - -- **`approve_transfer(asset_id, delegate, amount)`**: Approves a delegate to transfer up to a certain amount of the asset on behalf of the original account holder. -- **`cancel_approval(asset_id, delegate)`**: Cancels a previous approval for the delegate. Once canceled, the delegate no longer has permission to transfer the approved amount. -- **`transfer_approved(asset_id, owner, recipient, amount)`**: Executes the approved asset transfer from the owner’s account to the recipient. The delegate account can call this function once approval is granted. - -These delegated operations make it easier to manage multi-step transactions and dApps that require complex asset flows between participants. - -## Foreign Assets - -Foreign assets are tokens that originate outside Asset Hub—either from other Polkadot parachains or from external networks like Ethereum via bridges. - -Once registered on Asset Hub by the originating chain’s root origin, these assets can be held, transferred, and used just like native assets within the Polkadot ecosystem. - -### Handling Foreign Assets - -Foreign assets are managed by the **Foreign Assets pallet**, which functions similarly to the standard Assets pallet. Most operations—like transfers and balance queries—use the same API, but with a few key differences: - -- **Asset Identifier**: Unlike native assets, foreign assets are identified using an XCM Multilocation rather than a simple numeric AssetId. This multilocation identifier represents the cross-chain location of the asset and provides a standardized way to reference it across different parachains and relay chains. -- **Transfers**: Once registered in the Asset Hub, foreign assets can be transferred between accounts, just like native assets. Users can also send these assets back to their originating blockchain if supported by the relevant cross-chain messaging mechanisms. - -This unified interface makes it easy for dApps to handle both native and cross-chain assets. - -## Integration - -Asset Hub provides developer tools and libraries for querying assets, submitting transactions, and handling cross-chain transfers in applications. These integrations make it easy to build wallets, dApps, and backend services on top of Asset Hub. - -Core tools include: - -### API Sidecar - -[API Sidecar](https://github.com/paritytech/substrate-api-sidecar){target=\_blank} is a RESTful service that can be deployed alongside Polkadot and Kusama nodes. It provides endpoints to retrieve real-time blockchain data, including asset information. When used with Asset Hub, Sidecar allows querying: - -- **Asset look-ups**: Retrieve specific assets using `AssetId`. -- **Asset balances**: View the balance of a particular asset on Asset Hub. - -Public instances of API Sidecar connected to Asset Hub are available, such as: - -- [Polkadot Asset Hub Sidecar](https://polkadot-asset-hub-public-sidecar.parity-chains.parity.io/){target=\_blank} -- [Kusama Asset Hub Sidecar](https://kusama-asset-hub-public-sidecar.parity-chains.parity.io/){target=\_blank} - -These public instances are primarily for ad-hoc testing and quick checks. - -### TxWrapper - -[`TxWrapper`](https://github.com/paritytech/txwrapper-core){target=\_blank} is a library that simplifies constructing and signing transactions for Polkadot SDK-based chains, including Polkadot and Kusama. This tool includes support for working with Asset Hub, enabling developers to: - -- Construct offline transactions. -- Leverage asset-specific functions such as minting, burning, and transferring assets. - -`TxWrapper` provides the flexibility needed to integrate asset operations into custom applications while maintaining the security and efficiency of Polkadot's transaction model. - -### ParaSpell - -[ParaSpell](https://paraspell.xyz/){target=\_blank} is a collection of open-source XCM tools designed to streamline cross-chain asset transfers and interactions within the Polkadot and Kusama ecosystems. It equips developers with an intuitive interface to manage and optimize XCM-based functionalities. Some key points included by ParaSpell are: - -- **[XCM SDK](https://paraspell.xyz/#xcm-sdk){target=\_blank}**: Provides a unified layer to incorporate XCM into decentralized applications, simplifying complex cross-chain interactions. -- **[XCM API](https://paraspell.xyz/#xcm-api){target=\_blank}**: Offers an efficient, package-free approach to integrating XCM functionality while offloading heavy computing tasks, minimizing costs, and improving application performance. This lightweight hosted API enables XCM execution without the need to run your own infrastructure. -- **[XCM router](https://paraspell.xyz/#xcm-router){target=\_blank}**: Enables cross-chain asset swaps in a single command, allowing developers to send one asset type and receive a different asset on another chain. -- **[XCM analyser](https://paraspell.xyz/#xcm-analyser){target=\_blank}**: Decodes and translates complex XCM multilocation data into readable information, supporting easier troubleshooting and debugging. -- **[XCM visualizator](https://paraspell.xyz/#xcm-visualizator){target=\_blank}**: A tool designed to give developers a clear, interactive view of XCM activity across the Polkadot ecosystem, providing insights into cross-chain communication flow. - -ParaSpell lets developers build cross-chain features without deep XCM expertise. Its utilities for message composition, decoding, and parachain routing make it especially useful for testing, debugging, and optimizing cross-chain transfers. - -### Parachain Node - -To fully use Asset Hub features, developers may also run a local system parachain node. This enables real-time interaction, full RPC access, and custom testing. Setup instructions are available in the Parity docs: -[Run an Asset Hub node](https://github.com/paritytech/polkadot-sdk/tree/{{dependencies.repositories.polkadot_sdk.version}}/cumulus#asset-hub-){target=_blank}. - -With the tools above, developers can integrate Asset Hub into wallets, services, and dApps while taking advantage of Polkadot’s cross-chain infrastructure. - -## XCM Transfer Monitoring - -Since Asset Hub enables cross-chain transfers, monitoring XCM messages is essential for tracking asset movement between parachains and the Relay Chain. This section explains how to observe and verify XCM transfer status during cross-chain operations. - -### Monitor XCM Deposits - -As assets move between chains, tracking the cross-chain transfers in real time is crucial. Whether assets are transferred via a teleport from system parachains or through a reserve-backed transfer from any other parachain, each transfer emits a relevant event (such as the `balances.minted` event). - -To ensure accurate monitoring of these events: - -- **Track XCM deposits**: Query every new block created in the relay chain or Asset Hub, loop through the events array, and filter for any `balances.minted` events which confirm the asset was successfully transferred to the account. -- **Track event origins**: Each `balances.minted` event points to a specific address. By monitoring this, service providers can verify that assets have arrived in the correct account. - -### Track XCM Information Back to the Source - -While the `balances.minted` event confirms the arrival of assets, there may be instances where you need to trace the origin of the cross-chain message that triggered the event. In such cases, you can: - -1. Query the relevant chain at the block where the `balances.minted` event was emitted. -2. Look for the `messageQueue.Processed` event during the block’s initialization. It includes an `Id` that uniquely identifies the inbound XCM message to the Relay Chain or Asset Hub. Use this `Id` to correlate events across chains and trace the transfer back to its origin, offering full visibility of the asset transfer's journey—including any intermediate hops. - -### Practical Monitoring Examples - -The preceding sections outline the process of monitoring XCM deposits to specific accounts and then tracing back the origin of these deposits. The process of tracking an XCM transfer and the specific events to monitor may vary based on the direction of the XCM message. Here are some examples to showcase the slight differences: - -- **Transfer from parachain to relay chain**: Track `parachainsystem(UpwardMessageSent)` on the parachain and `messagequeue(Processed)` on the relay chain. -- **Transfer from relay chain to parachain**: Track `xcmPallet(sent)` on the relay chain and `dmpqueue(ExecutedDownward)` on the parachain. -- **Transfer between parachains**: Track `xcmpqueue(XcmpMessageSent)` on the system parachain and `xcmpqueue(Success)` on the destination parachain. - -### Monitor for Failed XCM Transfers - -Sometimes, XCM transfers may fail due to liquidity or other errors. Failed transfers emit specific error events, which are key to resolving issues in asset transfers. Monitoring for these failure events helps catch issues before they affect asset balances. - -- **Relay chain to system parachain**: Look for the `dmpqueue(ExecutedDownward)` event on the parachain with an `Incomplete` outcome and an error type such as `UntrustedReserveLocation`. -- **Parachain to parachain**: Monitor for `xcmpqueue(Fail)` on the destination parachain with error types like `TooExpensive`. - -For detailed error management in XCM, see Gavin Wood's blog post on [XCM Execution and Error Management](https://polkadot.com/blog/xcm-part-three-execution-and-error-management/){target=\_blank}. diff --git a/reference/polkadot-hub/smart-contracts.md b/reference/polkadot-hub/smart-contracts.md deleted file mode 100644 index da38efb9a..000000000 --- a/reference/polkadot-hub/smart-contracts.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: Asset Hub Smart Contracts -description: Learn how developers can build smart contracts on Asset Hub by leveraging either Wasm/ink! or EVM contracts across many parachains. -categories: Basics, Polkadot Protocol ---- - -# Smart Contracts on Asset Hub - ---8<-- 'text/smart-contracts/polkaVM-warning.md' - -## Introduction - -Polkadot’s Relay Chain does not support smart contracts directly, so developers build contract-based applications on parachains that provide execution environments. Asset Hub is one of those parachains, offering flexible smart contract capabilities alongside native asset management. - -## Building a Smart Contract - -Asset Hub supports multiple smart contract environments, giving developers the freedom to choose the workflow and tooling that best fits their project: - -- **PolkaVM**: A next-generation virtual machine designed specifically for Polkadot. Built on a high-performance [RISC-V-based register architecture](https://en.wikipedia.org/wiki/RISC-V){target=_blank}, PolkaVM enables fast, scalable execution and is optimized for modern smart contract development. -- **REVM**: The [REVM backend](https://github.com/bluealloy/revm){target=_blank} brings a full Rust implementation of the EVM to the Polkadot Hub. This allows developers to deploy existing Solidity contracts without modification, preserving compatibility with Ethereum tools and libraries. - -Each of these environments is fully compatible with Asset Hub, giving teams the option to reuse Ethereum code, build with Rust security guarantees, or explore high-performance innovation with PolkaVM. - -### PolkaVM Contracts - -PolkaVM is Asset Hub’s native execution environment for smart contracts, designed to go beyond the limitations of the traditional EVM. Instead of emulating Ethereum bytecode, PolkaVM uses a high-performance RISC-V instruction set to natively execute smart contracts. - -This architecture enables faster execution, better parallelization, and lower resource consumption while still maintaining compatibility with Solidity tooling. - -Smart contracts written for PolkaVM compile down to a RISC-V bytecode format, which is optimized for verification and execution within Polkadot’s Wasm-based runtime. Developers can interact with PolkaVM using familiar Ethereum developer tools. - -### REVM Contracts - -REVM brings full EVM compatibility to Asset Hub through a fast, memory-safe Rust implementation of the Ethereum Virtual Machine. Unlike PolkaVM, which compiles contracts to RISC-V for native execution, REVM executes standard Ethereum bytecode directly—making it ideal for teams who want to migrate existing Solidity projects to Polkadot with minimal changes. - -With REVM, developers can: - -- Deploy existing Solidity contracts without rewriting them. -- Use familiar Ethereum tooling like Hardhat, Foundry, Remix, and MetaMask. -- Interact with other parachains and on-chain assets using XCM and Asset Hub features. - -REVM builds on Rust’s safety guarantees and performance optimizations while retaining full opcode compatibility with the EVM. This provides a reliable path for Ethereum-native developers to access Polkadot’s cross-chain ecosystem. - -For more details, explore the REVM integration in the Asset Hub smart contract documentation. - -If you want to learn more about the dual virtual stack please go to the [DualVM Stack](/smart-contracts/for-eth-devs/dual-vm-stack.md){target=_blank}. \ No newline at end of file From f7e45dc3181d6b37b2e23ba4938b7d24fb00d67b Mon Sep 17 00:00:00 2001 From: Andreja Markovic <104647242+kapetan3sid@users.noreply.github.com> Date: Mon, 27 Oct 2025 16:01:54 +0100 Subject: [PATCH 11/28] Apply suggestion from @nhussein11 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Nicolás Hussein <80422357+nhussein11@users.noreply.github.com> --- reference/polkadot-hub/assets-and-contracts.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reference/polkadot-hub/assets-and-contracts.md b/reference/polkadot-hub/assets-and-contracts.md index 68abe49ae..289bcca36 100644 --- a/reference/polkadot-hub/assets-and-contracts.md +++ b/reference/polkadot-hub/assets-and-contracts.md @@ -10,7 +10,7 @@ categories: Basics, Polkadot Protocol ### Introduction -Polkadot Hubis Polkadot’s system parachain for issuing and managing on-chain assets. While the Relay Chain provides security, Polkadot Hub handles asset logic—minting, burning, transfers, and metadata—in a cost-efficient environment. +The Polkadot Hub is Polkadot’s system parachain for issuing and managing on-chain assets. While the Relay Chain provides security, Polkadot Hub handles asset logic—minting, burning, transfers, and metadata—in a cost-efficient environment. It’s worth noting that Polkadot Hub also supports EVM smart contracts. This means assets can be managed not only through the native Assets pallet, but also using familiar ERC-20 contract standards. From 5263842b4519a6c2612e1a6307c6b07242d2b829 Mon Sep 17 00:00:00 2001 From: Andreja Markovic <104647242+kapetan3sid@users.noreply.github.com> Date: Mon, 27 Oct 2025 16:02:11 +0100 Subject: [PATCH 12/28] Apply suggestion from @nhussein11 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Nicolás Hussein <80422357+nhussein11@users.noreply.github.com> --- reference/polkadot-hub/assets-and-contracts.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reference/polkadot-hub/assets-and-contracts.md b/reference/polkadot-hub/assets-and-contracts.md index 289bcca36..0fbf09132 100644 --- a/reference/polkadot-hub/assets-and-contracts.md +++ b/reference/polkadot-hub/assets-and-contracts.md @@ -12,7 +12,7 @@ categories: Basics, Polkadot Protocol The Polkadot Hub is Polkadot’s system parachain for issuing and managing on-chain assets. While the Relay Chain provides security, Polkadot Hub handles asset logic—minting, burning, transfers, and metadata—in a cost-efficient environment. -It’s worth noting that Polkadot Hub also supports EVM smart contracts. This means assets can be managed not only through the native Assets pallet, but also using familiar ERC-20 contract standards. +It’s worth noting that Polkadot Hub also supports EVM and PVM smart contracts. This means assets can be managed not only through the native Assets pallet, but also using familiar ERC-20 contract standards. Built for interoperability, it enables cross-chain asset transfers with XCM and supports foreign asset registration from other parachains. This guide covers core asset operations, XCM transfers, and developer tooling such as [API Sidecar](#api-sidecar) and [`TxWrapper`](#txwrapper). From 1cd6c1e50e18efefcdd4f1009203f7ddf5c782e2 Mon Sep 17 00:00:00 2001 From: Andreja Markovic <104647242+kapetan3sid@users.noreply.github.com> Date: Mon, 27 Oct 2025 16:02:18 +0100 Subject: [PATCH 13/28] Apply suggestion from @nhussein11 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Nicolás Hussein <80422357+nhussein11@users.noreply.github.com> --- reference/polkadot-hub/assets-and-contracts.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reference/polkadot-hub/assets-and-contracts.md b/reference/polkadot-hub/assets-and-contracts.md index 0fbf09132..f3aa9b768 100644 --- a/reference/polkadot-hub/assets-and-contracts.md +++ b/reference/polkadot-hub/assets-and-contracts.md @@ -20,7 +20,7 @@ Built for interoperability, it enables cross-chain asset transfers with XCM and The Polkadot Relay Chain supports only its native token (DOT), so Polkadot Hub provides a standardized framework for creating and managing fungible and non-fungible assets. It enables projects to issue tokens, manage supply, and transfer assets across parachains. -Assets on Polkadot Hub support familiar operations such as minting, burning, transfers, and metadata management, similar to ERC-20 on Ethereum but built directly into Polkadot’s runtime for lower latency and fees. +Assets on Polkadot Hub support familiar operations such as minting, burning, transfers, and metadata management, similar to ERC-20 on Ethereum but built directly into Polkadot’s runtime. #### Why use Polkadot Hub? From 79f19c6cf4e8130c1edeee36ae59b413d7ac4946 Mon Sep 17 00:00:00 2001 From: Andreja Markovic <104647242+kapetan3sid@users.noreply.github.com> Date: Mon, 27 Oct 2025 16:02:30 +0100 Subject: [PATCH 14/28] Apply suggestion from @nhussein11 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Nicolás Hussein <80422357+nhussein11@users.noreply.github.com> --- reference/polkadot-hub/assets-and-contracts.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reference/polkadot-hub/assets-and-contracts.md b/reference/polkadot-hub/assets-and-contracts.md index f3aa9b768..6f39ba194 100644 --- a/reference/polkadot-hub/assets-and-contracts.md +++ b/reference/polkadot-hub/assets-and-contracts.md @@ -48,7 +48,7 @@ The Assets pallet in the Polkadot SDK provides the core logic behind fungible as The pallet supports both permissioned and permissionless asset creation, making it suitable for simple tokens as well as governed assets controlled by teams or DAOs. -For full API details, see the [Assets Pallet Rust docs](https://paritytech.github.io/polkadot-sdk/master/pallet_assets/index.html){target=_blank}. +For full API details, see the [Assets Pallet Rust docs](https://paritytech.github.io/polkadot-sdk/master/pallet_assets/index.html){target=\_blank}. #### Key Features From 4a3fd629792491cd05a1a8d98ba66d4e51678735 Mon Sep 17 00:00:00 2001 From: Andreja Markovic <104647242+kapetan3sid@users.noreply.github.com> Date: Mon, 27 Oct 2025 16:02:40 +0100 Subject: [PATCH 15/28] Apply suggestion from @nhussein11 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Nicolás Hussein <80422357+nhussein11@users.noreply.github.com> --- reference/polkadot-hub/assets-and-contracts.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reference/polkadot-hub/assets-and-contracts.md b/reference/polkadot-hub/assets-and-contracts.md index 6f39ba194..1882fa7d2 100644 --- a/reference/polkadot-hub/assets-and-contracts.md +++ b/reference/polkadot-hub/assets-and-contracts.md @@ -62,7 +62,7 @@ The Assets pallet includes: !!! note "Main Functions" For the full list of supported extrinsics, see the - [pallet-assets dispatchable functions reference](https://docs.rs/pallet-assets/latest/pallet_assets/pallet/enum.Call.html){target=_blank}. + [`pallet-assets` dispatchable functions reference](https://docs.rs/pallet-assets/latest/pallet_assets/pallet/enum.Call.html){target=\_blank}. #### Querying Functions From c44a661a43e50db291ec6f8969d9d6d58b50d94d Mon Sep 17 00:00:00 2001 From: Erin Shaben Date: Mon, 27 Oct 2025 21:56:27 -0400 Subject: [PATCH 16/28] minor edits --- reference/polkadot-hub/.nav.yml | 2 +- reference/polkadot-hub/assets-and-contracts.md | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/reference/polkadot-hub/.nav.yml b/reference/polkadot-hub/.nav.yml index 132fb3655..5142fefbf 100644 --- a/reference/polkadot-hub/.nav.yml +++ b/reference/polkadot-hub/.nav.yml @@ -1,7 +1,7 @@ nav: - 'Overview': index.md - 'Consensus and Security': consensus-and-security - - 'Assets & Contracts': assets-and-contracts.md + - 'Assets and Contracts': assets-and-contracts.md - 'Bridging': bridging.md - 'People and Identity': people-and-identity.md - 'Collectives and DAOs': collectives-and-daos.md diff --git a/reference/polkadot-hub/assets-and-contracts.md b/reference/polkadot-hub/assets-and-contracts.md index 1882fa7d2..4720993fb 100644 --- a/reference/polkadot-hub/assets-and-contracts.md +++ b/reference/polkadot-hub/assets-and-contracts.md @@ -1,10 +1,10 @@ --- -title: Polkadot Hub -description: Learn how Polkadot Hub enables smart contracts and asset management across the Polkadot network — including Wasm/ink! and EVM contract support, on-chain and foreign asset handling, and cross-chain transfers via XCM. +title: Assets and Contracts on Polkadot Hub +description: Discover how Polkadot Hub manages smart contracts and assets, enabling on-chain, foreign, and XCM-based cross-chain transfers within the Polkadot ecosystem. categories: Basics, Polkadot Protocol --- -# Assets & Contracts +# Assets and Smart Contracts ## Assets From adc48111f5079fda6a71df6754181ff107305c0b Mon Sep 17 00:00:00 2001 From: Andreja Markovic Date: Tue, 28 Oct 2025 12:41:59 +0100 Subject: [PATCH 17/28] split content in two pages --- reference/polkadot-hub/.nav.yml | 3 +- .../{assets-and-contracts.md => assets.md} | 98 ++++--------------- reference/polkadot-hub/smart-contracts.md | 63 ++++++++++++ 3 files changed, 85 insertions(+), 79 deletions(-) rename reference/polkadot-hub/{assets-and-contracts.md => assets.md} (60%) create mode 100644 reference/polkadot-hub/smart-contracts.md diff --git a/reference/polkadot-hub/.nav.yml b/reference/polkadot-hub/.nav.yml index 5142fefbf..61dfe09e4 100644 --- a/reference/polkadot-hub/.nav.yml +++ b/reference/polkadot-hub/.nav.yml @@ -1,7 +1,8 @@ nav: - 'Overview': index.md + - 'Smart Contracts': smart-contracts.md - 'Consensus and Security': consensus-and-security - - 'Assets and Contracts': assets-and-contracts.md + - 'Asset Management': assets.md - 'Bridging': bridging.md - 'People and Identity': people-and-identity.md - 'Collectives and DAOs': collectives-and-daos.md diff --git a/reference/polkadot-hub/assets-and-contracts.md b/reference/polkadot-hub/assets.md similarity index 60% rename from reference/polkadot-hub/assets-and-contracts.md rename to reference/polkadot-hub/assets.md index 4720993fb..2e16ee4d3 100644 --- a/reference/polkadot-hub/assets-and-contracts.md +++ b/reference/polkadot-hub/assets.md @@ -1,28 +1,26 @@ --- -title: Assets and Contracts on Polkadot Hub -description: Discover how Polkadot Hub manages smart contracts and assets, enabling on-chain, foreign, and XCM-based cross-chain transfers within the Polkadot ecosystem. -categories: Basics, Polkadot Protocol +title: Polkadot Hub Assets +description: Learn about asset management on Polkadot Hub, including on-chain assets, foreign asset integration, and XCM for cross-chain asset transfers. +categories: Polkadot Protocol --- -# Assets and Smart Contracts +## Asset Management -## Assets +## Introduction -### Introduction +Polkadot Hub is Polkadot's system parachain for issuing and managing on-chain assets. While the Relay Chain provides security, Polkadot Hub handles asset logic—minting, burning, transfers, and metadata—in a cost-efficient environment. -The Polkadot Hub is Polkadot’s system parachain for issuing and managing on-chain assets. While the Relay Chain provides security, Polkadot Hub handles asset logic—minting, burning, transfers, and metadata—in a cost-efficient environment. - -It’s worth noting that Polkadot Hub also supports EVM and PVM smart contracts. This means assets can be managed not only through the native Assets pallet, but also using familiar ERC-20 contract standards. +It's worth noting that Polkadot Hub also supports EVM and PVM smart contracts. This means assets can be managed not only through the native Assets pallet, but also using familiar ERC-20 contract standards. Built for interoperability, it enables cross-chain asset transfers with XCM and supports foreign asset registration from other parachains. This guide covers core asset operations, XCM transfers, and developer tooling such as [API Sidecar](#api-sidecar) and [`TxWrapper`](#txwrapper). -### Asset Basics +## Asset Basics The Polkadot Relay Chain supports only its native token (DOT), so Polkadot Hub provides a standardized framework for creating and managing fungible and non-fungible assets. It enables projects to issue tokens, manage supply, and transfer assets across parachains. Assets on Polkadot Hub support familiar operations such as minting, burning, transfers, and metadata management, similar to ERC-20 on Ethereum but built directly into Polkadot’s runtime. -#### Why use Polkadot Hub? +### Why use Polkadot Hub? - **Custom asset creation**: Issue tokens or NFTs with configurable permissions and metadata. - **Low fees**: Transactions cost roughly one-tenth of Relay Chain fees. @@ -30,7 +28,7 @@ Assets on Polkadot Hub support familiar operations such as minting, burning, tra - **Pay fees in any asset**: Users don’t need DOT to transact; supported assets can cover fees. - **Cross-chain ready**: Assets can be transferred to other parachains using XCM. -#### Asset structure +### Asset structure Each asset is identified by a unique ID and stores: @@ -42,7 +40,7 @@ Each asset is identified by a unique ID and stores: If a balance falls below the configured minimum, it may be removed as “dust.” This ensures efficient storage while giving developers control over asset economics. -### Assets Pallet +## Assets Pallet The Assets pallet in the Polkadot SDK provides the core logic behind fungible assets on Polkadot Hub. It enables developers to create and manage asset classes with configurable permissions. @@ -50,7 +48,7 @@ The pallet supports both permissioned and permissionless asset creation, making For full API details, see the [Assets Pallet Rust docs](https://paritytech.github.io/polkadot-sdk/master/pallet_assets/index.html){target=\_blank}. -#### Key Features +### Key Features The Assets pallet includes: @@ -64,7 +62,7 @@ The Assets pallet includes: For the full list of supported extrinsics, see the [`pallet-assets` dispatchable functions reference](https://docs.rs/pallet-assets/latest/pallet_assets/pallet/enum.Call.html){target=\_blank}. -#### Querying Functions +### Querying Functions The Assets pallet also provides read-only functions to retrieve on-chain asset data, commonly used in dApps and backend services: @@ -73,7 +71,7 @@ The Assets pallet also provides read-only functions to retrieve on-chain asset d Additional queries include metadata lookups, account status, and asset details. See the full list in the [Pallet reference](https://docs.rs/pallet-assets/latest/pallet_assets/pallet/struct.Pallet.html){target=_blank}. -#### Permission Models and Roles +### Permission Models and Roles The Assets pallet uses role-based permissions to control who can manage different parts of an asset’s lifecycle: @@ -84,7 +82,7 @@ The Assets pallet uses role-based permissions to control who can manage differen These roles allow projects to enforce governance and security policies around their assets. -#### Asset Freezing +### Asset Freezing Assets can be temporarily locked to prevent transfers from specific accounts. This is useful for dispute resolution, fraud prevention, or compliance controls. @@ -95,7 +93,7 @@ Only the **Freezer** role can perform freezing actions: Freezing does not burn or remove assets. It simply pauses their movement until re-enabled. -### Non-Custodial Transfers (Approval API) +## Non-Custodial Transfers (Approval API) The Assets pallet supports delegated transfers using an Approval API. This lets one account authorize another to transfer a limited amount of its assets—without handing over full control. It’s useful for escrow logic, automated payments, and multi-party dApps. @@ -107,13 +105,13 @@ Key functions: These delegated operations make it easier to manage multi-step transactions and dApps that require complex asset flows between participants. -### Foreign Assets +## Foreign Assets Foreign assets are tokens that originate outside Polkadot Hub—either from other Polkadot parachains or from external networks like Ethereum via bridges. Once registered on Polkadot Hub by the originating chain’s root origin, these assets can be held, transferred, and used just like native assets within the Polkadot ecosystem. -#### Handling Foreign Assets +### Handling Foreign Assets Foreign assets are managed by the **Foreign Assets pallet**, which functions similarly to the standard Assets pallet. Most operations—like transfers and balance queries—use the same API, but with a few key differences: @@ -122,7 +120,7 @@ Foreign assets are managed by the **Foreign Assets pallet**, which functions sim This unified interface makes it easy for dApps to handle both native and cross-chain assets. -### Assets & XCM +## Assets & XCM Cross-chain asset transfers in Polkadot Hub use **XCM (Cross-Consensus Messaging)**. Monitoring these transfers is essential to verify asset movement between parachains and the Relay Chain. @@ -131,7 +129,7 @@ Cross-chain asset transfers in Polkadot Hub use **XCM (Cross-Consensus Messaging - Key event: **`balances.minted`** – confirms assets were received. - Track each block and filter for this event to detect deposits and verify the target account. -### Tracing Transfer Origins +## Tracing Transfer Origins To trace where a transfer came from: 1. Check the block where the `balances.minted` event was emitted. 2. Locate the **`messageQueue.Processed`** event. @@ -139,59 +137,3 @@ To trace where a transfer came from: !!! note To learn more about **Asset Transfers with XCM**, please refer to the [XCM Get Started](/parachains/interoperability/get-started.md) page. - -## Smart Contracts on Polkadot Hub - ---8<-- 'text/smart-contracts/polkaVM-warning.md' - -### Introduction - -Polkadot’s Relay Chain does not support smart contracts directly, so developers build contract-based applications on parachains that provide execution environments. Polkadot Hub is one of those parachains, offering flexible smart contract capabilities alongside native asset management. - -### Building a Smart Contract - -Polkadot Hub supports multiple smart contract environments, giving developers the freedom to choose the workflow and tooling that best fits their project: - -- **PolkaVM**: A next-generation virtual machine designed specifically for Polkadot. Built on a high-performance [RISC-V-based register architecture](https://en.wikipedia.org/wiki/RISC-V){target=_blank}, PolkaVM enables fast, scalable execution and is optimized for modern smart contract development. -- **REVM**: The [REVM backend](https://github.com/bluealloy/revm){target=_blank} brings a full Rust implementation of the EVM to Polkadot Hub. This allows developers to deploy existing Solidity contracts without modification, preserving compatibility with Ethereum tools and libraries. - -Each of these environments is fully compatible with Polkadot Hub, giving teams the option to reuse Ethereum code, build with Rust security guarantees, or explore high-performance innovation with PolkaVM. - -#### PolkaVM Contracts - -PolkaVM is Polkadot Hub’s native, high-performance smart contract engine. Instead of emulating EVM bytecode, it executes contracts compiled to a RISC-V instruction set, giving tighter control over execution, metering, and parallelization while staying friendly to Ethereum-style development. - -**What it enables for developers** -- **Ethereum-compatible development** – Write contracts in Solidity and use familiar tooling (e.g., Hardhat/Foundry workflows) with PolkaVM targets. -- **Fast, predictable execution** – RISC-V bytecode is designed for efficient interpretation and careful gas/weight metering within the Substrate runtime. -- **Better observability** – Substrate events + contract logs for clean indexing and debugging. - -**How it works (at a glance)** - -1. **Author & compile** – Your Solidity contract is compiled for PolkaVM (RISC-V target), producing bytecode plus ABI. -2. **Deploy** – Submit a signed extrinsic to Polkadot Hub; collators include it in a parachain block. -3. **Execute** – PolkaVM runs the contract code, mapping gas ↔ weight and persisting state via Substrate storage. -4. **Integrate** – Contracts can interact with Polkadot Hub pallets and send/receive XCM messages for cross-chain actions. -5. **Finalize & index** – The Relay Chain finalizes the block; events/logs are available to indexers and UIs. - -**When to choose PolkaVM** - -- You want **max performance** and tighter execution control than a traditional EVM. -- You plan to **compose with Substrate pallets** (assets, governance) and **XCM** frequently. -- You prefer a path that’s **Solidity-friendly** but optimized for Polkadot’s architecture. - -#### REVM Contracts - -REVM brings full EVM compatibility to Polkadot Hub through a fast, memory-safe Rust implementation of the Ethereum Virtual Machine. Unlike PolkaVM, which compiles contracts to RISC-V for native execution, REVM executes standard Ethereum bytecode directly—making it ideal for teams who want to migrate existing Solidity projects to Polkadot with minimal changes. - -With REVM, developers can: - -- Deploy existing Solidity contracts without rewriting them. -- Use familiar Ethereum tooling like Hardhat, Foundry, Remix, and MetaMask. -- Interact with other parachains and on-chain assets using XCM and Polkadot Hub features. - -REVM builds on Rust’s safety guarantees and performance optimizations while retaining full opcode compatibility with the EVM. This provides a reliable path for Ethereum-native developers to access Polkadot’s cross-chain ecosystem. - -For more details, explore the REVM integration in the Polkadot Hub smart contract documentation. - -If you want to learn more about the dual virtual stack please go to the [DualVM Stack](polkadot-docs/smart-contracts/for-eth-devs/dual-vm-stack.md){target=_blank}. \ No newline at end of file diff --git a/reference/polkadot-hub/smart-contracts.md b/reference/polkadot-hub/smart-contracts.md new file mode 100644 index 000000000..76a4a65ba --- /dev/null +++ b/reference/polkadot-hub/smart-contracts.md @@ -0,0 +1,63 @@ + + +--- +title: Polkadot Hub Smart Contracts +description: Learn how to build smart contracts on Polkadot Hub using PolkaVM and REVM, supporting both native Polkadot development and Ethereum compatibility. +categories: Polkadot Protocol +--- + +# Polkadot Hub Smart Contracts + +--8<-- 'text/smart-contracts/polkaVM-warning.md' + +## Introduction + +Polkadot’s Relay Chain does not support smart contracts directly, so developers build contract-based applications on parachains that provide execution environments. Polkadot Hub is one of those parachains, offering flexible smart contract capabilities alongside native asset management. + +## Building a Smart Contract + +Polkadot Hub supports multiple smart contract environments, giving developers the freedom to choose the workflow and tooling that best fits their project: + +- **PolkaVM**: A next-generation virtual machine designed specifically for Polkadot. Built on a high-performance [RISC-V-based register architecture](https://en.wikipedia.org/wiki/RISC-V){target=_blank}, PolkaVM enables fast, scalable execution and is optimized for modern smart contract development. +- **REVM**: The [REVM backend](https://github.com/bluealloy/revm){target=_blank} brings a full Rust implementation of the EVM to Polkadot Hub. This allows developers to deploy existing Solidity contracts without modification, preserving compatibility with Ethereum tools and libraries. + +Each of these environments is fully compatible with Polkadot Hub, giving teams the option to reuse Ethereum code, build with Rust security guarantees, or explore high-performance innovation with PolkaVM. + +### PolkaVM Contracts + +PolkaVM is Polkadot Hub’s native, high-performance smart contract engine. Instead of emulating EVM bytecode, it executes contracts compiled to a RISC-V instruction set, giving tighter control over execution, metering, and parallelization while staying friendly to Ethereum-style development. + +**What it enables for developers** +- **Ethereum-compatible development** – Write contracts in Solidity and use familiar tooling (e.g., Hardhat/Foundry workflows) with PolkaVM targets. +- **Fast, predictable execution** – RISC-V bytecode is designed for efficient interpretation and careful gas/weight metering within the Substrate runtime. +- **Better observability** – Substrate events + contract logs for clean indexing and debugging. + +**How it works (at a glance)** + +1. **Author & compile** – Your Solidity contract is compiled for PolkaVM (RISC-V target), producing bytecode plus ABI. +2. **Deploy** – Submit a signed extrinsic to Polkadot Hub; collators include it in a parachain block. +3. **Execute** – PolkaVM runs the contract code, mapping gas ↔ weight and persisting state via Substrate storage. +4. **Integrate** – Contracts can interact with Polkadot Hub pallets and send/receive XCM messages for cross-chain actions. +5. **Finalize & index** – The Relay Chain finalizes the block; events/logs are available to indexers and UIs. + +**When to choose PolkaVM** + +- You want **max performance** and tighter execution control than a traditional EVM. +- You plan to **compose with Substrate pallets** (assets, governance) and **XCM** frequently. +- You prefer a path that’s **Solidity-friendly** but optimized for Polkadot’s architecture. + +### REVM Contracts + +REVM brings full EVM compatibility to Polkadot Hub through a fast, memory-safe Rust implementation of the Ethereum Virtual Machine. Unlike PolkaVM, which compiles contracts to RISC-V for native execution, REVM executes standard Ethereum bytecode directly—making it ideal for teams who want to migrate existing Solidity projects to Polkadot with minimal changes. + +With REVM, developers can: + +- Deploy existing Solidity contracts without rewriting them. +- Use familiar Ethereum tooling like Hardhat, Foundry, Remix, and MetaMask. +- Interact with other parachains and on-chain assets using XCM and Polkadot Hub features. + +REVM builds on Rust’s safety guarantees and performance optimizations while retaining full opcode compatibility with the EVM. This provides a reliable path for Ethereum-native developers to access Polkadot’s cross-chain ecosystem. + +For more details, explore the REVM integration in the Polkadot Hub smart contract documentation. + +If you want to learn more about the dual virtual stack please go to the [DualVM Stack](polkadot-docs/smart-contracts/for-eth-devs/dual-vm-stack.md){target=_blank}. \ No newline at end of file From 7843997f92f189ddc26ac8322512b7bb89dffe20 Mon Sep 17 00:00:00 2001 From: Andreja Markovic Date: Tue, 28 Oct 2025 12:57:48 +0100 Subject: [PATCH 18/28] add llms stuff --- .ai/categories/polkadot-protocol.md | 208 +++++ .ai/pages/reference-polkadot-hub-assets.md | 140 ++++ .../reference-polkadot-hub-smart-contracts.md | 62 ++ .ai/site-index.json | 718 +++++++++++------- llms-full.jsonl | 20 + llms.txt | 4 +- reference/polkadot-hub/smart-contracts.md | 2 - 7 files changed, 864 insertions(+), 290 deletions(-) create mode 100644 .ai/pages/reference-polkadot-hub-assets.md create mode 100644 .ai/pages/reference-polkadot-hub-smart-contracts.md diff --git a/.ai/categories/polkadot-protocol.md b/.ai/categories/polkadot-protocol.md index b2199c58c..8d025a759 100644 --- a/.ai/categories/polkadot-protocol.md +++ b/.ai/categories/polkadot-protocol.md @@ -11733,6 +11733,214 @@ You must contact specific registrars individually to request judgment. Each regi +--- + +Page Title: Polkadot Hub Assets + +- Source (raw): https://raw.githubusercontent.com/polkadot-developers/polkadot-docs/master/.ai/pages/reference-polkadot-hub-assets.md +- Canonical (HTML): https://docs.polkadot.com/reference/polkadot-hub/assets/ +- Summary: Learn about asset management on Polkadot Hub, including on-chain assets, foreign asset integration, and XCM for cross-chain asset transfers. + +## Asset Management + +## Introduction + +Polkadot Hub is Polkadot's system parachain for issuing and managing on-chain assets. While the Relay Chain provides security, Polkadot Hub handles asset logic—minting, burning, transfers, and metadata—in a cost-efficient environment. + +It's worth noting that Polkadot Hub also supports EVM and PVM smart contracts. This means assets can be managed not only through the native Assets pallet, but also using familiar ERC-20 contract standards. + +Built for interoperability, it enables cross-chain asset transfers with XCM and supports foreign asset registration from other parachains. This guide covers core asset operations, XCM transfers, and developer tooling such as [API Sidecar](#api-sidecar) and [`TxWrapper`](#txwrapper). + +## Asset Basics + +The Polkadot Relay Chain supports only its native token (DOT), so Polkadot Hub provides a standardized framework for creating and managing fungible and non-fungible assets. It enables projects to issue tokens, manage supply, and transfer assets across parachains. + +Assets on Polkadot Hub support familiar operations such as minting, burning, transfers, and metadata management, similar to ERC-20 on Ethereum but built directly into Polkadot’s runtime. + +### Why use Polkadot Hub? + +- **Custom asset creation**: Issue tokens or NFTs with configurable permissions and metadata. +- **Low fees**: Transactions cost roughly one-tenth of Relay Chain fees. +- **Lower deposits**: Minimal on-chain storage costs for asset data. +- **Pay fees in any asset**: Users don’t need DOT to transact; supported assets can cover fees. +- **Cross-chain ready**: Assets can be transferred to other parachains using XCM. + +### Asset structure + +Each asset is identified by a unique ID and stores: + +- Asset administrators +- Total supply and holder count +- Minimum balance configuration +- **Sufficiency** – Whether the asset can keep an account alive without DOT +- Metadata (name, symbol, decimals) + +If a balance falls below the configured minimum, it may be removed as “dust.” This ensures efficient storage while giving developers control over asset economics. + +## Assets Pallet + +The Assets pallet in the Polkadot SDK provides the core logic behind fungible assets on Polkadot Hub. It enables developers to create and manage asset classes with configurable permissions. + +The pallet supports both permissioned and permissionless asset creation, making it suitable for simple tokens as well as governed assets controlled by teams or DAOs. + +For full API details, see the [Assets Pallet Rust docs](https://paritytech.github.io/polkadot-sdk/master/pallet_assets/index.html){target=\_blank}. + +### Key Features + +The Assets pallet includes: + +- **Asset issuance**: Create new assets and assign initial supply. +- **Transfers**: Move assets between accounts with balance tracking. +- **Freezing**: Lock an account’s balance to prevent transfers. +- **Burning**: Reduce total supply by destroying tokens. +- **Non-custodial transfers**: Approve transfers on behalf of another account without giving up custody. + +!!! note "Main Functions" + For the full list of supported extrinsics, see the + [`pallet-assets` dispatchable functions reference](https://docs.rs/pallet-assets/latest/pallet_assets/pallet/enum.Call.html){target=\_blank}. + +### Querying Functions + +The Assets pallet also provides read-only functions to retrieve on-chain asset data, commonly used in dApps and backend services: + +- **`balance(asset_id, account)`** – Retrieves the balance of a given asset for a specified account. Useful for checking the holdings of an asset class across different accounts. +- **`total_supply(asset_id)`** – RReturns the total supply of the asset identified by asset_id. Allows users to verify how much of the asset exists on-chain. + +Additional queries include metadata lookups, account status, and asset details. See the full list in the [Pallet reference](https://docs.rs/pallet-assets/latest/pallet_assets/pallet/struct.Pallet.html){target=_blank}. + +### Permission Models and Roles + +The Assets pallet uses role-based permissions to control who can manage different parts of an asset’s lifecycle: + +- **Owner**: Has overarching control, including destroying an entire asset class. Owners can also set or update the Issuer, Freezer, and Admin roles. +- **Admin**: Can freeze (preventing transfers) and forcibly transfer assets between accounts. Admins also have the power to reduce the balance of an asset class across arbitrary accounts. +- **Issuer**: Responsible for minting new tokens. When new assets are created, the Issuer is the account that controls their distribution to other accounts. +- **Freezer**: Can lock the transfer of assets from an account, preventing the account holder from moving their balance. + +These roles allow projects to enforce governance and security policies around their assets. + +### Asset Freezing + +Assets can be temporarily locked to prevent transfers from specific accounts. This is useful for dispute resolution, fraud prevention, or compliance controls. + +Only the **Freezer** role can perform freezing actions: + +- **`freeze(asset_id, account)`**: Locks the specified asset of the account. While the asset is frozen, no transfers can be made from the frozen account. +- **`thaw(asset_id, account)`**: Corresponding function for unfreezing, allowing the asset to be transferred again. + +Freezing does not burn or remove assets. It simply pauses their movement until re-enabled. + +## Non-Custodial Transfers (Approval API) + +The Assets pallet supports delegated transfers using an Approval API. This lets one account authorize another to transfer a limited amount of its assets—without handing over full control. It’s useful for escrow logic, automated payments, and multi-party dApps. + +Key functions: + +- **`approve_transfer(asset_id, delegate, amount)`**: Approves a delegate to transfer up to a certain amount of the asset on behalf of the original account holder. +- **`cancel_approval(asset_id, delegate)`**: Cancels a previous approval for the delegate. Once canceled, the delegate no longer has permission to transfer the approved amount. +- **`transfer_approved(asset_id, owner, recipient, amount)`**: Executes the approved asset transfer from the owner’s account to the recipient. The delegate account can call this function once approval is granted. + +These delegated operations make it easier to manage multi-step transactions and dApps that require complex asset flows between participants. + +## Foreign Assets + +Foreign assets are tokens that originate outside Polkadot Hub—either from other Polkadot parachains or from external networks like Ethereum via bridges. + +Once registered on Polkadot Hub by the originating chain’s root origin, these assets can be held, transferred, and used just like native assets within the Polkadot ecosystem. + +### Handling Foreign Assets + +Foreign assets are managed by the **Foreign Assets pallet**, which functions similarly to the standard Assets pallet. Most operations—like transfers and balance queries—use the same API, but with a few key differences: + +- **Asset Identifier**: Unlike native assets, foreign assets are identified using an XCM Multilocation rather than a simple numeric AssetId. This multilocation identifier represents the cross-chain location of the asset and provides a standardized way to reference it across different parachains and relay chains. +- **Transfers**: Once registered in the Polkadot Hub, foreign assets can be transferred between accounts, just like native assets. Users can also send these assets back to their originating blockchain if supported by the relevant cross-chain messaging mechanisms. + +This unified interface makes it easy for dApps to handle both native and cross-chain assets. + +## Assets & XCM + +Cross-chain asset transfers in Polkadot Hub use **XCM (Cross-Consensus Messaging)**. Monitoring these transfers is essential to verify asset movement between parachains and the Relay Chain. + +### Monitoring Successful Transfers +- Watch for inbound asset events on the **Relay Chain or Polkadot Hub**. +- Key event: **`balances.minted`** – confirms assets were received. +- Track each block and filter for this event to detect deposits and verify the target account. + +## Tracing Transfer Origins +To trace where a transfer came from: +1. Check the block where the `balances.minted` event was emitted. +2. Locate the **`messageQueue.Processed`** event. +3. Use the **message `Id`** from this event to correlate the XCM message across chains. + +!!! note + To learn more about **Asset Transfers with XCM**, please refer to the [XCM Get Started](/parachains/interoperability/get-started.md) page. + + +--- + +Page Title: Polkadot Hub Smart Contracts + +- Source (raw): https://raw.githubusercontent.com/polkadot-developers/polkadot-docs/master/.ai/pages/reference-polkadot-hub-smart-contracts.md +- Canonical (HTML): https://docs.polkadot.com/reference/polkadot-hub/smart-contracts/ +- Summary: Learn how to build smart contracts on Polkadot Hub using PolkaVM and REVM, supporting both native Polkadot development and Ethereum compatibility. + +# Polkadot Hub Smart Contracts + +!!! smartcontract "PolkaVM Preview Release" + PolkaVM smart contracts with Ethereum compatibility are in **early-stage development and may be unstable or incomplete**. +## Introduction + +Polkadot’s Relay Chain does not support smart contracts directly, so developers build contract-based applications on parachains that provide execution environments. Polkadot Hub is one of those parachains, offering flexible smart contract capabilities alongside native asset management. + +## Building a Smart Contract + +Polkadot Hub supports multiple smart contract environments, giving developers the freedom to choose the workflow and tooling that best fits their project: + +- **PolkaVM**: A next-generation virtual machine designed specifically for Polkadot. Built on a high-performance [RISC-V-based register architecture](https://en.wikipedia.org/wiki/RISC-V){target=_blank}, PolkaVM enables fast, scalable execution and is optimized for modern smart contract development. +- **REVM**: The [REVM backend](https://github.com/bluealloy/revm){target=_blank} brings a full Rust implementation of the EVM to Polkadot Hub. This allows developers to deploy existing Solidity contracts without modification, preserving compatibility with Ethereum tools and libraries. + +Each of these environments is fully compatible with Polkadot Hub, giving teams the option to reuse Ethereum code, build with Rust security guarantees, or explore high-performance innovation with PolkaVM. + +### PolkaVM Contracts + +PolkaVM is Polkadot Hub’s native, high-performance smart contract engine. Instead of emulating EVM bytecode, it executes contracts compiled to a RISC-V instruction set, giving tighter control over execution, metering, and parallelization while staying friendly to Ethereum-style development. + +**What it enables for developers** +- **Ethereum-compatible development** – Write contracts in Solidity and use familiar tooling (e.g., Hardhat/Foundry workflows) with PolkaVM targets. +- **Fast, predictable execution** – RISC-V bytecode is designed for efficient interpretation and careful gas/weight metering within the Substrate runtime. +- **Better observability** – Substrate events + contract logs for clean indexing and debugging. + +**How it works (at a glance)** + +1. **Author & compile** – Your Solidity contract is compiled for PolkaVM (RISC-V target), producing bytecode plus ABI. +2. **Deploy** – Submit a signed extrinsic to Polkadot Hub; collators include it in a parachain block. +3. **Execute** – PolkaVM runs the contract code, mapping gas ↔ weight and persisting state via Substrate storage. +4. **Integrate** – Contracts can interact with Polkadot Hub pallets and send/receive XCM messages for cross-chain actions. +5. **Finalize & index** – The Relay Chain finalizes the block; events/logs are available to indexers and UIs. + +**When to choose PolkaVM** + +- You want **max performance** and tighter execution control than a traditional EVM. +- You plan to **compose with Substrate pallets** (assets, governance) and **XCM** frequently. +- You prefer a path that’s **Solidity-friendly** but optimized for Polkadot’s architecture. + +### REVM Contracts + +REVM brings full EVM compatibility to Polkadot Hub through a fast, memory-safe Rust implementation of the Ethereum Virtual Machine. Unlike PolkaVM, which compiles contracts to RISC-V for native execution, REVM executes standard Ethereum bytecode directly—making it ideal for teams who want to migrate existing Solidity projects to Polkadot with minimal changes. + +With REVM, developers can: + +- Deploy existing Solidity contracts without rewriting them. +- Use familiar Ethereum tooling like Hardhat, Foundry, Remix, and MetaMask. +- Interact with other parachains and on-chain assets using XCM and Polkadot Hub features. + +REVM builds on Rust’s safety guarantees and performance optimizations while retaining full opcode compatibility with the EVM. This provides a reliable path for Ethereum-native developers to access Polkadot’s cross-chain ecosystem. + +For more details, explore the REVM integration in the Polkadot Hub smart contract documentation. + +If you want to learn more about the dual virtual stack please go to the [DualVM Stack](polkadot-docs/smart-contracts/for-eth-devs/dual-vm-stack.md){target=_blank}. + + --- Page Title: Polkadot SDK Accounts diff --git a/.ai/pages/reference-polkadot-hub-assets.md b/.ai/pages/reference-polkadot-hub-assets.md new file mode 100644 index 000000000..91ebd9956 --- /dev/null +++ b/.ai/pages/reference-polkadot-hub-assets.md @@ -0,0 +1,140 @@ +--- +title: Polkadot Hub Assets +description: Learn about asset management on Polkadot Hub, including on-chain assets, foreign asset integration, and XCM for cross-chain asset transfers. +categories: Polkadot Protocol +url: https://docs.polkadot.com/reference/polkadot-hub/assets/ +--- + +## Asset Management + +## Introduction + +Polkadot Hub is Polkadot's system parachain for issuing and managing on-chain assets. While the Relay Chain provides security, Polkadot Hub handles asset logic—minting, burning, transfers, and metadata—in a cost-efficient environment. + +It's worth noting that Polkadot Hub also supports EVM and PVM smart contracts. This means assets can be managed not only through the native Assets pallet, but also using familiar ERC-20 contract standards. + +Built for interoperability, it enables cross-chain asset transfers with XCM and supports foreign asset registration from other parachains. This guide covers core asset operations, XCM transfers, and developer tooling such as [API Sidecar](#api-sidecar) and [`TxWrapper`](#txwrapper). + +## Asset Basics + +The Polkadot Relay Chain supports only its native token (DOT), so Polkadot Hub provides a standardized framework for creating and managing fungible and non-fungible assets. It enables projects to issue tokens, manage supply, and transfer assets across parachains. + +Assets on Polkadot Hub support familiar operations such as minting, burning, transfers, and metadata management, similar to ERC-20 on Ethereum but built directly into Polkadot’s runtime. + +### Why use Polkadot Hub? + +- **Custom asset creation**: Issue tokens or NFTs with configurable permissions and metadata. +- **Low fees**: Transactions cost roughly one-tenth of Relay Chain fees. +- **Lower deposits**: Minimal on-chain storage costs for asset data. +- **Pay fees in any asset**: Users don’t need DOT to transact; supported assets can cover fees. +- **Cross-chain ready**: Assets can be transferred to other parachains using XCM. + +### Asset structure + +Each asset is identified by a unique ID and stores: + +- Asset administrators +- Total supply and holder count +- Minimum balance configuration +- **Sufficiency** – Whether the asset can keep an account alive without DOT +- Metadata (name, symbol, decimals) + +If a balance falls below the configured minimum, it may be removed as “dust.” This ensures efficient storage while giving developers control over asset economics. + +## Assets Pallet + +The Assets pallet in the Polkadot SDK provides the core logic behind fungible assets on Polkadot Hub. It enables developers to create and manage asset classes with configurable permissions. + +The pallet supports both permissioned and permissionless asset creation, making it suitable for simple tokens as well as governed assets controlled by teams or DAOs. + +For full API details, see the [Assets Pallet Rust docs](https://paritytech.github.io/polkadot-sdk/master/pallet_assets/index.html){target=\_blank}. + +### Key Features + +The Assets pallet includes: + +- **Asset issuance**: Create new assets and assign initial supply. +- **Transfers**: Move assets between accounts with balance tracking. +- **Freezing**: Lock an account’s balance to prevent transfers. +- **Burning**: Reduce total supply by destroying tokens. +- **Non-custodial transfers**: Approve transfers on behalf of another account without giving up custody. + +!!! note "Main Functions" + For the full list of supported extrinsics, see the + [`pallet-assets` dispatchable functions reference](https://docs.rs/pallet-assets/latest/pallet_assets/pallet/enum.Call.html){target=\_blank}. + +### Querying Functions + +The Assets pallet also provides read-only functions to retrieve on-chain asset data, commonly used in dApps and backend services: + +- **`balance(asset_id, account)`** – Retrieves the balance of a given asset for a specified account. Useful for checking the holdings of an asset class across different accounts. +- **`total_supply(asset_id)`** – RReturns the total supply of the asset identified by asset_id. Allows users to verify how much of the asset exists on-chain. + +Additional queries include metadata lookups, account status, and asset details. See the full list in the [Pallet reference](https://docs.rs/pallet-assets/latest/pallet_assets/pallet/struct.Pallet.html){target=_blank}. + +### Permission Models and Roles + +The Assets pallet uses role-based permissions to control who can manage different parts of an asset’s lifecycle: + +- **Owner**: Has overarching control, including destroying an entire asset class. Owners can also set or update the Issuer, Freezer, and Admin roles. +- **Admin**: Can freeze (preventing transfers) and forcibly transfer assets between accounts. Admins also have the power to reduce the balance of an asset class across arbitrary accounts. +- **Issuer**: Responsible for minting new tokens. When new assets are created, the Issuer is the account that controls their distribution to other accounts. +- **Freezer**: Can lock the transfer of assets from an account, preventing the account holder from moving their balance. + +These roles allow projects to enforce governance and security policies around their assets. + +### Asset Freezing + +Assets can be temporarily locked to prevent transfers from specific accounts. This is useful for dispute resolution, fraud prevention, or compliance controls. + +Only the **Freezer** role can perform freezing actions: + +- **`freeze(asset_id, account)`**: Locks the specified asset of the account. While the asset is frozen, no transfers can be made from the frozen account. +- **`thaw(asset_id, account)`**: Corresponding function for unfreezing, allowing the asset to be transferred again. + +Freezing does not burn or remove assets. It simply pauses their movement until re-enabled. + +## Non-Custodial Transfers (Approval API) + +The Assets pallet supports delegated transfers using an Approval API. This lets one account authorize another to transfer a limited amount of its assets—without handing over full control. It’s useful for escrow logic, automated payments, and multi-party dApps. + +Key functions: + +- **`approve_transfer(asset_id, delegate, amount)`**: Approves a delegate to transfer up to a certain amount of the asset on behalf of the original account holder. +- **`cancel_approval(asset_id, delegate)`**: Cancels a previous approval for the delegate. Once canceled, the delegate no longer has permission to transfer the approved amount. +- **`transfer_approved(asset_id, owner, recipient, amount)`**: Executes the approved asset transfer from the owner’s account to the recipient. The delegate account can call this function once approval is granted. + +These delegated operations make it easier to manage multi-step transactions and dApps that require complex asset flows between participants. + +## Foreign Assets + +Foreign assets are tokens that originate outside Polkadot Hub—either from other Polkadot parachains or from external networks like Ethereum via bridges. + +Once registered on Polkadot Hub by the originating chain’s root origin, these assets can be held, transferred, and used just like native assets within the Polkadot ecosystem. + +### Handling Foreign Assets + +Foreign assets are managed by the **Foreign Assets pallet**, which functions similarly to the standard Assets pallet. Most operations—like transfers and balance queries—use the same API, but with a few key differences: + +- **Asset Identifier**: Unlike native assets, foreign assets are identified using an XCM Multilocation rather than a simple numeric AssetId. This multilocation identifier represents the cross-chain location of the asset and provides a standardized way to reference it across different parachains and relay chains. +- **Transfers**: Once registered in the Polkadot Hub, foreign assets can be transferred between accounts, just like native assets. Users can also send these assets back to their originating blockchain if supported by the relevant cross-chain messaging mechanisms. + +This unified interface makes it easy for dApps to handle both native and cross-chain assets. + +## Assets & XCM + +Cross-chain asset transfers in Polkadot Hub use **XCM (Cross-Consensus Messaging)**. Monitoring these transfers is essential to verify asset movement between parachains and the Relay Chain. + +### Monitoring Successful Transfers +- Watch for inbound asset events on the **Relay Chain or Polkadot Hub**. +- Key event: **`balances.minted`** – confirms assets were received. +- Track each block and filter for this event to detect deposits and verify the target account. + +## Tracing Transfer Origins +To trace where a transfer came from: +1. Check the block where the `balances.minted` event was emitted. +2. Locate the **`messageQueue.Processed`** event. +3. Use the **message `Id`** from this event to correlate the XCM message across chains. + +!!! note + To learn more about **Asset Transfers with XCM**, please refer to the [XCM Get Started](/parachains/interoperability/get-started.md) page. diff --git a/.ai/pages/reference-polkadot-hub-smart-contracts.md b/.ai/pages/reference-polkadot-hub-smart-contracts.md new file mode 100644 index 000000000..da32feb35 --- /dev/null +++ b/.ai/pages/reference-polkadot-hub-smart-contracts.md @@ -0,0 +1,62 @@ +--- +title: Polkadot Hub Smart Contracts +description: Learn how to build smart contracts on Polkadot Hub using PolkaVM and REVM, supporting both native Polkadot development and Ethereum compatibility. +categories: Polkadot Protocol +url: https://docs.polkadot.com/reference/polkadot-hub/smart-contracts/ +--- + +# Polkadot Hub Smart Contracts + +!!! smartcontract "PolkaVM Preview Release" + PolkaVM smart contracts with Ethereum compatibility are in **early-stage development and may be unstable or incomplete**. +## Introduction + +Polkadot’s Relay Chain does not support smart contracts directly, so developers build contract-based applications on parachains that provide execution environments. Polkadot Hub is one of those parachains, offering flexible smart contract capabilities alongside native asset management. + +## Building a Smart Contract + +Polkadot Hub supports multiple smart contract environments, giving developers the freedom to choose the workflow and tooling that best fits their project: + +- **PolkaVM**: A next-generation virtual machine designed specifically for Polkadot. Built on a high-performance [RISC-V-based register architecture](https://en.wikipedia.org/wiki/RISC-V){target=_blank}, PolkaVM enables fast, scalable execution and is optimized for modern smart contract development. +- **REVM**: The [REVM backend](https://github.com/bluealloy/revm){target=_blank} brings a full Rust implementation of the EVM to Polkadot Hub. This allows developers to deploy existing Solidity contracts without modification, preserving compatibility with Ethereum tools and libraries. + +Each of these environments is fully compatible with Polkadot Hub, giving teams the option to reuse Ethereum code, build with Rust security guarantees, or explore high-performance innovation with PolkaVM. + +### PolkaVM Contracts + +PolkaVM is Polkadot Hub’s native, high-performance smart contract engine. Instead of emulating EVM bytecode, it executes contracts compiled to a RISC-V instruction set, giving tighter control over execution, metering, and parallelization while staying friendly to Ethereum-style development. + +**What it enables for developers** +- **Ethereum-compatible development** – Write contracts in Solidity and use familiar tooling (e.g., Hardhat/Foundry workflows) with PolkaVM targets. +- **Fast, predictable execution** – RISC-V bytecode is designed for efficient interpretation and careful gas/weight metering within the Substrate runtime. +- **Better observability** – Substrate events + contract logs for clean indexing and debugging. + +**How it works (at a glance)** + +1. **Author & compile** – Your Solidity contract is compiled for PolkaVM (RISC-V target), producing bytecode plus ABI. +2. **Deploy** – Submit a signed extrinsic to Polkadot Hub; collators include it in a parachain block. +3. **Execute** – PolkaVM runs the contract code, mapping gas ↔ weight and persisting state via Substrate storage. +4. **Integrate** – Contracts can interact with Polkadot Hub pallets and send/receive XCM messages for cross-chain actions. +5. **Finalize & index** – The Relay Chain finalizes the block; events/logs are available to indexers and UIs. + +**When to choose PolkaVM** + +- You want **max performance** and tighter execution control than a traditional EVM. +- You plan to **compose with Substrate pallets** (assets, governance) and **XCM** frequently. +- You prefer a path that’s **Solidity-friendly** but optimized for Polkadot’s architecture. + +### REVM Contracts + +REVM brings full EVM compatibility to Polkadot Hub through a fast, memory-safe Rust implementation of the Ethereum Virtual Machine. Unlike PolkaVM, which compiles contracts to RISC-V for native execution, REVM executes standard Ethereum bytecode directly—making it ideal for teams who want to migrate existing Solidity projects to Polkadot with minimal changes. + +With REVM, developers can: + +- Deploy existing Solidity contracts without rewriting them. +- Use familiar Ethereum tooling like Hardhat, Foundry, Remix, and MetaMask. +- Interact with other parachains and on-chain assets using XCM and Polkadot Hub features. + +REVM builds on Rust’s safety guarantees and performance optimizations while retaining full opcode compatibility with the EVM. This provides a reliable path for Ethereum-native developers to access Polkadot’s cross-chain ecosystem. + +For more details, explore the REVM integration in the Polkadot Hub smart contract documentation. + +If you want to learn more about the dual virtual stack please go to the [DualVM Stack](polkadot-docs/smart-contracts/for-eth-devs/dual-vm-stack.md){target=_blank}. diff --git a/.ai/site-index.json b/.ai/site-index.json index 12f55726d..4b93d9adc 100644 --- a/.ai/site-index.json +++ b/.ai/site-index.json @@ -17,7 +17,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-17T18:09:18+00:00", + "last_modified": "2025-10-28T11:55:17+00:00", "token_estimator": "heuristic-v1" }, { @@ -38,7 +38,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-17T18:09:18+00:00", + "last_modified": "2025-10-28T11:55:17+00:00", "token_estimator": "heuristic-v1" }, { @@ -59,7 +59,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-17T18:09:18+00:00", + "last_modified": "2025-10-28T11:55:17+00:00", "token_estimator": "heuristic-v1" }, { @@ -80,7 +80,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-17T18:09:18+00:00", + "last_modified": "2025-10-28T11:55:17+00:00", "token_estimator": "heuristic-v1" }, { @@ -101,7 +101,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-17T18:09:18+00:00", + "last_modified": "2025-10-28T11:55:17+00:00", "token_estimator": "heuristic-v1" }, { @@ -122,7 +122,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-17T18:09:18+00:00", + "last_modified": "2025-10-28T11:55:17+00:00", "token_estimator": "heuristic-v1" }, { @@ -234,7 +234,7 @@ "estimated_token_count_total": 4830 }, "hash": "sha256:a6bf7623a535e7a9162c0913b07bd59d43c8535025ad8225fb3e5adc83084c7a", - "last_modified": "2025-10-17T18:09:18+00:00", + "last_modified": "2025-10-28T11:55:17+00:00", "token_estimator": "heuristic-v1" }, { @@ -306,7 +306,7 @@ "estimated_token_count_total": 7755 }, "hash": "sha256:086a87823ab67ceac102358030e316583cd733c0ec326316e7f29061fe7f6934", - "last_modified": "2025-10-17T18:09:18+00:00", + "last_modified": "2025-10-28T11:55:17+00:00", "token_estimator": "heuristic-v1" }, { @@ -327,7 +327,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-17T18:09:18+00:00", + "last_modified": "2025-10-28T11:55:17+00:00", "token_estimator": "heuristic-v1" }, { @@ -389,7 +389,7 @@ "estimated_token_count_total": 5207 }, "hash": "sha256:91f59a76dd33641ca2b5bf6d58230f65034fa3cc5f8313525fb57e854a878a56", - "last_modified": "2025-10-17T18:09:18+00:00", + "last_modified": "2025-10-28T11:55:17+00:00", "token_estimator": "heuristic-v1" }, { @@ -481,7 +481,7 @@ "estimated_token_count_total": 2132 }, "hash": "sha256:1b9efd2fe00b251d3b4054c9cfcb55f9b5a1384238eeaca81a6f1542fc36d75c", - "last_modified": "2025-10-17T18:09:18+00:00", + "last_modified": "2025-10-28T11:55:17+00:00", "token_estimator": "heuristic-v1" }, { @@ -502,7 +502,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-17T18:09:18+00:00", + "last_modified": "2025-10-28T11:55:17+00:00", "token_estimator": "heuristic-v1" }, { @@ -569,7 +569,7 @@ "estimated_token_count_total": 4063 }, "hash": "sha256:bd07cdae71bf63786994865d2f33fba5f7bf8855dce6399414ad44ab0ec6635c", - "last_modified": "2025-10-17T18:09:18+00:00", + "last_modified": "2025-10-28T11:55:17+00:00", "token_estimator": "heuristic-v1" }, { @@ -626,7 +626,7 @@ "estimated_token_count_total": 2225 }, "hash": "sha256:e916033f54c2874eb5ce9a43d58af058eb935429f73b7b1acc7da1592218e0b8", - "last_modified": "2025-10-17T18:09:18+00:00", + "last_modified": "2025-10-28T11:55:17+00:00", "token_estimator": "heuristic-v1" }, { @@ -674,7 +674,7 @@ "estimated_token_count_total": 1523 }, "hash": "sha256:d9d85827d2c14bff8dd6b3301617345430cf63db603e37859720713004ecafae", - "last_modified": "2025-10-17T18:09:18+00:00", + "last_modified": "2025-10-28T11:55:17+00:00", "token_estimator": "heuristic-v1" }, { @@ -732,7 +732,7 @@ "estimated_token_count_total": 1505 }, "hash": "sha256:2b017d8a89f8734b9cbb501f03612a22657d2f8d4d85c51e490e4c8ca4bf771b", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -790,7 +790,7 @@ "estimated_token_count_total": 1635 }, "hash": "sha256:46252e238b0b51105148dc622da6d8809c55ec11da7ec7b2953c35ca52f5f585", - "last_modified": "2025-10-17T18:09:18+00:00", + "last_modified": "2025-10-28T11:55:18+00:00", "token_estimator": "heuristic-v1" }, { @@ -833,7 +833,7 @@ "estimated_token_count_total": 1491 }, "hash": "sha256:db37b2f5888f283b5eb5bd84a5f8c81fc66b2313e3f94f510a73dfeb310ae3f0", - "last_modified": "2025-10-17T18:09:19+00:00", + "last_modified": "2025-10-28T11:55:19+00:00", "token_estimator": "heuristic-v1" }, { @@ -900,7 +900,7 @@ "estimated_token_count_total": 955 }, "hash": "sha256:72ee7394fd1308c111a8d548cb4dc63c6b9bc5b6e2bb556dd1baacbaedb92286", - "last_modified": "2025-10-17T18:09:19+00:00", + "last_modified": "2025-10-28T11:55:19+00:00", "token_estimator": "heuristic-v1" }, { @@ -952,7 +952,7 @@ "estimated_token_count_total": 876 }, "hash": "sha256:d6cb22337280a19bdf24981dcba98f337d48ee4f79ce7ac040466ef1cb4b330b", - "last_modified": "2025-10-17T18:09:19+00:00", + "last_modified": "2025-10-28T11:55:19+00:00", "token_estimator": "heuristic-v1" }, { @@ -1034,7 +1034,7 @@ "estimated_token_count_total": 2744 }, "hash": "sha256:1a2d34ccab19bd71263763bbc294977acf34f5800398f51398753594cfc7d7a6", - "last_modified": "2025-10-17T18:09:19+00:00", + "last_modified": "2025-10-28T11:55:19+00:00", "token_estimator": "heuristic-v1" }, { @@ -1106,7 +1106,7 @@ "estimated_token_count_total": 608 }, "hash": "sha256:7bba6105d99721373aa6f494627d20af97b1851c19703f26be26c32f0c83524b", - "last_modified": "2025-10-17T18:09:19+00:00", + "last_modified": "2025-10-28T11:55:19+00:00", "token_estimator": "heuristic-v1" }, { @@ -1173,7 +1173,7 @@ "estimated_token_count_total": 558 }, "hash": "sha256:b79fe56c9604712825bdf30d17667fd8f237fce9691be0d8d042d38691dbba7a", - "last_modified": "2025-10-17T18:09:19+00:00", + "last_modified": "2025-10-28T11:55:19+00:00", "token_estimator": "heuristic-v1" }, { @@ -1225,7 +1225,7 @@ "estimated_token_count_total": 348 }, "hash": "sha256:11cd8d428fa9c3e70490da5c63ce4597cd89ec46306d2bb49b016ced6aa68c3d", - "last_modified": "2025-10-17T18:09:19+00:00", + "last_modified": "2025-10-28T11:55:19+00:00", "token_estimator": "heuristic-v1" }, { @@ -1273,7 +1273,7 @@ "estimated_token_count_total": 1365 }, "hash": "sha256:5f8fa89fc725c5c559975012fe2f9ae92c3b62f10024b5688dcd118331118f1a", - "last_modified": "2025-10-17T18:09:19+00:00", + "last_modified": "2025-10-28T11:55:19+00:00", "token_estimator": "heuristic-v1" }, { @@ -1326,7 +1326,7 @@ "estimated_token_count_total": 4979 }, "hash": "sha256:ed3b7c8101b69f9c907cca7c5edfef67fdb5e7bc3c8df8d9fbad297f9dd3c80a", - "last_modified": "2025-10-17T18:09:19+00:00", + "last_modified": "2025-10-28T11:55:19+00:00", "token_estimator": "heuristic-v1" }, { @@ -1383,7 +1383,7 @@ "estimated_token_count_total": 1781 }, "hash": "sha256:35c71a215558cd0642d363e4515ad240093995d42720e6495cd2994c859243e4", - "last_modified": "2025-10-17T18:09:19+00:00", + "last_modified": "2025-10-28T11:55:19+00:00", "token_estimator": "heuristic-v1" }, { @@ -1430,7 +1430,7 @@ "estimated_token_count_total": 1447 }, "hash": "sha256:0e39aee80fbcf3dfaa19133f31d664914ed45b42a1a929270f05d8ae876b89e2", - "last_modified": "2025-10-17T18:09:19+00:00", + "last_modified": "2025-10-28T11:55:19+00:00", "token_estimator": "heuristic-v1" }, { @@ -1477,7 +1477,7 @@ "estimated_token_count_total": 1082 }, "hash": "sha256:ec82957c768c2c07a272e7a28659c812b223df836e21372b1642f0bb249d7b39", - "last_modified": "2025-10-17T18:09:19+00:00", + "last_modified": "2025-10-28T11:55:19+00:00", "token_estimator": "heuristic-v1" }, { @@ -1519,7 +1519,7 @@ "estimated_token_count_total": 4178 }, "hash": "sha256:d480791a76082937b47c77f7cf3794e701f193452ed347fcb1c04c3c67577bf5", - "last_modified": "2025-10-17T18:09:19+00:00", + "last_modified": "2025-10-28T11:55:19+00:00", "token_estimator": "heuristic-v1" }, { @@ -1587,7 +1587,7 @@ "estimated_token_count_total": 6510 }, "hash": "sha256:353ad782303ef79bce1262bfa945e6f11b3c3c9ca1edf5705b778c46bada6200", - "last_modified": "2025-10-17T18:09:21+00:00", + "last_modified": "2025-10-28T11:55:19+00:00", "token_estimator": "heuristic-v1" }, { @@ -1650,7 +1650,7 @@ "estimated_token_count_total": 1520 }, "hash": "sha256:ed09ef7a6abe21204006186fd5791ada7597688fad67e30244dc449c51330309", - "last_modified": "2025-10-17T18:09:21+00:00", + "last_modified": "2025-10-28T11:55:19+00:00", "token_estimator": "heuristic-v1" }, { @@ -1712,7 +1712,7 @@ "estimated_token_count_total": 2598 }, "hash": "sha256:b2b3d8c048863e7760f633b12ab2a0202c741be3050ea4beafb9a7265cfe96b5", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -1769,7 +1769,7 @@ "estimated_token_count_total": 1219 }, "hash": "sha256:262e7a3ad3d0a0102897c52c7589e3f94c7827c441398b3b446b205f6c6753d3", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -1811,7 +1811,7 @@ "estimated_token_count_total": 905 }, "hash": "sha256:ad8e6d9c77d5451c5f4d17f8e6311b21e6ad24eae8780fd4c3ae6013744822cf", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -1878,7 +1878,7 @@ "estimated_token_count_total": 3995 }, "hash": "sha256:19997d390abf2847824024ba923f46a61106ef77544d256d50b371210816b309", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -1946,7 +1946,7 @@ "estimated_token_count_total": 2005 }, "hash": "sha256:0becb82886d34e2ed23d963efd2c14120112e6e080ea4072e864531299b59753", - "last_modified": "2025-10-17T18:09:21+00:00", + "last_modified": "2025-10-28T11:55:19+00:00", "token_estimator": "heuristic-v1" }, { @@ -2013,7 +2013,7 @@ "estimated_token_count_total": 1944 }, "hash": "sha256:4fc8cab40e982e860b64d9aede1058fe7fa82ec321ac215b919db00c4df0a9c0", - "last_modified": "2025-10-17T18:09:21+00:00", + "last_modified": "2025-10-28T11:55:19+00:00", "token_estimator": "heuristic-v1" }, { @@ -2085,7 +2085,7 @@ "estimated_token_count_total": 3068 }, "hash": "sha256:9918593a46c12a1756552ddfaf7421ad6262600735b6f1fec030911420fe1736", - "last_modified": "2025-10-17T18:09:21+00:00", + "last_modified": "2025-10-28T11:55:19+00:00", "token_estimator": "heuristic-v1" }, { @@ -2167,7 +2167,7 @@ "estimated_token_count_total": 3025 }, "hash": "sha256:a60fe36a5ba6d1cafe12eab75300afd24a46d3ace1e791087adb7e3e538afcc3", - "last_modified": "2025-10-17T18:09:21+00:00", + "last_modified": "2025-10-28T11:55:19+00:00", "token_estimator": "heuristic-v1" }, { @@ -2219,7 +2219,7 @@ "estimated_token_count_total": 1289 }, "hash": "sha256:39c58dbe2ddcd542d7074d08d72f1811318dc8a3130419025480fd5cbe9fc3e7", - "last_modified": "2025-10-17T18:09:21+00:00", + "last_modified": "2025-10-28T11:55:19+00:00", "token_estimator": "heuristic-v1" }, { @@ -2271,7 +2271,7 @@ "estimated_token_count_total": 744 }, "hash": "sha256:358ed14147b96b47deb61df9a1ea0e1103a139ea5edb78c5d50a48d5a779b80d", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -2354,7 +2354,7 @@ "estimated_token_count_total": 2709 }, "hash": "sha256:2ee5656f749b4bca445172f2bc66c7fc39af40ff173626662ae4c399f49cf909", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -2412,7 +2412,7 @@ "estimated_token_count_total": 1892 }, "hash": "sha256:74de798c287cae75729e7db54019507f03a361dbbd1f2bb58c4694605f83efab", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -2464,7 +2464,7 @@ "estimated_token_count_total": 4719 }, "hash": "sha256:bfad885d8053d052c55dbffc3c09e6196586795c3a1d07ab6ad58f9006ec3345", - "last_modified": "2025-10-17T18:09:21+00:00", + "last_modified": "2025-10-28T11:55:19+00:00", "token_estimator": "heuristic-v1" }, { @@ -2526,7 +2526,7 @@ "estimated_token_count_total": 1819 }, "hash": "sha256:b0c1535fa8e969a9bdeee426a5a35a42b4649121fb8ce6fd2b15fdeba35b5d5f", - "last_modified": "2025-10-17T18:09:21+00:00", + "last_modified": "2025-10-28T11:55:19+00:00", "token_estimator": "heuristic-v1" }, { @@ -2573,7 +2573,7 @@ "estimated_token_count_total": 1161 }, "hash": "sha256:07e63e1e99b9acf1cc3b5ef8fa1f06ff22182b2a801582ce800eba37d7d39408", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -2645,7 +2645,7 @@ "estimated_token_count_total": 4014 }, "hash": "sha256:55dc252fdecf1590048ce8d009b822e90231442abe81e9593cf1635944a31336", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -2697,7 +2697,7 @@ "estimated_token_count_total": 2030 }, "hash": "sha256:f4964f894f7cd2fdfd699c017b4bd25cffc322b03a5a88a36c682cf952832ccc", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -2764,7 +2764,7 @@ "estimated_token_count_total": 3342 }, "hash": "sha256:9d6daa3f4daf149ae822b60060d14ff022bd4b3440cecdc969a48c105eb82a21", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -2816,7 +2816,7 @@ "estimated_token_count_total": 1572 }, "hash": "sha256:68fc67390e24741081c9a04d78951e76c7d4ff7cf6eddaba7dcbbdc1812c71d3", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -2873,7 +2873,7 @@ "estimated_token_count_total": 1559 }, "hash": "sha256:0024f5e4c12ab7b019e5ee183e7c78d175e1125868c5458b97d3accd9fac75bc", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -2910,7 +2910,7 @@ "estimated_token_count_total": 514 }, "hash": "sha256:e8ffeaa3a17e20437a59f2c95a63821eb75bf3c33001e748c23958b2b99ac3c2", - "last_modified": "2025-10-17T18:09:21+00:00", + "last_modified": "2025-10-28T11:55:19+00:00", "token_estimator": "heuristic-v1" }, { @@ -2947,7 +2947,7 @@ "estimated_token_count_total": 570 }, "hash": "sha256:1247dfb5f5ac040bca81cd1002153e0ee53f4052b2a3d40b623834bd7f00d065", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -3024,7 +3024,7 @@ "estimated_token_count_total": 6228 }, "hash": "sha256:72e41f816f07026d96c803f399c71852aa1151c464e79cec3e1746b282d5eaae", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -3102,7 +3102,7 @@ "estimated_token_count_total": 4188 }, "hash": "sha256:fe008393aa37c27bb71b4483d4e2c4fbcda94f8c1be461fdd07eff40efbb4e26", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -3165,7 +3165,7 @@ "estimated_token_count_total": 1375 }, "hash": "sha256:8e6bfed5fa59bb748e80698ea702f62ce6951c48bdb955ee9ef0d3516e856887", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -3312,7 +3312,7 @@ "estimated_token_count_total": 1618 }, "hash": "sha256:5cc63ff0a377ef0ec96a064748e13b88bc852bd1862c6e344066855a7fe93b19", - "last_modified": "2025-10-17T18:09:21+00:00", + "last_modified": "2025-10-28T11:55:19+00:00", "token_estimator": "heuristic-v1" }, { @@ -3509,7 +3509,7 @@ "estimated_token_count_total": 9750 }, "hash": "sha256:1fb7a20bc4a799a771954720428029419ec73afa640e589590c43dd041a7e307", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -3597,7 +3597,7 @@ "estimated_token_count_total": 4475 }, "hash": "sha256:f0cee7ccb3cd294e8f909a220bb63987239ef8155c187a04f8c4864ffdcde288", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -3690,7 +3690,7 @@ "estimated_token_count_total": 3900 }, "hash": "sha256:a7541553a50a250521c0a280f997d614763c643b1028147f3fb61391950bda15", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -3763,7 +3763,7 @@ "estimated_token_count_total": 3250 }, "hash": "sha256:bc771f912627fa09cad64adab1bc81c052f650d6c5a3b4f0c91883a98f6628da", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -3836,7 +3836,7 @@ "estimated_token_count_total": 3033 }, "hash": "sha256:bc87533eaf42a979a0c17f50ecdc668c364889257c7e0d27b81129770660fd53", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -3889,7 +3889,7 @@ "estimated_token_count_total": 2512 }, "hash": "sha256:5d13a0873a78a9802b06686d7caafbf4d23b6ba1edf7d3518943301f2b0110c4", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -3931,7 +3931,7 @@ "estimated_token_count_total": 2432 }, "hash": "sha256:809d0ff921587f29045df1d31a5a9fe32ee13fa7b9698aa27ff9f60b2aa7a4d8", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -4004,7 +4004,7 @@ "estimated_token_count_total": 1118 }, "hash": "sha256:0468268436ffdb759cad8390a838d5fba2391118baa8fd8cd494b36397b10329", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -4086,7 +4086,7 @@ "estimated_token_count_total": 3847 }, "hash": "sha256:4b705b8dbe9b0ad8d19a897d91f3c64dbc4541297dadacbea2a31b4778e50a46", - "last_modified": "2025-10-17T18:09:24+00:00", + "last_modified": "2025-10-28T11:55:21+00:00", "token_estimator": "heuristic-v1" }, { @@ -4153,7 +4153,7 @@ "estimated_token_count_total": 2317 }, "hash": "sha256:605d2cbb7eabb2ea0fd928bc3ecdf9ee8b095e3dd9643f2b0918fef7b5a3f4a8", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -4206,7 +4206,7 @@ "estimated_token_count_total": 1638 }, "hash": "sha256:807cee6869059dd933905d1cf6c76e3b86e02baee3de3113f7e5b4c8697fbd22", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -4274,7 +4274,7 @@ "estimated_token_count_total": 2300 }, "hash": "sha256:ba24e31e2ad94fbf1d73f1878da92dd2e1476db00170780bbdf0e65ab18bc961", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -4327,7 +4327,7 @@ "estimated_token_count_total": 1987 }, "hash": "sha256:2ca93b09d3bb9159bbf53816886a9b242bb3c13b996c51fd52962e049e2d5477", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -4400,7 +4400,7 @@ "estimated_token_count_total": 1084 }, "hash": "sha256:7f533abe61586af8438e350c41b741d74a8edb839f9dc4139bc4619ba3748258", - "last_modified": "2025-10-17T16:54:00+00:00", + "last_modified": "2025-10-20T08:03:38+00:00", "token_estimator": "heuristic-v1" }, { @@ -4468,7 +4468,7 @@ "estimated_token_count_total": 1166 }, "hash": "sha256:ed3986f30880fefca5975fcdc847c68b4aca65862c63e3002b25391b0521781d", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -4526,7 +4526,7 @@ "estimated_token_count_total": 942 }, "hash": "sha256:8987fc35cd28602054ee018031f773e2e3837425107c51d0e2ac68a94b86e9c0", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -4579,7 +4579,7 @@ "estimated_token_count_total": 1945 }, "hash": "sha256:b8759f61ab57b636228b69d5770c74591998b912cd4596e89eb2ec011da7ef73", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -4652,7 +4652,7 @@ "estimated_token_count_total": 2187 }, "hash": "sha256:56269d9ea47f5b4e92cd7d5a1e65ab06d181a9c380f90bb3ef285529b12299f7", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -4690,7 +4690,7 @@ "estimated_token_count_total": 428 }, "hash": "sha256:cfcc76bb24779c9b613f2c046b6f99a0f2529c25fd82287d804f6b945b936227", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -4723,7 +4723,7 @@ "estimated_token_count_total": 245 }, "hash": "sha256:6d8e01281a5895fd2bc4438b24c170c72a496de0b838626a53e87685aea4aa25", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -4780,7 +4780,7 @@ "estimated_token_count_total": 847 }, "hash": "sha256:a206dd86fc3d80aed22384000839ca0c9c75c69ad461abd9810d96c03cf6a3bd", - "last_modified": "2025-10-17T18:09:24+00:00", + "last_modified": "2025-10-28T11:55:21+00:00", "token_estimator": "heuristic-v1" }, { @@ -4852,7 +4852,7 @@ "estimated_token_count_total": 6280 }, "hash": "sha256:9b03477d13a285fced6bf845c3827084f790a626989dc2c09ef9ff53643045f4", - "last_modified": "2025-10-17T18:09:24+00:00", + "last_modified": "2025-10-28T11:55:21+00:00", "token_estimator": "heuristic-v1" }, { @@ -4890,7 +4890,7 @@ "estimated_token_count_total": 633 }, "hash": "sha256:62c5ad101282227f79eac0e30a3ba9ce3ae1bf9e358bd58c0b17ef45db29c2ff", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -4952,7 +4952,7 @@ "estimated_token_count_total": 5209 }, "hash": "sha256:966ec1bcc014a454f6b837b503025d9fb89c30f6a65d0aaec82ea5ff976e53a9", - "last_modified": "2025-10-17T17:05:21+00:00", + "last_modified": "2025-10-20T08:03:38+00:00", "token_estimator": "heuristic-v1" }, { @@ -5011,7 +5011,7 @@ "estimated_token_count_total": 1700 }, "hash": "sha256:47328231d6ff4dc52cd93aaf1baf5d0bc2d9fc372f3d79339d87aafa0dabd1b8", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -5079,7 +5079,7 @@ "estimated_token_count_total": 2453 }, "hash": "sha256:2c77cfb38bb2e466a8f56dabbb706fcd2e90cf1634fc9beb7f0ee95a75735653", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -5152,7 +5152,7 @@ "estimated_token_count_total": 2614 }, "hash": "sha256:4325cdd697814b8043db808da3dee86d3d9c6fc7dd523aae7fe8914d59d1b39c", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -5209,7 +5209,7 @@ "estimated_token_count_total": 1430 }, "hash": "sha256:1284c42be692167e01bcc44e2e134ec20615402675fac26df246c00aa1588d80", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T08:03:38+00:00", "token_estimator": "heuristic-v1" }, { @@ -5277,7 +5277,7 @@ "estimated_token_count_total": 2018 }, "hash": "sha256:49866761ef638dd0683bb5558f5319b9568ff136295b3359580a6f478172c73f", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -5325,7 +5325,7 @@ "estimated_token_count_total": 999 }, "hash": "sha256:6d6c66430a7302f29113924c5208e64d7c244497e50c61ab2f45c4b5141620e4", - "last_modified": "2025-10-17T18:09:24+00:00", + "last_modified": "2025-10-28T11:55:21+00:00", "token_estimator": "heuristic-v1" }, { @@ -5387,7 +5387,7 @@ "estimated_token_count_total": 1863 }, "hash": "sha256:7086406b31e7aa9089b221ffaa548ee5540a3d147ec1e93136f481c883f2e434", - "last_modified": "2025-10-17T18:09:24+00:00", + "last_modified": "2025-10-28T11:55:21+00:00", "token_estimator": "heuristic-v1" }, { @@ -5474,7 +5474,7 @@ "estimated_token_count_total": 1870 }, "hash": "sha256:3b766e00e55a224201bc6744386a6dabc7da54ed9199b16abab3b94cff449eca", - "last_modified": "2025-10-17T18:09:24+00:00", + "last_modified": "2025-10-28T11:55:21+00:00", "token_estimator": "heuristic-v1" }, { @@ -5567,7 +5567,7 @@ "estimated_token_count_total": 9871 }, "hash": "sha256:0d7e04fd952cc9d5bd8cdbfd87cc4004c5f95e896a16bc7f89dfc4caeac8f371", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -5630,7 +5630,7 @@ "estimated_token_count_total": 2661 }, "hash": "sha256:04e85c4cddb58252f8253d78a3924bb56952dac2a3e9a057704a91a0d1f21d75", - "last_modified": "2025-10-17T18:09:24+00:00", + "last_modified": "2025-10-28T11:55:21+00:00", "token_estimator": "heuristic-v1" }, { @@ -5662,7 +5662,7 @@ "estimated_token_count_total": 2073 }, "hash": "sha256:9836ab7da420e9ca8196da77dc3ff8198cb3b622548842d0505c0aa043a5f02e", - "last_modified": "2025-10-17T18:09:24+00:00", + "last_modified": "2025-10-28T11:55:21+00:00", "token_estimator": "heuristic-v1" }, { @@ -5734,7 +5734,7 @@ "estimated_token_count_total": 579 }, "hash": "sha256:4c33d0ec5026128b3bfdb1dfc1f4b29487404eaa8043071d536e8638356c6e1f", - "last_modified": "2025-10-17T18:09:24+00:00", + "last_modified": "2025-10-28T11:55:21+00:00", "token_estimator": "heuristic-v1" }, { @@ -5776,7 +5776,7 @@ "estimated_token_count_total": 557 }, "hash": "sha256:993e93b05c8fbdfc2f7510c61ac86bc4c2ff0f03e573695b2f260933c8b62f78", - "last_modified": "2025-10-17T18:09:24+00:00", + "last_modified": "2025-10-28T11:55:21+00:00", "token_estimator": "heuristic-v1" }, { @@ -5843,7 +5843,7 @@ "estimated_token_count_total": 1044 }, "hash": "sha256:d84a5af1a0237a911d25a68c077f508ebbce608f673ef4f9055e8e434daa96b9", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -5910,7 +5910,7 @@ "estimated_token_count_total": 4229 }, "hash": "sha256:abd9f939f68b068a18567b875c9f7e11d102c54fc02ca0e6ee8041c539061ed0", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -5967,7 +5967,7 @@ "estimated_token_count_total": 1286 }, "hash": "sha256:0b43b452e9d709cb324bf51fd88c2fed8e6249534a7c2b852e1bd36bcb9b981a", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -6029,7 +6029,7 @@ "estimated_token_count_total": 1827 }, "hash": "sha256:1090b02689df5f4c59bb83f9c81436718d06e46f3b615bc655fef3c7b6c9fb02", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -6111,7 +6111,7 @@ "estimated_token_count_total": 2559 }, "hash": "sha256:0857a9e83aefc6d3f04e8cb320ab82d35211bbd73d2eb2614cf7b97f8e6d36b9", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -6198,7 +6198,7 @@ "estimated_token_count_total": 3827 }, "hash": "sha256:e2567b7d5377c87984622cf93afe4bd8cedf46b80597736cf53f26b5f31c5065", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -6245,7 +6245,7 @@ "estimated_token_count_total": 625 }, "hash": "sha256:9ab570299106336e5d75923b876247e8eb4a71851a77e84d68e0335e9da5e0a8", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -6357,7 +6357,7 @@ "estimated_token_count_total": 5832 }, "hash": "sha256:a7b5239c3be0341ced8f28146e240ff6061fded2e71094bd586beeb024684a50", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -6409,7 +6409,7 @@ "estimated_token_count_total": 861 }, "hash": "sha256:97655248c65e816fdf3d85dab4ace7ca0c145c50f671c25c24627cfd7660c7a6", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -6466,7 +6466,7 @@ "estimated_token_count_total": 1167 }, "hash": "sha256:b2e8abce15fc9df106a5e972f28c64f606f9dd50ba3a256093eb53bdd5126224", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -6513,7 +6513,7 @@ "estimated_token_count_total": 1477 }, "hash": "sha256:76500d1d63f4205a84f0bc5b7f9aec945781127d41c32927280ac74bc14f0296", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -6580,7 +6580,7 @@ "estimated_token_count_total": 3409 }, "hash": "sha256:abe6bedab04f463ec07f554977b8d6355a5d2fad9bcda01cbe58568152295daa", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -6632,7 +6632,7 @@ "estimated_token_count_total": 2617 }, "hash": "sha256:7d43408276d811c96b7b081a7b9f4d884893282a230b564c9eb3be2fc7857565", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -6699,7 +6699,7 @@ "estimated_token_count_total": 1044 }, "hash": "sha256:d84a5af1a0237a911d25a68c077f508ebbce608f673ef4f9055e8e434daa96b9", - "last_modified": "2025-10-17T18:09:24+00:00", + "last_modified": "2025-10-28T11:55:21+00:00", "token_estimator": "heuristic-v1" }, { @@ -6766,7 +6766,7 @@ "estimated_token_count_total": 4197 }, "hash": "sha256:b83e3f77bd30ac8c8fb00a193bbec33cd641d94f1a37ac611dea32326c3d77b0", - "last_modified": "2025-10-17T18:09:24+00:00", + "last_modified": "2025-10-28T11:55:21+00:00", "token_estimator": "heuristic-v1" }, { @@ -6823,7 +6823,7 @@ "estimated_token_count_total": 1280 }, "hash": "sha256:992082e4ad87348b283f6c37ea886ae0e7bf016852b6470000876f3d169c65a4", - "last_modified": "2025-10-17T18:09:24+00:00", + "last_modified": "2025-10-28T11:55:21+00:00", "token_estimator": "heuristic-v1" }, { @@ -6885,7 +6885,7 @@ "estimated_token_count_total": 1840 }, "hash": "sha256:0fb5a83835aab263c0b9aa886028c8aa8a2d6d0897d7b9fff4b5258835d30dfe", - "last_modified": "2025-10-17T18:09:24+00:00", + "last_modified": "2025-10-28T11:55:21+00:00", "token_estimator": "heuristic-v1" }, { @@ -6967,7 +6967,7 @@ "estimated_token_count_total": 2592 }, "hash": "sha256:d2c1c91734bc8185057d8eeec6829ea91e0316f7ba884c5dc3922a5e5778815e", - "last_modified": "2025-10-17T18:09:24+00:00", + "last_modified": "2025-10-28T11:55:21+00:00", "token_estimator": "heuristic-v1" }, { @@ -7054,7 +7054,7 @@ "estimated_token_count_total": 3864 }, "hash": "sha256:a4235e8d590033d5d54434143e0a5e23603c53ae70d4f0a9ebfe4ca9442baa8d", - "last_modified": "2025-10-17T18:09:24+00:00", + "last_modified": "2025-10-28T11:55:21+00:00", "token_estimator": "heuristic-v1" }, { @@ -7101,7 +7101,7 @@ "estimated_token_count_total": 629 }, "hash": "sha256:0d6db361bfa7a3022849bbe39989bfdac0429537498d7f534adadec131afca98", - "last_modified": "2025-10-17T18:09:24+00:00", + "last_modified": "2025-10-28T11:55:21+00:00", "token_estimator": "heuristic-v1" }, { @@ -7213,7 +7213,7 @@ "estimated_token_count_total": 5866 }, "hash": "sha256:81eb0fe77f05155f1ec0511cd066120fc9994961e9d91e21b6666377e65b4586", - "last_modified": "2025-10-17T18:09:24+00:00", + "last_modified": "2025-10-28T11:55:21+00:00", "token_estimator": "heuristic-v1" }, { @@ -7265,7 +7265,7 @@ "estimated_token_count_total": 861 }, "hash": "sha256:1af153570ce57bd5b52d08493a300996765686f2a6d04519a2e0aa91191612c1", - "last_modified": "2025-10-17T18:09:24+00:00", + "last_modified": "2025-10-28T11:55:21+00:00", "token_estimator": "heuristic-v1" }, { @@ -7322,7 +7322,7 @@ "estimated_token_count_total": 1185 }, "hash": "sha256:888230b128d8c648c4f06a18d3b1d1b06dd1bf22a0de4add1f28210ffccb2549", - "last_modified": "2025-10-17T18:09:24+00:00", + "last_modified": "2025-10-28T11:55:21+00:00", "token_estimator": "heuristic-v1" }, { @@ -7369,7 +7369,7 @@ "estimated_token_count_total": 1485 }, "hash": "sha256:46435b97c37ef6798d2c75c69df31c5e5f07e04b218c370ec5af6b1838d43aac", - "last_modified": "2025-10-17T18:09:24+00:00", + "last_modified": "2025-10-28T11:55:21+00:00", "token_estimator": "heuristic-v1" }, { @@ -7436,7 +7436,7 @@ "estimated_token_count_total": 3409 }, "hash": "sha256:abe6bedab04f463ec07f554977b8d6355a5d2fad9bcda01cbe58568152295daa", - "last_modified": "2025-10-17T18:09:24+00:00", + "last_modified": "2025-10-28T11:55:21+00:00", "token_estimator": "heuristic-v1" }, { @@ -7488,7 +7488,7 @@ "estimated_token_count_total": 2588 }, "hash": "sha256:d5d6d72eb2cf10f624d84c65f2274f7df90acb5d071bf170bc8eae8d98a810a5", - "last_modified": "2025-10-17T18:09:24+00:00", + "last_modified": "2025-10-28T11:55:21+00:00", "token_estimator": "heuristic-v1" }, { @@ -7550,7 +7550,7 @@ "estimated_token_count_total": 2598 }, "hash": "sha256:867727c125c6584645e9832d2cad64762d75e5b9e4a497bd8bbba25c470c67d9", - "last_modified": "2025-10-17T18:09:24+00:00", + "last_modified": "2025-10-28T11:55:21+00:00", "token_estimator": "heuristic-v1" }, { @@ -7607,7 +7607,7 @@ "estimated_token_count_total": 1221 }, "hash": "sha256:b1f5561be570e34e47509f6bbe04e4f58def3b7c40c870a2309e3f6ce2c39d56", - "last_modified": "2025-10-17T18:09:24+00:00", + "last_modified": "2025-10-28T11:55:21+00:00", "token_estimator": "heuristic-v1" }, { @@ -7649,7 +7649,7 @@ "estimated_token_count_total": 901 }, "hash": "sha256:f56a32d5323c371f084833b4e647f21e1d76ad242d8c4e4826bcaed467acc7cf", - "last_modified": "2025-10-17T18:09:24+00:00", + "last_modified": "2025-10-28T11:55:21+00:00", "token_estimator": "heuristic-v1" }, { @@ -7702,7 +7702,7 @@ "estimated_token_count_total": 3091 }, "hash": "sha256:51cb6bb7ed2b81022ba09a02644272fd0c120032ff543d789bb4c482a79bdd94", - "last_modified": "2025-10-17T18:09:26+00:00", + "last_modified": "2025-10-28T11:55:22+00:00", "token_estimator": "heuristic-v1" }, { @@ -7769,7 +7769,7 @@ "estimated_token_count_total": 3338 }, "hash": "sha256:915bc91edd56cdedd516e871dbe450d70c9f99fb467cc00ff231ea3a74f61d96", - "last_modified": "2025-10-17T18:09:26+00:00", + "last_modified": "2025-10-28T11:55:22+00:00", "token_estimator": "heuristic-v1" }, { @@ -7836,7 +7836,7 @@ "estimated_token_count_total": 3997 }, "hash": "sha256:1d324a805f33a41ae1e5c3998f2979c74217ce433a29ff48969f1ea9882cdeaa", - "last_modified": "2025-10-17T18:09:26+00:00", + "last_modified": "2025-10-28T11:55:22+00:00", "token_estimator": "heuristic-v1" }, { @@ -7888,7 +7888,7 @@ "estimated_token_count_total": 1576 }, "hash": "sha256:733652ec4eff9b11efd858a7fd7f1094e7a2e8e7deed4c60c5805f986d877df4", - "last_modified": "2025-10-17T18:09:26+00:00", + "last_modified": "2025-10-28T11:55:22+00:00", "token_estimator": "heuristic-v1" }, { @@ -7945,7 +7945,7 @@ "estimated_token_count_total": 1563 }, "hash": "sha256:8568dfa238b9a649a4e6e60510625c2e7879b76a93187b0b8b8dccf6bc467ae6", - "last_modified": "2025-10-17T18:09:26+00:00", + "last_modified": "2025-10-28T11:55:22+00:00", "token_estimator": "heuristic-v1" }, { @@ -8013,7 +8013,7 @@ "estimated_token_count_total": 2578 }, "hash": "sha256:fc6893084d60c2721bdda99d9aa65805f79d78507df3738a95b277bbb386e552", - "last_modified": "2025-10-17T18:09:26+00:00", + "last_modified": "2025-10-28T11:55:22+00:00", "token_estimator": "heuristic-v1" }, { @@ -8096,7 +8096,7 @@ "estimated_token_count_total": 2709 }, "hash": "sha256:2ee5656f749b4bca445172f2bc66c7fc39af40ff173626662ae4c399f49cf909", - "last_modified": "2025-10-17T18:09:26+00:00", + "last_modified": "2025-10-28T11:55:22+00:00", "token_estimator": "heuristic-v1" }, { @@ -8134,7 +8134,7 @@ "estimated_token_count_total": 428 }, "hash": "sha256:cfcc76bb24779c9b613f2c046b6f99a0f2529c25fd82287d804f6b945b936227", - "last_modified": "2025-10-17T18:09:26+00:00", + "last_modified": "2025-10-28T11:55:22+00:00", "token_estimator": "heuristic-v1" }, { @@ -8167,7 +8167,7 @@ "estimated_token_count_total": 245 }, "hash": "sha256:6d8e01281a5895fd2bc4438b24c170c72a496de0b838626a53e87685aea4aa25", - "last_modified": "2025-10-17T18:09:26+00:00", + "last_modified": "2025-10-28T11:55:22+00:00", "token_estimator": "heuristic-v1" }, { @@ -8205,7 +8205,7 @@ "estimated_token_count_total": 633 }, "hash": "sha256:62c5ad101282227f79eac0e30a3ba9ce3ae1bf9e358bd58c0b17ef45db29c2ff", - "last_modified": "2025-10-17T18:09:26+00:00", + "last_modified": "2025-10-28T11:55:22+00:00", "token_estimator": "heuristic-v1" }, { @@ -8277,7 +8277,7 @@ "estimated_token_count_total": 2285 }, "hash": "sha256:b8de1228b9976765accd18ff724038bed6f2449367f500bc3177ab2a053abe63", - "last_modified": "2025-10-17T18:09:26+00:00", + "last_modified": "2025-10-28T11:55:22+00:00", "token_estimator": "heuristic-v1" }, { @@ -8329,7 +8329,7 @@ "estimated_token_count_total": 1427 }, "hash": "sha256:b501d99c464fb049d46676827b6a325a195c90617becc4a7db305441c115350a", - "last_modified": "2025-10-17T18:09:26+00:00", + "last_modified": "2025-10-28T11:55:22+00:00", "token_estimator": "heuristic-v1" }, { @@ -8387,7 +8387,7 @@ "estimated_token_count_total": 1501 }, "hash": "sha256:3b26606dd5310c4b8ade5d05270ebf1e06f59afcda4ca2b985e07948215a197e", - "last_modified": "2025-10-17T18:09:26+00:00", + "last_modified": "2025-10-28T11:55:22+00:00", "token_estimator": "heuristic-v1" }, { @@ -8408,7 +8408,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-17T18:09:26+00:00", + "last_modified": "2025-10-28T11:55:22+00:00", "token_estimator": "heuristic-v1" }, { @@ -8429,7 +8429,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-17T18:09:26+00:00", + "last_modified": "2025-10-28T11:55:22+00:00", "token_estimator": "heuristic-v1" }, { @@ -8481,7 +8481,7 @@ "estimated_token_count_total": 744 }, "hash": "sha256:358ed14147b96b47deb61df9a1ea0e1103a139ea5edb78c5d50a48d5a779b80d", - "last_modified": "2025-10-17T18:09:26+00:00", + "last_modified": "2025-10-28T11:55:22+00:00", "token_estimator": "heuristic-v1" }, { @@ -8534,7 +8534,7 @@ "estimated_token_count_total": 1751 }, "hash": "sha256:bbef601f2645c23200a3b16bc1b8e5bcad2aafdee6d60ae860ce8b5a53122c14", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T08:03:38+00:00", "token_estimator": "heuristic-v1" }, { @@ -8581,7 +8581,7 @@ "estimated_token_count_total": 1161 }, "hash": "sha256:ec31270001a6cd9d0a8ecb7974ad161d5c1ef4d3023d5a6af9fbc5a6ca46cbca", - "last_modified": "2025-10-17T18:09:26+00:00", + "last_modified": "2025-10-28T11:55:22+00:00", "token_estimator": "heuristic-v1" }, { @@ -8653,7 +8653,7 @@ "estimated_token_count_total": 4014 }, "hash": "sha256:55dc252fdecf1590048ce8d009b822e90231442abe81e9593cf1635944a31336", - "last_modified": "2025-10-17T18:09:27+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -8705,7 +8705,7 @@ "estimated_token_count_total": 2028 }, "hash": "sha256:e408d05199cc184fc6fe8bb212efb3c9aa6cb79258977e07566692176c912def", - "last_modified": "2025-10-17T18:09:27+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -8778,7 +8778,7 @@ "estimated_token_count_total": 2614 }, "hash": "sha256:4325cdd697814b8043db808da3dee86d3d9c6fc7dd523aae7fe8914d59d1b39c", - "last_modified": "2025-10-17T18:09:27+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -8871,7 +8871,7 @@ "estimated_token_count_total": 9871 }, "hash": "sha256:0d7e04fd952cc9d5bd8cdbfd87cc4004c5f95e896a16bc7f89dfc4caeac8f371", - "last_modified": "2025-10-17T18:09:27+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -8919,7 +8919,7 @@ "estimated_token_count_total": 1125 }, "hash": "sha256:9875239c6071033a37a0f67fabca5a6e840c4a287620309f47b4f29c5a95a1cb", - "last_modified": "2025-10-17T18:09:27+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -8983,7 +8983,7 @@ "estimated_token_count_total": 1861 }, "hash": "sha256:932c12e1af939698279ede2eacb2190e1f56119582adf2064d6cf86f7a4f3e3c", - "last_modified": "2025-10-17T18:09:27+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -9030,7 +9030,7 @@ "estimated_token_count_total": 619 }, "hash": "sha256:00be43ac8d666bbe15c5c2fa5a5085697d0bb5a6f341ebbb943a209f0be355df", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -9092,7 +9092,7 @@ "estimated_token_count_total": 1440 }, "hash": "sha256:2d228c52844df8952520fafdd3e6f0e26bfd2f32b5ee60c6241cf7d38603643c", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -9171,7 +9171,7 @@ "estimated_token_count_total": 2591 }, "hash": "sha256:201e7efa0ad6b24890dd06f69714e19d9700ab7f7a51a33fe6d6e0664b7170b2", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T08:03:38+00:00", "token_estimator": "heuristic-v1" }, { @@ -9258,7 +9258,7 @@ "estimated_token_count_total": 2534 }, "hash": "sha256:191df9b098e17e9de4597c9f8ced8abbafdfabc7e0f5c0a94d767fc2c9d7742b", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -9390,7 +9390,7 @@ "estimated_token_count_total": 4105 }, "hash": "sha256:759ab6dea0ad03c3f627558ea186d9f32351fa559acde82931684efc2da59d46", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -9442,7 +9442,7 @@ "estimated_token_count_total": 1218 }, "hash": "sha256:26c156146ef9743fc26c6499294ff14186f97edbc2a34f445d3366b72f7148ae", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -9474,7 +9474,7 @@ "estimated_token_count_total": 424 }, "hash": "sha256:59ec351fbb8d3a392e90f4f5bf6b62f58b21d6d7a900c5e367e5d2e09ecb3aca", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -9516,7 +9516,7 @@ "estimated_token_count_total": 1230 }, "hash": "sha256:8d186fa56ccbbf4b6c85cffc5521b9a99a20e9517f3b4a435730745803cbf2e8", - "last_modified": "2025-10-17T18:09:27+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -9584,7 +9584,7 @@ "estimated_token_count_total": 1643 }, "hash": "sha256:100377787627052a29bd1173270b5ad307639b828c331e71c85d4c00bc5692d8", - "last_modified": "2025-10-17T18:09:27+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -9646,7 +9646,7 @@ "estimated_token_count_total": 876 }, "hash": "sha256:8239d1e8d8642cb7c10e9e5f971c99b999e9e4a87373b50bf4a691225c1e4702", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -9983,7 +9983,7 @@ "estimated_token_count_total": 5271 }, "hash": "sha256:f0e04286eacf23b182186f23e9854c0cd251545b8a8d561d2503f962dbfe32c0", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -10025,7 +10025,7 @@ "estimated_token_count_total": 631 }, "hash": "sha256:baba9dd41091b792d09005d55d3df0bf65b35f42b40ebe63caf425a0978a22b0", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -10093,7 +10093,7 @@ "estimated_token_count_total": 1611 }, "hash": "sha256:62beec261e72529f70e07a641177d489d2c8872f9c9d618cbadf1ac0fd881986", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -10191,7 +10191,7 @@ "estimated_token_count_total": 6521 }, "hash": "sha256:1f9ce923b3ce296571fe63837c0d3c3c791a339ef02db09ead6b2b92e9d1bfd5", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -10254,7 +10254,7 @@ "estimated_token_count_total": 1399 }, "hash": "sha256:bcad23a74d962cab72b54cdc090bf9ee0cd5ecf79f70fb642f154668c2743983", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -10352,7 +10352,7 @@ "estimated_token_count_total": 4464 }, "hash": "sha256:299597c39d0e4e4902be8e45b354fff78a862aa5799e4f16d16787a97a1e3da8", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -10485,7 +10485,7 @@ "estimated_token_count_total": 4705 }, "hash": "sha256:6675634d4c5f274a7cc69802ee0a2d259e38efd5afd1c9dacc2d0fecfb370e4c", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T08:03:38+00:00", "token_estimator": "heuristic-v1" }, { @@ -10583,7 +10583,7 @@ "estimated_token_count_total": 3782 }, "hash": "sha256:eb4da21d561e9fd9333d97805318f0e263f54570120d3852ce7eba64da604cc2", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -10666,7 +10666,7 @@ "estimated_token_count_total": 1797 }, "hash": "sha256:259dcef86aadc513675258b665cc3940db65af6eb32a5db85da6ac339966fa60", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -10739,7 +10739,7 @@ "estimated_token_count_total": 3213 }, "hash": "sha256:e448294b6e52291ac0add5fa6533572814e6cd27af42bdaccc2000b86f52d775", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -10797,7 +10797,7 @@ "estimated_token_count_total": 780 }, "hash": "sha256:077e7e5bfc9509cf09f455959a5da7a74b7af69836b3c4b334692f32e306ddf1", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -10871,7 +10871,7 @@ "estimated_token_count_total": 1473 }, "hash": "sha256:695c624a1d7a3ed6fea0f4f5c19bb2100be986cec29ba58edb4598b9e9b98494", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -10944,7 +10944,7 @@ "estimated_token_count_total": 914 }, "hash": "sha256:8122e21c149d0863cfe3b37fc5606bcdb91668e9d265f0f05451a61ff70e4e93", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -10997,7 +10997,7 @@ "estimated_token_count_total": 1394 }, "hash": "sha256:217a79109aff1607594a0238fd91bfa812827620887c4f063c7e0a7a37f967d6", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -11065,7 +11065,7 @@ "estimated_token_count_total": 1822 }, "hash": "sha256:db2b1806153242680043ced536f64fc8a2ed3c09adc1bec5aa287168b48e0994", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -11128,7 +11128,7 @@ "estimated_token_count_total": 1178 }, "hash": "sha256:9a6b3fa6c005d75c25f0f683b7d8c3b65891454743b794c12b005f910b81609c", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -11241,7 +11241,7 @@ "estimated_token_count_total": 5305 }, "hash": "sha256:fe651be49fe0a9ae899b2cbf9c663325f407718dc63f1d2c6a2dc4931be751fa", - "last_modified": "2025-10-17T18:09:27+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -11309,7 +11309,7 @@ "estimated_token_count_total": 891 }, "hash": "sha256:b5acdc9acf0e44836b8a4518155eba7d16cc3b103c557a00970ffb1c44c3e9f6", - "last_modified": "2025-10-17T18:09:27+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -11362,7 +11362,7 @@ "estimated_token_count_total": 2570 }, "hash": "sha256:e2cf14bcb483308f73a80c8e8871ce1a86fa694576d2e6e51beafc24488f4d58", - "last_modified": "2025-10-17T18:09:27+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -11415,7 +11415,7 @@ "estimated_token_count_total": 994 }, "hash": "sha256:6992c9a2d1b315b64d9782880105cf2d436750249a84577aceb95cc213863009", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -11752,7 +11752,7 @@ "estimated_token_count_total": 5273 }, "hash": "sha256:40bd67811e7eabc79ca5d105eae388b19380d9f035022da17fc0d6bb173c817c", - "last_modified": "2025-10-17T18:09:27+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -11794,7 +11794,7 @@ "estimated_token_count_total": 631 }, "hash": "sha256:baba9dd41091b792d09005d55d3df0bf65b35f42b40ebe63caf425a0978a22b0", - "last_modified": "2025-10-17T18:09:27+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -11892,7 +11892,7 @@ "estimated_token_count_total": 6507 }, "hash": "sha256:0104a9132a69345a2faac37fca0e2853a2ded1efb009511a83a98d44509ab887", - "last_modified": "2025-10-17T18:09:27+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -11955,7 +11955,7 @@ "estimated_token_count_total": 1395 }, "hash": "sha256:424783c102bea5dae5b8749635858c6c59055563442a98f57521f0027dafa8d3", - "last_modified": "2025-10-17T18:09:27+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -12053,7 +12053,7 @@ "estimated_token_count_total": 4464 }, "hash": "sha256:7d0c3fa7982b3e1843adb8f27422456397580b3a3eba5047b381da8517742536", - "last_modified": "2025-10-17T18:09:27+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -12186,7 +12186,7 @@ "estimated_token_count_total": 4699 }, "hash": "sha256:547f062b248779f0b3e823778120c4f32e449937b6f270ddf97378bc6d795c62", - "last_modified": "2025-10-17T18:09:27+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -12284,7 +12284,7 @@ "estimated_token_count_total": 3774 }, "hash": "sha256:49238d1e9e2c33e0fcd3a84b5e30f0d3840d7d23a783b538875e0a23f38efc1d", - "last_modified": "2025-10-17T18:09:27+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -12305,7 +12305,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-17T18:09:27+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -12367,7 +12367,7 @@ "estimated_token_count_total": 1440 }, "hash": "sha256:2d228c52844df8952520fafdd3e6f0e26bfd2f32b5ee60c6241cf7d38603643c", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -12450,7 +12450,7 @@ "estimated_token_count_total": 1797 }, "hash": "sha256:259dcef86aadc513675258b665cc3940db65af6eb32a5db85da6ac339966fa60", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -12523,7 +12523,7 @@ "estimated_token_count_total": 3213 }, "hash": "sha256:e448294b6e52291ac0add5fa6533572814e6cd27af42bdaccc2000b86f52d775", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -12581,7 +12581,7 @@ "estimated_token_count_total": 772 }, "hash": "sha256:11bb4f113bdda5852a3115e64d5ba47f8eccd4e3619a05ad960ab3a541f31346", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -12655,7 +12655,7 @@ "estimated_token_count_total": 1473 }, "hash": "sha256:e49e063a2cc0fb5a48c6cdc3de266bb6e025a006940fea8e90cc4d5f9884900f", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -12728,7 +12728,7 @@ "estimated_token_count_total": 914 }, "hash": "sha256:8122e21c149d0863cfe3b37fc5606bcdb91668e9d265f0f05451a61ff70e4e93", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -12781,7 +12781,7 @@ "estimated_token_count_total": 1388 }, "hash": "sha256:c7d8a5a4263fd21af458ab0bd102377104affdf2431b4fe74eeff4ebe62a4a81", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -12913,7 +12913,109 @@ "estimated_token_count_total": 4087 }, "hash": "sha256:73c34bb1dc80d04f765812c3ed2f247aeda6ce55598b0680d0bd157f25456b99", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-20T08:03:38+00:00", + "token_estimator": "heuristic-v1" + }, + { + "id": "reference-polkadot-hub-assets", + "title": "Polkadot Hub Assets", + "slug": "reference-polkadot-hub-assets", + "categories": [ + "Polkadot Protocol" + ], + "raw_md_url": "https://raw.githubusercontent.com/polkadot-developers/polkadot-docs/master/.ai/pages/reference-polkadot-hub-assets.md", + "html_url": "https://docs.polkadot.com/reference/polkadot-hub/assets/", + "preview": "Polkadot Hub is Polkadot's system parachain for issuing and managing on-chain assets. While the Relay Chain provides security, Polkadot Hub handles asset logic—minting, burning, transfers, and metadata—in a cost-efficient environment.", + "outline": [ + { + "depth": 2, + "title": "Asset Management", + "anchor": "asset-management" + }, + { + "depth": 2, + "title": "Introduction", + "anchor": "introduction" + }, + { + "depth": 2, + "title": "Asset Basics", + "anchor": "asset-basics" + }, + { + "depth": 3, + "title": "Why use Polkadot Hub?", + "anchor": "why-use-polkadot-hub" + }, + { + "depth": 3, + "title": "Asset structure", + "anchor": "asset-structure" + }, + { + "depth": 2, + "title": "Assets Pallet", + "anchor": "assets-pallet" + }, + { + "depth": 3, + "title": "Key Features", + "anchor": "key-features" + }, + { + "depth": 3, + "title": "Querying Functions", + "anchor": "querying-functions" + }, + { + "depth": 3, + "title": "Permission Models and Roles", + "anchor": "permission-models-and-roles" + }, + { + "depth": 3, + "title": "Asset Freezing", + "anchor": "asset-freezing" + }, + { + "depth": 2, + "title": "Non-Custodial Transfers (Approval API)", + "anchor": "non-custodial-transfers-approval-api" + }, + { + "depth": 2, + "title": "Foreign Assets", + "anchor": "foreign-assets" + }, + { + "depth": 3, + "title": "Handling Foreign Assets", + "anchor": "handling-foreign-assets" + }, + { + "depth": 2, + "title": "Assets & XCM", + "anchor": "assets-xcm" + }, + { + "depth": 3, + "title": "Monitoring Successful Transfers", + "anchor": "monitoring-successful-transfers" + }, + { + "depth": 2, + "title": "Tracing Transfer Origins", + "anchor": "tracing-transfer-origins" + } + ], + "stats": { + "chars": 8645, + "words": 1248, + "headings": 16, + "estimated_token_count_total": 1794 + }, + "hash": "sha256:147778df01adfe21adde690bf200822777cd737fe327a7877fe244b84dc4076c", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -12965,7 +13067,7 @@ "estimated_token_count_total": 1220 }, "hash": "sha256:86734ba8bcdea7913f488edf666a6104bed0a18649d57abde82c149c41c2b871", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -12997,7 +13099,7 @@ "estimated_token_count_total": 424 }, "hash": "sha256:59ec351fbb8d3a392e90f4f5bf6b62f58b21d6d7a900c5e367e5d2e09ecb3aca", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -13044,7 +13146,7 @@ "estimated_token_count_total": 619 }, "hash": "sha256:00be43ac8d666bbe15c5c2fa5a5085697d0bb5a6f341ebbb943a209f0be355df", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -13131,7 +13233,7 @@ "estimated_token_count_total": 2526 }, "hash": "sha256:231fc555eefe5f910fb36e0c03945147d0fb235272850797391751f4444b0a9c", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -13210,7 +13312,7 @@ "estimated_token_count_total": 2571 }, "hash": "sha256:8a914e4309d4fe7070e62d7abe4665b6c76c8dc5ec3219332eccb16b77b0dd95", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -13272,7 +13374,49 @@ "estimated_token_count_total": 876 }, "hash": "sha256:8239d1e8d8642cb7c10e9e5f971c99b999e9e4a87373b50bf4a691225c1e4702", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", + "token_estimator": "heuristic-v1" + }, + { + "id": "reference-polkadot-hub-smart-contracts", + "title": "Polkadot Hub Smart Contracts", + "slug": "reference-polkadot-hub-smart-contracts", + "categories": [ + "Polkadot Protocol" + ], + "raw_md_url": "https://raw.githubusercontent.com/polkadot-developers/polkadot-docs/master/.ai/pages/reference-polkadot-hub-smart-contracts.md", + "html_url": "https://docs.polkadot.com/reference/polkadot-hub/smart-contracts/", + "preview": "!!! smartcontract \"PolkaVM Preview Release\" PolkaVM smart contracts with Ethereum compatibility are in **early-stage development and may be unstable or incomplete**. ## Introduction", + "outline": [ + { + "depth": 2, + "title": "Introduction", + "anchor": "introduction" + }, + { + "depth": 2, + "title": "Building a Smart Contract", + "anchor": "building-a-smart-contract" + }, + { + "depth": 3, + "title": "PolkaVM Contracts", + "anchor": "polkavm-contracts" + }, + { + "depth": 3, + "title": "REVM Contracts", + "anchor": "revm-contracts" + } + ], + "stats": { + "chars": 4272, + "words": 600, + "headings": 4, + "estimated_token_count_total": 828 + }, + "hash": "sha256:c1d35e7f7f38b81fbaa9db1c0f815386dc38ace929a20717d218e4c027d40a6a", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -13293,7 +13437,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -13361,7 +13505,7 @@ "estimated_token_count_total": 2300 }, "hash": "sha256:ba24e31e2ad94fbf1d73f1878da92dd2e1476db00170780bbdf0e65ab18bc961", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -13419,7 +13563,7 @@ "estimated_token_count_total": 1430 }, "hash": "sha256:1284c42be692167e01bcc44e2e134ec20615402675fac26df246c00aa1588d80", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -13487,7 +13631,7 @@ "estimated_token_count_total": 2453 }, "hash": "sha256:2c77cfb38bb2e466a8f56dabbb706fcd2e90cf1634fc9beb7f0ee95a75735653", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -13555,7 +13699,7 @@ "estimated_token_count_total": 2018 }, "hash": "sha256:a87815deff81936d7f50842f8600004990076c1a33e7e6b408ab954b6ce47259", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -13608,7 +13752,7 @@ "estimated_token_count_total": 1987 }, "hash": "sha256:2ca93b09d3bb9159bbf53816886a9b242bb3c13b996c51fd52962e049e2d5477", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -13640,7 +13784,7 @@ "estimated_token_count_total": 669 }, "hash": "sha256:a7f9c4a03153ee637a0557d2cea0b622c849667ce793b1294bb3299cf036197d", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -13713,7 +13857,7 @@ "estimated_token_count_total": 1084 }, "hash": "sha256:7f533abe61586af8438e350c41b741d74a8edb839f9dc4139bc4619ba3748258", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -13781,7 +13925,7 @@ "estimated_token_count_total": 1166 }, "hash": "sha256:ed3986f30880fefca5975fcdc847c68b4aca65862c63e3002b25391b0521781d", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -13839,7 +13983,7 @@ "estimated_token_count_total": 942 }, "hash": "sha256:8987fc35cd28602054ee018031f773e2e3837425107c51d0e2ac68a94b86e9c0", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -13892,7 +14036,7 @@ "estimated_token_count_total": 1945 }, "hash": "sha256:0795462182cb97256bb5c2acb035855fe0d6557185de8ac99482725ecb4f94c1", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -13965,7 +14109,7 @@ "estimated_token_count_total": 2187 }, "hash": "sha256:56269d9ea47f5b4e92cd7d5a1e65ab06d181a9c380f90bb3ef285529b12299f7", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -14024,7 +14168,7 @@ "estimated_token_count_total": 1700 }, "hash": "sha256:47328231d6ff4dc52cd93aaf1baf5d0bc2d9fc372f3d79339d87aafa0dabd1b8", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -14045,7 +14189,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -14082,7 +14226,7 @@ "estimated_token_count_total": 558 }, "hash": "sha256:a2490223926957381913ae0ed22e2df3611a6713ec9d77a3015d1cd6a578b3f6", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -14103,7 +14247,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -14161,7 +14305,7 @@ "estimated_token_count_total": 2671 }, "hash": "sha256:2a42198668c759f63aa602115bf2d290ec7d03bbc3a3df20e30e85027e1b1cc3", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -14182,7 +14326,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -14236,7 +14380,7 @@ "estimated_token_count_total": 2107 }, "hash": "sha256:296cba75b1d49aefa1b8636ba95ca20c3431b7eb0e93b0658add671ef5801732", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:23+00:00", "token_estimator": "heuristic-v1" }, { @@ -14290,7 +14434,7 @@ "estimated_token_count_total": 2264 }, "hash": "sha256:4e3ac6affdbe93ce9d132cbb838be1dfaf7a629b0e1f10ce4d90cc3899d656cb", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -14311,7 +14455,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -14332,7 +14476,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -14409,7 +14553,7 @@ "estimated_token_count_total": 6228 }, "hash": "sha256:72e41f816f07026d96c803f399c71852aa1151c464e79cec3e1746b282d5eaae", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -14430,7 +14574,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -14451,7 +14595,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -14472,7 +14616,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -14493,7 +14637,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -14514,7 +14658,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -14592,7 +14736,7 @@ "estimated_token_count_total": 4190 }, "hash": "sha256:1729ad83ad381a90752540644d400c60add3555e5da296ab455442be81d32f8c", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -14613,7 +14757,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -14634,7 +14778,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -14655,7 +14799,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -14697,7 +14841,7 @@ "estimated_token_count_total": 2430 }, "hash": "sha256:e3d8b84cb2cee7010978582998b2269296a042aec53fb016388690ab6adf355e", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -14718,7 +14862,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -14781,7 +14925,7 @@ "estimated_token_count_total": 1347 }, "hash": "sha256:7589fa1dbdbf5748892ab6d42fc784d833f33e254bd3f95ee58424effcd38323", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -14802,7 +14946,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -14823,7 +14967,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -14866,7 +15010,7 @@ "estimated_token_count_total": 309 }, "hash": "sha256:93e8a3043d65583e3d66f8f5f0ed6f4ef89a908ef85da2b6ca906a1100b7dded", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -14903,7 +15047,7 @@ "estimated_token_count_total": 313 }, "hash": "sha256:c609bc98cba5efa2d2a808548cf93ad9d0a06455b35a8fd9f534daf52824f506", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -14971,7 +15115,7 @@ "estimated_token_count_total": 1818 }, "hash": "sha256:f50cd1177dd4aff8eb031d6f21cb640f8187a7f2dd0edcaef5c73354a378e44d", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -15034,7 +15178,7 @@ "estimated_token_count_total": 1182 }, "hash": "sha256:9542f40acae725e628f4c3155ad1e7e0e18b2eb518484856ad439a1d9f86d1f3", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -15055,7 +15199,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -15108,7 +15252,7 @@ "estimated_token_count_total": 994 }, "hash": "sha256:6992c9a2d1b315b64d9782880105cf2d436750249a84577aceb95cc213863009", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -15165,7 +15309,7 @@ "estimated_token_count_total": 1046 }, "hash": "sha256:dd29fab6e3c00d720b10effa4e50373a6fe9ab4b7bfd3aea892c7fa9c84318a2", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -15362,7 +15506,7 @@ "estimated_token_count_total": 9750 }, "hash": "sha256:1fb7a20bc4a799a771954720428029419ec73afa640e589590c43dd041a7e307", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -15383,7 +15527,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -15441,7 +15585,7 @@ "estimated_token_count_total": 2840 }, "hash": "sha256:224a9f69d4613a5f1afdbc1f05379add8321fe159e32c71db003bbe08ff8e976", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -15462,7 +15606,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -15483,7 +15627,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -15536,7 +15680,7 @@ "estimated_token_count_total": 1627 }, "hash": "sha256:65809486f62f60c6a6ac8109f9f027361683c23f639991a045ec5c057b665026", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -15624,7 +15768,7 @@ "estimated_token_count_total": 4474 }, "hash": "sha256:c74a28d8d62369591c5734535136508db3d1f7380e486fd214f98d433cafd6e7", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -15717,7 +15861,7 @@ "estimated_token_count_total": 3891 }, "hash": "sha256:e27657e4e4a14fe86f424b96631946ec36fb90d277e6010b6cbd64c4769aba8a", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -15790,7 +15934,7 @@ "estimated_token_count_total": 3250 }, "hash": "sha256:bc771f912627fa09cad64adab1bc81c052f650d6c5a3b4f0c91883a98f6628da", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -15863,7 +16007,7 @@ "estimated_token_count_total": 3035 }, "hash": "sha256:f0d36333d0d3afff7f6374a61d0f6d1fb878c9ef4c4e4c24447745661dbe59d0", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -15916,7 +16060,7 @@ "estimated_token_count_total": 2509 }, "hash": "sha256:205892e350168b3d0da7ccc280c67c3217ad1e45e87a53d124fa1dd69661aa5e", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -15989,7 +16133,7 @@ "estimated_token_count_total": 1122 }, "hash": "sha256:ee87115c828928c82937de26f5f938cecd4c3bb1225fdb61627e8092e6ea5951", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -16010,7 +16154,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -16031,7 +16175,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -16098,7 +16242,7 @@ "estimated_token_count_total": 2276 }, "hash": "sha256:4856172c6356357818234a3b7f0828716bd32e6192f3609c51de0cafcc5a75e7", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -16165,7 +16309,7 @@ "estimated_token_count_total": 2249 }, "hash": "sha256:1368f6d49bccb7ba0e642cc58ea2c97ca95ae45e390cb9fa2ab11b0b41de52f4", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -16277,7 +16421,7 @@ "estimated_token_count_total": 4844 }, "hash": "sha256:96acff10be56dea76acdb5c915c1dde0eb15eb12eb95e7871eef56bab6cda273", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -16349,7 +16493,7 @@ "estimated_token_count_total": 2375 }, "hash": "sha256:61bc251929352f2299ca1d413d05aa9c3672b914575a285d73c7ba53dbd75bff", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -16401,7 +16545,7 @@ "estimated_token_count_total": 1461 }, "hash": "sha256:370ed10155cee84889a6d230d0bc3476597448f88a2a271ab87ef893a3268c18", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -16473,7 +16617,7 @@ "estimated_token_count_total": 7755 }, "hash": "sha256:086a87823ab67ceac102358030e316583cd733c0ec326316e7f29061fe7f6934", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -16535,7 +16679,7 @@ "estimated_token_count_total": 2764 }, "hash": "sha256:a2bba0ba575bd7e3f7199282ea5994087acf2c62e828f316e6eb62c9a43449e1", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -16617,7 +16761,7 @@ "estimated_token_count_total": 34492 }, "hash": "sha256:bef820acfe429d4a847a8de82de6c70155ac6b3ad5ebdd574a2157923b45f688", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -16670,7 +16814,7 @@ "estimated_token_count_total": 3099 }, "hash": "sha256:d2f3ab658ab29514ac161b17df23e0e7c1f63a7fa4fefcef451ef80b413ab757", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -16763,7 +16907,7 @@ "estimated_token_count_total": 5338 }, "hash": "sha256:b3530f5fc5c9e916181dbc259a7fbae9c60100cb0450fc6d47bbb0d140afa075", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -16835,7 +16979,7 @@ "estimated_token_count_total": 4358 }, "hash": "sha256:87b19f6e881611329b7015e8d8187d7d85b2b2ef14b01e832c8b8e20897e3b40", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -16892,7 +17036,7 @@ "estimated_token_count_total": 2138 }, "hash": "sha256:ff2c267284959711782c0d6ecb4b439c3a6cc31f763d5e1ff2cc3b1f6efb62b2", - "last_modified": "2025-10-17T18:09:28+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -16944,7 +17088,7 @@ "estimated_token_count_total": 2929 }, "hash": "sha256:df60044893f48dd7f37a11de275a16bf32adb31317ed70a789fd7fac64150e1a", - "last_modified": "2025-10-17T18:09:29+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -17036,7 +17180,7 @@ "estimated_token_count_total": 4789 }, "hash": "sha256:81750202081ff24447f4e129c49230eedb315d1b44c740b677c3495a8f7adb9a", - "last_modified": "2025-10-17T18:09:29+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -17118,7 +17262,7 @@ "estimated_token_count_total": 2452 }, "hash": "sha256:1eb463c6b2732ebed0d16165425cde438688d21cc302f759b40250850c2a5e83", - "last_modified": "2025-10-17T18:09:29+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -17181,7 +17325,7 @@ "estimated_token_count_total": 3255 }, "hash": "sha256:fe94de6f97fb588552f6cbc6b1a4c7399e91f5f31585f61a0dee66f5f50ff8a0", - "last_modified": "2025-10-17T18:09:29+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -17248,7 +17392,7 @@ "estimated_token_count_total": 4242 }, "hash": "sha256:2f11054e0d31c003ebae5d990b559bd56741d190ca409f6ad060216245fa2d17", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -17305,7 +17449,7 @@ "estimated_token_count_total": 2263 }, "hash": "sha256:a6a535f4f5e145d3e2a7518739f752ee3ed37b7745483f414e21c97792331d18", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -17353,7 +17497,7 @@ "estimated_token_count_total": 1571 }, "hash": "sha256:3ad540d8ad636304705cccb08bc1fdf21fe2fc7dc0f99bd509b23ae96d20e0ba", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -17445,7 +17589,7 @@ "estimated_token_count_total": 2140 }, "hash": "sha256:388c988338ed84589c546bb1606d08641fb931dae307d3df92aeccd2e4986080", - "last_modified": "2025-10-17T16:56:17+00:00", + "last_modified": "2025-10-20T08:03:38+00:00", "token_estimator": "heuristic-v1" }, { @@ -17514,7 +17658,7 @@ "estimated_token_count_total": 2702 }, "hash": "sha256:1f8ab387f721d865a7ca75eaa2528f1f2ebd4528a7d65ffeb27c68953100a3cb", - "last_modified": "2025-10-17T18:09:29+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -17583,7 +17727,7 @@ "estimated_token_count_total": 2564 }, "hash": "sha256:97dadddf4c27f469f552875461fc54d331fa151e4656401e15d6d4173115eecf", - "last_modified": "2025-10-17T18:09:29+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -17641,7 +17785,7 @@ "estimated_token_count_total": 2670 }, "hash": "sha256:07629376480e74afc7fe4d91df539b6ab22453df0f8143df11cc51ef9a78f736", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -17695,7 +17839,7 @@ "estimated_token_count_total": 2056 }, "hash": "sha256:cf9197d6909dd8865e8838cad95e3692fefaecc3d2f4773b26809a02051d620f", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -17749,7 +17893,7 @@ "estimated_token_count_total": 2220 }, "hash": "sha256:aa6371024bb78c3eeedb6820a37859670046fd0e4f756ad417b20c39fb2983b9", - "last_modified": "2025-10-17T16:49:54+00:00", + "last_modified": "2025-10-20T07:51:32+00:00", "token_estimator": "heuristic-v1" }, { @@ -17802,7 +17946,7 @@ "estimated_token_count_total": 1760 }, "hash": "sha256:9cf70459e921b8b231a3f2e7a7c1d47a4917e45f0c4d0fe873ad4062fd540a9a", - "last_modified": "2025-10-17T18:09:29+00:00", + "last_modified": "2025-10-28T11:55:24+00:00", "token_estimator": "heuristic-v1" }, { @@ -17875,7 +18019,7 @@ "estimated_token_count_total": 5118 }, "hash": "sha256:de7fde61d4cac9c28634ee496dcabe116fe44b1b87408f202103290d78247c05", - "last_modified": "2025-10-17T18:09:33+00:00", + "last_modified": "2025-10-28T11:55:27+00:00", "token_estimator": "heuristic-v1" }, { @@ -17958,7 +18102,7 @@ "estimated_token_count_total": 6206 }, "hash": "sha256:cb8ddb4a61f6a62182420b69382f1c7ab2adc2f4ae643f7f68c6867680afe81f", - "last_modified": "2025-10-17T18:09:37+00:00", + "last_modified": "2025-10-28T11:55:29+00:00", "token_estimator": "heuristic-v1" }, { @@ -18021,7 +18165,7 @@ "estimated_token_count_total": 4135 }, "hash": "sha256:ca1d65d450f086a0eb7b81e9589e9894e04b217fe9709a1b464f09beb3ca9dc2", - "last_modified": "2025-10-17T18:09:40+00:00", + "last_modified": "2025-10-28T11:55:30+00:00", "token_estimator": "heuristic-v1" } ] \ No newline at end of file diff --git a/llms-full.jsonl b/llms-full.jsonl index 3fe86b52b..3b6e7d008 100644 --- a/llms-full.jsonl +++ b/llms-full.jsonl @@ -1713,6 +1713,22 @@ {"page_id": "reference-polkadot-hub-assets-and-smart-contracts", "page_title": "Asset Hub", "index": 19, "depth": 3, "title": "Practical Monitoring Examples", "anchor": "practical-monitoring-examples", "start_char": 17422, "end_char": 18233, "estimated_token_count": 163, "token_estimator": "heuristic-v1", "text": "### Practical Monitoring Examples\n\nThe preceding sections outline the process of monitoring XCM deposits to specific accounts and then tracing back the origin of these deposits. The process of tracking an XCM transfer and the specific events to monitor may vary based on the direction of the XCM message. Here are some examples to showcase the slight differences:\n\n- **Transfer from parachain to relay chain**: Track `parachainsystem(UpwardMessageSent)` on the parachain and `messagequeue(Processed)` on the relay chain.\n- **Transfer from relay chain to parachain**: Track `xcmPallet(sent)` on the relay chain and `dmpqueue(ExecutedDownward)` on the parachain.\n- **Transfer between parachains**: Track `xcmpqueue(XcmpMessageSent)` on the system parachain and `xcmpqueue(Success)` on the destination parachain."} {"page_id": "reference-polkadot-hub-assets-and-smart-contracts", "page_title": "Asset Hub", "index": 20, "depth": 3, "title": "Monitor for Failed XCM Transfers", "anchor": "monitor-for-failed-xcm-transfers", "start_char": 18233, "end_char": 19041, "estimated_token_count": 176, "token_estimator": "heuristic-v1", "text": "### Monitor for Failed XCM Transfers\n\nSometimes, XCM transfers may fail due to liquidity or other errors. Failed transfers emit specific error events, which are key to resolving issues in asset transfers. Monitoring for these failure events helps catch issues before they affect asset balances.\n\n- **Relay chain to system parachain**: Look for the `dmpqueue(ExecutedDownward)` event on the parachain with an `Incomplete` outcome and an error type such as `UntrustedReserveLocation`.\n- **Parachain to parachain**: Monitor for `xcmpqueue(Fail)` on the destination parachain with error types like `TooExpensive`.\n\nFor detailed error management in XCM, see Gavin Wood's blog post on [XCM Execution and Error Management](https://polkadot.com/blog/xcm-part-three-execution-and-error-management/){target=\\_blank}."} {"page_id": "reference-polkadot-hub-assets-and-smart-contracts", "page_title": "Asset Hub", "index": 21, "depth": 2, "title": "Where to Go Next", "anchor": "where-to-go-next", "start_char": 19041, "end_char": 20065, "estimated_token_count": 244, "token_estimator": "heuristic-v1", "text": "## Where to Go Next\n\n
\n\n- Tutorial __Register a Local Asset__\n\n ---\n\n Comprehensive guide to registering a local asset on the Asset Hub system parachain, including step-by-step instructions.\n\n [:octicons-arrow-right-24: Reference](/chain-interactions/token-operations/register-local-asset/)\n\n- Tutorial __Register a Foreign Asset__\n\n ---\n\n An in-depth guide to registering a foreign asset on the Asset Hub parachain, providing clear, step-by-step instructions.\n\n [:octicons-arrow-right-24: Reference](/chain-interactions/token-operations/register-foreign-asset/)\n\n- Tutorial __Convert Assets__\n\n ---\n\n A guide detailing the step-by-step process of converting assets on Asset Hub, helping users efficiently navigate asset management on the platform.\n\n [:octicons-arrow-right-24: Reference](/chain-interactions/token-operations/convert-assets/)\n\n
"} +{"page_id": "reference-polkadot-hub-assets", "page_title": "Polkadot Hub Assets", "index": 0, "depth": 2, "title": "Asset Management", "anchor": "asset-management", "start_char": 0, "end_char": 21, "estimated_token_count": 4, "token_estimator": "heuristic-v1", "text": "## Asset Management"} +{"page_id": "reference-polkadot-hub-assets", "page_title": "Polkadot Hub Assets", "index": 1, "depth": 2, "title": "Introduction", "anchor": "introduction", "start_char": 21, "end_char": 766, "estimated_token_count": 147, "token_estimator": "heuristic-v1", "text": "## Introduction\n\nPolkadot Hub is Polkadot's system parachain for issuing and managing on-chain assets. While the Relay Chain provides security, Polkadot Hub handles asset logic—minting, burning, transfers, and metadata—in a cost-efficient environment.\n\nIt's worth noting that Polkadot Hub also supports EVM and PVM smart contracts. This means assets can be managed not only through the native Assets pallet, but also using familiar ERC-20 contract standards.\n\nBuilt for interoperability, it enables cross-chain asset transfers with XCM and supports foreign asset registration from other parachains. This guide covers core asset operations, XCM transfers, and developer tooling such as [API Sidecar](#api-sidecar) and [`TxWrapper`](#txwrapper)."} +{"page_id": "reference-polkadot-hub-assets", "page_title": "Polkadot Hub Assets", "index": 2, "depth": 2, "title": "Asset Basics", "anchor": "asset-basics", "start_char": 766, "end_char": 1236, "estimated_token_count": 86, "token_estimator": "heuristic-v1", "text": "## Asset Basics\n\nThe Polkadot Relay Chain supports only its native token (DOT), so Polkadot Hub provides a standardized framework for creating and managing fungible and non-fungible assets. It enables projects to issue tokens, manage supply, and transfer assets across parachains.\n\nAssets on Polkadot Hub support familiar operations such as minting, burning, transfers, and metadata management, similar to ERC-20 on Ethereum but built directly into Polkadot’s runtime."} +{"page_id": "reference-polkadot-hub-assets", "page_title": "Polkadot Hub Assets", "index": 3, "depth": 3, "title": "Why use Polkadot Hub?", "anchor": "why-use-polkadot-hub", "start_char": 1236, "end_char": 1678, "estimated_token_count": 110, "token_estimator": "heuristic-v1", "text": "### Why use Polkadot Hub?\n\n- **Custom asset creation**: Issue tokens or NFTs with configurable permissions and metadata.\n- **Low fees**: Transactions cost roughly one-tenth of Relay Chain fees.\n- **Lower deposits**: Minimal on-chain storage costs for asset data.\n- **Pay fees in any asset**: Users don’t need DOT to transact; supported assets can cover fees.\n- **Cross-chain ready**: Assets can be transferred to other parachains using XCM."} +{"page_id": "reference-polkadot-hub-assets", "page_title": "Polkadot Hub Assets", "index": 4, "depth": 3, "title": "Asset structure", "anchor": "asset-structure", "start_char": 1678, "end_char": 2116, "estimated_token_count": 85, "token_estimator": "heuristic-v1", "text": "### Asset structure\n\nEach asset is identified by a unique ID and stores:\n\n- Asset administrators\n- Total supply and holder count\n- Minimum balance configuration\n- **Sufficiency** – Whether the asset can keep an account alive without DOT\n- Metadata (name, symbol, decimals)\n\nIf a balance falls below the configured minimum, it may be removed as “dust.” This ensures efficient storage while giving developers control over asset economics."} +{"page_id": "reference-polkadot-hub-assets", "page_title": "Polkadot Hub Assets", "index": 5, "depth": 2, "title": "Assets Pallet", "anchor": "assets-pallet", "start_char": 2116, "end_char": 2642, "estimated_token_count": 105, "token_estimator": "heuristic-v1", "text": "## Assets Pallet\n\nThe Assets pallet in the Polkadot SDK provides the core logic behind fungible assets on Polkadot Hub. It enables developers to create and manage asset classes with configurable permissions. \n\nThe pallet supports both permissioned and permissionless asset creation, making it suitable for simple tokens as well as governed assets controlled by teams or DAOs.\n\nFor full API details, see the [Assets Pallet Rust docs](https://paritytech.github.io/polkadot-sdk/master/pallet_assets/index.html){target=\\_blank}."} +{"page_id": "reference-polkadot-hub-assets", "page_title": "Polkadot Hub Assets", "index": 6, "depth": 3, "title": "Key Features", "anchor": "key-features", "start_char": 2642, "end_char": 3282, "estimated_token_count": 154, "token_estimator": "heuristic-v1", "text": "### Key Features\n\nThe Assets pallet includes:\n\n- **Asset issuance**: Create new assets and assign initial supply.\n- **Transfers**: Move assets between accounts with balance tracking.\n- **Freezing**: Lock an account’s balance to prevent transfers.\n- **Burning**: Reduce total supply by destroying tokens.\n- **Non-custodial transfers**: Approve transfers on behalf of another account without giving up custody.\n\n!!! note \"Main Functions\"\n For the full list of supported extrinsics, see the \n [`pallet-assets` dispatchable functions reference](https://docs.rs/pallet-assets/latest/pallet_assets/pallet/enum.Call.html){target=\\_blank}."} +{"page_id": "reference-polkadot-hub-assets", "page_title": "Polkadot Hub Assets", "index": 7, "depth": 3, "title": "Querying Functions", "anchor": "querying-functions", "start_char": 3282, "end_char": 3994, "estimated_token_count": 160, "token_estimator": "heuristic-v1", "text": "### Querying Functions\n\nThe Assets pallet also provides read-only functions to retrieve on-chain asset data, commonly used in dApps and backend services:\n\n- **`balance(asset_id, account)`** – Retrieves the balance of a given asset for a specified account. Useful for checking the holdings of an asset class across different accounts.\n- **`total_supply(asset_id)`** – RReturns the total supply of the asset identified by asset_id. Allows users to verify how much of the asset exists on-chain.\n\nAdditional queries include metadata lookups, account status, and asset details. See the full list in the [Pallet reference](https://docs.rs/pallet-assets/latest/pallet_assets/pallet/struct.Pallet.html){target=_blank}."} +{"page_id": "reference-polkadot-hub-assets", "page_title": "Polkadot Hub Assets", "index": 8, "depth": 3, "title": "Permission Models and Roles", "anchor": "permission-models-and-roles", "start_char": 3994, "end_char": 4851, "estimated_token_count": 171, "token_estimator": "heuristic-v1", "text": "### Permission Models and Roles\n\nThe Assets pallet uses role-based permissions to control who can manage different parts of an asset’s lifecycle:\n\n- **Owner**: Has overarching control, including destroying an entire asset class. Owners can also set or update the Issuer, Freezer, and Admin roles.\n- **Admin**: Can freeze (preventing transfers) and forcibly transfer assets between accounts. Admins also have the power to reduce the balance of an asset class across arbitrary accounts.\n- **Issuer**: Responsible for minting new tokens. When new assets are created, the Issuer is the account that controls their distribution to other accounts.\n- **Freezer**: Can lock the transfer of assets from an account, preventing the account holder from moving their balance.\n\nThese roles allow projects to enforce governance and security policies around their assets."} +{"page_id": "reference-polkadot-hub-assets", "page_title": "Polkadot Hub Assets", "index": 9, "depth": 3, "title": "Asset Freezing", "anchor": "asset-freezing", "start_char": 4851, "end_char": 5451, "estimated_token_count": 127, "token_estimator": "heuristic-v1", "text": "### Asset Freezing\n\nAssets can be temporarily locked to prevent transfers from specific accounts. This is useful for dispute resolution, fraud prevention, or compliance controls.\n\nOnly the **Freezer** role can perform freezing actions:\n\n- **`freeze(asset_id, account)`**: Locks the specified asset of the account. While the asset is frozen, no transfers can be made from the frozen account.\n- **`thaw(asset_id, account)`**: Corresponding function for unfreezing, allowing the asset to be transferred again.\n\nFreezing does not burn or remove assets. It simply pauses their movement until re-enabled."} +{"page_id": "reference-polkadot-hub-assets", "page_title": "Polkadot Hub Assets", "index": 10, "depth": 2, "title": "Non-Custodial Transfers (Approval API)", "anchor": "non-custodial-transfers-approval-api", "start_char": 5451, "end_char": 6469, "estimated_token_count": 203, "token_estimator": "heuristic-v1", "text": "## Non-Custodial Transfers (Approval API)\n\nThe Assets pallet supports delegated transfers using an Approval API. This lets one account authorize another to transfer a limited amount of its assets—without handing over full control. It’s useful for escrow logic, automated payments, and multi-party dApps.\n\nKey functions:\n\n- **`approve_transfer(asset_id, delegate, amount)`**: Approves a delegate to transfer up to a certain amount of the asset on behalf of the original account holder.\n- **`cancel_approval(asset_id, delegate)`**: Cancels a previous approval for the delegate. Once canceled, the delegate no longer has permission to transfer the approved amount.\n- **`transfer_approved(asset_id, owner, recipient, amount)`**: Executes the approved asset transfer from the owner’s account to the recipient. The delegate account can call this function once approval is granted.\n\nThese delegated operations make it easier to manage multi-step transactions and dApps that require complex asset flows between participants."} +{"page_id": "reference-polkadot-hub-assets", "page_title": "Polkadot Hub Assets", "index": 11, "depth": 2, "title": "Foreign Assets", "anchor": "foreign-assets", "start_char": 6469, "end_char": 6819, "estimated_token_count": 61, "token_estimator": "heuristic-v1", "text": "## Foreign Assets\n\nForeign assets are tokens that originate outside Polkadot Hub—either from other Polkadot parachains or from external networks like Ethereum via bridges. \n\nOnce registered on Polkadot Hub by the originating chain’s root origin, these assets can be held, transferred, and used just like native assets within the Polkadot ecosystem."} +{"page_id": "reference-polkadot-hub-assets", "page_title": "Polkadot Hub Assets", "index": 12, "depth": 3, "title": "Handling Foreign Assets", "anchor": "handling-foreign-assets", "start_char": 6819, "end_char": 7741, "estimated_token_count": 171, "token_estimator": "heuristic-v1", "text": "### Handling Foreign Assets\n\nForeign assets are managed by the **Foreign Assets pallet**, which functions similarly to the standard Assets pallet. Most operations—like transfers and balance queries—use the same API, but with a few key differences:\n\n- **Asset Identifier**: Unlike native assets, foreign assets are identified using an XCM Multilocation rather than a simple numeric AssetId. This multilocation identifier represents the cross-chain location of the asset and provides a standardized way to reference it across different parachains and relay chains.\n- **Transfers**: Once registered in the Polkadot Hub, foreign assets can be transferred between accounts, just like native assets. Users can also send these assets back to their originating blockchain if supported by the relevant cross-chain messaging mechanisms.\n\nThis unified interface makes it easy for dApps to handle both native and cross-chain assets."} +{"page_id": "reference-polkadot-hub-assets", "page_title": "Polkadot Hub Assets", "index": 13, "depth": 2, "title": "Assets & XCM", "anchor": "assets-xcm", "start_char": 7741, "end_char": 7950, "estimated_token_count": 42, "token_estimator": "heuristic-v1", "text": "## Assets & XCM \n\nCross-chain asset transfers in Polkadot Hub use **XCM (Cross-Consensus Messaging)**. Monitoring these transfers is essential to verify asset movement between parachains and the Relay Chain."} +{"page_id": "reference-polkadot-hub-assets", "page_title": "Polkadot Hub Assets", "index": 14, "depth": 3, "title": "Monitoring Successful Transfers", "anchor": "monitoring-successful-transfers", "start_char": 7950, "end_char": 8223, "estimated_token_count": 61, "token_estimator": "heuristic-v1", "text": "### Monitoring Successful Transfers\n- Watch for inbound asset events on the **Relay Chain or Polkadot Hub**.\n- Key event: **`balances.minted`** – confirms assets were received.\n- Track each block and filter for this event to detect deposits and verify the target account."} +{"page_id": "reference-polkadot-hub-assets", "page_title": "Polkadot Hub Assets", "index": 15, "depth": 2, "title": "Tracing Transfer Origins", "anchor": "tracing-transfer-origins", "start_char": 8223, "end_char": 8645, "estimated_token_count": 107, "token_estimator": "heuristic-v1", "text": "## Tracing Transfer Origins\nTo trace where a transfer came from:\n1. Check the block where the `balances.minted` event was emitted.\n2. Locate the **`messageQueue.Processed`** event.\n3. Use the **message `Id`** from this event to correlate the XCM message across chains.\n\n!!! note\n To learn more about **Asset Transfers with XCM**, please refer to the [XCM Get Started](/parachains/interoperability/get-started.md) page."} {"page_id": "reference-polkadot-hub-bridging", "page_title": "Bridge Hub", "index": 0, "depth": 2, "title": "Introduction", "anchor": "introduction", "start_char": 14, "end_char": 1065, "estimated_token_count": 184, "token_estimator": "heuristic-v1", "text": "## Introduction\n\nThe Bridge Hub system parachain plays a crucial role in facilitating trustless interactions between Polkadot, Kusama, Ethereum, and other blockchain ecosystems. By implementing on-chain light clients and supporting protocols like BEEFY and GRANDPA, Bridge Hub ensures seamless message transmission and state verification across chains. It also provides essential [pallets](/reference/glossary/#pallet){target=\\_blank} for sending and receiving messages, making it a cornerstone of Polkadot’s interoperability framework. With built-in support for XCM (Cross-Consensus Messaging), Bridge Hub enables secure, efficient communication between diverse blockchain networks.\n\nThis guide covers the architecture, components, and deployment of the Bridge Hub system. You'll explore its trustless bridging mechanisms, key pallets for various blockchains, and specific implementations like Snowbridge and the Polkadot <> Kusama bridge. By the end, you'll understand how Bridge Hub enhances connectivity within the Polkadot ecosystem and beyond."} {"page_id": "reference-polkadot-hub-bridging", "page_title": "Bridge Hub", "index": 1, "depth": 2, "title": "Trustless Bridging", "anchor": "trustless-bridging", "start_char": 1065, "end_char": 2671, "estimated_token_count": 313, "token_estimator": "heuristic-v1", "text": "## Trustless Bridging\n\nBridge Hub provides a mode of trustless bridging through its implementation of on-chain light clients and trustless relayers. Trustless bridges are essentially two one-way bridges, where each chain has a method of verifying the state of the other in a trustless manner through consensus proofs. In this context, \"trustless\" refers to the lack of need to trust a human when interacting with various system components. Trustless systems are based instead on trusting mathematics, cryptography, and code. The target chain and source chain both provide ways of verifying one another's state and actions (such as a transfer) based on the consensus and finality of both chains rather than an external mechanism controlled by a third party.\n\n[BEEFY (Bridge Efficiency Enabling Finality Yielder)](/reference/polkadot-hub/consensus-and-security/pos-consensus/#bridging-beefy){target=\\_blank} is instrumental in this solution. It provides a more efficient way to verify the consensus on the relay chain. It allows the participants in a network to verify finality proofs, meaning a remote chain like Ethereum can verify the state of Polkadot at a given block height. \n\nFor example, the Ethereum and Polkadot bridging solution that [Snowbridge](https://docs.snowbridge.network/){target=\\_blank} implements involves two light clients: one which verifies the state of Polkadot and the other which verifies the state of Ethereum. The light client for Polkadot is implemented in the runtime as a pallet, whereas the light client for Ethereum is implemented as a smart contract on the beacon chain."} {"page_id": "reference-polkadot-hub-bridging", "page_title": "Bridge Hub", "index": 2, "depth": 2, "title": "Bridging Components", "anchor": "bridging-components", "start_char": 2671, "end_char": 3623, "estimated_token_count": 242, "token_estimator": "heuristic-v1", "text": "## Bridging Components\n\nIn any given Bridge Hub implementation (Kusama, Polkadot, or other relay chains), there are a few primary pallets that are utilized:\n\n- **[Pallet Bridge GRANDPA](https://paritytech.github.io/polkadot-sdk/master/pallet_bridge_grandpa/index.html){target=\\_blank}**: An on-chain GRANDPA light client for Substrate based chains.\n- **[Pallet Bridge Parachains](https://paritytech.github.io/polkadot-sdk/master/pallet_bridge_parachains/index.html){target=\\_blank}**: A finality module for parachains.\n- **[Pallet Bridge Messages](https://paritytech.github.io/polkadot-sdk/master/pallet_bridge_messages/index.html){target=\\_blank}**: A pallet which allows sending, receiving, and tracking of inbound and outbound messages.\n- **[Pallet XCM Bridge](https://paritytech.github.io/polkadot-sdk/master/pallet_xcm_bridge_hub/index.html){target=\\_blank}**: A pallet which, with the Bridge Messages pallet, adds XCM support to bridge pallets."} @@ -1758,6 +1774,10 @@ {"page_id": "reference-polkadot-hub-people-and-identity", "page_title": "People Chain", "index": 5, "depth": 3, "title": "Judgment Classifications", "anchor": "judgment-classifications", "start_char": 1598, "end_char": 2385, "estimated_token_count": 150, "token_estimator": "heuristic-v1", "text": "### Judgment Classifications\n\nRegistrars can assign the following confidence levels to identity information:\n\n- **Unknown**: Default status; no judgment rendered yet.\n- **Reasonable**: Data appears valid but without formal verification (standard for most verified identities).\n- **Known good**: Information certified correct through formal verification (requires documentation; limited to registrars).\n- **Out of date**: Previously verified information that requires updating.\n- **Low quality**: Imprecise information requiring correction.\n- **Erroneous**: Incorrect information, potentially indicating fraudulent intent.\n\nA temporary \"Fee Paid\" status indicates judgment in progress. Both \"Fee Paid\" and \"Erroneous\" statuses lock identity information from modification until resolved."} {"page_id": "reference-polkadot-hub-people-and-identity", "page_title": "People Chain", "index": 6, "depth": 3, "title": "Registrars", "anchor": "registrars", "start_char": 2385, "end_char": 3680, "estimated_token_count": 198, "token_estimator": "heuristic-v1", "text": "### Registrars\n\nRegistrars serve as trusted verification authorities within the People chain ecosystem. These entities validate user identities and provide attestations that build trust in the network.\n\n- Registrars set specific fees for their verification services.\n- They can specialize in verifying particular identity fields.\n- Verification costs vary based on complexity and thoroughness.\n\nWhen requesting verification, users specify their maximum acceptable fee. Only registrars whose fees fall below this threshold can provide judgment. Upon completing the verification process, the user pays the registrar's fee, and the registrar issues an appropriate confidence level classification based on their assessment.\n\nMultiple registrars operate across the Polkadot and People chain ecosystems, each with unique specializations and fee structures. To request verification:\n\n1. Research available registrars and their verification requirements.\n2. Contact your chosen registrar directly through their specified channels.\n3. Submit required documentation according to their verification process.\n4. Pay the associated verification fee.\n\nYou must contact specific registrars individually to request judgment. Each registrar maintains its own verification procedures and communication channels."} {"page_id": "reference-polkadot-hub-people-and-identity", "page_title": "People Chain", "index": 7, "depth": 2, "title": "Where to Go Next", "anchor": "where-to-go-next", "start_char": 3680, "end_char": 4750, "estimated_token_count": 257, "token_estimator": "heuristic-v1", "text": "## Where to Go Next\n\n
\n\n- External __Polkadot.js Guides about Identity__\n\n ---\n\n Step-by-step instructions for managing identities through the Polkadot.js interface, with practical examples and visual guides.\n\n [:octicons-arrow-right-24: Reference](https://wiki.polkadot.com/learn/learn-guides-identity/)\n\n- External __How to Set and Clear an Identity__\n\n ---\n\n Practical walkthrough covering identity setup and removal process on People chain.\n\n [:octicons-arrow-right-24: Reference](https://support.polkadot.network/support/solutions/articles/65000181981-how-to-set-and-clear-an-identity)\n\n- External __People Chain Runtime Implementation__\n\n ---\n\n Source code for the People chain runtime, detailing the technical architecture of decentralized identity management.\n\n [:octicons-arrow-right-24: Reference](https://github.com/polkadot-fellows/runtimes/tree/main/system-parachains/people)\n\n
"} +{"page_id": "reference-polkadot-hub-smart-contracts", "page_title": "Polkadot Hub Smart Contracts", "index": 0, "depth": 2, "title": "Introduction", "anchor": "introduction", "start_char": 202, "end_char": 507, "estimated_token_count": 47, "token_estimator": "heuristic-v1", "text": "## Introduction\n\nPolkadot’s Relay Chain does not support smart contracts directly, so developers build contract-based applications on parachains that provide execution environments. Polkadot Hub is one of those parachains, offering flexible smart contract capabilities alongside native asset management."} +{"page_id": "reference-polkadot-hub-smart-contracts", "page_title": "Polkadot Hub Smart Contracts", "index": 1, "depth": 2, "title": "Building a Smart Contract", "anchor": "building-a-smart-contract", "start_char": 507, "end_char": 1486, "estimated_token_count": 197, "token_estimator": "heuristic-v1", "text": "## Building a Smart Contract\n\nPolkadot Hub supports multiple smart contract environments, giving developers the freedom to choose the workflow and tooling that best fits their project:\n\n- **PolkaVM**: A next-generation virtual machine designed specifically for Polkadot. Built on a high-performance [RISC-V-based register architecture](https://en.wikipedia.org/wiki/RISC-V){target=_blank}, PolkaVM enables fast, scalable execution and is optimized for modern smart contract development.\n- **REVM**: The [REVM backend](https://github.com/bluealloy/revm){target=_blank} brings a full Rust implementation of the EVM to Polkadot Hub. This allows developers to deploy existing Solidity contracts without modification, preserving compatibility with Ethereum tools and libraries.\n\nEach of these environments is fully compatible with Polkadot Hub, giving teams the option to reuse Ethereum code, build with Rust security guarantees, or explore high-performance innovation with PolkaVM."} +{"page_id": "reference-polkadot-hub-smart-contracts", "page_title": "Polkadot Hub Smart Contracts", "index": 2, "depth": 3, "title": "PolkaVM Contracts", "anchor": "polkavm-contracts", "start_char": 1486, "end_char": 3139, "estimated_token_count": 366, "token_estimator": "heuristic-v1", "text": "### PolkaVM Contracts\n\nPolkaVM is Polkadot Hub’s native, high-performance smart contract engine. Instead of emulating EVM bytecode, it executes contracts compiled to a RISC-V instruction set, giving tighter control over execution, metering, and parallelization while staying friendly to Ethereum-style development.\n\n**What it enables for developers**\n- **Ethereum-compatible development** – Write contracts in Solidity and use familiar tooling (e.g., Hardhat/Foundry workflows) with PolkaVM targets.\n- **Fast, predictable execution** – RISC-V bytecode is designed for efficient interpretation and careful gas/weight metering within the Substrate runtime.\n- **Better observability** – Substrate events + contract logs for clean indexing and debugging.\n\n**How it works (at a glance)**\n\n1. **Author & compile** – Your Solidity contract is compiled for PolkaVM (RISC-V target), producing bytecode plus ABI.\n2. **Deploy** – Submit a signed extrinsic to Polkadot Hub; collators include it in a parachain block.\n3. **Execute** – PolkaVM runs the contract code, mapping gas ↔ weight and persisting state via Substrate storage.\n4. **Integrate** – Contracts can interact with Polkadot Hub pallets and send/receive XCM messages for cross-chain actions.\n5. **Finalize & index** – The Relay Chain finalizes the block; events/logs are available to indexers and UIs.\n\n**When to choose PolkaVM**\n\n- You want **max performance** and tighter execution control than a traditional EVM.\n- You plan to **compose with Substrate pallets** (assets, governance) and **XCM** frequently.\n- You prefer a path that’s **Solidity-friendly** but optimized for Polkadot’s architecture."} +{"page_id": "reference-polkadot-hub-smart-contracts", "page_title": "Polkadot Hub Smart Contracts", "index": 3, "depth": 3, "title": "REVM Contracts", "anchor": "revm-contracts", "start_char": 3139, "end_char": 4272, "estimated_token_count": 218, "token_estimator": "heuristic-v1", "text": "### REVM Contracts\n\nREVM brings full EVM compatibility to Polkadot Hub through a fast, memory-safe Rust implementation of the Ethereum Virtual Machine. Unlike PolkaVM, which compiles contracts to RISC-V for native execution, REVM executes standard Ethereum bytecode directly—making it ideal for teams who want to migrate existing Solidity projects to Polkadot with minimal changes.\n\nWith REVM, developers can:\n\n- Deploy existing Solidity contracts without rewriting them.\n- Use familiar Ethereum tooling like Hardhat, Foundry, Remix, and MetaMask.\n- Interact with other parachains and on-chain assets using XCM and Polkadot Hub features.\n\nREVM builds on Rust’s safety guarantees and performance optimizations while retaining full opcode compatibility with the EVM. This provides a reliable path for Ethereum-native developers to access Polkadot’s cross-chain ecosystem.\n\nFor more details, explore the REVM integration in the Polkadot Hub smart contract documentation.\n\nIf you want to learn more about the dual virtual stack please go to the [DualVM Stack](polkadot-docs/smart-contracts/for-eth-devs/dual-vm-stack.md){target=_blank}."} {"page_id": "reference-tools-dedot", "page_title": "Dedot", "index": 0, "depth": 2, "title": "Introduction", "anchor": "introduction", "start_char": 9, "end_char": 445, "estimated_token_count": 99, "token_estimator": "heuristic-v1", "text": "## Introduction\n\n[Dedot](https://github.com/dedotdev/dedot){target=\\_blank} is a next-generation JavaScript client for Polkadot and Polkadot SDK-based blockchains. Designed to elevate the dApp development experience, Dedot is built and optimized to be lightweight and tree-shakable, offering precise types and APIs suggestions for individual Polkadot SDK-based blockchains and [ink! smart contracts](https://use.ink/){target=\\_blank}."} {"page_id": "reference-tools-dedot", "page_title": "Dedot", "index": 1, "depth": 3, "title": "Key Features", "anchor": "key-features", "start_char": 445, "end_char": 1529, "estimated_token_count": 298, "token_estimator": "heuristic-v1", "text": "### Key Features\n\n- **Lightweight and tree-shakable**: No more bn.js or WebAssembly blobs, optimized for dapps bundle size.\n- **Fully typed API**: Comprehensive TypeScript support for seamless on-chain interaction and ink! smart contract integration.\n- **Multi-version JSON-RPC support**: Compatible with both [legacy](https://github.com/w3f/PSPs/blob/master/PSPs/drafts/psp-6.md){target=\\_blank} and [new](https://paritytech.github.io/json-rpc-interface-spec/introduction.html){target=\\_blank} JSON-RPC APIs for broad ecosystem interoperability.\n- **Light client support**: Designed to work with light clients such as [Smoldot](https://github.com/smol-dot/smoldot){target=\\_blank}.\n- **Native TypeScript for scale codec**: Implements scale codec parsing directly in TypeScript without relying on custom wrappers.\n- **Wallet integration**: Works out-of-the-box with [@polkadot/extension-based](https://github.com/polkadot-js/extension?tab=readme-ov-file#api-interface){target=\\_blank} wallets.\n- **Familiar API design**: Similar API style to Polkadot.js for easy and fast migration."} {"page_id": "reference-tools-dedot", "page_title": "Dedot", "index": 2, "depth": 2, "title": "Installation", "anchor": "installation", "start_char": 1529, "end_char": 2152, "estimated_token_count": 177, "token_estimator": "heuristic-v1", "text": "## Installation\n\nTo add Dedot to your project, use the following command:\n\n=== \"npm\"\n\n ```bash\n npm i dedot\n ```\n\n=== \"pnpm\"\n\n ```bash\n pnpm add dedot\n ```\n\n=== \"yarn\"\n\n ```bash\n yarn add dedot\n ```\n\nTo enable auto-completion/IntelliSense for individual chains, install the [`@dedot/chaintypes`](https://www.npmjs.com/package/@dedot/chaintypes){target=\\_blank} package as a development dependency:\n\n=== \"npm\"\n\n ```bash\n npm i -D @dedot/chaintypes\n ```\n\n=== \"pnpm\"\n\n ```bash\n pnpm add -D @dedot/chaintypes\n ```\n\n=== \"yarn\"\n\n ```bash\n yarn add -D @dedot/chaintypes\n ```"} diff --git a/llms.txt b/llms.txt index 7d906a2b9..5f3df9254 100644 --- a/llms.txt +++ b/llms.txt @@ -6,7 +6,7 @@ This directory lists URLs for raw Markdown pages that complement the rendered pages on the documentation site. Use these Markdown files to retain semantic context when prompting models while avoiding passing HTML elements. ## Metadata -- Documentation pages: 287 +- Documentation pages: 289 - Categories: 12 ## Docs @@ -250,12 +250,14 @@ Docs: Polkadot Protocol - [Node and Runtime](https://raw.githubusercontent.com/polkadot-developers/polkadot-docs/master/.ai/pages/reference-parachains-node-and-runtime.md): Learn how Polkadot SDK-based nodes function, how the client and runtime are separated, and how they communicate using SCALE-encoded data. - [Randomness](https://raw.githubusercontent.com/polkadot-developers/polkadot-docs/master/.ai/pages/reference-parachains-randomness.md): Explore the importance of randomness in PoS blockchains, focusing on Polkadot’s VRF-based approach to ensure fairness and security in validator selection. - [Asset Hub](https://raw.githubusercontent.com/polkadot-developers/polkadot-docs/master/.ai/pages/reference-polkadot-hub-assets-and-smart-contracts.md): Learn about Asset Hub in Polkadot, managing on-chain assets, foreign asset integration, and using XCM for cross-chain asset transfers. +- [Polkadot Hub Assets](https://raw.githubusercontent.com/polkadot-developers/polkadot-docs/master/.ai/pages/reference-polkadot-hub-assets.md): Learn about asset management on Polkadot Hub, including on-chain assets, foreign asset integration, and XCM for cross-chain asset transfers. - [Bridge Hub](https://raw.githubusercontent.com/polkadot-developers/polkadot-docs/master/.ai/pages/reference-polkadot-hub-bridging.md): Learn about the Bridge Hub system parachain, a parachain that facilitates the interactions from Polkadot to the rest of Web3. - [Collectives Chain](https://raw.githubusercontent.com/polkadot-developers/polkadot-docs/master/.ai/pages/reference-polkadot-hub-collectives-and-daos.md): Learn how the Collectives chain provides infrastructure for governance organizations, enabling decentralized network stewardship and decision-making. - [Agile Coretime](https://raw.githubusercontent.com/polkadot-developers/polkadot-docs/master/.ai/pages/reference-polkadot-hub-consensus-and-security-agile-coretime.md): Explore the efficient scheduling mechanisms to access Polkadot cores to produce blockspace continuously or on-demand. - [Proof of Stake Consensus](https://raw.githubusercontent.com/polkadot-developers/polkadot-docs/master/.ai/pages/reference-polkadot-hub-consensus-and-security-pos-consensus.md): Explore Polkadot's consensus protocols for secure, scalable, and decentralized network operation, including NPoS, BABE, GRANDPA, and BEEFY. - [Overview of the Polkadot Relay Chain](https://raw.githubusercontent.com/polkadot-developers/polkadot-docs/master/.ai/pages/reference-polkadot-hub-consensus-and-security-relay-chain.md): Explore Polkadot's core architecture, including its multi-chain vision, shared security, and the DOT token's governance and staking roles. - [People Chain](https://raw.githubusercontent.com/polkadot-developers/polkadot-docs/master/.ai/pages/reference-polkadot-hub-people-and-identity.md): Learn how People chain secures decentralized identity management, empowering users to control and verify digital identities without central authorities. +- [Polkadot Hub Smart Contracts](https://raw.githubusercontent.com/polkadot-developers/polkadot-docs/master/.ai/pages/reference-polkadot-hub-smart-contracts.md): Learn how to build smart contracts on Polkadot Hub using PolkaVM and REVM, supporting both native Polkadot development and Ethereum compatibility. - [Accounts in Asset Hub Smart Contracts](https://raw.githubusercontent.com/polkadot-developers/polkadot-docs/master/.ai/pages/smart-contracts-for-eth-devs-accounts.md): Bridges Ethereum's 20-byte addresses with Polkadot's 32-byte accounts, enabling seamless interaction while maintaining compatibility with Ethereum tooling. - [Transactions and Fees on Asset Hub](https://raw.githubusercontent.com/polkadot-developers/polkadot-docs/master/.ai/pages/smart-contracts-for-eth-devs-blocks-transactions-fees.md): Explore how Asset Hub smart contracts handle blocks, transactions, and fees with EVM compatibility, supporting various Ethereum transaction types. - [PolkaVM Design](https://raw.githubusercontent.com/polkadot-developers/polkadot-docs/master/.ai/pages/smart-contracts-for-eth-devs-dual-vm-stack.md): Discover PolkaVM, a high-performance smart contract VM for Polkadot, enabling Ethereum compatibility via pallet_revive, Solidity support & optimized execution. diff --git a/reference/polkadot-hub/smart-contracts.md b/reference/polkadot-hub/smart-contracts.md index 76a4a65ba..406d3d615 100644 --- a/reference/polkadot-hub/smart-contracts.md +++ b/reference/polkadot-hub/smart-contracts.md @@ -1,5 +1,3 @@ - - --- title: Polkadot Hub Smart Contracts description: Learn how to build smart contracts on Polkadot Hub using PolkaVM and REVM, supporting both native Polkadot development and Ethereum compatibility. From 2c8e0d84214a384b428669d82c765aa7f05cfadf Mon Sep 17 00:00:00 2001 From: Andreja Markovic <104647242+kapetan3sid@users.noreply.github.com> Date: Tue, 28 Oct 2025 13:54:47 +0100 Subject: [PATCH 19/28] Update reference/polkadot-hub/assets.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Nicolás Hussein <80422357+nhussein11@users.noreply.github.com> --- reference/polkadot-hub/assets.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reference/polkadot-hub/assets.md b/reference/polkadot-hub/assets.md index 2e16ee4d3..2936e6e90 100644 --- a/reference/polkadot-hub/assets.md +++ b/reference/polkadot-hub/assets.md @@ -4,7 +4,7 @@ description: Learn about asset management on Polkadot Hub, including on-chain as categories: Polkadot Protocol --- -## Asset Management +# Assets ## Introduction From 1df8b0655aef8e3e7b91cfd3f2eb7327b2409656 Mon Sep 17 00:00:00 2001 From: Erin Shaben Date: Wed, 29 Oct 2025 00:56:39 -0400 Subject: [PATCH 20/28] clean up pages --- reference/polkadot-hub/assets.md | 125 ++++++++++------------ reference/polkadot-hub/smart-contracts.md | 23 ++-- 2 files changed, 72 insertions(+), 76 deletions(-) diff --git a/reference/polkadot-hub/assets.md b/reference/polkadot-hub/assets.md index 2936e6e90..98d96752b 100644 --- a/reference/polkadot-hub/assets.md +++ b/reference/polkadot-hub/assets.md @@ -4,136 +4,129 @@ description: Learn about asset management on Polkadot Hub, including on-chain as categories: Polkadot Protocol --- -# Assets +# Assets on Polkadot Hub ## Introduction -Polkadot Hub is Polkadot's system parachain for issuing and managing on-chain assets. While the Relay Chain provides security, Polkadot Hub handles asset logic—minting, burning, transfers, and metadata—in a cost-efficient environment. +Polkadot Hub is Polkadot's system parachain for issuing and managing on-chain assets. While the relay chain provides security, Polkadot Hub handles asset logic—minting, burning, transfers, and metadata—efficiently and cost-effectively. -It's worth noting that Polkadot Hub also supports EVM and PVM smart contracts. This means assets can be managed not only through the native Assets pallet, but also using familiar ERC-20 contract standards. +Polkadot Hub supports native assets issued on the parachain and foreign assets from other chains, both of which can move seamlessly across the network via XCM. -Built for interoperability, it enables cross-chain asset transfers with XCM and supports foreign asset registration from other parachains. This guide covers core asset operations, XCM transfers, and developer tooling such as [API Sidecar](#api-sidecar) and [`TxWrapper`](#txwrapper). +This guide explains how assets are created, managed, and moved across chains, including key operations, roles, and the differences between native and foreign assets. -## Asset Basics +## Why Use Polkadot Hub? -The Polkadot Relay Chain supports only its native token (DOT), so Polkadot Hub provides a standardized framework for creating and managing fungible and non-fungible assets. It enables projects to issue tokens, manage supply, and transfer assets across parachains. +The Polkadot relay chain supports only its native token (DOT). Polkadot Hub fills this gap by providing a standardized framework for creating and managing fungible and non-fungible assets. It enables projects to issue tokens, manage supply, and transfer assets across parachains. -Assets on Polkadot Hub support familiar operations such as minting, burning, transfers, and metadata management, similar to ERC-20 on Ethereum but built directly into Polkadot’s runtime. - -### Why use Polkadot Hub? +**Key features**: +- **Built-in asset operations**: Mint, burn, and transfer like ERC-20 on Ethereum, but native to Polkadot's runtime. - **Custom asset creation**: Issue tokens or NFTs with configurable permissions and metadata. -- **Low fees**: Transactions cost roughly one-tenth of Relay Chain fees. +- **Low fees**: Transactions cost roughly one-tenth of relay chain fees. - **Lower deposits**: Minimal on-chain storage costs for asset data. - **Pay fees in any asset**: Users don’t need DOT to transact; supported assets can cover fees. - **Cross-chain ready**: Assets can be transferred to other parachains using XCM. -### Asset structure +## Types of Assets + +Polkadot Hub supports two types of assets: + +- **Native assets**: Tokens and NFTs issued directly on Polkadot Hub using the Assets pallet. These assets benefit from the platform's custom features, such as configurable permissions and low fees +- **Foreign assets**: Tokens originating from other Polkadot parachains or external networks (like Ethereum, via bridges). Once registered on Polkadot Hub, they are treated similarly to native assets. + +## Asset Structure Each asset is identified by a unique ID and stores: - Asset administrators - Total supply and holder count - Minimum balance configuration -- **Sufficiency** – Whether the asset can keep an account alive without DOT +- Sufficiency–whether the asset can keep an account alive without DOT - Metadata (name, symbol, decimals) If a balance falls below the configured minimum, it may be removed as “dust.” This ensures efficient storage while giving developers control over asset economics. -## Assets Pallet +## How Native Assets Work -The Assets pallet in the Polkadot SDK provides the core logic behind fungible assets on Polkadot Hub. It enables developers to create and manage asset classes with configurable permissions. +Native assets on Polkadot Hub are created and managed via the Assets pallet from the Polkadot SDK. This pallet defines the runtime logic for issuing, configuring, and administering fungible assets with customizable permissions. -The pallet supports both permissioned and permissionless asset creation, making it suitable for simple tokens as well as governed assets controlled by teams or DAOs. +It supports both permissioned and permissionless asset creation, enabling everything from simple user-issued tokens to governed assets controlled by teams or DAOs. -For full API details, see the [Assets Pallet Rust docs](https://paritytech.github.io/polkadot-sdk/master/pallet_assets/index.html){target=\_blank}. +For implementation details, see the [Assets Pallet Rust docs](https://paritytech.github.io/polkadot-sdk/master/pallet_assets/index.html){target=\_blank}. -### Key Features +### Asset Operations -The Assets pallet includes: +The Assets pallet provides both state-changing operations and read-only queries for full lifecycle management of assets. + +Core operations include: - **Asset issuance**: Create new assets and assign initial supply. - **Transfers**: Move assets between accounts with balance tracking. -- **Freezing**: Lock an account’s balance to prevent transfers. - **Burning**: Reduce total supply by destroying tokens. -- **Non-custodial transfers**: Approve transfers on behalf of another account without giving up custody. - -!!! note "Main Functions" - For the full list of supported extrinsics, see the - [`pallet-assets` dispatchable functions reference](https://docs.rs/pallet-assets/latest/pallet_assets/pallet/enum.Call.html){target=\_blank}. +- **Delegated transfers**: Approve transfers on behalf of another account without giving up custody. +- **Freezing and thawing**: Temporarily lock and unlock an account's balance. -### Querying Functions +For a complete list of extrinsics, see the [`pallet-assets` dispatchable functions reference](https://docs.rs/pallet-assets/latest/pallet_assets/pallet/enum.Call.html){target=\_blank}. -The Assets pallet also provides read-only functions to retrieve on-chain asset data, commonly used in dApps and backend services: +Data queries make it possible to: -- **`balance(asset_id, account)`** – Retrieves the balance of a given asset for a specified account. Useful for checking the holdings of an asset class across different accounts. -- **`total_supply(asset_id)`** – RReturns the total supply of the asset identified by asset_id. Allows users to verify how much of the asset exists on-chain. +- Check account balances and total supply. +- Retrieve asset metadata and configuration details. +- Inspect account and asset status on-chain. -Additional queries include metadata lookups, account status, and asset details. See the full list in the [Pallet reference](https://docs.rs/pallet-assets/latest/pallet_assets/pallet/struct.Pallet.html){target=_blank}. +For a full list of queries, see the [Pallet reference](https://docs.rs/pallet-assets/latest/pallet_assets/pallet/struct.Pallet.html){target=_blank}. -### Permission Models and Roles +### Roles and Permissions The Assets pallet uses role-based permissions to control who can manage different parts of an asset’s lifecycle: -- **Owner**: Has overarching control, including destroying an entire asset class. Owners can also set or update the Issuer, Freezer, and Admin roles. -- **Admin**: Can freeze (preventing transfers) and forcibly transfer assets between accounts. Admins also have the power to reduce the balance of an asset class across arbitrary accounts. +- **Owner**: Overarching control, including destroying an asset class; can set or update Issuer, Freezer, and Admin roles. +- **Admin**: Can freeze assets and forcibly transfer balances between accounts. Admins can also reduce the balance of an asset class across arbitrary accounts. - **Issuer**: Responsible for minting new tokens. When new assets are created, the Issuer is the account that controls their distribution to other accounts. - **Freezer**: Can lock the transfer of assets from an account, preventing the account holder from moving their balance. These roles allow projects to enforce governance and security policies around their assets. -### Asset Freezing +### Freezing Assets Assets can be temporarily locked to prevent transfers from specific accounts. This is useful for dispute resolution, fraud prevention, or compliance controls. -Only the **Freezer** role can perform freezing actions: +**How it works**: -- **`freeze(asset_id, account)`**: Locks the specified asset of the account. While the asset is frozen, no transfers can be made from the frozen account. -- **`thaw(asset_id, account)`**: Corresponding function for unfreezing, allowing the asset to be transferred again. +- Only authorized parties can freeze or unfreeze (thaw) assets. +- Freezing pauses the movement of the asset without burning or removing it. +- Once thawed, the asset can be transferred normally. -Freezing does not burn or remove assets. It simply pauses their movement until re-enabled. +Freezing provides a safe way to control asset flow while maintaining full ownership. -## Non-Custodial Transfers (Approval API) +**Key functions**: `freeze` and `thaw`. -The Assets pallet supports delegated transfers using an Approval API. This lets one account authorize another to transfer a limited amount of its assets—without handing over full control. It’s useful for escrow logic, automated payments, and multi-party dApps. +### Delegated Transfers -Key functions: +Polkadot Hub supports delegated asset transfers, allowing one account to authorize another to move a limited amount of its assets—without giving up full control. This is useful for escrow logic, automated payments, and multi-party applications. -- **`approve_transfer(asset_id, delegate, amount)`**: Approves a delegate to transfer up to a certain amount of the asset on behalf of the original account holder. -- **`cancel_approval(asset_id, delegate)`**: Cancels a previous approval for the delegate. Once canceled, the delegate no longer has permission to transfer the approved amount. -- **`transfer_approved(asset_id, owner, recipient, amount)`**: Executes the approved asset transfer from the owner’s account to the recipient. The delegate account can call this function once approval is granted. +**How it works**: -These delegated operations make it easier to manage multi-step transactions and dApps that require complex asset flows between participants. +- An account can grant permission to another account to transfer a specific amount of its assets. +- Permissions can be revoked at any time, preventing further transfers. +- Authorized accounts can execute transfers on behalf of the original owner within the approved limits. -## Foreign Assets +Delegated transfers simplify multi-step transactions and enable complex asset flows. -Foreign assets are tokens that originate outside Polkadot Hub—either from other Polkadot parachains or from external networks like Ethereum via bridges. +**Key functions**: `approve_transfer`, `cancel_approval`, and `transfer_approved`. -Once registered on Polkadot Hub by the originating chain’s root origin, these assets can be held, transferred, and used just like native assets within the Polkadot ecosystem. +## How Foreign Assets Work -### Handling Foreign Assets +Foreign assets are assets originating from other chains and are managed on Polkadot Hub via the Foreign Assets pallet. This pallet provides similar operations as the native Assets pallet, enabling transfers, balance checks, and other standard asset operations. Most operations—like transfers and balance queries—use the same API, but with a few key differences: -Foreign assets are managed by the **Foreign Assets pallet**, which functions similarly to the standard Assets pallet. Most operations—like transfers and balance queries—use the same API, but with a few key differences: +- **Asset Identifier**: Foreign assets use an XCM multilocation as their identifier, rather than a numeric AssetId. This ensures assets from different chains can be referenced and moved safely across parachains. -- **Asset Identifier**: Unlike native assets, foreign assets are identified using an XCM Multilocation rather than a simple numeric AssetId. This multilocation identifier represents the cross-chain location of the asset and provides a standardized way to reference it across different parachains and relay chains. -- **Transfers**: Once registered in the Polkadot Hub, foreign assets can be transferred between accounts, just like native assets. Users can also send these assets back to their originating blockchain if supported by the relevant cross-chain messaging mechanisms. +- **Transfers**: Once registered on Polkadot Hub, foreign assets can be transferred between accounts just like native assets. If supported, they can also be returned to their original blockchain using cross-chain messaging. This unified interface makes it easy for dApps to handle both native and cross-chain assets. -## Assets & XCM - -Cross-chain asset transfers in Polkadot Hub use **XCM (Cross-Consensus Messaging)**. Monitoring these transfers is essential to verify asset movement between parachains and the Relay Chain. - -### Monitoring Successful Transfers -- Watch for inbound asset events on the **Relay Chain or Polkadot Hub**. -- Key event: **`balances.minted`** – confirms assets were received. -- Track each block and filter for this event to detect deposits and verify the target account. +## Moving Assets Across Chains -## Tracing Transfer Origins -To trace where a transfer came from: -1. Check the block where the `balances.minted` event was emitted. -2. Locate the **`messageQueue.Processed`** event. -3. Use the **message `Id`** from this event to correlate the XCM message across chains. +Polkadot Hub enables assets to move safely between parachains and the relay chain using XCM (Cross-Consensus Messaging). XCM ensures assets can move securely between chains while preserving ownership and traceability -!!! note - To learn more about **Asset Transfers with XCM**, please refer to the [XCM Get Started](/parachains/interoperability/get-started.md) page. +To learn more about asset transfers with XCM, please refer to the [Introduction to XCM](/parachains/interoperability/get-started/) page. diff --git a/reference/polkadot-hub/smart-contracts.md b/reference/polkadot-hub/smart-contracts.md index 406d3d615..a9a51d37a 100644 --- a/reference/polkadot-hub/smart-contracts.md +++ b/reference/polkadot-hub/smart-contracts.md @@ -1,18 +1,23 @@ --- title: Polkadot Hub Smart Contracts -description: Learn how to build smart contracts on Polkadot Hub using PolkaVM and REVM, supporting both native Polkadot development and Ethereum compatibility. +description: Learn how Polkadot Hub supports smart contracts through the REVM, a Rust-based Ethereum Virtual Machine compatible runtime. categories: Polkadot Protocol --- -# Polkadot Hub Smart Contracts +# Smart Contracts on Polkadot Hub --8<-- 'text/smart-contracts/polkaVM-warning.md' ## Introduction -Polkadot’s Relay Chain does not support smart contracts directly, so developers build contract-based applications on parachains that provide execution environments. Polkadot Hub is one of those parachains, offering flexible smart contract capabilities alongside native asset management. +Polkadot’s relay chain does not support smart contracts directly. Instead, developers deploy contract-based applications on parachains that provide execution environments. Polkadot Hub supports smart contracts through the REVM, a Rust-based Ethereum Virtual Machine compatible runtime. -## Building a Smart Contract +REVM enables developers to run standard Ethereum bytecode on Polkadot Hub, giving teams a path to migrate existing Solidity contracts while interacting with on-chain assets and other parachains via XCM. + +This guide explains how smart contracts are deployed, executed, and integrated on Polkadot Hub using REVM. + + ### REVM Contracts + + REVM brings full EVM compatibility to Polkadot Hub through a fast, memory-safe Rust implementation of the Ethereum Virtual Machine. Unlike PolkaVM, which compiles contracts to RISC-V for native execution, REVM executes standard Ethereum bytecode directly—making it ideal for teams who want to migrate existing Solidity projects to Polkadot with minimal changes. With REVM, developers can: @@ -55,7 +62,3 @@ With REVM, developers can: - Interact with other parachains and on-chain assets using XCM and Polkadot Hub features. REVM builds on Rust’s safety guarantees and performance optimizations while retaining full opcode compatibility with the EVM. This provides a reliable path for Ethereum-native developers to access Polkadot’s cross-chain ecosystem. - -For more details, explore the REVM integration in the Polkadot Hub smart contract documentation. - -If you want to learn more about the dual virtual stack please go to the [DualVM Stack](polkadot-docs/smart-contracts/for-eth-devs/dual-vm-stack.md){target=_blank}. \ No newline at end of file From e85d02f901fc036573aee9971b2f764c1f2d2de3 Mon Sep 17 00:00:00 2001 From: Erin Shaben Date: Wed, 29 Oct 2025 01:08:57 -0400 Subject: [PATCH 21/28] fix target blank --- .ai/categories/polkadot-protocol.md | 2 +- .ai/pages/reference-polkadot-hub-assets.md | 2 +- .ai/site-index.json | 388 ++++++++++----------- llms-full.jsonl | 12 +- reference/polkadot-hub/assets.md | 2 +- 5 files changed, 203 insertions(+), 203 deletions(-) diff --git a/.ai/categories/polkadot-protocol.md b/.ai/categories/polkadot-protocol.md index d8c475b40..1e61238db 100644 --- a/.ai/categories/polkadot-protocol.md +++ b/.ai/categories/polkadot-protocol.md @@ -11922,7 +11922,7 @@ Data queries make it possible to: - Retrieve asset metadata and configuration details. - Inspect account and asset status on-chain. -For a full list of queries, see the [Pallet reference](https://docs.rs/pallet-assets/latest/pallet_assets/pallet/struct.Pallet.html){target=_blank}. +For a full list of queries, see the [Pallet reference](https://docs.rs/pallet-assets/latest/pallet_assets/pallet/struct.Pallet.html){target=\_blank}. ### Roles and Permissions diff --git a/.ai/pages/reference-polkadot-hub-assets.md b/.ai/pages/reference-polkadot-hub-assets.md index ecf8cb62a..a01507be9 100644 --- a/.ai/pages/reference-polkadot-hub-assets.md +++ b/.ai/pages/reference-polkadot-hub-assets.md @@ -75,7 +75,7 @@ Data queries make it possible to: - Retrieve asset metadata and configuration details. - Inspect account and asset status on-chain. -For a full list of queries, see the [Pallet reference](https://docs.rs/pallet-assets/latest/pallet_assets/pallet/struct.Pallet.html){target=_blank}. +For a full list of queries, see the [Pallet reference](https://docs.rs/pallet-assets/latest/pallet_assets/pallet/struct.Pallet.html){target=\_blank}. ### Roles and Permissions diff --git a/.ai/site-index.json b/.ai/site-index.json index 2e4d0df60..e48ab846d 100644 --- a/.ai/site-index.json +++ b/.ai/site-index.json @@ -17,7 +17,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-29T04:57:49+00:00", + "last_modified": "2025-10-29T05:08:28+00:00", "token_estimator": "heuristic-v1" }, { @@ -38,7 +38,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-29T04:57:49+00:00", + "last_modified": "2025-10-29T05:08:28+00:00", "token_estimator": "heuristic-v1" }, { @@ -59,7 +59,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-29T04:57:49+00:00", + "last_modified": "2025-10-29T05:08:28+00:00", "token_estimator": "heuristic-v1" }, { @@ -80,7 +80,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-29T04:57:49+00:00", + "last_modified": "2025-10-29T05:08:28+00:00", "token_estimator": "heuristic-v1" }, { @@ -101,7 +101,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-29T04:57:49+00:00", + "last_modified": "2025-10-29T05:08:28+00:00", "token_estimator": "heuristic-v1" }, { @@ -122,7 +122,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-29T04:57:49+00:00", + "last_modified": "2025-10-29T05:08:28+00:00", "token_estimator": "heuristic-v1" }, { @@ -234,7 +234,7 @@ "estimated_token_count_total": 4830 }, "hash": "sha256:a6bf7623a535e7a9162c0913b07bd59d43c8535025ad8225fb3e5adc83084c7a", - "last_modified": "2025-10-29T04:57:49+00:00", + "last_modified": "2025-10-29T05:08:28+00:00", "token_estimator": "heuristic-v1" }, { @@ -306,7 +306,7 @@ "estimated_token_count_total": 7755 }, "hash": "sha256:086a87823ab67ceac102358030e316583cd733c0ec326316e7f29061fe7f6934", - "last_modified": "2025-10-29T04:57:49+00:00", + "last_modified": "2025-10-29T05:08:28+00:00", "token_estimator": "heuristic-v1" }, { @@ -327,7 +327,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-29T04:57:49+00:00", + "last_modified": "2025-10-29T05:08:28+00:00", "token_estimator": "heuristic-v1" }, { @@ -389,7 +389,7 @@ "estimated_token_count_total": 5207 }, "hash": "sha256:91f59a76dd33641ca2b5bf6d58230f65034fa3cc5f8313525fb57e854a878a56", - "last_modified": "2025-10-29T04:57:49+00:00", + "last_modified": "2025-10-29T05:08:28+00:00", "token_estimator": "heuristic-v1" }, { @@ -481,7 +481,7 @@ "estimated_token_count_total": 2132 }, "hash": "sha256:1b9efd2fe00b251d3b4054c9cfcb55f9b5a1384238eeaca81a6f1542fc36d75c", - "last_modified": "2025-10-29T04:57:49+00:00", + "last_modified": "2025-10-29T05:08:28+00:00", "token_estimator": "heuristic-v1" }, { @@ -502,7 +502,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-29T04:57:49+00:00", + "last_modified": "2025-10-29T05:08:28+00:00", "token_estimator": "heuristic-v1" }, { @@ -569,7 +569,7 @@ "estimated_token_count_total": 4063 }, "hash": "sha256:bd07cdae71bf63786994865d2f33fba5f7bf8855dce6399414ad44ab0ec6635c", - "last_modified": "2025-10-29T04:57:49+00:00", + "last_modified": "2025-10-29T05:08:28+00:00", "token_estimator": "heuristic-v1" }, { @@ -626,7 +626,7 @@ "estimated_token_count_total": 2225 }, "hash": "sha256:e916033f54c2874eb5ce9a43d58af058eb935429f73b7b1acc7da1592218e0b8", - "last_modified": "2025-10-29T04:57:49+00:00", + "last_modified": "2025-10-29T05:08:28+00:00", "token_estimator": "heuristic-v1" }, { @@ -674,7 +674,7 @@ "estimated_token_count_total": 1523 }, "hash": "sha256:d9d85827d2c14bff8dd6b3301617345430cf63db603e37859720713004ecafae", - "last_modified": "2025-10-29T04:57:49+00:00", + "last_modified": "2025-10-29T05:08:28+00:00", "token_estimator": "heuristic-v1" }, { @@ -790,7 +790,7 @@ "estimated_token_count_total": 1635 }, "hash": "sha256:46252e238b0b51105148dc622da6d8809c55ec11da7ec7b2953c35ca52f5f585", - "last_modified": "2025-10-29T04:57:49+00:00", + "last_modified": "2025-10-29T05:08:28+00:00", "token_estimator": "heuristic-v1" }, { @@ -833,7 +833,7 @@ "estimated_token_count_total": 1491 }, "hash": "sha256:db37b2f5888f283b5eb5bd84a5f8c81fc66b2313e3f94f510a73dfeb310ae3f0", - "last_modified": "2025-10-29T04:57:50+00:00", + "last_modified": "2025-10-29T05:08:29+00:00", "token_estimator": "heuristic-v1" }, { @@ -900,7 +900,7 @@ "estimated_token_count_total": 955 }, "hash": "sha256:72ee7394fd1308c111a8d548cb4dc63c6b9bc5b6e2bb556dd1baacbaedb92286", - "last_modified": "2025-10-29T04:57:50+00:00", + "last_modified": "2025-10-29T05:08:29+00:00", "token_estimator": "heuristic-v1" }, { @@ -952,7 +952,7 @@ "estimated_token_count_total": 876 }, "hash": "sha256:d6cb22337280a19bdf24981dcba98f337d48ee4f79ce7ac040466ef1cb4b330b", - "last_modified": "2025-10-29T04:57:50+00:00", + "last_modified": "2025-10-29T05:08:29+00:00", "token_estimator": "heuristic-v1" }, { @@ -1034,7 +1034,7 @@ "estimated_token_count_total": 2744 }, "hash": "sha256:1a2d34ccab19bd71263763bbc294977acf34f5800398f51398753594cfc7d7a6", - "last_modified": "2025-10-29T04:57:50+00:00", + "last_modified": "2025-10-29T05:08:29+00:00", "token_estimator": "heuristic-v1" }, { @@ -1106,7 +1106,7 @@ "estimated_token_count_total": 608 }, "hash": "sha256:7bba6105d99721373aa6f494627d20af97b1851c19703f26be26c32f0c83524b", - "last_modified": "2025-10-29T04:57:50+00:00", + "last_modified": "2025-10-29T05:08:29+00:00", "token_estimator": "heuristic-v1" }, { @@ -1173,7 +1173,7 @@ "estimated_token_count_total": 558 }, "hash": "sha256:b79fe56c9604712825bdf30d17667fd8f237fce9691be0d8d042d38691dbba7a", - "last_modified": "2025-10-29T04:57:50+00:00", + "last_modified": "2025-10-29T05:08:29+00:00", "token_estimator": "heuristic-v1" }, { @@ -1225,7 +1225,7 @@ "estimated_token_count_total": 348 }, "hash": "sha256:11cd8d428fa9c3e70490da5c63ce4597cd89ec46306d2bb49b016ced6aa68c3d", - "last_modified": "2025-10-29T04:57:50+00:00", + "last_modified": "2025-10-29T05:08:29+00:00", "token_estimator": "heuristic-v1" }, { @@ -1273,7 +1273,7 @@ "estimated_token_count_total": 1365 }, "hash": "sha256:5f8fa89fc725c5c559975012fe2f9ae92c3b62f10024b5688dcd118331118f1a", - "last_modified": "2025-10-29T04:57:50+00:00", + "last_modified": "2025-10-29T05:08:29+00:00", "token_estimator": "heuristic-v1" }, { @@ -1326,7 +1326,7 @@ "estimated_token_count_total": 4979 }, "hash": "sha256:ed3b7c8101b69f9c907cca7c5edfef67fdb5e7bc3c8df8d9fbad297f9dd3c80a", - "last_modified": "2025-10-29T04:57:50+00:00", + "last_modified": "2025-10-29T05:08:29+00:00", "token_estimator": "heuristic-v1" }, { @@ -1383,7 +1383,7 @@ "estimated_token_count_total": 1781 }, "hash": "sha256:35c71a215558cd0642d363e4515ad240093995d42720e6495cd2994c859243e4", - "last_modified": "2025-10-29T04:57:50+00:00", + "last_modified": "2025-10-29T05:08:29+00:00", "token_estimator": "heuristic-v1" }, { @@ -1430,7 +1430,7 @@ "estimated_token_count_total": 1447 }, "hash": "sha256:0e39aee80fbcf3dfaa19133f31d664914ed45b42a1a929270f05d8ae876b89e2", - "last_modified": "2025-10-29T04:57:50+00:00", + "last_modified": "2025-10-29T05:08:29+00:00", "token_estimator": "heuristic-v1" }, { @@ -1477,7 +1477,7 @@ "estimated_token_count_total": 1082 }, "hash": "sha256:ec82957c768c2c07a272e7a28659c812b223df836e21372b1642f0bb249d7b39", - "last_modified": "2025-10-29T04:57:50+00:00", + "last_modified": "2025-10-29T05:08:29+00:00", "token_estimator": "heuristic-v1" }, { @@ -1519,7 +1519,7 @@ "estimated_token_count_total": 4178 }, "hash": "sha256:d480791a76082937b47c77f7cf3794e701f193452ed347fcb1c04c3c67577bf5", - "last_modified": "2025-10-29T04:57:50+00:00", + "last_modified": "2025-10-29T05:08:29+00:00", "token_estimator": "heuristic-v1" }, { @@ -1587,7 +1587,7 @@ "estimated_token_count_total": 6510 }, "hash": "sha256:353ad782303ef79bce1262bfa945e6f11b3c3c9ca1edf5705b778c46bada6200", - "last_modified": "2025-10-29T04:57:51+00:00", + "last_modified": "2025-10-29T05:08:31+00:00", "token_estimator": "heuristic-v1" }, { @@ -1650,7 +1650,7 @@ "estimated_token_count_total": 1520 }, "hash": "sha256:ed09ef7a6abe21204006186fd5791ada7597688fad67e30244dc449c51330309", - "last_modified": "2025-10-29T04:57:51+00:00", + "last_modified": "2025-10-29T05:08:31+00:00", "token_estimator": "heuristic-v1" }, { @@ -1946,7 +1946,7 @@ "estimated_token_count_total": 2005 }, "hash": "sha256:0becb82886d34e2ed23d963efd2c14120112e6e080ea4072e864531299b59753", - "last_modified": "2025-10-29T04:57:51+00:00", + "last_modified": "2025-10-29T05:08:31+00:00", "token_estimator": "heuristic-v1" }, { @@ -2013,7 +2013,7 @@ "estimated_token_count_total": 1944 }, "hash": "sha256:4fc8cab40e982e860b64d9aede1058fe7fa82ec321ac215b919db00c4df0a9c0", - "last_modified": "2025-10-29T04:57:51+00:00", + "last_modified": "2025-10-29T05:08:31+00:00", "token_estimator": "heuristic-v1" }, { @@ -2085,7 +2085,7 @@ "estimated_token_count_total": 3068 }, "hash": "sha256:9918593a46c12a1756552ddfaf7421ad6262600735b6f1fec030911420fe1736", - "last_modified": "2025-10-29T04:57:51+00:00", + "last_modified": "2025-10-29T05:08:31+00:00", "token_estimator": "heuristic-v1" }, { @@ -2167,7 +2167,7 @@ "estimated_token_count_total": 3025 }, "hash": "sha256:a60fe36a5ba6d1cafe12eab75300afd24a46d3ace1e791087adb7e3e538afcc3", - "last_modified": "2025-10-29T04:57:51+00:00", + "last_modified": "2025-10-29T05:08:31+00:00", "token_estimator": "heuristic-v1" }, { @@ -2219,7 +2219,7 @@ "estimated_token_count_total": 1289 }, "hash": "sha256:39c58dbe2ddcd542d7074d08d72f1811318dc8a3130419025480fd5cbe9fc3e7", - "last_modified": "2025-10-29T04:57:51+00:00", + "last_modified": "2025-10-29T05:08:31+00:00", "token_estimator": "heuristic-v1" }, { @@ -2464,7 +2464,7 @@ "estimated_token_count_total": 4719 }, "hash": "sha256:bfad885d8053d052c55dbffc3c09e6196586795c3a1d07ab6ad58f9006ec3345", - "last_modified": "2025-10-29T04:57:51+00:00", + "last_modified": "2025-10-29T05:08:31+00:00", "token_estimator": "heuristic-v1" }, { @@ -2526,7 +2526,7 @@ "estimated_token_count_total": 1819 }, "hash": "sha256:b0c1535fa8e969a9bdeee426a5a35a42b4649121fb8ce6fd2b15fdeba35b5d5f", - "last_modified": "2025-10-29T04:57:51+00:00", + "last_modified": "2025-10-29T05:08:31+00:00", "token_estimator": "heuristic-v1" }, { @@ -2910,7 +2910,7 @@ "estimated_token_count_total": 514 }, "hash": "sha256:e8ffeaa3a17e20437a59f2c95a63821eb75bf3c33001e748c23958b2b99ac3c2", - "last_modified": "2025-10-29T04:57:51+00:00", + "last_modified": "2025-10-29T05:08:31+00:00", "token_estimator": "heuristic-v1" }, { @@ -3312,7 +3312,7 @@ "estimated_token_count_total": 1618 }, "hash": "sha256:5cc63ff0a377ef0ec96a064748e13b88bc852bd1862c6e344066855a7fe93b19", - "last_modified": "2025-10-29T04:57:51+00:00", + "last_modified": "2025-10-29T05:08:31+00:00", "token_estimator": "heuristic-v1" }, { @@ -4086,7 +4086,7 @@ "estimated_token_count_total": 3847 }, "hash": "sha256:4b705b8dbe9b0ad8d19a897d91f3c64dbc4541297dadacbea2a31b4778e50a46", - "last_modified": "2025-10-29T04:57:53+00:00", + "last_modified": "2025-10-29T05:08:33+00:00", "token_estimator": "heuristic-v1" }, { @@ -4780,7 +4780,7 @@ "estimated_token_count_total": 847 }, "hash": "sha256:a206dd86fc3d80aed22384000839ca0c9c75c69ad461abd9810d96c03cf6a3bd", - "last_modified": "2025-10-29T04:57:53+00:00", + "last_modified": "2025-10-29T05:08:33+00:00", "token_estimator": "heuristic-v1" }, { @@ -4852,7 +4852,7 @@ "estimated_token_count_total": 6280 }, "hash": "sha256:9b03477d13a285fced6bf845c3827084f790a626989dc2c09ef9ff53643045f4", - "last_modified": "2025-10-29T04:57:53+00:00", + "last_modified": "2025-10-29T05:08:33+00:00", "token_estimator": "heuristic-v1" }, { @@ -5325,7 +5325,7 @@ "estimated_token_count_total": 999 }, "hash": "sha256:6d6c66430a7302f29113924c5208e64d7c244497e50c61ab2f45c4b5141620e4", - "last_modified": "2025-10-29T04:57:53+00:00", + "last_modified": "2025-10-29T05:08:33+00:00", "token_estimator": "heuristic-v1" }, { @@ -5387,7 +5387,7 @@ "estimated_token_count_total": 1863 }, "hash": "sha256:7086406b31e7aa9089b221ffaa548ee5540a3d147ec1e93136f481c883f2e434", - "last_modified": "2025-10-29T04:57:53+00:00", + "last_modified": "2025-10-29T05:08:33+00:00", "token_estimator": "heuristic-v1" }, { @@ -5474,7 +5474,7 @@ "estimated_token_count_total": 1870 }, "hash": "sha256:3b766e00e55a224201bc6744386a6dabc7da54ed9199b16abab3b94cff449eca", - "last_modified": "2025-10-29T04:57:53+00:00", + "last_modified": "2025-10-29T05:08:33+00:00", "token_estimator": "heuristic-v1" }, { @@ -5630,7 +5630,7 @@ "estimated_token_count_total": 2661 }, "hash": "sha256:04e85c4cddb58252f8253d78a3924bb56952dac2a3e9a057704a91a0d1f21d75", - "last_modified": "2025-10-29T04:57:53+00:00", + "last_modified": "2025-10-29T05:08:33+00:00", "token_estimator": "heuristic-v1" }, { @@ -5662,7 +5662,7 @@ "estimated_token_count_total": 2073 }, "hash": "sha256:9836ab7da420e9ca8196da77dc3ff8198cb3b622548842d0505c0aa043a5f02e", - "last_modified": "2025-10-29T04:57:53+00:00", + "last_modified": "2025-10-29T05:08:33+00:00", "token_estimator": "heuristic-v1" }, { @@ -5734,7 +5734,7 @@ "estimated_token_count_total": 579 }, "hash": "sha256:4c33d0ec5026128b3bfdb1dfc1f4b29487404eaa8043071d536e8638356c6e1f", - "last_modified": "2025-10-29T04:57:53+00:00", + "last_modified": "2025-10-29T05:08:33+00:00", "token_estimator": "heuristic-v1" }, { @@ -5776,7 +5776,7 @@ "estimated_token_count_total": 557 }, "hash": "sha256:993e93b05c8fbdfc2f7510c61ac86bc4c2ff0f03e573695b2f260933c8b62f78", - "last_modified": "2025-10-29T04:57:53+00:00", + "last_modified": "2025-10-29T05:08:33+00:00", "token_estimator": "heuristic-v1" }, { @@ -6699,7 +6699,7 @@ "estimated_token_count_total": 1044 }, "hash": "sha256:d84a5af1a0237a911d25a68c077f508ebbce608f673ef4f9055e8e434daa96b9", - "last_modified": "2025-10-29T04:57:53+00:00", + "last_modified": "2025-10-29T05:08:33+00:00", "token_estimator": "heuristic-v1" }, { @@ -6766,7 +6766,7 @@ "estimated_token_count_total": 4197 }, "hash": "sha256:b83e3f77bd30ac8c8fb00a193bbec33cd641d94f1a37ac611dea32326c3d77b0", - "last_modified": "2025-10-29T04:57:53+00:00", + "last_modified": "2025-10-29T05:08:33+00:00", "token_estimator": "heuristic-v1" }, { @@ -6823,7 +6823,7 @@ "estimated_token_count_total": 1280 }, "hash": "sha256:992082e4ad87348b283f6c37ea886ae0e7bf016852b6470000876f3d169c65a4", - "last_modified": "2025-10-29T04:57:53+00:00", + "last_modified": "2025-10-29T05:08:33+00:00", "token_estimator": "heuristic-v1" }, { @@ -6885,7 +6885,7 @@ "estimated_token_count_total": 1840 }, "hash": "sha256:0fb5a83835aab263c0b9aa886028c8aa8a2d6d0897d7b9fff4b5258835d30dfe", - "last_modified": "2025-10-29T04:57:53+00:00", + "last_modified": "2025-10-29T05:08:33+00:00", "token_estimator": "heuristic-v1" }, { @@ -6967,7 +6967,7 @@ "estimated_token_count_total": 2592 }, "hash": "sha256:d2c1c91734bc8185057d8eeec6829ea91e0316f7ba884c5dc3922a5e5778815e", - "last_modified": "2025-10-29T04:57:53+00:00", + "last_modified": "2025-10-29T05:08:33+00:00", "token_estimator": "heuristic-v1" }, { @@ -7054,7 +7054,7 @@ "estimated_token_count_total": 3864 }, "hash": "sha256:a4235e8d590033d5d54434143e0a5e23603c53ae70d4f0a9ebfe4ca9442baa8d", - "last_modified": "2025-10-29T04:57:54+00:00", + "last_modified": "2025-10-29T05:08:33+00:00", "token_estimator": "heuristic-v1" }, { @@ -7101,7 +7101,7 @@ "estimated_token_count_total": 629 }, "hash": "sha256:0d6db361bfa7a3022849bbe39989bfdac0429537498d7f534adadec131afca98", - "last_modified": "2025-10-29T04:57:54+00:00", + "last_modified": "2025-10-29T05:08:33+00:00", "token_estimator": "heuristic-v1" }, { @@ -7213,7 +7213,7 @@ "estimated_token_count_total": 5866 }, "hash": "sha256:81eb0fe77f05155f1ec0511cd066120fc9994961e9d91e21b6666377e65b4586", - "last_modified": "2025-10-29T04:57:54+00:00", + "last_modified": "2025-10-29T05:08:33+00:00", "token_estimator": "heuristic-v1" }, { @@ -7265,7 +7265,7 @@ "estimated_token_count_total": 861 }, "hash": "sha256:1af153570ce57bd5b52d08493a300996765686f2a6d04519a2e0aa91191612c1", - "last_modified": "2025-10-29T04:57:54+00:00", + "last_modified": "2025-10-29T05:08:33+00:00", "token_estimator": "heuristic-v1" }, { @@ -7322,7 +7322,7 @@ "estimated_token_count_total": 1185 }, "hash": "sha256:888230b128d8c648c4f06a18d3b1d1b06dd1bf22a0de4add1f28210ffccb2549", - "last_modified": "2025-10-29T04:57:54+00:00", + "last_modified": "2025-10-29T05:08:33+00:00", "token_estimator": "heuristic-v1" }, { @@ -7369,7 +7369,7 @@ "estimated_token_count_total": 1485 }, "hash": "sha256:46435b97c37ef6798d2c75c69df31c5e5f07e04b218c370ec5af6b1838d43aac", - "last_modified": "2025-10-29T04:57:54+00:00", + "last_modified": "2025-10-29T05:08:33+00:00", "token_estimator": "heuristic-v1" }, { @@ -7436,7 +7436,7 @@ "estimated_token_count_total": 3409 }, "hash": "sha256:abe6bedab04f463ec07f554977b8d6355a5d2fad9bcda01cbe58568152295daa", - "last_modified": "2025-10-29T04:57:54+00:00", + "last_modified": "2025-10-29T05:08:33+00:00", "token_estimator": "heuristic-v1" }, { @@ -7488,7 +7488,7 @@ "estimated_token_count_total": 2588 }, "hash": "sha256:d5d6d72eb2cf10f624d84c65f2274f7df90acb5d071bf170bc8eae8d98a810a5", - "last_modified": "2025-10-29T04:57:54+00:00", + "last_modified": "2025-10-29T05:08:33+00:00", "token_estimator": "heuristic-v1" }, { @@ -7580,7 +7580,7 @@ "estimated_token_count_total": 2724 }, "hash": "sha256:93d123cbaaccc2515b4a70be8e1327b4f75b1051d16c5e3daf5a2035af7b7ca3", - "last_modified": "2025-10-29T04:57:54+00:00", + "last_modified": "2025-10-29T05:08:33+00:00", "token_estimator": "heuristic-v1" }, { @@ -7707,7 +7707,7 @@ "estimated_token_count_total": 3811 }, "hash": "sha256:d83e574726c524fa017236eb5e3b8a0676d598be4da1ce4fe25a60141baeee49", - "last_modified": "2025-10-29T04:57:54+00:00", + "last_modified": "2025-10-29T05:08:33+00:00", "token_estimator": "heuristic-v1" }, { @@ -7749,7 +7749,7 @@ "estimated_token_count_total": 901 }, "hash": "sha256:f56a32d5323c371f084833b4e647f21e1d76ad242d8c4e4826bcaed467acc7cf", - "last_modified": "2025-10-29T04:57:54+00:00", + "last_modified": "2025-10-29T05:08:33+00:00", "token_estimator": "heuristic-v1" }, { @@ -7802,7 +7802,7 @@ "estimated_token_count_total": 3091 }, "hash": "sha256:87add0ae178e4970601a27efccadb58eff1375d19819201034ba2829914f1cd5", - "last_modified": "2025-10-29T04:57:55+00:00", + "last_modified": "2025-10-29T05:08:35+00:00", "token_estimator": "heuristic-v1" }, { @@ -7869,7 +7869,7 @@ "estimated_token_count_total": 3338 }, "hash": "sha256:915bc91edd56cdedd516e871dbe450d70c9f99fb467cc00ff231ea3a74f61d96", - "last_modified": "2025-10-29T04:57:55+00:00", + "last_modified": "2025-10-29T05:08:35+00:00", "token_estimator": "heuristic-v1" }, { @@ -7936,7 +7936,7 @@ "estimated_token_count_total": 3997 }, "hash": "sha256:1d324a805f33a41ae1e5c3998f2979c74217ce433a29ff48969f1ea9882cdeaa", - "last_modified": "2025-10-29T04:57:55+00:00", + "last_modified": "2025-10-29T05:08:35+00:00", "token_estimator": "heuristic-v1" }, { @@ -7988,7 +7988,7 @@ "estimated_token_count_total": 1576 }, "hash": "sha256:733652ec4eff9b11efd858a7fd7f1094e7a2e8e7deed4c60c5805f986d877df4", - "last_modified": "2025-10-29T04:57:55+00:00", + "last_modified": "2025-10-29T05:08:35+00:00", "token_estimator": "heuristic-v1" }, { @@ -8045,7 +8045,7 @@ "estimated_token_count_total": 1563 }, "hash": "sha256:8568dfa238b9a649a4e6e60510625c2e7879b76a93187b0b8b8dccf6bc467ae6", - "last_modified": "2025-10-29T04:57:55+00:00", + "last_modified": "2025-10-29T05:08:35+00:00", "token_estimator": "heuristic-v1" }, { @@ -8113,7 +8113,7 @@ "estimated_token_count_total": 2292 }, "hash": "sha256:759ed27cf3d473445e33141089b652082c42a2c59eb822d6b506146fd9555e13", - "last_modified": "2025-10-29T04:57:55+00:00", + "last_modified": "2025-10-29T05:08:35+00:00", "token_estimator": "heuristic-v1" }, { @@ -8196,7 +8196,7 @@ "estimated_token_count_total": 2709 }, "hash": "sha256:2ee5656f749b4bca445172f2bc66c7fc39af40ff173626662ae4c399f49cf909", - "last_modified": "2025-10-29T04:57:55+00:00", + "last_modified": "2025-10-29T05:08:35+00:00", "token_estimator": "heuristic-v1" }, { @@ -8234,7 +8234,7 @@ "estimated_token_count_total": 428 }, "hash": "sha256:cfcc76bb24779c9b613f2c046b6f99a0f2529c25fd82287d804f6b945b936227", - "last_modified": "2025-10-29T04:57:55+00:00", + "last_modified": "2025-10-29T05:08:35+00:00", "token_estimator": "heuristic-v1" }, { @@ -8267,7 +8267,7 @@ "estimated_token_count_total": 245 }, "hash": "sha256:6d8e01281a5895fd2bc4438b24c170c72a496de0b838626a53e87685aea4aa25", - "last_modified": "2025-10-29T04:57:55+00:00", + "last_modified": "2025-10-29T05:08:35+00:00", "token_estimator": "heuristic-v1" }, { @@ -8305,7 +8305,7 @@ "estimated_token_count_total": 633 }, "hash": "sha256:62c5ad101282227f79eac0e30a3ba9ce3ae1bf9e358bd58c0b17ef45db29c2ff", - "last_modified": "2025-10-29T04:57:55+00:00", + "last_modified": "2025-10-29T05:08:35+00:00", "token_estimator": "heuristic-v1" }, { @@ -8377,7 +8377,7 @@ "estimated_token_count_total": 2285 }, "hash": "sha256:b8de1228b9976765accd18ff724038bed6f2449367f500bc3177ab2a053abe63", - "last_modified": "2025-10-29T04:57:55+00:00", + "last_modified": "2025-10-29T05:08:35+00:00", "token_estimator": "heuristic-v1" }, { @@ -8429,7 +8429,7 @@ "estimated_token_count_total": 1427 }, "hash": "sha256:b501d99c464fb049d46676827b6a325a195c90617becc4a7db305441c115350a", - "last_modified": "2025-10-29T04:57:55+00:00", + "last_modified": "2025-10-29T05:08:35+00:00", "token_estimator": "heuristic-v1" }, { @@ -8487,7 +8487,7 @@ "estimated_token_count_total": 1501 }, "hash": "sha256:3b26606dd5310c4b8ade5d05270ebf1e06f59afcda4ca2b985e07948215a197e", - "last_modified": "2025-10-29T04:57:55+00:00", + "last_modified": "2025-10-29T05:08:35+00:00", "token_estimator": "heuristic-v1" }, { @@ -8575,7 +8575,7 @@ "estimated_token_count_total": 3296 }, "hash": "sha256:fde940bced4380fc01b1840907059d03f6d47b6cb54bf78c95269ac57adbc99e", - "last_modified": "2025-10-29T04:57:55+00:00", + "last_modified": "2025-10-29T05:08:35+00:00", "token_estimator": "heuristic-v1" }, { @@ -8657,7 +8657,7 @@ "estimated_token_count_total": 2103 }, "hash": "sha256:15154f211753665d9af70dc81d15ceb3f0954e3febf9282c68c0074881d620c6", - "last_modified": "2025-10-29T04:57:55+00:00", + "last_modified": "2025-10-29T05:08:35+00:00", "token_estimator": "heuristic-v1" }, { @@ -8735,7 +8735,7 @@ "estimated_token_count_total": 2379 }, "hash": "sha256:637b9460bb65621cbc7c1bff272ea287d5181a983bc61418167959e108e21791", - "last_modified": "2025-10-29T04:57:55+00:00", + "last_modified": "2025-10-29T05:08:35+00:00", "token_estimator": "heuristic-v1" }, { @@ -8835,7 +8835,7 @@ "estimated_token_count_total": 1161 }, "hash": "sha256:ec31270001a6cd9d0a8ecb7974ad161d5c1ef4d3023d5a6af9fbc5a6ca46cbca", - "last_modified": "2025-10-29T04:57:55+00:00", + "last_modified": "2025-10-29T05:08:35+00:00", "token_estimator": "heuristic-v1" }, { @@ -8907,7 +8907,7 @@ "estimated_token_count_total": 4014 }, "hash": "sha256:55dc252fdecf1590048ce8d009b822e90231442abe81e9593cf1635944a31336", - "last_modified": "2025-10-29T04:57:56+00:00", + "last_modified": "2025-10-29T05:08:36+00:00", "token_estimator": "heuristic-v1" }, { @@ -8959,7 +8959,7 @@ "estimated_token_count_total": 2028 }, "hash": "sha256:e408d05199cc184fc6fe8bb212efb3c9aa6cb79258977e07566692176c912def", - "last_modified": "2025-10-29T04:57:56+00:00", + "last_modified": "2025-10-29T05:08:36+00:00", "token_estimator": "heuristic-v1" }, { @@ -9032,7 +9032,7 @@ "estimated_token_count_total": 2614 }, "hash": "sha256:4325cdd697814b8043db808da3dee86d3d9c6fc7dd523aae7fe8914d59d1b39c", - "last_modified": "2025-10-29T04:57:56+00:00", + "last_modified": "2025-10-29T05:08:36+00:00", "token_estimator": "heuristic-v1" }, { @@ -9125,7 +9125,7 @@ "estimated_token_count_total": 9871 }, "hash": "sha256:0d7e04fd952cc9d5bd8cdbfd87cc4004c5f95e896a16bc7f89dfc4caeac8f371", - "last_modified": "2025-10-29T04:57:56+00:00", + "last_modified": "2025-10-29T05:08:36+00:00", "token_estimator": "heuristic-v1" }, { @@ -9173,7 +9173,7 @@ "estimated_token_count_total": 1125 }, "hash": "sha256:9875239c6071033a37a0f67fabca5a6e840c4a287620309f47b4f29c5a95a1cb", - "last_modified": "2025-10-29T04:57:56+00:00", + "last_modified": "2025-10-29T05:08:36+00:00", "token_estimator": "heuristic-v1" }, { @@ -9237,7 +9237,7 @@ "estimated_token_count_total": 1861 }, "hash": "sha256:932c12e1af939698279ede2eacb2190e1f56119582adf2064d6cf86f7a4f3e3c", - "last_modified": "2025-10-29T04:57:56+00:00", + "last_modified": "2025-10-29T05:08:36+00:00", "token_estimator": "heuristic-v1" }, { @@ -9770,7 +9770,7 @@ "estimated_token_count_total": 1230 }, "hash": "sha256:8d186fa56ccbbf4b6c85cffc5521b9a99a20e9517f3b4a435730745803cbf2e8", - "last_modified": "2025-10-29T04:57:56+00:00", + "last_modified": "2025-10-29T05:08:36+00:00", "token_estimator": "heuristic-v1" }, { @@ -9838,7 +9838,7 @@ "estimated_token_count_total": 1643 }, "hash": "sha256:100377787627052a29bd1173270b5ad307639b828c331e71c85d4c00bc5692d8", - "last_modified": "2025-10-29T04:57:56+00:00", + "last_modified": "2025-10-29T05:08:36+00:00", "token_estimator": "heuristic-v1" }, { @@ -11495,7 +11495,7 @@ "estimated_token_count_total": 5305 }, "hash": "sha256:fe651be49fe0a9ae899b2cbf9c663325f407718dc63f1d2c6a2dc4931be751fa", - "last_modified": "2025-10-29T04:57:56+00:00", + "last_modified": "2025-10-29T05:08:36+00:00", "token_estimator": "heuristic-v1" }, { @@ -11563,7 +11563,7 @@ "estimated_token_count_total": 891 }, "hash": "sha256:b5acdc9acf0e44836b8a4518155eba7d16cc3b103c557a00970ffb1c44c3e9f6", - "last_modified": "2025-10-29T04:57:56+00:00", + "last_modified": "2025-10-29T05:08:36+00:00", "token_estimator": "heuristic-v1" }, { @@ -11616,7 +11616,7 @@ "estimated_token_count_total": 2570 }, "hash": "sha256:e2cf14bcb483308f73a80c8e8871ce1a86fa694576d2e6e51beafc24488f4d58", - "last_modified": "2025-10-29T04:57:56+00:00", + "last_modified": "2025-10-29T05:08:36+00:00", "token_estimator": "heuristic-v1" }, { @@ -12006,7 +12006,7 @@ "estimated_token_count_total": 5273 }, "hash": "sha256:40bd67811e7eabc79ca5d105eae388b19380d9f035022da17fc0d6bb173c817c", - "last_modified": "2025-10-29T04:57:56+00:00", + "last_modified": "2025-10-29T05:08:36+00:00", "token_estimator": "heuristic-v1" }, { @@ -12048,7 +12048,7 @@ "estimated_token_count_total": 631 }, "hash": "sha256:baba9dd41091b792d09005d55d3df0bf65b35f42b40ebe63caf425a0978a22b0", - "last_modified": "2025-10-29T04:57:56+00:00", + "last_modified": "2025-10-29T05:08:36+00:00", "token_estimator": "heuristic-v1" }, { @@ -12146,7 +12146,7 @@ "estimated_token_count_total": 6507 }, "hash": "sha256:0104a9132a69345a2faac37fca0e2853a2ded1efb009511a83a98d44509ab887", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -12209,7 +12209,7 @@ "estimated_token_count_total": 1395 }, "hash": "sha256:424783c102bea5dae5b8749635858c6c59055563442a98f57521f0027dafa8d3", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -12307,7 +12307,7 @@ "estimated_token_count_total": 4464 }, "hash": "sha256:7d0c3fa7982b3e1843adb8f27422456397580b3a3eba5047b381da8517742536", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -12440,7 +12440,7 @@ "estimated_token_count_total": 4699 }, "hash": "sha256:547f062b248779f0b3e823778120c4f32e449937b6f270ddf97378bc6d795c62", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -12538,7 +12538,7 @@ "estimated_token_count_total": 3774 }, "hash": "sha256:49238d1e9e2c33e0fcd3a84b5e30f0d3840d7d23a783b538875e0a23f38efc1d", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -12559,7 +12559,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -12621,7 +12621,7 @@ "estimated_token_count_total": 1440 }, "hash": "sha256:2d228c52844df8952520fafdd3e6f0e26bfd2f32b5ee60c6241cf7d38603643c", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -12704,7 +12704,7 @@ "estimated_token_count_total": 1797 }, "hash": "sha256:259dcef86aadc513675258b665cc3940db65af6eb32a5db85da6ac339966fa60", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -12777,7 +12777,7 @@ "estimated_token_count_total": 3213 }, "hash": "sha256:e448294b6e52291ac0add5fa6533572814e6cd27af42bdaccc2000b86f52d775", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -12835,7 +12835,7 @@ "estimated_token_count_total": 772 }, "hash": "sha256:11bb4f113bdda5852a3115e64d5ba47f8eccd4e3619a05ad960ab3a541f31346", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -12909,7 +12909,7 @@ "estimated_token_count_total": 1473 }, "hash": "sha256:e49e063a2cc0fb5a48c6cdc3de266bb6e025a006940fea8e90cc4d5f9884900f", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -12982,7 +12982,7 @@ "estimated_token_count_total": 914 }, "hash": "sha256:8122e21c149d0863cfe3b37fc5606bcdb91668e9d265f0f05451a61ff70e4e93", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -13035,7 +13035,7 @@ "estimated_token_count_total": 1388 }, "hash": "sha256:c7d8a5a4263fd21af458ab0bd102377104affdf2431b4fe74eeff4ebe62a4a81", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -13238,13 +13238,13 @@ } ], "stats": { - "chars": 7356, + "chars": 7357, "words": 1055, "headings": 11, - "estimated_token_count_total": 1473 + "estimated_token_count_total": 1474 }, - "hash": "sha256:6917138eb8eda0bd4b3a08f4851ce9385f1d32ba4ebb6c21c64ef6e7038bcf90", - "last_modified": "2025-10-29T04:57:57+00:00", + "hash": "sha256:cb64c965363eca622b5a8e82915ee52546a906c2451d70f8ea62917af4900c46", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -13296,7 +13296,7 @@ "estimated_token_count_total": 1220 }, "hash": "sha256:86734ba8bcdea7913f488edf666a6104bed0a18649d57abde82c149c41c2b871", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -13328,7 +13328,7 @@ "estimated_token_count_total": 424 }, "hash": "sha256:59ec351fbb8d3a392e90f4f5bf6b62f58b21d6d7a900c5e367e5d2e09ecb3aca", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -13375,7 +13375,7 @@ "estimated_token_count_total": 619 }, "hash": "sha256:00be43ac8d666bbe15c5c2fa5a5085697d0bb5a6f341ebbb943a209f0be355df", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -13462,7 +13462,7 @@ "estimated_token_count_total": 2526 }, "hash": "sha256:231fc555eefe5f910fb36e0c03945147d0fb235272850797391751f4444b0a9c", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -13541,7 +13541,7 @@ "estimated_token_count_total": 2571 }, "hash": "sha256:8a914e4309d4fe7070e62d7abe4665b6c76c8dc5ec3219332eccb16b77b0dd95", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -13603,7 +13603,7 @@ "estimated_token_count_total": 876 }, "hash": "sha256:8239d1e8d8642cb7c10e9e5f971c99b999e9e4a87373b50bf4a691225c1e4702", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -13635,7 +13635,7 @@ "estimated_token_count_total": 256 }, "hash": "sha256:1858e8db96e5c22abe65778435ed75706571bb89332452919547150163d14509", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -13656,7 +13656,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -13724,7 +13724,7 @@ "estimated_token_count_total": 2300 }, "hash": "sha256:ba24e31e2ad94fbf1d73f1878da92dd2e1476db00170780bbdf0e65ab18bc961", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -13782,7 +13782,7 @@ "estimated_token_count_total": 1430 }, "hash": "sha256:1284c42be692167e01bcc44e2e134ec20615402675fac26df246c00aa1588d80", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -13850,7 +13850,7 @@ "estimated_token_count_total": 2453 }, "hash": "sha256:2c77cfb38bb2e466a8f56dabbb706fcd2e90cf1634fc9beb7f0ee95a75735653", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -13918,7 +13918,7 @@ "estimated_token_count_total": 2018 }, "hash": "sha256:a87815deff81936d7f50842f8600004990076c1a33e7e6b408ab954b6ce47259", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -13971,7 +13971,7 @@ "estimated_token_count_total": 1987 }, "hash": "sha256:2ca93b09d3bb9159bbf53816886a9b242bb3c13b996c51fd52962e049e2d5477", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -14003,7 +14003,7 @@ "estimated_token_count_total": 669 }, "hash": "sha256:a7f9c4a03153ee637a0557d2cea0b622c849667ce793b1294bb3299cf036197d", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -14076,7 +14076,7 @@ "estimated_token_count_total": 1084 }, "hash": "sha256:7f533abe61586af8438e350c41b741d74a8edb839f9dc4139bc4619ba3748258", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -14144,7 +14144,7 @@ "estimated_token_count_total": 1166 }, "hash": "sha256:ed3986f30880fefca5975fcdc847c68b4aca65862c63e3002b25391b0521781d", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -14202,7 +14202,7 @@ "estimated_token_count_total": 942 }, "hash": "sha256:8987fc35cd28602054ee018031f773e2e3837425107c51d0e2ac68a94b86e9c0", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -14255,7 +14255,7 @@ "estimated_token_count_total": 1945 }, "hash": "sha256:0795462182cb97256bb5c2acb035855fe0d6557185de8ac99482725ecb4f94c1", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -14328,7 +14328,7 @@ "estimated_token_count_total": 2187 }, "hash": "sha256:56269d9ea47f5b4e92cd7d5a1e65ab06d181a9c380f90bb3ef285529b12299f7", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -14387,7 +14387,7 @@ "estimated_token_count_total": 1700 }, "hash": "sha256:47328231d6ff4dc52cd93aaf1baf5d0bc2d9fc372f3d79339d87aafa0dabd1b8", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -14408,7 +14408,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -14445,7 +14445,7 @@ "estimated_token_count_total": 558 }, "hash": "sha256:a2490223926957381913ae0ed22e2df3611a6713ec9d77a3015d1cd6a578b3f6", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -14466,7 +14466,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -14524,7 +14524,7 @@ "estimated_token_count_total": 2671 }, "hash": "sha256:2a42198668c759f63aa602115bf2d290ec7d03bbc3a3df20e30e85027e1b1cc3", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -14545,7 +14545,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -14599,7 +14599,7 @@ "estimated_token_count_total": 2107 }, "hash": "sha256:296cba75b1d49aefa1b8636ba95ca20c3431b7eb0e93b0658add671ef5801732", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -14653,7 +14653,7 @@ "estimated_token_count_total": 2264 }, "hash": "sha256:4e3ac6affdbe93ce9d132cbb838be1dfaf7a629b0e1f10ce4d90cc3899d656cb", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -14674,7 +14674,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -14695,7 +14695,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -14772,7 +14772,7 @@ "estimated_token_count_total": 6228 }, "hash": "sha256:72e41f816f07026d96c803f399c71852aa1151c464e79cec3e1746b282d5eaae", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -14793,7 +14793,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -14814,7 +14814,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -14835,7 +14835,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -14856,7 +14856,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -14877,7 +14877,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -14955,7 +14955,7 @@ "estimated_token_count_total": 4190 }, "hash": "sha256:1729ad83ad381a90752540644d400c60add3555e5da296ab455442be81d32f8c", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -14976,7 +14976,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -14997,7 +14997,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -15018,7 +15018,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -15060,7 +15060,7 @@ "estimated_token_count_total": 2430 }, "hash": "sha256:e3d8b84cb2cee7010978582998b2269296a042aec53fb016388690ab6adf355e", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -15081,7 +15081,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -15144,7 +15144,7 @@ "estimated_token_count_total": 1347 }, "hash": "sha256:7589fa1dbdbf5748892ab6d42fc784d833f33e254bd3f95ee58424effcd38323", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -15165,7 +15165,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -15186,7 +15186,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -15229,7 +15229,7 @@ "estimated_token_count_total": 309 }, "hash": "sha256:93e8a3043d65583e3d66f8f5f0ed6f4ef89a908ef85da2b6ca906a1100b7dded", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -15266,7 +15266,7 @@ "estimated_token_count_total": 313 }, "hash": "sha256:c609bc98cba5efa2d2a808548cf93ad9d0a06455b35a8fd9f534daf52824f506", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -15334,7 +15334,7 @@ "estimated_token_count_total": 1818 }, "hash": "sha256:f50cd1177dd4aff8eb031d6f21cb640f8187a7f2dd0edcaef5c73354a378e44d", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -15397,7 +15397,7 @@ "estimated_token_count_total": 1182 }, "hash": "sha256:9542f40acae725e628f4c3155ad1e7e0e18b2eb518484856ad439a1d9f86d1f3", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -15480,7 +15480,7 @@ "estimated_token_count_total": 1133 }, "hash": "sha256:0792e3956242eb8e08ab82e2d73964c381074cc8b1ea46f396d136856fa6cc07", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -15533,7 +15533,7 @@ "estimated_token_count_total": 994 }, "hash": "sha256:6992c9a2d1b315b64d9782880105cf2d436750249a84577aceb95cc213863009", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -15590,7 +15590,7 @@ "estimated_token_count_total": 1046 }, "hash": "sha256:dd29fab6e3c00d720b10effa4e50373a6fe9ab4b7bfd3aea892c7fa9c84318a2", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -15787,7 +15787,7 @@ "estimated_token_count_total": 9750 }, "hash": "sha256:1fb7a20bc4a799a771954720428029419ec73afa640e589590c43dd041a7e307", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -15808,7 +15808,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -15866,7 +15866,7 @@ "estimated_token_count_total": 2840 }, "hash": "sha256:224a9f69d4613a5f1afdbc1f05379add8321fe159e32c71db003bbe08ff8e976", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -15887,7 +15887,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -15908,7 +15908,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -15961,7 +15961,7 @@ "estimated_token_count_total": 1627 }, "hash": "sha256:65809486f62f60c6a6ac8109f9f027361683c23f639991a045ec5c057b665026", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -16049,7 +16049,7 @@ "estimated_token_count_total": 4474 }, "hash": "sha256:c74a28d8d62369591c5734535136508db3d1f7380e486fd214f98d433cafd6e7", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -16142,7 +16142,7 @@ "estimated_token_count_total": 3891 }, "hash": "sha256:e27657e4e4a14fe86f424b96631946ec36fb90d277e6010b6cbd64c4769aba8a", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -16215,7 +16215,7 @@ "estimated_token_count_total": 3250 }, "hash": "sha256:bc771f912627fa09cad64adab1bc81c052f650d6c5a3b4f0c91883a98f6628da", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -16288,7 +16288,7 @@ "estimated_token_count_total": 3035 }, "hash": "sha256:f0d36333d0d3afff7f6374a61d0f6d1fb878c9ef4c4e4c24447745661dbe59d0", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -16341,7 +16341,7 @@ "estimated_token_count_total": 2509 }, "hash": "sha256:205892e350168b3d0da7ccc280c67c3217ad1e45e87a53d124fa1dd69661aa5e", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -16414,7 +16414,7 @@ "estimated_token_count_total": 1122 }, "hash": "sha256:ee87115c828928c82937de26f5f938cecd4c3bb1225fdb61627e8092e6ea5951", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -16435,7 +16435,7 @@ "estimated_token_count_total": 0 }, "hash": "sha256:56ba36249ea8216ad513b13df3de6c0e490ba214897674d30331f1c7e7edbef3", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -16523,7 +16523,7 @@ "estimated_token_count_total": 2276 }, "hash": "sha256:4856172c6356357818234a3b7f0828716bd32e6192f3609c51de0cafcc5a75e7", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -16590,7 +16590,7 @@ "estimated_token_count_total": 2249 }, "hash": "sha256:1368f6d49bccb7ba0e642cc58ea2c97ca95ae45e390cb9fa2ab11b0b41de52f4", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -16960,7 +16960,7 @@ "estimated_token_count_total": 2764 }, "hash": "sha256:a2bba0ba575bd7e3f7199282ea5994087acf2c62e828f316e6eb62c9a43449e1", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -17042,7 +17042,7 @@ "estimated_token_count_total": 34492 }, "hash": "sha256:bef820acfe429d4a847a8de82de6c70155ac6b3ad5ebdd574a2157923b45f688", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -17188,7 +17188,7 @@ "estimated_token_count_total": 5338 }, "hash": "sha256:b3530f5fc5c9e916181dbc259a7fbae9c60100cb0450fc6d47bbb0d140afa075", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -17260,7 +17260,7 @@ "estimated_token_count_total": 4358 }, "hash": "sha256:87b19f6e881611329b7015e8d8187d7d85b2b2ef14b01e832c8b8e20897e3b40", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -17317,7 +17317,7 @@ "estimated_token_count_total": 2138 }, "hash": "sha256:ff2c267284959711782c0d6ecb4b439c3a6cc31f763d5e1ff2cc3b1f6efb62b2", - "last_modified": "2025-10-29T04:57:57+00:00", + "last_modified": "2025-10-29T05:08:37+00:00", "token_estimator": "heuristic-v1" }, { @@ -17369,7 +17369,7 @@ "estimated_token_count_total": 2929 }, "hash": "sha256:df60044893f48dd7f37a11de275a16bf32adb31317ed70a789fd7fac64150e1a", - "last_modified": "2025-10-29T04:57:58+00:00", + "last_modified": "2025-10-29T05:08:38+00:00", "token_estimator": "heuristic-v1" }, { @@ -17461,7 +17461,7 @@ "estimated_token_count_total": 4789 }, "hash": "sha256:81750202081ff24447f4e129c49230eedb315d1b44c740b677c3495a8f7adb9a", - "last_modified": "2025-10-29T04:57:58+00:00", + "last_modified": "2025-10-29T05:08:38+00:00", "token_estimator": "heuristic-v1" }, { @@ -17543,7 +17543,7 @@ "estimated_token_count_total": 2452 }, "hash": "sha256:1eb463c6b2732ebed0d16165425cde438688d21cc302f759b40250850c2a5e83", - "last_modified": "2025-10-29T04:57:58+00:00", + "last_modified": "2025-10-29T05:08:38+00:00", "token_estimator": "heuristic-v1" }, { @@ -17606,7 +17606,7 @@ "estimated_token_count_total": 3255 }, "hash": "sha256:fe94de6f97fb588552f6cbc6b1a4c7399e91f5f31585f61a0dee66f5f50ff8a0", - "last_modified": "2025-10-29T04:57:58+00:00", + "last_modified": "2025-10-29T05:08:38+00:00", "token_estimator": "heuristic-v1" }, { @@ -17939,7 +17939,7 @@ "estimated_token_count_total": 2702 }, "hash": "sha256:1f8ab387f721d865a7ca75eaa2528f1f2ebd4528a7d65ffeb27c68953100a3cb", - "last_modified": "2025-10-29T04:57:58+00:00", + "last_modified": "2025-10-29T05:08:38+00:00", "token_estimator": "heuristic-v1" }, { @@ -18008,7 +18008,7 @@ "estimated_token_count_total": 2564 }, "hash": "sha256:97dadddf4c27f469f552875461fc54d331fa151e4656401e15d6d4173115eecf", - "last_modified": "2025-10-29T04:57:58+00:00", + "last_modified": "2025-10-29T05:08:38+00:00", "token_estimator": "heuristic-v1" }, { @@ -18227,7 +18227,7 @@ "estimated_token_count_total": 1760 }, "hash": "sha256:9cf70459e921b8b231a3f2e7a7c1d47a4917e45f0c4d0fe873ad4062fd540a9a", - "last_modified": "2025-10-29T04:57:58+00:00", + "last_modified": "2025-10-29T05:08:38+00:00", "token_estimator": "heuristic-v1" }, { @@ -18300,7 +18300,7 @@ "estimated_token_count_total": 5118 }, "hash": "sha256:de7fde61d4cac9c28634ee496dcabe116fe44b1b87408f202103290d78247c05", - "last_modified": "2025-10-29T04:58:02+00:00", + "last_modified": "2025-10-29T05:08:41+00:00", "token_estimator": "heuristic-v1" }, { @@ -18383,7 +18383,7 @@ "estimated_token_count_total": 6206 }, "hash": "sha256:cb8ddb4a61f6a62182420b69382f1c7ab2adc2f4ae643f7f68c6867680afe81f", - "last_modified": "2025-10-29T04:58:05+00:00", + "last_modified": "2025-10-29T05:08:45+00:00", "token_estimator": "heuristic-v1" }, { @@ -18446,7 +18446,7 @@ "estimated_token_count_total": 4135 }, "hash": "sha256:ca1d65d450f086a0eb7b81e9589e9894e04b217fe9709a1b464f09beb3ca9dc2", - "last_modified": "2025-10-29T04:58:08+00:00", + "last_modified": "2025-10-29T05:08:47+00:00", "token_estimator": "heuristic-v1" } ] \ No newline at end of file diff --git a/llms-full.jsonl b/llms-full.jsonl index 326846f16..5bcfc6cfd 100644 --- a/llms-full.jsonl +++ b/llms-full.jsonl @@ -1764,12 +1764,12 @@ {"page_id": "reference-polkadot-hub-assets", "page_title": "Polkadot Hub Assets", "index": 2, "depth": 2, "title": "Types of Assets", "anchor": "types-of-assets", "start_char": 1466, "end_char": 1930, "estimated_token_count": 91, "token_estimator": "heuristic-v1", "text": "## Types of Assets\n\nPolkadot Hub supports two types of assets:\n\n- **Native assets**: Tokens and NFTs issued directly on Polkadot Hub using the Assets pallet. These assets benefit from the platform's custom features, such as configurable permissions and low fees\n- **Foreign assets**: Tokens originating from other Polkadot parachains or external networks (like Ethereum, via bridges). Once registered on Polkadot Hub, they are treated similarly to native assets."} {"page_id": "reference-polkadot-hub-assets", "page_title": "Polkadot Hub Assets", "index": 3, "depth": 2, "title": "Asset Structure", "anchor": "asset-structure", "start_char": 1930, "end_char": 2361, "estimated_token_count": 80, "token_estimator": "heuristic-v1", "text": "## Asset Structure\n\nEach asset is identified by a unique ID and stores:\n\n- Asset administrators\n- Total supply and holder count\n- Minimum balance configuration\n- Sufficiency–whether the asset can keep an account alive without DOT\n- Metadata (name, symbol, decimals)\n\nIf a balance falls below the configured minimum, it may be removed as “dust.” This ensures efficient storage while giving developers control over asset economics."} {"page_id": "reference-polkadot-hub-assets", "page_title": "Polkadot Hub Assets", "index": 4, "depth": 2, "title": "How Native Assets Work", "anchor": "how-native-assets-work", "start_char": 2361, "end_char": 2937, "estimated_token_count": 111, "token_estimator": "heuristic-v1", "text": "## How Native Assets Work\n\nNative assets on Polkadot Hub are created and managed via the Assets pallet from the Polkadot SDK. This pallet defines the runtime logic for issuing, configuring, and administering fungible assets with customizable permissions.\n\nIt supports both permissioned and permissionless asset creation, enabling everything from simple user-issued tokens to governed assets controlled by teams or DAOs.\n\nFor implementation details, see the [Assets Pallet Rust docs](https://paritytech.github.io/polkadot-sdk/master/pallet_assets/index.html){target=\\_blank}."} -{"page_id": "reference-polkadot-hub-assets", "page_title": "Polkadot Hub Assets", "index": 5, "depth": 3, "title": "Asset Operations", "anchor": "asset-operations", "start_char": 2937, "end_char": 3993, "estimated_token_count": 242, "token_estimator": "heuristic-v1", "text": "### Asset Operations\n\nThe Assets pallet provides both state-changing operations and read-only queries for full lifecycle management of assets.\n\nCore operations include:\n\n- **Asset issuance**: Create new assets and assign initial supply.\n- **Transfers**: Move assets between accounts with balance tracking.\n- **Burning**: Reduce total supply by destroying tokens.\n- **Delegated transfers**: Approve transfers on behalf of another account without giving up custody.\n- **Freezing and thawing**: Temporarily lock and unlock an account's balance.\n\nFor a complete list of extrinsics, see the [`pallet-assets` dispatchable functions reference](https://docs.rs/pallet-assets/latest/pallet_assets/pallet/enum.Call.html){target=\\_blank}.\n\nData queries make it possible to:\n\n- Check account balances and total supply.\n- Retrieve asset metadata and configuration details.\n- Inspect account and asset status on-chain.\n\nFor a full list of queries, see the [Pallet reference](https://docs.rs/pallet-assets/latest/pallet_assets/pallet/struct.Pallet.html){target=_blank}."} -{"page_id": "reference-polkadot-hub-assets", "page_title": "Polkadot Hub Assets", "index": 6, "depth": 3, "title": "Roles and Permissions", "anchor": "roles-and-permissions", "start_char": 3993, "end_char": 4789, "estimated_token_count": 159, "token_estimator": "heuristic-v1", "text": "### Roles and Permissions\n\nThe Assets pallet uses role-based permissions to control who can manage different parts of an asset’s lifecycle:\n\n- **Owner**: Overarching control, including destroying an asset class; can set or update Issuer, Freezer, and Admin roles.\n- **Admin**: Can freeze assets and forcibly transfer balances between accounts. Admins can also reduce the balance of an asset class across arbitrary accounts.\n- **Issuer**: Responsible for minting new tokens. When new assets are created, the Issuer is the account that controls their distribution to other accounts.\n- **Freezer**: Can lock the transfer of assets from an account, preventing the account holder from moving their balance.\n\nThese roles allow projects to enforce governance and security policies around their assets."} -{"page_id": "reference-polkadot-hub-assets", "page_title": "Polkadot Hub Assets", "index": 7, "depth": 3, "title": "Freezing Assets", "anchor": "freezing-assets", "start_char": 4789, "end_char": 5311, "estimated_token_count": 106, "token_estimator": "heuristic-v1", "text": "### Freezing Assets\n\nAssets can be temporarily locked to prevent transfers from specific accounts. This is useful for dispute resolution, fraud prevention, or compliance controls.\n\n**How it works**:\n\n- Only authorized parties can freeze or unfreeze (thaw) assets.\n- Freezing pauses the movement of the asset without burning or removing it.\n- Once thawed, the asset can be transferred normally.\n\nFreezing provides a safe way to control asset flow while maintaining full ownership.\n\n**Key functions**: `freeze` and `thaw`."} -{"page_id": "reference-polkadot-hub-assets", "page_title": "Polkadot Hub Assets", "index": 8, "depth": 3, "title": "Delegated Transfers", "anchor": "delegated-transfers", "start_char": 5311, "end_char": 6046, "estimated_token_count": 138, "token_estimator": "heuristic-v1", "text": "### Delegated Transfers\n\nPolkadot Hub supports delegated asset transfers, allowing one account to authorize another to move a limited amount of its assets—without giving up full control. This is useful for escrow logic, automated payments, and multi-party applications.\n\n**How it works**:\n\n- An account can grant permission to another account to transfer a specific amount of its assets.\n- Permissions can be revoked at any time, preventing further transfers.\n- Authorized accounts can execute transfers on behalf of the original owner within the approved limits.\n\nDelegated transfers simplify multi-step transactions and enable complex asset flows.\n\n**Key functions**: `approve_transfer`, `cancel_approval`, and `transfer_approved`."} -{"page_id": "reference-polkadot-hub-assets", "page_title": "Polkadot Hub Assets", "index": 9, "depth": 2, "title": "How Foreign Assets Work", "anchor": "how-foreign-assets-work", "start_char": 6046, "end_char": 6969, "estimated_token_count": 170, "token_estimator": "heuristic-v1", "text": "## How Foreign Assets Work\n\nForeign assets are assets originating from other chains and are managed on Polkadot Hub via the Foreign Assets pallet. This pallet provides similar operations as the native Assets pallet, enabling transfers, balance checks, and other standard asset operations. Most operations—like transfers and balance queries—use the same API, but with a few key differences:\n\n- **Asset Identifier**: Foreign assets use an XCM multilocation as their identifier, rather than a numeric AssetId. This ensures assets from different chains can be referenced and moved safely across parachains.\n\n- **Transfers**: Once registered on Polkadot Hub, foreign assets can be transferred between accounts just like native assets. If supported, they can also be returned to their original blockchain using cross-chain messaging.\n\nThis unified interface makes it easy for dApps to handle both native and cross-chain assets."} -{"page_id": "reference-polkadot-hub-assets", "page_title": "Polkadot Hub Assets", "index": 10, "depth": 2, "title": "Moving Assets Across Chains", "anchor": "moving-assets-across-chains", "start_char": 6969, "end_char": 7356, "estimated_token_count": 72, "token_estimator": "heuristic-v1", "text": "## Moving Assets Across Chains\n\nPolkadot Hub enables assets to move safely between parachains and the relay chain using XCM (Cross-Consensus Messaging). XCM ensures assets can move securely between chains while preserving ownership and traceability\n\nTo learn more about asset transfers with XCM, please refer to the [Introduction to XCM](/parachains/interoperability/get-started/) page."} +{"page_id": "reference-polkadot-hub-assets", "page_title": "Polkadot Hub Assets", "index": 5, "depth": 3, "title": "Asset Operations", "anchor": "asset-operations", "start_char": 2937, "end_char": 3994, "estimated_token_count": 243, "token_estimator": "heuristic-v1", "text": "### Asset Operations\n\nThe Assets pallet provides both state-changing operations and read-only queries for full lifecycle management of assets.\n\nCore operations include:\n\n- **Asset issuance**: Create new assets and assign initial supply.\n- **Transfers**: Move assets between accounts with balance tracking.\n- **Burning**: Reduce total supply by destroying tokens.\n- **Delegated transfers**: Approve transfers on behalf of another account without giving up custody.\n- **Freezing and thawing**: Temporarily lock and unlock an account's balance.\n\nFor a complete list of extrinsics, see the [`pallet-assets` dispatchable functions reference](https://docs.rs/pallet-assets/latest/pallet_assets/pallet/enum.Call.html){target=\\_blank}.\n\nData queries make it possible to:\n\n- Check account balances and total supply.\n- Retrieve asset metadata and configuration details.\n- Inspect account and asset status on-chain.\n\nFor a full list of queries, see the [Pallet reference](https://docs.rs/pallet-assets/latest/pallet_assets/pallet/struct.Pallet.html){target=\\_blank}."} +{"page_id": "reference-polkadot-hub-assets", "page_title": "Polkadot Hub Assets", "index": 6, "depth": 3, "title": "Roles and Permissions", "anchor": "roles-and-permissions", "start_char": 3994, "end_char": 4790, "estimated_token_count": 159, "token_estimator": "heuristic-v1", "text": "### Roles and Permissions\n\nThe Assets pallet uses role-based permissions to control who can manage different parts of an asset’s lifecycle:\n\n- **Owner**: Overarching control, including destroying an asset class; can set or update Issuer, Freezer, and Admin roles.\n- **Admin**: Can freeze assets and forcibly transfer balances between accounts. Admins can also reduce the balance of an asset class across arbitrary accounts.\n- **Issuer**: Responsible for minting new tokens. When new assets are created, the Issuer is the account that controls their distribution to other accounts.\n- **Freezer**: Can lock the transfer of assets from an account, preventing the account holder from moving their balance.\n\nThese roles allow projects to enforce governance and security policies around their assets."} +{"page_id": "reference-polkadot-hub-assets", "page_title": "Polkadot Hub Assets", "index": 7, "depth": 3, "title": "Freezing Assets", "anchor": "freezing-assets", "start_char": 4790, "end_char": 5312, "estimated_token_count": 106, "token_estimator": "heuristic-v1", "text": "### Freezing Assets\n\nAssets can be temporarily locked to prevent transfers from specific accounts. This is useful for dispute resolution, fraud prevention, or compliance controls.\n\n**How it works**:\n\n- Only authorized parties can freeze or unfreeze (thaw) assets.\n- Freezing pauses the movement of the asset without burning or removing it.\n- Once thawed, the asset can be transferred normally.\n\nFreezing provides a safe way to control asset flow while maintaining full ownership.\n\n**Key functions**: `freeze` and `thaw`."} +{"page_id": "reference-polkadot-hub-assets", "page_title": "Polkadot Hub Assets", "index": 8, "depth": 3, "title": "Delegated Transfers", "anchor": "delegated-transfers", "start_char": 5312, "end_char": 6047, "estimated_token_count": 138, "token_estimator": "heuristic-v1", "text": "### Delegated Transfers\n\nPolkadot Hub supports delegated asset transfers, allowing one account to authorize another to move a limited amount of its assets—without giving up full control. This is useful for escrow logic, automated payments, and multi-party applications.\n\n**How it works**:\n\n- An account can grant permission to another account to transfer a specific amount of its assets.\n- Permissions can be revoked at any time, preventing further transfers.\n- Authorized accounts can execute transfers on behalf of the original owner within the approved limits.\n\nDelegated transfers simplify multi-step transactions and enable complex asset flows.\n\n**Key functions**: `approve_transfer`, `cancel_approval`, and `transfer_approved`."} +{"page_id": "reference-polkadot-hub-assets", "page_title": "Polkadot Hub Assets", "index": 9, "depth": 2, "title": "How Foreign Assets Work", "anchor": "how-foreign-assets-work", "start_char": 6047, "end_char": 6970, "estimated_token_count": 170, "token_estimator": "heuristic-v1", "text": "## How Foreign Assets Work\n\nForeign assets are assets originating from other chains and are managed on Polkadot Hub via the Foreign Assets pallet. This pallet provides similar operations as the native Assets pallet, enabling transfers, balance checks, and other standard asset operations. Most operations—like transfers and balance queries—use the same API, but with a few key differences:\n\n- **Asset Identifier**: Foreign assets use an XCM multilocation as their identifier, rather than a numeric AssetId. This ensures assets from different chains can be referenced and moved safely across parachains.\n\n- **Transfers**: Once registered on Polkadot Hub, foreign assets can be transferred between accounts just like native assets. If supported, they can also be returned to their original blockchain using cross-chain messaging.\n\nThis unified interface makes it easy for dApps to handle both native and cross-chain assets."} +{"page_id": "reference-polkadot-hub-assets", "page_title": "Polkadot Hub Assets", "index": 10, "depth": 2, "title": "Moving Assets Across Chains", "anchor": "moving-assets-across-chains", "start_char": 6970, "end_char": 7357, "estimated_token_count": 72, "token_estimator": "heuristic-v1", "text": "## Moving Assets Across Chains\n\nPolkadot Hub enables assets to move safely between parachains and the relay chain using XCM (Cross-Consensus Messaging). XCM ensures assets can move securely between chains while preserving ownership and traceability\n\nTo learn more about asset transfers with XCM, please refer to the [Introduction to XCM](/parachains/interoperability/get-started/) page."} {"page_id": "reference-polkadot-hub-bridging", "page_title": "Bridge Hub", "index": 0, "depth": 2, "title": "Introduction", "anchor": "introduction", "start_char": 14, "end_char": 1065, "estimated_token_count": 184, "token_estimator": "heuristic-v1", "text": "## Introduction\n\nThe Bridge Hub system parachain plays a crucial role in facilitating trustless interactions between Polkadot, Kusama, Ethereum, and other blockchain ecosystems. By implementing on-chain light clients and supporting protocols like BEEFY and GRANDPA, Bridge Hub ensures seamless message transmission and state verification across chains. It also provides essential [pallets](/reference/glossary/#pallet){target=\\_blank} for sending and receiving messages, making it a cornerstone of Polkadot’s interoperability framework. With built-in support for XCM (Cross-Consensus Messaging), Bridge Hub enables secure, efficient communication between diverse blockchain networks.\n\nThis guide covers the architecture, components, and deployment of the Bridge Hub system. You'll explore its trustless bridging mechanisms, key pallets for various blockchains, and specific implementations like Snowbridge and the Polkadot <> Kusama bridge. By the end, you'll understand how Bridge Hub enhances connectivity within the Polkadot ecosystem and beyond."} {"page_id": "reference-polkadot-hub-bridging", "page_title": "Bridge Hub", "index": 1, "depth": 2, "title": "Trustless Bridging", "anchor": "trustless-bridging", "start_char": 1065, "end_char": 2671, "estimated_token_count": 313, "token_estimator": "heuristic-v1", "text": "## Trustless Bridging\n\nBridge Hub provides a mode of trustless bridging through its implementation of on-chain light clients and trustless relayers. Trustless bridges are essentially two one-way bridges, where each chain has a method of verifying the state of the other in a trustless manner through consensus proofs. In this context, \"trustless\" refers to the lack of need to trust a human when interacting with various system components. Trustless systems are based instead on trusting mathematics, cryptography, and code. The target chain and source chain both provide ways of verifying one another's state and actions (such as a transfer) based on the consensus and finality of both chains rather than an external mechanism controlled by a third party.\n\n[BEEFY (Bridge Efficiency Enabling Finality Yielder)](/reference/polkadot-hub/consensus-and-security/pos-consensus/#bridging-beefy){target=\\_blank} is instrumental in this solution. It provides a more efficient way to verify the consensus on the relay chain. It allows the participants in a network to verify finality proofs, meaning a remote chain like Ethereum can verify the state of Polkadot at a given block height. \n\nFor example, the Ethereum and Polkadot bridging solution that [Snowbridge](https://docs.snowbridge.network/){target=\\_blank} implements involves two light clients: one which verifies the state of Polkadot and the other which verifies the state of Ethereum. The light client for Polkadot is implemented in the runtime as a pallet, whereas the light client for Ethereum is implemented as a smart contract on the beacon chain."} {"page_id": "reference-polkadot-hub-bridging", "page_title": "Bridge Hub", "index": 2, "depth": 2, "title": "Bridging Components", "anchor": "bridging-components", "start_char": 2671, "end_char": 3623, "estimated_token_count": 242, "token_estimator": "heuristic-v1", "text": "## Bridging Components\n\nIn any given Bridge Hub implementation (Kusama, Polkadot, or other relay chains), there are a few primary pallets that are utilized:\n\n- **[Pallet Bridge GRANDPA](https://paritytech.github.io/polkadot-sdk/master/pallet_bridge_grandpa/index.html){target=\\_blank}**: An on-chain GRANDPA light client for Substrate based chains.\n- **[Pallet Bridge Parachains](https://paritytech.github.io/polkadot-sdk/master/pallet_bridge_parachains/index.html){target=\\_blank}**: A finality module for parachains.\n- **[Pallet Bridge Messages](https://paritytech.github.io/polkadot-sdk/master/pallet_bridge_messages/index.html){target=\\_blank}**: A pallet which allows sending, receiving, and tracking of inbound and outbound messages.\n- **[Pallet XCM Bridge](https://paritytech.github.io/polkadot-sdk/master/pallet_xcm_bridge_hub/index.html){target=\\_blank}**: A pallet which, with the Bridge Messages pallet, adds XCM support to bridge pallets."} diff --git a/reference/polkadot-hub/assets.md b/reference/polkadot-hub/assets.md index 98d96752b..a792f47c7 100644 --- a/reference/polkadot-hub/assets.md +++ b/reference/polkadot-hub/assets.md @@ -74,7 +74,7 @@ Data queries make it possible to: - Retrieve asset metadata and configuration details. - Inspect account and asset status on-chain. -For a full list of queries, see the [Pallet reference](https://docs.rs/pallet-assets/latest/pallet_assets/pallet/struct.Pallet.html){target=_blank}. +For a full list of queries, see the [Pallet reference](https://docs.rs/pallet-assets/latest/pallet_assets/pallet/struct.Pallet.html){target=\_blank}. ### Roles and Permissions From b646a7c6738e138cb48a26ecc86816024f7548f4 Mon Sep 17 00:00:00 2001 From: Andreja Markovic <104647242+kapetan3sid@users.noreply.github.com> Date: Wed, 29 Oct 2025 14:14:28 +0100 Subject: [PATCH 22/28] Update reference/polkadot-hub/smart-contracts.md Co-authored-by: Bruno Galvao --- reference/polkadot-hub/smart-contracts.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reference/polkadot-hub/smart-contracts.md b/reference/polkadot-hub/smart-contracts.md index a9a51d37a..541bb367b 100644 --- a/reference/polkadot-hub/smart-contracts.md +++ b/reference/polkadot-hub/smart-contracts.md @@ -10,7 +10,7 @@ categories: Polkadot Protocol ## Introduction -Polkadot’s relay chain does not support smart contracts directly. Instead, developers deploy contract-based applications on parachains that provide execution environments. Polkadot Hub supports smart contracts through the REVM, a Rust-based Ethereum Virtual Machine compatible runtime. +Polkadot Hub introduces native support for smart contracts through REVM, a high-performance, Rust-based implementation of the Ethereum Virtual Machine. This enables developers to deploy and interact with Solidity contracts directly on Polkadot Hub, combining Ethereum compatibility with Polkadot’s cross-chain interoperability and shared security. REVM enables developers to run standard Ethereum bytecode on Polkadot Hub, giving teams a path to migrate existing Solidity contracts while interacting with on-chain assets and other parachains via XCM. From 5a32ab5e9152ccca90286cc5e89b87cc386de622 Mon Sep 17 00:00:00 2001 From: Andreja Markovic <104647242+kapetan3sid@users.noreply.github.com> Date: Wed, 29 Oct 2025 14:14:49 +0100 Subject: [PATCH 23/28] Update reference/polkadot-hub/smart-contracts.md Co-authored-by: Bruno Galvao --- reference/polkadot-hub/smart-contracts.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reference/polkadot-hub/smart-contracts.md b/reference/polkadot-hub/smart-contracts.md index 541bb367b..df4886431 100644 --- a/reference/polkadot-hub/smart-contracts.md +++ b/reference/polkadot-hub/smart-contracts.md @@ -12,7 +12,7 @@ categories: Polkadot Protocol Polkadot Hub introduces native support for smart contracts through REVM, a high-performance, Rust-based implementation of the Ethereum Virtual Machine. This enables developers to deploy and interact with Solidity contracts directly on Polkadot Hub, combining Ethereum compatibility with Polkadot’s cross-chain interoperability and shared security. -REVM enables developers to run standard Ethereum bytecode on Polkadot Hub, giving teams a path to migrate existing Solidity contracts while interacting with on-chain assets and other parachains via XCM. +REVM brings Ethereum compatibility to Polkadot Hub, letting developers run Solidity contracts alongside Polkadot’s native features—such as governance, treasury, multisig, and XCM—within a unified, interoperable runtime environment. This guide explains how smart contracts are deployed, executed, and integrated on Polkadot Hub using REVM. From eeeb8f38da646acedc2b9ea38ac82313cf165b75 Mon Sep 17 00:00:00 2001 From: Andreja Markovic <104647242+kapetan3sid@users.noreply.github.com> Date: Wed, 29 Oct 2025 14:15:09 +0100 Subject: [PATCH 24/28] Update reference/polkadot-hub/smart-contracts.md Co-authored-by: Bruno Galvao --- reference/polkadot-hub/smart-contracts.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reference/polkadot-hub/smart-contracts.md b/reference/polkadot-hub/smart-contracts.md index df4886431..bb92cadab 100644 --- a/reference/polkadot-hub/smart-contracts.md +++ b/reference/polkadot-hub/smart-contracts.md @@ -21,8 +21,8 @@ This guide explains how smart contracts are deployed, executed, and integrated o Polkadot Hub supports multiple smart contract environments, giving developers the freedom to choose the workflow and tooling that best fits their project: -- **PolkaVM**: A next-generation virtual machine designed specifically for Polkadot. Built on a high-performance [RISC-V-based register architecture](https://en.wikipedia.org/wiki/RISC-V){target=_blank}, PolkaVM enables fast, scalable execution and is optimized for modern smart contract development. - **REVM**: The [REVM backend](https://github.com/bluealloy/revm){target=_blank} brings a full Rust implementation of the EVM to Polkadot Hub. This allows developers to deploy existing Solidity contracts without modification, preserving compatibility with Ethereum tools and libraries. +- **PolkaVM**: A next-generation virtual machine designed specifically for Polkadot. Built on a high-performance [RISC-V-based register architecture](https://en.wikipedia.org/wiki/RISC-V){target=_blank}, PolkaVM enables fast, scalable execution and is optimized for modern smart contract development. Each of these environments is fully compatible with Polkadot Hub, giving teams the option to reuse Ethereum code, build with Rust security guarantees, or explore high-performance innovation with PolkaVM. From 2bb5f11a96e5cb1259442e363870ea3b790ec8d3 Mon Sep 17 00:00:00 2001 From: Andreja Markovic <104647242+kapetan3sid@users.noreply.github.com> Date: Wed, 29 Oct 2025 14:15:21 +0100 Subject: [PATCH 25/28] Update reference/polkadot-hub/smart-contracts.md Co-authored-by: Bruno Galvao --- reference/polkadot-hub/smart-contracts.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reference/polkadot-hub/smart-contracts.md b/reference/polkadot-hub/smart-contracts.md index bb92cadab..e377e6e95 100644 --- a/reference/polkadot-hub/smart-contracts.md +++ b/reference/polkadot-hub/smart-contracts.md @@ -19,7 +19,7 @@ This guide explains how smart contracts are deployed, executed, and integrated o -### REVM Contracts +### REVM Smart Contracts From 074614ce4ecc5b689c99081f805b0d9dd3538c66 Mon Sep 17 00:00:00 2001 From: Andreja Markovic <104647242+kapetan3sid@users.noreply.github.com> Date: Wed, 29 Oct 2025 14:16:12 +0100 Subject: [PATCH 28/28] Update reference/polkadot-hub/smart-contracts.md Co-authored-by: Bruno Galvao --- reference/polkadot-hub/smart-contracts.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reference/polkadot-hub/smart-contracts.md b/reference/polkadot-hub/smart-contracts.md index e786f12db..8bf47419b 100644 --- a/reference/polkadot-hub/smart-contracts.md +++ b/reference/polkadot-hub/smart-contracts.md @@ -17,7 +17,7 @@ REVM brings Ethereum compatibility to Polkadot Hub, letting developers run Solid This guide explains how smart contracts are deployed, executed, and integrated on Polkadot Hub using REVM.