efixDI/USDC on Base — tokenized Brazilian DI fund, D+0 NAV redemption (governedPerspective whitelist)

We’re requesting governedPerspective whitelisting for our self-governed efixDI/USDC lending market on Base. The market is live on mainnet and has a full supply→collateral→borrow→repay cycle proven on-chain.

efixDI is a tokenized share of a Brazilian DI money-market fund (fixed income tracking the CDI rate, ~15% p.a.), issued as a permissionless ERC-20. Each token is backed 1:1 by fund cotas custodied at BTG Pactual under a CVM-registered securitizer (Brazilian securities regulator).

Why this matters for lenders — the D+0 moat

The underlying fund redeems at NAV the same day (D+0). This structurally removes the stuck-liquidation risk that plagues crypto collateral: if a position goes underwater, the liquidator redeems efixDI at full NAV same-day. The collateral’s yield (CDI) is also uncorrelated to crypto markets — a USDC lender earns the spread between the Brazilian risk-free rate and the USDC borrow rate, independent of the crypto cycle.

Market details (Base, chainId 8453)

Item Value
USDC borrowable vault 0xe276BB91E0C63C0BC6ABdd3Dc37DF324f90e3956
efixDI escrow collateral vault 0x008a506c6b6138F47B82f6a0b8Fc7FE375C102e9
Oracle (custom) 0x9CD219A773d94BBECdD1bb0ae413c45f72737788
Router 0x5F655525A46B968CF388865CeBC0c0B79A8F8a2b
Governor 0x9040b4E9e1F8C96dC6dEF1a2d6f4105D8535EeD4 (2/3 Safe, Fireblocks-signed)

Parameters: Borrow LTV 70% · Liquidation LTV 77% · Interest fee 15% · IRM: 0% base → 5% APR at 90% util (kink) → 50% APR at 100%.

Oracle: NAV(BRL) × Chainlink BRL/USD, with L2 sequencer-uptime check + 25h staleness guard (fail-closed). NAV is anchored to the fund’s official cota published by CVM.

Why we need governedPerspective (not ungoverned auto-listing)

We understand ungoverned perspectives reject this market with ORACLE_INVALID_ADAPTER + UNIT_OF_ACCOUNT — there is no Chainlink/Pyth feed for a fund’s NAV, so our custom NAV oracle can never be a registered generic adapter. Renouncing governance (EdgeFactory) clears GOVERNOR/ROUTER but not ORACLE_INVALID_ADAPTER. governedPerspective is precisely the path for vetted custom-oracle governed markets, which is why we’re requesting a manual review here.

Governance & security

  • Governor: 2-of-3 Gnosis Safe, Fireblocks MPC co-signed (no hot key holds governance).
  • Audit: EfixDIToken audited by OpenZeppelin — 15/15 findings resolved.
  • Issuer: EFIX Plataforma de Tokenização e Crowdfunding Ltda · regulated under CVM Resolution 88/2022 + Ato Declaratório 23.635/2025.
  • Current state: ~$1.5k collateral supplied, cycle proven end-to-end on mainnet.

Ask

Add the efixDI/USDC vault (0xe276…3956) to governedPerspective so it renders in the Euler app UI and becomes discoverable to lenders. Happy to share our full 1-page dossier and any additional documentation, and to hop on a call.

Contact: ernesto.otero@efix.finance

Thanks!

D+0 presumably refers to Brazilian business days. If a position is liquidated on a weekend, what are the next steps for the liquidator?

Hi Oleg, good question — and correct: D+0 refers to Brazilian business days (the fund/B3 calendar). The key point is that the business-day clock only touches the fiat redemption leg. Everything the liquidator actually interacts with is on-chain and runs 24/7. Walking through a weekend liquidation concretely:

  1. The liquidation itself doesn’t wait for Brazil. Euler liquidation mechanics are purely on-chain: repay USDC debt, receive efixDI collateral at the liquidation discount. Saturday 3am works the same as Tuesday noon — nothing in that path references the fund.

  2. What the liquidator holds over the weekend is a flat, non-decaying asset. Two inputs price efixDI in USD:

  • NAV (BRL leg): CDI accrues on business days only (Brazil’s 252-business-day convention), so weekend NAV is flat by construction — monotonic, never marks down. The on-chain NAV feed updates daily including weekends, behind a 25-hour fail-closed staleness guard: a Monday-morning read passing the guard implies the Sunday push happened, and if the feed ever went stale the oracle reverts rather than serving a stale price.

  • BRL/USD (FX leg): FX markets are closed on weekends, so the Chainlink feed effectively carries Friday’s close until markets reopen.

Net effect: the USD value of seized collateral is essentially frozen from Friday close to Monday open. The liquidator is not racing decay. The one open risk is the Monday FX gap — which is the product’s single disclosed risk, and what the 7-point spread between borrow LTV (70%) and liquidation LTV (77%), plus the liquidation discount, are sized against. For scale: the NAV leg’s realized volatility is 0.22% annualized (2 negative months out of 220 since 2008), so in practice weekend risk is an FX-gap question, not an asset-quality one.

  1. Next steps for the liquidator — three exits, in order of immediacy:
  • (a) Instant, on-chain, 24/7: swap efixDI → USDC through the PSM’s instant tier / secondary liquidity. We size the instant tier to expected liquidation volumes as the vault scales, and we are onboarding a market maker (Tokka Labs) for secondary depth. At today’s bootstrap size this tier is small — being explicit about that.

  • (b) Next business day, primary path: redeem through the issuer — cotas redeem D+0 (same business day) into BRL at the fund, PIX settles instantly (PIX itself runs 24/7; it’s the fund strike that is business-day), then BRL converts to USDC. A Saturday liquidation redeems Monday and is in USDC the same day.

  • (c) Hold. efixDI resumes accruing CDI on Monday. There is no decay, funding cost or expiry, so some liquidators will simply keep it as a yield-bearing position.

