Repository navigation
Releases: OoJae/heads-down
Release list
Heads Down 0.1.2 (Clock In hackathon build)
The Android app as submitted to Clock In, the Solana Mobile hackathon: a debug-signed APK that talks to the heads_down program on Solana mainnet.
Install
- Android 12 or later, and a Solana wallet that speaks Mobile Wallet Adapter. It has been run with Jupiter Mobile only.
- Download
heads-down-0.1.2-clock-in.apkbelow, open it and allow the install. Over an earlier build, install on top: uninstalling destroys the rig's key. - sha256:
f687a375cf975d5f0732bda2a39350152364ef3c25d486985f7dc354cf94c9b3 - No wallet and no SOL are needed to look around: after setup, "Open the morning reveal" and "See a sample night (not your data)" show the page a shift ends on.
What this build does with real SOL
Read this before you clock in.
- A shift can place at most 0.005 SOL: five digs of 0.001 SOL, each on four squares. A week at most 0.07 SOL. Clock-in moves the shift's budget into your own ORE Automation account; "Take it back" returns what is not placed.
- This is a demo build with a raised price ceiling. It digs while ORE's cost figure is under 1.0 SOL per ORE, under a wallet-signed ceiling of 1.2. The app's defaults are 0.53 under 0.67, and at this week's figure (0.69 to 0.93) a default build would not dig at all. The home screen states the figure and the ceiling before you clock in.
- A first clock-in also pays one-time account rent, about 0.009 SOL on mainnet today. Part of the Rig's rent comes back when the rig is closed; for the ORE Miner's rent it is not known. The amounts of the founder's first clock-in are in docs/MAINNET.md ("What it cost").
- Every sealed shift keeps a log on-chain, and your wallet pays 0.0013 SOL of rent for it. "Take it back" returns that rent from 30 days after the shift.
- This is not income. Over the rig's first 20 digs the price came to about 1.13 SOL per ORE, on a small sample.
- One key, the founder's, can upgrade the program. Nobody outside the project has audited it.
New since 0.1.0
- After the alarm, a shift that is over and not sealed is shown as itself, with Clock out. A shift that ran its whole window reads "Shift complete", not "Shift ended".
- The app's own morning page never opens inside the shift's window. In 0.1.0 it could, with no alarm set, and that ended the shift.
- The sealed haul shows the rounds this phone signed beside what the chain recorded.
- Home says whether the rig would dig at ORE's cost figure, and "All nights" lists every sealed shift with the streak and its nights off.
- Clock-out can buy ORE with a small amount of SOL through Jupiter in the same approval, and "Take it back" returns the rent of shift logs that are 30 days old.
- Setup on Xiaomi phones names the two permissions the morning page is likely to need.
Before a shift
- Set an alarm first, at least 35 minutes ahead. The shift ends two minutes before it. On Xiaomi's HyperOS set it at least 50 minutes ahead: its Clock registers reminders as alarms, and there the shift ends 17 minutes before the alarm rings. Check the home screen's line "runs until HH:MM" before you clock in. With no alarm the shift's window is eight hours.
- Confirm in the wallet within 90 seconds of its sheet appearing. After that the request has ended and Confirm does nothing; go back and tap again.
- Keep the charger in: unplugging ends a Night Shift, and so does a power cut.
- A call or an alert that lights the screen for more than ten seconds ends the shift: Do Not Disturb, or airplane mode with Wi-Fi on.
What has run, and where
- This exact file, on a Redmi 14C (Android 16, HyperOS 3), on mainnet, 12 October 2026, installed over 0.1.0 and signed in Jupiter Mobile. It sealed the night's shift; ran a short shift that was lifted on purpose; and then ran the first shift to complete: 41 minutes face-down with a 10 SKR Focus Bond, 37 dark rounds on-chain, sealed as completed with one approval, the same 10 SKR back, the streak from 0 to 1. A second approval bought ORE through Jupiter for 0.001 SOL.
- This exact file, on an Android 14 emulator: opened against mainnet with no wallet. The home screen's cost line matched the figure the crank gave at that moment.
- This code, on that emulator against a local fork of mainnet, signed in Solana Mobile's test wallet: clock-in, a dig, a pickup, clock-out, taking the SOL back, closing the rig and clocking in again; and a shift with a Focus Bond (a stand-in SKR mint) that ran to the end of its window, sealed as completed and returned the bond (
scripts/devstack/emulator-smoke.sh --wallet, with and without--bond). - Earlier builds, on the same phone, on mainnet, 10 to 12 October 2026: eight shifts and 25 digs. Among them a shift of three hours through the night of 12 October, about 170 heartbeats signed by the phone, ended by a power cut; clock-outs; and the SOL back in the wallet to the lamport. Every transaction is in docs/MAINNET.md.
What did not work on the phone
The morning page did not open by itself. HyperOS stopped the app six seconds after the window's end, which cancels its alarm; the page was opened by hand from the home screen, where one line wrongly said the shift had ended early. It had completed, and it sealed as completed.
Not run
A Seeker. Any wallet other than Jupiter Mobile. An install on a phone that never had the app. A whole night to its alarm. A Focus Bond that is lost. The Stack and Gift screens do not exist yet, and no screen sends the Seeker Genesis Token check.
Heads Down 0.1.0 (Clock In hackathon build)
The Android app as it stands for Clock In, the Solana Mobile hackathon: a debug-signed APK that talks to the heads_down program on Solana mainnet.
Install
- Android 12 or later, and a Solana wallet that speaks Mobile Wallet Adapter. It has been run with Jupiter Mobile only.
- Download
heads-down-0.1.0-clock-in.apkbelow, open it and allow the install. - sha256:
5bfc9bee331ac1ab3a2cb3440a2f2448bc4562adb4e9508848691417fee5a17e
What this build does with real SOL
Read this before you clock in.
- A shift can place at most 0.005 SOL: five digs of 0.001 SOL, each on four squares. A week at most 0.035 SOL. Clock-in moves the shift's budget into your own ORE Automation account; "Take it back" returns what is not placed.
- This is a demo build with a raised price ceiling. It digs while ORE's cost is under 1.0 SOL per ORE, under a wallet-signed ceiling of 1.2. The app's defaults are 0.53 under 0.67, and at this week's cost (0.69 to 0.93) a default build would not dig at all.
- Every sealed shift keeps a log on-chain, and your wallet pays 0.0013 SOL of rent for it. The program gives that rent back from 30 days after the shift ended; no tool sends that instruction yet.
- This is not income. The 20 rounds dug so far placed 0.02 SOL; the 19 that are settled sent 0.017 SOL back and mined 0.0019 ORE, which on that small sample is about 1.13 SOL per ORE.
- One key, the founder's, can upgrade the program. Nobody outside the project has audited it.
What has run, and where
- On a Redmi 14C (Android 16, HyperOS 3), on mainnet, 10 and 11 October 2026: setup, a rig key in the phone's TEE, clock-in approved in Jupiter, 20 digs in the rounds the phone lay face-down (and the rig's first 0.0019 ORE), pickups that ended the shift, a clock-out, and the SOL back in the wallet to the lamport (with the first build on the 10th, and with this exact file on the 11th). Every transaction is in docs/MAINNET.md.
- On an Android 14 emulator against a local fork of mainnet: this code, end to end, signed in Solana Mobile's test wallet: clock-in, a dig, a pickup, clock-out, taking the SOL back, closing the rig and clocking in again (
scripts/devstack/emulator-smoke.sh --wallet). - Not run: a whole night, the morning reveal at the alarm, a Seeker, any wallet other than Jupiter Mobile, and an install on a phone that never had the app (this file was installed over an earlier build).
Good to know
- Keep the charger in during a Night Shift: unplugging ends it.
- After a pickup the shift is over but not yet sealed. Tap "Clock out" under "Shift ended" to seal it; clocking in again seals it too.
- If your wallet has not been used with the app for a day, the first tap may answer "Your wallet asks to connect again. Tap once more."
Source
Built from commit 395cc41 of this repository:
cd android && ./gradlew :app:assembleDebug -Pheadsdown.cluster=mainnet \
-Pheadsdown.rpcUrl=https://api.mainnet-beta.solana.com \
-Pheadsdown.crankUrl=wss://crank-production-21c2.up.railway.app/ws \
-Pheadsdown.registrarUrl=https://registrar-production-71d0.up.railway.app \
-Pheadsdown.indexerUrl=https://indexer-production-88dc.up.railway.app \
-Pheadsdown.identityUri=https://oojae.github.io/heads-down/ \
-Pheadsdown.policy.planMaxEvCost=1000000000 -Pheadsdown.policy.capMaxCost=1200000000 \
-Pheadsdown.policy.shiftBudgetLamports=5000000 -Pheadsdown.policy.weeklyBudgetLamports=35000000 \
-Pheadsdown.devEntries=false
It is signed with the founder's debug key, which is the one the live registrar accepts for a hardware-attested rig key. A build signed with another key is refused by the registrar, and its rig registers as a guest with no attestation level.