Cuentas de Recurso
Despliegue de Código de Objeto es el método preferido para desplegar y actualizar contratos inteligentes en Aptos. Las cuentas de recurso requieren que los desarrolladores generen semillas cada vez que se crea una cuenta de recurso, y actualizar contratos requiere pasos específicos que son propensos a errores.
Una cuenta de recurso es una característica de desarrollador utilizada para gestionar recursos independientes de una cuenta gestionada por un usuario, específicamente publicando módulos y proporcionando control de acceso solo en cadena, por ejemplo, signers.
Típicamente, una cuenta de recurso se usa para dos propósitos principales:
- Almacenar y aislar recursos; un módulo crea una cuenta de recurso solo para hospedar recursos específicos.
- Publicar módulo como una cuenta independiente (recurso), un bloque de construcción en un diseño descentralizado donde ninguna clave privada puede controlar la cuenta de recurso. La propiedad (SignerCap) puede mantenerse en otro módulo, como gobernanza.
Restricciones
Sección titulada «Restricciones»En Aptos, una cuenta de recurso se crea basándose en el hash SHA3-256 de la dirección de la fuente y datos de semilla adicionales. Una cuenta de recurso puede ser creada solo una vez; para una dirección de fuente y semilla dada, solo puede haber una cuenta de recurso. Esto es porque el cálculo de la dirección de la cuenta de recurso está completamente determinado por lo anterior.
Una entidad puede llamar create_account
en un intento de reclamar una cuenta antes de
la creación de una cuenta de recurso. Pero si se encuentra una cuenta de recurso, Aptos
transferirá la propiedad de la cuenta a la cuenta de recurso. Esto se hace
validando que la cuenta aún no ha ejecutado ninguna transacción y que
Account::signer_capbility_offer::for
es none. La probabilidad de una
colisión donde alguien ha producido legítimamente una clave privada que mapea a una
dirección de cuenta de recurso es improbablemente baja.
Configuración
Sección titulada «Configuración»La forma más fácil de configurar una cuenta de recurso es:
- Usando Aptos CLI:
aptos account create-resource-account
crea una cuenta de recurso, yaptos move create-resource-account-and-publish-package
crea una cuenta de recurso y publica el paquete especificado bajo la dirección de la cuenta de recurso. - Escribiendo código de contratos inteligentes personalizado: en el módulo
resource_account.move
, los desarrolladores pueden encontrar las funciones de creación de cuenta de recursocreate_resource_account
,create_resource_account_and_fund
, ycreate_resource_account_and_publish_package
. Los desarrolladores pueden entonces llamar esas funciones para crear cuentas de recurso en sus contratos inteligentes.
Cada una de esas opciones ofrece funcionalidad ligeramente diferente:
create_resource_account
- meramente crea la cuenta de recurso pero no la financia, reteniendo acceso al signer de la cuenta de recurso hasta llamar explícitamenteretrieve_resource_account_cap
.create_resource_account_and_fund
- crea la cuenta de recurso y la financia, reteniendo acceso al signer de la cuenta de recurso hasta llamar explícitamenteretrieve_resource_account_cap
.create_resource_account_and_publish_package
- crea la cuenta de recurso y resulta en pérdida de acceso a la cuenta de recurso por diseño, porque las cuentas de recurso se usan para hacer contratos autónomos e inmutables.
En este ejemplo, inicializarás el módulo mint_nft
y recuperarás
la capacidad de signer tanto de la cuenta de recurso como de la cuenta del módulo. Para hacer
esto, llama create_resource_account_and_publish_package
para publicar el módulo
bajo la dirección de la cuenta de recurso.
- Inicializa el módulo como se muestra en el ejemplo
minting.move
. - Llama
create_resource_account_and_publish_package
para publicar el módulo bajo la dirección de la cuenta de recurso, como en el ejemplo end-to-endmint_nft.rs
. - Recupera la capacidad de signer de la cuenta de recurso + cuenta del módulo como se muestra
en el ejemplo
minting.move
.
Nota, si el signer resource_account
anterior no está ya configurado como una
cuenta de recurso, recuperar la capacidad de signer fallará. El campo source_addr
en la función retrieve_resource_account_cap
se refiere a la dirección de la
cuenta fuente, o la cuenta que crea la cuenta de recurso.
Para un ejemplo, ve la SignerCapability
empleada por la función mint_nft
en minting.move
.
Para más detalles, ve las referencias de “cuenta de recurso” en resource_account.move
y account.move
.