SNCT as an ERC-20 token
sanect's native token SNCT is exposed as a real ERC-20 at the canonical address:
0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeEThat contract has no Solidity source — it's a native precompile (part of the chain binary). Calls to it behave exactly like a normal ERC-20:
| ERC-20 call | What it does |
|---|---|
balanceOf(addr) | returns the asnct bank balance of addr — no separate ledger |
transfer(to, amount) | moves the same coins a MsgSend would; emits Transfer(from, to, amount) |
approve(spender, amount) | standard allowance |
transferFrom(from, to, amount) | spends from an allowance |
symbol() | "SNCT" |
name() | "SNCT" |
decimals() | 18 |
totalSupply() | matches the bank module's total asnct supply |
deposit() / withdraw() | no-ops on the bond denom (no wrapping needed) |
What this enables
- MetaMask "Add Token" — paste the address above; balance + sends in the native MetaMask UI.
- Send in Blockscout / EVM tooling — every
transfer()emits the standardTransferevent, so Blockscout indexes it like any ERC-20 tx. - Solidity contracts can treat SNCT as
IERC20— swap pools, vaults, wrappers — without any deploy step. - No separate balance, no wrapping: 100 SNCT bank balance = 100 SNCT ERC-20 balance. Always. They're the same coins viewed two ways.
Add to MetaMask
After connecting MetaMask to sanect:
- MetaMask → Tokens → Import tokens.
- Token contract address:
0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE - Symbol and decimals auto-fill (SNCT / 18).
- The token shows in your wallet with the same balance as the chain's bank module.
You can now send SNCT from MetaMask — those transfers will appear in Blockscout. You can also still send via the Cosmos path (the staking app's Send button) — those land at the same destination but don't appear in Blockscout because they're not EVM transactions.
Verify the precompile is live
# symbol()
curl -s -X POST https://rpc.testnet.sanect.com/ \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","method":"eth_call","params":[{"to":"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE","data":"0x95d89b41"},"latest"],"id":1}'
# expected to return ABI-encoded "SNCT"
# decimals()
curl -s -X POST https://rpc.testnet.sanect.com/ \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","method":"eth_call","params":[{"to":"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE","data":"0x313ce567"},"latest"],"id":1}'
# expected -> 0x...12 (= 18)A 0x empty result means the precompile is not registered on the running chain — see "Enable on an existing chain" below.
Enable on an existing chain
This is genesis state — registering SNCT as an ERC-20 needs to be in genesis.json before the chain starts. If your running chain doesn't have the registration (e.g. it was bootstrapped before this was added to scripts/localnet.sh), you have two paths:
A) Wipe the chain and restart (testnet only)
Cleanest fix, but you lose all history.
- Pull latest
mainso the node service builds with the updatedscripts/localnet.sh(which now registers SNCT as ERC-20 in genesis). - Railway → node service → Volume → delete contents (or detach + re-add a fresh empty volume at
/data). - Redeploy. Genesis is regenerated with the registration. From block 1, SNCT is queryable at
0xEeeeeEee….
For a development testnet this is usually fine — explorer + dApp re-index from the new genesis automatically.
B) Keep the chain, deploy a wrapped contract yourself (no chain restart)
Write or deploy a standard WETH9-style WSNCT Solidity contract that:
- Holds SNCT in its balance via
payable deposit(). - Mints/burns wSNCT against deposits/withdraws.
- Exposes the full ERC-20 interface for wSNCT.
Users deposit() SNCT → get wSNCT → use wSNCT in EVM (visible in Blockscout) → withdraw() to get SNCT back.
This is more friction (users must wrap before using EVM/Blockscout) but doesn't need a chain restart. Useful for an existing mainnet you can't wipe.
Why Blockscout was silent on your Cosmos Send
Blockscout indexes the chain's EVM RPC. A Cosmos MsgSend is not an EVM transaction — it never appears in eth_getBlockByNumber, has no Ethereum- style tx hash format, doesn't emit Solidity events. The bank module just moves balances in the next block.
Once SNCT is registered as ERC-20:
- EVM
transfer()calls on0xEeeeeEee…emitTransferevents, appear as ERC-20 transactions in Blockscout, and have an Ethereum tx hash (0xabc…). - Cosmos
MsgSendstill works for the same coins, still doesn't show in Blockscout. Use the staking-app's Send for these, or query the Cosmos REST directly.