Thank you. Additional question regarding exit (b)

You describe issuer redemption as the primary path. Is it available to any efixDI holder, or does it require onboarding with EFIX (KYC / eligible account)? Your app’s redemption flow appears to require registering a PIX key with admin approval before payout, which suggests the latter. If redemption is gated, then at bootstrap the parties who can actually execute the D+0 exit are EFIX, Tokka Labs once onboarded, and pre-onboarded holders. Everyone else is limited to the instant tier or holding. This may well be the intended design, but it seems worth explicitly stating this in the proposal, as the liquidation process then depends on those specific actors rather than open competition.

On exit (b): issuer redemption is gated, and your bootstrap read is correct. This is now stated explicitly in the addendum below, “Liquidation exit paths at bootstrap”.

The facts first. Redemption requires onboarding with EFIX: KYC/AML under our CVM authorization, with payout in BRL to a verified PIX key in the holder’s name. The approval step you observed is an anti-fraud control on key registration. The gating follows from operating on regulated Brazilian rails rather than from an app-level choice. At bootstrap the D+0-capable set is therefore as you describe: EFIX, pre-onboarded holders, and Tokka Labs once onboarded. Other participants exit through on-chain liquidity or hold, and holding here means a CDI-accruing, sovereign-backed asset with hedgeable FX rather than dead inventory.

Context that belongs alongside that list: the market is not yet in its public phase. On-chain activity to date is our own full-cycle testing, and this whitelisting is part of the step toward open participation, so the narrow bootstrap actor set is sequencing, not the end state. Sourcing USDC from the open market is the model rather than a funding constraint: EFIX can cover the borrow side from treasury at these caps, but the protocol exists to pair regulated Brazilian collateral with open on-chain dollar liquidity, with EFIX as originator rather than lender, and, as the market matures, independent liquidators rather than only us.

Why the current caps make the dependency contained in the meantime:

  1. Capital bound. The 20k USDC borrow cap fixes the maximum capital any single liquidator must deploy to clear the entire market. The round trip (repay USDC, seize efixDI, redeem at NAV) settles the same Brazilian business day, so this is one-day float, not term risk capital. EFIX holds standing capacity to run it without coordination with any third party.

  2. Time bound. The collateral’s BRL NAV is monotonic (daily CDI accrual, never negative), so only BRL/USD moves health factors. Borrow LTV is 70%, liquidation 77%, insolvency 100%: layered FX buffers of 7 and then 23 points. Moves of that size unfold over days to weeks, not blocks, which is what makes a narrow liquidator set operationally viable here in a way it would not be for volatile crypto collateral.

  3. Loss bound. In the degenerate case where no liquidation occurs at all, maximum system loss is the 20k borrow side: a small, fixed tail rather than a percentage of open-ended TVL. On the redemption leg, 20k USDC is roughly R$100k against the underlying fund’s R$28.5bn AUM, about five orders of magnitude of headroom.

Caps today are sized to the capacity of the one liquidator whose presence is certain. As onboarded liquidators and permissionless on-chain depth grow, that basis changes, which is why the amended text notes that any material cap increase would be preceded by a review of both.

Addendum to the proposal (the original post’s edit window has closed):

Liquidation exit paths at bootstrap

Issuer redemption (exit b) is gated. It requires onboarding with EFIX (KYC/AML under CVM authorization) and settles in BRL to a verified PIX key in the holder’s name. At launch, the parties able to execute the D+0 exit are EFIX, pre-onboarded holders, and Tokka Labs upon completion of onboarding. Other liquidators exit through on-chain liquidity (PSM/DEX) or hold the collateral, which accrues CDI daily and cannot decline in BRL terms. The market has not yet entered its public phase: on-chain activity to date is the issuer’s own full-cycle testing, and this proposal is part of the step toward open participation.

Current caps (25,000 USDC supply / 20,000 USDC borrow) are sized so that EFIX alone can repay the entire borrow side and recycle seized collateral through redemption. Sourcing USDC from the open market is the model rather than a funding constraint: EFIX acts as originator, not lender. Any material cap increase would be preceded by a review of the onboarded liquidator set and of permissionless on-chain depth.

Thanks. the addendum resolves the exit (b) question.

One follow-up on verifiability. The proposal anchors the oracle to the fund’s official cota published by CVM and your reply cites fund-level figures (R$28.5bn AUM, 2 negative months of 220 since 2008), but the fund itself isn’t named anywhere in the thread. Could you add the fund’s name and CNPJ to the proposal? With that, anyone can check the cota history and the oracle anchor against the CVM informe diário directly.

Added — good push on verifiability.

Fund identity. The oracle’s BRL leg is anchored to the official cota of BTG Pactual Tesouro Selic FI RF Referenciado DI — CNPJ 09.215.250/0001-13.

