Documentation
Build with SwissDLT
Standard Ethereum tooling works. This covers what is specific to SwissDLT.
Quickstart
Add the network to an EVM wallet, get native BCTS for gas, and read the chain.
| Network name | SwissDLT |
| RPC URL | https://rpc.swissdlt.ch (fallback https://rpc2.swissdlt.ch) |
| Chain ID | 94 |
| Currency symbol | BCTS |
| Block explorer | https://explorer.swissdlt.tech |
First read
curl https://rpc.swissdlt.ch \
-H 'Content-Type: application/json' \
--data '{"jsonrpc":"2.0","id":1,"method":"eth_chainId","params":[]}'
# {"jsonrpc":"2.0","id":1,"result":"0x5e"}
viem
import { createPublicClient, http, defineChain } from 'viem'
export const swissdlt = defineChain({
id: 94, name: 'SwissDLT',
nativeCurrency: { name: 'BCTS', symbol: 'BCTS', decimals: 18 },
rpcUrls: { default: { http: ['https://rpc.swissdlt.ch', 'https://rpc2.swissdlt.ch'],
webSocket: ['wss://rpc.swissdlt.ch/ws'] } },
blockExplorers: { default: { name: 'SwissDLT Explorer', url: 'https://explorer.swissdlt.tech' } },
})
const client = createPublicClient({ chain: swissdlt, transport: http() })
console.log(await client.getBlockNumber())
RPC and WebSocket
| HTTP | https://rpc.swissdlt.ch, https://rpc2.swissdlt.ch |
| WebSocket | wss://rpc.swissdlt.ch/ws (the root path does not upgrade) |
| Namespaces | eth_*, net_*, web3_*; clique_*, txpool_* and miner methods are not exposed |
| Access | No key; cross-origin requests allowed; no documented rate limit or service level |
| Also listed | https://94.rpc.thirdweb.com |
Follow new blocks
const ws = new WebSocket('wss://rpc.swissdlt.ch/ws')
ws.onopen = () => ws.send(JSON.stringify({ jsonrpc: '2.0', id: 1, method: 'eth_subscribe', params: ['newHeads'] }))
ws.onmessage = (e) => { const m = JSON.parse(e.data); if (m.params) console.log(parseInt(m.params.result.number, 16)) }
Who sealed a block?
In Clique the miner field carries signer votes, not the producer. Recover the sealer from the last 65 bytes of extraData: hash the RLP-encoded header with those bytes removed and recover the signing address. This site does exactly that in your browser; see assets/js/site.js.
Gas and EVM
- EVM level Berlin. Compile with
evmVersion: "berlin"; Shanghai'sPUSH0and later opcodes will fail. - Send legacy (type 0) transactions. There is no EIP-1559 base fee, although some chain registries say otherwise.
- Gas price 1 gwei is the observed norm. Blocks every 4 seconds.
- No
safeorfinalizedblock tags. Wait for confirmations and follow the association's checkpoint policy for high-value flows.
Foundry
# foundry.toml
[profile.default]
evm_version = "berlin"
solc = "0.8.24"
forge create src/MyToken.sol:MyToken --rpc-url https://rpc.swissdlt.ch \
--legacy --gas-price 1gwei --private-key $KEY
Hardhat
networks: {
swissdlt: { url: 'https://rpc.swissdlt.ch', chainId: 94, gasPrice: 1_000_000_000 }
},
solidity: { version: '0.8.24', settings: { evmVersion: 'berlin', optimizer: { enabled: true, runs: 200 } } }
Contracts
Canonical addresses as observed on 7 November 2026. A signed, versioned registry from the association will replace this table.
SwissDLT, chain 94
| Name | Address | Note |
|---|---|---|
| Wrapped BCTS (A) | 0x4C9204BE7d41E8b1d0f8025A60110d866C0574Ad | Used by SwissDLT Swap and Token Studio; fully backed in the last snapshot |
| Wrapped BCTS (B) | 0x0937f6d21Ee71d1F72127cFDC28B2D17af21cba2 | Second deployment, fully backed; canonical status pending the registry |
| GOG voucher token | 0x43cf6bfb19422e5a9ae2a411929f7e48d7e7106f | acrevis / Gossau; supply 205'000 |
| Swap factory | 0x3c17473e017806b1b93A406B79f2272faaA6cD99 | Uniswap v3; see Build for the full set |
| Token Studio launcher | 0xfaf3ef2B344388b48117D336bCCDbcA7999DECdB | Fixed-supply issuance |
| SwissOracle token (SORC) | 0x021eeF3b1036de6dF007c56875eAd2ebeC2B0d04 | SwissOracle; fixed supply of 1 billion, no further mint; not audited |
| SwissOracle factory | 0x25bAE5942fA0DB32312839739FE499A658227d91 | Market registry and staking; not audited |
| SwissOracle fee distributor | 0xfD7f9580d4EEDb2AD9A1E6Fd1F0bEb91E3254dfF | Fee split to stakers, creators, treasury and resolvers |
| SwissOracle liquidity vault | 0x73C13084b3a53fc1772F49a263e57B36c4723aBf | Sealed full-range position; fees only, no principal exit |
| pdCHF | 0x44b6169faa2E70865817877eda427080025723EA | Issuer, reserves and peg not established |
| ChainBridge | 0xDac6e138939459ccB3a150419D408Dccd8a01Ffe | Legacy Polygon bridge, relayer threshold 1 |
| ERC20Handler | 0x61F9261A36164f0664c49434C6F54Fed6f47c190 | Legacy bridge handler |
| Earlier Uniswap v3 factory | 0x5bBC64d6c63b1a6D5E8662378ebAF39949930B5C | Historical: 13 pools and 249 swaps; not used by the new Swap |
| TestToken (TTK) | 0x89003595E33c6874f1add04F9cF0e6f8669F2b48 | Test asset; not part of production lists |
Governance on Polygon
| Association DAO (Moloch v3 / Baal) | 0xdd40b89417eed3bf55f7a7a066eccbcc8c3f0971 |
| Voting shares (vBCTS) | 0x157d1b0e613c4c638d58fc89bb4ee54d1bf79a8f |
| Non-voting loot (nBCTS) | 0x577af8222fa068c8fdd0a56e11d884b7e28e087e |
| Treasury Safe | 0xcc4c17b5a95d9c0295b443e9179242e90d44feb7 |
Assets
On SwissDLT
- BCTS is the native gas asset: 72'000'003 allocated at genesis, most of it in six treasury accounts; there is no block reward.
- Wrapped BCTS exists in two backed deployments (see Contracts). Wrap and unwrap 1:1 against native BCTS.
- Bridged from Polygon through the legacy bridge: WPOL 4'562.862, DAI 72.213, ZCHF 1.1 (observed supplies, matching the Polygon lockbox).
BCTS on other chains
These are issued directly by Blockchain Trust Solutions AG or bridged via Axelar. They are not minted by a SwissDLT bridge and cannot pay gas on chain 94.
| Polygon | 0xce4D3160705fEBb069617A9AD919753055B56e49 | Direct issuance, 2'600'000 |
| BNB Chain | 0xa2D99A48B6458aaF7296ae5361B41824A57F1d0e | Documented representation |
| BNB Chain | 0x09a1ad50ac7b8ddd40bafa819847ab1ea6974a4f | Second representation; role to be stated in the registry |
| Hedera | 0.0.4373002 | HTS token, 850'000 |
| TON | EQCqR28s…SxD8r | Jetton, max 1'000'000 |
Displayed pool reserves on other chains are not liquidity or a market price. We do not publish token prices.
Bridges
Legacy Polygon bridge (ChainBridge)
A lock-and-mint bridge between Polygon and SwissDLT with a relayer threshold of one. Last observed deposits in September 2023. Relayer identity, liveness and recovery process are not published, so we recommend against new deposits until the association either operates it properly or decommissions it.
DogeOS MVP
Test bridge to DogeOS Chikyū, not configured. See Build, bridge.
Planned: Hyperlane corridor
Native BCTS collateral on SwissDLT backing a synthetic ERC-20 on Base, verified by a 3-of-5 validator set of independent operators with rate limits, timelocked administration and daily supply reconciliation. Planning estimate for the first corridor: 12 to 22 person-weeks plus an external review.
Data and APIs
| Source | Endpoint | Notes |
|---|---|---|
| Explorer | explorer.swissdlt.tech/data/gog.json | GOG transfers with coverage metadata; hourly |
| Explorer | explorer.swissdlt.tech/data/gog-feed.xml | Atom, latest 25 events |
| Explorer | explorer.swissdlt.tech/data/urstamm-registry.json | Unverified candidates, clearly marked |
| SwissProof | timestamp.swissdlt.tech/api/v1 | REST; OpenAPI document included |
| Swap | swap.swissdlt.tech/api/health, /.well-known/contracts.json | Health and pinned ABIs |
| Token Studio | studio.swissdlt.tech/health, /.well-known/contracts.json | Health and contracts |
| Bridge | bridge.swissdlt.tech/api/health | Reports not_ready until configured |
MCP endpoints for AI agents are listed under Build, AI agents.
For AI agents and Thirdfy
Each service keeps its own Thirdfy package. The packages are prepared for submission: nothing has been submitted, no listing is claimed, and Thirdfy wallet execution on chain 94 is not established. Three files on this site tie the services together.
| SwissDLT association members | /.well-known/swissdlt-members.json | The four consortium members, their websites and which service each provides |
| Thirdfy submission index | /.well-known/thirdfy-index.json | appId, MCP endpoint, manifest, readiness and contracts file for each service |
| SwissDLT contracts | /.well-known/contracts.json | Every SwissDLT contract and service address on chain 94 with explorer link, deployment block and transaction, ABI and source |
| SwissDLT protocol facts | /.well-known/protocols.json | Network facts and the SwissProof, Bridge, Swap and Token Studio protocols, each value with its source |
| Service | Thirdfy manifest | Readiness | Contracts |
|---|---|---|---|
| SwissDLT Explorer | /thirdfy-app.json | /.well-known/thirdfy-readiness.json | /.well-known/contracts.json |
| SwissDLT Swap | /thirdfy-app.json | /.well-known/thirdfy-readiness.json | /.well-known/contracts.json |
| SwissDLT Token Studio | /thirdfy-app.json | /.well-known/thirdfy-readiness.json | /.well-known/contracts.json |
| SwissDLT Bridge MVP | /thirdfy-app.json | /.well-known/thirdfy-readiness.json | /.well-known/contracts.json |
| SwissOracle | /thirdfy-app.json | /.well-known/thirdfy-readiness.json | /.well-known/contracts.json |
| SwissProof | /thirdfy-app.json | /.well-known/thirdfy-readiness.json | /.well-known/contracts.json |
Checked 12:02 UTC, 8 November 2026. "Not published yet" means the file did not answer at that check; the submission index records each check.
Run a node
Signers are admitted by the association and voted in through Clique. Archive and RPC nodes can be run by members to serve applications.
- Client: go-ethereum. Public RPCs run 1.11 and 1.12; 1.13 is the newest release that can still seal Clique blocks, and 1.14 and later cannot. Upgrades are coordinated across all signers.
- Genesis: use the current chain-94 genesis from the SwissDLT node setup repository. Older guides for chain 999 or 99 are for retired networks.
- Signers: never expose RPC or an unlocked account on a signer; keep static peers to at least three other nodes; back up keystores offline.
- Operations: a watchdog that restarts a stuck client, automatic recovery for hung machines, daily disk snapshots, and alerts for halted blocks, fewer than five active signers, unhealthy nodes and full disks.
Governance
The network is governed by the Verein Nodebetreiber der SwissDLT. Its on-chain record is a DAO on Polygon, created on 3 June 2023, with 13 member addresses, 30 proposals and 109 votes between June 2023 and July 2024. Quorum is 54% and the voting period one week.
What is still missing, and planned: published statutes and board, an operator map linking each signer key to a named organisation, a current meeting cadence, and resolution of the remaining full-permission administrative key on the DAO. See About, governance.
Security and incidents
- Report vulnerabilities to [security@swissdlt.ch]. Please do not test on mainnet with value.
- A status line is published within one hour of a confirmed incident, and a post-mortem with owner and corrective actions within 14 days.
- None of the new apps has completed an independent security audit yet. Use small amounts.
FAQ
Is SwissDLT a public blockchain?
Anyone can read it and send transactions; only admitted signers seal blocks. It is a permissioned consortium chain.
Where do I get BCTS?
Native BCTS on chain 94 comes from existing holders; there is no faucet or exchange listing. We do not publish a price.
Is there an SDK?
No dedicated SDK is needed. viem, ethers, Foundry and Hardhat work with the settings above.
Is data stored in Switzerland?
Chain data is replicated on every node. Three signer nodes run in Zurich; the full hosting map will be part of the operator map.