Logo
Nuevos usuarios de RPC: 35% de descuento el primer mesVer oferta
OnFinality Learn
Guías de Redes y Protocolos11 min de lectura

Protocolo Social Lens: Construyendo sobre el Grafo Social Onchain

Una guía práctica del protocolo social Lens, que cubre cuentas, el grafo social, publicación, lectura de feeds y las prácticas de confiabilidad RPC que mantienen saludable una integración con Lens.

TL;DR

Lens es un protocolo social descentralizado: las identidades, los seguimientos y el contenido se representan onchain, mientras que las aplicaciones leen y escriben ese estado a través de contratos e indexadores. Por lo tanto, una integración social de Lens tiene dos superficies de confiabilidad: el RPC de la cadena que usas para transacciones y la capa de indexación que usas para feeds. Este artículo explica el modelo mental, muestra patrones de lectura y escritura ejecutables con marcadores de posición, y proporciona un procedimiento de medición de latencia y tasas de error que puedes reproducir por tu cuenta. Separa el comportamiento documentado del protocolo de las recomendaciones operativas y de los números que debes medir en tu propia infraestructura.

Alcance y las dos superficies de una integración social de Lens

El protocolo social Lens es un conjunto de contratos onchain más una capa de aplicación que permite a los usuarios poseer una cuenta, seguir otras cuentas, publicar contenido y permitir que otros recopilen o interactúen con ese contenido. Desde el punto de vista de la ingeniería, una aplicación social de Lens toca dos superficies distintas. La primera es la cadena: la propiedad de la cuenta, los seguimientos y los registros de publicación son transiciones de estado que deben firmarse y enviarse a través de un endpoint RPC. La segunda es la superficie de lectura: los feeds, los perfiles y los recuentos de interacción generalmente son servidos por indexadores o API que ya han analizado los eventos de la cadena.

Esta guía se centra en el flujo de trabajo de ingeniería en lugar de una lista de proveedores. Si solo necesitas una recomendación concreta de endpoint para la red a la que apuntas, usa el RPC Assistant en lugar de tratar esta página como un directorio de endpoints. Para obtener una visión más amplia sobre cómo difieren los endpoints RPC en comportamiento, consulta la guía de endpoints RPC.

  • Ruta de escritura: firma de billetera, envío de transacción, confirmación de recibo y análisis de eventos.
  • Ruta de lectura: consultas de perfil y feed contra un indexador o API, con lecturas de cadena utilizadas para verificación.
  • Ruta de identidad: mapeo de una dirección de billetera a una cuenta de Lens y su estado de propiedad.

Supuestos y requisitos previos

Los procedimientos a continuación asumen que tienes una billetera financiada en la red donde están desplegados los contratos de Lens, un entorno Node.js o Python, y un RPC_URL que controlas o te han asignado. También asumen que tienes acceso de lectura a cualquier API de indexación de Lens que use tu aplicación; la forma exacta de la consulta depende de la versión de la API con la que te integres, así que trata los cuerpos de solicitud aquí como ejemplos estructurales en lugar de un contrato congelado.

Debes saber qué chain ID sirve tu RPC_URL antes de enviar cualquier transacción. Una discrepancia entre la cadena en la que crees estar y la cadena que sirve tu endpoint es la causa más común de fallos confusos en la integración con Lens.

curl -s -X POST "$RPC_URL" \
  -H 'content-type: application/json' \
  --data '{"jsonrpc":"2.0","id":1,"method":"eth_chainId","params":[]}'

Modelo mental: cuentas, el grafo social y publicaciones

Lens modela a un usuario como una cuenta que es propiedad de una billetera o una cuenta inteligente. La cuenta es el ancla para todo lo demás: los perfiles que controla, las cuentas que sigue y las publicaciones que crea. El grafo social es el conjunto de relaciones de seguimiento entre cuentas, y vive onchain, lo que lo hace portátil entre aplicaciones. Una publicación es un registro de contenido que puede llevar metadatos y puede ser recopilado o interactuado según las reglas que establece el creador.

La consecuencia importante para los desarrolladores es que el grafo no es propiedad de tu aplicación. Si tu aplicación desaparece, las cuentas y los seguimientos siguen siendo legibles por cualquier otro cliente de Lens. Esa es la promesa central de un grafo social descentralizado, y también significa que tu aplicación debe reconciliar su base de datos local con el estado de la cadena en lugar de asumir que es la fuente de verdad.

