/SKILL.md` layout for *multiple* skills, but Sei doesn't use it — `.gitignore` excludes all of `.mintlify/`.)
+- **Brand kit** lives at https://docs.sei.io/learn/general-brand-kit; coordinate visual-identity changes with sei.io/media.
diff --git a/skill/references/frontend/frontend-stack.md b/skill/references/frontend/frontend-stack.md
index f874661..139c3fd 100644
--- a/skill/references/frontend/frontend-stack.md
+++ b/skill/references/frontend/frontend-stack.md
@@ -14,7 +14,7 @@ Build dApps that interact with Sei from the browser or Node. This file replaces
| **Library** | Wagmi + Viem | You want maximum control or React-free scripts → ethers v6 |
| **Wallet (consumer)** | Sei Global Wallet (`@sei-js/sei-global-wallet`) | Power-user app → MetaMask, Compass, Ledger |
| **Wallet UX shell** | RainbowKit or ConnectKit | You want bare bones → Wagmi `useConnect` directly |
-| **Chain config** | `@sei-js/precompiles` exports | You need a chain not in `@sei-js/precompiles` → manual `defineChain` |
+| **Chain config** | `sei` / `seiTestnet` from `wagmi/chains` (or `viem/chains`) | A chain not exported → viem `defineChain` |
| **State / data** | TanStack Query (Wagmi default) | Already on Redux/Zustand → integrate manually |
## Quick install
@@ -38,7 +38,7 @@ npm install ethers @sei-js/precompiles
```ts
// wagmi.config.ts
import { createConfig, http } from "wagmi";
-import { sei, seiTestnet } from "@sei-js/precompiles";
+import { sei, seiTestnet } from "wagmi/chains";
import { injected, walletConnect } from "wagmi/connectors";
export const wagmiConfig = createConfig({
@@ -76,7 +76,7 @@ export function App({ children }: { children: React.ReactNode }) {
```tsx
import { useAccount, useReadContract, useWriteContract } from "wagmi";
import { parseEther, parseUnits } from "viem";
-import { sei } from "@sei-js/precompiles";
+import { sei } from "wagmi/chains";
function Balance({ token }: { token: `0x${string}` }) {
const { address } = useAccount();
@@ -133,7 +133,7 @@ For a polished modal, use RainbowKit:
```tsx
import { RainbowKitProvider, getDefaultConfig } from "@rainbow-me/rainbowkit";
import "@rainbow-me/rainbowkit/styles.css";
-import { sei, seiTestnet } from "@sei-js/precompiles";
+import { sei, seiTestnet } from "wagmi/chains";
const config = getDefaultConfig({
appName: "My Sei App",
@@ -177,14 +177,16 @@ Every Sei account has both an EVM address (`0x...`) and a Cosmos address (`sei1.
import { ADDRESS_PRECOMPILE_ADDRESS, ADDRESS_PRECOMPILE_ABI } from "@sei-js/precompiles";
function DualAddress({ evm }: { evm: `0x${string}` }) {
- const { data: cosmos } = useReadContract({
+ const { data: cosmos, isError } = useReadContract({
address: ADDRESS_PRECOMPILE_ADDRESS,
abi: ADDRESS_PRECOMPILE_ABI,
functionName: "getSeiAddr",
args: [evm],
});
- const associated = cosmos && cosmos !== "";
+ // getSeiAddr REVERTS for an unassociated address (it does NOT return "") —
+ // treat the read error as "not linked", not a crash.
+ const associated = !isError && !!cosmos;
return (
EVM: {evm}
@@ -230,7 +232,7 @@ Wagmi handles multichain natively. Just include the chains you support:
```ts
import { mainnet, arbitrum, optimism } from "wagmi/chains";
-import { sei } from "@sei-js/precompiles";
+import { sei } from "wagmi/chains";
export const config = createConfig({
chains: [sei, mainnet, arbitrum, optimism],
@@ -255,7 +257,7 @@ If the user's wallet doesn't already know about Sei, prompt to add it:
```ts
import { useSwitchChain } from "wagmi";
-import { sei } from "@sei-js/precompiles";
+import { sei } from "wagmi/chains";
const { switchChainAsync } = useSwitchChain();
@@ -263,7 +265,7 @@ await switchChainAsync({ chainId: sei.id });
// Wagmi triggers wallet_addEthereumChain if needed
```
-`@sei-js/precompiles`'s exports include the canonical `chainName`, `nativeCurrency`, `rpcUrls`, and `blockExplorers` that wallets need.
+The `sei` / `seiTestnet` configs from `wagmi/chains` include the canonical `chainName`, `nativeCurrency`, `rpcUrls`, and `blockExplorers` that wallets need. (`@sei-js/precompiles` ships only the `seiLocal` dev chain — not `sei`/`seiTestnet` — so use it for precompile addresses/ABIs, not chain config.)
## ethers v6 (non-React, scripts)
@@ -321,7 +323,7 @@ For most consumer apps, expose Sei Global Wallet **first** in the connect menu a
| Symptom | Cause | Fix |
|---|---|---|
-| `unsupported chain` from wallet | Wallet doesn't know Sei | Use `useSwitchChain` to add Sei via `@sei-js/precompiles` config |
+| `unsupported chain` from wallet | Wallet doesn't know Sei | Use `useSwitchChain` to add the `sei` chain from `wagmi/chains` |
| `replacement transaction underpriced` | gas price < 50 gwei | Set `gasPrice: parseUnits("50", "gwei")` |
| `user rejected` after delay | EIP-1559 fields confused wallet | Drop `maxFeePerGas`/`maxPriorityFeePerGas`; use legacy `gasPrice` |
| Transaction confirms but UI never updates | Watching wrong chain | Pin `chainId` in writes; ensure read hooks watch the same chain |
@@ -338,15 +340,17 @@ For most consumer apps, expose Sei Global Wallet **first** in the connect menu a
## Project scaffolding
```bash
-npx @sei-js/create-sei my-sei-app
-# Interactive: pick React/Next.js, Wagmi/Ethers, TypeScript
+npx @sei-js/create-sei app --name my-sei-app
+# Default template: Next.js 15 · React 19 · wagmi v2 · viem · RainbowKit ·
+# TanStack Query · Tailwind CSS v4 · Mantine UI · Biome · TypeScript.
+# Add the precompiles examples with: --extension precompiles
```
-Includes pre-configured Sei network entries.
+Includes pre-configured Sei network entries (mainnet 1329 / testnet 1328).
## Sei-specific notes
-- **Always use legacy `gasPrice ≥ 50 gwei`**; never EIP-1559 priority fee fields.
+- **Always use legacy `gasPrice`** (never EIP-1559 priority fee fields); the minimum is a governance-set floor (~50 gwei mainnet) — query `eth_gasPrice` for the live value rather than hardcoding.
- **Always pin `chainId`** in write calls.
- **Always use `wait(1)` / `confirmations: 1`** — anything more is wasted UX time.
- **Always import precompile addresses + ABIs from `@sei-js/precompiles`** rather than hardcoding.
diff --git a/skill/references/frontend/sites-map.md b/skill/references/frontend/sites-map.md
index d2994b4..a39dbc6 100644
--- a/skill/references/frontend/sites-map.md
+++ b/skill/references/frontend/sites-map.md
@@ -58,7 +58,7 @@ Four top-level sections.
- Bridging: LayerZero V2, Thirdweb
- Oracles & VRF: API3, Chainlink, Pyth, RedStone, Pyth VRF
- AI Tooling: Cambrian Agent Kit, **MCP Server**, Agentic Wallets, x402 Protocol
-- Reference: RPC, Tokens, **Ecosystem Contracts** (`/evm/reference/ecosystem-contracts`), Networks, USDC Integration, Ledger Setup
+- Reference: RPC, Tokens, **Ecosystem Contracts** (`/evm/ecosystem-contracts`), Networks, USDC Integration, Ledger Setup
### `/cosmos-sdk` — Cosmos-side development
- **Status**: deprecated per SIP-03 — migrate to EVM-only
@@ -89,12 +89,12 @@ Four top-level sections.
## Sei docs build/repo
-- **Repository**: https://github.com/sei-protocol/sei-docs (despite the `-old` suffix used by some tooling, this is the live source)
-- **Framework**: Nextra (Next.js)
-- **Build tool**: Bun
-- **Format**: `.mdx` (Markdown + JSX) under `/content/`
-- **Nav config**: `_meta.js` files at each directory level
-- **Style guide**: `/STYLE_GUIDE.mdx` in the repo
+- **Repository**: https://github.com/sei-protocol/sei-docs
+- **Framework**: Mintlify (migrated off Nextra; auto-deploys from `main`)
+- **Local preview**: `mint dev` (Mintlify CLI)
+- **Format**: `.mdx` (Markdown + JSX) in top-level section dirs (`evm/`, `learn/`, `node/`, `ai/`)
+- **Nav config**: `docs.json` (single source of truth for navigation + redirects)
+- **Style guide**: `STYLE_GUIDE.md` in the repo
For contributing to the docs, see [docs-contributing.md](docs-contributing.md).
diff --git a/skill/references/migration/from-ethereum.md b/skill/references/migration/from-ethereum.md
index 5977bcb..56a24e6 100644
--- a/skill/references/migration/from-ethereum.md
+++ b/skill/references/migration/from-ethereum.md
@@ -27,7 +27,7 @@ These are not optional edge cases — they **will** break your app if ignored.
### 1. Gas Price: Prefer `gasPrice` Over EIP-1559 Fields
-Sei's fee model does not burn a base fee, so EIP-1559 priority fee mechanics don't apply. `maxFeePerGas`/`maxPriorityFeePerGas` can be omitted — use legacy `gasPrice` instead.
+Sei's fee model does not burn a base fee, so EIP-1559 priority fee mechanics don't apply. `maxFeePerGas`/`maxPriorityFeePerGas` can be omitted — use legacy `gasPrice` instead. The minimum gas price is a **governance-set, adjustable** value (currently ~50 gwei on mainnet, set by pacific-1 [Proposal #112](https://www.mintscan.io/sei/proposals/112) / atlantic-2 #244; it has changed before — 100 → 10 → 50). **Query the live floor with `eth_gasPrice`** rather than hardcoding a constant.
```typescript
// ⚠️ EIP-1559 style — may not behave as expected on Sei (no base fee burn)
@@ -36,9 +36,9 @@ const tx = await contract.myFunction({
maxPriorityFeePerGas: parseUnits("1", "gwei"),
});
-// ✅ Preferred: legacy gasPrice
+// ✅ Preferred: legacy gasPrice — read the live floor, don't bake in a number
const tx = await contract.myFunction({
- gasPrice: parseUnits("50", "gwei"), // minimum 50 gwei
+ gasPrice: await provider.send("eth_gasPrice", []), // ≥ governance floor (~50 gwei mainnet)
});
```
@@ -79,10 +79,10 @@ Sei runs Pectra EVM but without blob transactions (`BLOBHASH` / `BLOBBASEFEE`).
### 6. SSTORE Costs Are Higher Than Ethereum
-Storage write costs are network-dependent on Sei:
-- **Both mainnet & testnet**: 72,000 gas per cold SSTORE (governance proposal #240)
+Storage writes are far costlier than Ethereum's 20,000 gas:
+- **Both mainnet & testnet**: 72,000 gas per cold SSTORE — set by pacific-1 governance [Proposal #109](https://www.mintscan.io/sei/proposals/109) (testnet carries the same value with no separate proposal). Governance-adjustable.
-Best practice: minimize storage writes regardless of network.
+Best practice: minimize storage writes. Note a `forge --gas-report --fork-url` report applies revm's standard EVM schedule and shows ~22,100 — **not** Sei's 72,000; use a live `eth_estimateGas` against a Sei RPC for the real cost.
```solidity
// ❌ Bad: multiple storage writes in a loop (expensive on either network)
@@ -102,14 +102,15 @@ function processAndStore(uint256[] calldata items) external {
}
```
-### 7. No "safe" / "finalized" Block Tags
+### 7. `safe` / `finalized` Resolve to `latest`
```typescript
-// ❌ Ethereum: different commitment levels exist
+// Ethereum: these are different, lagging commitment levels
const safeBlock = await provider.getBlock("safe");
const finalBlock = await provider.getBlock("finalized");
-// ✅ Sei: all equivalent to "latest"
+// Sei: the tags are accepted but resolve to the SAME instantly-final
+// block as "latest" — there's nothing to gain from safe/finalized.
const block = await provider.getBlock("latest");
```
@@ -117,6 +118,17 @@ const block = await provider.getBlock("latest");
Sei does not expose a `pending` block tag. Use `latest`.
+### 9. SELFDESTRUCT is Neutered (EIP-6780)
+
+Sei runs post-EIP-6780 semantics: `SELFDESTRUCT` no longer deletes the contract or its storage — it only forwards the remaining ETH, unless it runs in the *same transaction* that created the contract. Any cleanup/upgrade logic that relied on destroying a contract must be refactored to a "soft close".
+
+```solidity
+// ❌ Don't rely on SELFDESTRUCT to remove a contract — it won't (EIP-6780).
+// ✅ Soft close instead:
+bool public closed;
+modifier notClosed() { require(!closed, "closed"); _; }
+```
+
---
## Contract Migration Checklist
@@ -126,8 +138,9 @@ Sei does not expose a `pending` block tag. Use `latest`.
□ Remove PREVRANDAO randomness → integrate VRF oracle
□ Check COINBASE usage — does not return block proposer
□ Check for blob opcodes (BLOBHASH, BLOBBASEFEE) — not available
-□ Audit SSTORE patterns — consider caching in memory before writing
-□ Remove "safe"/"finalized" block tag references
+□ Refactor SELFDESTRUCT cleanup → soft-close pattern (EIP-6780 neutered it)
+□ Audit SSTORE patterns — consider caching in memory before writing (72k gas/cold write)
+□ Drop waits on "safe"/"finalized" — they resolve to "latest" on Sei; use tx.wait(1)
□ Test contract on atlantic-2 testnet before mainnet
```
@@ -139,7 +152,7 @@ Sei does not expose a `pending` block tag. Use `latest`.
```typescript
// Add Sei to your Wagmi config
-import { sei, seiTestnet } from '@sei-js/precompiles';
+import { sei, seiTestnet } from 'viem/chains';
export const config = createConfig({
chains: [sei, seiTestnet],
@@ -228,7 +241,7 @@ Once migrated, you can optionally leverage Sei-specific features:
| **Precompiles** | Staking, governance, IBC from Solidity |
| **Pointer contracts** | Your ERC20 token usable in Cosmos wallets |
| **Dual addresses** | Users can interact via `sei1...` or `0x...` |
-| **Native oracle** | Free price feeds without external dependencies |
+| **Third-party oracles** | Pyth / Chainlink / API3 / RedStone price feeds (the native Oracle precompile is shut off) |
See [`precompiles/overview.md`](../precompiles/overview.md) and [`pointers/overview.md`](../pointers/overview.md) for details.
diff --git a/skill/references/migration/from-solana.md b/skill/references/migration/from-solana.md
index 89f090e..065edf8 100644
--- a/skill/references/migration/from-solana.md
+++ b/skill/references/migration/from-solana.md
@@ -280,7 +280,7 @@ const rentExempt = await connection.getMinimumBalanceForRentExemption(accountSiz
// Sei EVM fee estimation
const gasLimit = 200_000n;
-const gasPrice = parseUnits("50", "gwei"); // minimum on Sei
+const gasPrice = parseUnits("50", "gwei"); // ~50 gwei floor on mainnet; query eth_gasPrice for the live value
const fee = gasLimit * gasPrice; // no rent
```
@@ -342,7 +342,7 @@ await tx.wait(1); // instant finality
□ Remove account declarations from functions (not needed)
□ Update frontend: @solana/web3.js → ethers.js or viem
□ Update wallet: wallet-adapter → wagmi + @sei-js/sei-global-wallet
-□ Use gasPrice (not EIP-1559 fields): minimum 50 gwei
+□ Use gasPrice (not EIP-1559 fields); query the live floor with eth_gasPrice (~50 gwei mainnet)
□ Use tx.wait(1) — instant finality
□ Test on atlantic-2 testnet first
□ Get testnet SEI at https://atlantic-2.app.sei.io/faucet
diff --git a/skill/references/networks.md b/skill/references/networks.md
index 3483776..b5d858e 100644
--- a/skill/references/networks.md
+++ b/skill/references/networks.md
@@ -36,8 +36,8 @@ For production dApps, use a provider account rather than the public endpoints.
## Chain IDs Reference
```javascript
-// Viem chain definitions — use @sei-js/precompiles for pre-built definitions
-import { sei, seiTestnet } from '@sei-js/precompiles';
+// Viem chain definitions — import sei/seiTestnet from viem/chains (or wagmi/chains)
+import { sei, seiTestnet } from 'viem/chains';
// Or define manually:
const seiTestnet = {
@@ -110,7 +110,7 @@ Get testnet SEI for development:
## Gas Configuration
```bash
-# Minimum gas price: 50 gwei
+# Minimum gas price: ~50 gwei (governance-set, adjustable — pacific-1 Prop #112 / atlantic-2 #244; query eth_gasPrice)
# Use gasPrice, NOT maxFeePerGas/maxPriorityFeePerGas
# Example with ethers.js v6
diff --git a/skill/references/precompiles/cosmwasm-bridge.md b/skill/references/precompiles/cosmwasm-bridge.md
index e05e8b5..4375373 100644
--- a/skill/references/precompiles/cosmwasm-bridge.md
+++ b/skill/references/precompiles/cosmwasm-bridge.md
@@ -5,7 +5,7 @@ description: Addr, Bank, CosmWasm, IBC, Pointer, and PointerView precompiles for
# CosmWasm Bridge Precompiles
-> **Deprecation notice**: CosmWasm is deprecated per SIP-3 (governance proposal 99 on mainnet). These precompiles remain functional for existing integrations and legacy support, but new projects should use EVM-only with pointer contracts for cross-VM asset representation.
+> **Deprecation notice**: CosmWasm is deprecated per SIP-3 (initiated by mainnet [Proposal #99](https://www.mintscan.io/sei/proposals/99); new uploads/instantiation disabled by mainnet #115 / atlantic-2 testnet #246). These precompiles remain functional for existing integrations and legacy support, but new projects should use EVM-only with pointer contracts for cross-VM asset representation.
## Address Summary
diff --git a/skill/references/precompiles/overview.md b/skill/references/precompiles/overview.md
index 99c16f2..2ba32e6 100644
--- a/skill/references/precompiles/overview.md
+++ b/skill/references/precompiles/overview.md
@@ -18,7 +18,7 @@ Precompiles are fixed-address contracts deployed by the Sei protocol that expose
| Staking | `0x0000000000000000000000000000000000001005` | Delegate/undelegate/redelegate SEI |
| Governance | `0x0000000000000000000000000000000000001006` | Vote, submit proposals, deposit |
| Distribution | `0x0000000000000000000000000000000000001007` | Claim staking rewards |
-| Oracle | `0x0000000000000000000000000000000000001008` | On-chain price feed data |
+| Oracle | `0x0000000000000000000000000000000000001008` | ❌ Shut off (~July 2026) — returns no data; use a third-party oracle |
| IBC | `0x0000000000000000000000000000000000001009` | IBC transfers from EVM (legacy) |
| PointerView | `0x000000000000000000000000000000000000100A` | Query pointer registrations |
| Pointer | `0x000000000000000000000000000000000000100B` | Register pointer contracts |
@@ -83,7 +83,7 @@ const validators = await staking.validators("BONDED", 10, "");
```typescript
import { createWalletClient, custom, getContract } from 'viem';
-import { seiTestnet } from '@sei-js/precompiles';
+import { seiTestnet } from 'viem/chains';
import { STAKING_PRECOMPILE_ADDRESS, STAKING_PRECOMPILE_ABI } from '@sei-js/precompiles';
const walletClient = createWalletClient({
diff --git a/skill/references/resources.md b/skill/references/resources.md
index ed5761d..f7ff36f 100644
--- a/skill/references/resources.md
+++ b/skill/references/resources.md
@@ -155,7 +155,7 @@ Additional RPC providers: https://docs.sei.io/learn/rpc-providers
| Addr precompile | `0x0000000000000000000000000000000000001004` | same |
| Staking precompile | `0x0000000000000000000000000000000000001005` | same |
| Governance precompile | `0x0000000000000000000000000000000000001006` | same |
-| Oracle precompile | `0x0000000000000000000000000000000000001008` | same |
+| Oracle precompile (❌ shut off ~July 2026) | `0x0000000000000000000000000000000000001008` | same |
| IBC precompile | `0x0000000000000000000000000000000000001009` | same |
| Multicall3 | `0xcA11bde05977b3631167028862bE2a173976CA11` | same |
| Permit2 | `0xB952578f3520EE8Ea45b7914994dcf4702cEe578` | same |