RPC method

eth_sendRawTransaction on Arbitrum Nova

Supported on SwiftNodes

Everything below was measured on 2026-10-13 by calling eth_sendRawTransaction on Arbitrum Nova 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 Arbitrum Nova 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: address 0x4c21270668899Cf33ebA67Dbb7d5A40E0Bbe3495 have 0 want 840000021001
Legacy transaction signed without a chain ID (pre-EIP-155)insufficient funds for gas * price + value: address 0x4c21270668899Cf33ebA67Dbb7d5A40E0Bbe3495 have 0 want 840000021001
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.

Arbitrum Nova's nodes did not refuse the unprotected transaction for lacking a chain ID; it reached the balance check. Such a transaction could be replayed on any chain where the account has funds, so always sign with the chain ID (42170).

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/arbitrum-nova?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/arbitrum-nova?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 Arbitrum Nova

eth_sendRawTransaction on other chains

Frequently asked questions

Does Arbitrum Nova support eth_sendRawTransaction?

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

Does Arbitrum Nova accept transactions without a chain ID?

Its nodes did not refuse one for that reason in our test (2026-10-13); sign with chain ID 42170 anyway.

Why does Arbitrum Nova return "insufficient funds" from eth_sendRawTransaction?

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

Arbitrum Nova endpoints, live block height and WebSocket status are on the Arbitrum Nova RPC page.

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