mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2026-08-12 09:13:23 +00:00
Implements user-facing PoW publishing (#3317) on top of the existing quartz miner: - quartz: PoWMiner.run gains a cooperative isActive cancellation hook (checked every ~VALID_BYTES^2 hashes); PoWNostrSigner decorator mines kind-scoped templates pre-signature so it composes with every signer; GiftWrapEvent.create/NIP17Factory can mine the outer ephemeral-key wrap (never the seal/rumor); NostrSignerWithClientTag exposes prepareTags so mining runs over the final tag set. - commons: PoWPublishQueue (FIFO, capped worker pool on Dispatchers.Default, per-job cancel, in-memory only — unmined posts are lost on process death, logged) and PoWPolicy (kind-group categories with a hardcoded NEVER list: auth, zap requests, NWC and bunker RPC, HTTP/Blossom auth, drafts, metadata and lists, OTS). - amethyst: per-account synced settings (difficulty Off/16/20/24/28 or custom, per-category checklist) in Compose Settings; Post enqueues the template and returns immediately; reactions, reposts, reports, private notes, DMs and long-form route through the same shouldMine gate at their existing choke points; per-post PoW override chip in the composer options row; "Mining proof of work… (N in queue)" phase with per-job cancel in the broadcast banner. Scheduled posts and anonymous posts mine against the correct key (scheduled posts skip mining in v1); the client tag is applied to the template before mining so signing never invalidates the nonce. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ADb3dez9jPk6QqyQ1rTx4V