Recording it here as a formal amendment: the edit window on the opening post has closed for my account, so this reply is the amendment of record. Happy for a moderator to fold the identifier into the OP’s Oracle line (“NAV is anchored to the fund’s official cota published by CVM”) if that reads better for the whitelist review.

How to verify it independently, with no trust in us:

  1. CVM Informe Diário (public open data, D+1): https://dados.cvm.gov.br/dados/FI/DOC/INF_DIARIO/DADOS/inf_diario_fi_YYYYMM.zip
    Filter CNPJ_FUNDO_CLASSE = 09.215.250/0001-13 (older files use CNPJ_FUNDO). VL_QUOTA is the cota the oracle anchors to; VL_PATRIM_LIQ is AUM.
    From the current file: DT_COMPTC 2026-07-27VL_QUOTA 5.586122892948, VL_PATRIM_LIQ R$31.99bn. That also updates the R$28.5bn AUM I quoted earlier in the thread (older snapshot) — headroom against the 20k USDC borrow cap is now ~5.3 orders of magnitude.

  2. Full cota series is in the same dataset, monthly files back to the fund’s 2008 inception — that is the series behind “2 negative months out of 220” and the 0.22% annualized NAV volatility.

  3. Cross-check against custody. Our own subscription notes at BTG carry the same cota to the eighth decimal (2026-07-22: BTG note 5.57741324 vs CVM VL_QUOTA 5.577413235374), and our feed keeper consumes exactly this CVM source — same CNPJ, same VL_QUOTA column, D+1. So the on-chain NAV anchor, the custodian’s note and the public record are one series, replayable from the informe alone.

Thank you for the CVM path. I verified the cota against the informe (VL_QUOTA 5.586122892948, 2026-07-27, matches).

Two things I couldn’t reconcile, from reading the deployed contracts directly:

  1. Token → cota relationship. The proposal states each token is backed 1:1 by fund cotas, and your amendment says VL_QUOTA is the cota the oracle anchors to. But on-chain: the NAV feed (0xEaff…) returns navPerToken = 1.027881642438941274 (18-dec, “NAV in BRL per efixDI”), and the oracle (0x9CD2…) quotes 1e18 efixDI = $0.2022. both consistent with 1 token = 1.03 BRL, not 1 cota (5.59 BRL). The ratio 5.586/1.0279 = 5.4346 suggests NAV = VL_QUOTA divided by the cota at some inception date. If so, the replay recipe from the informe needs that normalization constant, which isn’t stated anywhere in the thread. Could you state the actual token-to-cota conversion and the normalization date/constant, and correct the “backed 1:1 by cotas” language if the unit is BRL-at-inception rather than cotas?

  2. Which contract was audited? The OpenZeppelin audit’s scope was a single file, EfixDIToken.sol with BURNER_ROLE, adjustable max supply, treasury/emergencyWithdraw, and a pause that halts all transfers. The deployed collateral token EfixDITokenBase (0xF5cA…) has none of these. its pause gates only bridgeIn/bridgeOut, and it adds bridge mint/burn functions the audit doesn’t describe. Its NatSpec also describes a different product (1:1 BRL, which, per point 1, matches the live oracle, custody via Genial IAAS, LayerZero OFT bridging, Morpho Blue collateral). Is EfixDITokenBase itself covered by any audit?

Hi Oleg, thanks for the reply.

  1. TOKEN-TO-COTA CONVERSION

You’re right, and our proposal language was wrong. Let me give the design
rationale first, because the naming error obscured a deliberate choice.

There are two ways to tokenize a yielding fund position. A distributing
token, where price stays at par and yield arrives as new tokens. Or a
value-accruing token, where supply is fixed and NAV per token rises. We
chose accrual, for three reasons.

First, distribution breaks collateral. Yield delivered as new tokens would
have to reach every holder, including your escrow vault and any contract
holding the token. In the escrow, newly minted tokens would not be credited
to the borrower’s position, so the yield would strand in the vault and the
oracle would report par indefinitely. The borrower’s LTV would never
improve.

Second, accrual makes the collateral self-improving, which we believe is
credit-positive for you. At current rates our collateral accrues at 13.93%
while the debt accrues at 4.56%, so LTV falls 8.22% per year with no
transaction:

year LTV FX distance to liquidation
0 33.5% +130%
1 30.8% +150%
3 25.9% +197%
5 21.8% +253%

That property exists only because NAV accrues.

Third, operational. Monthly yield distribution to every holder is a
recurring uncapped mint, which is the class of privileged operation we are
removing from the system, not adding to it.

On normalization: we set NAV per token to 1.000000 BRL at inception rather
than to one cota. The unit would be awkward at 5.59 BRL, but the
substantive reason is decoupling. A BRL-denominated unit does not break if
the underlying DI fund or the custodian changes.

The design conversion is:

navPerToken(t) = VL_QUOTA(t) / VL_QUOTA(t0)

with t0 = 2026-05-20 and VL_QUOTA(t0) = 5.450605982603, the CVM-filed
quota for that date (inf_diario_fi_202605, CNPJ 09.215.250/0001-13).