Para una mirada más profunda sobre cómo la infraestructura de nodos sustenta este tipo de estado, consulta la guía de alojamiento de nodos blockchain.

  • Cuenta: la identidad onchain que posee perfiles y relaciones.
  • Seguimiento: una arista dirigida en el grafo social, escrita onchain.
  • Publicación: un registro de contenido con metadatos y reglas de recopilación opcionales.
  • Indexador: un servicio fuera de cadena que convierte eventos en feeds consultables.

Lectura del grafo social a través de un endpoint RPC

Antes de construir un feed, verifica que tu endpoint esté saludable y que puedas leer el estado del contrato del que dependes. El siguiente ejemplo de JavaScript utiliza una llamada JSON-RPC genérica para leer el último bloque y luego llama a una función de vista del contrato. Reemplaza CONTRACT_ADDRESS y el fragmento de ABI con el contrato de Lens real con el que te estás integrando; el punto es el patrón, no el selector específico.

Siempre compara el número de bloque devuelto por tu endpoint con una segunda fuente antes de confiar en una lectura. Un endpoint retrasado puede devolver un estado obsoleto que parece válido.

const RPC_URL = process.env.RPC_URL;

async function rpc(method, params) {
  const res = await fetch(RPC_URL, {
    method: 'POST',
    headers: { 'content-type': 'application/json' },
    body: JSON.stringify({ jsonrpc: '2.0', id: 1, method, params })
  });
  const json = await res.json();
  if (json.error) throw new Error(json.error.message);
  return json.result;
}

(async () => {
  const blockHex = await rpc('eth_blockNumber', []);
  console.log('latest block', parseInt(blockHex, 16));

  // Example view call; replace with the Lens contract and selector you need.
  const data = '0x' + 'YOUR_FUNCTION_SELECTOR' + 'YOUR_PADDED_ARGUMENTS';
  const result = await rpc('eth_call', [
    { to: 'CONTRACT_ADDRESS', data },
    'latest'
  ]);
  console.log('view result', result);
})();

Publicación de contenido: una ruta de escritura con verificación

Escribir en el grafo social es una transacción, por lo que el flujo de trabajo es firmar, enviar, esperar un recibo y luego analizar los registros. El siguiente ejemplo usa Python con web3.py y marcadores de posición para la clave privada y el contrato. Nunca confirmes una clave privada; cárgala desde una variable de entorno o un gestor de secretos.

Después del envío, no trates el hash de la transacción como éxito. Espera un recibo y confirma el campo de estado, luego decodifica los registros para extraer el identificador de publicación que tu aplicación almacenará.

import os
from web3 import Web3

w3 = Web3(Web3.HTTPProvider(os.environ['RPC_URL']))
acct = w3.eth.account.from_key(os.environ['PRIVATE_KEY'])

contract = w3.eth.contract(
    address=Web3.to_checksum_address('CONTRACT_ADDRESS'),
    abi=[]  # load the Lens ABI you are integrating against
)

tx = contract.functions.YOUR_PUBLISH_FUNCTION(
    'YOUR_ARGS'
).build_transaction({
    'from': acct.address,
    'nonce': w3.eth.get_transaction_count(acct.address),
    'chainId': w3.eth.chain_id,
    'gas': 500000,
    'maxFeePerGas': w3.eth.gas_price * 2,
    'maxPriorityFeePerGas': w3.to_wei(1, 'gwei')
})

signed = acct.sign_transaction(tx)
hash_ = w3.eth.send_raw_transaction(signed.raw_transaction)
receipt = w3.eth.wait_for_transaction_receipt(hash_, timeout=120)
print('status', receipt.status, 'block', receipt.blockNumber)

Medición de latencia RPC y tasa de error para una carga de trabajo de Lens

Debido a que las lecturas y escrituras de Lens son sensibles a la latencia, debes medir tu endpoint en lugar de asumir que es lo suficientemente rápido. Ejecuta una carga de trabajo fija de llamadas de lectura y un pequeño número de llamadas de escritura desde la misma región que tu aplicación, y registra p50, p95 y la tasa de error durante una ventana fija. No publiques números que no hayas medido; la tabla a continuación es una plantilla, no un resultado.

