Safety and privacy
The short version: the website has no analytics, the plugins have no telemetry, and the only public data is what the protocol needs to work.
This website
Static files served by Caddy. No account system, no analytics, no advertising
pixel. Fonts, scripts and images are served from the same host. The homepage
makes one outside request: an eth_call against a public Base Sepolia RPC to
read two contract values in your browser. That provider sees your IP address;
we do not proxy or log the request. With JavaScript disabled the numbers render
as dashes and nothing is sent.
The server keeps standard access logs for operational security, which include IP addresses. They rotate at 20 MiB with five files kept and are not used for profiling.
One functional cookie, NEXT_LOCALE, records the language you pick. Theme
choice lives in localStorage under genkaku_theme and is never sent to a
server. Neither is used for tracking, so there is no consent banner.
The plugins
Neither plugin reports usage. They talk to:
- a public Base Sepolia RPC, to read the directory and move escrow,
- the seed relay, to discover peers and to carry a session when a direct connection is impossible,
- the worker you chose, to run inference.
Prompts, filenames and model names are not sent to us. There is no telemetry endpoint in either plugin.
Keys
Wallets are generated locally. The private key is stored in plain text,
mode 0600, at ~/.dsh/genkaku/genkaku.keys.json, because DeepSeek Harness
exposes no keyring codec. Anyone who can read that file on your machine can
spend the wallet. Back it up, and do not sync that directory to a shared drive.
The user and worker plugins each keep their own key, so selling and buying do not share an identity.
During a session
Inference runs on the worker you choose. The worker operator can see the prompts and outputs it serves; the marketplace stores neither.
If the session is carried by the seed relay, the relay operator can see connection metadata — peer addresses, timing and volume — but the libp2p stream is encrypted, so it cannot read the prompt or the reply.
A worker's wallet and peer ID are public by design, because that is how the directory works. Locators are optional; by default the worker plugin does not publish your public IP address. Publishing one is explicit and permanent.
What is public and permanent
Registrations, session opens, settlements and claims are public and permanent. Nothing written to a chain can be edited or deleted by us, including after you stop using the software.
Deleting ~/.dsh/genkaku/ removes the local keys and state. It does not and
cannot remove on-chain history. Access logs expire through rotation.
Content
There is no automatic content filter. The protocol has no hook that inspects a prompt before a worker sees it, and the worker's policy hash is a commitment, not an enforced rule.
What does exist:
- the worker operator sees each request and can refuse or stop serving,
- anyone can refuse to run a worker, or to connect to one,
- the software is open source, so these limits are inspectable rather than promised.
Do not use the network for illegal content. Running a worker does not oblige you to serve requests you do not want to serve.
Threat model in one table
| Risk | Who can do it | Mitigation |
|---|---|---|
| Read your prompt | The worker you picked | Choose a worker you trust; nothing else can hide it from them |
| Read your prompt | Nobody else on a direct link | libp2p encryption |
| See who talks to whom | The relay operator, for relayed sessions | Direct connection; metadata is not content |
| Spend your wallet | Anyone who reads genkaku.keys.json | File permissions, disk encryption, backups |
| Lose funds to a bad receipt | A malicious worker | JobEscrow verifies the signature and caps spend at the quote |
| Recover a lost key | Nobody | Back it up; there is no support path |
Reporting
Security issues: security@genkaku.app. Legal notices: legal@genkaku.app.