Two precisions on that, because you will recompute it. First, the 5.4346
you derived is a date-pairing artifact, not our constant: it divides the
2026-07-22 quota (5.577413235374) by a NAV printed two business days
later. Pairing quota and NAV on the same reference date gives a stable
ratio: the latest filed quota, 2026-07-28 at 5.589039480495, against NAV
deflated to that print date (1.026802) gives 5.4432. Second, that 5.4432
differs from the inception constant by about 14 bps, and we would rather
state why than have you find it: between inception and the introduction
of the print-anchored oracle, daily NAV between official quota
publications was interpolated on realized CDI, and that interpolation ran
slightly ahead of the fund’s print ratio. When the print-anchored oracle
went live it adopted the prevailing level without a step change — a level
jump would have repriced existing holders — and from its anchor forward
the ratio to the official prints is enforced. The basis is a fixed
historical offset, not a growing one.

We will publish the inception date, the inception quota, and the anchored
conversion in the contract documentation, and correct the proposal to read
“backed by fund cotas, denominated in BRL at inception NAV” rather than
“1:1 by cotas.” The audit report and the contract NatSpec both already
describe BRL denomination. The cota language was an error in the proposal
document, not in the deployed system.

  1. AUDIT SCOPE

EfixDITokenBase is not covered. The OpenZeppelin engagement scoped one
repository at one commit and one file, contracts/EfixDIToken.sol, and the
audited deployment was the Polygon contract at
0x04082b283818D9d0dd9Ee8742892eEe5CC396441. The report’s conclusion states
the engagement was limited to that contract and that integrations,
including the collateral vault, were not reviewed.

The delta between the audited contract and the deployed one:

removed: BURNER_ROLE, adjustable max supply, treasury address,
emergencyWithdraw, global transfer pause
added: bridge mint/burn, pause scoped to bridgeIn/bridgeOut only

On the bridge functions, which are the bulk of that delta: the LayerZero
bridge was permanently discontinued in May 2026. The trigger was not the
audit. A separate on-chain security review found that the MinterBurner
contract had been deployed by a key we had reason to treat as compromised,
and that the token’s DEFAULT_ADMIN_ROLE sat on an exposed EOA. Rather than
redeploy the bridge under a new key, we discontinued it entirely, cut over
to a Base-native mint pipeline, and moved token roles to a Safe multisig.
Roughly R$ 1,156 of retail balance remains stranded on Polygon as a
consequence, which we accepted.

Verifiable now on 0xF5cA55f3ea5Bcd180aEa6dF9E05a0E63A66f5608 via hasRole:

DEFAULT_ADMIN_ROLE / 0x9eFc11e4d285b5a749faFBC2613836Dcda899e12 false
BRIDGE_ROLE / 0x9eFc11e4d285b5a749faFBC2613836Dcda899e12 false
MINTER_ROLE / 0x9eFc11e4d285b5a749faFBC2613836Dcda899e12 false
PAUSER_ROLE / 0x9eFc11e4d285b5a749faFBC2613836Dcda899e12 false
BRIDGE_ROLE / 0x400a8DE2bF8fc4A63000A7E77103eDAE897CB9a3 false
MINTER_ROLE / 0x400a8DE2bF8fc4A63000A7E77103eDAE897CB9a3 false
DEFAULT_ADMIN_ROLE / 0x7C54Dccd6fC5DB73b34f32aCA4d1631E054c7537 false

0x9eFc is the previously exposed operator EOA, 0x400a is the MinterBurner,
0x7C54 is the compromised deployer.

One caveat worth stating: the contract inherits plain AccessControl, not
AccessControlEnumerable, so role membership cannot be enumerated by view
call. The statement above is that these specific addresses hold no roles,
not that the role sets are provably empty. DEFAULT_ADMIN_ROLE is held by
our Safe multisig at 0x9040b4E9e1F8C96dC6dEF1a2d6f4105D8535EeD4. The full
RoleGranted and RoleRevoked history from the Base deployment block is
available on request.

Separately, the March audit did produce a high-severity finding, H-01, on
collateral burn accounting: a user could transfer efixDI out while the
vault still tracked their position, which made burnFrom revert during
liquidation. We mitigated it with a custodial collateral vault where
withdrawal is blocked in Solidity while debt is outstanding, rather than by
patching the token.

  1. ON REMEDIATION

We are not going to promise an audit we have not scheduled. What we can do
is bound your exposure to something you verify independently.

We propose the borrow cap be a function of attested collateral rather than
a fixed number: 65% of the fund’s attested NAV, with the CVM informe
published monthly as the attestation. At today’s NAV that is approximately
US$ 1,985.

Absolute ceilings in tranches, each step conditioned on the previous
holding 60% utilization for 30 days:

US$ 25,000 → US$ 100,000 → uncapped

This bounds the exposure of unaudited code to a fraction of collateral you
can verify against a regulator-filed document, and removes the need to take
our word on scale.

Compensating controls currently in place, all verifiable on-chain: token
roles held by a Safe multisig rather than an EOA; collateral escrow vault
with governance renounced; a smaller privileged surface than the audited
contract, with no emergencyWithdraw, no adjustable max supply, no treasury
address and no global transfer pause; and D+0 redemption of the underlying
fund, so liquidation does not depend on a secondary market.

  1. INVESTOR-RELATIONS PAGE

We have corrected our investor-relations page, which placed the audit scope
adjacent to the Base contract address in a way that implied coverage it
does not have. The page now states the audited contract and chain
explicitly, lists what was not in scope, and carries a scope note covering
the delta and the bridge discontinuation. It is live:

https://efix.finance/public/efixdi/investor-relations/

Ernesto

