Is Decred censorship-resistant?

Introduction
I came across this post on X, which has generated some debate about Decred.
So what is it saying? Erick is basically arguing that if some entity has a majority of the stake (say 50%), and starts censoring a transaction, miners will self-censor when they see it in the mempool if they notice the transaction is being censored.
0) Setup and symbols
Erick’s assumption is:
- $\alpha$: stake share controlled by the censor.
- $p(\alpha)=\Pr[\text{censor controls } \ge 3/5 \text{ votes in a block}]$. (For Decred, 5 tickets vote per block; binomial $\approx$ hypergeometric with a large pool.)
- $R_m$: miner block subsidy; $F_{\text{other}}$: other fees; $R_{\text{base}}=R_m+F_{\text{other}}$.
- $R_v$: reward per PoS vote; $k$: number of votes the censor withholds to veto (typically $k\approx 3$).
- $m$: miner margin on accepted blocks (profit/revenue).
- $\Delta f$: fee on the censored transaction.
Static EV rule for a miner (include vs. self-censor):
Erick assumes the probability that the censor controls at least 3 out of 5 votes in the next block is 50%, so miners will self-censor to avoid a veto.
Is this correct? Statistically yes, but only because the assumption is wrong.
Why is this assumption wrong?
Erick’s claim: the censor doesn’t need to veto if miners self-censor; the threat alone makes it “costless”.
But that requires universal self-censorship forever.
Let $q$ be the per-block probability that at least one miner includes the transaction (could be tiny).
Then the probability of never facing a veto across $N$ blocks is:
- $q=0.5\%$: $(0.995)^{288} \approx 0.236$ $\Rightarrow$ $76\%$ chance there’s at least one inclusion.
- $q=1\%$: $(0.99)^{288} \approx 0.056$ $\Rightarrow$ $94\%$ chance of $\ge 1$ inclusion. The moment an inclusion happens, the censor must veto (pay cost) or the tx lands.
Hence “no-cost” is a knife-edge equilibrium requiring (q=0) forever. Perfect, perpetual miner coordination. In a competitive network with heterogeneous margins, beliefs, and fees, (q>0) is inevitable.
In other words, if at least one miner with higher margins, different beliefs, a bigger fee bump, or just a willingness to test makes q > 0
, then Erick’s EV assumption breaks.
Once a veto is needed, the censor’s expected cost is high
If miners keep attempting inclusion, the number of vetoes before the censor loses control is geometric with mean $\frac{p}{1-p}$. Each veto forfeits about $k R_v$ in vote rewards. So:
Examples with $k=3$, $R_v\approx 1.1$ DCR:
- $\alpha=0.50 \Rightarrow p=0.50$ → cost $\approx 3.3$ DCR.
- $\alpha\approx 0.70 \Rightarrow p\approx 0.837$ → cost $\approx 16.9$ DCR.
- $\alpha\approx 0.80 \Rightarrow p\approx 0.941$ → cost $\approx 52.5$ DCR.
By contrast, a miner’s orphan loss is the small PoW subsidy (plus opex). The cost asymmetry is just too big to ignore.
What if a miner stubbornly re-includes the transaction every block?
Even if miners stubbornly re-include the target transaction every block, the censor must string together L consecutive vetoes to keep it out for L blocks. The chance of ever seeing such a streak within a day (≈288 blocks) collapses fast unless 𝛼 is huge.
Here is a code snippet you can run in the browser to test this scenario.
// --- Combinatorics helpers (safe for n up to ~1e6 when k is tiny like 0..5) ---
function choose(n, k) {
if (k < 0 || k > n) return 0;
k = Math.min(k, n - k);
let res = 1;
for (let i = 1; i <= k; i++) res *= (n - k + i) / i;
return res;
}
// --- P(≥3 of 5) given stake share alpha --------------------------------------
// Binomial approx (good when ticket pool is large)
function pGe3of5Binomial(alpha) {
const n = 5, a = alpha, b = 1 - alpha;
return 10 * a**3 * b**2 + 5 * a**4 * b + a**5; // C(5,3)a^3b^2 + C(5,4)a^4b + C(5,5)a^5
}
// Exact hypergeometric for a finite ticket pool (default T=40960)
function pGe3of5Hypergeom(alpha, T = 40960) {
const n = 5;
const K = Math.round(alpha * T);
const denom = choose(T, n);
let p = 0;
for (let k = 3; k <= 5; k++) {
p += choose(K, k) * choose(T - K, n - k) / denom;
}
return p;
}
// --- Probability of at least one run of length ≥ L in N Bernoulli trials -----
// Using a run-length DP with success prob P
function probRunAtLeastL(N, P, L) {
if (L <= 1) return 1 - (1 - P) ** N; // trivial
let dp = Array(L).fill(0);
dp[0] = 1; // no successes yet
for (let t = 0; t < N; t++) {
const next = Array(L).fill(0);
const sumDP = dp.reduce((a, x) => a + x, 0);
// failure: reset streak
next[0] += sumDP * (1 - P);
// success: increment streak (hitting L becomes absorbing "success", not stored in dp)
for (let r = 0; r < L - 1; r++) next[r + 1] += dp[r] * P;
dp = next;
}
// probability we never hit a streak ≥ L is remaining mass in dp
const never = dp.reduce((a, x) => a + x, 0);
return 1 - never;
}
// --- High-level convenience: give me L and alpha (and optionally N, T, method) -
function probStreakGeLFromAlpha({ L, alpha, N = 288, T = 40960, method = "hypergeom" }) {
const P =
method === "binomial" ? pGe3of5Binomial(alpha) : pGe3of5Hypergeom(alpha, T);
return { P_block: P, P_streak: probRunAtLeastL(N, P, L) };
}
// --------------------- Example usage ------------------------------------------
(function demo() {
const cases = [
{ L: 6, alpha: 0.50 }, // 90.36%
{ L: 8, alpha: 0.50 }, // 42.88%
{ L: 10, alpha: 0.50 }, // 12.84%
{ L: 15, alpha: 0.50 }, // 0.41%
{ L: 20, alpha: 0.50 }, // 0.01%
{ L: 10, alpha: 0.60 }, // 87.97%
{ L: 20, alpha: 0.60 }, // 75.51%
{ L: 30, alpha: 0.60 }, // 0.088%
{ L: 40, alpha: 0.60 }, // 0.002%
{ L: 20, alpha: 0.70 }, // 75.51%
{ L: 30, alpha: 0.70 }, // 19.04%
{ L: 40, alpha: 0.70 }, // 3.31%
{ L: 50, alpha: 0.70 }, // 0.54%
];
for (const c of cases) {
const { P_block, P_streak } = probStreakGeLFromAlpha(c);
console.log(
`alpha=${c.alpha.toFixed(2)}, L=${c.L}: P_block(>=3/5)=${(100*P_block).toFixed(2)}% | ` +
`P(streak >= ${c.L})=${(100*P_streak).toFixed(3)}%`
);
}
})();
Therefore, long day-scale suppression streaks are statistically brittle unless α is extreme — and even then they’re costly.
Conclusion
Erick’s argument presumes a stable, cost-free deterrence equilibrium. Bernoulli economics shows that equilibrium requires perfect, perpetual miner coordination (q=0). The moment any miner defects even occasionally, the censor must pay real, repeated veto costs, while the probability of sustaining long veto streaks collapses exponentially with length. In Decred’s hybrid, that makes durable, cheap censorship statistically fragile and economically expensive.