Bundle API

eth_sendBundleCrossRollup

Send bundles to builders.

Request:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "eth_sendBundleCrossRollup",
  "params": [
    {
      txs,               // HashMap[String, String], This contains a mapping of signed transactions alonside their corresponding chainIds which we want to execute in an atomic bundle.
      blockNumbers,       // HashMap[String, String], This contains a mapping of chainIds alongside the corresponding hex encoded block number which this bundle will be valid on.  
      minTimestamp,      // (Optional) Number, the minimum timestamp for which this bundle is valid, in seconds since the unix epoch
      maxTimestamp,      // (Optional) Number, the maximum timestamp for which this bundle is valid, in seconds since the unix epoch
      revertingTxHashes, // (Optional) Array[String], A list of tx hashes that are allowed to revert
      replacementUuid,   // (Optional) String, UUID that can be used to cancel/replace this bundle
    }
  ]
}

Response:

{
  "jsonrpc": "2.0",
  "id": "123",
  "result": {
    "bundleHash": "0x2228f5d8954ce31dc1601a8ba264dbd401bf1428388ce88238932815c5d6f23f"
  }
}

eth_callBundleCrossRollup

Test a bundle’s validity across multiple rollups for specific block numbers on the given rollups.

Request:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "eth_callBundleCrossRollup",
  "params": [
    {
     txs,               // HashMap[String, String], This contains a mapping of signed transactions alonside their corresponding chainIds which we want to execute in an atomic bundle.
      blockNumbers,       // HashMap[String, String], This contains a mapping of chainIds alongside the corresponding hex encoded block number which this bundle will be valid on.  
stateBlockNumbers,       // HashMap[String, String], This contains a mapping of chainIds alongside the corresponding hex encoded block number or a block tag for which state to base this simulation on. Can use "latest"
      timestamp,         // (Optional) Number, the timestamp to use for this bundle simulation, in seconds since the unix epoch
    }
  ]
}

Response:

{
  "jsonrpc": "2.0",
  "id": "123",
  "result": [
    {
      "chain": "optimism",
      "data": {
        "bundleGasPrice": "543210543210",
        "bundleHash": "0xa1b2c3d4e5f678901234567890abcdef1234567890abcdef1234567890abcd12",
        "coinbaseDiff": "15000000000150000",
        "ethSentToCoinbase": "15000000000000000",
        "gasFees": "95000",
        "results": [
          {
            "coinbaseDiff": "7500000000085000",
            "ethSentToCoinbase": "7500000000000000",
            "fromAddress": "0x987654321aefcda0123456789abcdef987654321",
            "gasFees": "47500",
            "gasPrice": "543210543210",
            "gasUsed": 19000,
            "toAddress": "0xabcdef1234567890abcdef9876543210abcdef12",
            "txHash": "0xbbccddee112233445566778899aabbccddeeff00112233445566778899aabbcc",
            "value": "0x"
          },
          {
            "coinbaseDiff": "7500000000085000",
            "ethSentToCoinbase": "7500000000000000",
            "fromAddress": "0x123456789abcdef0123456789abcdef123456789",
            "gasFees": "47500",
            "gasPrice": "543210543210",
            "gasUsed": 19000,
            "toAddress": "0x1234567890abcdef1234567890abcdef12345678",
            "txHash": "0x112233445566778899aabbccddeeff00bbccddee112233445566778899aabbcc",
            "value": "0x"
          }
        ],
        "stateBlockNumber": 6221595,
        "totalGasUsed": 38000
      }
    },
    {
      "chain": "polygon",
      "data": {
        "bundleGasPrice": "987654321987",
        "bundleHash": "0xdecaf0123456789abcdef0123456789abcdef0123456789abcdef0123456789",
        "coinbaseDiff": "25000000000250000",
        "ethSentToCoinbase": "25000000000000000",
        "gasFees": "152000",
        "results": [
          {
            "coinbaseDiff": "12500000000125000",
            "ethSentToCoinbase": "12500000000000000",
            "fromAddress": "0xfe0123456789abcdef9876543210abcdef987654",
            "gasFees": "76000",
            "gasPrice": "987654321987",
            "gasUsed": 23000,
            "toAddress": "0x01abcdef9876543210abcdef0123456789abcdef",
            "txHash": "0x123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef01",
            "value": "0x"
          },
          {
            "coinbaseDiff": "12500000000125000",
            "ethSentToCoinbase": "12500000000000000",
            "fromAddress": "0xabcdef0123456789abcdef9876543210abcdef9876",
            "gasFees": "76000",
            "gasPrice": "987654321987",
            "gasUsed": 23000,
            "toAddress": "0x9876543210abcdef9876543210abcdef01234567",
            "txHash": "0xabcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789",
            "value": "0x"
          }
        ],
        "stateBlockNumber": 7221605,
        "totalGasUsed": 46000
      }
    }
  ]
}

eth_cancelBundleCrossRollup

Prevents a submitted bundle from being included in a chunk that is sent to Baton and included on-chain.

Request:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "eth_cancelBundleCrossRollup",
  "params": [
    {
      replacementUuid, // UUIDv4 to uniquely identify submission
    }
  ]
}

NodeKit is backwards compatible with most Flashbots MEV APIs like eth_callBundle, eth_sendBundle, and eth_cancelBundle. To submit to these bundles you must specify which chainId you wish to use the bundle method on using the request header.

Example Request:

curl -H 'X-Chain-ID: optimism' -d '{"jsonrpc":"2.0","method":"eth_callBundle","params":[],"id":1}' localhost:8080

Last updated