Thank you for your sincere and detailed response. For my part: the IR page is verified and the scope note is indeed correct. The conversion arithmetic matches. same-date pairing gives 5.4432, basis to inception −13.7 bps. Everything agrees with your explanation.

BaseScan shows the Contract Creator of the Base token 0xF5cA… is the very address you refer to as the compromised deployer, deployed 5 February, roughly five weeks before the audit and three months before the May review that identified the compromise. It’s worth acknowledging up front that the source is verified, DEFAULT_ADMIN_ROLE now sits on the Safe, and 0x7C54 holds nothing today.

I reconstructed the history from the event log. on 7 March, DEFAULT_ADMIN_ROLE on the token and ownership of the vault were both moved to 0x9eFc. it’s the address your reply labels the exposed operator EOA, which then granted itself MINTER_ROLE the same day. Admin reached the Safe on 16 May. The 16 May cleanup revoked every role except one: MINTER_ROLE on 0x9eFc remained live until 28 May, twelve days after the migration your reply describes. And BRIDGE_ROLE, which is mint-capable via bridgeIn, stayed on the compromised deployer from the constructor until 16 May, through the entire audit period. The current sole MINTER is 0x8f8C…, an EOA funded and seeded by 0x9eFc on 28 May, which appears nowhere in the proposal or this thread. I’d ask that the scope note state the token’s own provenance and this timeline as explicitly as it now states the bridge’s.

One question, and it’s about the liquidation mechanics the tranche proposal rests on. The PSM at 0x068C… currently reads dailyUsdcOutCap = 100 USDC and reserves = 363.14 USDC. Against tranches of $25,000 → $100,000 → uncapped justified by “D+0 redemption, so liquidation does not depend on a secondary market,” a liquidator exiting a first-tranche position through the PSM at today’s parameters needs 250+ days of cap. What minimum dailyUsdcOutCap and reserve levels is EFIX prepared to commit to in the proposal text alongside the borrow cap, and by what mechanism do they scale with the tranches?

Hi Oleg,

Two answers, in the order you raised them: the provenance addition you
asked for, and the liquidation-mechanics commitment.

  1. TOKEN PROVENANCE

Your event-log reconstruction is accurate in actors, sequence and
substance, and agreed: the scope note now states the token’s own
provenance with the same explicitness as the bridge’s. One refinement
from re-deriving the timeline against the receipts, because this thread
runs on exact numbers: three of the calendar dates shift by one day in
UTC. The anchored timeline is: deployed 2026-02-04 20:55 UTC by the key
we later classified as compromised (tx 0x98c6…e437); DEFAULT_ADMIN to
the operator EOA on 2026-03-07, which self-granted MINTER the same hour
(txs 0x9c18…f150, 0xfb42…2a19); DEFAULT_ADMIN to the Safe on
2026-05-15 22:54 UTC, with a cleanup batch at 23:08 revoking every
remaining role except the operator’s MINTER (txs 0x461f…3cf2,
0x8f37…da96); MINTER granted to the successor signer on 2026-05-27
(tx 0xb2fd…249b) and revoked from the operator EOA on 2026-05-28
15:43 UTC (tx 0xb001…e729). The updated note is live at the same IR
page, with every hash linked.

On 0x8f8C…, the current sole MINTER, since you correctly flag that it
appears nowhere in the thread: it is not a conventional EOA with an
extractable private key. It is an MPC-custodied signing address. The key
exists only as distributed shares at a custody provider; there is no
private key file or environment variable whose theft reproduces the
February deployer compromise. Every transaction it signs must satisfy a
transaction authorization policy enforced at that custody layer, and
issuance additionally passes an off-chain solvency gate: supply times NAV
at or below attested fund backing, the same attestation series the
borrow-cap formula reads. The funding from 0x9eFc you observed is 0.01
ETH of gas sent to the new signer on 2026-05-27, about an hour before its
MINTER grant, during that same migration; funding an address’s gas
confers no authority over it.

One honesty note, because the distinction matters in this thread: MPC
custody is an operational control, not an on-chain-verifiable one. From
the chain’s perspective 0x8f8C looks like any EOA. That is precisely why
the structural commitments in this proposal, the borrow-cap formula, the
exit-capacity term below, and the no-fund-no-step rule, are designed to
hold without trusting the custody claim.

  1. THE SCALE CORRECTION

Your arithmetic is correct at today’s parameters, so first the scale, using
numbers already on record in this thread. The first-tranche position is not
$25,000. The proposal sets the effective borrow cap at min(65% of attested
NAV, tranche ceiling), which at the current attestation is approximately
US$1,985. The $25,000 is the ceiling, reachable only as attested collateral
grows into it. A full liquidation of today’s effective book seizes
collateral worth roughly the borrow divided by the 0.77 liquidation LTV,
about US$2,580, which at the current 100 USDC daily cap is roughly 26 days
of exit capacity, not 250. Still inadequate, which is why the real answer
is the commitment below, not this correction.

  1. THE COMMITMENT

The following is being added to the proposal text, replacing the borrow-cap
definition:

