Security
We take this very seriously.
Mastrmine pilots ASICs worth thousands of euros each. Here's how we protect your miners, your data, and your access — straight talk.
Architecture in 30 seconds
Mastrmine has three isolated layers:
- The bridge runs on your LAN. It talks to ASICs (port 4028) and collects hashrate, temperature, power. No inbound ports — it only initiates outbound HTTPS connections to the cloud.
- The cloud (Supabase in Frankfurt) receives aggregated snapshots and exposes them via authenticated API + Postgres RLS. The cloud never sees your miners' local IPs.
- The mobile app authenticates via Supabase Auth (JWT) and only accesses data filtered by RLS policies — i.e. only your organization's data.
What we store (and what we don't)
✅ We store
- Email + bcrypt password hash (Supabase Auth)
- Miner snapshots: hashrate, temp, power, pool state
- Configuration: PMAX thresholds, thermal targets, alerts
- Audit log of viewer actions (target temp, pause)
- Payment status (no card details)
❌ We never store
- Plaintext passwords (ever — bcrypt only)
- The BTC wallet your miners send rewards to
- Your pool credentials (user/worker/password)
- Local IPs of your miners (the bridge masks them)
- Card details (Lemon Squeezy handles those in V1.5)
Hosting — GDPR-first
All data is hosted at Supabase in their
eu-central-1 region in Frankfurt.
No transfer outside the EU for storage.
Supabase is SOC 2 Type II compliant, GDPR-ready, and uses AWS Frankfurt as underlying infra. Daily backups stay in the EU.
Transactional emails go through Resend (GDPR-compliant, signed DPA). USDT payments are on-chain on Tron — no intermediary stores your banking info.
Multi-tenant isolation
One operator's organization is never visible to another operator. This guarantee is enforced at the Postgres layer via Row Level Security (RLS) — every query is automatically filtered by the user's JWT. It's not a forgettable application check; it's enforced by the database.
When an operator invites a viewer, the viewer only sees miners of the organization they're a member of — and only the groups/owners the operator granted access to. Viewer actions (target temp change, pause) are tracked in an immutable audit log consultable by the operator.
Bridge — secrets and open core
The bridge is open-core: code is public on GitHub. You can inspect it, build it yourself, or fork it. Official binaries are compiled via GitHub Actions and shipped with verifiable SHA-256 checksums.
On pairing, the bridge negotiates a unique secret
with the cloud (high-entropy bridge_secret). It's
stored in plaintext in
%ProgramData%\Mastrmine\Bridge\bridge.json on Windows
or /etc/mastrmine/bridge.json on Linux — access
restricted to SYSTEM/root.
All bridge ↔ cloud communication uses TLS 1.3. The secret is never transmitted in plaintext after the initial pairing.
Data retention
- Miner snapshots: 7 days (Free), 30 days (Home), 1 year (Pro), unlimited (Studio/Operator/Corporate).
- Viewer audit log: 1 year minimum, deleted on request.
- Inactive accounts: warning at 6 months, deletion at 12 months.
- Account deletion: within 30 days on simple email request (info@mastrmine.app).
Found a vulnerability?
We welcome responsible security reports. Email info@mastrmine.app with "Security disclosure" as subject. We commit to:
- Acknowledge within 24 business hours
- Patch critical issues within 7 days
- Credit you publicly (unless you prefer otherwise)
- Not pursue researchers acting in good faith
Official bug bounty program planned post public launch (Q4 2026).