← Back to blog
·5 min·The SwyDex team

Multi-chain HD wallets without Tatum lock-in

One of the early decisions was: do we hard-couple to a single RPC provider (Tatum, in our case) or build an abstraction layer?

Hard-coupling is faster. Abstracting is slower up front but gives you the ability to:

  • Swap providers per chain. Tatum's Solana support is decent; their Bitcoin support is fine; their Tron handling has rough edges. We can route Solana to Helius if we want.
  • Run two providers in parallel for the same chain and shadow-compare results. We catch bugs in the provider that way.
  • Cache cold queries (token metadata, contract decimals) ourselves and not pay a per-call fee for things that don't change.

The abstraction is a thin ChainAdapter interface in backend/src/services/chain/. Every chain has a handful of methods: generateMaster, deriveAddress, getBalance, broadcastTransaction, signMessage, parseInboundTransaction. The Tatum adapter implements them by delegating to Tatum's SDK. We have a partial Helius adapter for Solana that we'll roll out next month.

The cost of this abstraction is real — about three weeks of upfront engineering and an ongoing tax of "remember to add the new method to all adapters." But it's the difference between "we're a Tatum reseller with a UI" and "we're a platform that runs on infrastructure we control."


More posts