molfi · what stays private · Starknet mainnet

On a public chain your order is a signal before it is a trade.

That is the whole reason molfi exists, and it is also a claim you should not take on trust. Below is every specific thing an observer can and cannot learn, with the mechanism, and the live numbers where there are any.

Take the privacy away and molfi is a worse version of every public prediction market. That is the test the pitch has to pass.

Via the STRK20 pool

Hides the band, the size, and you. The pool is the caller, so the contract never learns who initiated anything. Needs a wallet that speaks STRK20.

Direct from your address

Hides the band, and only the band. The chain sees that you staked and how much, never what on. Works from any Starknet account — which is why it exists: a market only one kind of wallet can reach is one nobody trades.

Hidden

Which band you bought

The contract stores poseidon(MOLFI_POSITION_V1, secret, market, low, high) and, to price it, how far the band reaches from its own midpoint — a pair of ratios with the price divided out. Never the band.

Nothing on chain reveals a band until its holder claims. True on both routes; it is the one claim molfi will not trade away for reach.

How much you stakedVIA POOL ONLY

A position's stake is stored under the commitment, not under an address. Reading it requires knowing the commitment, and deriving that requires the secret.

get_position takes a commitment. There is no by-address call and there cannot be one.

Whether a position is yoursVIA POOL ONLY

The pool calls the contract; the caller is always the pool, and the position is stored with no owner at all. The contract never learns who initiated the transaction.

A pool position's owner field is zero, and the secret is the only credential that claims it.

Your position countVIA POOL ONLY

Positions are keyed by commitment. Two positions from one person and two from two people are indistinguishable.

Even molfi cannot count them — this page cannot show you a number for it.

Held by molfi, not by you

Who can sign for your account

molfi can. An email login gives you a Starknet account whose key is held by Privy under molfi's application, and molfi's server signs with it once it has verified your session. That is what removes the extension and the seed phrase — and it means you are trusting molfi with the key, not just with the code.

The signing endpoint resolves the wallet from your verified session and never from the request, so it cannot be pointed at somebody else's — but it is molfi's server doing the signing.

That molfi funded your account

A new account is sent 12 test STRK from a molfi faucet so it can deploy itself and play. That transfer is a public transaction linking the faucet to your address.

Visible on any explorer. It says molfi gave this address money; it says nothing about what the address then predicted.

Public, and it has to be

That a position was opened, and in which market

Opening emits PositionOpened with the market id and the commitment. Without an event there is no way to know a market has activity at all.

The commitment is in the event. The preimage is not.

Each market's total staked and total paid

Conservation — that a market never pays more than the stakes and bankroll behind it — is only a promise if somebody can check it. Checking needs two numbers.

156 markets, 0.0000 STRK staked across the recent ones.

The amount credited when you claim

An open note's amount is plaintext by design — it is measured on chain at execution, so it could not have been fixed at proof time. Its owner is not.

This is the pool's design, not molfi's choice.

Shielding and withdrawingVIA POOL ONLY

Both are public ERC-20 legs. An address funding the pool is visible, and so is one withdrawing from it.

The privacy is in what happens between them, not at the edges.

That your address staked, and for how muchDIRECT ONLY

A direct open is an ordinary transfer_from followed by open_position, both signed by you. Your address, the stake and the market are all in the block.

Everything except the band. If that is too much, the pool route is the one to use.

How wide your band is

The two reach ratios are the price, and the price has to be checkable, so they are stored in the clear. They say a band is 0.4% wide; they say nothing about which 0.4%.

A wide band and a narrow one are distinguishable. Where either sits is not.

What an observer could still infer

Timing correlation

Shield 100 STRK and open a position a minute later, and an observer with both timestamps has a strong guess. The pool's anonymity set is only as large as its recent activity.

Mitigation is behavioural, not cryptographic: shield ahead of time, in amounts that do not match what you then stake.

Amount correlation

A shield of exactly 12.34 STRK followed by a claim of exactly 12.34 STRK links the two ends regardless of what happened in between.

Round numbers and exact round-trips are the leak.

Being the only participant

If one market has one position, the anonymity set for that position is one. Privacy is a property of the crowd, not of the cryptography.

A quiet market is a transparent one, and molfi cannot fix that for you.

Withdrawing to the address you shielded from

It joins both public legs into one identity, undoing everything the pool did in the middle.

Use a fresh address. The console says so at the point of withdrawal.

Why this page exists

The last group is the one most projects leave out. It is also the only one a user can act on — the cryptography is already doing its job, and the remaining leaks are behavioural. Naming them is worth more than another paragraph about zero-knowledge.

Rounds are 15m · 1h · 4h — long enough that the oracle can settle them honestly.

KEEPER READING…