Valeur minimale requise de ada
Les UTXO sur le grand livre peuvent contenir une collection hétérogène de tokens, y compris ada, qui est une ressource limitée dans le système Cardano. Le fait d'exiger qu'une certaine quantité d'ada soit incluse dans chaque UTXO (cette quantité étant basée sur la taille de l'UTXO, en bytes), limite la taille totale maximale occupée par les entrées UTXO sur le ledger à un moment donné.
La taille maximale possible de l'UTXO (la somme des tailles de toutes les entrées de l'UTXO) est implicitement ajustée en augmentant et en diminuant le paramètre min-ada-value . De cette façon, la contrainte protège le ledger Cardano contre toute croissance au-delà d'une certaine taille. Un grand livre sans limite de taille risque d'être peuplé d'une telle quantité de données que les utilisateurs seront incapables de le traiter (ou de faire fonctionner un nœud) avec des machines répondant aux spécifications recommandées pour faire fonctionner un nœud.
Le cas de l'ada seule
En raison de la contrainte de la valeur min-ada-value, une limite garantie sur le nombre d'entrées dans une UTXO purement ada est la suivante:
max No. UTxOs <= (total ada in circulation) / (minimum ada value)
Cette formule limite le nombre d'entrées UTXO, mais ne dit rien sur l'ajustement de la taille de chaque entrée, car toutes les entrées UTXO qui ne contiennent que des ada sont (assez près) de la même taille. La taille de l'ensemble UTXO est bornée par:
max UTxO size <= (max No. UTxOs) * (max UTxO entry size) + overhead
Dans le ledger Cardano multi-actifs, les entrées UTXO auront des tailles différentes. En particulier, toute entrée contenant un actif non-ada contient des enregistrements des identifiants de politique, des noms d'actifs et des quantités de chacun des actifs non-ada. Pour maintenir la limite de taille maximale des UTXO stockés dans le grand livre avec des tailles d'entrée variables, nous devons ajuster la valeur minimale d'ada pour chaque entrée UTXO, en fonction de sa taille.
Nous présentons ci-dessous un calcul et une justification plus détaillée de cet ajustement.
Calcul de Min-ada-value
Le montant minimal d'ada qui doit être contenu dans chaque UTXO purement ada sans données supplémentaires (c'est-à-dire un UTXO contenant uniquement l'adresse et le montant d'ada) est un paramètre de protocole du système Cardano, appelé: minUTxOValue
La taille d'un tel UTXO a une limite supérieure : adaOnlyUTxOSize
Nous pouvons calculer la limite supérieure de la taille d'un UTXO u contenant des tokens non-ada : sizeBound (u)
Nous voulons calculer le min-ada nécessaire pour être contenu dans u : minAda (u)
Un montant minUTxOValue de ada paie pour adaOnlyUTxOSize bytes de stockage UTXO sur le ledger. Pour que la min-ada-value soit proportionnelle pour tous les UTXOs, la proportion suivante doit être satisfaite:
minUTxOValue / adaOnlyUTxOSize = minAda (u) / sizeBound (u)
Le calcul de min-ada pour tout UTXO se rapproche de la formule ci-dessus. Cela utilise les constantes
coinSize = 0 (note : ceci est une erreur d'implémentation, et sera changé à la valeur correcte, 2, dans le prochain fork. Cela diminuera la valeur minimale de l'ada d'un petit pourcentage)
utxoEntrySizeWithoutVal = 27
adaOnlyUTxOSize = utxoEntrySizeWithoutVal + coinSize = 27
Les fonctions utilisées dans la formule ci-dessous sont:
quot a b est le quotient de (a, b), c'est-à-dire que, quot 11 5 = 2 car 11 = 5 * 2 + 1
numAssets le nombre d' AssetIDs distincts dans B, par exemple, si B = [(policyID1, myAssetNameSBS, 10), (policyID1, yourAssetNameSBS, 5), (policyID2, someAssetNameSBS, 250), (policyID3, someAssetNameSBS, 43)]
numAssets B = 4
numPIDs: le nombre de PolicyIDs distincts dans B par exemple, si B est comme ci-dessus, numPIDs B = 3 (qui sont policyID1, policyID2, policyID3)
sumAssetNameLengths: la somme de la longueur des ByteStrings représentant des noms d'actifs distincts, par exemple, si B est comme ci-dessus,
sumAssetNameLengths B = length myAssetNameSBS + length yourAssetNameSBS + length someAssetNameSBS
pidSize: la longueur du hachage d'une politique (c'est-à-dire la longueur du PolicyID). Ces longueurs sont les mêmes pour toutes les politiques et sont dictées par l'algorithme de hachage actuel utilisé pour calculer les hachages des adresses de paiement et de staking.
pidSize B = 28 actuellement (également, dans la prochaine ère)
roundupBytesToWords convertit les bytes en mots de huit bytes, en arrondissant à l'unité supérieure roundupBytesToWords b = quot (b + 7) 8
size B est la taille du paquet de tokens B en mots longs de 8 octets: size B = 6 + roundupBytesToWords (((numAssets B) * 12) + (sumAssetNameLengths B) + ((numPids B) * pidSize))
Pour une UTXO contenant un paquet de tokens B, le calcul de min-ada-value est le suivant :
- Cas 1 : Le paquet de tokens B dans l'UTXO u contient seulement ada (pas d'autres tokens) minAda (u) = minUTxOValue
- Cas 2 : Le paquet de tokens B dans l'UTXO u contient ada ainsi que d'autres tokens minAda (u) = max (minUTxOValue, (quot (minUTxOValue, adaOnlyUTxOSize)) * (utxoEntrySizeWithoutVal + (size B)))
En conséquence de cette conception,
- Il est impossible de réaliser des sorties contenant uniquement des tokens personnalisés
- Le nombre de chaque type de token dans une sortie n'affecte pas la min-ada-value de la sortie, mais le nombre de types de tokens contenus dans une sortie augmente la min-value.
- La raison en est que les noms et les ID de politique de chacun des types de tokens occupent un espace supplémentaire dans la sortie.
- L'envoi de tokens personnalisés à une adresse implique toujours l'envoi de la valeur minimale d'ada à cette adresse avec les tokens personnalisés (en incluant l'ada dans la même sortie). Si - l'adresse n'est pas dépensable par l'utilisateur qui envoie les tokens, l'ada envoyé avec les tokens n'appartient plus à l'expéditeur.
- Avant de transférer des tokens personnalisés, les utilisateurs peuvent choisir d'utiliser la communication hors chaîne pour négocier qui fournit l'ada pour couvrir la valeur minimale de l'ada dans la sortie faite par la transaction de transfert
- Pour récupérer l'ada stocké avec les tokens personnalisés dans une sortie O, l'utilisateur doit soit : a) Dépenser la sortie O, et brûler les tokens personnalisés qui y sont stockés b) Dépenser une sortie O et une sortie O', et consolider les tokens qui y sont stockés avec la même collection de types de tokens personnalisés stockés dans une autre sortie (dépensés dans la même transaction) Ex, (CryptoDoggiesPolicy, poodle, 1) contenu dans O peut être consolidé avec (CryptoDoggiesPolicy, poodle, 3) dans O', pour un total de (CryptoDoggiesPolicy, poodle, 4) dans une nouvelle sortie faite par la transaction de consolidation.
- La division des tokens personnalisés en plus de sorties que celles dans lesquelles ils étaient contenus avant le traitement de la transaction nécessite d'utiliser, au total, plus d'ada pour couvrir la valeur minimale d'ada, car l'ada est nécessaire dans les sorties supplémentaires.
Vous trouverez une copie officielle de ce document ici :
https://docs.cardano.org/native-tokens/minimum-ada-value-requirement
Plus de traductions de Cardano à: Cardano For The World