Skip to content

Preconfirmations

Preconfirmations are a primitive that allows transactions to be confirmed within 20ms. They make realtime applications possible while maintening a strong and decentralized consensus model. Preconfirmations are enforced by the censensus protocol. If a validator issues a preconfirmation that is not respected in the sealed block, they will be heavily slashed.

Validators are slashed thanks to sequencing proofs issued with each preconfirmation. This simple 32 byte proof is enough to prove that a validator modified the committed ordering and signed a different block.

How to use

Preconfirmations are available via the fiber_sendRawTransaction RPC method.

RPC Request
{
  "jsonrpc": "2.0",
  "method": "fiber_sendRawTransaction",
  "params": [
    "0x02f8f1830186b4824c9380843b9aca01830186a0945fa9912d6c6815039e2bd7f5b271fdf0a1988fd080b88489ce05be000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000001eb0000000000000000000000000000000000000000000000000000000000000000c001a0a1012f6a296bbf4488f94098be5fae988b0b03c64ab954d9e94cec03bd0b4ad2a049dba1e112b05f3719763fb596c5c25e6326da366335c1dbfbb2613b9adf928e"
  ],
  "id": 1
}

The response contains the transaction hash and receipt.

RPC Response
 
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "hash": "0x082735b25aa0ca3be8621c593af97eb6e91db4efbea4751839e0cf2b7f0dd531",
    "from": "0x8626f6940e2eb28930efb4cef49b2d1f2c9c1199",
    "to": "0x5fa9912d6c6815039e2bd7f5b271fdf0a1988fd0",
    "value": "0x0",
    "gas_used": 22560,
    "logs": [],
    "status": true,
    "output": "0x",
    "deployed_contract": null,
    "reject_reason": null
  }
}

The preconfirmation method returns a finalized receipt with logs. If for some reason your transaction cannot be preconfirmed (wrong nonce etc.), the reject_reason will contains a human readable error message.

Copyright © 2025-present Merkle Software Inc.