Saltar al contenido principal

Transactions

Endpoint terminal del flujo de escritura. Una vez firmada off-chain la transacción devuelta por cualquier POST /contract/..., se envía a la blockchain mediante este endpoint.

sendSignedTransaction

POST /api/v1/transactions/send

Recibe la transacción firmada y la propaga a la red. Devuelve el tx_hash y, si está disponible, el receipt.

Cuerpo

{
"signedRawTransaction": "0x01f9034c8281310e820fa0834c4b40..."
}
CampoTipoRequiredDescripción
signedRawTransactionstringTransacción firmada en hexadecimal (incluye prefijo 0x01 para EIP-2930, 0x02 para EIP-1559, etc.). Es la salida de wallet.signTransaction(tx) en ethers.js, signed.raw_transaction.hex() en eth_account o el comando equivalente que uses para firmar la transacción cruda devuelta por la API.

Respuestas

200 OK — Transacción minada

{
"tx_hash": "0xb508e46adfc36822e48dde1d9f1f5d2122a1ce6852cf5e0afe6c978da04648c5",
"receipt": {
"_type": "TransactionReceipt",
"blockHash": "0x52afb6108087cdca826289da40cc7339a4e190922f8480afd924c0ddd9d31109",
"blockNumber": 3907283,
"contractAddress": null,
"cumulativeGasUsed": "221678",
"from": "0xAe0E493C67f75381b0954644836A3C16c79D0dFD",
"to": "0x00000000000000000000000000000000000015Be",
"gasUsed": "221678",
"hash": "0xb508e46adfc36822e48dde1d9f1f5d2122a1ce6852cf5e0afe6c978da04648c5",
"index": 0,
"logs": [
{
"_type": "log",
"address": "0x00000000000000000000000000000000000015Be",
"topics": ["0x78c431540f7778eb787241a03d7401cd2c95ddb232c918f172f86e4c804d5439"],
"blockNumber": 3907283
}
],
"status": 1
}
}

206 Partial Content — Transacción enviada, recibo no disponible

{
"tx_hash": "0xb508e46adfc36822e48dde1d9f1f5d2122a1ce6852cf5e0afe6c978da04648c5",
"receipt": null
}

El tx_hash ya es válido. Puedes consultar el estado posteriormente con un explorador o reintentando la resolución del DID.

400 Bad Request

Causas habituales:

  • La firma es incorrecta (clave privada distinta a la EOA from).
  • El nonce es obsoleto (otra transacción se envió entremedias).
  • La EOA no tiene fondos para cubrir el gas.

500 Internal Server Error

Error genérico de la API o de la red blockchain.

status del recibo

statusSignificado
1Transacción ejecutada con éxito. El cambio quedó reflejado en cadena.
0Transacción ejecutada pero el contrato revirtió. El cambio NO se aplicó. Revisa la autorización de from y los argumentos.

Interpretación de logs

Los topics del log identifican el evento emitido. Algunos relevantes:

topics[0]Evento
0x78c431540f7778eb787241a03d7401cd2c95ddb232c918f172f86e4c804d5439VerificationMethodAdded
0xd43d365fd1f319ea103c6daa06d0ee46f5b3f535985f3313a9b5b6da774da67cVerificationRelationshipAdded

La lista completa de eventos está documentada en el repositorio del registro de DIDs (isbe-identity-did-lib).

Ejemplo

curl -X POST "https://did-registry.portal.redisbe.com/api/v1/transactions/send" \
-H "Content-Type: application/json" \
-d '{"signedRawTransaction": "0x01f9034c8281310e820fa0834c4b40..."}'
Reintentar tras 206

Si recibes 206, espera ~5 segundos y consulta el DID con GET /api/v1/identifiers/{identifier}. Si el cambio ya se refleja, la transacción se minó correctamente.