Skip to main content

Summary

DA Builder exposes JSON-RPC endpoints for transaction submission, receipt polling, account balance monitoring, and transaction status tracking.

RPC Endpoints

Use DA Builder endpoints for supported transaction submission and monitoring methods. Use a standard Ethereum RPC provider for reads, simulations, archive queries, logs, and direct fallback.

Contract Addresses

Supported RPC Methods

For the OpenRPC playground, see https://da-builder.mainnet.spire.dev/docs.
MethodAuthParametersOutputUse this when
eth_sendRawTransactionSigned raw transaction[rawTransaction]transaction hashSubmit one signed transaction through DA Builder
eth_getTransactionReceiptNone beyond request body[transactionHash]Receipt or nullPoll the transaction hash
eth_sendBundleSigned transaction in bundle[txs, blockNumber] where txs contains one txtransaction hashUse simplified bundle submission
dab_accountInfoX-Flashbots-Signature[accountAddress]balance, outstanding_chargeCheck GasTank balance and pending charges
dab_transactionStatusOptional token parameter[transactionHash] or method-specific status params from OpenRPCStatus, cost, tracking detailsInspect transaction status and savings
dab_getBatchedTransactionReceiptNone beyond request body[batchedTransactionHash]Receipt or nullGet receipt by transaction hash
eth_sendRawTransaction and eth_sendBundle do not increment the EOA’s normal nonce in the same way as direct independent submission. Validate nonce handling in your transaction sender before production use.

Authentication For dab_accountInfo

dab_accountInfo requires a Flashbots-style header:
X-Flashbots-Signature: <address>:<signature>
The signature is an EIP-191 signature over the JSON-RPC request body hash.

Minimal cURL Examples

Submit A Raw Transaction

curl -s https://da-builder.mainnet.spire.dev/ \
  -H "Content-Type: application/json" \
  --data '{
    "jsonrpc": "2.0",
    "method": "eth_sendRawTransaction",
    "params": ["0xSIGNED_RAW_TRANSACTION"],
    "id": 1
  }'

Poll A DA Builder Transaction Hash

curl -s https://da-builder.mainnet.spire.dev/ \
  -H "Content-Type: application/json" \
  --data '{
    "jsonrpc": "2.0",
    "method": "eth_getTransactionReceipt",
    "params": ["0xTRANSACTION_HASH"],
    "id": 1
  }'

Check Account Info

curl -s https://da-builder.mainnet.spire.dev/ \
  -H "Content-Type: application/json" \
  -H "X-Flashbots-Signature: 0xYOUR_ADDRESS:0xYOUR_SIGNATURE" \
  --data '{
    "jsonrpc": "2.0",
    "method": "dab_accountInfo",
    "params": ["0xYOUR_ACCOUNT_ADDRESS"],
    "id": 1
  }'

TypeScript Example: Authenticated Account Info

This example uses ethers v6 and Node.js 18+ fetch.
import { Wallet, getBytes, id } from "ethers";

const rpcUrl = "https://da-builder.mainnet.spire.dev/";
const privateKey = process.env.SIGNER_PRIVATE_KEY!;
const account = process.env.DA_BUILDER_ACCOUNT!;

async function dabAccountInfo() {
  const wallet = new Wallet(privateKey);
  const body = JSON.stringify({
    jsonrpc: "2.0",
    method: "dab_accountInfo",
    params: [account],
    id: 1
  });

  const bodyHash = id(body);
  const signature = await wallet.signMessage(getBytes(bodyHash));
  const authHeader = `${wallet.address.toLowerCase()}:${signature}`;

  const response = await fetch(rpcUrl, {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "X-Flashbots-Signature": authHeader
    },
    body
  });

  const json = await response.json();
  if (json.error) throw new Error(`${json.error.code}: ${json.error.message}`);
  return json.result as { balance: string; outstanding_charge: string };
}

dabAccountInfo().then(console.log).catch((error) => {
  console.error(error);
  process.exit(1);
});