“PSM exit floor. The effective borrow cap is defined as the minimum of
three terms, all public reads: 65% of attested NAV, the tranche ceiling,
and the PSM exit capacity, where exit capacity equals the lesser of the
PSM’s USDC reserves and its dailyUsdcOutCap, divided by 1.30. The 1.30
is 1/0.77 rounded up: liquidating the entire book at the liquidation LTV
seizes collateral worth at most the borrow divided by 0.77, so a cap
bounded by exit capacity guarantees the whole book can exit through the
PSM the same day, permissionlessly, from standing reserves alone. Under
this definition an underfunded PSM does not merely block a cap increase;
it lowers the cap itself. Every change of the on-chain borrow cap,
monthly attestation raises and tranche-ceiling steps alike, executes as
a single batched Safe transaction that transfers the reserve delta into
the PSM, raises the PSM parameters, and sets the on-chain cap to the
formula value at execution time, rounded down to the nearest
representable on-chain cap step. The delta is pre-positioned into the
Safe from treasury custody before signing; if it is not in place, the
batched transfer reverts and the cap does not move. Reserves replenish
within one Brazilian business day: the PSM’s accumulated efixDI is
redeemed at the fund D+0 and the proceeds restore the USDC side, so
sustained multi-day throughput is backed by the fund, while day one is
covered in full by standing inventory.”

What this changes structurally: the PSM becomes EFIX pre-positioning the
D+0 redemption pipe for actors who are not KYC-onboarded, which closes the
gap you identified in the exit-path discussion. The liquidator never
touches the gated redemption; they swap at oracle NAV times FX minus the
30 bps fee and are in USDC the same block. The daily cap does not
disappear, because it is the PSM’s circuit breaker against oracle failure:
sized so one day of legitimate full-book demand fits under it while a
multi-day drain does not, paired with fail-closed pricing at 25 hours of
staleness. Every element is a public read at the PSM,
0x068C6c11b4A369e4011E008Da2aa58B6A58a85e4: dailyUsdcOutCap() and the USDC
balance are the two inputs of the exit-capacity term, and the 1,031.99
efixDI of accumulated inventory sitting there today is the exact position
the redemption leg recycles, so the loop is observable as it operates, not
attested after the fact.

On cost, since you will compute it: at the second tranche ceiling the
exit-capacity term requires 130,000 USDC of standing reserves. That is
EFIX capital, not depositor capital, and it is the price of making instant
exit structural rather than relationship-based during bootstrap.
Governance never has to ask whether we honored it, because an underfunded
PSM lowers the effective cap by definition, and the batched ceremony
reverts rather than moving a cap it cannot fund.

  1. EXECUTED TODAY, AHEAD OF THE AMENDMENT

In a single Safe transaction [TX_BATCH], three legs, atomically: PSM
reserves topped from 363.14 to 3,000 USDC; dailyUsdcOutCap raised from
100 to 3,000; and the market’s on-chain borrow cap conformed to the
formula, lowered from 20,000 to 1,980 USDC, the nearest representable cap
step below the 1,985 formula value. That puts the exit-capacity term at
2,307 USDC against the 1,985 attested-collateral term, so the binding
constraint on the effective cap is attested collateral, as designed, with
roughly a year of monthly attestation raises of headroom before the next
reserve ceremony is due.

One forward-looking note for completeness: the exit-capacity term stands
as written through the first two tranches. The step to the uncapped
tranche already requires a review under the amended text, and that review
re-derives exit capacity across the PSM, onboarded liquidators, and
permissionless depth, because at that scale independent competition, not
EFIX inventory, should be the primary exit.

Ernesto

Timing correction on section 4: the funding ceremony has not executed
yet. I will append the transaction hash here when it lands, with the
from-values as read at execution, since the PSM’s live figures move as
it trades. The commitment text stands as written.

A correction to the exit floor, and it is a withdrawal, not a refinement.

The term I committed to reads “USDC reserves and a dailyUsdcOutCap each no lower than 130% of the effective borrow cap”. Two defects, both mine.

First, it is dimensionally incoherent. A dailyUsdcOutCap is a flow, in USDC per day. A borrow cap is a stock, in USDC. Requiring one to be 130% of the other silently assigns the multiplier units of inverse days, and what it actually commits to is that the entire book exits in 1/1.30 of a day, or roughly eighteen hours. That was never the intent and no lending market operates that way. The 1.30 is the inverse of the 0.77 liquidation LTV, which is the correct multiplier for collateral seized per unit of debt, a stock-to-stock ratio. I carried it across to the flow term where it has no meaning.

Second, and worse, the flow leg would defeat the control it was meant to strengthen. At a borrow cap of 23,000 the clause requires a dailyUsdcOutCap of 29,900 per day, against 100 today. A rate limiter set above the maximum debt the market can ever carry cannot bind. I would have been committing to disable the PSM’s circuit breaker against oracle failure and presenting it to you as a safety guarantee. You would have been right to object to that leg rather than to the tightness of the first one.

The replacement is indexed to outstanding debt rather than to a theoretical cap, which is how comparable liquidity commitments are actually written. Steakhouse’s mF-ONE sleeve targets 10% of fund TVL in instantly redeemable form. MakerDAO’s DC-IAM governs the debt ceiling with a gap and a cooldown, that is, by flow rather than by pre-funded stock. Both size the buffer against real exposure, and neither has ever required a reserve equal to the credit line.

“PSM exit tier. The PSM maintains USDC reserves no lower than 10% of outstanding debt in this market, and a dailyUsdcOutCap no lower than those reserves. Day one of any unwind is served from standing inventory; each subsequent business day is replenished by redeeming the PSM’s accumulated efixDI at the fund at D+0. The full book therefore exits through the PSM alone, permissionlessly and at oracle price less the 30 bps fee, in ten business days, with no step depending on the gated redemption path or on a counterparty being onboarded. Both parameters are public reads at 0x068C6c11b4A369e4011E008Da2aa58B6A58a85e4 and the debt figure is a public read at the vault, so compliance is checkable at any block by anyone.”

