Saltar al contenido principal

Extendiendo el TTL de un contrato desplegado usando código

Cuando un contrato inteligente se despliega en la red Stellar, su código WebAssembly (Wasm) tiene un Tiempo de Vida (TTL) que determina cuánto tiempo permanece accesible.

El TTL es el número de ledgers entre el ledger actual y el ledger final al que se puede acceder todavía a los datos del contrato. Si el TTL caduca, el código del contrato se archiva y se vuelve inaccesible. Para prevenir esto, necesitas extender periódicamente el TTL del código Wasm del contrato.

Esta guía te mostrará cómo extender el TTL del código Wasm de un contrato desplegado utilizando los SDKs de Javascript y Rust.

Entendiendo el TTL en Soroban

Antes de demostrar los métodos de extensión de TTL, debes tener en cuenta que en Soroban:

  • Las instancias de contrato y el código se almacenan en el almacenamiento de instancias
  • El TTL existe para evitar que la blockchain se llene de contratos inactivos
  • La extensión de TTL se puede hacer tanto para la instancia de contrato como para el código de contrato

Requisitos previos

  • Stellar SDK: npm install @stellar/stellar-sdk para Javascript
  • Un endpoint de Stellar RPC (p. ej., https://soroban-testnet.stellar.org)
  • Conocimientos básicos del SDK en uso

Métodos para extender el TTL

Esta guía cubrirá tres formas de extender el TTL de un contrato:

  1. Auto-extensión: Extender el TTL desde dentro del contrato mismo, en Rust.

    • Caso de uso: Cuando un contrato necesita gestionar su propia vida útil
    • Proceso: Accediendo directamente al almacenamiento de instancias del contrato para extender su TTL
  2. Extensión externa: Extender el TTL desde otro contrato (el desplegador), en Rust.

    • Caso de uso: Al gestionar múltiples instancias de contratos o implementar control administrativo
    • Proceso: Usando la autoridad del desplegador para extender el TTL de cualquier contrato que haya desplegado
  3. Extensión de cliente: Extender el TTL desde un cliente externo utilizando Javascript.

    • Caso de uso: Cuando necesitas gestionar los TTL de los contratos a través de una aplicación externa o un sistema automatizado.
    • Proceso:
      • Obtener la huella del contrato
      • Establecer una tarifa de recursos razonable (quizás comenzar en 10.000 stroops ya que esta es una operación costosa)
      • Establecer los datos de Soroban como solo lectura
      • Establecer el TTL del ledger deseado para caducar el contrato
      • Crear una operación StellarSdk.Operation.extendFootprintTtl
nota

Se cobran tanto una tarifa de recursos como una tarifa base en esta operación.

#![no_std]
use soroban_sdk::{contract, contractimpl, Env, symbol_short};

#[contract]
pub struct ExtendTTLContract;

#[contractimpl]
impl ExtendTTLContract {
// Self-extension
pub fn extend_contract_ttl(env: Env, threshold: u32, extend_to: u32) {
env.storage().instance().extend_ttl(threshold, extend_to);
}

// External extension
pub fn extend_other_contract_ttl(env: Env, contract_address: Address, threshold: u32, extend_to: u32) {
let deployer = env.deployer();
deployer.extend_ttl(
contract_address,
threshold,
extend_to
);
}
}
  • env.storage().instance().extend_ttl(...) se llama para extender el TTL de la instancia de contrato actual.
  • threshold es una verificación que asegura que el TTL actual de la instancia de contrato sea menor que el valor umbral establecido.
  • extend_to es el número de ledgers que se agregarán al TTL actual.
  • contract_address es la dirección de la instancia de contrato cuyo TTL queremos extender.
  • env.deployer() accede al desplegador, que tiene métodos para gestionar el ciclo de vida del contrato.
  • deployer.extend_ttl(...) extiende el TTL de la instancia de contrato especificada.

Aprende cómo probar la extensión de TTL en esta guía.

¿Quieres profundizar más? Consulta la documentación sobre la operación de extender el TTL de la huella.