Saltar al contenido principal

Referencia API: multiGetObjects

Obtiene detalles de muchos objetos en una única solicitud de red.

Clase: SuiClient Tipo de método: Operación de lectura, sin gas


Resumen

Utilizar multiGetObjects resulta mucho más eficiente que llamar a getObject en un bucle. Reduce la latencia de la red combinando muchas consultas en una única llamada a procedimiento remoto (RPC).

Firma

client.multiGetObjects(input: MultiGetObjectsParams): Promise<SuiObjectResponse[]>

Parámetros

El método acepta un objeto de configuración con las siguientes propiedades:

ParámetroTipoRequeridoDescripción
idsstring[]Una matriz de IDs de objetos hexadecimales de 32 bytes.
optionsSuiObjectDataOptionsNoBanderas de configuración para activar campos de datos específicos. Se aplica a todos los objetos solicitados.

Límite: La mayoría de los nodos RPC públicos imponen un límite de 50 IDs por petición. Para lotes más grandes, debes dividir tu array en trozos.


Valor de retorno

Devuelve un Promise que resuelve a un array de objetos SuiObjectResponse.

El orden del array corresponde exactamente al orden de los ids pasados en la petición.

[
{
"data": { "objectId": "0xA...", "version": "1", ... }
},
{
"error": { "code": "notExists", "object_id": "0xB..." }
},
{
"data": { "objectId": "0xC...", "version": "5", ... }
}
]

Ejemplos de uso

Escenario A: Obtención masiva de metadatos

Imagine que tiene una lista de identificadores de Tokens No Fungibles (NFT) y necesita mostrar sus nombres.

const objectIds = ['0x123...', '0x456...', '0x789...'];

const results = await client.multiGetObjects({
ids: objectIds,
options: {
showContent: true,
showDisplay: true
}
});

// Procesar los resultados
results.forEach((result) => {
if (result.data) {
console.log("Elemento encontrado:", result.data.display?.data?.name);
} else {
console.warn("El elemento no se pudo cargar:", result.error);
}
});

Escenario B: Manejando listas grandes por fragmentación

Dado que se aplica un límite de, por ejemplo, 50 elementos por petición, utilice un ayudante de fragmentación para listas grandes.

import { chunk } from 'lodash'; // o tu propio ayudante

const allIds = [/* ... array de 200 IDs ... */];
const CHUNK_SIZE = 50;
const chunks = chunk(allIds, CHUNK_SIZE);

for (const batch of chunks) {
const batchResults = await client.multiGetObjects({
ids: batch,
options: { showType: true }
});
// Procesar batchResults...
}

Mejores prácticas

1. Maneje siempre los fallos parciales

A diferencia de una consulta de base de datos estándar que podría detener todo el lote en caso de error, multiGetObjects devuelve un resultado para cada ID. Incluso si elimina un objeto ( ***** ), los demás seguirán devolviendo resultados satisfactorios ( **** ). Debe comprobar data vs error para cada elemento en el array devuelto.

2. Conservación del orden

El SDK garantiza que el array de salida coincide con el índice del array de entrada.

  • results[0] corresponde a ids[0].
  • results[1] corresponde a ids[1].

Puedes confiar en esto para mapear los resultados de vuelta a tu fuente de datos original.