Los webhooks son una función que permite que sistemas sean llamados a través de internet cuando ocurre un evento en blockchain que cumple ciertos criterios.

Puede escuchar transacciones mediante webhooks usando el Sequence Indexer, registrando un endpoint o eliminándolo cuando ya no sea necesario.

Si prefiere una forma sin código para agregar webhooks usando Sequence Builder, consulte esta guía.

Para comenzar, diríjase al Sequence Builder y siga esta guía para la Public API Access Key y esta guía para la Secret API Access Key, ambas necesarias para usar los Webhooks del Sequence Indexer.

Función

  1. Registrar un Webhook Listener
  2. Eliminar un Webhook Listener

Respuesta del Webhook

Ejemplo

Si necesita un servidor para desarrollo, puede usar lo siguiente:

Servidor Webhook Nodejs de plantilla combinado con ngrok, un túnel seguro hacia su computadora ejecutando el servidor local

1. Registrar un Webhook Listener

Nuestros filtros le permiten escuchar eventos on-chain para direcciones de contrato específicas, eventos de contrato, IDs de token específicos, direcciones de cuenta o hashes de tópicos.

Si necesita un endpoint de webhook para llamar, puede usar webhook.site para pruebas y especificarlo en el campo url.

Método AddWebhookListener de Sequence Indexer: con campos required*

  • Solicitud: POST /rpc/Indexer/AddWebhookListener
  • Content-Type: application/json
  • Cuerpo (en JSON):
    • url* (cadena) — la URL a la que se enviará el webhook
    • filters* (objeto) — un objeto de filtros
      • contractAddresses* ([]cadena) — un arreglo de cualquier dirección de contrato
      • events* ([]cadena) — cualquier evento de contrato, incluyendo la palabra clave indexed del contrato cuando sea necesario (por ejemplo, Transfer(address indexed from, address indexed to, uint256 amount). También se acepta la forma abreviada sin nombres de argumentos, que simplemente se interpretará como: arg1, arg2, etc. Ejemplo: Transfer(address indexed,address indexed,uint256) sin nombres de argumentos)
      • tokenIDs ([]int) — un arreglo de IDs de token
      • accounts ([]cadena) — un arreglo de direcciones de wallet a escuchar
      • topicHashes ([]cadena) — un hash del evento que se está escuchando (por ejemplo, ethers.id(“Transfer(address indexed from, address indexed to, uint256 amount)”))

Para ver la lista completa de eventos de los diferentes tipos de tokens: ERC20, ERC721 o ERC1155, consulte aquí.

Ejemplo: AddWebhookListener

En este ejemplo se escuchan todos los minteos de un contrato coleccionable ERC1155:

curl -X POST \
  -H "Content-Type: application/json" \
  -H "X-Access-Key: <project_access_key>" \
  -H "Authorization: BEARER <secret_API_key>" \
  -d '{
		"url": "<URL>",
        "filters": {
          "contractAddresses": ["0x9bec34c1f7098e278afd48fedcf13355b854364a"],
		  "events": ["TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value)"],
        }
      }' \
  https://arbitrum-sepolia-indexer.sequence.app/rpc/Indexer/AddWebhookListener

2. Eliminar un Webhook Listener

Si necesita limpiar sus listeners de webhook, puede enviar solicitudes para eliminar el listener usando el id y el projectId:

Método RemoveWebhookListener de Sequence Indexer: con campos required*

  • Solicitud: POST /rpc/Indexer/RemoveWebhookListener
  • Content-Type: application/json
  • Cuerpo (en JSON):
    • id* (cadena) — el id del listener devuelto por AddWebhookListener (por ejemplo, response.listener.id)
    • projectId* (cadena) — el Project ID del que se obtuvo la JWT Secret API key

Ejemplo: RemoveWebhookListener

curl -X POST \
  -H "Content-Type: application/json" \
  -H "X-Access-Key: <project_access_key>" \
  -H "Authorization: BEARER <secret_API_key>" \
  -d '{ "id": <listener_id>, "projectId": <project_id> }' \
  https://arbitrum-sepolia-indexer.sequence.app/rpc/Indexer/RemoveWebhookListener

Respuesta del Webhook Listener

Al recibir una respuesta del webhook listener, se devuelve un objeto con la siguiente estructura

  • Respuesta (en JSON):
    • uid (cadena) — un valor hash determinista del log de la transacción on-chain
    • type (cadena), — el tipo de evento (por ejemplo, BLOCK_ADDED)
    • blockNumber (i32) — el número de bloque de la blockchain cuando ocurrió el evento
    • blockHash (cadena) — el hash del bloque de la transacción
    • parentBlockHash (i32) — el hash del bloque padre
    • contractAddress (cadena) — la dirección del contrato de donde proviene el evento
    • contractType (cadena) — el tipo de contrato (por ejemplo, ERC20, ERC721, ERC1155, etc.)
    • txnHash (cadena) — el hash de la transacción del evento
    • txnIndex (i32) — el índice de la transacción en el bloque de la blockchain
    • txnLogIndex (cadena) — el índice del log en la transacción
    • ts (fecha) — una fecha y hora en formato ISO 8601 del evento
    • event (evento) — los datos del evento de la información on-chain
    • txnLogIndex (cadena) — el índice del log en la transacción
    • logDataType (cadena) — el tipo de evento de log (por ejemplo, TOKEN_TRANSFER)
    • rawLog (raw) — el objeto de transacción sin procesar

Ejemplo

Escuchar un Token ID específico para un ERC1155

Si quieres obtener todos los minteos y transferencias de un Token ID específico para un ERC1155

curl -X POST \
  -H "Content-Type: application/json" \
  -H "X-Access-Key: <project_access_key>" \
  -H "Authorization: BEARER <secret_API_key>" \
  -d '{
		"url": "<URL>",
        "filters": {
          "contractAddresses": ["0x9bec34c1f7098e278afd48fedcf13355b854364a"],
		  "events": ["TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value)"],
          "tokenIDs": ["1237"]
        }
      }' \
  https://arbitrum-sepolia-indexer.sequence.app/rpc/Indexer/AddWebhookListener

Tipos de eventos de token on-chain

ERC20

  • Transfer(address indexed from, address indexed to, uint256 value)
  • Approval(address indexed owner, address indexed spender, uint256 value)

ERC721

  • Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
  • Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
  • ApprovalForAll(address indexed owner, address indexed operator, bool approved)

ERC1155

  • TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value)
  • TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values)
  • ApprovalForAll(address indexed account, address indexed operator, bool approved)
  • URI(string value, uint256 indexed id)

Glosario de tipos de datos personalizados de retorno

evento (objeto)
CampoTypeDescription
topicHashstringun hash del evento al que se está escuchando (por ejemplo, ethers.id(“Transfer(address indexed from, address indexed to, uint256 amount)“))
eventSigstringla firma del evento on-chain (por ejemplo, “Transfer(address indexed from, address indexed to, uint256 amount)“)
types[]stringun arreglo con los tipos de argumentos del evento
names[]stringun arreglo con los nombres de los argumentos del evento en texto plano (nota: si los nombres no se incluyen al crear el webhook, aparecerán como: arg1, arg2, arg3, etc.)
values[]stringun arreglo de valores hexadecimales correspondientes a los nombres de los argumentos
rawLog (objeto)
CampoTypeDescription
datastringdata
topics[]stringlos hashes de los tópicos de eventos emitidos en los logs