Skip to content

Using Floatless

Spending rules

Limits you set and sign yourself, registered on Monad, and checked before every payment.

On this page

Spending rules are limits you put on your own payments: the most one payment can be, the most you can send in a day, the balance you always keep, and the currencies you can pay with. You sign them with your wallet, they're registered on Monad, and Floatless checks each payment you send in the app against them before you sign.

What each rule controls

Rule in the app What it does Starts at
Each payment up to The most a single payment can be. It must be more than 0. $250
Each day up to The most you can send in one day, added up across all your currencies and devices. It must be at least your per-payment limit. The day starts over at midnight UTC. $500
Always keep at least A payment that would take your balance below this is declined. Floatless compares it with your balance in the currency you're paying with. Your other currencies don't count. $0
Currencies you can send The currencies a payment can use. Choose at least one. The app lists USDC, USDT0 and AUSD on mainnet, and USDC, AUSDC and AUSD on testnet. All of them
Rules last for How long the rules stay valid: 30, 90 or 180 days. 90 days

Amounts can have up to 6 decimal places. You can type 250, 19.99 or 19,99, and a leading $ is fine. A comma counts as a decimal point only when one or two digits follow it, so 1,000 isn't accepted. Until you set rules on a network, every payment on that network is declined, and the Spending rules screen says "Set your spending rules" and "Payments are paused until you do."

If you have savings goals, their protected floors work alongside Always keep at least. Floatless uses whichever amount is larger.

What your wallet signs

The app turns the form into these fields. Two of them never appear on screen.

Field Where it comes from
perTransactionMax Each payment up to
dailyMax Each day up to
liquidFloor Always keep at least
emergencyFloor Always 0 from the app
allowedSettlement Currencies you can send
maxSlippageBps Always 20, which means 0.2%. No payment check uses it today.
expiresAt The moment you tap Review rules, plus Rules last for

Your wallet doesn't sign these amounts one by one. It signs four things: your wallet address, a fingerprint of the fields above, a version number, and the expiry date. The fingerprint is a hash, a short code that changes completely if any field changes. The app works out the fingerprint itself from the rules you reviewed before your wallet signs, so a server can't show you one set of rules and have you sign another.

Set or change your rules

  1. Tap the avatar at the top of Home, Save or Activity to open Profile.
  2. Under Payments, tap Spending rules. The row shows your limits in a line like "Up to $250 a payment, $500 a day", or "Not set" with a Set up badge. The Set your spending rules step in the Get set up checklist on Home and the Set spending rules button in Send open the same screen.
  3. The screen shows Your rules with "Active until" and a date, an expired notice, or Set your spending rules. If you have no rules or they expired, fill in the form. If you have active rules, tap Change rules.
  4. Fill in the form and tap Review rules.
  5. Check the summary. Tap Edit to change something, or Approve and register to continue.
  6. Approve with your wallet. If you signed in with a passkey, your phone asks for your passkey twice, once to sign your rules and once to register them on Monad. If you signed in with email, Floatless signs for your embedded wallet.
  7. When you see Your rules are on, tap View registration transaction to open it on Monadscan, then tap Done.

Change rules fills the form with your current limits and currencies. Rules last for starts at 90 days again, so pick the period you want. Keep my current rules backs out without changing anything. Registering costs a small network fee in MON, as Fees and limits explains. The review step says so, and if your wallet has no MON for the fee it shows Add MON and keeps Approve and register off.

What happens after you approve

The button shows each step as it happens.

Button text What's happening
Preparing your rules… The Floatless API prepares the exact message to sign. The app checks that it matches the rules you reviewed, your wallet, this network and the registry built into the app, and recomputes the fingerprint. If anything differs, it stops before anything is signed, for example with "The prepared rules differ from what you reviewed. Nothing was signed."
Confirm with your passkey (1 of 2)… Your wallet signs the message. This is the first passkey prompt.
Saving your signed rules… The API checks the signature and saves your rules. From this point your previous rules are no longer used.
Confirm with your passkey (2 of 2)… Your wallet sends a transaction to the registry contract. This is the second passkey prompt.
Waiting for Monad to confirm… The app waits up to a minute for Monad to confirm it.
Adding it to your history… The API checks that the registry recorded this version for your wallet, then links the transaction to your history.

Your history then shows "Signed your spending rules" with the version number. You'll find it in Activity under Goals & rules.

