RPC method

eth_sendRawTransaction on X Layer

Supported on SwiftNodes

Everything below was measured on 2026-10-13 by calling eth_sendRawTransaction on X Layer through the same endpoint customers use, and is re-measured weekly.

What eth_sendRawTransaction does

Submits a signed transaction to the network and returns its hash. The node checks the signature, chain ID, nonce and balance first, and returns an error string instead of a hash when any check fails, which is the text your app has to handle.

Errors X Layer returns, word for word

We submitted three transactions that must fail, signed by a new, empty key (nothing was spent). These are the messages your app receives in those situations.

EIP-1559 transfer from an empty accountinsufficient funds for gas * price + value: have 0 want 840000063001
Legacy transaction signed without a chain ID (pre-EIP-155)only replay-protected (EIP-155) transactions allowed over RPC
Truncated bytes ("0x02f8")rlp: value size exceeds available input length

How to read them

"insufficient funds" means the balance cannot cover value + gas limit × max fee per gas. The have and want numbers are in wei, so you can show the shortfall exactly.

X Layer's nodes refuse transactions without a chain ID ("only replay-protected (EIP-155) transactions allowed over RPC"), so old signing code that omits it fails here.

Send the same signed bytes again only if you never got a hash back: a second submission of an accepted transaction returns an "already known" style error, not a second transaction, and a transaction with the same nonce but a higher fee replaces it.

Example request

curl -s https://rpc.swiftnodes.io/rpc/xlayer?key=YOUR_API_KEY \
  -X POST -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"eth_sendRawTransaction","params":["0x02f8..."]}'
import { createPublicClient, http } from "viem";

const client = createPublicClient({
  transport: http("https://rpc.swiftnodes.io/rpc/xlayer?key=YOUR_API_KEY"),
});

try {
  const hash = await client.sendRawTransaction({ serializedTransaction: signed });
  const receipt = await client.waitForTransactionReceipt({ hash });
} catch (e) {
  const msg = String(e?.details ?? e?.message);
  if (/insufficient funds/i.test(msg)) { /* ask the user to top up */ }
  else if (/nonce too low|already known/i.test(msg)) { /* already sent: look up by hash */ }
  else throw e;
}

Other methods on X Layer

eth_sendRawTransaction on other chains

Frequently asked questions

Does X Layer support eth_sendRawTransaction?

Yes. eth_sendRawTransaction answered on the SwiftNodes X Layer endpoint when our weekly probe called it through the customer path (2026-10-13).

Does X Layer accept transactions without a chain ID?

No. It answered "only replay-protected (EIP-155) transactions allowed over RPC".

Why does X Layer return "insufficient funds" from eth_sendRawTransaction?

The sender cannot pay value plus gas limit × maxFeePerGas. Fund the account, lower the value, or lower maxFeePerGas.

X Layer endpoints, live block height and WebSocket status are on the X Layer RPC page.

One key covers every chain we serve, and SwiftNodes has a free tier.