Documentos de Asset Core

Documentación del motor de estado mundial determinista y referencias de API.

Documentos de Decision Gate

Usando el SDK de Python

Esta guía muestra cómo lograr el mismo resultado que el inicio rápido de HTTP utilizando el SDK de Python de Asset Core con operaciones tipadas. Es el camino recomendado para los equipos que desean una fuerte seguridad de tipos mientras se mantienen alineados con el contrato público de HTTP.

Requisitos previos

Asegúrese de que los demonios estén en funcionamiento y de que tenga tokens válidos para el acceso de lectura y escritura. El SDK no omite ninguna verificación de autorización; simplemente envuelve los mismos puntos finales HTTP.

  • Python 3.11+
  • Los daemons de Asset Core se ejecutan localmente con tokens de portador disponibles (ver Primer Compromiso y Lectura)
  • pip o uv para la instalación de paquetes

Paso 1 - Instalar el SDK

Desde la raíz del repositorio de Asset Core:

cd sdk-python
pip install -e .

O con uv:

uv venv --seed .venv-sdk
source .venv-sdk/bin/activate
cd sdk-python
uv pip install -e .

Paso 2 - Crear el cliente

import os
from assetcore_sdk import AssetCoreClient

write_client = AssetCoreClient(
    base_url="http://127.0.0.1:8080",
    api_key=os.environ["ASSETCORE_WRITE_TOKEN"],
)

read_client = AssetCoreClient(
    base_url="http://127.0.0.1:8081",
    api_key=os.environ["ASSETCORE_READ_TOKEN"],
)

El SDK es un cliente HTTP puro, por lo que se deben usar instancias separadas para los tokens de escritura y lectura. Esto refleja los despliegues en producción donde los tokens de escritura y lectura tienen roles diferentes.

Paso 3 - Operaciones de construcción

Usa los constructores de operaciones tipadas:

from assetcore_sdk.operations import CreateContainer, AddFungible

operations = [
    CreateContainer(
        container_id=1001,
        kind={"type": "balance"},
        owner=None,
        policies=None,
    ),
    AddFungible(
        class_id=100,
        key=1,
        quantity=500,
        location={"container_id": 1001, "kind": "balance"},
    ),
]

Cada constructor produce una operación tipada que el cliente convierte en el sobre JSON. Esto facilita la detección de campos inválidos antes de que lleguen al daemon.

Paso 4 - Enviar el commit

result = await write_client.commit_operations(
    operations,
    idempotency_key="sdk-first-commit-2026-01-15",
    namespace_id=5001,
)

print(f"Committed at world seq {result.world_seq_start}")

O use la versión sincrónica:

result = write_client.commit_operations_sync(
    operations,
    idempotency_key="sdk-first-commit-2026-01-15",
    namespace_id=5001,
)

Paso 5 - Leer el estado

container = await read_client.get_container_balances(1001, namespace_id=5001)

for balance in container.balances:
    print(f"Class {balance.class_id}: {balance.quantity}")

La respuesta incluye campos tipados y metadatos de frescura. Utilice esos campos de frescura para confirmar que su ruta de lectura está actualizada con el registro de confirmaciones.

Solución de problemas

”ModuleNotFoundError: assetcore_sdk”

El SDK no está instalado en su entorno actual. Asegúrese de haber activado el entorno virtual correcto y de haber ejecutado pip install -e . desde el directorio sdk-python.

Errores de conexión

Los daemons no están en ejecución o están en puertos diferentes. El SDK genera assetcore_sdk.errors.HttpError con detalles de transporte.

Errores de validación

Los argumentos de operación no válidos generan assetcore_sdk.errors.ValidationError con el campo específico que falló. Consulte la referencia de operación para los campos requeridos.

Próximos pasos