Add transaction accelerator (prioritisetransaction UI + API)

Full-stack feature for boosting transactions via bitcoind's
prioritisetransaction RPC:

Backend:
- New accelerator package with Accelerate, Cancel, MaxFeerate, List,
  and background Cleanup goroutine (removes confirmed/dropped txs)
- RPC wrappers: GetMempoolEntry, PrioritiseTransaction,
  GetRawMempoolVerbose, IsRPCError helpers
- SQLite boosted_txs table for persistence across restarts
- Revenue impact measured via getblocktemplate before/after comparison
- Hard cap at 2000 sat/vB; MaxFeerate uses fees.base (not modified)
  to ignore our own prior priority adjustments

Frontend:
- Rocket icon in header with 10s jiggle animation
- AcceleratorPage with flame-gradient border, txid input, feerate
  input, "Prioritize above all" button with spinner, boost list with
  cancel buttons, and dismissible error/success messages
- Hash-based routing (#/accelerator)
- SharesBar font size bump
This commit is contained in:
satoshi
2026-05-11 03:54:35 +03:00
parent 72890d900b
commit dc7da6ab19
12 changed files with 1247 additions and 25 deletions
+16 -16
View File
@@ -77,7 +77,7 @@
border: 1px solid var(--border);
border-radius: 10px;
background: var(--bg-card);
padding: 0.85rem 1.25rem;
padding: 1.1rem 1.5rem;
}
.content {
position: relative;
@@ -85,29 +85,29 @@
display: flex;
align-items: center;
justify-content: center;
gap: 1.5rem;
gap: 2rem;
}
.title {
margin: 0;
font-size: 0.9rem;
font-weight: 600;
font-size: 1.1rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.04em;
letter-spacing: 0.05em;
color: var(--fg);
}
.stats {
display: flex;
align-items: center;
gap: 1.5rem;
gap: 2rem;
flex-wrap: wrap;
}
.group {
display: flex;
align-items: baseline;
gap: 0.4em;
gap: 0.5em;
}
.group-label {
font-size: 0.75rem;
font-size: 0.85rem;
text-transform: uppercase;
letter-spacing: 0.04em;
color: var(--fg-dim);
@@ -115,31 +115,31 @@
}
.accepted {
color: var(--good);
font-weight: 600;
font-size: 1.1rem;
font-weight: 700;
font-size: 1.4rem;
font-variant-numeric: tabular-nums;
}
.rejected {
color: var(--bad);
font-weight: 600;
font-size: 1.1rem;
font-weight: 700;
font-size: 1.4rem;
font-variant-numeric: tabular-nums;
}
.sep {
color: var(--fg-dim);
font-size: 0.9rem;
font-size: 1.1rem;
}
.pct {
font-size: 1.1rem;
font-size: 1.05rem;
color: var(--fg-dim);
margin-left: 0.3em;
margin-left: 0.4em;
}
.pct.warn {
color: var(--bad);
}
.divider {
width: 1px;
height: 1.6rem;
height: 2rem;
background: var(--border);
}