Saltar al contenido principal

Desplegar un contrato de activo Stellar (SAC) desde dentro de un contrato

Resumen

En esta guía, aprenderás a desplegar un contrato de activo Stellar (SAC) desde dentro de otro contrato inteligente utilizando el SDK de Rust de Soroban. El SDK de Rust de Soroban proporciona herramientas y utilidades para trabajar con contratos inteligentes de Stellar, permitiéndote desplegar e interactuar con los SAC directamente desde la lógica de tu contrato. El SDK de Rust de Soroban proporciona herramientas y utilidades para trabajar con contratos inteligentes Stellar, permitiéndote desplegar e interactuar con los SAC directamente desde la lógica de tu contrato.

Requisitos previos:

Antes de comenzar, asegúrate de tener lo siguiente:

1. Definir el contrato SacDeployer

El contrato SacDeployer será responsable de desplegar el contrato de activo Stellar. Aquí está el código para el contrato SacDeployer:

lib.rs
use soroban_sdk::{contract, contractimpl, Env, Address, Bytes};

#[contract]
pub struct SacDeployer;

#[contractimpl]
impl SacDeployer {
pub fn deploy_sac(env: Env, serialized_asset: Bytes) -> Address {
// Create the Deployer with Asset
let deployer = env.deployer().with_stellar_asset(serialized_asset);
let _ = deployer.deployed_address();
// Deploy the Stellar Asset Contract
let sac_address = deployer.deploy();

sac_address
}
}

Explicación

  • SacDeployer contrato: este contrato define la función deploy_sac para manejar el despliegue del SAC.
  • Función deploy_sac:
    • env.deployer().with_stellar_asset(serialized_asset): crea un desplegador configurado para desplegar un contrato de activo Stellar utilizando el activo serializado proporcionado.
    • deployer.deploy(): Despliega el SAC y devuelve la dirección del contrato desplegado.

2. Probar el despliegue

Necesitas probar el despliegue para asegurarte de que todo funcione como se espera. El siguiente código demuestra cómo probar el contrato SacDeployer utilizando las utilidades de prueba del SDK de Rust de Soroban.

#[cfg(feature = "testutils")]
fn main() {
let env = TestEnv::default();
let serialized_asset = Bytes::from("actual serialized asset"); // Replace with actual serialized asset info
let sac_deployer = SacDeployer::default();
let sac_address = sac_deployer.deploy_sac(env.clone(), serialized_asset);
println!("SAC Address: {}", sac_address.to_string());
}

Explicación

  • TestEnv::default(): crea un entorno de prueba predeterminado para el despliegue.
  • SacDeployer::default(): inicializa el contrato SacDeployer.
  • deploy_sac(env.clone(), serialized_asset): llama a la función deploy_sac para desplegar el SAC y recupera la dirección.
  • println!("Dirección SAC: {}", sac_address.to_string()): imprime la dirección del SAC desplegado.
  • assert!(sac_address.to_string().len() > 0, "La dirección SAC debería ser no vacía"): afirma que la dirección del SAC no está vacía, asegurando un despliegue exitoso.
  • serialized_asset es el Asset XDR de Stellar serializado en bytes. Consulta [soroban_sdk::xdr::Asset] XDR

Conclusión

Siguiendo esta guía, has desplegado con éxito un contrato de activo Stellar desde dentro de otro contrato utilizando el SDK de Rust de Soroban. Este enfoque permite que los contratos inteligentes manejen los despliegues de SAC de manera dinámica, proporcionando flexibilidad para varios casos de uso en el ecosistema Stellar.

Para más detalles, consulta la documentación del SDK de Soroban y explora características y configuraciones más avanzadas.