Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
16ce148
docs: Adds new opt-in config fields to enable estimated read/write me…
seidroid[bot] Oct 5, 2026
81b7e66
docs: Autobahn (GigaRouter) now supports fullnode mode driven by the …
seidroid[bot] Oct 5, 2026
35822b4
docs: A new config field `evm.max_estimate_gas_calls` limits the numb…
seidroid[bot] Oct 5, 2026
3fbe09d
docs: Adds a new 'auto' value for the sc-write-mode node config field…
seidroid[bot] Oct 5, 2026
25ebb8c
docs: Adds a new EVM RPC config field `evm.max_subscriptions_logs` to…
seidroid[bot] Oct 5, 2026
5e373a9
docs: A new 'littidx' backend option is now accepted for the receipt-…
seidroid[bot] Oct 5, 2026
648c233
docs: The eth_createAccessList JSON-RPC endpoint now enforces a reque…
seidroid[bot] Oct 5, 2026
3b24f94
docs: Adds a new node config field `hash-vault-disabled-unsafe` that …
seidroid[bot] Oct 5, 2026
1a0e2c2
docs: Adds a new receipt-store config field/flag `receipt-store.log-f…
seidroid[bot] Oct 5, 2026
6a08627
docs: The debug_traceStateAccess JSON-RPC method now honors the confi…
seidroid[bot] Oct 5, 2026
2254188
docs: Adds two new EVM RPC config fields (max_request_body_bytes and …
seidroid[bot] Oct 5, 2026
bc4e0a6
docs: Adds a per-block hash logger feature to the state-commit store …
seidroid[bot] Oct 5, 2026
04a4cf4
docs: LittDB's garbage collection was rewritten to run asynchronously…
seidroid[bot] Oct 5, 2026
a84ba06
docs: Introduces an experimental SEI_CONFIG_MANAGER environment varia…
seidroid[bot] Oct 5, 2026
d5f10e8
docs: Adds new gRPC server config fields in app.toml (max-recv-msg-si…
seidroid[bot] Oct 5, 2026
2ab34ae
docs: The seidb dump-flatkv command gains new flags (--lthash, --ltha…
seidroid[bot] Oct 5, 2026
2b6d1be
docs: OTEL/Prometheus metrics now include a `chain_id` constant label…
seidroid[bot] Oct 5, 2026
6b3e429
docs: Adds a new 'historical_replay' build tag that produces a consen…
seidroid[bot] Oct 5, 2026
bf9c103
docs: Adds a new EVM RPC config field `evm.max_trace_struct_log_bytes…
seidroid[bot] Oct 5, 2026
8f94f40
docs: Adds a new `hashlog` command group to the seidb tool with `get-…
seidroid[bot] Oct 5, 2026
3ca40c3
docs: The state-commit sc-write-mode config now accepts the legacy "c…
seidroid[bot] Oct 5, 2026
0c2c694
docs: LittDB adds new config fields (FlushChannelSize, ShardControlCh…
seidroid[bot] Oct 5, 2026
9084555
docs: The seid node app now reads pruning options from flags and appl…
seidroid[bot] Oct 5, 2026
8b59ed1
docs: Adds two new EVM RPC config fields (max_state_override_accounts…
seidroid[bot] Oct 5, 2026
ba5bcb8
docs: Prometheus telemetry is now automatically tagged with a chain_i…
seidroid[bot] Oct 5, 2026
f8ba529
docs: The seidb evm-logical-digest command gains a new 'composite' ba…
seidroid[bot] Oct 6, 2026
fa86ef5
docs: New app.toml config fields gate which debug tracers callers may…
seidroid[bot] Oct 6, 2026
dd39c36
docs: LittDB adds a per-table Compression config option (S2 algorithm…
seidroid[bot] Oct 6, 2026
0555a66
docs: Adds a new node config field `max-search-scan-budget` (default …
seidroid[bot] Oct 6, 2026
6b4093d
docs: The autobahn consensus data layer migrates from the old WAL-bas…
seidroid[bot] Oct 6, 2026
576ba51
docs: Adds eight new query precompiles (auth, authz, evidence, feegra…
seidroid[bot] Oct 6, 2026
9fe9770
docs: The EVM module now tracks recent block hashes in a KV store rin…
seidroid[bot] Oct 6, 2026
6d0b2c2
docs: Adds a new `max_log_bytes` EVM config field and changes `max_lo…
seidroid[bot] Oct 6, 2026
4f550bd
docs: Dynamic-gas precompiles now charge gas for ABI-decoding calldat…
seidroid[bot] Oct 6, 2026
fa932d5
docs: Seed nodes now expose a Prometheus metrics endpoint (and fail s…
seidroid[bot] Oct 6, 2026
7cc9ac2
docs: The json, p256, and pointerview precompiles switched to a dynam…
seidroid[bot] Oct 6, 2026
d5c3b35
docs: Cosmos transaction ante handlers now validate provided public k…
seidroid[bot] Oct 6, 2026
c2dc390
docs: Distribution reward queries (DelegationRewards / DelegationTota…
seidroid[bot] Oct 6, 2026
4311939
docs: The SEI_CONFIG_MANAGER=v2 environment variable now activates a …
seidroid[bot] Oct 6, 2026
d30f9c6
docs: The slashing precompile adds a new unjail() transaction method …
seidroid[bot] Oct 6, 2026
0b15a48
docs: EVM WebSocket plane (:8546) now shares HTTP admission-control c…
seidroid[bot] Oct 6, 2026
ec1651c
Merge branch 'main' into docs-bridge/release-v6.7.0
alexander-sei Oct 9, 2026
a41747d
Merge branch 'main' into docs-bridge/release-v6.7.0
alexander-sei Oct 12, 2026
c62b6b1
Refresh EVM docs for v6.7
alexander-sei Oct 15, 2026
c844bcd
docs: correct v6.7 RPC, precompile, and node details
alexander-sei Oct 15, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/styles/Sei/Headings.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ exceptions:
- Ledger
- Twin Turbo Consensus
- Autobahn
- HashVault
- Prometheus
- Pectra
- RPC
- API
Expand Down
3 changes: 3 additions & 0 deletions _typos.toml
Original file line number Diff line number Diff line change
Expand Up @@ -42,3 +42,6 @@ maxiumum = "maxiumum"
# "correcting" the snapshot would only diverge from the source of truth).
numnber = "numnber" # PR #237 title: "Add next-account-numnber cli"
tunning = "tunning" # changelog entry: "log tunning for p2p"
# sei-chain metric label value evmrpc_requests_rejected_total{reason="unparseable"},
# quoted verbatim in node/advanced-config-monitoring.mdx so PromQL matches.
unparseable = "unparseable"
17 changes: 14 additions & 3 deletions docs.json
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,6 @@
"evm/evm-parity/finality",
"evm/evm-parity/gas-and-fees",
"evm/evm-parity/transaction-types",
"evm/evm-parity/state-proofs",
"evm/evm-parity/websocket",
"evm/evm-parity/signing"
]
Expand Down Expand Up @@ -198,7 +197,14 @@
"evm/precompiles/cosmwasm-precompiles/bank",
"evm/precompiles/cosmwasm-precompiles/cosmwasm"
]
}
},
"evm/precompiles/auth",
"evm/precompiles/authz",
"evm/precompiles/evidence",
"evm/precompiles/mint",
"evm/precompiles/params",
"evm/precompiles/slashing",
"evm/precompiles/upgrade"
]
}
]
Expand Down Expand Up @@ -1737,6 +1743,11 @@
"source": "/learn/sip-03-exchange-migration",
"destination": "/learn/sip-03-migration",
"permanent": true
},
{
"source": "/evm/evm-parity/state-proofs",
"destination": "/evm/evm-parity/evm-compatibility#proof-verification",
"permanent": true
}
],
"interaction": {
Expand All @@ -1754,4 +1765,4 @@
"icons": {
"library": "fontawesome"
}
}
}
2 changes: 1 addition & 1 deletion evm/differences-with-ethereum.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -69,13 +69,13 @@
| PREVRANDAO | Returns a value derived from the current block time | Returns the RANDAO mix (EIP‑4399) | Not a randomness source. Use an oracle/VRF. `DIFFICULTY` aliases to this. |
| COINBASE | Always the global fee collector address | Block proposer (miner) address | Do not assume it is the validator address. |
| BASEFEE | Returns the current base fee, with no burn | Returns the current base fee. A portion is burned (EIP‑1559). | Legacy transactions must meet Sei's governance-set minimum gas price (currently `50 gwei`). Query `eth_gasPrice` for the live value. |
| BLOCKHASH | Hash of the Tendermint header, with a different encoding | Keccak of the Ethereum block header | Usable for recent blocks only. Values are not interchangeable across chains. |
| BLOCKHASH | Hash of the Tendermint header, with a different encoding | Keccak of the Ethereum block header | Returns hashes for the previous 256 blocks, as on Ethereum. Older, current, and future blocks return zero. Values are not interchangeable across chains. |
| GASLIMIT | = 12,500,000 per block | = 60,000,000 per block | Represents the block gas limit on both chains. |
| TIMESTAMP | Tendermint block time | Proposer-chosen block time | Same semantics. Do not use it for randomness. |
| DIFFICULTY | Alias of PREVRANDAO | Alias of PREVRANDAO (EIP‑4399) | Returns the same value as PREVRANDAO. |
| Blob‑related opcodes | Not supported (Pectra without blobs) | Supported post‑Cancun (EIP‑4844) | Blob transactions are not enabled on Sei. |

