LI.FI Solver

LI.FI is cross-chain infrastructure. An app integrates it once and gets swaps and bridges across dozens of chains, instead of keeping twenty separate bridge integrations alive. The Solver is the execution end: a user states an intent, some asset on some chain, and the Solver sources the liquidity and gets the transactions confirmed on the other side. I’m on the Intents team, and the Solver is my day job. I picked it up as an early draft and took it to production readiness, along with the Wallet service it uses to sign and send. It has moved past a million dollars in transferred value since.

Most of the work is the unglamorous kind that decides whether fills actually happen. Liquidity drifts toward whatever routes get used, so I built cross-chain inventory rebalancing from scratch, it moves Solver funds between chains before some route runs dry and a fill fails for lack of inventory. Route parameters used to require a redeploy to change, now they’re dynamic config, an operator can adjust a route on the fly while the service keeps running. I also own the deployment end to end: built the Docker image, set up CI/CD, fixed up the Terraform that was already there (partnering with the DevOps team where it made sense). Monitoring I built from scratch, Prometheus metrics and Grafana dashboards over intent processing, transaction execution, and service health, because a solver that fails quietly is worse than one that fails loudly. Testing was a gap too, so I built end-to-end coverage from scratch and wired it into CI, which also made the repo a much better fit for AI-assisted coding, an agent can change things and the tests catch what it breaks.

The piece I’m most careful about is the Wallet service. Signing and sending from shared infrastructure invites double-spending risk if nonces aren’t handled predictably, so I scoped an overhaul, a move to EOA-based execution with predictable nonce management. Another team picked it up and shipped it. That’s the current state. The Solver fills intents in production, and my job is that it keeps doing that.