Page cover

🌊System Flow

  1. Users send preconfirmation requests to the preconfer

  2. Preconfirmers review, accept, or reject requests based on the conditions and potential profitability.

  3. The preconfer simulates the tipTx by calling a designated function on the LubanCore contract to check if the user has sufficient locked funds in the LubanEscrow.

  4. The preconfer assesses the risk and profitability based on the base fee forecast algorithm and the requested block number.

  5. The preconfer forwards the preconf request, along with other metadata, to the opt-in proposer via Commit-Boost to request proposer signature.

  6. If accepted, the preconfer signs the initSignature and populates the preconferSignature field to signal commitment. The proposer also signs the initSignature and populates the proposerSignature field:

  7. Before the specified block number, the preconfer can call the exhaust() function to void the commitment and protect against user griefing or transactions exceeding the gas limit.

  8. The exhaust() function iteratively burns the gas that would have been required to execute the user's transaction.

  9. Calling exhaust() only allows the preconfer to receive the prePayment, forgoing the afterPayment.

  10. Users should ideally share the preconfTx with the preconfer sufficiently early to avoid the preconfer calling the exhaust() function

  11. 6 seconds into the block, the preconfer should share the entire list of preconfTx for the current block to a Commit-Boost aware relay:

  12. With the full list of preconfTx, the relay should only accept blocks that contain the preconfTx.

  13. The challenge mechanism works as before, with the exception that calling the exhaust() function exempts a preconfer from being slashed.

Sample PreconfRequest

{
  "tipTx": {
    "gasLimit": 100000,
    "from": "0xUserAddress",
    "to": "0xPreconferAddress",
    "prePay": 1000000000000000000,
    "afterPay": 2000000000000000000,
    "nonce": 1
  },
  "prefConditions": {
    "inclusionMetaData": {
      "startingBlockNumber": 1000
    },
    "blockNumber": 1001
  },
  "preconfTx": { 
    "to": "0xContractAddress",
    "value": 0,
    "callData": "0x1234567890",
    "ethTransfer": false
  },
  "initSignature": "0xUserSignature",
  "preconferSignature": "0xPreconferSignature",
  "proposerSignature": "0xProposerSignature"
}

Smart Contract Interface

Last updated