+ Paste or type any corrupted tempo1 address. The bech32m
+ checksum will detect the error, and for 1–2 substitutions the algorithm can locate and
+ recover the original address with no prior knowledge of it.
+
+
+Spaces are for **display only** — copy buttons and APIs must always use the canonical form without spaces.
+
+## JavaScript / TypeScript Usage
+
+The `src/lib/bech32m.ts` module provides encode, decode, and validate functions:
+
+```typescript
+import {
+ encodeTempoAddress,
+ decodeTempoAddress,
+ validateTempoAddress,
+} from './lib/bech32m'
+
+// 0x → tempo1
+const tempo = encodeTempoAddress('0x742d35Cc6634C0532925a3b844Bc9e7595f2bD28')
+// → "tempo1qp6z6dwvvc6vq5efyk3ms39une6etu4a9qtj2kk0"
+
+// tempo1 → 0x
+const hex = decodeTempoAddress('tempo1qp6z6dwvvc6vq5efyk3ms39une6etu4a9qtj2kk0')
+// → "0x742d35cc6634c0532925a3b844bc9e7595f2bd28"
+
+// Validate without throwing
+const result = validateTempoAddress('tempo1qp6z6dwvvc6vq5efyk3ms39une6etu4a9qtj2kkq')
+// → { valid: false, error: "Invalid checksum — address is corrupted" }
+```
+
+## Specification
+
+The full specification is defined in [TIP-1023](/protocol/tips/tip-1023), which covers:
+
+- Complete encoding and decoding algorithms
+- Version byte semantics and extensibility
+- Validation rules (8 steps)
+- Invariants (9 properties)
+- Python reference implementation
+- Test vectors for valid addresses, invalid versions, incorrect lengths, and substitution detection
+
+## Source Code
+
+- [TIP-1023 Specification](https://github.com/tempoxyz/tempo/pull/2925) — PR in `tempoxyz/tempo`
+- [TypeScript Implementation](https://github.com/tempoxyz/docs/blob/main/src/lib/bech32m.ts) — `bech32m.ts` in this docs repo
+- [BIP-350 (bech32m)](https://github.com/bitcoin/bips/blob/master/bip-0350.mediawiki) — The underlying encoding standard
diff --git a/src/pages/protocol/exchange/index.mdx b/src/pages/protocol/exchange/index.mdx
index aa48036a..10e47835 100644
--- a/src/pages/protocol/exchange/index.mdx
+++ b/src/pages/protocol/exchange/index.mdx
@@ -8,7 +8,7 @@ import { Cards, Card } from 'vocs'
Tempo features an enshrined decentralized exchange (DEX) designed specifically for trading between stablecoins of the same underlying asset (e.g., USDC to USDT). The exchange provides optimal pricing for cross-stablecoin payments while minimizing chain load from excessive market activity.
-The exchange operates as a singleton precompiled contract at address `0xdec0000000000000000000000000000000000000`. It maintains an orderbook with separate queues for each price tick, using price-time priority for order matching.
+The exchange operates as a singleton precompiled contract at address `tempo1qr0vqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqvml629`. It maintains an orderbook with separate queues for each price tick, using price-time priority for order matching.
Trading pairs are determined by each token's quote token. All TIP-20 tokens specify a quote token for trading on the exchange. See [Quote Tokens](/protocol/exchange/quote-tokens) for more information on quote token selection and the optional [pathUSD](/protocol/exchange/quote-tokens#pathusd) stablecoin. See the [Stablecoin DEX Specification](/protocol/exchange/spec) for detailed information on the exchange structure.
diff --git a/src/pages/protocol/exchange/quote-tokens.mdx b/src/pages/protocol/exchange/quote-tokens.mdx
index 15091e0b..bafd6b79 100644
--- a/src/pages/protocol/exchange/quote-tokens.mdx
+++ b/src/pages/protocol/exchange/quote-tokens.mdx
@@ -22,7 +22,7 @@ pathUSD is a predeployed [TIP-20](/protocol/tip20/spec) at genesis. Since it is
| Property | Value |
| -------------- | -------------------------------------------- |
-| address | `0x20c0000000000000000000000000000000000000` |
+| address | `tempo1qqsvqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqv0ywuh` |
| `name()` | `"pathUSD"` |
| `symbol()` | `"pathUSD"` |
| `currency()` | `"USD"` |
diff --git a/src/pages/protocol/exchange/spec.mdx b/src/pages/protocol/exchange/spec.mdx
index a940eee2..4dea2620 100644
--- a/src/pages/protocol/exchange/spec.mdx
+++ b/src/pages/protocol/exchange/spec.mdx
@@ -24,7 +24,7 @@ Another design goal is to avoid fragmentation of liquidity across many different
### Contract and scope
-The exchange is a singleton contract deployed at `0xdec0000000000000000000000000000000000000`. It exposes functions to create trading pairs, place and cancel orders (including flip orders), execute swaps, produce quotes, and manage internal balances.
+The exchange is a singleton contract deployed at `tempo1qr0vqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqvml629`. It exposes functions to create trading pairs, place and cancel orders (including flip orders), execute swaps, produce quotes, and manage internal balances.
### Key concepts
diff --git a/src/pages/protocol/fees/spec-fee-amm.mdx b/src/pages/protocol/fees/spec-fee-amm.mdx
index b74bef4d..5f0efecc 100644
--- a/src/pages/protocol/fees/spec-fee-amm.mdx
+++ b/src/pages/protocol/fees/spec-fee-amm.mdx
@@ -140,7 +140,7 @@ Verifies sufficient validator token reserves for the fee swap. Calculates `maxAm
#### 2. FeeManager Contract
-Tempo introduces a precompiled contract, the `FeeManager`, at the address `0xfeec000000000000000000000000000000000000`.
+Tempo introduces a precompiled contract, the `FeeManager`, at the address `tempo1qrlwcqqqqqqqqqqqqqqqqqqqqqqqqqqqqqx3a39m`.
The `FeeManager` is a singleton contract that implements all the functions of the Fee AMM for every pool. It handles the collection and refunding of fees during each transaction, executes fee swaps immediately, stores fee token preferences for users and validators, and accumulates fees for validators to claim via `distributeFees()`.
diff --git a/src/pages/protocol/tip20/spec.mdx b/src/pages/protocol/tip20/spec.mdx
index 026414e1..45a4de8e 100644
--- a/src/pages/protocol/tip20/spec.mdx
+++ b/src/pages/protocol/tip20/spec.mdx
@@ -445,7 +445,7 @@ System level functions `systemTransferFrom`, `transferFeePreTx`, and `transferFe
See [rewards distribution](/protocol/tip20-rewards/spec) for more information.
## TIP20Factory
-The `TIP20Factory` contract is the canonical entrypoint for creating new TIP-20 tokens on Tempo. The factory derives deterministic deployment addresses using a caller-provided salt, combined with the caller's address, under a fixed 12-byte TIP-20 prefix. This ensures that every TIP-20 token exists at a predictable, collision-free address. The `TIP20Factory` precompile is deployed at `0x20Fc000000000000000000000000000000000000`.
+The `TIP20Factory` contract is the canonical entrypoint for creating new TIP-20 tokens on Tempo. The factory derives deterministic deployment addresses using a caller-provided salt, combined with the caller's address, under a fixed 12-byte TIP-20 prefix. This ensures that every TIP-20 token exists at a predictable, collision-free address. The `TIP20Factory` precompile is deployed at `tempo1qqs0cqqqqqqqqqqqqqqqqqqqqqqqqqqqqqkm2wnu`.
Newly created TIP-20 addresses are deployed to a deterministic address derived from `TIP20_PREFIX || lowerBytes`, where:
- `TIP20_PREFIX` is the 12-byte prefix `20C000000000000000000000`
diff --git a/src/pages/protocol/tip403/spec.mdx b/src/pages/protocol/tip403/spec.mdx
index d60e5b8b..3ef38f99 100644
--- a/src/pages/protocol/tip403/spec.mdx
+++ b/src/pages/protocol/tip403/spec.mdx
@@ -20,7 +20,7 @@ TIP-403 addresses this by providing a centralized registry that tokens can refer
The TIP-403 registry stores policies that TIP-20 tokens check against on any token transfer. Policies are associated with a unique `policyId`, can either be a blacklist or a whitelist policy, and contain a list of addresses. This list of addresses can be updated by the policy `admin`.
-The TIP403Registry is deployed at address `0x403c000000000000000000000000000000000000`.
+The TIP403Registry is deployed at address `tempo1qpqrcqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr08uee`.
## Built-in Policies
diff --git a/src/pages/protocol/transactions/AccountKeychain.mdx b/src/pages/protocol/transactions/AccountKeychain.mdx
index 71f0438b..734b7544 100644
--- a/src/pages/protocol/transactions/AccountKeychain.mdx
+++ b/src/pages/protocol/transactions/AccountKeychain.mdx
@@ -4,7 +4,7 @@ description: Technical specification for the Account Keychain precompile managin
# Account Keychain Precompile
-**Address:** `0xAAAAAAAA00000000000000000000000000000000`
+**Address:** `tempo1qz424242qqqqqqqqqqqqqqqqqqqqqqqqqqgsxxqr`
## Overview
diff --git a/src/pages/protocol/transactions/spec-tempo-transaction.mdx b/src/pages/protocol/transactions/spec-tempo-transaction.mdx
index 38742ca3..d30d0edf 100644
--- a/src/pages/protocol/transactions/spec-tempo-transaction.mdx
+++ b/src/pages/protocol/transactions/spec-tempo-transaction.mdx
@@ -587,7 +587,7 @@ Note: `expiry` and `limits` use RLP trailing field semantics - they can be omitt
#### Keychain Precompile
-The Account Keychain precompile (deployed at address `0xAAAAAAAA00000000000000000000000000000000`) manages authorized access keys for accounts. It enables root keys to provision scoped access keys with expiry timestamps and per-TIP20 token spending limits.
+The Account Keychain precompile (deployed at address `tempo1qz424242qqqqqqqqqqqqqqqqqqqqqqqqqqgsxxqr`) manages authorized access keys for accounts. It enables root keys to provision scoped access keys with expiry timestamps and per-TIP20 token spending limits.
**See the [Account Keychain Specification](./AccountKeychain) for complete interface details, storage layout, and implementation.**
diff --git a/src/pages/quickstart/faucet.mdx b/src/pages/quickstart/faucet.mdx
index 26e6b5a6..dbaa1d64 100644
--- a/src/pages/quickstart/faucet.mdx
+++ b/src/pages/quickstart/faucet.mdx
@@ -83,7 +83,7 @@ The faucet funds the following assets.
| Asset | Address |Amount|
|-------|---------|----:|
-| [pathUSD](https://explore.tempo.xyz/address/0x20c0000000000000000000000000000000000000) | `0x20c0000000000000000000000000000000000000` | `1M` |
-| [AlphaUSD](https://explore.tempo.xyz/address/0x20c0000000000000000000000000000000000001) | `0x20c0000000000000000000000000000000000001` | `1M` |
-| [BetaUSD](https://explore.tempo.xyz/address/0x20c0000000000000000000000000000000000002) | `0x20c0000000000000000000000000000000000002` | `1M` |
-| [ThetaUSD](https://explore.tempo.xyz/address/0x20c0000000000000000000000000000000000003) | `0x20c0000000000000000000000000000000000003` | `1M` |
+| [pathUSD](https://explore.tempo.xyz/address/0x20c0000000000000000000000000000000000000) | `tempo1qqsvqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqv0ywuh` | `1M` |
+| [AlphaUSD](https://explore.tempo.xyz/address/0x20c0000000000000000000000000000000000001) | `tempo1qqsvqqqqqqqqqqqqqqqqqqqqqqqqqqqqqyr9xgnd` | `1M` |
+| [BetaUSD](https://explore.tempo.xyz/address/0x20c0000000000000000000000000000000000002) | `tempo1qqsvqqqqqqqqqqqqqqqqqqqqqqqqqqqqqgjmqzz2` | `1M` |
+| [ThetaUSD](https://explore.tempo.xyz/address/0x20c0000000000000000000000000000000000003) | `tempo1qqsvqqqqqqqqqqqqqqqqqqqqqqqqqqqqqva3zyds` | `1M` |
diff --git a/src/pages/quickstart/predeployed-contracts.mdx b/src/pages/quickstart/predeployed-contracts.mdx
index b3648038..36401525 100644
--- a/src/pages/quickstart/predeployed-contracts.mdx
+++ b/src/pages/quickstart/predeployed-contracts.mdx
@@ -10,11 +10,11 @@ Core protocol contracts that power Tempo's features.
| Contract | Address | Description |
|----------|---------|-------------|
-| [**TIP-20 Factory**](/protocol/tip20/overview) | `0x20fc000000000000000000000000000000000000` | Create new TIP-20 tokens |
-| [**Fee Manager**](/protocol/fees/spec-fee-amm#2-feemanager-contract) | `0xfeec000000000000000000000000000000000000` | Handle fee payments and conversions |
-| [**Stablecoin DEX**](/protocol/exchange) | `0xdec0000000000000000000000000000000000000` | Enshrined DEX for stablecoin swaps |
-| [**TIP-403 Registry**](/protocol/tip403/spec) | `0x403c000000000000000000000000000000000000` | Transfer policy registry |
-| [**pathUSD**](/protocol/exchange/quote-tokens#pathusd) | `0x20c0000000000000000000000000000000000000` | First stablecoin deployed |
+| [**TIP-20 Factory**](/protocol/tip20/overview) | `tempo1qqs0cqqqqqqqqqqqqqqqqqqqqqqqqqqqqqkm2wnu` | Create new TIP-20 tokens |
+| [**Fee Manager**](/protocol/fees/spec-fee-amm#2-feemanager-contract) | `tempo1qrlwcqqqqqqqqqqqqqqqqqqqqqqqqqqqqqx3a39m` | Handle fee payments and conversions |
+| [**Stablecoin DEX**](/protocol/exchange) | `tempo1qr0vqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqvml629` | Enshrined DEX for stablecoin swaps |
+| [**TIP-403 Registry**](/protocol/tip403/spec) | `tempo1qpqrcqqqqqqqqqqqqqqqqqqqqqqqqqqqqqr08uee` | Transfer policy registry |
+| [**pathUSD**](/protocol/exchange/quote-tokens#pathusd) | `tempo1qqsvqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqv0ywuh` | First stablecoin deployed |
## Standard Utilities
@@ -22,11 +22,11 @@ Popular Ethereum contracts deployed for convenience.
| Contract | Address | Description |
|----------|---------|-------------|
-| [**Multicall3**](https://www.multicall3.com/) | `0xcA11bde05977b3631167028862bE2a173976CA11` | Batch multiple calls in one transaction |
-| [**CreateX**](https://github.com/pcaversaccio/createx) | `0xba5Ed099633D3B313e4D5F7bdc1305d3c28ba5Ed` | Deterministic contract deployment |
-| [**Permit2**](https://docs.uniswap.org/contracts/permit2/overview) | `0x000000000022d473030f116ddee9f6b43ac78ba3` | Token approvals and transfers |
-| [**Arachnid Create2 Factory**](https://github.com/Arachnid/deterministic-deployment-proxy) | `0x4e59b44847b379578588920cA78FbF26c0B4956C` | CREATE2 deployment proxy |
-| [**Safe Deployer**](https://github.com/safe-fndn/safe-singleton-factory) | `0x914d7Fec6aaC8cd542e72Bca78B30650d45643d7` | Safe deployer contract |
+| [**Multicall3**](https://www.multicall3.com/) | `tempo1qr9pr00qt9mmxcc3vupgsc479gtnjak2zyetjw2l` | Batch multiple calls in one transaction |
+| [**CreateX**](https://github.com/pcaversaccio/createx) | `tempo1qza9a5yevv7nkvf7f40hhhqnqhfu9za9a5kzeeav` | Deterministic contract deployment |
+| [**Permit2**](https://docs.uniswap.org/contracts/permit2/overview) | `tempo1qqqqqqqqqq3dgucrpugkmhhf766r43ut5vkwg6pn` | Token approvals and transfers |
+| [**Arachnid Create2 Factory**](https://github.com/Arachnid/deterministic-deployment-proxy) | `tempo1qp89ndzgg7ehj4u93zfqefu0hunvpdy4dsxdzh93` | CREATE2 deployment proxy |
+| [**Safe Deployer**](https://github.com/safe-fndn/safe-singleton-factory) | `tempo1qzg56llvd2kge42zuu4u579nqegdg4jr6u5aqam2` | Safe deployer contract |
## Contract ABIs
diff --git a/src/pages/quickstart/tokenlist.mdx b/src/pages/quickstart/tokenlist.mdx
index 1ec420fb..631ed057 100644
--- a/src/pages/quickstart/tokenlist.mdx
+++ b/src/pages/quickstart/tokenlist.mdx
@@ -20,7 +20,7 @@ As an example, here's Tempo Testnet's tokenlist, fetched from [tokenlist.tempo.x
[`/list/{chain_id}`](https://tokenlist.tempo.xyz/list/42431) | Token list for a chain |
[`/asset/{chain_id}/{id}`](https://tokenlist.tempo.xyz/asset/42431/pathUSD) | Get a single token by symbol or address
[`/icon/{chain_id}`](https://tokenlist.tempo.xyz/icon/42431) | Chain icon (SVG) |
-[`/icon/{chain_id}/{address}`](https://tokenlist.tempo.xyz/icon/42431/0x20c0000000000000000000000000000000000000) | Token icon (SVG) |
+[`/icon/{chain_id}/{address}`](https://tokenlist.tempo.xyz/icon/42431/tempo1qqsvqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqv0ywuh) | Token icon (SVG) |
## Adding a New Token
diff --git a/src/pages/quickstart/wallet-developers.mdx b/src/pages/quickstart/wallet-developers.mdx
index c2ddab9d..20091c0f 100644
--- a/src/pages/quickstart/wallet-developers.mdx
+++ b/src/pages/quickstart/wallet-developers.mdx
@@ -58,6 +58,28 @@ As a wallet developer, you can set the fee token for your user at the account le
If you don't, Tempo uses a cascading fee token selection algorithm to determine the fee token for a transaction – learn more about [Fee Token Preferences](/protocol/fees/spec-fee#fee-token-preferences).
:::
+### Display Tempo addresses
+
+Tempo uses a human-readable address format based on [bech32m encoding](/protocol/addresses) (BIP-350). All Tempo addresses start with the `tempo1` prefix and are exactly 46 characters long, providing instant chain recognition and built-in error detection for up to 4 character substitutions.
+
+Your wallet should display and accept `tempo1` addresses throughout the UI. Use the [bech32m library](/protocol/addresses#javascript--typescript-usage) to convert between the internal `0x` hex format used by the EVM and the user-facing `tempo1` format:
+
+```ts
+import { encodeTempoAddress, decodeTempoAddress } from './lib/bech32m'
+
+// Display: convert internal hex to user-facing tempo1
+const display = encodeTempoAddress(account.address)
+// → "tempo1qp6z6dwvvc6vq5efyk3ms39une6etu97hvwnw3n3"
+
+// Input: convert user-pasted tempo1 back to hex for transactions
+const hex = decodeTempoAddress(userInput)
+// → "0x742d35cc6634c0532925a3b844bc9e7595f0bebb"
+```
+
+:::tip
+Display addresses with optional visual spacing for readability (e.g., `tempo1 qp6z6 dwvvc …`), but always copy the canonical form without spaces. See [Display Recommendations](/protocol/addresses#display-recommendations).
+:::
+
### Display token and network assets
Tempo provides a public tokenlist service that hosts token and network assets. You can pull these assets from our public tokenlist service to display in your UI.
@@ -116,7 +138,7 @@ Set the user's default fee token preference. This will be used for all transacti
import { setUserToken } from 'viem/tempo'
await client.fee.setUserTokenSync({
- token: '0x20c0000000000000000000000000000000000001',
+ token: 'tempo1qqsvqqqqqqqqqqqqqqqqqqqqqqqqqqqqqyr9xgnd', // AlphaUSD
})
```
@@ -130,12 +152,19 @@ Before launching Tempo support, ensure your wallet:
- [ ] Hides or removes native balance display for Tempo
- [ ] Displays `USD` as the currency symbol for gas
- [ ] Quotes gas prices in the user's fee token
+- [ ] Displays and accepts `tempo1` addresses ([format details](/protocol/addresses))
- [ ] Pulls token/network assets from Tempo's tokenlist
- [ ] (Recommended) Integrates Tempo Transactions for enhanced UX
## Learning Resources
+