### PREVRANDAO

Check warning on line 78 in evm/differences-with-ethereum.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

evm/differences-with-ethereum.mdx#L78

Use sentence case for headings: 'PREVRANDAO'.

Proof of Stake (PoS) Ethereum uses pseudo‑randomness to determine the next
validator. Sei does not rely on the same method, so it does not have the
Expand Down Expand Up @@ -210,7 +210,7 @@

</Info>

## SSTORE gas cost

Check warning on line 213 in evm/differences-with-ethereum.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

evm/differences-with-ethereum.mdx#L213

Use sentence case for headings: 'SSTORE gas cost'.

On Sei, the gas cost of the `SSTORE` opcode is a configurable on-chain parameter. A governance proposal can adjust it without a chain upgrade. This lets governance tune storage costs based on EVM state size and network conditions.

Expand Down
14 changes: 7 additions & 7 deletions evm/evm-parity/evm-compatibility.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ Standard EVM tools (viem, wagmi, ethers, Foundry, and Hardhat) work on Sei for a
| `eth_getTransactionCount` (nonce) | Supported | |
| `eth_getCode` | Supported | |
| `eth_getStorageAt` | Supported with differences | Governance can adjust the SSTORE cost. Do not hard-code gas assumptions. [See Gas and Fees.](/evm/evm-parity/gas-and-fees) |
| `eth_getProof` | Supported with differences | Returns IAVL proof data, not Ethereum Merkle Patricia Trie proofs. Proof verification logic must account for this. Proofs resolve across the supported store backends (classic IAVL, store/v2 memiavl, and other proof-capable queryable stores). As a result, the method works across a broader range of node configurations. [See State Proofs.](/evm/evm-parity/state-proofs) |
| `eth_getProof` | Not supported | Since v6.7.0, the method returns JSON-RPC error `-32000`. [See Proof verification.](#proof-verification) |

## Blocks and finality

Expand All @@ -52,7 +52,7 @@ Standard EVM tools (viem, wagmi, ethers, Foundry, and Hardhat) work on Sei for a

| Feature | Sei status | Notes |
| --- | --- | --- |
| `eth_getLogs` | Supported | |
| `eth_getLogs` | Supported with differences | A query fails when it matches more than 10,000 logs (`max_log_no_block`) or about 64 MiB of log data (`max_log_bytes`). The query does not return partial results. Narrow the block range or the filters, then try again. [See Filter and subscription limits.](/evm/reference#filter-and-subscription-limits) |
| Filter lifecycle (`eth_newFilter`, `eth_getFilterChanges`, `eth_getFilterLogs`, `eth_uninstallFilter`) | Supported | |
| WebSocket subscriptions (`eth_subscribe`) | Supported | [See WebSocket Connections.](/evm/evm-parity/websocket) |

Expand Down Expand Up @@ -119,16 +119,16 @@ These JSON-RPC methods are not available on Sei or return errors:

| Method | Behavior on Sei |
| --- | --- |
| `eth_getBlockByNumber("pending")` | Returns `null` or the latest committed block. Sei does not maintain an Ethereum-style pending block. |
| `eth_getTransactionCount(address, "pending")` | Returns the same value as `"latest"`. On Sei, the pending nonce is the same as the confirmed nonce. |
| `eth_newPendingTransactionFilter` | You can create the filter, but it does not reliably emit pending transactions. Use `eth_newBlockFilter` or WebSocket block subscriptions instead. |
| `eth_subscribe("newPendingTransactions")` | Supported at the RPC level, but Sei does not guarantee Ethereum-style pending transaction visibility. Treat the results as best effort. |
| `eth_getBlockByNumber("pending")` | Returns the latest committed block. Sei does not maintain an Ethereum-style pending block. |
| `eth_getTransactionCount(address, "pending")` | Returns the sender's next nonce, including the sender's transactions in the mempool. If the sender has no transactions in the mempool, it returns the same value as `"latest"`. |
| `eth_newPendingTransactionFilter` | Not supported. The call always returns an error. Use `eth_newBlockFilter` or a `newHeads` subscription instead. |
| `eth_subscribe("newPendingTransactions")` | Not supported. Sei supports only the `newHeads` and `logs` subscriptions. |

### Proof verification

| Method | Behavior on Sei |
| --- | --- |
| `eth_getProof` | Returns IAVL tree proofs, not Ethereum Merkle Patricia Trie proofs. The method works, but the proof format is not compatible with standard Ethereum MPT verifiers. [See State Proofs.](/evm/evm-parity/state-proofs) |
| `eth_getProof` | Not supported since v6.7.0. Sei registers the method, but every call returns JSON-RPC error `-32000` with the message `eth_getProof is not supported yet; please reach out to the Sei Labs if you need this endpoint`. |

### Deprecated / removed opcodes

Expand Down
11 changes: 11 additions & 0 deletions evm/evm-parity/gas-and-fees.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@
In practice, when your priority tip plus the base fee stays below `maxFeePerGas`, the receipt reports `baseFee + maxPriorityFeePerGas`, not `maxFeePerGas`. To compute what a transaction paid, use the receipt's `effectiveGasPrice`, not `maxFeePerGas`.


## SSTORE cost

Check warning on line 64 in evm/evm-parity/gas-and-fees.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

evm/evm-parity/gas-and-fees.mdx#L64

Use sentence case for headings: 'SSTORE cost'.

On Sei, governance can adjust the gas cost of `SSTORE` (a write to contract storage). The current cost is **72,000 gas** on both Sei Mainnet and Sei Testnet. For details, see [Differences with Ethereum](/evm/differences-with-ethereum#sstore-gas-cost). Treat this number as the current value, not a constant. Do not hard-code storage write estimates in your application.

Expand Down Expand Up @@ -92,6 +92,17 @@

<Warning>Estimate the absolute storage-write cost with a live `eth_estimateGas` call against a Sei RPC. A Foundry `forge test --gas-report --fork-url <sei rpc>` report forks the chain *state*, but it runs the standard EVM gas schedule of revm. It therefore shows `SSTORE` at the Ethereum cost (approximately 22,100) instead of the Sei cost (approximately 72,000). Use the report for relative profiling of your own logic.</Warning>

## Gas for precompile calls

Sei precompiles charge gas based on the work that each call does:

- Before a precompile decodes its arguments, it charges gas for the calldata. The charge grows with the calldata length and with the size of any `string` arguments. A call that cannot pay this charge reverts before the precompile runs.
- The JSON precompile also charges 100 gas per byte of JSON input.
- The pointer view precompile also charges for the state that each lookup reads.
- The P256 precompile also charges a fixed 3,450 gas per verification, the same as RIP-7212 `P256VERIFY`. If the call cannot pay it, the call fails with an out-of-gas error.

Because the cost depends on your calldata, do not hard-code gas limits for precompile calls. Use `eth_estimateGas`, as shown in the example above.

## Summary

| Behavior | Ethereum | Sei |
Expand Down
84 changes: 0 additions & 84 deletions evm/evm-parity/state-proofs.mdx

This file was deleted.

12 changes: 11 additions & 1 deletion evm/evm-parity/websocket.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
description: 'Connecting to Sei via WebSocket for real-time block and event subscriptions'
---

# WebSocket connections

Check warning on line 6 in evm/evm-parity/websocket.mdx

View check run for this annotation

Mintlify / Mintlify Validation (seilabs) - vale-spellcheck

evm/evm-parity/websocket.mdx#L6

Use sentence case for headings: 'WebSocket connections'.

Sei supports `eth_subscribe` over WebSocket. With the WebSocket transports in standard libraries, you can subscribe to new blocks, event logs, and pending transactions.

Expand Down Expand Up @@ -109,9 +109,19 @@
## Notes

- Sei has instant finality, so every block emitted over WebSocket is already final. You do not need to wait for more confirmations before you act on an event.
- Pending transaction subscriptions (`newPendingTransactions`) are supported at the RPC level, but Sei does not guarantee Ethereum-style pending state visibility.
- Sei does not support `newPendingTransactions` subscriptions. You can subscribe only to `newHeads` and `logs`.

## Frame size and concurrency limits

WebSocket connections use the same request limits as HTTP JSON-RPC. Operators set them in the `[evm]` section of `app.toml`:

- `max_request_body_bytes` (default 5 MiB) caps each WebSocket frame and each HTTP request body. If a frame is larger, the node closes the connection with WebSocket close code `1009` and does not send a JSON-RPC error.
- `max_concurrent_request_bytes` (default 128 MiB) caps the request bytes that the node processes at the same time. WebSocket and HTTP each have their own budget.
- `ws_admission_timeout` (default `30s`) sets how long a WebSocket request waits for budget. When the wait expires, the client gets JSON-RPC error `-32005` and the node closes the connection, which ends its subscriptions.

<Warning>
Before v6.7.0, the WebSocket frame limit was 10 MiB. If your clients send frames between 5 MiB and 10 MiB, set `max_request_body_bytes = 10485760` in `app.toml` before you upgrade. This setting also raises the HTTP body limit to 10 MiB.
</Warning>

## `newHeads` under Autobahn consensus

Expand Down
61 changes: 61 additions & 0 deletions evm/precompiles/auth.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
---
title: 'Auth Precompile'
sidebarTitle: 'Auth'
description: 'Read account details, auth module parameters, and the next account number from EVM contracts with the Auth precompile.'
keywords: ['auth precompile', 'account query', 'account number', 'account sequence', 'sei evm']
---
**Address:** `0x000000000000000000000000000000000000100D`

The Auth precompile reads data from the Cosmos `auth` module: account details, module parameters, and the next account number. All methods are `view` functions. The precompile is available since v6.7.0.

## Interface

```solidity Auth.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

address constant AUTH_PRECOMPILE_ADDRESS = 0x000000000000000000000000000000000000100D;

IAuth constant AUTH_CONTRACT = IAuth(AUTH_PRECOMPILE_ADDRESS);

interface IAuth {
function account(address addr) external view returns (Account memory account);
function accounts(bytes memory pageKey) external view returns (AccountsResponse memory response);
function params() external view returns (AuthParams memory params);
function nextAccountNumber() external view returns (uint64 count);

struct Account {
string accountAddress;
uint64 accountNumber;
uint64 sequence;
}

struct AccountsResponse {
Account[] accounts;
bytes nextKey;
}

struct AuthParams {
uint64 maxMemoCharacters;
uint64 txSigLimit;
uint64 txSizeCostPerByte;
uint64 sigVerifyCostEd25519;
uint64 sigVerifyCostSecp256k1;
bool disableSeqnoCheck;
}
}
```

## Methods

| Method | Returns |
| --- | --- |
| `account(addr)` | The Sei address, account number, and sequence of the account linked to `addr`. |
| `accounts(pageKey)` | All accounts, one page at a time. |
| `params()` | The `auth` module parameters. |
| `nextAccountNumber()` | The account number that the next new account gets. The call does not change the counter. |

## Notes

- `account()` reverts if `addr` has no associated Sei address, or if no account exists for it.
- For `accounts()`, pass empty bytes for the first page, then pass the returned `nextKey`. An empty `nextKey` means there are no more pages.
77 changes: 77 additions & 0 deletions evm/precompiles/authz.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
---
title: 'Authz Precompile'
sidebarTitle: 'Authz'
description: 'Read Cosmos authz grants between accounts from EVM contracts with the Authz precompile.'
keywords: ['authz precompile', 'authorization grants', 'granter', 'grantee', 'sei evm']
---
**Address:** `0x000000000000000000000000000000000000100E`

The Authz precompile reads grants from the Cosmos `authz` module. A grant lets a grantee account send specific messages for a granter account. All methods are `view` functions. The precompile is available since v6.7.0.

## Interface

```solidity Authz.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

address constant AUTHZ_PRECOMPILE_ADDRESS = 0x000000000000000000000000000000000000100e;

IAuthz constant AUTHZ_CONTRACT = IAuthz(AUTHZ_PRECOMPILE_ADDRESS);

interface IAuthz {
function grants(
address granter,
address grantee,
string memory msgTypeUrl,
bytes memory pageKey
) external view returns (GrantsResponse memory response);

function granterGrants(
address granter,
bytes memory pageKey
) external view returns (GrantAuthorizationsResponse memory response);

function granteeGrants(
address grantee,
bytes memory pageKey
) external view returns (GrantAuthorizationsResponse memory response);

struct Grant {
bytes authorization;
int64 expiration;
}

struct GrantsResponse {
Grant[] grants;
bytes nextKey;
}

struct GrantAuthorization {
string granter;
string grantee;
bytes authorization;
int64 expiration;
}

struct GrantAuthorizationsResponse {
GrantAuthorization[] grants;
bytes nextKey;
}
}
```

## Methods

| Method | Returns |
| --- | --- |
| `grants(granter, grantee, msgTypeUrl, pageKey)` | The grants from `granter` to `grantee`. Pass an empty `msgTypeUrl` to get grants for every message type. |
| `granterGrants(granter, pageKey)` | Every grant that `granter` issued. |
| `granteeGrants(grantee, pageKey)` | Every grant that `grantee` received. |

## Notes

- Every address argument must have an associated Sei address. Otherwise, the call reverts.
- If you pass a `msgTypeUrl` and no grant matches it, `grants` reverts.
- `authorization` is the grant's authorization encoded as JSON. It includes an `@type` field that names the authorization type.
- `expiration` is a Unix timestamp in seconds. In `GrantAuthorization`, `granter` and `grantee` are Sei addresses.
- For paginated methods, pass empty bytes for the first page, then pass the returned `nextKey`. An empty `nextKey` means there are no more pages.
Loading
Loading