Against outstanding debt of 3,093.46 USDC the rule requires 309.35 of standing reserves. The PSM holds 372.14 today, so this is met as written without any funding step, and it scales with the book rather than ahead of it.

On the borrow cap itself, I should have derived it rather than asserted it. The Euler precedent for the borrowable side of an RWA-collateralised market is 92% of the supply cap, applied uniformly across the T-Bill market vaults. At the published first-tranche ceiling of 25,000 that gives 23,000. It is also the smallest value that keeps this vault coherent with its own interest rate model: the IRM kink sits at 90% utilisation while the current 20,000 against a 25,000 supply cap caps utilisation at 80%, leaving the entire post-kink region, the part that defends suppliers during a withdrawal run, unreachable. And it exhausts at exactly the point the 70% borrow LTV exhausts, so no capacity is stranded on either side.

Ten business days is the number I am asking you to price, and it replaces the eighteen hours I wrote by accident and the 250 days you found.

One clarification on the ten business days, because as written it understates the exit. That figure is the floor for a liquidator who never onboards and uses only the permissionless rail. An onboarded holder redeems at the fund at D+0 on any business day, without touching the PSM or its daily cap at all. The PSM tier exists for the weekend gap and for counterparties who will not onboard, which is the population your original question was about.

The withdrawal was the right call, and stating the dimensional defect explicitly rather than patching it quietly is to your credit.

Completing the record pending the transaction hashes you said you would append. As of block 49,703,781 (2026-08-08 13:48 UTC), the live parameters are: a daily USDC outflow cap of 400 USDC, PSM USDC reserves of 372.14, vault caps of 25,000 / 23,000, and outstanding debt of 3,094.12. Both conditions of the replacement clause remain satisfied as written: reserves are at least 10% of outstanding debt (309.41), and the daily cap is at least equal to reserves.

These figures differ from every parameter cited in the thread (100 and 20,000). The changes were executed through two Safe transactions:

  • 0x6c1fe09e6d219e3e948e1e7e7a758c0d4481f8c208cbc59c7f45904b86fe0314 - 2026-08-06 00:42 UTC

  • 0xf80cdb8653070a917934fb8e051efb5fdba3a4b5a195d59aa739214fd6ae20bd - 2026-08-07 01:09 UTC, setCaps(25,000 / 23,000) on the vault and setDailyCaps(400 USDC, 500 efixDI) on the PSM

The 500 efixDI/day limit does not appear anywhere in the thread and should therefore be added to the parameter disclosure.

One question remains. The withdrawn amendment was explicitly intended to limit the exposure of unaudited code to a fraction of regulator-attested collateral-65% of attested NAV, or approximately US$1,985 based on the current attestation. The live borrow cap is now 23,000, roughly 11.6× that amount.

Were the attested-NAV limit and the tranche conditions withdrawn together with the exit floor? If so, what mechanism now bounds exposure to the unaudited code?

Hi Oleg,

Thank you for completing the record. Confirming your figures, one scope correction, a direct answer to the open question, and the design rationale behind the parameters — since that is really what makes this a viable product rather than a nominal one.

Record. Every parameter you list is correct as of block 49,719,455. One scope correction: 0x6c1fe09e…0314 (2026-08-06) contains no parameter change. It executes the NAV oracle keeper rotation only, on 0x77E395a5…67AC: grantRole to 0x1bD5…05FF, revokeRole from 0x9eFc…9e12. All parameter changes are in 0xf80cdb…20bd (2026-08-07): setCaps(25,000 / 23,000) on the vault and setDailyCaps(400 USDC, 500 efixDI) on the PSM. The 500 efixDI/day inbound cap is in the table below; agreed it was not surfaced before. From here on, any parameter change to this market is posted in the thread with its transaction hash.

Answer. Yes. The attested-NAV limit, the tranche conditions and the exit floor were clauses of one amendment and were withdrawn together, for the reasons in the forum post. Between 2026-08-07 and today, nothing bound exposure to the unaudited collateral token except the raw caps. We will not claim otherwise.

What bounds exposure in practice. The supply side. Total USDC supplied is 3,438.52, across three addresses, all operated by EFIX: 0xbd90…e599 (3,299.03), 0x7C78…5eB9 (111.50), 0x7e68…8D50 (27.92). The full deposit history reconciles against the vault’s transfer log. Outstanding debt of 3,094.27 USDC is EFIX principal, levered against EFIX-held collateral. Third-party exposure to the unaudited code is zero, and remains so by design: external supply is unsolicited while the token is unaudited.

Position health, since you would check it. The collateral in escrow is 34,398 efixDI. EulerRouter.getQuote and EfixDIEulerOracle.getQuote both return 0.2026 USDC/efixDI at this block, identical to the PSM’s execution rate over its last 25 trades, so there is no divergence between the market oracle and the redemption rate. That values the collateral at 6,969 USDC against 3,094 of debt: LTV 44.4% against a 70% borrow limit and 77% liquidation, accountLiquidity health 1.58. The position is not near liquidation and there is no shortfall.

