Concepts
lib1 addresses
Every LibChain account can be written as a lib1 address (Bech32) or as its usual 0x address. Both are the same 20 bytes.
LibChain accounts are ordinary Ethereum accounts: a 20-byte address derived from a secp256k1 key. Lib Wallet, LibChain Hub and Lib Explorer can also show each address in Bech32 form with the prefix lib, the way Cosmos chains use cosmos1….
| 0x form | 0x87052f1f17b2b4054b014e93e53d6ce6dc912bda |
| lib1 form | lib1suzj78chk26q2jcpf6f720tvumwfz276ynschv |
Those two lines are the same account (the WtLIB contract). Nothing on chain changes: transactions, contracts, logs and the RPC always use 0x. lib1 is a way of writing the address for people.
#Format
| Part | Value |
|---|---|
| Human-readable prefix | lib |
| Separator | 1 |
| Data | The 20 address bytes as 32 characters of 5 bits each |
| Checksum | 6 characters (BIP-173 Bech32, not Bech32m) |
| Length | Always 42 characters, lowercase |
| Alphabet | qpzry9x8gf2tvdw0s3jn54khce6mua7l (no 1 b i o) |
The checksum detects any mistake in up to four characters, so a mistyped lib1 address is rejected instead of pointing at someone else's account. Mixed-case lib1 strings are invalid by definition.
#Where you'll see it
- Lib Wallet shows lib1 by default on Lib Testnet, with the 0x form underneath, and accepts either when you send.
- Lib Explorer shows lib1 on address pages and accepts a lib1 address in search and in URLs.
- LibChain Hub shows both forms and accepts either.
- The faucet API, the RPC and contracts take 0x only.
#Should my app use it?
Show lib1 where people read or paste addresses, and keep 0x everywhere else. Accept both in input fields and convert to 0x before you call a wallet or a contract. lib1 in your app has drop-in code for TypeScript, Python and Go.
Exchanges and other chains won't recognise lib1. When you share an address outside the Lib ecosystem, use the 0x form.