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
signedRawTransactionstringsíTransacció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.