> ## Documentation Index
> Fetch the complete documentation index at: https://seilabs-docs-retire-ibc-tokenfactory-guides.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Transaction Types

> Which Ethereum transaction types are supported on Sei

# Transaction Types

Sei supports most Ethereum transaction types. The one notable exception is blob transactions.

## Supported Types

| Type | EIP      | Name        | Sei support                                          |
| ---- | -------- | ----------- | ---------------------------------------------------- |
| 0    | —        | Legacy      | Supported — governance-set minimum gas price applies |
| 1    | EIP-2930 | Access list | Supported                                            |
| 2    | EIP-1559 | Fee market  | Supported — base fee is not burned                   |
| 4    | EIP-7702 | Set code    | Supported                                            |

### Set Code (EIP-7702) Auth List Requirement

Type 4 (EIP-7702) SetCode transactions must include a non-empty authorization list. A transaction with an empty or nil auth list is rejected during validation with the error `auth list cannot be empty`.

Each authorization entry must also carry a valid (non-nil) chain ID. If you are constructing SetCode transactions directly, ensure at least one authorization is present before submitting.

### Access List and Auth List Entry Validation

EVM transactions undergo stricter semantic validation during `ValidateBasic`, enforced since v6.5.0. Malformed transactions that older node versions accepted are rejected.

**Access list entries (type 1 and type 2):** Each access list tuple is validated for well-formed hex encoding. Every address must be a canonical hex address of the correct length, and every storage key must be a canonical hex hash of the correct length. Entries with wrong-length or non-hex values are rejected.

**Auth list entries (type 4):** In addition to the non-empty auth list and non-nil chain ID requirements above, each authorization entry is validated for a canonical hex address and well-formed signature values.

**Signature values:** The transaction-level `v`, `r`, and `s` values must each fit in 32 bytes; auth list entries (type 4) cap `v` at 1 byte and `r`/`s` at 32 bytes. In both cases, values must not be zero-padded (no leading zero bytes in multi-byte values); zero-padded signature encodings are rejected.

This section is the canonical reference for field-level EVM transaction validation on Sei. Envelope-level restrictions (Cosmos wrapper fields, canonical protobuf encoding, whole-block rejection on decode failure) are covered in [Differences with Ethereum](/evm/differences-with-ethereum#evm-transaction-envelope-restrictions).

## Not Supported

| Type | EIP      | Name | Notes                                                     |
| ---- | -------- | ---- | --------------------------------------------------------- |
| 3    | EIP-4844 | Blob | Not supported — Sei runs Pectra without blob transactions |

## Blob Transactions

Sei runs the Pectra hardfork without blob transaction support. Attempting to send a type 3 transaction will be rejected at the RPC level.

If you are porting code from Ethereum that uses blob transactions (e.g. rollup data availability), that path does not apply to Sei.

## Sending Transactions

Standard library defaults work correctly. viem, wagmi, and ethers all default to type 2 (EIP-1559) transactions on chains that support it, which Sei does.

<CodeGroup>
  ```ts viem theme={"dark"}
  import { createWalletClient, http, parseEther } from 'viem';
  import { privateKeyToAccount } from 'viem/accounts';
  import { sei } from 'viem/chains';

  const account = privateKeyToAccount('0xYourPrivateKey');
  const client = createWalletClient({ account, chain: sei, transport: http() });

  // Sends a type 2 transaction — correct default for Sei
  const hash = await client.sendTransaction({
    to: '0xRecipient',
    value: parseEther('1'),
  });
  ```

  ```ts ethers theme={"dark"}
  import { ethers } from 'ethers';

  const provider = new ethers.JsonRpcProvider('https://evm-rpc.sei-apis.com');
  const wallet = new ethers.Wallet('0xYourPrivateKey', provider);

  // ethers defaults to EIP-1559 where supported — correct for Sei
  const tx = await wallet.sendTransaction({
    to: '0xRecipient',
    value: ethers.parseEther('1'),
  });
  ```
</CodeGroup>
