Integration proposal · Yield strategies

Two paths to bring Folks into Pods yield.

Folks holds client funds in an omnibus account custodied by Fireblocks, and wants to allocate into Pods yield strategies. This page maps the flow of funds for each integration model, so profit stays attributable and custody stays with Folks.

Custody · Fireblocks Account · Omnibus Goal · Pods yield strategies Signer · Fireblocks Vault Owner
Integration paths

Choose the model that fits Folks’ custody.

Both keep custody with Folks and isolate yield per position. They differ in where the individual wallet lives and whether bytecode is ever signed. Step through the diagram — each step animates one movement of funds or one API interaction.

Option A · Fireblocks Smart Wallets

Smart Wallet · Gnosis Safe Vault Owner signer Bytecode execution

Folks creates one Smart Wallet (a Gnosis Safe) per user, owned by a dedicated Fireblocks vault — the Vault Owner (we call it the Pods Signer) — which acts as the signer for all Smart Wallet transactions. Folks stores the mapping of which user owns which Smart Wallet address. Pods returns transaction data / bytecode to be signed by the Vault Owner — the omnibus account never signs bytecode, it only ever does plain transfers.

Folks backend
stores user ↔ wallet map
Pods API
wallets & bytecode
Vault Owner
dedicated Fireblocks vault · signs for all Smart Wallets
Omnibus @ Fireblocks
source liquidity
Smart Wallet
Gnosis Safe · 1 per user · owner: Vault Owner
Aave
yield strategy
1
Create the Smart Wallet Folks → Pods
The backend calls POST /fireblocks-smart-account with owner (the Vault Owner vault address) and chainId. One dedicated Fireblocks vault owns all Smart Wallets (Gnosis Safes). Pods returns the deployed Safe’s address; Folks stores the relation: which user owns which Smart Wallet address.
2
Fund the Smart Wallet Fireblocks transfer
The user wants to invest 10 USDC: Folks transfers 10 USDC from the Omnibus wallet to the user’s smartWalletAddress created in step 1.
3a
Request the strategy bytecode Pods → Folks
The backend calls GET /strategies/:id/bytecode with action=lend, wallet, amount and output=fireblocks. Pods responds with transactionData — ready to submit directly to the Fireblocks API.
3b
Sign and execute via Fireblocks
The backend submits transactionData.transactionRequest with the Fireblocks SDK — fireblocks.transactions.createTransaction() — signed by the Vault Owner (see the Fireblocks integration docs). The signature represents an investment directly into the yield strategy.
4
Funds settle
The 10 USDC goes directly to Aave, and the Smart Wallet receives the yield position (aUSDC). Each Smart Wallet is an individual address, so balance and profit stay attributable.

Why a Smart Wallet instead of investing from the vault directly? Fireblocks doesn’t work well with Multicall / gas sponsorship, so each user gets a Smart Wallet (Gnosis Safe) owned by a dedicated Vault Owner — which also provides security segmentation, keeping the Omnibus signer from ever being exposed to potentially malicious bytecode. And since the signer is the dedicated Vault Owner — never the omnibus — the omnibus account only ever performs plain transfers.

Option B · Fireblocks sub-accounts + deposit address

Transfer-only Deposit address No bytecode signed

A transfer-only, deposit-address model: one Fireblocks sub-account (segregated vault) per user. Pods hands back a deposit address; the omnibus does a plain transfer to it, and Pods delivers the yield token (aToken) straight into the user’s Fireblocks sub-account. No arbitrary bytecode execution anywhere — it’s just a transfer.

Folks backend
orchestrates via API
Pods API
returns deposit address
Aave
yield strategy
Omnibus @ Fireblocks
USDC · source liquidity
Deposit address
monitored by Pods
Fireblocks sub-account
segregated vault · 1 per user
1
Request the deposit address Folks → Pods
The backend calls GET /strategies/:id/bytecode with the user’s Fireblocks sub-account as destinationAddress. Pods responds with a deposit address — nothing to sign.
2
Fund with a plain transfer Fireblocks transfer
The user wants to invest 10 USDC: Folks transfers 10 USDC from the omnibus account to the deposit address. Not arbitrary bytecode execution — just a transfer.
3
Pods detects & deploys
Pods monitors the deposit address, detects the inbound 10 USDC, and supplies it into Aave.
4
aToken to the Fireblocks sub-account
Pods delivers the aToken back into the user’s Fireblocks sub-account (segregated vault). One vault per user keeps balance and profit fully attributable.

No bytecode, no signer setup: this is pure transfers — no Vault Owner, no Smart Wallet deployment. The only requirement is one Fireblocks sub-account per user to receive the aToken. Track via GET /wallets/<fireblocks-sub-account-address>.

The essentials

Everything else, in one place.

The context, the two hard constraints, a side-by-side of the paths, and the API surface, condensed so the flows above stay the main story.

Setup & constraints

Source & goal

A single Fireblocks omnibus account funds everything; the goal is to allocate into Pods yield (e.g. Aave).

The invariant

Yield tokens must land in an individual wallet so each position’s profit stays fully attributable.

No bytecode from the omnibus

The omnibus account never signs arbitrary bytecode. Anything leaving it is a plain transfer; contract calls are signed only by the dedicated Vault Owner vault.

Individual wallet for yield

The destination token (e.g. aToken) is received into an individual wallet, enabling per-position balance, profit and history.

The options side by side
Dimension
Option A · Smart Wallets
Option B · Fireblocks sub-accounts
Individual wallet lives in…
On-chain Smart Wallet (Gnosis Safe)
Fireblocks (per-user segregated vault)
Omnibus signs bytecode?
Never, transfers only
Never, transfers only
Bytecode signed by…
Vault Owner (dedicated Fireblocks vault)
N/A (deposit address model)
Pods returns…
transactionData → Smart Wallet
Deposit address
Custody stays with Folks
Yes
Yes
Best when…
Direct strategy execution · one Vault Owner signer
Per-user Fireblocks vaults exist · transfer-only preferred
API surface
GET
/strategies/:id/bytecode?action=lend
Query a strategy with wallet, amount + output. Returns a deposit address (Option B) or, with output=fireblocks, transactionData ready for the Fireblocks API (Option A).
GET
/strategies/:id/bytecode?action=withdraw
Unwind a position. Returns a deposit address (B) or withdrawal transactionData to sign with the Vault Owner via Fireblocks (A).
POST
/fireblocks-smart-account
Deploys a Smart Wallet (Gnosis Safe) with owner (the Vault Owner address) + chainId. Option A only.
GET
/wallets/:smartWalletAddress
Balance, profit and historical data per position — all data needed for user-facing dashboards and reporting.