@fidesbuild/swap
v0.2.1
Published
FIDES swaps: an agent takes Uniswap's best route on Robinhood Chain, including v4 hook pools, inside a trading mandate the owner signed.
Maintainers
Readme
@fidesbuild/swap
FIDES is a Transaction Builder for autonomous agents. @fidesbuild/swap lets an agent trade on Uniswap inside a trading mandate its owner signed: which tokens it may buy, the worst price it may accept against the quote, and the most per swap. Uniswap finds the best route across its pools on Robinhood Chain, v4 pools with hooks included. Each swap is an approval for exactly that swap plus the swap, as one transaction, simulated first, with nothing left approved.
Get started
The fastest way to try it is the guided tour, which includes a swap:
npm install @fidesbuild/sdk viem
npx @fidesbuild/sdk init
npm run swapnpx @fidesbuild/swap prints a short guide. In your own code:
npm install @fidesbuild/swap @fidesbuild/sdk viemimport { mandateService, uniswapTargets, swapActions, verifySwap } from "@fidesbuild/swap"
import { Fides, FidesBuilder, toJson, fromJson } from "@fidesbuild/sdk"
// the owner signs a FIDES with a trading mandate: buy ETH, 1% worst price, at most 2 USDG a swap
const fides = await (await Fides.create(client, {
owner: owner.address, agent: agent.address, expiry,
limits: { maxActions: 50n, spend: [{ asset: USDG, amount: parseUnits("10", 6) }] },
targets: uniswapTargets(4663, [USDG]),
services: [mandateService({ buy: ["ETH"], maxSlippageBps: 100, maxPerSwap: parseUnits("2", 6) })],
})).sign(owner)
// the agent asks the FIDES API for a route, checked against the mandate
const res = await fetch("https://api.fidesbuilder.xyz/v1/swap/quote", {
method: "POST", headers: { "content-type": "application/json" },
body: toJson({ fides, tokenOut: "ETH", amount: parseUnits("1", 6) }),
})
const { quote, mandate } = fromJson(await res.text())
if (!mandate.allowed) throw new Error(mandate.message)
const plan = await new FidesBuilder({ client, fides, agent }).add(swapActions(quote)).build()
const check = await verifySwap(client, fides, plan, quote) // { ok, received }With your own Uniswap Trading API key, quoteUniswap and checkMandate do what the API does.
What is enforced where
The FIDES Account contract enforces the budget (cumulative across every swap), the contracts and functions it may call, the expiry and revocation. Uniswap's router reverts a swap below the worst price. The mandate itself (tokens, worst price, most per swap) is checked by this package, the FIDES API and Claude before the agent signs, and by the simulation.
Docs: https://fidesbuilder.xyz/docs/#/swap
