diff --git a/evm/reference.mdx b/evm/reference.mdx index 62b63ea..0d0563c 100644 --- a/evm/reference.mdx +++ b/evm/reference.mdx @@ -7,7 +7,7 @@ keywords: ['json-rpc', 'api reference', 'evm endpoints', 'blockchain api', 'sei import { RPCMethodsViewer } from '/snippets/rpc-methods-viewer.jsx'; -Sei fully supports the standard Ethereum JSON-RPC API, so existing EVM tooling (ethers.js, viem, Hardhat, Foundry, etc.) works out of the box. Use the explorer below to browse every method Sei exposes, inspect parameters, run requests against a live endpoint, and copy ready-to-use snippets in a range of popular languages. The authoritative prose for the request format, the deprecated `sei_*`/`sei2_*` extensions, and address resolution follows underneath. +Sei fully supports the standard Ethereum JSON-RPC API, so existing EVM tooling (ethers.js, viem, Hardhat, Foundry, etc.) works out of the box. Use the explorer below to browse every method Sei exposes, inspect parameters, run requests against a live endpoint, and copy ready-to-use snippets in a range of popular languages. The authoritative prose for the request format, the remaining deprecated `sei_*` extensions, and address resolution follows underneath. @@ -18,7 +18,7 @@ By default the explorer lists only the available, current methods. Each is label - **Limited** — callable, but returns a static value or has a Sei-specific caveat (shown in the method's **Sei-specific behavior** note). Examples: `eth_coinbase` returns the fee-collector address and `eth_getProof` returns an IAVL proof. - **Unavailable** — not registered, explicitly errors, or not applicable to Sei's architecture. This includes blob methods (`eth_blobBaseFee`), proof-of-work and uncle methods, and the `admin`/`miner`/`clique`/`engine`/`les`/`personal` namespaces. -The deprecated `sei_*`/`sei2_*` extensions and the unavailable methods are hidden by default — enable **Show deprecated & unavailable methods** to browse them. The deprecated extensions are also documented under [Sei custom endpoints](#sei-custom-endpoints). +The remaining deprecated `sei_*` extensions and the unavailable methods are hidden by default. Enable **Show deprecated & unavailable methods** to browse them. The deprecated extensions are also documented under [Sei custom endpoints](#sei-custom-endpoints). ## Overview @@ -113,7 +113,7 @@ Real-time subscriptions (`eth_subscribe` for `newHeads` and `logs`) are availabl ## Standard Ethereum endpoints -Every method below is also browsable interactively in the explorer above; this section is the static, copy-friendly reference. Methods are grouped by purpose and labelled with their Sei support status. Block parameters accept a hex number or one of the tags `latest`, `earliest`, `pending`, `safe`, or `finalized` — on Sei, `safe`, `finalized`, and `latest` all resolve to the latest committed block due to [instant finality](/evm/differences-with-ethereum#finality). The deprecated `sei_*`/`sei2_*` extensions are documented separately under [Sei custom endpoints](#sei-custom-endpoints). +Every method below is also browsable interactively in the explorer above; this section is the static, copy-friendly reference. Methods are grouped by purpose and labelled with their Sei support status. Block parameters accept a hex number or one of the tags `latest`, `earliest`, `pending`, `safe`, or `finalized`. On Sei, `safe`, `finalized`, and `latest` all resolve to the latest committed block due to [instant finality](/evm/differences-with-ethereum#finality). The remaining deprecated `sei_*` extensions are documented separately under [Sei custom endpoints](#sei-custom-endpoints). #### `eth_sendRawTransaction` @@ -238,7 +238,7 @@ Every method below is also browsable interactively in the explorer above; this s **Supported.** Returns the EVM transaction matching the given hash, or null if not found. -**Sei-specific behavior:** Sees EVM transactions only; if the hash resolves to a non-EVM Cosmos tx it errors. Pending lookups resolve the transaction directly from the CometBFT mempool via an EVM-hash index (rather than a geth txpool), so a pending EVM tx is found by its hash without scanning through unconfirmed-transaction pages. Use the legacy sei_getTransactionByHash to also surface Cosmos txs with synthetic representations. +**Sei-specific behavior:** Sees EVM transactions only; if the hash resolves to a non-EVM Cosmos tx it errors. Pending lookups resolve the transaction directly from the CometBFT mempool via an EVM-hash index (rather than a geth txpool), so a pending EVM tx is found by its hash without scanning through unconfirmed-transaction pages. **Parameters:** @@ -624,7 +624,7 @@ Every method below is also browsable interactively in the explorer above; this s **Supported.** Returns the number of EVM transactions in a block by number, as a hex quantity. -**Sei-specific behavior:** Counts the same transactions that appear in `eth_getBlockByNumber`'s transaction list: EVM transactions are counted only when a receipt exists for them, and synthetic (wasm `MsgExecuteContract`) and bank-transfer (`MsgSend`) txs remain excluded under the eth namespace — they are only included in the `sei_`/`sei2_` count variants. Genesis returns 0x0; non-existent/future blocks return null. Because the receipt store can be configured with a smaller `KeepRecent` than the block/state stores, this method now verifies that the requested block's receipts have not been pruned before counting: if they have, it returns an error of the form `requested height N receipts have been pruned; earliest available is M` rather than a count. This means the call can fail for older blocks even when the block data itself is still available. +**Sei-specific behavior:** Counts the same transactions that appear in `eth_getBlockByNumber`'s transaction list. EVM transactions are counted only when a receipt exists for them, while synthetic (wasm `MsgExecuteContract`) and bank-transfer (`MsgSend`) transactions remain excluded. Genesis returns 0x0; non-existent/future blocks return null. Because the receipt store can be configured with a smaller `KeepRecent` than the block/state stores, this method now verifies that the requested block's receipts have not been pruned before counting: if they have, it returns an error of the form `requested height N receipts have been pruned; earliest available is M` rather than a count. This means the call can fail for older blocks even when the block data itself is still available. **Parameters:** @@ -879,7 +879,7 @@ Every method below is also browsable interactively in the explorer above; this s **Supported.** Returns logs matching the given filter criteria. -**Sei-specific behavior:** Returns EVM logs only. Hard limits: max 2,000 blocks per close-ended query and up to 10,000 logs per response; exceeding the range errors with 'block range too large'. Large queries are globally rate-limited. Use the legacy sei_getLogs to include synthetic logs from Cosmos activity. +**Sei-specific behavior:** Returns EVM logs only. Hard limits: max 2,000 blocks per close-ended query and up to 10,000 logs per response; exceeding the range errors with 'block range too large'. Large queries are globally rate-limited. **Parameters:** @@ -1341,25 +1341,27 @@ The response `result` contains a `trace` field (the standard tracer output) and -## Sei Custom Endpoints +## Sei custom endpoints -Sei extends the standard Ethereum JSON-RPC API with custom endpoints that enhance functionality for developers. These extensions enable better handling of cross-VM interactions, synthetic transactions, improved error reporting, and other Sei-specific features. +Sei keeps four legacy custom endpoints for address resolution, cross-VM transaction lookup, and synthetic receipts. -**Deprecation Notice:** All `sei_*` and `sei2_*` JSON-RPC methods are deprecated and scheduled for removal. Do not build new integrations on these endpoints. Use standard `eth_*` and `debug_*` methods instead. +The `sei2_*` namespace has been removed. Most legacy `sei_*` methods have also been removed, including block, filter, log, signing, association, and transaction lookup methods. The `sei_*` cleanup is tracked in [sei-chain PR #3927](https://github.com/sei-protocol/sei-chain/pull/3927). -Access is controlled by the `enabled_legacy_sei_apis` setting under `[evm]` in `app.toml`. Only methods explicitly listed in this allowlist are available. Disabled methods return a standard JSON-RPC error (code `-32601`, data `"legacy_sei_deprecated"`). Allowed single-object calls pass through unchanged, with an optional `Sei-Legacy-RPC-Deprecation` HTTP response header signaling deprecation. +The four remaining `sei_*` methods are deprecated and scheduled for removal. Use standard `eth_*` and `debug_*` methods for new integrations. + -**Batch requests:** JSON-RPC batches (a top-level JSON array) are handled by the gate rather than passed through wholesale. Only the allowed methods in the batch are forwarded to the inner handler as a filtered subset, and the inner responses are then merged back by matching each response's JSON-RPC `id`. Disallowed methods yield the usual `-32601` legacy deprecation error in their slot, and any batch element that is not a JSON object returns a JSON-RPC `-32600` `"Invalid Request"` error in its slot — a malformed element no longer causes the whole batch body to bypass the gate and reach the inner handler. +There is no remaining block or filter method for discovering synthetic logs from Cosmos-originated transactions. If you already know a synthetic transaction hash, enable `sei_getTransactionReceipt` to retrieve its receipt and logs. -Per JSON-RPC 2.0, **notifications** — requests that fully omit the `id` member — do not produce a response entry, including within a batch. A request that includes `"id": null` is **not** a notification: `null` is a valid id, so the request receives a response like any other id. Only requests with no `id` member at all are treated as notifications and omitted from the batch response. As a result, the merged response array is **not** 1:1 with the request batch when notifications are present — it is ordered like the batch minus the notification slots. If a batch would produce no response objects at all (for example, an all-notification batch, or an empty result), the gateway returns an **empty HTTP body** with HTTP 200 rather than an empty JSON array (`[]`). - +Access is controlled by the `enabled_legacy_sei_apis` setting under `[evm]` in `app.toml`. Only methods explicitly listed in this allowlist are available. Disabled methods return a standard JSON-RPC error (code `-32601`, data `"legacy_sei_deprecated"`). Allowed single-object calls pass through unchanged, with an optional `Sei-Legacy-RPC-Deprecation` HTTP response header signaling deprecation. + +JSON-RPC batches are handled by the gate rather than passed through wholesale. Only allowed methods are forwarded to the inner handler. The handler then merges responses by matching each response's JSON-RPC `id`. Disallowed methods return the usual `-32601` legacy deprecation error in their slot. A batch element that is not a JSON object returns a JSON-RPC `-32600` `"Invalid Request"` error in its slot. -### Legacy API Configuration +Per JSON-RPC 2.0, requests that omit the `id` member are notifications and do not produce a response entry, including within a batch. A request with `"id": null` is not a notification and receives a response. If a batch produces no response objects, the gateway returns an empty HTTP body with HTTP 200 rather than an empty JSON array (`[]`). -The `enabled_legacy_sei_apis` setting in `app.toml` controls which `sei_*` and `sei2_*` methods are accessible on the EVM HTTP endpoint. +### Legacy API configuration -**Default allowlist** (enabled on `seid init`): +The `enabled_legacy_sei_apis` setting controls which remaining `sei_*` methods are accessible on the EVM HTTP endpoint. `seid init` enables the three address and cross-VM lookup helpers by default: ```toml [evm] @@ -1367,57 +1369,22 @@ enabled_legacy_sei_apis = [ "sei_getSeiAddress", "sei_getEVMAddress", "sei_getCosmosTx", + + # Optional: enable synthetic receipt lookup. + # "sei_getTransactionReceipt", ] ``` -To enable additional legacy methods, add them to this array. All other `sei_*` and `sei2_*` methods (including all `sei2_*` block methods) are disabled by default and must be explicitly enabled. - - -**`sei_*` methods:** - -| Method | Description | -| ------ | ----------- | -| `sei_getCosmosTx` | Get Cosmos transaction by EVM tx hash | -| `sei_getEvmTx` | Get EVM transaction by Cosmos tx hash | -| `sei_getTransactionErrorByHash` | Get error message for a failed transaction | -| `sei_getVMError` | Get VM error details for a transaction | -| `sei_getBlockByHash` | Get block by hash (includes synthetic txs) | -| `sei_getBlockByHashExcludeTraceFail` | Get block by hash, excluding untraceable txs — synthetic txs **and** ante-deferred stub transactions (correct-nonce ante failures such as insufficient funds/fee, whose stub receipts carry `EffectiveGasPrice == 0` and `GasUsed == 0`). Note this differs from the regular `eth_getBlockByHash`, which still includes these ante-failure stubs. | -| `sei_getBlockByNumber` | Get block by number (includes synthetic txs) | -| `sei_getBlockByNumberExcludeTraceFail` | Get block by number, excluding untraceable txs — synthetic txs **and** ante-deferred stub transactions (correct-nonce ante failures such as insufficient funds/fee, whose stub receipts carry `EffectiveGasPrice == 0` and `GasUsed == 0`). Note this differs from the regular `eth_getBlockByNumber`, which still includes these ante-failure stubs. | -| `sei_getBlockReceipts` | Get block receipts (includes synthetic txs) | -| `sei_getBlockTransactionCountByHash` | Get tx count by block hash (includes synthetic txs) | -| `sei_getBlockTransactionCountByNumber` | Get tx count by block number (includes synthetic txs) | -| `sei_getTransactionByBlockHashAndIndex` | Get tx by block hash and index (includes synthetic txs) | -| `sei_getTransactionByBlockNumberAndIndex` | Get tx by block number and index (includes synthetic txs) | -| `sei_getTransactionByHash` | Get transaction by hash (includes synthetic txs) | -| `sei_getTransactionCount` | Get account transaction count | -| `sei_getTransactionReceipt` | Get transaction receipt (includes synthetic txs) | -| `sei_getTransactionReceiptExcludeTraceFail` | Get transaction receipt, excluding txs that never executed opcodes in the VM. The filter keys off the receipt shape (`EffectiveGasPrice == 0` and `GasUsed == 0`), which covers ante-rejected txs, nonce-bumping state-transition failures (for example EIP-7623 floor-data-gas shortfalls, whose synthetic EndBlock receipts carry the same shape), and chain-generated synthetic txs (`ShellEVMTxType`); reverted and out-of-gas transactions are included, because they ran in the VM and produce real traces. (Previously any receipt with `status=0` was excluded, which over-filtered reverts and OOG failures.) The former `sei_traceBlockByHashExcludeTraceFail`/`sei_traceBlockByNumberExcludeTraceFail` trace endpoints were removed in v6.6.0 (#3618); use the standard `debug_traceBlockByHash`/`debug_traceBlockByNumber` instead. | -| `sei_getFilterLogs` | Get filter logs (includes synthetic logs) | -| `sei_getLogs` | Get logs (includes synthetic logs) | -| `sei_getFilterChanges` | Get filter changes (includes synthetic events) | -| `sei_newFilter` | Create a new log filter | -| `sei_newBlockFilter` | Create a new block filter | -| `sei_uninstallFilter` | Remove a filter | - -`sei_traceBlockByHashExcludeTraceFail` and `sei_traceBlockByNumberExcludeTraceFail` were removed in v6.6.0 (#3618) and no longer appear in the gated method list; adding them to `enabled_legacy_sei_apis` has no effect. Use `debug_traceBlockByHash`/`debug_traceBlockByNumber` instead. - -**`sei2_*` methods** (block queries with bank transfers included): +Only these four methods are available: | Method | Description | | ------ | ----------- | -| `sei2_getBlockByHash` | Get block by hash (includes bank transfers) | -| `sei2_getBlockByNumber` | Get block by number (includes bank transfers) | -| `sei2_getBlockReceipts` | Get block receipts (includes bank transfers) | -| `sei2_getBlockTransactionCountByHash` | Get tx count by block hash (includes bank transfers) | -| `sei2_getBlockTransactionCountByNumber` | Get tx count by block number (includes bank transfers) | -| `sei2_getBlockByHashExcludeTraceFail` | Get block by hash excluding failed traces (includes bank transfers) | -| `sei2_getBlockByNumberExcludeTraceFail` | Get block by number excluding failed traces (includes bank transfers) | - - +| `sei_getSeiAddress` | Get the Sei address associated with an EVM address. | +| `sei_getEVMAddress` | Get the EVM address associated with a Sei address. | +| `sei_getCosmosTx` | Get the wrapping Cosmos transaction hash as uppercase hexadecimal without a `0x` prefix. | +| `sei_getTransactionReceipt` | Get a receipt, including a synthetic receipt when its transaction hash is known. | -### Address Resolution +### Address resolution For resolving the EVM (`0x…`) ↔ Sei (`sei1…`) address pair, use the **`addr` precompile at `0x0000000000000000000000000000000000001004`** via a standard `eth_call`. The precompile is universally available on every Sei RPC, is not part of the deprecated `sei_*` namespace, and is the canonical resolution path going forward. @@ -1465,26 +1432,26 @@ The call reverts when the input address is not yet associated. See [Accounts](/l The legacy JSON-RPC helpers `sei_getSeiAddress` and `sei_getEVMAddress` historically served this role and are still enabled by default on nodes today, but they belong to the deprecated `sei_*` namespace and may be removed in a future release. New integrations should call the precompile. -### Cross-VM Transaction Lookup +### Cross-VM transaction lookup -`sei_getCosmosTx` resolves the underlying Cosmos transaction hash for a given EVM transaction. It does not yet have a precompile equivalent and is enabled by default on Sei nodes. +`sei_getCosmosTx` resolves the underlying Cosmos transaction hash for a given EVM transaction. It returns the hash as uppercase hexadecimal without a `0x` prefix. The method does not yet have a precompile equivalent and is enabled by default on Sei nodes. #### sei_getCosmosTx -Returns the Cosmos transaction details for a given EVM transaction hash. +Returns the wrapping Cosmos transaction hash for a given EVM transaction hash. - **Parameters**: -| Type | Description | -| :------- | :------------------------- | -| `string` | The EVM transaction hash. | +| Type | Description | +| :--- | :---------- | +| `DATA, 32 bytes` | The `0x`-prefixed EVM transaction hash. | - **Result**: -| Type | Description | -| :------- | :--------------------------------- | -| `object` | The Cosmos transaction object. | +| Type | Description | +| :--- | :---------- | +| `string` | The Cosmos transaction hash as uppercase hexadecimal without a `0x` prefix. | **Example Request** @@ -1492,16 +1459,16 @@ Returns the Cosmos transaction details for a given EVM transaction hash. { "jsonrpc": "2.0", "method": "sei_getCosmosTx", - "params": ["0xabc123..."], + "params": ["0x828c91592453fe7c5bf743204495a35bf02b67b579b8f59ee7eea8af031d7c14"], "id": 1 } ``` -### Legacy Deprecation Error +### Legacy deprecation error -When a `sei_*` or `sei2_*` method is called but not listed in `enabled_legacy_sei_apis`, the node returns: +When a remaining `sei_*` method is called but not listed in `enabled_legacy_sei_apis`, the node returns: ```json { @@ -1509,18 +1476,18 @@ When a `sei_*` or `sei2_*` method is called but not listed in `enabled_legacy_se "id": 1, "error": { "code": -32601, - "message": "sei_getBlockByNumber is not enabled on this node. The sei_* and sei2_* JSON-RPC surfaces are deprecated, scheduled for removal, and should not be used for new integrations - prefer standard eth_* (and debug_*) methods and official migration guidance. To allow this legacy method, add it to enabled_legacy_sei_apis under [evm] in app.toml.", + "message": "sei_getTransactionReceipt is not enabled on this node. The sei_* JSON-RPC surface is deprecated, scheduled for removal, and should not be used for new integrations - prefer standard eth_* (and debug_*) methods and official migration guidance. To allow this legacy method, add it to enabled_legacy_sei_apis under [evm] in app.toml.", "data": "legacy_sei_deprecated" } } ``` -### Deprecation HTTP Header +### Deprecation HTTP header -When an allowlisted `sei_*` or `sei2_*` method is successfully called, the response includes an optional HTTP header signaling deprecation: +When an allowlisted `sei_*` method is successfully called, the response includes an optional HTTP header signaling deprecation: ``` -Sei-Legacy-RPC-Deprecation: All sei_* and sei2_* JSON-RPC methods are deprecated and scheduled for removal; migrate to eth_* and supported APIs. +Sei-Legacy-RPC-Deprecation: All sei_* JSON-RPC methods are deprecated and scheduled for removal; migrate to eth_* and supported APIs. ``` Clients can use this header to detect legacy API usage and plan migration. diff --git a/evm/tracing/index.mdx b/evm/tracing/index.mdx index 4bfe811..3958698 100644 --- a/evm/tracing/index.mdx +++ b/evm/tracing/index.mdx @@ -443,17 +443,9 @@ Trace baking is controlled by these `[evm]` fields in `app.toml`: Enabling trace baking adds a persistent on-disk store at `/data/trace_db` and increases disk usage. The store's write-ahead log is flushed when the node shuts down cleanly. -## `*ExcludeTraceFail` filtering semantics +## Removed legacy trace filters -The `*ExcludeTraceFail` endpoints (`sei_getTransactionReceiptExcludeTraceFail`, `sei_getBlockByNumberExcludeTraceFail`, and `sei_getBlockByHashExcludeTraceFail`) filter out transactions whose trace would be empty or meaningless — specifically, transactions that were included in a block but never actually executed in the VM. These are deprecated legacy endpoints and are disabled by default: each method must be enabled through `enabled_legacy_sei_apis` in the `[evm]` section of `app.toml`. The filter keys off the receipt shape — any receipt with `EffectiveGasPrice == 0 && GasUsed == 0`, plus chain-generated synthetics — which excludes three classes: - -- **Ante-deferred stub transactions**: txs that passed the nonce check but failed a later ante step (for example insufficient funds or insufficient fee) and so never reached the VM. The chain writes a stub receipt for these with both fields unset. -- **Nonce-bumping state-transition failures**: txs that fail inside go-ethereum's `Execute()` before any opcode runs (for example an EIP-7623 floor-data-gas shortfall). Their synthetic EndBlock receipt carries the same `EffectiveGasPrice == 0 && GasUsed == 0` shape, so it is filtered identically. -- **Chain-generated synthetic transactions**: txs with the internal `ShellEVMTxType`, which have no real EVM execution. - -Everything that executed opcodes in the VM is **included**, even if it failed. Reverted and out-of-gas (OOG) transactions have `Status == 0` but `GasUsed > 0` (intrinsic gas at minimum) and, on chains with a positive minimum gas price, `EffectiveGasPrice > 0`, and produce a real trace (the `REVERT` or OOG condition simply appears inside that trace), so they are returned rather than filtered out. - -This filter applies to the block endpoints (`sei_getBlockByNumberExcludeTraceFail` and `sei_getBlockByHashExcludeTraceFail`, plus their `sei2_` equivalents) and the receipt endpoint (`sei_getTransactionReceiptExcludeTraceFail`): all of them drop these ante-deferred stub transactions. The former `sei_traceBlockByNumberExcludeTraceFail` and `sei_traceBlockByHashExcludeTraceFail` endpoints were removed in v6.6.0 — use `debug_traceBlockByNumber` or `debug_traceBlockByHash` for block tracing. The regular `eth_getBlockBy*` endpoints continue to **include** them, so a tx that appears in a normal block response may be absent from the `*ExcludeTraceFail` variant. The filter checks the underlying receipt shape (`EffectiveGasPrice` and `GasUsed`) rather than any tracer-reported error field. +The legacy `*ExcludeTraceFail` endpoints have been removed. Use `debug_traceBlockByNumber` or `debug_traceBlockByHash` for block tracing and `eth_getTransactionReceipt` for EVM receipts. There is no block or filter method for discovering synthetic logs from Cosmos-originated transactions. If you already know a synthetic transaction hash, enable `sei_getTransactionReceipt` to retrieve its receipt and logs. ## Next Steps diff --git a/evm/transactions-with-seid.mdx b/evm/transactions-with-seid.mdx index cda7968..fbeb74f 100644 --- a/evm/transactions-with-seid.mdx +++ b/evm/transactions-with-seid.mdx @@ -35,31 +35,28 @@ All transaction commands support these common flags: - `--evm-rpc=` - EVM RPC endpoint URL (default: `http://localhost:8545`) - `--nonce=` - Nonce override for the transaction (-1 means auto-calculate) -## Address Management Commands +## Address management commands -### Associate Address +### Associate an address Associates the Sei address and EVM address on-chain for the sending key. This is required for cross-layer interactions. ```bash -seid tx evm associate-address [optional priv key hex] --from= --evm-rpc= +seid tx evm native-associate [custom-message] --from= ``` -**Parameters:** - -- `[optional priv key hex]` - Optional private key in hex format. If not provided, uses the key from keyring. +The custom message identifies the association request. This command submits a native transaction, so use standard `seid` transaction flags such as `--node` and `--chain-id` instead of `--evm-rpc`. **Example:** ```bash -seid tx evm associate-address --from=mykey --evm-rpc=http://localhost:8545 +seid tx evm native-associate "associate" \ + --from=mykey \ + --chain-id pacific-1 \ + --node https://rpc.sei-apis.com ``` -**Output :** - -``` -Response: {"jsonrpc":"2.0","result":null,"id":"associate_addr"} -``` +The legacy `seid tx evm associate-address` command and its `sei_associate` JSON-RPC method have been removed. ## Token Transfer Commands diff --git a/evm/transactions.mdx b/evm/transactions.mdx index 3c62e84..bfd3f9c 100644 --- a/evm/transactions.mdx +++ b/evm/transactions.mdx @@ -296,7 +296,7 @@ Before an EVM transaction is accepted, Sei performs strict semantic validation o Some EVM transactions pass basic validation and bump the sender's nonce, yet still fail during state transition — for example, a transaction whose gas limit clears the intrinsic-gas check but falls short of the EIP-7623 floor-data-gas requirement (which can occur in normal operation after Pectra). Because these transactions bump the nonce, they are considered to have happened and therefore produce a receipt. -For such failures, Sei writes a synthetic `status=0` (failed) receipt at the end of the block. The receipt reports a `gasUsed` of 0 and an `effectiveGasPrice` of 0, and carries a `VmError` describing the state-transition reason. `eth_getTransactionReceipt` returns this failed-tx receipt instead of `null`. The `VmError` is stored on Sei's internal receipt record and is not included in the `eth_getTransactionReceipt` JSON response; retrieve it with the non-standard `eth_getVMError` method. Because these synthetic receipts carry the ante-stub shape (`EffectiveGasPrice == 0` and `GasUsed == 0`), the legacy `*ExcludeTraceFail` endpoints exclude them along with other never-executed transactions. +For such failures, Sei writes a synthetic `status=0` (failed) receipt at the end of the block. The receipt reports a `gasUsed` of 0 and an `effectiveGasPrice` of 0, and carries a `VmError` describing the state-transition reason. `eth_getTransactionReceipt` returns this failed-tx receipt instead of `null`. The `VmError` is stored on Sei's internal receipt record and is not included in the `eth_getTransactionReceipt` JSON response; retrieve it with the non-standard `eth_getVMError` method. Previously, a nonce-bumping transaction that failed during state transition could return `null` from `eth_getTransactionReceipt` indefinitely, causing clients that poll for a receipt to hang. Clients should now expect a `status=0` receipt for these transactions and treat it as a normal failed-transaction result. diff --git a/learn/accounts.mdx b/learn/accounts.mdx index e60064d..2c24930 100644 --- a/learn/accounts.mdx +++ b/learn/accounts.mdx @@ -69,7 +69,7 @@ Certain actions are **not possible** before wallets are associated: Each method ensures the **public key** is known to the chain, enabling automatic association between the EVM-compatible and Bech32 addresses. All four go through the on-chain `addr` precompile (`0x0000000000000000000000000000000000001004`) or the EVM ante handler and are available on every Sei EVM RPC. -A previous "gasless" association flow that used the `sei_associate` JSON-RPC method has been retired — the method is part of the deprecated `sei_*` namespace and is not in the default `enabled_legacy_sei_apis` allowlist, so it returns `legacy_sei_deprecated` on public RPCs. Method 3 covers the same wallet-signed-message UX without depending on a gated endpoint. Node operators who want to re-enable the legacy method on their own infrastructure can add `sei_associate` to `enabled_legacy_sei_apis` in `app.toml` — see [Node Operators](/node/node-operators) for the surrounding config. +The legacy `sei_associate` JSON-RPC method has been removed. Method 3 provides the same wallet-signed-message flow through the `addr` precompile. Constants for the `addr` precompile can also be found in the repo [Sei-Chain/precompiles](https://github.com/sei-protocol/sei-chain/tree/main/precompiles/addr): diff --git a/node/node-operators.mdx b/node/node-operators.mdx index 31176fa..19c69d1 100644 --- a/node/node-operators.mdx +++ b/node/node-operators.mdx @@ -432,55 +432,24 @@ slow = false # Deny list defines list of methods that EVM RPC should fail fast, e.g ["debug_traceBlockByNumber"] deny_list = [] -# Legacy sei_* / sei2_* JSON-RPC (EVM HTTP only - not Cosmos REST on 1317). +# Legacy sei_* JSON-RPC (EVM HTTP only - not Cosmos REST on 1317). # -# DEPRECATION: The sei_* and sei2_* JSON-RPC surfaces are deprecated and scheduled for removal. Do not -# build new integrations on them; use eth_* / debug_* and documented replacements. HTTP 200; +# DEPRECATION: The remaining sei_* JSON-RPC surface is deprecated and scheduled for removal. Do not +# build new integrations on it; use eth_* / debug_* and documented replacements. HTTP 200; # gate errors use standard JSON-RPC error encoding (see evmrpc/AGENTS.md). Successful allowlisted # responses are unchanged; nodes may set HTTP header Sei-Legacy-RPC-Deprecation (see AGENTS.md). # +# The sei2_* namespace and obsolete sei_* methods have been removed. +# # Only methods listed in enabled_legacy_sei_apis are allowed. Init defaults enable the three -# address/Cosmos helpers; uncomment optional lines below to enable more legacy methods (include -# sei2_* block methods at the end of the list if you need them). +# address/Cosmos helpers; uncomment the receipt method below to enable it. enabled_legacy_sei_apis = [ "sei_getSeiAddress", "sei_getEVMAddress", "sei_getCosmosTx", - # Optional legacy methods - uncomment to enable (same deprecation applies): - # "sei_associate", - # "sei_getBlockByHash", - # "sei_getBlockByHashExcludeTraceFail", - # "sei_getBlockByNumber", - # "sei_getBlockByNumberExcludeTraceFail", - # "sei_getBlockReceipts", - # "sei_getBlockTransactionCountByHash", - # "sei_getBlockTransactionCountByNumber", - # "sei_getEvmTx", - # "sei_getFilterChanges", - # "sei_getFilterLogs", - # "sei_getLogs", - # "sei_getTransactionByBlockHashAndIndex", - # "sei_getTransactionByBlockNumberAndIndex", - # "sei_getTransactionByHash", - # "sei_getTransactionCount", - # "sei_getTransactionErrorByHash", + # Optional legacy method - uncomment to enable (same deprecation applies): # "sei_getTransactionReceipt", - # "sei_getTransactionReceiptExcludeTraceFail", - # "sei_getVMError", - # "sei_newBlockFilter", - # "sei_newFilter", - # "sei_sign", - # "sei_uninstallFilter", - # - # Optional sei2_* block namespace (bank transfers in blocks; HTTP only): - # "sei2_getBlockByHash", - # "sei2_getBlockByHashExcludeTraceFail", - # "sei2_getBlockByNumber", - # "sei2_getBlockByNumberExcludeTraceFail", - # "sei2_getBlockReceipts", - # "sei2_getBlockTransactionCountByHash", - # "sei2_getBlockTransactionCountByNumber", ] # max number of logs returned if block range is open-ended diff --git a/snippets/rpc-methods-viewer.jsx b/snippets/rpc-methods-viewer.jsx index 29d83c3..9a07771 100644 --- a/snippets/rpc-methods-viewer.jsx +++ b/snippets/rpc-methods-viewer.jsx @@ -29,8 +29,7 @@ const NAMESPACE_META = { txpool: { label: 'txpool', color: '#3b82f6', blurb: 'Transaction-pool inspection.' }, net: { label: 'net', color: '#0d9488', blurb: 'Network metadata.' }, web3: { label: 'web3', color: '#7c3aed', blurb: 'Client metadata.' }, - sei: { label: 'sei', color: '#600014', blurb: 'Legacy Sei extensions for cross-VM lookups and synthetic transactions.', deprecated: true }, - sei2: { label: 'sei2', color: '#34050d', blurb: 'Legacy Sei block queries that include bank transfers.', deprecated: true }, + sei: { label: 'sei', color: '#600014', blurb: 'Remaining legacy Sei extensions for address resolution, cross-VM lookup, and synthetic receipts.', deprecated: true }, admin: { label: 'admin', color: '#6b7280', blurb: 'Node administration — not exposed on Sei.', unavailable: true }, miner: { label: 'miner', color: '#6b7280', blurb: 'Mining control — not applicable (no proof-of-work).', unavailable: true }, clique: { label: 'clique', color: '#6b7280', blurb: 'Clique proof-of-authority — not applicable (CometBFT consensus).', unavailable: true }, @@ -39,7 +38,7 @@ const NAMESPACE_META = { personal: { label: 'personal', color: '#6b7280', blurb: 'Hosted-key account management — not exposed on Sei.', unavailable: true }, }; -const NAMESPACE_ORDER = ['eth', 'debug', 'txpool', 'net', 'web3', 'sei', 'sei2', 'admin', 'miner', 'clique', 'engine', 'les', 'personal']; +const NAMESPACE_ORDER = ['eth', 'debug', 'txpool', 'net', 'web3', 'sei', 'admin', 'miner', 'clique', 'engine', 'les', 'personal']; const STATUS_META = { supported: { label: 'Supported', dark: '#22c55e', light: '#16a34a', tip: 'Implemented with standard Ethereum behavior.' }, @@ -89,7 +88,7 @@ const SEI_RPC_METHODS = [ {"namespace":"eth","name":"eth_getBlockTransactionCountByNumber","status":"supported","description":"Returns the number of EVM transactions in a block by number, as a hex quantity.","seiNote":"Counts EVM transactions only (via getEvmTxCount); synthetic/bank-transfer txs are excluded. Genesis returns 0x0; non-existent/future blocks return null.","params":[{"name":"number","type":"BLOCKNUMBER","description":"Block number or tag.","example":"latest"}]}, {"namespace":"eth","name":"eth_getBlockTransactionCountByHash","status":"supported","description":"Returns the number of EVM transactions in a block by hash, as a hex quantity.","seiNote":"Counts EVM transactions only; synthetic/bank-transfer txs are excluded. Genesis hash returns 0x0; unknown hash returns null.","params":[{"name":"blockHash","type":"DATA, 32 bytes","description":"Block hash.","example":"0x5620c15afd9a1d0ab19d7560043df6e038d731c6205974dca7a55900071e3864"}]}, {"namespace":"eth","name":"eth_getBlockReceipts","status":"supported","description":"Returns all EVM transaction receipts for a given block.","seiNote":"Under the eth namespace synthetic/shell receipts are excluded (includeShellReceipts=false). Genesis returns an empty array; zero hash returns null. transactionIndex is recomputed sequentially over the compacted receipt list.","params":[{"name":"blockNrOrHash","type":"BLOCKNUMBER or DATA","description":"Block number, tag, or hash.","example":"latest"}]}, - {"namespace":"eth","name":"eth_getTransactionByHash","status":"supported","description":"Returns the EVM transaction matching the given hash, or null if not found.","seiNote":"Sees EVM transactions only; if the hash resolves to a non-EVM Cosmos tx it errors. Pending lookups read from the CometBFT mempool, not a geth txpool. Use the legacy sei_getTransactionByHash to also surface Cosmos txs with synthetic representations.","params":[{"name":"hash","type":"DATA, 32 bytes","description":"Transaction hash.","example":"0x828c91592453fe7c5bf743204495a35bf02b67b579b8f59ee7eea8af031d7c14"}]}, + {"namespace":"eth","name":"eth_getTransactionByHash","status":"supported","description":"Returns the EVM transaction matching the given hash, or null if not found.","seiNote":"Sees EVM transactions only; if the hash resolves to a non-EVM Cosmos tx it errors. Pending lookups read from the CometBFT mempool, not a geth txpool.","params":[{"name":"hash","type":"DATA, 32 bytes","description":"Transaction hash.","example":"0x828c91592453fe7c5bf743204495a35bf02b67b579b8f59ee7eea8af031d7c14"}]}, {"namespace":"eth","name":"eth_getTransactionReceipt","status":"supported","description":"Returns the receipt of a transaction by hash, or null if not found.","seiNote":"Receipt is reconstructed from keeper.GetReceipt + CometBFT block data rather than from a native MPT receipt trie; status/logs are standard Ethereum format.","params":[{"name":"hash","type":"DATA, 32 bytes","description":"Transaction hash.","example":"0x828c91592453fe7c5bf743204495a35bf02b67b579b8f59ee7eea8af031d7c14"}]}, {"namespace":"eth","name":"eth_getTransactionByBlockNumberAndIndex","status":"supported","description":"Returns the EVM transaction at the given index within the block at the specified number.","seiNote":"Index maps over EVM transactions only; an out-of-range index yields a null result rather than an error.","params":[{"name":"blockNr","type":"BLOCKNUMBER","description":"Block number or tag.","example":"latest"},{"name":"index","type":"QUANTITY","description":"Transaction index within the block.","example":"0x0"}]}, {"namespace":"eth","name":"eth_getTransactionByBlockHashAndIndex","status":"supported","description":"Returns the EVM transaction at the given index within the block identified by hash.","seiNote":"Index maps over EVM transactions only; same null-on-overflow semantics as the block-number variant.","params":[{"name":"blockHash","type":"DATA, 32 bytes","description":"Block hash.","example":"0x5620c15afd9a1d0ab19d7560043df6e038d731c6205974dca7a55900071e3864"},{"name":"index","type":"QUANTITY","description":"Transaction index within the block.","example":"0x0"}]}, @@ -101,7 +100,7 @@ const SEI_RPC_METHODS = [ {"namespace":"eth","name":"eth_newPendingTransactionFilter","status":"unsupported","description":"Pending-transaction filter. Registered but always returns an unsupported error.","seiNote":"Always returns JSON-RPC -32000. Sei has no geth-style public pending mempool to filter; the corresponding newPendingTransactions subscription type is likewise unavailable."}, {"namespace":"eth","name":"eth_getFilterChanges","status":"supported","description":"Polls a filter and returns new logs (log filters) or block hashes (block filters) since the last poll.","params":[{"name":"filterID","type":"QUANTITY/ID","description":"Filter ID from a New*Filter call.","example":"0x1"}]}, {"namespace":"eth","name":"eth_getFilterLogs","status":"supported","description":"Returns all logs matching a previously created log filter, including historical logs.","seiNote":"Bounded by the same caps as eth_getLogs (2,000-block range, 10,000-log limit) with large-query rate limiting.","params":[{"name":"filterID","type":"QUANTITY/ID","description":"Filter ID from a NewFilter call.","example":"0x1"}]}, - {"namespace":"eth","name":"eth_getLogs","status":"supported","description":"Returns logs matching the given filter criteria.","seiNote":"Returns EVM logs only. Hard limits: max 2,000 blocks per close-ended query and up to 10,000 logs per response; exceeding the range errors with 'block range too large'. Large queries are globally rate-limited. Use the legacy sei_getLogs to include synthetic logs from Cosmos activity.","params":[{"name":"crit","type":"object","description":"Filter criteria: fromBlock, toBlock (or blockHash), address(es), topics.","example":"{\"fromBlock\":\"0x0\",\"toBlock\":\"latest\",\"address\":\"0xE30feDd158A2e3b13e9badaeABaFc5516e95e8C7\",\"topics\":[]}"}]}, + {"namespace":"eth","name":"eth_getLogs","status":"supported","description":"Returns logs matching the given filter criteria.","seiNote":"Returns EVM logs only. Hard limits: max 2,000 blocks per close-ended query and up to 10,000 logs per response; exceeding the range errors with 'block range too large'. Large queries are globally rate-limited.","params":[{"name":"crit","type":"object","description":"Filter criteria: fromBlock, toBlock (or blockHash), address(es), topics.","example":"{\"fromBlock\":\"0x0\",\"toBlock\":\"latest\",\"address\":\"0xE30feDd158A2e3b13e9badaeABaFc5516e95e8C7\",\"topics\":[]}"}]}, {"namespace":"eth","name":"eth_uninstallFilter","status":"supported","description":"Removes a previously installed filter by ID; returns true if it existed and was removed.","seiNote":"Returns false if the filter did not exist rather than erroring. Filters also expire automatically when not polled.","params":[{"name":"filterID","type":"QUANTITY/ID","description":"Filter ID to remove.","example":"0x1"}]}, {"namespace":"eth","name":"eth_subscribe","status":"limited","description":"Opens a WebSocket-only push subscription for newHeads or logs notifications.","seiNote":"WebSocket-only (SubscriptionAPI is not registered on the HTTP server; returns rpc.ErrNotificationsUnsupported over HTTP). Only 'newHeads' and 'logs' are implemented in source; there is no 'newPendingTransactions' subscription despite some client docs implying otherwise. newHeads subscriptions are capped by MaxSubscriptionsNewHead.","params":[{"name":"subscriptionType","type":"string","description":"Subscription name: 'newHeads' or 'logs'.","example":"newHeads"},{"name":"filter","type":"object","description":"Optional filter criteria (address/topics) for the 'logs' subscription.","example":"{\"address\":\"0xE30feDd158A2e3b13e9badaeABaFc5516e95e8C7\",\"topics\":[]}"}]}, {"namespace":"eth","name":"eth_unsubscribe","status":"supported","description":"Cancels an existing WebSocket subscription by ID; returns true on success.","seiNote":"WebSocket only; has no effect over HTTP (notifications unsupported there).","params":[{"name":"subscriptionID","type":"string","description":"The subscription ID returned by a prior eth_subscribe call.","example":"0x9cef478923ff08bf67fde6c64013158d"}]}, @@ -140,41 +139,9 @@ const SEI_RPC_METHODS = [ {"namespace":"debug","name":"debug_intermediateRoots","status":"unsupported","description":"Intermediate state roots while executing a block. Not implemented on Sei.","seiNote":"Not registered; returns -32601. Sei uses IAVL state, not an Ethereum MPT, so per-transaction MPT intermediate roots are not produced.","params":[{"name":"blockHash","type":"DATA, 32 bytes","description":"Block hash.","example":"0x5620c15afd9a1d0ab19d7560043df6e038d731c6205974dca7a55900071e3864"},{"name":"config","type":"object","description":"Optional trace config.","example":"{}"}]}, {"namespace":"debug","name":"debug_setHead","status":"unsupported","description":"Rewind the chain head to a given block. Not implemented on Sei.","seiNote":"Not registered; returns -32601. The chain head is controlled by CometBFT consensus, not the EVM RPC layer.","params":[{"name":"number","type":"QUANTITY","description":"Block number to set as head.","example":"0x1a2b3c"}]}, {"namespace":"sei","name":"sei_getSeiAddress","status":"limited","description":"Returns the native Sei bech32 (sei1...) address associated with a given EVM (0x) address.","seiNote":"Deprecated legacy sei_* method, but ENABLED by default in the enabled_legacy_sei_apis allowlist on seid init. New integrations should call the addr precompile at 0x0000000000000000000000000000000000001004 (getSeiAddr) via eth_call. Errors if the address is not yet associated. HTTP-only.","params":[{"name":"ethAddress","type":"DATA, 20 bytes","description":"The EVM address to resolve.","example":"0xDa52B9E673d1f48FcD9916b3F606A136a8eA5e55"}]}, - {"namespace":"sei","name":"sei_getEVMAddress","status":"limited","description":"Returns the EVM (0x) address associated with a given native Sei bech32 (sei1...) address.","seiNote":"Deprecated legacy sei_* method, ENABLED by default in enabled_legacy_sei_apis. Prefer the addr precompile at 0x...1004 (getEvmAddr) via eth_call. Errors if the bech32 is malformed or the address is not yet associated. HTTP-only.","params":[{"name":"seiAddress","type":"string","description":"The Sei bech32 address to resolve.","example":"sei13ytysxs88z0fp9cssagg77ekpecrrlrwce9pwl"}]}, - {"namespace":"sei","name":"sei_getCosmosTx","status":"limited","description":"Returns the underlying CometBFT/Cosmos transaction hash corresponding to a given EVM transaction hash.","seiNote":"Deprecated legacy sei_* method, but ENABLED by default in enabled_legacy_sei_apis (it has no precompile equivalent yet). Bridges Sei's dual-tx model: every EVM tx is wrapped in a Cosmos tx; this returns the wrapping Cosmos tx hash. HTTP-only.","params":[{"name":"ethHash","type":"DATA, 32 bytes","description":"The EVM transaction hash to map to its underlying Cosmos tx hash.","example":"0x828c91592453fe7c5bf743204495a35bf02b67b579b8f59ee7eea8af031d7c14"}]}, - {"namespace":"sei","name":"sei_getEvmTx","status":"limited","description":"Returns the EVM transaction hash corresponding to a given CometBFT/Cosmos transaction hash.","seiNote":"Deprecated legacy sei_* method and DISABLED by default (not in the default enabled_legacy_sei_apis allowlist); disabled calls return -32601 with data 'legacy_sei_deprecated'. Inverse of sei_getCosmosTx; the cosmosHash arg is a plain hex string (no 0x prefix). HTTP-only.","params":[{"name":"cosmosHash","type":"string","description":"The Cosmos/CometBFT transaction hash as a hex string (no 0x prefix).","example":"A1B2C3D4E5F60718293A4B5C6D7E8F90A1B2C3D4E5F60718293A4B5C6D7E8F901"}]}, - {"namespace":"sei","name":"sei_associate","status":"limited","description":"Submits an address-association transaction linking an EVM address and its Sei address via a signed payload.","seiNote":"Deprecated legacy sei_* method, DISABLED by default (not in the default enabled_legacy_sei_apis allowlist). Broadcasts a real Cosmos AssociateTx (no gas) and returns no result on success. The same action is available on-chain via the addr precompile at 0x...1004 (associate/associatePubKey). HTTP-only.","params":[{"name":"req","type":"object","description":"AssociateRequest with hex-string signature components r, s, v and a custom_message.","example":"{\"r\":\"0x1c8aff950685c2ed4bc3174f3472287b56d9517b9c948127319a09a7a36deac8\",\"s\":\"0x2c8aff950685c2ed4bc3174f3472287b56d9517b9c948127319a09a7a36deac8\",\"v\":\"0x1b\",\"custom_message\":\"associate\"}"}]}, - {"namespace":"sei","name":"sei_getBlockByNumber","status":"limited","description":"Returns block info by number including Cosmos transactions that have synthetic EVM receipts.","seiNote":"Deprecated legacy sei_* method, DISABLED by default (must be added to enabled_legacy_sei_apis); disabled calls return -32601 with data 'legacy_sei_deprecated'. Unlike eth_getBlockByNumber it includes synthetic (shell) EVM txs for Cosmos activity, so tx indices differ from eth_. HTTP-only.","params":[{"name":"number","type":"BLOCKNUMBER","description":"Block number or tag.","example":"latest"},{"name":"fullTx","type":"boolean","description":"If true include full transaction objects, else only hashes.","example":"true"}]}, - {"namespace":"sei","name":"sei_getBlockByHash","status":"limited","description":"Returns block info by hash including Cosmos transactions that have synthetic EVM receipts.","seiNote":"Deprecated legacy sei_* method, DISABLED by default. Includes synthetic shell EVM txs (bank/Cosmos activity), unlike eth_getBlockByHash. HTTP-only.","params":[{"name":"blockHash","type":"DATA, 32 bytes","description":"Block hash.","example":"0x5620c15afd9a1d0ab19d7560043df6e038d731c6205974dca7a55900071e3864"},{"name":"fullTx","type":"boolean","description":"If true include full transaction objects, else only hashes.","example":"false"}]}, - {"namespace":"sei","name":"sei_getBlockReceipts","status":"limited","description":"Returns all receipts for a block including synthetic receipts for Cosmos transactions.","seiNote":"Deprecated legacy sei_* method, DISABLED by default. Returns more receipts than eth_getBlockReceipts for the same block (covering Sei synthetic/Cosmos-originated EVM activity). HTTP-only.","params":[{"name":"blockNrOrHash","type":"BLOCKNUMBER or DATA","description":"Block number, tag, or hash.","example":"latest"}]}, - {"namespace":"sei","name":"sei_getBlockTransactionCountByNumber","status":"limited","description":"Returns the transaction count of a block by number, including synthetic Cosmos txs.","seiNote":"Deprecated legacy sei_* method, DISABLED by default. HTTP-only.","params":[{"name":"number","type":"BLOCKNUMBER","description":"Block number or tag.","example":"latest"}]}, - {"namespace":"sei","name":"sei_getBlockTransactionCountByHash","status":"limited","description":"Returns the transaction count of a block by hash, including synthetic Cosmos txs.","seiNote":"Deprecated legacy sei_* method, DISABLED by default. HTTP-only.","params":[{"name":"blockHash","type":"DATA, 32 bytes","description":"Block hash.","example":"0x5620c15afd9a1d0ab19d7560043df6e038d731c6205974dca7a55900071e3864"}]}, - {"namespace":"sei","name":"sei_getBlockByNumberExcludeTraceFail","status":"limited","description":"Returns a block by number excluding transactions whose EVM trace failed (Sei extension).","seiNote":"Deprecated legacy sei_* method, DISABLED by default. Sei-only method (no Ethereum equivalent) that omits untraceable txs; passes includeSyntheticTxs=false, excludeUntraceable=true. HTTP-only.","params":[{"name":"number","type":"BLOCKNUMBER","description":"Block number or tag.","example":"latest"},{"name":"fullTx","type":"boolean","description":"If true include full transaction objects, else only hashes.","example":"true"}]}, - {"namespace":"sei","name":"sei_getBlockByHashExcludeTraceFail","status":"limited","description":"Returns a block by hash excluding transactions whose EVM trace failed (Sei extension).","seiNote":"Deprecated legacy sei_* method, DISABLED by default. Sei-only method (no Ethereum equivalent) that omits untraceable txs. HTTP-only.","params":[{"name":"blockHash","type":"DATA, 32 bytes","description":"Block hash.","example":"0x5620c15afd9a1d0ab19d7560043df6e038d731c6205974dca7a55900071e3864"},{"name":"fullTx","type":"boolean","description":"If true include full transaction objects, else only hashes.","example":"true"}]}, - {"namespace":"sei","name":"sei_getTransactionByHash","status":"limited","description":"Returns a transaction by hash including Cosmos txs with synthetic EVM representation.","seiNote":"Deprecated legacy sei_* method, DISABLED by default. Broader visibility than eth_getTransactionByHash (also surfaces Cosmos txs). HTTP-only.","params":[{"name":"hash","type":"DATA, 32 bytes","description":"Transaction hash.","example":"0x828c91592453fe7c5bf743204495a35bf02b67b579b8f59ee7eea8af031d7c14"}]}, - {"namespace":"sei","name":"sei_getTransactionReceipt","status":"limited","description":"Returns a transaction receipt by hash including synthetic receipts for Cosmos txs.","seiNote":"Deprecated legacy sei_* method, DISABLED by default. Broader visibility than eth_getTransactionReceipt. HTTP-only.","params":[{"name":"hash","type":"DATA, 32 bytes","description":"Transaction hash.","example":"0x828c91592453fe7c5bf743204495a35bf02b67b579b8f59ee7eea8af031d7c14"}]}, - {"namespace":"sei","name":"sei_getTransactionReceiptExcludeTraceFail","status":"limited","description":"Returns a transaction receipt, omitting it if the transaction panicked/failed during trace (Sei extension).","seiNote":"Deprecated legacy sei_* method, DISABLED by default. Calls getTransactionReceipt with excludePanicTxs=true, so receipts for panic/trace-fail txs are omitted (returns null). HTTP-only.","params":[{"name":"hash","type":"DATA, 32 bytes","description":"Transaction hash.","example":"0x828c91592453fe7c5bf743204495a35bf02b67b579b8f59ee7eea8af031d7c14"}]}, - {"namespace":"sei","name":"sei_getTransactionByBlockNumberAndIndex","status":"limited","description":"Returns a transaction by block number and index over the combined (incl. Cosmos) transaction set.","seiNote":"Deprecated legacy sei_* method, DISABLED by default. The index space includes Cosmos txs, so it differs from eth_. HTTP-only.","params":[{"name":"blockNumber","type":"BLOCKNUMBER","description":"Block number or tag.","example":"latest"},{"name":"index","type":"QUANTITY","description":"Transaction index over all txs, including Cosmos.","example":"0x0"}]}, - {"namespace":"sei","name":"sei_getTransactionByBlockHashAndIndex","status":"limited","description":"Returns a transaction by block hash and index over the combined (incl. Cosmos) transaction set.","seiNote":"Deprecated legacy sei_* method, DISABLED by default. HTTP-only.","params":[{"name":"blockHash","type":"DATA, 32 bytes","description":"Block hash.","example":"0x5620c15afd9a1d0ab19d7560043df6e038d731c6205974dca7a55900071e3864"},{"name":"index","type":"QUANTITY","description":"Transaction index over all txs, including Cosmos.","example":"0x0"}]}, - {"namespace":"sei","name":"sei_getTransactionCount","status":"limited","description":"Returns the transaction count (nonce) of an address at a given block.","seiNote":"Deprecated legacy sei_* method, DISABLED by default. Prefer eth_getTransactionCount. HTTP-only.","params":[{"name":"address","type":"DATA, 20 bytes","description":"Account address.","example":"0xDa52B9E673d1f48FcD9916b3F606A136a8eA5e55"},{"name":"blockNrOrHash","type":"BLOCKNUMBER or DATA","description":"Block number, tag, or hash.","example":"latest"}]}, - {"namespace":"sei","name":"sei_getTransactionErrorByHash","status":"limited","description":"Returns the recorded error message for a failed transaction by hash.","seiNote":"Deprecated legacy sei_* method, DISABLED by default (not in the default allowlist). HTTP-only.","params":[{"name":"hash","type":"DATA, 32 bytes","description":"Transaction hash.","example":"0x828c91592453fe7c5bf743204495a35bf02b67b579b8f59ee7eea8af031d7c14"}]}, - {"namespace":"sei","name":"sei_getVMError","status":"limited","description":"Returns the EVM/VM error string for a transaction by hash.","seiNote":"Deprecated legacy sei_* method, DISABLED by default. HTTP-only.","params":[{"name":"hash","type":"DATA, 32 bytes","description":"Transaction hash.","example":"0x828c91592453fe7c5bf743204495a35bf02b67b579b8f59ee7eea8af031d7c14"}]}, - {"namespace":"sei","name":"sei_getLogs","status":"limited","description":"Returns logs matching filter criteria, including synthetic logs from Cosmos transactions.","seiNote":"Deprecated legacy sei_* method, DISABLED by default. Unlike eth_getLogs it includes synthetic logs from Cosmos txs. Subject to the same 2,000-block / 10,000-log caps. HTTP-only.","params":[{"name":"crit","type":"object","description":"Filter criteria (fromBlock, toBlock, address, topics, blockHash).","example":"{\"fromBlock\":\"0x0\",\"toBlock\":\"latest\",\"address\":\"0xE30feDd158A2e3b13e9badaeABaFc5516e95e8C7\"}"}]}, - {"namespace":"sei","name":"sei_getFilterLogs","status":"limited","description":"Returns all logs for a filter ID, including synthetic Cosmos logs.","seiNote":"Deprecated legacy sei_* method, DISABLED by default. HTTP-only.","params":[{"name":"filterID","type":"QUANTITY/ID","description":"Filter ID.","example":"0x1"}]}, - {"namespace":"sei","name":"sei_getFilterChanges","status":"limited","description":"Returns new logs/hashes since the last poll of a filter (Sei view including synthetic events).","seiNote":"Deprecated legacy sei_* method, DISABLED by default. HTTP-only.","params":[{"name":"filterID","type":"QUANTITY/ID","description":"Filter ID.","example":"0x1"}]}, - {"namespace":"sei","name":"sei_newFilter","status":"limited","description":"Creates a log filter over the Sei (EVM+synthetic) view and returns its ID.","seiNote":"Deprecated legacy sei_* method, DISABLED by default. HTTP-only.","params":[{"name":"crit","type":"object","description":"Filter criteria (fromBlock, toBlock, address, topics).","example":"{\"fromBlock\":\"latest\",\"address\":\"0xE30feDd158A2e3b13e9badaeABaFc5516e95e8C7\",\"topics\":[]}"}]}, - {"namespace":"sei","name":"sei_newBlockFilter","status":"limited","description":"Creates a new-block filter (Sei view) and returns its ID.","seiNote":"Deprecated legacy sei_* method, DISABLED by default. HTTP-only."}, - {"namespace":"sei","name":"sei_uninstallFilter","status":"limited","description":"Removes a previously created sei filter by ID.","seiNote":"Deprecated legacy sei_* method, DISABLED by default. HTTP-only.","params":[{"name":"filterID","type":"QUANTITY/ID","description":"Filter ID.","example":"0x1"}]}, - {"namespace":"sei","name":"sei_traceBlockByNumberExcludeTraceFail","status":"unsupported","description":"Former Sei extension that traced a block by number excluding untraceable txs. Removed in v6.6.0.","seiNote":"Removed in v6.6.0 along with SeiDebugAPI; adding it to enabled_legacy_sei_apis has no effect. Use debug_traceBlockByNumber instead.","params":[]}, - {"namespace":"sei","name":"sei_traceBlockByHashExcludeTraceFail","status":"unsupported","description":"Former Sei extension that traced a block by hash excluding untraceable txs. Removed in v6.6.0.","seiNote":"Removed in v6.6.0 along with SeiDebugAPI; adding it to enabled_legacy_sei_apis has no effect. Use debug_traceBlockByHash instead.","params":[]}, - {"namespace":"sei","name":"sei_sign","status":"limited","description":"Signs data with a node-hosted key (Sei legacy variant of eth_sign).","seiNote":"Deprecated legacy sei_* method, DISABLED by default; notably the Docker localnet enables all gated methods EXCEPT sei_sign. Requires a node-hosted key (unusable on public RPC). HTTP-only.","params":[{"name":"address","type":"DATA, 20 bytes","description":"Account to sign with (must be in the node keyring).","example":"0xDa52B9E673d1f48FcD9916b3F606A136a8eA5e55"},{"name":"data","type":"DATA","description":"Data to sign.","example":"0xdeadbeef"}]}, - {"namespace":"sei2","name":"sei2_getBlockByNumber","status":"limited","description":"Returns block info by number in the sei block shape, additionally including Cosmos bank transfers.","seiNote":"Deprecated legacy sei2_* method, DISABLED by default (all sei2_* methods must be explicitly added to enabled_legacy_sei_apis); disabled calls return -32601 with data 'legacy_sei_deprecated'. Same shape as sei_ blocks plus Cosmos bank MsgSend transfers surfaced as synthetic EVM txs. HTTP-only (Sei2BlockAPI is not on the WebSocket server).","params":[{"name":"number","type":"BLOCKNUMBER","description":"Block number or tag.","example":"latest"},{"name":"fullTx","type":"boolean","description":"If true include full transaction objects, else only hashes.","example":"true"}]}, - {"namespace":"sei2","name":"sei2_getBlockByHash","status":"limited","description":"Returns block info by hash in the sei block shape, additionally including Cosmos bank transfers.","seiNote":"Deprecated legacy sei2_* method, DISABLED by default. Includes bank transfers in the block payload. HTTP-only.","params":[{"name":"blockHash","type":"DATA, 32 bytes","description":"Block hash.","example":"0x5620c15afd9a1d0ab19d7560043df6e038d731c6205974dca7a55900071e3864"},{"name":"fullTx","type":"boolean","description":"If true include full transaction objects, else only hashes.","example":"false"}]}, - {"namespace":"sei2","name":"sei2_getBlockReceipts","status":"limited","description":"Returns all receipts for a block in the sei2 shape (with bank-transfer context).","seiNote":"Deprecated legacy sei2_* method, DISABLED by default. HTTP-only. Note: in some source revisions the inherited GetBlockReceipts calls shouldIncludeSynthetic(\"sei2\"), which only accepts 'eth'/'sei' and can surface as an internal error for the sei2 namespace.","params":[{"name":"blockNrOrHash","type":"BLOCKNUMBER or DATA","description":"Block number, tag, or hash.","example":"latest"}]}, - {"namespace":"sei2","name":"sei2_getBlockTransactionCountByNumber","status":"limited","description":"Returns the transaction count of a block by number in the sei2 shape.","seiNote":"Deprecated legacy sei2_* method, DISABLED by default. HTTP-only.","params":[{"name":"number","type":"BLOCKNUMBER","description":"Block number or tag.","example":"latest"}]}, - {"namespace":"sei2","name":"sei2_getBlockTransactionCountByHash","status":"limited","description":"Returns the transaction count of a block by hash in the sei2 shape.","seiNote":"Deprecated legacy sei2_* method, DISABLED by default. The sei2 namespace has only block/receipt/count methods (no transaction or filter APIs). HTTP-only.","params":[{"name":"blockHash","type":"DATA, 32 bytes","description":"Block hash.","example":"0x5620c15afd9a1d0ab19d7560043df6e038d731c6205974dca7a55900071e3864"}]}, - {"namespace":"sei2","name":"sei2_getBlockByNumberExcludeTraceFail","status":"limited","description":"Returns a block by number excluding trace-failing txs, with bank transfers per the sei2 config.","seiNote":"Deprecated legacy sei2_* method, DISABLED by default. Passes includeSyntheticTxs=false, excludeUntraceable=true; includeBankTransfers=true still applies. HTTP-only.","params":[{"name":"number","type":"BLOCKNUMBER","description":"Block number or tag.","example":"latest"},{"name":"fullTx","type":"boolean","description":"If true include full transaction objects, else only hashes.","example":"true"}]}, - {"namespace":"sei2","name":"sei2_getBlockByHashExcludeTraceFail","status":"limited","description":"Returns a block by hash excluding trace-failing txs, with bank transfers per the sei2 config.","seiNote":"Deprecated legacy sei2_* method, DISABLED by default. HTTP-only.","params":[{"name":"blockHash","type":"DATA, 32 bytes","description":"Block hash.","example":"0x5620c15afd9a1d0ab19d7560043df6e038d731c6205974dca7a55900071e3864"},{"name":"fullTx","type":"boolean","description":"If true include full transaction objects, else only hashes.","example":"false"}]}, + {"namespace":"sei","name":"sei_getEVMAddress","status":"limited","description":"Returns the EVM (0x) address associated with a given native Sei bech32 (sei1...) address.","seiNote":"Deprecated legacy sei_* method, ENABLED by default in enabled_legacy_sei_apis. Prefer the addr precompile at 0x0000000000000000000000000000000000001004 (getEvmAddr) via eth_call. Errors if the bech32 is malformed or the address is not yet associated. HTTP-only.","params":[{"name":"seiAddress","type":"string","description":"The Sei bech32 address to resolve.","example":"sei13ytysxs88z0fp9cssagg77ekpecrrlrwce9pwl"}]}, + {"namespace":"sei","name":"sei_getCosmosTx","status":"limited","description":"Returns the underlying CometBFT/Cosmos transaction hash corresponding to a given EVM transaction hash.","seiNote":"Deprecated legacy sei_* method, but ENABLED by default in enabled_legacy_sei_apis (it has no precompile equivalent yet). Returns the wrapping Cosmos transaction hash as uppercase hexadecimal without a 0x prefix. HTTP-only.","params":[{"name":"ethHash","type":"DATA, 32 bytes","description":"The EVM transaction hash to map to its underlying Cosmos tx hash.","example":"0x828c91592453fe7c5bf743204495a35bf02b67b579b8f59ee7eea8af031d7c14"}]}, + {"namespace":"sei","name":"sei_getTransactionReceipt","status":"limited","description":"Returns a transaction receipt by hash, including synthetic receipts for Cosmos transactions.","seiNote":"Deprecated legacy sei_* method, DISABLED by default. It can retrieve logs for a synthetic transaction when its hash is already known. HTTP-only.","params":[{"name":"hash","type":"DATA, 32 bytes","description":"Transaction hash.","example":"0x828c91592453fe7c5bf743204495a35bf02b67b579b8f59ee7eea8af031d7c14"}]}, {"namespace":"admin","name":"admin_*","status":"unsupported","description":"Geth node administration namespace (admin_nodeInfo, admin_peers, admin_addPeer, admin_datadir, etc.). Not run by Sei.","seiNote":"Sei does not run go-ethereum's admin namespace; node administration is via the CometBFT/Cosmos stack. All admin_* methods return -32601 method not found."}, {"namespace":"miner","name":"miner_*","status":"unsupported","description":"Geth miner-control namespace (miner_start, miner_stop, miner_setEtherbase, miner_setGasPrice, etc.). Not run by Sei.","seiNote":"Sei has no PoW/PoA miner (CometBFT PoS consensus); the namespace is not served. All miner_* methods return -32601."}, {"namespace":"clique","name":"clique_*","status":"unsupported","description":"Clique proof-of-authority consensus namespace (clique_getSnapshot, clique_propose, etc.). Not run by Sei.","seiNote":"Sei uses CometBFT, not the Clique PoA engine; the namespace is not served. All clique_* methods return -32601."}, @@ -237,7 +204,7 @@ const deriveWsEndpoint = (httpUrl) => { }; const isWsOnly = (name) => name === 'eth_subscribe' || name === 'eth_unsubscribe'; -const isMutation = (name) => name === 'eth_sendRawTransaction' || name === 'eth_sendTransaction' || name === 'eth_signTransaction' || name === 'eth_sign' || name === 'sei_sign' || name === 'sei_associate' || name.startsWith('personal_'); +const isMutation = (name) => name === 'eth_sendRawTransaction' || name === 'eth_sendTransaction' || name === 'eth_signTransaction' || name === 'eth_sign' || name.startsWith('personal_'); const [theme, setTheme] = useState('dark'); const [isMobile, setIsMobile] = useState(false);