Un procedimiento reproducible: envía 200 llamadas eth_blockNumber y 200 llamadas eth_call a un ritmo constante, registra cada tiempo de ida y vuelta, descarta las primeras 10 como calentamiento y calcula los percentiles. Repite para cada endpoint candidato y cada región que atiendas. Mantén las cargas útiles idénticas para que la comparación sea justa.

  • | Métrica | Endpoint A | Endpoint B | Notas |
  • | latencia de lectura p50 | medir | medir | misma carga útil, misma región |
  • | latencia de lectura p95 | medir | medir | reportar tamaño de muestra |
  • | tasa de error | medir | medir | contar tiempos de espera y errores JSON-RPC |
  • | tiempo de confirmación de escritura | medir | medir | desde el envío hasta el recibo |

Resultados de verificación esperados

Una ruta de lectura saludable devuelve un chain ID que coincide con tu configuración, un número de bloque que avanza con el tiempo y resultados de vista del contrato que se decodifican sin error. Una ruta de escritura saludable devuelve un recibo con estado 1 y al menos un registro que coincide con la firma del evento que esperas. Si tu indexador está sincronizado, una consulta de perfil o feed debería reflejar la nueva publicación dentro de la ventana de retraso documentada del indexador.

Si alguna de estas comprobaciones falla, detente y diagnostica antes de construir más funciones encima. Los fallos silenciosos en la ruta de lectura son los más costosos, porque producen feeds plausibles pero incorrectos.

Solución de problemas comunes de integración con Lens

La mayoría de los fallos se dividen en un pequeño número de categorías: discrepancia de cadena, lecturas obsoletas, colisiones de nonce y retraso del indexador. La discrepancia de cadena se manifiesta como un chain ID que difiere de tu configuración. Las lecturas obsoletas se manifiestan como un número de bloque que va por detrás de una segunda fuente. Las colisiones de nonce se manifiestan como transacciones de reemplazo o envíos descartados cuando envías concurrentemente desde una clave. El retraso del indexador se manifiesta como una publicación que existe onchain pero aún no en tu consulta de feed.

Para un enfoque sistemático de la confiabilidad de endpoints, consulta la guía de endpoints RPC multicadena y la descripción general del mejor proveedor RPC para proyectos Web3.

  • Confirma el chain ID antes de cada lote de escritura.
  • Usa un único firmante por secuencia de nonce, o gestiona los nonces explícitamente.
  • Compara los números de bloque entre dos endpoints antes de confiar en una lectura.
  • Verifica la salud del indexador por separado de la salud de la cadena.

Limitaciones y compensaciones

Los grafos sociales onchain intercambian costo y latencia por portabilidad y propiedad. Cada seguimiento o publicación es una transacción, lo que implica gas, tiempo de confirmación y la posibilidad de fallo. Los indexadores hacen que las lecturas sean rápidas pero introducen retraso y una segunda fuente de verdad que debes reconciliar. Las aplicaciones que necesitan retroalimentación instantánea deben mostrar un estado de UI optimista y reconciliar contra el estado de la cadena y del indexador después.

También hay una compensación de versionado. Lens ha evolucionado sus contratos y API con el tiempo, así que fija la versión de ABI y API de la que depende tu aplicación y prueba las actualizaciones en un entorno de staging antes de implementarlas. Para equipos que ejecutan su propia infraestructura, un nodo dedicado puede reducir la varianza de los endpoints compartidos, pero aún requiere monitoreo.

Próximos pasos: del prototipo a producción

Una vez que tus rutas de lectura y escritura estén verificadas, el siguiente paso es endurecerlas. Agrega reintentos con retroceso exponencial para errores RPC transitorios, alerta sobre la tasa de error y el retraso de bloques, y mantén un endpoint de respaldo configurado. Si estás eligiendo un endpoint para producción, revisa los precios de RPC y las opciones del servicio API, y consulta la lista de redes para la cadena a la que apuntas.

Para equipos que desean un punto de partida gestionado, el RPC Assistant puede indicarte una elección concreta de endpoint para tu red, mientras que esta guía sigue siendo la metodología para verificarlo. Mide tu propia latencia y tasa de error antes de comprometerte con un proveedor, y revisa esas mediciones a medida que crece tu tráfico.

Nunca te preocupes por la infraestructura nuevamente

OnFinality elimina la carga pesada de DevOps para que puedas construir de forma más inteligente y rápida.

Comenzar