Why the caps are shaped this way. This market is in bootstrap, capitalised entirely by EFIX, and I would rather state that plainly than have you infer it. 34,398 efixDI — 86.5% of total supply — is deposited as collateral in the escrow, and the USDC on both sides is EFIX principal. It is deliberately a closed loop right now: the point is to prove the core mechanic with our own money before any external party is exposed to it — a holder of a CDI-yielding Brazilian fund token borrowing USDC against that token. The caps are sized to make that mechanic actually viable rather than nominal. The borrow cap of 23,000 is 92% of the supply cap and exhausts at exactly the point the 70% LTV does, so the leverage headroom is reachable and none of it is stranded; a materially lower cap would make the position non-viable for its own stated purpose, which is what the earlier 1,980 figure would have done.

On the exit ratio you raised. The one window the fund cannot cover is the weekend. D+0 redemption at the fund runs on Brazilian business days, so on Saturday and Sunday the on-chain rail — the PSM reserve plus DEX depth — is the sole exit. That is exactly the ratio worth pinning down, and we are happy to size the PSM reserve and the daily outflow against whatever weekend exit volume you want covered, and to post the change here with its hash. Today’s 400 USDC daily outflow sits above the standing reserve so the full reserve is available within any single day; scaling it to a target coverage of the borrowable book is a parameter, not a redesign.

Parameters at block 49,719,455: supply cap 25,000; borrow cap 23,000; PSM daily outflow 400 USDC; PSM daily inflow 500 efixDI; PSM reserves 372.14 USDC + 987.03 efixDI; outstanding debt 3,094.27; collateral in escrow 34,398 efixDI (86.5% of supply); LTV 0.70 / 0.77.

Best, Ernesto

thank you for the correction and the direct answer.

confirmed on my side: the 2026-08-06 transaction carries no parameter change. my attribution in the previous post was wrong.

i swept all deposit and withdraw events on the vault from deploy block 48,040,419 through block 49,782,910. net depositors are exactly the three addresses you list, all operated by efix per your description. no third-party depositor exists as of that block.

one question on the exposure bound as you describe it. the bound holds today because the market has no outside visibility. the whitelisting this proposal requests is what makes the vault render in the app and become discoverable to lenders. what bounds third-party exposure to the unaudited code once that happens?

The bound is the supply cap, and the ladder already in this thread is
the right instrument once it is pointed at the correct variable.

Third-party exposure to the unaudited contract is third-party USDC
supplied to this vault: a supplier holds eUSDC backed by efixDI
collateral, so the code risk sits on the supply side. A borrower posts
their own collateral and exposes no one. The quantity that bounds
outside exposure is therefore supply cap minus our own supply, and it
is a public read at every block. Before this reply that was 25,000
minus 3,440.28, or 21,559.72 USDC of room that nothing but our own
restraint occupied. That is the gap your question identifies, and
restraint is not a mechanism.

As of 0x306d919adad895612cb3f3b83382ee33e56c344bd7932b4af60417ced0cac581,
block 49,843,648, the supply cap is 3,440, conformed to our own
supplied balance. Third-party room is not merely small, it is closed:
the vault sits marginally above its own supply cap, so a new deposit
reverts. By the EVault monotonicity rule this blocks deposits only —
withdrawal, repayment, borrowing and liquidation are unaffected, which
is the correct asymmetry.

The mechanism, stated as a rule rather than as this week’s number: the
supply cap is pinned to EFIX’s own supplied balance. It rises only when
EFIX supplies more of its own capital, in the same batched transaction
that raises it, and every such step is posted here with its hash. Third
party room is therefore zero at every block by construction, not by our
forbearance, and it is one subtraction anyone can perform. The borrow
cap of 23,000 is unreachable under this rule for the same arithmetic
reason a lender cannot borrow what nobody supplied; from here the two
caps move together in one ceremony, so the borrow cap can never exceed
what our own supply funds.

The correction to my own proposal: the tranche ladder I put forward
(25,000 to 100,000 to uncapped, each step conditioned on the previous
holding 60% utilisation for 30 days) governs the borrow cap. Borrow
ceilings bound our leverage, not your suppliers’ exposure. The ladder
belongs on the supply cap, and the next rung we are asking for is
10,000, funded by EFIX capital under the pin above.

Also honestly: that utilisation condition is already met. Utilisation
is 89.98% at this block, sitting on the interest-rate kink. It paces
the ramp; it cannot be what holds the line, and I will not present it
as though it does. What holds the line is the pin, and one further
condition: the supply cap only ever exceeds EFIX’s own supplied
balance, which is to say third-party room only ever becomes non-zero,
after a completed independent audit of the deployed contract,
EfixDITokenBase, with findings resolved. We are not asking to defer an
audit in order to operate. We are committing not to expose anyone else
before one.

The consequence is the one your question tests for: whitelisting makes
this market visible, and under the pin it does not make it fundable by
anyone but us. Visibility arrives first, on purpose, so a lender
inspecting the market meets the IR scope note and the audit status
before there is anything to deposit into.

Parameters at block 49,843,648: supply cap 3,440; borrow cap 23,000,
unreachable under the pin; outstanding debt 3,095.49; vault cash
344.79; utilisation 89.98%; PSM dailyUsdcOutCap 400 and dailyEfixOutCap
500; PSM reserves 378.14 USDC and 957.02 efixDI; depositors unchanged,
the three EFIX addresses you swept.

Ernesto