Despliegue de Código en Objetos
Este documento explica cómo puedes desplegar código en Objetos. Esta es la forma recomendada de desplegar código en la blockchain, ya que reduce la complejidad del despliegue y gestiona de forma segura las políticas de control de acceso para el propietario del código. Ten en cuenta que en este contexto, código se refiere a paquetes.
Desplegar código en objetos garantiza lo siguiente:
- Cada despliegue publica en una nueva dirección.
- Solo el propietario del objeto de código puede actualizar y congelar el código.
Esto significa que puedes transferir el objeto a un nuevo propietario, y este tendrá la propiedad total del código. Le estás otorgando los derechos para actualizar y congelar el código. No es necesario gestionar seeds, ni desplegar a una nueva dirección en cada despliegue. El despliegue de código en objetos simplifica enormemente el proceso de despliegue.
Instrucciones
Sección titulada «Instrucciones»A continuación se muestran las instrucciones sobre cómo compilar, desplegar y actualizar código en objetos.
-
Compilar el código
Asegúrate de que
<named_address>
quede como un placeholder_
. Esto es necesario ya que el comando CLI sobrescribirá la dirección. El valor de<named_address>
representa el propietario del código, o el propietario del objeto al que se desplegará el código. Aquí tienes un ejemplo con<named_address>
con el valormy_address
.[addresses]my_address = "_"Compila tu código move ejecutando el siguiente comando.
- Reemplaza
<named_address>
con la dirección nombrada. - Reemplaza
<your_address>
con la dirección de tu cuenta.
Ventana de terminal aptos move compile --named-addresses <named_address>=<your_address> - Reemplaza
-
Desplegar código en un objeto
Despliega el código compilado en un objeto mediante el comando:
- Reemplaza
<named_address>
con la dirección nombrada.
Ventana de terminal aptos move deploy-object --address-name <named_address>Un ejemplo se muestra a continuación:
Ventana de terminal aptos move deploy-object --address-name my_addressEsto preguntará si deseas publicar el código bajo la dirección de objeto especificada.
Ejemplo de salida:
Ventana de terminal Do you want to publish this package at object address 0x8d6eb306bcf6c61dbaa0dbf8daa8252e121b63e95991afcab3b12d3be7f001ab [yes/no] >¡Felicidades, has desplegado tu código en un nuevo objeto con una dirección única!
Toma nota de la dirección del objeto ya que la necesitarás más adelante para actualizaciones.
- Reemplaza
-
Transferir y actualizar código en un paquete existente
Primero, puede que quieras transferir el objeto de la cuenta del deployer a una cuenta admin. La cuenta admin tendrá derechos para actualizar el código.
Así es como puedes hacerlo vía CLI, aquí tu
deployer_account
debe ser el propietario actual del objeto.Ventana de terminal aptos move run —-function-id 0x1::object::transfer --type-args 0x1::object::ObjectCore -—args address:<object_address> address:<new_owner_address> —-profile <deployer_account_profile>Así es como puedes hacerlo vía el SDK de typescript:
const transaction = await aptos.transaction.build.simple({sender: deployerAccount.accountAddress,data: {function: "0x1::object::transfer",typeArguments: [`0x1::object::ObjectCore`],functionArguments: [object_address, new_owner_address],},});Ahora puedes actualizar el código con la cuenta admin designada, como se muestra a continuación.
Si deseas actualizar el código en el objeto desplegado, ejecuta lo siguiente:
- Reemplaza
<named_address>
con la dirección nombrada existente. - Reemplaza
<code_object_addr>
con la dirección del objeto que aloja el código.
Nota: el valor para el nombre de la cuenta ahora debe ser la dirección del objeto, ya que el paquete que contiene el/los módulo(s) ahora está desplegado en esa dirección.
Ventana de terminal aptos move upgrade-object --address-name <named_address> --object-address <code_object_addr>Ejemplo del comando anterior:
Ventana de terminal aptos move upgrade-object --address-name my_address --object-address 0x8d6eb306bcf6c61dbaa0dbf8daa8252e121b63e95991afcab3b12d3be7f001abEsto preguntará si deseas actualizar el código existente desplegado en la dirección del objeto.
Ejemplo de salida:
Ventana de terminal Do you want to upgrade the package 'MyPackage' at object address 0x8d6eb306bcf6c61dbaa0dbf8daa8252e121b63e95991afcab3b12d3be7f001ab [yes/no]¡Felicidades, has actualizado tu código en el objeto existente!
- Reemplaza