If something stops during registration, the screen says "Your rules are signed but not registered on Monad yet, so payments stay paused." and adds the reason, for example "The registry rejected these rules onchain. A network fee may have been charged." The API saved your new rules before the registration, so payments are declined until a registration goes through. The review screen stays open, so tap Approve and register again. If you leave, open Spending rules and register again.

Where your rules are registered

Rules are registered on the FundingMandateRegistry contract, a small program that runs on Monad. Each network has its own.

Network Chain ID Registry
Monad mainnet 143 0x14077b679274Eb5d8B95c60A5d9E94A68Ea4fDf0
Monad testnet 10143 0x127af791F0807584CaEAe5eDDfd8012972E9a3Da

For your wallet, the registry keeps the fingerprint, the version, the expiry, and whether the rules were revoked. The amounts themselves are stored by the Floatless API. The registry accepts new rules only when:

  • the transaction comes from your wallet and carries your wallet's signature
  • the expiry is in the future
  • the version is exactly one more than your last one

During every payment check, the API rebuilds the fingerprint from the rules it stored for you and asks the registry whether that's your active version. If your stored rules were changed without a new signature from your wallet, the fingerprints wouldn't match and your payments would be declined.

If you sign in with a passkey, only your passkey can sign and register a new version, so nobody else, Floatless included, can register rules for your wallet without your passkey. If you sign in with email, the Floatless API signs for your wallet through Privy, so this protection depends on the API. Keys and security explains the difference.

The signature names the network and the registry, so rules signed for one network can't be registered on the other. Set your rules on each network you use.

Versions and expiry

  • Your first registration on a network is version 1, and each new one adds 1. The number never goes down.
  • The screen shows your current limits under Your rules, with "Active until" and the date. The version number shows on the "Signed your spending rules" entry in Activity.
  • To change your rules, register a new version with Change rules. Payments use it once it's registered. The app has no button to switch rules off.
  • After the "Active until" date, payments are declined until you register new rules. The screen then says "Your rules expired on" that date and "Set them again to keep paying.", with the form below it.

When a payment breaks a rule

When you review a payment, the app asks the Floatless API for a payment check. If the payment breaks a rule, Payment check reads "Didn't pass, see below" and the reason appears under the review rows in plain words, usually with a Set spending rules or Change spending rules link. The send button stays off. Nothing is signed or sent, so you don't pay a network fee. Change the payment or your rules and try again.

The check runs again right before your wallet signs. If you sent money from another device in the meantime, that payment counts toward your daily limit.

The API calls your spending rules a "Funding Mandate", the name the code uses, and the app turns its messages into plain sentences. Send money lists everything the screen can say.

API message What the screen says What it means
"An active Funding Mandate is required." Set your spending rules first. You haven't set rules on this network.
"This asset is not permitted by the active mandate." Your spending rules don’t include USDC. Pick another dollar or change your rules. The currency isn't one of your Currencies you can send.
"Amount exceeds the per-transaction mandate limit." This is more than your limit for one payment. Send less or change your rules. The payment is more than Each payment up to.
"Amount exceeds the daily mandate limit." This would go over your daily limit. Send less or change your rules. Today's payments plus this one would go over Each day up to.
"Send would breach a protected liquidity or savings-goal floor." This would take you below the balance you chose to keep or a goal’s protected amount. The balance left in this currency would drop below Always keep at least or your goals' protected amounts.
"The active mandate has expired." Your spending rules have expired. Set them again to keep paying. The "Active until" date has passed.
"The registered mandate version is not current." Set your spending rules first. Your newest signed rules aren't registered on Monad, usually because a registration didn't finish. It also appears when you haven't set rules.
"The registered mandate is revoked, expired, or does not match this policy." Set your spending rules first. The registry doesn't show the rules Floatless stored for you as active.

What rules can and can't stop

  • They stop payments you make with Send in the Floatless app, on mainnet and on testnet.
  • They don't stop a transfer your wallet signs anywhere else. The registry records your rules, and no token reads it.
  • If you sign in with email, the Floatless signing service doesn't check your spending rules when it signs. The check is the payment check the app runs before it asks for a signature.
  • They don't apply to moving money into Floatless Savings or to the registration transaction itself.
  • Each day up to only counts payments Floatless recorded. A transfer made outside Floatless doesn't count toward it.
  • They never limit money you receive.
  • The payment check runs on the Floatless API, so this protection depends on the API doing its job.