Valor mínimo requerido de ada
Los UTXOs en el libro mayor pueden contener una colección heterogénea de tokens, incluyendo ada, que es un recurso limitado en el sistema Cardano. Al exigir que se incluya cierta cantidad de ada en cada UTXO (donde esa cantidad se basa en el tamaño del UTXO, en bytes), se limita el tamaño total máximo que ocupan las entradas de UTXO en el libro mayor en un momento dado.
El tamaño máximo posible de UTXO (la suma de los tamaños de todas las entradas de UTXO) se ajusta implícitamente subiendo y bajando el parámetro min-ada-value . De este modo, la restricción protege el libro mayor de Cardano para que no crezca más allá de un determinado tamaño. Un ledger sin límite de tamaño es vulnerable a ser poblado por tantos datos que los usuarios no podrán procesarlo (o ejecutar un nodo) con máquinas que cumplan las especificaciones recomendadas para ejecutar un nodo.
El caso de solamente ada
Debido a la restricción del valor min-ada-value, un límite garantizado en el número de entradas en un UTXO de sólo ada es:
max No. UTxOs <= (total ada in circulation) / (minimum ada value)
Esta fórmula limita el número de entradas de UTXO, pero no dice nada sobre el ajuste del tamaño de cada entrada, porque todas las entradas de UTXO que contienen sólo ada tienen (casi) el mismo tamaño. El tamaño del conjunto UTXO está limitado por:
max UTxO size <= (max No. UTxOs) * (max UTxO entry size) + overhead
En el libro mayor multiactivo de Cardano, las entradas de UTXO tendrán diferentes tamaños. En particular, cualquier entrada que contenga un activo no-ada contiene registros de los ID de las políticas, los nombres de los activos y las cantidades de cada uno de los activos no-ada. Para mantener el límite de tamaño máximo de UTXO almacenado en el libro mayor con tamaños de entrada variables, debemos ajustar el valor mínimo de ada para cada entrada de UTXO, en función de su tamaño.
A continuación, presentamos un cálculo y una justificación más detallada de este ajuste.
Cálculo de Min-ada-value
La cantidad mínima de ada que debe contener cada UTXO de sólo ada sin datos adicionales (es decir, un UTXO que sólo contiene la dirección y la cantidad de ada) es un parámetro de protocolo del sistema Cardano, llamado : minUTxOValue
El tamaño de tal UTXO tiene un límite superior : adaOnlyUTxOSize
Podemos calcular el límite superior del tamaño de un UTXO u que contenga tokens que no sean ada : sizeBound (u)
Queremos calcular la min-ada requerida para ser contenida en u : minAda (u)
Una cantidad minUTxOValue de ada paga por adaOnlyUTxOSize bytes de almacenamiento UTXO en el libro mayor. Para que el min-ada-value sea proporcional para todos los UTXOs, debe cumplirse la siguiente proporción:
minUTxOValue / adaOnlyUTxOSize = minAda (u) / sizeBound (u)
El cálculo de min-ada para cualquier UTXO se aproxima a la fórmula anterior. Para ello se utilizan las constantes
coinSize = 0 (nota: esto es un error de implementación, y será cambiado al valor correcto, 2, en el próximo fork. Esto disminuirá el valor mínimo de ada en un pequeño porcentaje)
utxoEntrySizeWithoutVal = 27
adaOnlyUTxOSize = utxoEntrySizeWithoutVal + coinSize = 27
Las funciones que se utilizan en la fórmula siguiente son:
quot a b es el cociente de (a, b), es decir, quot 11 5 = 2 porque 11 = 5 * 2 + 1
numAssets el número de AssetIDs distintos en B, por ejemplo, si B = [(policyID1, myAssetNameSBS, 10), (policyID1, yourAssetNameSBS, 5), (policyID2, someAssetNameSBS, 250), (policyID3, someAssetNameSBS, 43)]
numAssets B = 4
numPIDs: el número de PolicyIDs distintos en B por ejemplo, si B es como arriba, numPIDs B = 3 (que son policyID1, policyID2, policyID3)
sumAssetNameLengths: la suma de la longitud de los ByteStrings que representan distintos nombres de activos, por ejemplo, si B es como arriba,
sumAssetNameLengths B = length myAssetNameSBS + length yourAssetNameSBS + length someAssetNameSBS
pidSize: la longitud del hash de una política (es decir, la longitud del PolicyID). Estas longitudes son las mismas para todas las pólizas, y están dictadas por el algoritmo hash actual utilizado para calcular los hashes de las direcciones de pago y de staking.
pidSize B = 28 actualmente (también, en la próxima era)
roundupBytesToWords convierte los bytes en palabras de 8 bytes de longitud, redondeando hacia arriba roundupBytesToWords b = quot (b + 7) 8
size B es el tamaño del conjunto de tokens B en palabras de 8 bytes de longitud: size B = 6 + roundupBytesToWords (((numAssets B) * 12) + (sumAssetNameLengths B) + ((numPids B) * pidSize))
Para un UTXO que contenga un paquete de tokens B, el cálculo del min-ada-value es el siguiente :
- Caso 1: El paquete de tokens B en el UTXO u sólo contiene ada (ningún otro token) minAda (u) = minUTxOValue
- Caso 2: El paquete de tokens B en el UTXO u contiene ada así como otros tokens minAda (u) = max (minUTxOValue, (quot (minUTxOValue, adaOnlyUTxOSize)) * (utxoEntrySizeWithoutVal + (size B)))
Como consecuencia de este diseño,
- Es imposible hacer salidas que contengan sólo tokens personalizados
- El número de cada tipo de token en una salida no afecta al min-ada-value de la salida, pero el número de tipos de token contenidos en una salida aumenta el min-value.
- El motivo es que los nombres y los ID de las políticas de cada uno de los tipos de token ocupan un espacio adicional en la salida.
- El envío de tokens personalizados a una dirección siempre implica el envío del valor mínimo de ada a esa dirección junto con los tokens personalizados (incluyendo el ada en la misma salida). Si - la dirección no es gastable por el usuario que envía los tokens, el ada enviado junto a los tokens ya no pertenece al remitente.
- Antes de transferir tokens personalizados, los usuarios pueden optar por utilizar la comunicación fuera de la cadena para negociar quién suministra los ada para cubrir el valor mínimo de los ada en la salida realizada por la transacción de transferencia
- Para recuperar la ada almacenada junto a los tokens personalizados en una salida O, el usuario debe: a) Gastar la salida O, y quemar los tokens personalizados almacenados en ella b) Gastar una salida O y una salida O', y consolidar los tokens en ella con la misma colección de tipos de tokens personalizados almacenados en otra salida (gastados dentro de la misma transacción) P. ej, (CryptoDoggiesPolicy, poodle, 1) contenida en O puede consolidarse con (CryptoDoggiesPolicy, poodle, 3) en O', para un total de (CryptoDoggiesPolicy, poodle, 4) en una nueva salida realizada por la transacción de consolidación.
- Dividir los tokens personalizados en más salidas de las que contenían antes de que se procesara la transacción requiere utilizar, en total, más ada para cubrir el valor mínimo de ada, ya que se necesita ada en las salidas adicionales.
Encuentra una copia oficial de este documento aquí:
https://docs.cardano.org/native-tokens/minimum-ada-value-requirement
Más traducciones de Cardano en: Cardano For The World