Winnow

Early access · open source

A Bitcoin wallet for your iPhone.

Send and receive bitcoin, keep track of payments, and save with other people.

Try it on TestFlight

Your phone connects directly to Bitcoin.

Two ways to protect your bitcoin

Protect your key.

Stolen hardware-wallet key

Stolen hardware-wallet keyAn attacker gets the hardware wallet’s key and tries to spend. The iPhone has not approved, so the payment stays blocked and nothing is sent to Bitcoin. iPhoneHardware walletKey stolen! Waiting Blocked
On BitcoinNo payment sent

Both keys are needed.The hardware-wallet key is stolen.The phone hasn’t approved.Blocked. Nothing sent.

A payment you approve

A payment you approveFor a separate, normal payment, you check the address, amount, and fee on your iPhone. The iPhone and hardware wallet both sign. Bitcoin sees one ordinary signature, without revealing the two devices. iPhoneHardware wallet Waiting Approved
On BitcoinOne ordinary signature

A new payment. Both keys needed.You check and approve on your phone.The hardware wallet signs too.Two devices. One signature.

Share control.

One person is away

One person is awayYou and Alex approve while a third person is away. Any two of the three keys can approve. Spending reveals three public keys, the two-approval rule, and two signatures, but no names. YouAlexAway Waiting Approved
On Bitcoin
Key 1Key 2Key 3
2 required · 2 signatures

Three people. Two approvals needed.You approve.Alex approves. One person stays away.Two approve. The payment can go.

Returning loan collateral

Returning loan collateralA possible future lending arrangement. After repayment, you and the lender approve returning your bitcoin. The independent key agent does not need to participate. The lender and key agent could also move the bitcoin together. YouLenderKey agent Waiting Returned
On Bitcoin
Key 1Key 2Key 3
2 required · 2 signatures

The loan has been repaid.You approve the return.The lender approves too.Your bitcoin is returned.

Possible future use. A lender could provide stablecoins against this bitcoin. We have no lending partner yet. The lender and key agent could also move the funds together. About lending partners

Protect your key in a shared wallet

iPhone + hardware walletYour approval
Partner’s keyPartner’s approval
Third person’s keyTheir approval

Any two columns can approve. Your column needs both your devices. The other two people can also approve together without you.

On Bitcoin, your two devices appear as one key and one signature within the shared wallet’s three-key rule.

How the two signing methods fit together

Set up your wallet

Create a wallet and write down your recovery words. If you stop partway through, you can finish the backup when you return.

Winnow: Set up your wallet.

Save a backup file too. Winnow needs it to find your past payments when you restore the wallet.

How we test: Set up your wallet

  1. Create a wallet while it connects to the network.
  2. Leave the backup unfinished, reopen the app, and finish it. Check that viewing the recovery words requires unlocking.

Test code: test01OnboardingCreateWallet, test09BackupResumeAndReveal . View test results.

The tests use the app on a private Bitcoin test network. Screenshots show test funds. Open a test run to see which version was checked, what passed, and what failed.

Read the logs and screenshots · What still needs testing

Receive bitcoin

Share your address or QR code. Keep Receive open to watch for a payment, then check its confirmation in your wallet.

Winnow: Receive bitcoin.

How we test: Receive bitcoin

  1. Confirm a payment on the test network and check that it appears in the wallet.
  2. Watch a new payment arrive on Receive before it is confirmed, then check that its status updates after confirmation.

Test code: test02ReceiveAndFunding, test14IncomingPaymentBeforeConfirmation . View test results.

The tests use the app on a private Bitcoin test network. Screenshots show test funds. Open a test run to see which version was checked, what passed, and what failed.

Read the logs and screenshots · What still needs testing

Send bitcoin

Enter an address and amount. Check the address, fee, and total before you send, then follow the payment’s status.

Winnow: Send bitcoin.

How we test: Send bitcoin

  1. Enter an address and amount on the simple send screen.
  2. Edit a reviewed payment, then verify the new amount, full address, fee, and total before sending.
  3. Check that Bitcoin Core received the payment, open its details, and wait for the app to show it as confirmed.

Test code: test03Send . View test results.

The tests use the app on a private Bitcoin test network. Screenshots show test funds. Open a test run to see which version was checked, what passed, and what failed.

Read the logs and screenshots · What still needs testing

Pay someone again

Name someone you’ve paid, or save their payment card. Next time, choose them in Send.

Winnow: Pay someone again.

How we test: Pay someone again

  1. Send to a new address, open that payment in Wallet, save the recipient, and rename them.
  2. Reopen the app and check the name on the payment. Remove and re-add the saved recipient without losing the label.
  3. Choose a saved address in Send and check the address-reuse notice. Pay a saved card, then check that the next payment uses a fresh address.

Test code: test10SaveRecipientFromPayment . View test results.

The tests use the app on a private Bitcoin test network. Screenshots show test funds. Open a test run to see which version was checked, what passed, and what failed.

Read the logs and screenshots · What still needs testing

Save with other people

Choose who shares the wallet and how many approvals a payment needs. With two approvals out of three, one person can be away and the other two can still pay.

Winnow: Save with other people.

For shared control, each person must keep their own key. If you choose just one required approval, any one of them can spend.

Read the guide

How we test: Save with other people

  1. Create shared savings from Wallet and choose who can approve payments.
  2. Add funds, review a payment request, and complete two approvals without the third person.

Test code: test12SharedSavingsCreateAndAsk, test07ApproveRequest . View test results.

The tests use the app on a private Bitcoin test network. Screenshots show test funds. Open a test run to see which version was checked, what passed, and what failed.

Read the logs and screenshots · What still needs testing

Back up and restore

Save a backup file with your payment history and shared accounts. Keep your recovery words too. You need both to restore the wallet and sign again.

Keep both your recovery words and your backup file. The words alone won’t restore your payment history.

How we test: Back up and restore

  1. Export a backup with private keys and one without them.
  2. Restore a wallet that has funds and check that the backup is valid and the funds are found.

Test code: test06ImportBundleVerification, test08ExportBundle . View test results.

The tests use the app on a private Bitcoin test network. Screenshots show test funds. Open a test run to see which version was checked, what passed, and what failed.

Read the logs and screenshots · What still needs testing

More options when you need them

Start with the basics. Turn on Advanced mode in Settings to adjust fees and manage network connections.

Winnow: More options when you need them.

How we test: More options when you need them

  1. Check which tabs and controls appear in normal mode.
  2. Turn Advanced mode on and off, checking that fee and network settings appear and disappear.

Test code: test11BeginnerShellHidesAdvancedControls . View test results.

The tests use the app on a private Bitcoin test network. Screenshots show test funds. Open a test run to see which version was checked, what passed, and what failed.

Read the logs and screenshots · What still needs testing

How we test Winnow

Advanced features · What’s next