bowlineLaunch
For keepers

Get paid to settle overdue loans

When a loan passes its deadline, someone has to close it out, and that someone earns a reward for doing it. No permission, no sign-up, no whitelist. Any wallet can be a keeper. This page is everything you need to run one.

This is not price liquidation
Bowline never force-sells collateral because a price moved. A dip can never touch a borrower's position. Keepers only act on loans that have blown past their repayment deadline plus a 48-hour grace window. Settlement is about the calendar, never the price.
The idea

A bounty, not a chore

Every Bowline loan is overcollateralized and has a fixed repayment deadline. If a borrower misses that deadline plus a 48-hour grace window, the loan becomes settleable by anyone. The protocol pays the settler. Two paths, depending on the collateral:

Memecoin loans → settle for a bounty

Call liquidate(loanId, minUsdgOut). The protocol swaps the collateral on Uniswap v3 behind an oracle floor and hands you a 5% bounty of the collateral. You need only gas — no capital. This covers every listed memecoin.

Stock loans → settle by buyout

Call buyout(loanId). You pay USDG equal to the Chainlink oracle value minus a 3% discount and receive all the collateral outright. Resell the stock tokens via 0x RFQ, 1inch, or hold them. Your 3% is the profit. This needs USDG on hand.

Either way, the USDG you provide (or the swap yields) repays the lending pool first, then fees and penalty, and any surplus returns to the borrower. Lenders are made whole; you keep the reward.

The loop

How to run one

  1. 1. Scan. Read loanCount(), then getLoan(id) for each. A loan is settleable when status == Active and block.timestamp > dueTimestamp + 48h.
  2. 2. Price it. For stock loans, call buyoutPrice(loanId) — the exact USDG you pay. For memecoin loans, the bounty is 5% of the collateral amount.
  3. 3. Settle. Fire liquidate or buyout. First caller wins, so it pays to be fast and watch the mempool.
  4. 4. Exit. Sell the collateral wherever you like, or hold it. The reward is yours the moment the transaction lands.
Addresses
ContractAddress
LoanManager0x11875Ac731eF49A8AD22287Ad96A386c69BE4b0Eread/write ↗
USDG (approve for buyouts)0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168explorer ↗

Every contract is source-verified on Blockscout — read the exact settlement logic before you trust it with a single call.

Quickstart

One-liner with cast

# how many loans exist
cast call 0x11875Ac731eF49A8AD22287Ad96A386c69BE4b0E "loanCount()(uint256)" --rpc-url $RPC

# inspect a loan (status 1 = Active; check dueTimestamp + 48h)
cast call 0x11875Ac731eF49A8AD22287Ad96A386c69BE4b0E "getLoan(uint256)" <id> --rpc-url $RPC

# memecoin: settle for the 5% bounty (gas only)
cast send 0x11875Ac731eF49A8AD22287Ad96A386c69BE4b0E "liquidate(uint256,uint256)" <id> 0 \
  --rpc-url $RPC --private-key $KEY

# stock: quote then buy the collateral at 3% below oracle
cast call 0x11875Ac731eF49A8AD22287Ad96A386c69BE4b0E "buyoutPrice(uint256)(uint256)" <id> --rpc-url $RPC
cast send 0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168 "approve(address,uint256)" 0x11875Ac731eF49A8AD22287Ad96A386c69BE4b0E <price> --rpc-url $RPC --private-key $KEY
cast send 0x11875Ac731eF49A8AD22287Ad96A386c69BE4b0E "buyout(uint256)" <id> --rpc-url $RPC --private-key $KEY

RPC: https://rpc.mainnet.chain.robinhood.com · Chain ID 4663. Bring your own wallet and, for buyouts, enough USDG to cover the price. That is the whole job.

The honest part

What you are taking on

A buyout is a bet that you can resell the collateral for more than you paid. The 3% discount and the Chainlink oracle floor are your margin, but a token that gaps down before you exit can erode it — price your resale route before you sign. Memecoin settlements carry the same risk on the protocol's side, not yours, since the swap is atomic. No keeper is ever obligated to act; the reward is the only reason to. That is the point — the protocol stays healthy because settling overdue loans is profitable, not because anyone is on call.