Compare commits
73 Commits
main
...
blog/what-
| Author | SHA1 | Date | |
|---|---|---|---|
| c29f14ded1 | |||
| c2dc7ef1f5 | |||
| 1721096c8f | |||
| 620cc56cae | |||
| ef513b7b2c | |||
| 6c21a88f00 | |||
| e69536c2d5 | |||
| cf0597ea78 | |||
| 4808066d37 | |||
| ab29afa0eb | |||
| d7e1ca49f1 | |||
| f9fd24e30d | |||
| 0ace181b94 | |||
| 3a0b9bd84e | |||
| 75a4d489c3 | |||
| 39a4bcf6b4 | |||
| f212265569 | |||
| b3f8b3a6e8 | |||
| 47dbeaad3c | |||
| 4d9643cddf | |||
| 7be2c34cb8 | |||
| ae7d45c581 | |||
| 345747b125 | |||
| 3dc156d7de | |||
| aa9be1376e | |||
| cdd1716c12 | |||
| 331b36fb2b | |||
| b7656dc250 | |||
| 0b6abe7a09 | |||
| a10d4957d9 | |||
| 9deb45691e | |||
| 8d2258db3e | |||
| 9be73c8008 | |||
| 62aa69e816 | |||
| b97ca5005b | |||
| abd24c0e88 | |||
| 223555f98f | |||
| b8e33d09c4 | |||
| 998bce1148 | |||
| 4d626608d7 | |||
| cac59258a4 | |||
| 60debcd061 | |||
| 39a79ad38e | |||
| 46ec6428bb | |||
|
0df10e2a6a
|
|||
| 55f21ee9a8 | |||
| a0bea41876 | |||
| 5342998996 | |||
| 89af335dc5 | |||
| b42f1ffd3e | |||
| 78ad182ca6 | |||
| baff204308 | |||
| 0a84c0b33d | |||
| cd209d9761 | |||
| 19f88963bd | |||
| 414f09d864 | |||
| 2d2291f01e | |||
| 636cf306c4 | |||
|
|
0a5ed14e9a | ||
| 1608bbf406 | |||
| 4a23a54df2 | |||
| 736ed9941a | |||
| 56fdba228f | |||
|
8d89d3b272
|
|||
|
d71ffa8927
|
|||
| cede26f504 | |||
| 0d592c7416 | |||
| e2f26246cd | |||
| e173dc0266 | |||
| fc43b86171 | |||
| 1fe32d1452 | |||
| 61cb943a90 | |||
| 1c295bcab6 |
BIN
blog/img/inheritance-cover-v2.webp
Normal file
|
After Width: | Height: | Size: 529 KiB |
BIN
blog/img/run-a-will-executor-cover.webp
Normal file
|
After Width: | Height: | Size: 54 KiB |
BIN
blog/img/seed-cover.jpg
Normal file
|
After Width: | Height: | Size: 106 KiB |
BIN
blog/img/what-a-will-executor-can-see-cover.webp
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
blog/img/what-happens-to-your-bitcoin-cover.webp
Normal file
|
After Width: | Height: | Size: 76 KiB |
BIN
blog/img/why-electrum-and-timelocks.webp
Normal file
|
After Width: | Height: | Size: 15 KiB |
308
blog/inheritance-when-trust-fails.html
Normal file
305
blog/it-all-starts-with-the-seed.html
Normal file
@@ -0,0 +1,305 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" class="nojs">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>It all starts with the seed — Bitcoin After Life</title>
|
||||
<meta name="description" content="The Coldcard entropy incident is a reminder that everything in Bitcoin grows from the seed. Why Bitcoin After Life deliberately builds on Electrum instead of reinventing the wallet.">
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:site_name" content="Bitcoin After Life">
|
||||
<meta property="og:title" content="It all starts with the seed — Bitcoin After Life">
|
||||
<meta property="og:description" content="The Coldcard entropy incident is a reminder that everything in Bitcoin grows from the seed. Why Bitcoin After Life deliberately builds on Electrum instead of reinventing the wallet.">
|
||||
<meta property="og:url" content="https://bitcoin-after.life/blog/it-all-starts-with-the-seed.html">
|
||||
<meta property="og:image" content="https://bitcoin-after.life/pitura/og-default.png">
|
||||
<meta property="og:image:width" content="1200">
|
||||
<meta property="og:image:height" content="630">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:site" content="@BitcoinAfterLif">
|
||||
<meta name="twitter:title" content="It all starts with the seed — Bitcoin After Life">
|
||||
<meta name="twitter:description" content="The Coldcard entropy incident is a reminder that everything in Bitcoin grows from the seed. Why Bitcoin After Life deliberately builds on Electrum instead of reinventing the wallet.">
|
||||
<meta name="twitter:image" content="https://bitcoin-after.life/pitura/og-default.png">
|
||||
<meta name="theme-color" content="#2d6cdf">
|
||||
<link rel="canonical" href="https://bitcoin-after.life/blog/it-all-starts-with-the-seed.html">
|
||||
<link rel="icon" type="image/x-icon" href="/pitura/ico/Logo_nero.ico">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="/pitura/ico/favicon-32.png">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/pitura/ico/favicon-16.png">
|
||||
<script>
|
||||
/* Runs before first paint: removes the `nojs` class set on <html>, so the
|
||||
mobile menu button is only shown when it can actually work. */
|
||||
document.documentElement.classList.remove('nojs');
|
||||
</script>
|
||||
<style>
|
||||
:root{
|
||||
--maxw:1120px;
|
||||
--radius:10px;
|
||||
--bg:#eef1f4;
|
||||
--panel:#ffffff;
|
||||
--ink:#1a2027;
|
||||
--muted:#5b6672;
|
||||
--line:#dfe4ea;
|
||||
--line-strong:#cbd2da;
|
||||
--accent:#2d6cdf;
|
||||
--accent-soft:#e6eefc;
|
||||
--display:"Inter","Segoe UI",system-ui,-apple-system,sans-serif;
|
||||
--body:"Inter","Segoe UI",system-ui,-apple-system,sans-serif;
|
||||
--mono:ui-monospace,"SF Mono",Menlo,Consolas,monospace;
|
||||
--shadow:0 1px 2px rgba(20,30,50,.05);
|
||||
--shadow-lg:0 6px 20px rgba(20,30,50,.08);
|
||||
}
|
||||
*{box-sizing:border-box}
|
||||
html{scroll-behavior:smooth}
|
||||
html,body{margin:0}
|
||||
body{background:var(--bg);color:var(--ink);font-family:var(--body);
|
||||
line-height:1.55;-webkit-font-smoothing:antialiased}
|
||||
.wrap{max-width:var(--maxw);margin:0 auto;padding:0 20px}
|
||||
a{color:var(--accent);text-decoration:none}
|
||||
a:hover{text-decoration:underline}
|
||||
|
||||
/* ---------- Top bar (shared with home and manifesto) ---------- */
|
||||
.topbar{position:sticky;top:0;z-index:30;background:rgba(255,255,255,.86);
|
||||
backdrop-filter:saturate(150%) blur(8px);border-bottom:1px solid var(--line)}
|
||||
.topbar .wrap{display:flex;align-items:center;gap:18px;height:60px}
|
||||
.topbar .logo{display:flex;align-items:center;gap:10px;font-family:var(--display);
|
||||
font-weight:600;color:var(--ink)}
|
||||
.topbar .logo img{width:30px;height:30px;display:block}
|
||||
.topbar .logo span{font-size:15px;letter-spacing:-.01em}
|
||||
.topbar nav{margin-left:auto;display:flex;gap:4px;flex-wrap:wrap}
|
||||
.topbar nav a{color:var(--muted);font-size:13px;padding:7px 11px;border-radius:7px}
|
||||
.topbar nav a:hover{color:var(--ink);background:var(--accent-soft);text-decoration:none}
|
||||
.topbar nav a.active{color:var(--accent);font-weight:600;border:1px solid #cfe0fb;
|
||||
background:var(--accent-soft)}
|
||||
.topbar .x{color:var(--ink);font-weight:600}
|
||||
|
||||
.navtoggle{
|
||||
display:none;margin-left:auto;width:44px;height:44px;flex:none;
|
||||
align-items:center;justify-content:center;
|
||||
background:var(--panel);border:1px solid var(--line-strong);border-radius:9px;
|
||||
color:var(--ink);cursor:pointer;padding:0;
|
||||
}
|
||||
.navtoggle:hover{border-color:var(--accent);color:var(--accent)}
|
||||
.navtoggle .bars{display:block;width:18px;height:2px;background:currentColor;position:relative}
|
||||
.navtoggle .bars::before,.navtoggle .bars::after{
|
||||
content:"";position:absolute;left:0;width:18px;height:2px;background:currentColor}
|
||||
.navtoggle .bars::before{top:-6px}
|
||||
.navtoggle .bars::after{top:6px}
|
||||
.navtoggle[aria-expanded="true"] .bars{background:transparent}
|
||||
.navtoggle[aria-expanded="true"] .bars::before{top:0;transform:rotate(45deg)}
|
||||
.navtoggle[aria-expanded="true"] .bars::after{top:0;transform:rotate(-45deg)}
|
||||
|
||||
/* ---------- Footer (shared) ---------- */
|
||||
footer{border-top:1px solid var(--line);margin-top:56px;padding:34px 0 40px;
|
||||
color:var(--muted);font-size:14px;background:var(--panel)}
|
||||
footer .sig{font-family:var(--display);font-weight:600;color:var(--ink);font-size:16px}
|
||||
footer .links{display:flex;gap:16px;flex-wrap:wrap;margin:14px 0}
|
||||
footer .built{font-size:13px;color:var(--muted);margin-top:8px}
|
||||
|
||||
@media (max-width:900px){
|
||||
.navtoggle{display:inline-flex}
|
||||
.topbar nav{
|
||||
position:absolute;top:100%;left:0;right:0;
|
||||
margin-left:0;display:none;flex-direction:column;gap:2px;flex-wrap:nowrap;
|
||||
background:var(--panel);border-bottom:1px solid var(--line);
|
||||
box-shadow:var(--shadow-lg);padding:10px 20px 16px;
|
||||
}
|
||||
.topbar nav.open{display:flex}
|
||||
.topbar nav a{font-size:15.5px;padding:0 12px;min-height:44px;
|
||||
display:flex;align-items:center;border-radius:8px}
|
||||
}
|
||||
@media (prefers-reduced-motion:reduce){*{transition:none!important;scroll-behavior:auto!important}}
|
||||
:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
|
||||
|
||||
/*
|
||||
Without JavaScript the panel cannot be toggled, so the links are shown
|
||||
inline. On narrow screens they wrap under the logo and the bar is allowed
|
||||
to grow, instead of being clipped by the fixed 60px height.
|
||||
*/
|
||||
.nojs .navtoggle{display:none}
|
||||
.nojs .topbar nav{position:static;display:flex;flex-direction:row;flex-wrap:wrap;
|
||||
box-shadow:none;border-bottom:0;padding:0;margin-left:auto;background:transparent}
|
||||
@media (max-width:900px){
|
||||
.nojs .topbar .wrap{height:auto;min-height:56px;flex-wrap:wrap;padding-bottom:8px;gap:10px}
|
||||
.nojs .topbar nav{margin-left:0;width:100%;gap:4px 6px}
|
||||
.nojs .topbar nav a{font-size:14.5px;min-height:40px;padding:0 10px;
|
||||
display:flex;align-items:center;border:1px solid var(--line);border-radius:8px}
|
||||
}
|
||||
|
||||
.post-head{padding:44px 0 30px;border-bottom:1px solid var(--line);
|
||||
background:radial-gradient(820px 280px at 50% -40%,var(--accent-soft),transparent 70%)}
|
||||
.post-head .wrap{max-width:760px}
|
||||
.post-head .eyebrow{font-family:var(--mono);font-size:12px;letter-spacing:.14em;
|
||||
text-transform:uppercase;color:var(--accent);display:block;margin-bottom:14px}
|
||||
.post-head h1{font-family:var(--display);font-weight:600;font-size:40px;
|
||||
letter-spacing:-.02em;line-height:1.12;margin:0 0 14px}
|
||||
.post-meta{display:flex;gap:14px;align-items:center;flex-wrap:wrap;
|
||||
font-size:13px;color:var(--muted)}
|
||||
.post-meta .dot{width:4px;height:4px;border-radius:50%;background:var(--line-strong)}
|
||||
|
||||
.article{max-width:760px;margin:0 auto;padding:34px 20px 8px}
|
||||
.article p{font-size:17px;line-height:1.8;color:#36404b;margin:0 0 20px}
|
||||
.article p strong{color:var(--ink);font-weight:600}
|
||||
.article h2{font-family:var(--display);font-weight:600;font-size:25px;
|
||||
letter-spacing:-.01em;margin:38px 0 14px;padding-bottom:10px;
|
||||
border-bottom:1px solid var(--line-strong)}
|
||||
.article ol{padding-left:22px;margin:0 0 20px}
|
||||
.article li{font-size:17px;line-height:1.8;color:#36404b;margin-bottom:14px}
|
||||
.article li strong{color:var(--ink);font-weight:600}
|
||||
.article figure{margin:30px 0}
|
||||
.article figure img{width:100%;height:auto;display:block;border-radius:var(--radius);
|
||||
border:1px solid var(--line);box-shadow:var(--shadow)}
|
||||
.article hr{border:0;border-top:1px solid var(--line-strong);margin:34px 0 22px}
|
||||
.article .disclaimer{font-size:14px;color:var(--muted);font-style:italic;line-height:1.7}
|
||||
.back{max-width:760px;margin:26px auto 0;padding:0 20px 8px}
|
||||
.back a{font-size:14px;font-weight:600}
|
||||
|
||||
@media (max-width:700px){
|
||||
.post-head{padding:30px 0 24px}
|
||||
.post-head h1{font-size:29px}
|
||||
.article{padding:28px 18px 8px}
|
||||
.article h2{font-size:22px;margin-top:32px}
|
||||
.article figure{margin:24px -18px}
|
||||
.article figure img{border-radius:0;border-left:0;border-right:0}
|
||||
}
|
||||
@media (max-width:400px){
|
||||
.post-head h1{font-size:25px}
|
||||
.wrap{padding:0 15px}
|
||||
.article{padding:24px 16px 8px}
|
||||
.article figure{margin:22px -16px}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="topbar">
|
||||
<div class="wrap">
|
||||
<a class="logo" href="../index.html"><img src="../pitura/logo/Logo_nero.svg" alt="Bitcoin After Life logo"><span translate="no">Bitcoin After Life</span></a>
|
||||
<button class="navtoggle" id="navToggle" type="button"
|
||||
aria-expanded="false" aria-controls="mainNav" aria-label="Open menu">
|
||||
<span class="bars"></span>
|
||||
</button>
|
||||
<nav id="mainNav">
|
||||
<a href="../index.html#features">Features</a>
|
||||
<a href="../index.html#how">How it works</a>
|
||||
<a href="../index.html#plugin">Plugin</a>
|
||||
<a href="../index.html#faq">FAQ</a>
|
||||
<a class="active" href="../blog.html">Blog</a>
|
||||
<a href="../manifesto.html">Manifesto</a>
|
||||
<a class="x" href="https://x.com/BitcoinAfterLif" title="@BitcoinAfterLif on X">@X</a>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<main>
|
||||
<header class="post-head">
|
||||
<div class="wrap">
|
||||
<span class="eyebrow">Blog</span>
|
||||
<h1>It all starts with the seed</h1>
|
||||
<div class="post-meta">
|
||||
<time datetime="2026-08-03">3 August 2026</time>
|
||||
<span class="dot"></span>
|
||||
<span translate="no">Bitcoin After Life</span>
|
||||
<span class="dot"></span>
|
||||
<span>8 min read</span>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<article class="article">
|
||||
<figure>
|
||||
<img src="img/seed-cover.jpg" width="1600" height="900" loading="lazy" alt="Geometric Seed — cover illustration">
|
||||
</figure>
|
||||
|
||||
<h2>Forty minutes</h2>
|
||||
<p>On 30 July 2026, in a window of roughly forty minutes, hundreds of Bitcoin addresses were emptied in a coordinated sweep. The first count spoke of about 594 BTC taken from some 500 addresses. Within a day, independent researchers raised the estimate to more than 1,082 BTC drained from nearly 1,200 wallets. Many of them had been dormant for years — the wallets of long-term holders who had done, by every common standard, everything right.</p>
|
||||
<p>There was no phishing. No malware. No stolen device, no coerced signature, no compromised computer. The owners of those coins were attacked through something that happened years earlier, in the few seconds when their wallet was born: <strong>the generation of the seed</strong>.</p>
|
||||
<p>Coinkite, the maker of the Coldcard hardware wallet, published a security advisory the same day. During a firmware library migration in early 2021, two random-number functions with matching interfaces had been confused: instead of drawing from the device's hardware true random number generator, seed creation could fall back to a weak software routine fed by predictable values such as the device's serial number and internal clock. Seeds generated on the Mk3 from firmware 4.0.1 (March 2021) onward were the most exposed; seeds generated on Mk4, Mk5 and Q devices before the emergency fixes carried roughly 72 bits of entropy instead of the expected 128.</p>
|
||||
<p>To be clear about what that means: a properly generated 12-word seed is protected by a number of combinations so large that guessing it is, for all practical purposes, impossible. Cut the entropy down far enough, and "impossible" quietly becomes "a matter of compute budget". The owners never saw anything change. The words on their steel plates looked exactly the same. The weakness was invisible — until someone found it, enumerated the candidate seeds, and swept the funds.</p>
|
||||
|
||||
<h2>Everything grows from the root</h2>
|
||||
<p>Bitcoin's entire security model is a chain that begins at one point: a large random number. From that number comes the seed; from the seed, the private keys; from the keys, the addresses; from the addresses, everything else — cold storage, multisig, timelocks, inheritance plans, all of it.</p>
|
||||
<p>This chain has a property that is easy to state and easy to forget: <strong>it is only as strong as its first link</strong>. You can engrave your seed on titanium, lock it in a vault, split it across continents, sign every transaction from an air-gapped bunker — and none of it matters if the random number at the root was not random enough. If security is missing at the root, everything built on top of it is theatre.</p>
|
||||
<p>That is why entropy is not an implementation detail. It is the foundation of ownership itself. And it is why the question <em>"how was this seed generated, and can I verify it?"</em> deserves at least as much attention as the questions people usually ask — which device to buy, which metal plate to engrave, which passphrase scheme to use.</p>
|
||||
|
||||
<h2>The limits of "don't trust, verify"</h2>
|
||||
<p>Bitcoin's most repeated maxim is <em>don't trust, verify</em>. The Coldcard incident is a sobering lesson in how hard that maxim is to practice — and an honest analysis has to include an uncomfortable fact: <strong>Coldcard's firmware has always been open source.</strong> The vulnerable code sat in public view for more than four years. Openness was necessary, but it was not sufficient.</p>
|
||||
<p>Coinkite itself offered a telling hypothesis about how the flaw was finally found: someone, they suggest, used AI to review old versions of the public firmware and stumbled upon the issue. More bitter still, the company had recently run its own AI-assisted security review — which found nothing.</p>
|
||||
<p>So what actually protects a seed-generation path? Three things, and all three have to be present at once:</p>
|
||||
<ol>
|
||||
<li><strong>Openness</strong> — the code must be publicly readable. Without it, verification is impossible by definition.</li>
|
||||
<li><strong>Breadth of review</strong> — openness only pays off when many independent eyes, over many years, actually look. A niche codebase, however public, can carry a subtle bug for half a decade.</li>
|
||||
<li><strong>Practical verifiability</strong> — the user, or anyone acting on the user's behalf, must be realistically able to check what runs. A general-purpose computer running open software can be inspected end to end. The silicon inside a sealed device cannot: you can read the firmware, but you cannot look inside the chip that is supposed to produce the randomness. At some point, a closed physical box always asks for a residue of trust.</li>
|
||||
</ol>
|
||||
<p>None of this means hardware wallets are useless. Air-gapped signing genuinely protects against malware on your computer, and that threat is real. But the incident draws the boundary clearly: a hardware device can protect keys <em>after</em> they exist. It cannot make its own birth verifiable. And knowledge — understanding where your entropy comes from and how to check it — protects you in ways no purchased device can.</p>
|
||||
|
||||
<h2>Why we did not reinvent the wallet</h2>
|
||||
<p>When we designed <span translate="no">Bitcoin After Life</span>, one decision came before all others: <strong>the protocol would live inside Electrum as a plug-in, not inside a new wallet of our own.</strong></p>
|
||||
<p>It would have been more glamorous to ship "the BAL wallet". It also would have been irresponsible. An inheritance protocol asks people to plan across decades. Whoever asks for that kind of time horizon has a duty to build on the most scrutinized foundations available — not on code that is six months old, however carefully written.</p>
|
||||
<p>Electrum has existed since 2011. It is one of the most reviewed pieces of Bitcoin software in the world, it has survived fifteen years of adversarial attention, and its seed handling is publicly documented down to the mathematics. A standard Electrum seed phrase carries <strong>132 bits of entropy</strong>, drawn from the operating system's cryptographically secure random number generator — a component that is not a niche codebase but one of the most heavily audited pieces of software on the planet, reviewed for decades by the entire security industry across every field that depends on it. On top of that, Electrum's documented seed-version design brings the effective cost of a brute-force attack to roughly 2<sup>135</sup> operations. These are not marketing figures; they are published, and anyone can check the code that implements them.</p>
|
||||
<p>This is the meaning of a choice we made early and have repeated often: <strong>remaining a plug-in of one of the most tested wallets in the world is a deliberate design decision, not a fallback.</strong> We add exactly one thing — time-locked inheritance through nLockTime and the Will-Executor network — and we inherit everything else, including seed generation, from a codebase that has earned trust the only way trust is earned in this industry: by surviving.</p>
|
||||
<p>Ask yourself the question we asked ourselves: would you leave your heirs' future in a wallet released last year? Are you able to go all the way and verify its code yourself? If the honest answer is no, then the age and the breadth of review of the foundation are not details. They are the whole point.</p>
|
||||
|
||||
<h2>Verification in the age of AI</h2>
|
||||
<p>There is one genuinely new element in this story, and it deserves attention: the flaw was likely found — after four and a half years of human blindness — <strong>by a machine reading public code</strong>.</p>
|
||||
<p>That cuts both ways. The same capability that armed an attacker is now in everyone's hands, and it changes the economics of <em>don't trust, verify</em>. Reviewing a seed-generation path used to require rare expertise and long hours. Today, anyone can take the open code of their wallet, hand it to a capable AI model, and ask pointed questions: <em>Where does the entropy come from? Is there any fallback path? Under what conditions could this produce a predictable seed?</em> An AI review is not a guarantee — Coinkite's own attempt proves that — but it raises the floor dramatically, and it turns verification from a specialist's privilege into an ordinary habit.</p>
|
||||
<p>Our position is simple: <strong>a verification of the seed-generation technology should always be done</strong> — before funds are deposited, and again when the software is updated. This is only possible with open code running on hardware you can inspect. It is one more reason the closed box, however well built, sits uneasily with Bitcoin's founding rule.</p>
|
||||
|
||||
<h2>What this means for inheritance</h2>
|
||||
<p>An inheritance plan compounds every assumption you make today across the decades it must survive. A weakness that is merely theoretical over one year becomes a real risk over thirty. The Coldcard sweep targeted dormant addresses — precisely the profile of long-term, set-aside funds. Precisely the profile of an inheritance.</p>
|
||||
<p>This is why <span translate="no">Bitcoin After Life</span>'s architecture keeps returning to the same principles: use Bitcoin's native, consensus-level features (nLockTime) rather than novel constructions; rely on incentives rather than promises; renew the inheritance transaction every two to three years, so the plan absorbs protocol improvements and lessons like this one; and build only on code that the world has been attacking, and failing to break, for many years.</p>
|
||||
<p>And one practical note, because it matters more than any argument: if you generated a seed on an affected Coldcard device since March 2021, follow Coinkite's advisory — update the firmware, generate a new seed on corrected software, and move your funds. Whatever wallet you use, your inheritance plan is only as good as the seed underneath it.</p>
|
||||
|
||||
<h2>Conclusion: the root comes first</h2>
|
||||
<p>The lesson of 30 July is not that one vendor failed. Every codebase can carry a bug, and Coinkite's transparency after the fact was the correct response. The lesson is older and simpler: <strong>everything starts with the seed</strong>. If randomness is missing at the root, no vault, no steel, no air gap and no inheritance protocol can compensate. Security is not something you add on top; it is something you either have at the foundation or do not have at all.</p>
|
||||
<p>We chose not to reinvent the wallet. We chose the foundation with fifteen years of scars, public mathematics, and entropy drawn from the most reviewed code on earth. Boring choices, made deliberately — because your heirs will not care how innovative your wallet looked. They will care that the seed was made the way a seed should be made.</p>
|
||||
<p>Those who want to dig deeper will find the Electrum plug-in, instructions, and practical examples at <a href="https://bitcoin-after.life/" target="_blank" rel="noopener">bitcoin-after.life</a>. The code is open source, verifiable by anyone — with your own eyes, or with an AI at your side.</p>
|
||||
<p>Verify the root. Everything else follows.</p>
|
||||
|
||||
<hr>
|
||||
<p class="disclaimer">This article is for informational purposes only and does not constitute legal, tax, or security advice. Facts about the 30 July 2026 incident reflect public reporting and Coinkite's advisory at the time of writing; consult the vendor's official communications for up-to-date guidance on affected devices.</p>
|
||||
</article>
|
||||
|
||||
<div class="back">
|
||||
<a href="../blog.html">← Back to the blog</a>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<div class="wrap">
|
||||
<div class="sig">Svātantrya</div>
|
||||
<div>Signed — <span translate="no">Bitcoin After Life</span> Protocol</div>
|
||||
<div class="links">
|
||||
<a href="https://bitcoin-after.life">bitcoin-after.life</a>
|
||||
<a href="mailto:info@bitcoin-after.life">info@bitcoin-after.life</a>
|
||||
<a href="https://x.com/BitcoinAfterLif">@BitcoinAfterLif</a>
|
||||
<a href="https://bitcoin-after.life/pgp">PGP Key</a>
|
||||
<a href="https://bitcoin-after.life/gitea/bitcoinafterlife">Source Code</a>
|
||||
</div>
|
||||
<div class="built">Built with ₿itcoin. No FIAT was used in the making of this protocol.</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<script>
|
||||
/* Mobile menu toggle -- identical behaviour across all pages. */
|
||||
(function () {
|
||||
const toggle = document.getElementById('navToggle');
|
||||
const nav = document.getElementById('mainNav');
|
||||
if (!toggle || !nav) return;
|
||||
|
||||
function setOpen(open) {
|
||||
nav.classList.toggle('open', open);
|
||||
toggle.setAttribute('aria-expanded', open ? 'true' : 'false');
|
||||
toggle.setAttribute('aria-label', open ? 'Close menu' : 'Open menu');
|
||||
}
|
||||
|
||||
toggle.addEventListener('click', function () {
|
||||
setOpen(!nav.classList.contains('open'));
|
||||
});
|
||||
nav.addEventListener('click', function (e) {
|
||||
if (e.target.tagName === 'A') setOpen(false);
|
||||
});
|
||||
document.addEventListener('keydown', function (e) {
|
||||
if (e.key === 'Escape') setOpen(false);
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
304
blog/run-a-will-executor.html
Normal file
@@ -0,0 +1,304 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" class="nojs">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Run a Will-Executor: Earn Bitcoin Fees by Powering Decentralized Inheritance — Bitcoin After Life</title>
|
||||
<meta name="description" content="Every BAL inheritance transaction carries a fee for the server that broadcasts it — paid in Bitcoin, only on success. Why running a Will-Executor is a long-term, Bitcoin-native earning opportunity.">
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:site_name" content="Bitcoin After Life">
|
||||
<meta property="og:title" content="Run a Will-Executor: Earn Bitcoin Fees by Powering Decentralized Inheritance — Bitcoin After Life">
|
||||
<meta property="og:description" content="Every BAL inheritance transaction carries a fee for the server that broadcasts it — paid in Bitcoin, only on success. Why running a Will-Executor is a long-term, Bitcoin-native earning opportunity.">
|
||||
<meta property="og:url" content="https://bitcoin-after.life/blog/run-a-will-executor.html">
|
||||
<meta property="og:image" content="https://bitcoin-after.life/pitura/og-default.png">
|
||||
<meta property="og:image:width" content="1200">
|
||||
<meta property="og:image:height" content="630">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:site" content="@BitcoinAfterLif">
|
||||
<meta name="twitter:title" content="Run a Will-Executor: Earn Bitcoin Fees by Powering Decentralized Inheritance — Bitcoin After Life">
|
||||
<meta name="twitter:description" content="Every BAL inheritance transaction carries a fee for the server that broadcasts it — paid in Bitcoin, only on success. Why running a Will-Executor is a long-term, Bitcoin-native earning opportunity.">
|
||||
<meta name="twitter:image" content="https://bitcoin-after.life/pitura/og-default.png">
|
||||
<meta name="theme-color" content="#2d6cdf">
|
||||
<link rel="canonical" href="https://bitcoin-after.life/blog/run-a-will-executor.html">
|
||||
<link rel="icon" type="image/x-icon" href="/pitura/ico/Logo_nero.ico">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="/pitura/ico/favicon-32.png">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/pitura/ico/favicon-16.png">
|
||||
<script>
|
||||
/* Runs before first paint: removes the `nojs` class set on <html>, so the
|
||||
mobile menu button is only shown when it can actually work. */
|
||||
document.documentElement.classList.remove('nojs');
|
||||
</script>
|
||||
<style>
|
||||
:root{
|
||||
--maxw:1120px;
|
||||
--radius:10px;
|
||||
--bg:#eef1f4;
|
||||
--panel:#ffffff;
|
||||
--ink:#1a2027;
|
||||
--muted:#5b6672;
|
||||
--line:#dfe4ea;
|
||||
--line-strong:#cbd2da;
|
||||
--accent:#2d6cdf;
|
||||
--accent-soft:#e6eefc;
|
||||
--display:"Inter","Segoe UI",system-ui,-apple-system,sans-serif;
|
||||
--body:"Inter","Segoe UI",system-ui,-apple-system,sans-serif;
|
||||
--mono:ui-monospace,"SF Mono",Menlo,Consolas,monospace;
|
||||
--shadow:0 1px 2px rgba(20,30,50,.05);
|
||||
--shadow-lg:0 6px 20px rgba(20,30,50,.08);
|
||||
}
|
||||
*{box-sizing:border-box}
|
||||
html{scroll-behavior:smooth}
|
||||
html,body{margin:0}
|
||||
body{background:var(--bg);color:var(--ink);font-family:var(--body);
|
||||
line-height:1.55;-webkit-font-smoothing:antialiased}
|
||||
.wrap{max-width:var(--maxw);margin:0 auto;padding:0 20px}
|
||||
a{color:var(--accent);text-decoration:none}
|
||||
a:hover{text-decoration:underline}
|
||||
|
||||
/* ---------- Top bar (shared with home and manifesto) ---------- */
|
||||
.topbar{position:sticky;top:0;z-index:30;background:rgba(255,255,255,.86);
|
||||
backdrop-filter:saturate(150%) blur(8px);border-bottom:1px solid var(--line)}
|
||||
.topbar .wrap{display:flex;align-items:center;gap:18px;height:60px}
|
||||
.topbar .logo{display:flex;align-items:center;gap:10px;font-family:var(--display);
|
||||
font-weight:600;color:var(--ink)}
|
||||
.topbar .logo img{width:30px;height:30px;display:block}
|
||||
.topbar .logo span{font-size:15px;letter-spacing:-.01em}
|
||||
.topbar nav{margin-left:auto;display:flex;gap:4px;flex-wrap:wrap}
|
||||
.topbar nav a{color:var(--muted);font-size:13px;padding:7px 11px;border-radius:7px}
|
||||
.topbar nav a:hover{color:var(--ink);background:var(--accent-soft);text-decoration:none}
|
||||
.topbar nav a.active{color:var(--accent);font-weight:600;border:1px solid #cfe0fb;
|
||||
background:var(--accent-soft)}
|
||||
.topbar .x{color:var(--ink);font-weight:600}
|
||||
|
||||
.navtoggle{
|
||||
display:none;margin-left:auto;width:44px;height:44px;flex:none;
|
||||
align-items:center;justify-content:center;
|
||||
background:var(--panel);border:1px solid var(--line-strong);border-radius:9px;
|
||||
color:var(--ink);cursor:pointer;padding:0;
|
||||
}
|
||||
.navtoggle:hover{border-color:var(--accent);color:var(--accent)}
|
||||
.navtoggle .bars{display:block;width:18px;height:2px;background:currentColor;position:relative}
|
||||
.navtoggle .bars::before,.navtoggle .bars::after{
|
||||
content:"";position:absolute;left:0;width:18px;height:2px;background:currentColor}
|
||||
.navtoggle .bars::before{top:-6px}
|
||||
.navtoggle .bars::after{top:6px}
|
||||
.navtoggle[aria-expanded="true"] .bars{background:transparent}
|
||||
.navtoggle[aria-expanded="true"] .bars::before{top:0;transform:rotate(45deg)}
|
||||
.navtoggle[aria-expanded="true"] .bars::after{top:0;transform:rotate(-45deg)}
|
||||
|
||||
/* ---------- Footer (shared) ---------- */
|
||||
footer{border-top:1px solid var(--line);margin-top:56px;padding:34px 0 40px;
|
||||
color:var(--muted);font-size:14px;background:var(--panel)}
|
||||
footer .sig{font-family:var(--display);font-weight:600;color:var(--ink);font-size:16px}
|
||||
footer .links{display:flex;gap:16px;flex-wrap:wrap;margin:14px 0}
|
||||
footer .built{font-size:13px;color:var(--muted);margin-top:8px}
|
||||
|
||||
@media (max-width:900px){
|
||||
.navtoggle{display:inline-flex}
|
||||
.topbar nav{
|
||||
position:absolute;top:100%;left:0;right:0;
|
||||
margin-left:0;display:none;flex-direction:column;gap:2px;flex-wrap:nowrap;
|
||||
background:var(--panel);border-bottom:1px solid var(--line);
|
||||
box-shadow:var(--shadow-lg);padding:10px 20px 16px;
|
||||
}
|
||||
.topbar nav.open{display:flex}
|
||||
.topbar nav a{font-size:15.5px;padding:0 12px;min-height:44px;
|
||||
display:flex;align-items:center;border-radius:8px}
|
||||
}
|
||||
@media (prefers-reduced-motion:reduce){*{transition:none!important;scroll-behavior:auto!important}}
|
||||
:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
|
||||
|
||||
/*
|
||||
Without JavaScript the panel cannot be toggled, so the links are shown
|
||||
inline. On narrow screens they wrap under the logo and the bar is allowed
|
||||
to grow, instead of being clipped by the fixed 60px height.
|
||||
*/
|
||||
.nojs .navtoggle{display:none}
|
||||
.nojs .topbar nav{position:static;display:flex;flex-direction:row;flex-wrap:wrap;
|
||||
box-shadow:none;border-bottom:0;padding:0;margin-left:auto;background:transparent}
|
||||
@media (max-width:900px){
|
||||
.nojs .topbar .wrap{height:auto;min-height:56px;flex-wrap:wrap;padding-bottom:8px;gap:10px}
|
||||
.nojs .topbar nav{margin-left:0;width:100%;gap:4px 6px}
|
||||
.nojs .topbar nav a{font-size:14.5px;min-height:40px;padding:0 10px;
|
||||
display:flex;align-items:center;border:1px solid var(--line);border-radius:8px}
|
||||
}
|
||||
|
||||
.post-head{padding:44px 0 30px;border-bottom:1px solid var(--line);
|
||||
background:radial-gradient(820px 280px at 50% -40%,var(--accent-soft),transparent 70%)}
|
||||
.post-head .wrap{max-width:760px}
|
||||
.post-head .eyebrow{font-family:var(--mono);font-size:12px;letter-spacing:.14em;
|
||||
text-transform:uppercase;color:var(--accent);display:block;margin-bottom:14px}
|
||||
.post-head h1{font-family:var(--display);font-weight:600;font-size:40px;
|
||||
letter-spacing:-.02em;line-height:1.12;margin:0 0 14px}
|
||||
.post-meta{display:flex;gap:14px;align-items:center;flex-wrap:wrap;
|
||||
font-size:13px;color:var(--muted)}
|
||||
.post-meta .dot{width:4px;height:4px;border-radius:50%;background:var(--line-strong)}
|
||||
|
||||
.article{max-width:760px;margin:0 auto;padding:34px 20px 8px}
|
||||
.article p{font-size:17px;line-height:1.8;color:#36404b;margin:0 0 20px}
|
||||
.article p strong{color:var(--ink);font-weight:600}
|
||||
.article h2{font-family:var(--display);font-weight:600;font-size:25px;
|
||||
letter-spacing:-.01em;margin:38px 0 14px;padding-bottom:10px;
|
||||
border-bottom:1px solid var(--line-strong)}
|
||||
.article ol{padding-left:22px;margin:0 0 20px}
|
||||
.article li{font-size:17px;line-height:1.8;color:#36404b;margin-bottom:14px}
|
||||
.article li strong{color:var(--ink);font-weight:600}
|
||||
.article figure{margin:30px 0}
|
||||
.article figure img{width:100%;height:auto;display:block;border-radius:var(--radius);
|
||||
border:1px solid var(--line);box-shadow:var(--shadow)}
|
||||
.article hr{border:0;border-top:1px solid var(--line-strong);margin:34px 0 22px}
|
||||
.article .disclaimer{font-size:14px;color:var(--muted);font-style:italic;line-height:1.7}
|
||||
.back{max-width:760px;margin:26px auto 0;padding:0 20px 8px}
|
||||
.back a{font-size:14px;font-weight:600}
|
||||
|
||||
@media (max-width:700px){
|
||||
.post-head{padding:30px 0 24px}
|
||||
.post-head h1{font-size:29px}
|
||||
.article{padding:28px 18px 8px}
|
||||
.article h2{font-size:22px;margin-top:32px}
|
||||
.article figure{margin:24px -18px}
|
||||
.article figure img{border-radius:0;border-left:0;border-right:0}
|
||||
}
|
||||
@media (max-width:400px){
|
||||
.post-head h1{font-size:25px}
|
||||
.wrap{padding:0 15px}
|
||||
.article{padding:24px 16px 8px}
|
||||
.article figure{margin:22px -16px}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="topbar">
|
||||
<div class="wrap">
|
||||
<a class="logo" href="../index.html"><img src="../pitura/logo/Logo_nero.svg" alt="Bitcoin After Life logo"><span translate="no">Bitcoin After Life</span></a>
|
||||
<button class="navtoggle" id="navToggle" type="button"
|
||||
aria-expanded="false" aria-controls="mainNav" aria-label="Open menu">
|
||||
<span class="bars"></span>
|
||||
</button>
|
||||
<nav id="mainNav">
|
||||
<a href="../index.html#features">Features</a>
|
||||
<a href="../index.html#how">How it works</a>
|
||||
<a href="../index.html#plugin">Plugin</a>
|
||||
<a href="../index.html#faq">FAQ</a>
|
||||
<a class="active" href="../blog.html">Blog</a>
|
||||
<a href="../manifesto.html">Manifesto</a>
|
||||
<a class="x" href="https://x.com/BitcoinAfterLif" title="@BitcoinAfterLif on X">@X</a>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<main>
|
||||
<header class="post-head">
|
||||
<div class="wrap">
|
||||
<span class="eyebrow">Blog</span>
|
||||
<h1>Run a Will-Executor: Earn Bitcoin Fees by Powering Decentralized Inheritance</h1>
|
||||
<div class="post-meta">
|
||||
<time datetime="2026-08-30">30 August 2026</time>
|
||||
<span class="dot"></span>
|
||||
<span translate="no">Bitcoin After Life</span>
|
||||
<span class="dot"></span>
|
||||
<span>5 min read</span>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<article class="article">
|
||||
<figure>
|
||||
<img src="img/run-a-will-executor-cover.webp" width="1600" height="900" loading="lazy" alt="An isometric server node connected to a Bitcoin block chain, representing a Will-Executor">
|
||||
</figure>
|
||||
|
||||
<p>Every protocol has a heartbeat. In <span translate="no">Bitcoin After Life</span>, that heartbeat is the <strong>Will-Executor</strong> network: independent servers around the world that store signed, time-locked inheritance transactions and broadcast them when their delivery date arrives. Without executors, there is no protocol. And here's the part most people miss: <strong>anyone can run one — and get paid in Bitcoin for doing it.</strong></p>
|
||||
<p>This article explains what running a Will-Executor actually involves, how the economics work, and why we believe it is one of the most interesting long-term, Bitcoin-native earning opportunities nobody is talking about yet.</p>
|
||||
|
||||
<h2>What a Will-Executor actually does</h2>
|
||||
<p>Strip away the name and a Will-Executor is a beautifully simple service. It:</p>
|
||||
<ol>
|
||||
<li><strong>Receives</strong> fully signed, time-locked inheritance transactions from BAL plugin users.</li>
|
||||
<li><strong>Stores</strong> them safely — sometimes for years.</li>
|
||||
<li><strong>Broadcasts</strong> each transaction to the Bitcoin network on its delivery date.</li>
|
||||
</ol>
|
||||
<p>That's all. The server cannot modify the transactions (they are already signed), cannot execute them early (Bitcoin's consensus rules reject them before the locktime), and cannot see anything beyond what the transaction itself reveals. It is infrastructure, not a fiduciary.</p>
|
||||
<p>Technically, the requirements are modest. You don't need a datacenter or specialized hardware — the <a href="https://bitcoin-after.life/gitea/bitcoinafterlife/bal-server" target="_blank" rel="noopener">BAL server</a> is open source, and a reliable, always-on machine with modest resources is enough to start. Once running, you can list your server on the public <a href="https://welist.bitcoin-after.life/" target="_blank" rel="noopener">WeList directory</a>, where plugin users discover and select executors for their wills.</p>
|
||||
|
||||
<h2>The economics: paid on success, in Bitcoin, forever</h2>
|
||||
<p>The incentive design is deliberately simple and entirely on-chain:</p>
|
||||
<ul style="padding-left:22px">
|
||||
<li>Every inheritance transaction created by the BAL plugin includes a <strong>fee output for the Will-Executor</strong>.</li>
|
||||
<li>That fee is paid <strong>only when the transaction is broadcast and confirms</strong> on the blockchain. No execution, no payment. The incentive to store carefully and broadcast punctually is built into the money itself.</li>
|
||||
<li>If several executors hold the same inheritance, <strong>the first to broadcast it wins the fee</strong>. This race is a feature: it makes every executor eager to be online, honest, and fast on delivery day.</li>
|
||||
<li>Fees are denominated in <strong>Bitcoin</strong> — not in a token, not in points, not in a promise. As Bitcoin's value grows over the years between a will's creation and its execution, the real-world value of every stored will grows with it.</li>
|
||||
</ul>
|
||||
<p>That last point deserves emphasis. A Will-Executor accumulates a portfolio of future-dated, Bitcoin-denominated claims. Each one is a small, probabilistic, long-duration asset — closer to holding a book of very patient options than to running a conventional service. The protocol is designed for inheritances that may execute ten, twenty, thirty years from now. The executor business is a bet on longevity: the protocol's, and your server's.</p>
|
||||
|
||||
<h2>Why the network needs you</h2>
|
||||
<p>Decentralized inheritance has a bootstrapping problem that is the mirror image of Bitcoin's own early days: the system is only as strong as its redundancy.</p>
|
||||
<p>The BAL plugin creates one transaction per selected Will-Executor precisely because <strong>only one of them needs to survive until the delivery date</strong>. Redundancy is the guarantee. But that guarantee gets stronger with every independent operator who joins:</p>
|
||||
<ul style="padding-left:22px">
|
||||
<li><strong>More executors = more resilience.</strong> Geographic, jurisdictional, and operational diversity means no single outage, seizure, or bankruptcy can break the chain of inheritance.</li>
|
||||
<li><strong>More executors = more credibility.</strong> Users choosing servers from the WeList want to see a living, competitive directory, not a monoculture.</li>
|
||||
<li><strong>More executors = earlier fees.</strong> A larger network attracts more users, and more users mean more wills stored — the fee pipeline starts flowing sooner for everyone.</li>
|
||||
</ul>
|
||||
<p>If you believed in running a Bitcoin node when it was "useless," or mining when it was a hobby, this will feel familiar: critical infrastructure, run by volunteers-turned-stakeholders, rewarded later than expected and more than expected.</p>
|
||||
|
||||
<h2>Getting started</h2>
|
||||
<ol>
|
||||
<li>Read <a href="https://bitcoin-after.life/docs/will-executors/what-they-are.html" target="_blank" rel="noopener">What Will-Executors are</a> in the manual for the full mental model.</li>
|
||||
<li>Follow <a href="https://bitcoin-after.life/docs/will-executors/running-a-server.html" target="_blank" rel="noopener">Running a Will-Executor</a> for the setup walkthrough — the code is MIT-licensed and open for audit.</li>
|
||||
<li>Add your server to the <a href="https://welist.bitcoin-after.life/" target="_blank" rel="noopener">WeList</a> so users can find and select you.</li>
|
||||
<li>Stay online, stay honest, and let time — and the timelocks — do the rest.</li>
|
||||
</ol>
|
||||
|
||||
<h2>The long game</h2>
|
||||
<p>Bitcoin turned "being your own bank" from a slogan into software. <span translate="no">Bitcoin After Life</span> is doing the same for "leaving something behind." But protocols don't run themselves: behind every inheritance that arrives exactly on schedule, decades after it was written, there will be a server that kept its promise — and collected its fee.</p>
|
||||
<p>That server could be yours.</p>
|
||||
|
||||
<p><em>Bitcoin After Life is open source and Bitcoin-only. Explore the code on <a href="https://bitcoin-after.life/gitea/bitcoinafterlife" target="_blank" rel="noopener">Gitea</a>, browse the executor directory at <a href="https://welist.bitcoin-after.life/" target="_blank" rel="noopener">welist.bitcoin-after.life</a>, and read the full documentation at <a href="https://bitcoin-after.life/docs/" target="_blank" rel="noopener">bitcoin-after.life/docs</a>.</em></p>
|
||||
</article>
|
||||
|
||||
<div class="back">
|
||||
<a href="../blog.html">← Back to the blog</a>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<div class="wrap">
|
||||
<div class="sig">Svātantrya</div>
|
||||
<div>Signed — <span translate="no">Bitcoin After Life</span> Protocol</div>
|
||||
<div class="links">
|
||||
<a href="https://bitcoin-after.life">bitcoin-after.life</a>
|
||||
<a href="mailto:info@bitcoin-after.life">info@bitcoin-after.life</a>
|
||||
<a href="https://x.com/BitcoinAfterLif">@BitcoinAfterLif</a>
|
||||
<a href="https://bitcoin-after.life/pgp">PGP Key</a>
|
||||
<a href="https://bitcoin-after.life/gitea/bitcoinafterlife">Source Code</a>
|
||||
</div>
|
||||
<div class="built">Built with ₿itcoin. No FIAT was used in the making of this protocol.</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<script>
|
||||
/* Mobile menu toggle -- identical behaviour across all pages. */
|
||||
(function () {
|
||||
const toggle = document.getElementById('navToggle');
|
||||
const nav = document.getElementById('mainNav');
|
||||
if (!toggle || !nav) return;
|
||||
|
||||
function setOpen(open) {
|
||||
nav.classList.toggle('open', open);
|
||||
toggle.setAttribute('aria-expanded', open ? 'true' : 'false');
|
||||
toggle.setAttribute('aria-label', open ? 'Close menu' : 'Open menu');
|
||||
}
|
||||
|
||||
toggle.addEventListener('click', function () {
|
||||
setOpen(!nav.classList.contains('open'));
|
||||
});
|
||||
nav.addEventListener('click', function (e) {
|
||||
if (e.target.tagName === 'A') setOpen(false);
|
||||
});
|
||||
document.addEventListener('keydown', function (e) {
|
||||
if (e.key === 'Escape') setOpen(false);
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
323
blog/what-a-will-executor-can-see.html
Normal file
@@ -0,0 +1,323 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" class="nojs">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>What Can a Will-Executor Actually See? Privacy in the BAL Protocol — Bitcoin After Life</title>
|
||||
<meta name="description" content="A Will-Executor holds one signed, time-locked transaction — nothing else. Exactly what it can see, what it cannot, and why privacy here comes from architecture, not from a policy.">
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:site_name" content="Bitcoin After Life">
|
||||
<meta property="og:title" content="What Can a Will-Executor Actually See? Privacy in the BAL Protocol — Bitcoin After Life">
|
||||
<meta property="og:description" content="A Will-Executor holds one signed, time-locked transaction — nothing else. Exactly what it can see, what it cannot, and why privacy here comes from architecture, not from a policy.">
|
||||
<meta property="og:url" content="https://bitcoin-after.life/blog/what-a-will-executor-can-see.html">
|
||||
<meta property="og:image" content="https://bitcoin-after.life/pitura/og-default.png">
|
||||
<meta property="og:image:width" content="1200">
|
||||
<meta property="og:image:height" content="630">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:site" content="@BitcoinAfterLif">
|
||||
<meta name="twitter:title" content="What Can a Will-Executor Actually See? Privacy in the BAL Protocol — Bitcoin After Life">
|
||||
<meta name="twitter:description" content="A Will-Executor holds one signed, time-locked transaction — nothing else. Exactly what it can see, what it cannot, and why privacy here comes from architecture, not from a policy.">
|
||||
<meta name="twitter:image" content="https://bitcoin-after.life/pitura/og-default.png">
|
||||
<meta name="theme-color" content="#2d6cdf">
|
||||
<link rel="canonical" href="https://bitcoin-after.life/blog/what-a-will-executor-can-see.html">
|
||||
<link rel="icon" type="image/x-icon" href="/pitura/ico/Logo_nero.ico">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="/pitura/ico/favicon-32.png">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/pitura/ico/favicon-16.png">
|
||||
<script>
|
||||
/* Runs before first paint: removes the `nojs` class set on <html>, so the
|
||||
mobile menu button is only shown when it can actually work. */
|
||||
document.documentElement.classList.remove('nojs');
|
||||
</script>
|
||||
<style>
|
||||
:root{
|
||||
--maxw:1120px;
|
||||
--radius:10px;
|
||||
--bg:#eef1f4;
|
||||
--panel:#ffffff;
|
||||
--ink:#1a2027;
|
||||
--muted:#5b6672;
|
||||
--line:#dfe4ea;
|
||||
--line-strong:#cbd2da;
|
||||
--accent:#2d6cdf;
|
||||
--accent-soft:#e6eefc;
|
||||
--display:"Inter","Segoe UI",system-ui,-apple-system,sans-serif;
|
||||
--body:"Inter","Segoe UI",system-ui,-apple-system,sans-serif;
|
||||
--mono:ui-monospace,"SF Mono",Menlo,Consolas,monospace;
|
||||
--shadow:0 1px 2px rgba(20,30,50,.05);
|
||||
--shadow-lg:0 6px 20px rgba(20,30,50,.08);
|
||||
}
|
||||
*{box-sizing:border-box}
|
||||
html{scroll-behavior:smooth}
|
||||
html,body{margin:0}
|
||||
body{background:var(--bg);color:var(--ink);font-family:var(--body);
|
||||
line-height:1.55;-webkit-font-smoothing:antialiased}
|
||||
.wrap{max-width:var(--maxw);margin:0 auto;padding:0 20px}
|
||||
a{color:var(--accent);text-decoration:none}
|
||||
a:hover{text-decoration:underline}
|
||||
|
||||
/* ---------- Top bar (shared with home and manifesto) ---------- */
|
||||
.topbar{position:sticky;top:0;z-index:30;background:rgba(255,255,255,.86);
|
||||
backdrop-filter:saturate(150%) blur(8px);border-bottom:1px solid var(--line)}
|
||||
.topbar .wrap{display:flex;align-items:center;gap:18px;height:60px}
|
||||
.topbar .logo{display:flex;align-items:center;gap:10px;font-family:var(--display);
|
||||
font-weight:600;color:var(--ink)}
|
||||
.topbar .logo img{width:30px;height:30px;display:block}
|
||||
.topbar .logo span{font-size:15px;letter-spacing:-.01em}
|
||||
.topbar nav{margin-left:auto;display:flex;gap:4px;flex-wrap:wrap}
|
||||
.topbar nav a{color:var(--muted);font-size:13px;padding:7px 11px;border-radius:7px}
|
||||
.topbar nav a:hover{color:var(--ink);background:var(--accent-soft);text-decoration:none}
|
||||
.topbar nav a.active{color:var(--accent);font-weight:600;border:1px solid #cfe0fb;
|
||||
background:var(--accent-soft)}
|
||||
.topbar .x{color:var(--ink);font-weight:600}
|
||||
|
||||
.navtoggle{
|
||||
display:none;margin-left:auto;width:44px;height:44px;flex:none;
|
||||
align-items:center;justify-content:center;
|
||||
background:var(--panel);border:1px solid var(--line-strong);border-radius:9px;
|
||||
color:var(--ink);cursor:pointer;padding:0;
|
||||
}
|
||||
.navtoggle:hover{border-color:var(--accent);color:var(--accent)}
|
||||
.navtoggle .bars{display:block;width:18px;height:2px;background:currentColor;position:relative}
|
||||
.navtoggle .bars::before,.navtoggle .bars::after{
|
||||
content:"";position:absolute;left:0;width:18px;height:2px;background:currentColor}
|
||||
.navtoggle .bars::before{top:-6px}
|
||||
.navtoggle .bars::after{top:6px}
|
||||
.navtoggle[aria-expanded="true"] .bars{background:transparent}
|
||||
.navtoggle[aria-expanded="true"] .bars::before{top:0;transform:rotate(45deg)}
|
||||
.navtoggle[aria-expanded="true"] .bars::after{top:0;transform:rotate(-45deg)}
|
||||
|
||||
/* ---------- Footer (shared) ---------- */
|
||||
footer{border-top:1px solid var(--line);margin-top:56px;padding:34px 0 40px;
|
||||
color:var(--muted);font-size:14px;background:var(--panel)}
|
||||
footer .sig{font-family:var(--display);font-weight:600;color:var(--ink);font-size:16px}
|
||||
footer .links{display:flex;gap:16px;flex-wrap:wrap;margin:14px 0}
|
||||
footer .built{font-size:13px;color:var(--muted);margin-top:8px}
|
||||
|
||||
@media (max-width:900px){
|
||||
.navtoggle{display:inline-flex}
|
||||
.topbar nav{
|
||||
position:absolute;top:100%;left:0;right:0;
|
||||
margin-left:0;display:none;flex-direction:column;gap:2px;flex-wrap:nowrap;
|
||||
background:var(--panel);border-bottom:1px solid var(--line);
|
||||
box-shadow:var(--shadow-lg);padding:10px 20px 16px;
|
||||
}
|
||||
.topbar nav.open{display:flex}
|
||||
.topbar nav a{font-size:15.5px;padding:0 12px;min-height:44px;
|
||||
display:flex;align-items:center;border-radius:8px}
|
||||
}
|
||||
@media (prefers-reduced-motion:reduce){*{transition:none!important;scroll-behavior:auto!important}}
|
||||
:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
|
||||
|
||||
/*
|
||||
Without JavaScript the panel cannot be toggled, so the links are shown
|
||||
inline. On narrow screens they wrap under the logo and the bar is allowed
|
||||
to grow, instead of being clipped by the fixed 60px height.
|
||||
*/
|
||||
.nojs .navtoggle{display:none}
|
||||
.nojs .topbar nav{position:static;display:flex;flex-direction:row;flex-wrap:wrap;
|
||||
box-shadow:none;border-bottom:0;padding:0;margin-left:auto;background:transparent}
|
||||
@media (max-width:900px){
|
||||
.nojs .topbar .wrap{height:auto;min-height:56px;flex-wrap:wrap;padding-bottom:8px;gap:10px}
|
||||
.nojs .topbar nav{margin-left:0;width:100%;gap:4px 6px}
|
||||
.nojs .topbar nav a{font-size:14.5px;min-height:40px;padding:0 10px;
|
||||
display:flex;align-items:center;border:1px solid var(--line);border-radius:8px}
|
||||
}
|
||||
|
||||
.post-head{padding:44px 0 30px;border-bottom:1px solid var(--line);
|
||||
background:radial-gradient(820px 280px at 50% -40%,var(--accent-soft),transparent 70%)}
|
||||
.post-head .wrap{max-width:760px}
|
||||
.post-head .eyebrow{font-family:var(--mono);font-size:12px;letter-spacing:.14em;
|
||||
text-transform:uppercase;color:var(--accent);display:block;margin-bottom:14px}
|
||||
.post-head h1{font-family:var(--display);font-weight:600;font-size:40px;
|
||||
letter-spacing:-.02em;line-height:1.12;margin:0 0 14px}
|
||||
.post-meta{display:flex;gap:14px;align-items:center;flex-wrap:wrap;
|
||||
font-size:13px;color:var(--muted)}
|
||||
.post-meta .dot{width:4px;height:4px;border-radius:50%;background:var(--line-strong)}
|
||||
|
||||
.article{max-width:760px;margin:0 auto;padding:34px 20px 8px}
|
||||
.article p{font-size:17px;line-height:1.8;color:#36404b;margin:0 0 20px}
|
||||
.article p strong{color:var(--ink);font-weight:600}
|
||||
.article h2{font-family:var(--display);font-weight:600;font-size:25px;
|
||||
letter-spacing:-.01em;margin:38px 0 14px;padding-bottom:10px;
|
||||
border-bottom:1px solid var(--line-strong)}
|
||||
.article ol{padding-left:22px;margin:0 0 20px}
|
||||
.article li{font-size:17px;line-height:1.8;color:#36404b;margin-bottom:14px}
|
||||
.article li strong{color:var(--ink);font-weight:600}
|
||||
.article figure{margin:30px 0}
|
||||
.article figure img{width:100%;height:auto;display:block;border-radius:var(--radius);
|
||||
border:1px solid var(--line);box-shadow:var(--shadow)}
|
||||
.article hr{border:0;border-top:1px solid var(--line-strong);margin:34px 0 22px}
|
||||
.article .disclaimer{font-size:14px;color:var(--muted);font-style:italic;line-height:1.7}
|
||||
|
||||
/*
|
||||
Comparison table, same treatment as the Electrum post: the wrapper scrolls
|
||||
on narrow screens so the page body never scrolls sideways.
|
||||
*/
|
||||
.article .tablewrap{overflow-x:auto;margin:0 0 22px;-webkit-overflow-scrolling:touch}
|
||||
.article table{width:100%;border-collapse:collapse;font-size:15.5px;min-width:480px}
|
||||
.article th,.article td{text-align:left;padding:11px 14px;border:1px solid var(--line);
|
||||
line-height:1.6;color:#36404b;vertical-align:top}
|
||||
.article th{font-family:var(--display);font-weight:600;color:var(--ink);
|
||||
background:var(--accent-soft)}
|
||||
|
||||
.back{max-width:760px;margin:26px auto 0;padding:0 20px 8px}
|
||||
.back a{font-size:14px;font-weight:600}
|
||||
|
||||
@media (max-width:700px){
|
||||
.post-head{padding:30px 0 24px}
|
||||
.post-head h1{font-size:29px}
|
||||
.article{padding:28px 18px 8px}
|
||||
.article h2{font-size:22px;margin-top:32px}
|
||||
.article figure{margin:24px -18px}
|
||||
.article figure img{border-radius:0;border-left:0;border-right:0}
|
||||
}
|
||||
@media (max-width:400px){
|
||||
.post-head h1{font-size:25px}
|
||||
.wrap{padding:0 15px}
|
||||
.article{padding:24px 16px 8px}
|
||||
.article figure{margin:22px -16px}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="topbar">
|
||||
<div class="wrap">
|
||||
<a class="logo" href="../index.html"><img src="../pitura/logo/Logo_nero.svg" alt="Bitcoin After Life logo"><span translate="no">Bitcoin After Life</span></a>
|
||||
<button class="navtoggle" id="navToggle" type="button"
|
||||
aria-expanded="false" aria-controls="mainNav" aria-label="Open menu">
|
||||
<span class="bars"></span>
|
||||
</button>
|
||||
<nav id="mainNav">
|
||||
<a href="../index.html#features">Features</a>
|
||||
<a href="../index.html#how">How it works</a>
|
||||
<a href="../index.html#plugin">Plugin</a>
|
||||
<a href="../index.html#faq">FAQ</a>
|
||||
<a class="active" href="../blog.html">Blog</a>
|
||||
<a href="../manifesto.html">Manifesto</a>
|
||||
<a class="x" href="https://x.com/BitcoinAfterLif" title="@BitcoinAfterLif on X">@X</a>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<main>
|
||||
<header class="post-head">
|
||||
<div class="wrap">
|
||||
<span class="eyebrow">Blog</span>
|
||||
<h1>What Can a Will-Executor Actually See? Privacy in the BAL Protocol</h1>
|
||||
<div class="post-meta">
|
||||
<time datetime="2026-09-06">6 September 2026</time>
|
||||
<span class="dot"></span>
|
||||
<span translate="no">Bitcoin After Life</span>
|
||||
<span class="dot"></span>
|
||||
<span>4 min read</span>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<article class="article">
|
||||
<figure>
|
||||
<img src="img/what-a-will-executor-can-see-cover.webp" width="1600" height="900" loading="lazy" alt="A blue shield bearing the Bitcoin symbol covers an eye in front of a document — what a Will-Executor can and cannot see">
|
||||
</figure>
|
||||
|
||||
<p>When you hand something to a third party — even an automated one — the first question a careful Bitcoiner asks is: <em>what do they learn about me?</em></p>
|
||||
<p>It's the right question. Traditional inheritance is a privacy disaster by design: a notary learns your identity, your family structure, your assets, and your heirs' identities, and all of it ends up in records that can be subpoenaed, leaked, or — in many jurisdictions — made public after probate. Custodial services are worse: they hold your coins <em>and</em> your data.</p>
|
||||
<p><span translate="no">Bitcoin After Life</span> was built to need no third party at all. But it does involve Will-Executor servers, so let's answer the privacy question precisely, without marketing fog: <strong>here is exactly what a Will-Executor can see, and what it cannot.</strong></p>
|
||||
|
||||
<h2>What a Will-Executor holds</h2>
|
||||
<p>A Will-Executor stores one thing: your <strong>signed, time-locked inheritance transaction</strong>. Nothing else travels to the server — no identity, no email, no account, no documents. The BAL plugin doesn't ask who you are, because the protocol doesn't need to know.</p>
|
||||
<p>From that transaction, an executor — like anyone who inspects a raw Bitcoin transaction — can technically observe:</p>
|
||||
<ul style="padding-left:22px">
|
||||
<li><strong>The inputs:</strong> the specific UTXOs your inheritance will spend, and therefore the amount they contain.</li>
|
||||
<li><strong>The outputs:</strong> your heirs' addresses, their shares, and the executor fee.</li>
|
||||
<li><strong>The locktime:</strong> the delivery date after which the transaction becomes valid.</li>
|
||||
</ul>
|
||||
<p>That is the complete list. Let's now look at the much longer list of what remains invisible.</p>
|
||||
|
||||
<h2>What a Will-Executor cannot see</h2>
|
||||
<p><strong>Your identity.</strong> There is no account system, no KYC, no registration. To a Will-Executor you are a transaction, not a person. Bitcoin addresses are pseudonymous by design — the server sees strings of characters, not names.</p>
|
||||
<p><strong>The rest of your wallet.</strong> The transaction reveals only the UTXOs it spends. Your other addresses, your total holdings, your transaction history beyond those specific coins: none of it is exposed by the protocol. The executor sees the inheritance, not your wealth.</p>
|
||||
<p><strong>Your heirs' identities.</strong> Heirs appear as addresses. A name, a face, a relationship — none of that is in a Bitcoin transaction, and none of it is in what BAL sends.</p>
|
||||
<p><strong>Your activity and your lifetime.</strong> Executors cannot tell whether you're alive, active, traveling, or simply quiet. The Check Alive mechanism that postpones your delivery date works through your own wallet — the server doesn't track you, ping you, or monitor you. There is no surveillance built into the protocol, because there is no need for any.</p>
|
||||
<p><strong>Any way to profit from what it sees.</strong> This is the crucial point. Even the limited information above is useless for abuse: the transaction is already fully signed, so it cannot be altered; it is time-locked, so it cannot be broadcast early; and its outputs are fixed, so not a single satoshi can be redirected. A Will-Executor that tried to front-run, censor, or manipulate would gain nothing — and would lose its fee, which is only paid when the inheritance executes exactly as written.</p>
|
||||
|
||||
<h2>Privacy by architecture, not by policy</h2>
|
||||
<p>Most services protect your data with a privacy <em>policy</em> — a legal promise that can change with an acquisition, a subpoena, or a new CEO. BAL protects it with <em>architecture</em>: the protocol was designed so that the sensitive data never exists on the server in the first place.</p>
|
||||
<div class="tablewrap">
|
||||
<table>
|
||||
<thead>
|
||||
<tr><th>What traditional inheritance exposes</th><th>What BAL exposes</th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr><td>Your legal identity</td><td>Nothing — no accounts</td></tr>
|
||||
<tr><td>Full inventory of your assets</td><td>Only the UTXOs in the transaction</td></tr>
|
||||
<tr><td>Heirs' names and relationships</td><td>Heirs' addresses only</td></tr>
|
||||
<tr><td>Family structure, stored in public records</td><td>Nothing — no records exist</td></tr>
|
||||
<tr><td>Protected by: a privacy policy</td><td>Protected by: protocol design</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<p>You cannot leak what you never collected.</p>
|
||||
|
||||
<h2>Optional hardening for the privacy-conscious</h2>
|
||||
<p>The protocol's defaults are already strong, but Bitcoin hygiene adds another layer:</p>
|
||||
<ul style="padding-left:22px">
|
||||
<li><strong>Use fresh addresses for your heirs.</strong> Electrum generates new addresses freely; an address that has never appeared on-chain carries no history to analyze.</li>
|
||||
<li><strong>Consider multiple executors.</strong> Splitting your will across several Will-Executors from the WeList is primarily a redundancy feature — but it also means no single server is your only counterparty.</li>
|
||||
<li><strong>Review before you send.</strong> The plugin always lets you inspect the generated transactions before anything is transmitted. Verify the outputs yourself; trust is not required.</li>
|
||||
</ul>
|
||||
|
||||
<h2>The honest summary</h2>
|
||||
<p>A Will-Executor sees one signed transaction: some addresses, some amounts, a date. It does not know who you are, what else you own, or who your heirs are — and the cryptography guarantees it can do nothing harmful even with what little it sees.</p>
|
||||
<p>Compare that with the alternative: a folder in a lawyer's cabinet containing your name, your family's names, and the full list of what you own.</p>
|
||||
<p>Inheritance used to require giving up your privacy to be safe. We built BAL so you could keep both.</p>
|
||||
|
||||
<p><em>Want the technical detail? The full protocol walkthrough is in the <a href="https://bitcoin-after.life/docs/protocol/how-it-works.html" target="_blank" rel="noopener">manual</a>, and both the <a href="https://bitcoin-after.life/gitea/bitcoinafterlife/bal-electrum-plugin" target="_blank" rel="noopener">plugin</a> and the <a href="https://bitcoin-after.life/gitea/bitcoinafterlife/bal-server" target="_blank" rel="noopener">server</a> are open source — verify, don't trust.</em></p>
|
||||
</article>
|
||||
|
||||
<div class="back">
|
||||
<a href="../blog.html">← Back to the blog</a>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<div class="wrap">
|
||||
<div class="sig">Svātantrya</div>
|
||||
<div>Signed — <span translate="no">Bitcoin After Life</span> Protocol</div>
|
||||
<div class="links">
|
||||
<a href="https://bitcoin-after.life">bitcoin-after.life</a>
|
||||
<a href="mailto:info@bitcoin-after.life">info@bitcoin-after.life</a>
|
||||
<a href="https://x.com/BitcoinAfterLif">@BitcoinAfterLif</a>
|
||||
<a href="https://bitcoin-after.life/pgp">PGP Key</a>
|
||||
<a href="https://bitcoin-after.life/gitea/bitcoinafterlife">Source Code</a>
|
||||
</div>
|
||||
<div class="built">Built with ₿itcoin. No FIAT was used in the making of this protocol.</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<script>
|
||||
/* Mobile menu toggle -- identical behaviour across all pages. */
|
||||
(function () {
|
||||
const toggle = document.getElementById('navToggle');
|
||||
const nav = document.getElementById('mainNav');
|
||||
if (!toggle || !nav) return;
|
||||
|
||||
function setOpen(open) {
|
||||
nav.classList.toggle('open', open);
|
||||
toggle.setAttribute('aria-expanded', open ? 'true' : 'false');
|
||||
toggle.setAttribute('aria-label', open ? 'Close menu' : 'Open menu');
|
||||
}
|
||||
|
||||
toggle.addEventListener('click', function () {
|
||||
setOpen(!nav.classList.contains('open'));
|
||||
});
|
||||
nav.addEventListener('click', function (e) {
|
||||
if (e.target.tagName === 'A') setOpen(false);
|
||||
});
|
||||
document.addEventListener('keydown', function (e) {
|
||||
if (e.key === 'Escape') setOpen(false);
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
292
blog/what-happens-to-your-bitcoin.html
Normal file
@@ -0,0 +1,292 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" class="nojs">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>What Happens to Your Bitcoin When You're Gone? — Bitcoin After Life</title>
|
||||
<meta name="description" content="Self-custody means no one can seize your bitcoin — and no one can help your family if you're gone either. Why time-locked transactions are the honest answer to Bitcoin inheritance.">
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:site_name" content="Bitcoin After Life">
|
||||
<meta property="og:title" content="What Happens to Your Bitcoin When You're Gone? — Bitcoin After Life">
|
||||
<meta property="og:description" content="Self-custody means no one can seize your bitcoin — and no one can help your family if you're gone either. Why time-locked transactions are the honest answer to Bitcoin inheritance.">
|
||||
<meta property="og:url" content="https://bitcoin-after.life/blog/what-happens-to-your-bitcoin.html">
|
||||
<meta property="og:image" content="https://bitcoin-after.life/pitura/og-default.png">
|
||||
<meta property="og:image:width" content="1200">
|
||||
<meta property="og:image:height" content="630">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:site" content="@BitcoinAfterLif">
|
||||
<meta name="twitter:title" content="What Happens to Your Bitcoin When You're Gone? — Bitcoin After Life">
|
||||
<meta name="twitter:description" content="Self-custody means no one can seize your bitcoin — and no one can help your family if you're gone either. Why time-locked transactions are the honest answer to Bitcoin inheritance.">
|
||||
<meta name="twitter:image" content="https://bitcoin-after.life/pitura/og-default.png">
|
||||
<meta name="theme-color" content="#2d6cdf">
|
||||
<link rel="canonical" href="https://bitcoin-after.life/blog/what-happens-to-your-bitcoin.html">
|
||||
<link rel="icon" type="image/x-icon" href="/pitura/ico/Logo_nero.ico">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="/pitura/ico/favicon-32.png">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/pitura/ico/favicon-16.png">
|
||||
<script>
|
||||
/* Runs before first paint: removes the `nojs` class set on <html>, so the
|
||||
mobile menu button is only shown when it can actually work. */
|
||||
document.documentElement.classList.remove('nojs');
|
||||
</script>
|
||||
<style>
|
||||
:root{
|
||||
--maxw:1120px;
|
||||
--radius:10px;
|
||||
--bg:#eef1f4;
|
||||
--panel:#ffffff;
|
||||
--ink:#1a2027;
|
||||
--muted:#5b6672;
|
||||
--line:#dfe4ea;
|
||||
--line-strong:#cbd2da;
|
||||
--accent:#2d6cdf;
|
||||
--accent-soft:#e6eefc;
|
||||
--display:"Inter","Segoe UI",system-ui,-apple-system,sans-serif;
|
||||
--body:"Inter","Segoe UI",system-ui,-apple-system,sans-serif;
|
||||
--mono:ui-monospace,"SF Mono",Menlo,Consolas,monospace;
|
||||
--shadow:0 1px 2px rgba(20,30,50,.05);
|
||||
--shadow-lg:0 6px 20px rgba(20,30,50,.08);
|
||||
}
|
||||
*{box-sizing:border-box}
|
||||
html{scroll-behavior:smooth}
|
||||
html,body{margin:0}
|
||||
body{background:var(--bg);color:var(--ink);font-family:var(--body);
|
||||
line-height:1.55;-webkit-font-smoothing:antialiased}
|
||||
.wrap{max-width:var(--maxw);margin:0 auto;padding:0 20px}
|
||||
a{color:var(--accent);text-decoration:none}
|
||||
a:hover{text-decoration:underline}
|
||||
|
||||
/* ---------- Top bar (shared with home and manifesto) ---------- */
|
||||
.topbar{position:sticky;top:0;z-index:30;background:rgba(255,255,255,.86);
|
||||
backdrop-filter:saturate(150%) blur(8px);border-bottom:1px solid var(--line)}
|
||||
.topbar .wrap{display:flex;align-items:center;gap:18px;height:60px}
|
||||
.topbar .logo{display:flex;align-items:center;gap:10px;font-family:var(--display);
|
||||
font-weight:600;color:var(--ink)}
|
||||
.topbar .logo img{width:30px;height:30px;display:block}
|
||||
.topbar .logo span{font-size:15px;letter-spacing:-.01em}
|
||||
.topbar nav{margin-left:auto;display:flex;gap:4px;flex-wrap:wrap}
|
||||
.topbar nav a{color:var(--muted);font-size:13px;padding:7px 11px;border-radius:7px}
|
||||
.topbar nav a:hover{color:var(--ink);background:var(--accent-soft);text-decoration:none}
|
||||
.topbar nav a.active{color:var(--accent);font-weight:600;border:1px solid #cfe0fb;
|
||||
background:var(--accent-soft)}
|
||||
.topbar .x{color:var(--ink);font-weight:600}
|
||||
|
||||
.navtoggle{
|
||||
display:none;margin-left:auto;width:44px;height:44px;flex:none;
|
||||
align-items:center;justify-content:center;
|
||||
background:var(--panel);border:1px solid var(--line-strong);border-radius:9px;
|
||||
color:var(--ink);cursor:pointer;padding:0;
|
||||
}
|
||||
.navtoggle:hover{border-color:var(--accent);color:var(--accent)}
|
||||
.navtoggle .bars{display:block;width:18px;height:2px;background:currentColor;position:relative}
|
||||
.navtoggle .bars::before,.navtoggle .bars::after{
|
||||
content:"";position:absolute;left:0;width:18px;height:2px;background:currentColor}
|
||||
.navtoggle .bars::before{top:-6px}
|
||||
.navtoggle .bars::after{top:6px}
|
||||
.navtoggle[aria-expanded="true"] .bars{background:transparent}
|
||||
.navtoggle[aria-expanded="true"] .bars::before{top:0;transform:rotate(45deg)}
|
||||
.navtoggle[aria-expanded="true"] .bars::after{top:0;transform:rotate(-45deg)}
|
||||
|
||||
/* ---------- Footer (shared) ---------- */
|
||||
footer{border-top:1px solid var(--line);margin-top:56px;padding:34px 0 40px;
|
||||
color:var(--muted);font-size:14px;background:var(--panel)}
|
||||
footer .sig{font-family:var(--display);font-weight:600;color:var(--ink);font-size:16px}
|
||||
footer .links{display:flex;gap:16px;flex-wrap:wrap;margin:14px 0}
|
||||
footer .built{font-size:13px;color:var(--muted);margin-top:8px}
|
||||
|
||||
@media (max-width:900px){
|
||||
.navtoggle{display:inline-flex}
|
||||
.topbar nav{
|
||||
position:absolute;top:100%;left:0;right:0;
|
||||
margin-left:0;display:none;flex-direction:column;gap:2px;flex-wrap:nowrap;
|
||||
background:var(--panel);border-bottom:1px solid var(--line);
|
||||
box-shadow:var(--shadow-lg);padding:10px 20px 16px;
|
||||
}
|
||||
.topbar nav.open{display:flex}
|
||||
.topbar nav a{font-size:15.5px;padding:0 12px;min-height:44px;
|
||||
display:flex;align-items:center;border-radius:8px}
|
||||
}
|
||||
@media (prefers-reduced-motion:reduce){*{transition:none!important;scroll-behavior:auto!important}}
|
||||
:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
|
||||
|
||||
/*
|
||||
Without JavaScript the panel cannot be toggled, so the links are shown
|
||||
inline. On narrow screens they wrap under the logo and the bar is allowed
|
||||
to grow, instead of being clipped by the fixed 60px height.
|
||||
*/
|
||||
.nojs .navtoggle{display:none}
|
||||
.nojs .topbar nav{position:static;display:flex;flex-direction:row;flex-wrap:wrap;
|
||||
box-shadow:none;border-bottom:0;padding:0;margin-left:auto;background:transparent}
|
||||
@media (max-width:900px){
|
||||
.nojs .topbar .wrap{height:auto;min-height:56px;flex-wrap:wrap;padding-bottom:8px;gap:10px}
|
||||
.nojs .topbar nav{margin-left:0;width:100%;gap:4px 6px}
|
||||
.nojs .topbar nav a{font-size:14.5px;min-height:40px;padding:0 10px;
|
||||
display:flex;align-items:center;border:1px solid var(--line);border-radius:8px}
|
||||
}
|
||||
|
||||
.post-head{padding:44px 0 30px;border-bottom:1px solid var(--line);
|
||||
background:radial-gradient(820px 280px at 50% -40%,var(--accent-soft),transparent 70%)}
|
||||
.post-head .wrap{max-width:760px}
|
||||
.post-head .eyebrow{font-family:var(--mono);font-size:12px;letter-spacing:.14em;
|
||||
text-transform:uppercase;color:var(--accent);display:block;margin-bottom:14px}
|
||||
.post-head h1{font-family:var(--display);font-weight:600;font-size:40px;
|
||||
letter-spacing:-.02em;line-height:1.12;margin:0 0 14px}
|
||||
.post-meta{display:flex;gap:14px;align-items:center;flex-wrap:wrap;
|
||||
font-size:13px;color:var(--muted)}
|
||||
.post-meta .dot{width:4px;height:4px;border-radius:50%;background:var(--line-strong)}
|
||||
|
||||
.article{max-width:760px;margin:0 auto;padding:34px 20px 8px}
|
||||
.article p{font-size:17px;line-height:1.8;color:#36404b;margin:0 0 20px}
|
||||
.article p strong{color:var(--ink);font-weight:600}
|
||||
.article h2{font-family:var(--display);font-weight:600;font-size:25px;
|
||||
letter-spacing:-.01em;margin:38px 0 14px;padding-bottom:10px;
|
||||
border-bottom:1px solid var(--line-strong)}
|
||||
.article ol{padding-left:22px;margin:0 0 20px}
|
||||
.article li{font-size:17px;line-height:1.8;color:#36404b;margin-bottom:14px}
|
||||
.article li strong{color:var(--ink);font-weight:600}
|
||||
.article figure{margin:30px 0}
|
||||
.article figure img{width:100%;height:auto;display:block;border-radius:var(--radius);
|
||||
border:1px solid var(--line);box-shadow:var(--shadow)}
|
||||
.article hr{border:0;border-top:1px solid var(--line-strong);margin:34px 0 22px}
|
||||
.article .disclaimer{font-size:14px;color:var(--muted);font-style:italic;line-height:1.7}
|
||||
.back{max-width:760px;margin:26px auto 0;padding:0 20px 8px}
|
||||
.back a{font-size:14px;font-weight:600}
|
||||
|
||||
@media (max-width:700px){
|
||||
.post-head{padding:30px 0 24px}
|
||||
.post-head h1{font-size:29px}
|
||||
.article{padding:28px 18px 8px}
|
||||
.article h2{font-size:22px;margin-top:32px}
|
||||
.article figure{margin:24px -18px}
|
||||
.article figure img{border-radius:0;border-left:0;border-right:0}
|
||||
}
|
||||
@media (max-width:400px){
|
||||
.post-head h1{font-size:25px}
|
||||
.wrap{padding:0 15px}
|
||||
.article{padding:24px 16px 8px}
|
||||
.article figure{margin:22px -16px}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="topbar">
|
||||
<div class="wrap">
|
||||
<a class="logo" href="../index.html"><img src="../pitura/logo/Logo_nero.svg" alt="Bitcoin After Life logo"><span translate="no">Bitcoin After Life</span></a>
|
||||
<button class="navtoggle" id="navToggle" type="button"
|
||||
aria-expanded="false" aria-controls="mainNav" aria-label="Open menu">
|
||||
<span class="bars"></span>
|
||||
</button>
|
||||
<nav id="mainNav">
|
||||
<a href="../index.html#features">Features</a>
|
||||
<a href="../index.html#how">How it works</a>
|
||||
<a href="../index.html#plugin">Plugin</a>
|
||||
<a href="../index.html#faq">FAQ</a>
|
||||
<a class="active" href="../blog.html">Blog</a>
|
||||
<a href="../manifesto.html">Manifesto</a>
|
||||
<a class="x" href="https://x.com/BitcoinAfterLif" title="@BitcoinAfterLif on X">@X</a>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<main>
|
||||
<header class="post-head">
|
||||
<div class="wrap">
|
||||
<span class="eyebrow">Blog</span>
|
||||
<h1>What Happens to Your Bitcoin When You're Gone?</h1>
|
||||
<div class="post-meta">
|
||||
<time datetime="2026-08-15">15 August 2026</time>
|
||||
<span class="dot"></span>
|
||||
<span translate="no">Bitcoin After Life</span>
|
||||
<span class="dot"></span>
|
||||
<span>5 min read</span>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<article class="article">
|
||||
<figure>
|
||||
<img src="img/what-happens-to-your-bitcoin-cover.webp" width="1600" height="900" loading="lazy" alt="The Eternal Ledger — five steps from the inheritance gap to a time-locked handoff that keeps self-custody intact">
|
||||
</figure>
|
||||
|
||||
<p>Self-custody is the whole point of Bitcoin. It is also, quietly, the reason a great deal of it will never move again.</p>
|
||||
<p>You hold your own keys. Nobody can freeze your coins, seize them, or spend them without your permission. But that same guarantee cuts both ways: if you disappear tomorrow — an accident, an illness, or simply a hard drive that dies at the wrong moment — nobody can help your family either. Not a bank. Not a court. Not the developers of your wallet. Bitcoin does exactly what it promised: it obeys the keys, and only the keys.</p>
|
||||
<p>Most people who hold Bitcoin know this in the abstract. Very few have done anything about it.</p>
|
||||
|
||||
<h2>The scale of the problem</h2>
|
||||
<p>Nobody can count lost coins precisely — the blockchain does not flag them — but analysts converge on a striking range. Estimates from Chainalysis and others put the number of permanently inaccessible bitcoin somewhere between 2.3 and 4 million BTC, roughly 11 to 18 percent of the 21 million cap.<sup>1</sup> Some of that is early mining rewards nobody ever claimed. Some is a discarded laptop, a forgotten password, a paper wallet that went through the wash.</p>
|
||||
<p>And a meaningful share is a simpler story: someone died, and no one else knew where the keys were, or how to use them.</p>
|
||||
<p>Every one of those coins is still visible on-chain. You can look them up. They will sit there forever, doing nothing, because a private key that nobody holds is indistinguishable from a private key that never existed.</p>
|
||||
|
||||
<h2>Why "just leave instructions" doesn't work</h2>
|
||||
<p>The natural response is: <em>I'll write it down.</em> Put the seed phrase in an envelope, tell your partner where it is, add a line to your will. Problem solved.</p>
|
||||
<p>It isn't, and it helps to be honest about why. The usual approaches to Bitcoin inheritance all quietly break the thing they are trying to protect:</p>
|
||||
<ul style="padding-left:22px">
|
||||
<li><strong>Give your seed phrase to a family member.</strong> Now two people can move your coins — <em>today</em>, not after you're gone. You have not created a backup; you have created a co-owner, and one who may not understand what they are holding.</li>
|
||||
<li><strong>Hand the coins to a custodian.</strong> A trusted third party will hold them and release them to your heirs. That is a perfectly valid choice — but it is no longer self-custody. You are back to trusting an institution to still exist, still be solvent, and still be willing when the time comes.</li>
|
||||
<li><strong>Write it into a legal will.</strong> Executors and lawyers are excellent at transferring houses and bank accounts. Most of them have never restored a wallet from a seed phrase, and a will is a public document that will eventually name exactly where the funds are.</li>
|
||||
<li><strong>Do nothing and hope.</strong> Statistically the most common option — and the one those 2.3 to 4 million coins came from.</li>
|
||||
</ul>
|
||||
<p>Each of these trades one risk for another. None of them lets you keep full control today while guaranteeing your heirs receive the coins tomorrow.</p>
|
||||
|
||||
<h2>What Bitcoin itself allows</h2>
|
||||
<p>Here is the part that is easy to miss: the Bitcoin protocol already contains the tool for this. It is called a <strong>time-locked transaction</strong>.</p>
|
||||
<p>You can sign a transaction <em>now</em> that Bitcoin will refuse to accept until a date you choose. Until that date, the network's own consensus rules reject it — no one can broadcast it early, not even you. After that date, anyone holding the signed transaction can send it to the network, and it will confirm.</p>
|
||||
<p>That single primitive changes the shape of the problem. You no longer need to give anyone your keys. You need to give someone a <em>pre-signed transaction</em> that only becomes valid in the future — and make sure at least one of them is still around to broadcast it when the time comes.</p>
|
||||
<p>Which raises the obvious question: <em>who?</em></p>
|
||||
|
||||
<h2>Where Bitcoin After Life comes in</h2>
|
||||
<p><span translate="no">Bitcoin After Life</span> (BAL) is an open-source plugin for Electrum that turns that primitive into something a normal person can actually use. You choose your heirs and a delivery date. The plugin builds the time-locked transaction, Electrum signs it locally — your keys never leave your device — and the signed transaction is handed to a network of independent <strong>Will-Executor</strong> servers whose only job is to broadcast it on the date you set.</p>
|
||||
<p>They cannot spend it. They cannot alter it. They cannot broadcast it early, because Bitcoin won't let them. And because the same transaction is held by several of them, no single server needs to survive for your plan to work — only one has to.</p>
|
||||
<p>If you are still here when the date approaches, you simply renew. If you are not, your coins go where you said they should — with no notary, no custodian, and no one ever holding your keys but you.</p>
|
||||
<p>Self-custody was never meant to end with you. Bitcoin already has the tools to make sure it doesn't. Read how the protocol works — and what a Will-Executor can and cannot see — in the manual: <a href="https://bitcoin-after.life/docs/" target="_blank" rel="noopener">bitcoin-after.life/docs</a></p>
|
||||
|
||||
<hr>
|
||||
<p class="disclaimer"><sup>1</sup> Ranges vary by methodology and year; the 2.3–4 million BTC figure reflects estimates cited by Chainalysis, Ledger, and River Financial. The exact number is unknowable, and that uncertainty is part of the point.</p>
|
||||
</article>
|
||||
|
||||
<div class="back">
|
||||
<a href="../blog.html">← Back to the blog</a>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<div class="wrap">
|
||||
<div class="sig">Svātantrya</div>
|
||||
<div>Signed — <span translate="no">Bitcoin After Life</span> Protocol</div>
|
||||
<div class="links">
|
||||
<a href="https://bitcoin-after.life">bitcoin-after.life</a>
|
||||
<a href="mailto:info@bitcoin-after.life">info@bitcoin-after.life</a>
|
||||
<a href="https://x.com/BitcoinAfterLif">@BitcoinAfterLif</a>
|
||||
<a href="https://bitcoin-after.life/pgp">PGP Key</a>
|
||||
<a href="https://bitcoin-after.life/gitea/bitcoinafterlife">Source Code</a>
|
||||
</div>
|
||||
<div class="built">Built with ₿itcoin. No FIAT was used in the making of this protocol.</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<script>
|
||||
/* Mobile menu toggle -- identical behaviour across all pages. */
|
||||
(function () {
|
||||
const toggle = document.getElementById('navToggle');
|
||||
const nav = document.getElementById('mainNav');
|
||||
if (!toggle || !nav) return;
|
||||
|
||||
function setOpen(open) {
|
||||
nav.classList.toggle('open', open);
|
||||
toggle.setAttribute('aria-expanded', open ? 'true' : 'false');
|
||||
toggle.setAttribute('aria-label', open ? 'Close menu' : 'Open menu');
|
||||
}
|
||||
|
||||
toggle.addEventListener('click', function () {
|
||||
setOpen(!nav.classList.contains('open'));
|
||||
});
|
||||
nav.addEventListener('click', function (e) {
|
||||
if (e.target.tagName === 'A') setOpen(false);
|
||||
});
|
||||
document.addEventListener('keydown', function (e) {
|
||||
if (e.key === 'Escape') setOpen(false);
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
318
blog/why-electrum-and-timelocks.html
Normal file
@@ -0,0 +1,318 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" class="nojs">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Why We Built BAL as an Electrum Plugin — and Why Timelocks Remove the Need for Trust — Bitcoin After Life</title>
|
||||
<meta name="description" content="Signing is the most security-critical operation in Bitcoin, so BAL never signs. How building on Electrum and on nLocktime replaces trust with consensus rules and on-chain incentives.">
|
||||
<meta property="og:type" content="article">
|
||||
<meta property="og:site_name" content="Bitcoin After Life">
|
||||
<meta property="og:title" content="Why We Built BAL as an Electrum Plugin — and Why Timelocks Remove the Need for Trust — Bitcoin After Life">
|
||||
<meta property="og:description" content="Signing is the most security-critical operation in Bitcoin, so BAL never signs. How building on Electrum and on nLocktime replaces trust with consensus rules and on-chain incentives.">
|
||||
<meta property="og:url" content="https://bitcoin-after.life/blog/why-electrum-and-timelocks.html">
|
||||
<meta property="og:image" content="https://bitcoin-after.life/pitura/og-default.png">
|
||||
<meta property="og:image:width" content="1200">
|
||||
<meta property="og:image:height" content="630">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:site" content="@BitcoinAfterLif">
|
||||
<meta name="twitter:title" content="Why We Built BAL as an Electrum Plugin — and Why Timelocks Remove the Need for Trust — Bitcoin After Life">
|
||||
<meta name="twitter:description" content="Signing is the most security-critical operation in Bitcoin, so BAL never signs. How building on Electrum and on nLocktime replaces trust with consensus rules and on-chain incentives.">
|
||||
<meta name="twitter:image" content="https://bitcoin-after.life/pitura/og-default.png">
|
||||
<meta name="theme-color" content="#2d6cdf">
|
||||
<link rel="canonical" href="https://bitcoin-after.life/blog/why-electrum-and-timelocks.html">
|
||||
<link rel="icon" type="image/x-icon" href="/pitura/ico/Logo_nero.ico">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="/pitura/ico/favicon-32.png">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/pitura/ico/favicon-16.png">
|
||||
<script>
|
||||
/* Runs before first paint: removes the `nojs` class set on <html>, so the
|
||||
mobile menu button is only shown when it can actually work. */
|
||||
document.documentElement.classList.remove('nojs');
|
||||
</script>
|
||||
<style>
|
||||
:root{
|
||||
--maxw:1120px;
|
||||
--radius:10px;
|
||||
--bg:#eef1f4;
|
||||
--panel:#ffffff;
|
||||
--ink:#1a2027;
|
||||
--muted:#5b6672;
|
||||
--line:#dfe4ea;
|
||||
--line-strong:#cbd2da;
|
||||
--accent:#2d6cdf;
|
||||
--accent-soft:#e6eefc;
|
||||
--display:"Inter","Segoe UI",system-ui,-apple-system,sans-serif;
|
||||
--body:"Inter","Segoe UI",system-ui,-apple-system,sans-serif;
|
||||
--mono:ui-monospace,"SF Mono",Menlo,Consolas,monospace;
|
||||
--shadow:0 1px 2px rgba(20,30,50,.05);
|
||||
--shadow-lg:0 6px 20px rgba(20,30,50,.08);
|
||||
}
|
||||
*{box-sizing:border-box}
|
||||
html{scroll-behavior:smooth}
|
||||
html,body{margin:0}
|
||||
body{background:var(--bg);color:var(--ink);font-family:var(--body);
|
||||
line-height:1.55;-webkit-font-smoothing:antialiased}
|
||||
.wrap{max-width:var(--maxw);margin:0 auto;padding:0 20px}
|
||||
a{color:var(--accent);text-decoration:none}
|
||||
a:hover{text-decoration:underline}
|
||||
|
||||
/* ---------- Top bar (shared with home and manifesto) ---------- */
|
||||
.topbar{position:sticky;top:0;z-index:30;background:rgba(255,255,255,.86);
|
||||
backdrop-filter:saturate(150%) blur(8px);border-bottom:1px solid var(--line)}
|
||||
.topbar .wrap{display:flex;align-items:center;gap:18px;height:60px}
|
||||
.topbar .logo{display:flex;align-items:center;gap:10px;font-family:var(--display);
|
||||
font-weight:600;color:var(--ink)}
|
||||
.topbar .logo img{width:30px;height:30px;display:block}
|
||||
.topbar .logo span{font-size:15px;letter-spacing:-.01em}
|
||||
.topbar nav{margin-left:auto;display:flex;gap:4px;flex-wrap:wrap}
|
||||
.topbar nav a{color:var(--muted);font-size:13px;padding:7px 11px;border-radius:7px}
|
||||
.topbar nav a:hover{color:var(--ink);background:var(--accent-soft);text-decoration:none}
|
||||
.topbar nav a.active{color:var(--accent);font-weight:600;border:1px solid #cfe0fb;
|
||||
background:var(--accent-soft)}
|
||||
.topbar .x{color:var(--ink);font-weight:600}
|
||||
|
||||
.navtoggle{
|
||||
display:none;margin-left:auto;width:44px;height:44px;flex:none;
|
||||
align-items:center;justify-content:center;
|
||||
background:var(--panel);border:1px solid var(--line-strong);border-radius:9px;
|
||||
color:var(--ink);cursor:pointer;padding:0;
|
||||
}
|
||||
.navtoggle:hover{border-color:var(--accent);color:var(--accent)}
|
||||
.navtoggle .bars{display:block;width:18px;height:2px;background:currentColor;position:relative}
|
||||
.navtoggle .bars::before,.navtoggle .bars::after{
|
||||
content:"";position:absolute;left:0;width:18px;height:2px;background:currentColor}
|
||||
.navtoggle .bars::before{top:-6px}
|
||||
.navtoggle .bars::after{top:6px}
|
||||
.navtoggle[aria-expanded="true"] .bars{background:transparent}
|
||||
.navtoggle[aria-expanded="true"] .bars::before{top:0;transform:rotate(45deg)}
|
||||
.navtoggle[aria-expanded="true"] .bars::after{top:0;transform:rotate(-45deg)}
|
||||
|
||||
/* ---------- Footer (shared) ---------- */
|
||||
footer{border-top:1px solid var(--line);margin-top:56px;padding:34px 0 40px;
|
||||
color:var(--muted);font-size:14px;background:var(--panel)}
|
||||
footer .sig{font-family:var(--display);font-weight:600;color:var(--ink);font-size:16px}
|
||||
footer .links{display:flex;gap:16px;flex-wrap:wrap;margin:14px 0}
|
||||
footer .built{font-size:13px;color:var(--muted);margin-top:8px}
|
||||
|
||||
@media (max-width:900px){
|
||||
.navtoggle{display:inline-flex}
|
||||
.topbar nav{
|
||||
position:absolute;top:100%;left:0;right:0;
|
||||
margin-left:0;display:none;flex-direction:column;gap:2px;flex-wrap:nowrap;
|
||||
background:var(--panel);border-bottom:1px solid var(--line);
|
||||
box-shadow:var(--shadow-lg);padding:10px 20px 16px;
|
||||
}
|
||||
.topbar nav.open{display:flex}
|
||||
.topbar nav a{font-size:15.5px;padding:0 12px;min-height:44px;
|
||||
display:flex;align-items:center;border-radius:8px}
|
||||
}
|
||||
@media (prefers-reduced-motion:reduce){*{transition:none!important;scroll-behavior:auto!important}}
|
||||
:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
|
||||
|
||||
/*
|
||||
Without JavaScript the panel cannot be toggled, so the links are shown
|
||||
inline. On narrow screens they wrap under the logo and the bar is allowed
|
||||
to grow, instead of being clipped by the fixed 60px height.
|
||||
*/
|
||||
.nojs .navtoggle{display:none}
|
||||
.nojs .topbar nav{position:static;display:flex;flex-direction:row;flex-wrap:wrap;
|
||||
box-shadow:none;border-bottom:0;padding:0;margin-left:auto;background:transparent}
|
||||
@media (max-width:900px){
|
||||
.nojs .topbar .wrap{height:auto;min-height:56px;flex-wrap:wrap;padding-bottom:8px;gap:10px}
|
||||
.nojs .topbar nav{margin-left:0;width:100%;gap:4px 6px}
|
||||
.nojs .topbar nav a{font-size:14.5px;min-height:40px;padding:0 10px;
|
||||
display:flex;align-items:center;border:1px solid var(--line);border-radius:8px}
|
||||
}
|
||||
|
||||
.post-head{padding:44px 0 30px;border-bottom:1px solid var(--line);
|
||||
background:radial-gradient(820px 280px at 50% -40%,var(--accent-soft),transparent 70%)}
|
||||
.post-head .wrap{max-width:760px}
|
||||
.post-head .eyebrow{font-family:var(--mono);font-size:12px;letter-spacing:.14em;
|
||||
text-transform:uppercase;color:var(--accent);display:block;margin-bottom:14px}
|
||||
.post-head h1{font-family:var(--display);font-weight:600;font-size:40px;
|
||||
letter-spacing:-.02em;line-height:1.12;margin:0 0 14px}
|
||||
.post-meta{display:flex;gap:14px;align-items:center;flex-wrap:wrap;
|
||||
font-size:13px;color:var(--muted)}
|
||||
.post-meta .dot{width:4px;height:4px;border-radius:50%;background:var(--line-strong)}
|
||||
|
||||
.article{max-width:760px;margin:0 auto;padding:34px 20px 8px}
|
||||
.article p{font-size:17px;line-height:1.8;color:#36404b;margin:0 0 20px}
|
||||
.article p strong{color:var(--ink);font-weight:600}
|
||||
.article h2{font-family:var(--display);font-weight:600;font-size:25px;
|
||||
letter-spacing:-.01em;margin:38px 0 14px;padding-bottom:10px;
|
||||
border-bottom:1px solid var(--line-strong)}
|
||||
.article ol{padding-left:22px;margin:0 0 20px}
|
||||
.article li{font-size:17px;line-height:1.8;color:#36404b;margin-bottom:14px}
|
||||
.article li strong{color:var(--ink);font-weight:600}
|
||||
.article figure{margin:30px 0}
|
||||
.article figure img{width:100%;height:auto;display:block;border-radius:var(--radius);
|
||||
border:1px solid var(--line);box-shadow:var(--shadow)}
|
||||
.article hr{border:0;border-top:1px solid var(--line-strong);margin:34px 0 22px}
|
||||
.article .disclaimer{font-size:14px;color:var(--muted);font-style:italic;line-height:1.7}
|
||||
|
||||
/*
|
||||
Inline code and the comparison table: this post is the first to need them.
|
||||
Both reuse the existing palette tokens so nothing new is introduced visually.
|
||||
*/
|
||||
.article code{font-family:var(--mono);font-size:.9em;background:var(--accent-soft);
|
||||
color:var(--ink);padding:2px 6px;border-radius:5px}
|
||||
/* The wrapper scrolls on narrow screens so the page body never scrolls sideways. */
|
||||
.article .tablewrap{overflow-x:auto;margin:0 0 22px;-webkit-overflow-scrolling:touch}
|
||||
.article table{width:100%;border-collapse:collapse;font-size:15.5px;min-width:480px}
|
||||
.article th,.article td{text-align:left;padding:11px 14px;border:1px solid var(--line);
|
||||
line-height:1.6;color:#36404b;vertical-align:top}
|
||||
.article th{font-family:var(--display);font-weight:600;color:var(--ink);
|
||||
background:var(--accent-soft)}
|
||||
|
||||
.back{max-width:760px;margin:26px auto 0;padding:0 20px 8px}
|
||||
.back a{font-size:14px;font-weight:600}
|
||||
|
||||
@media (max-width:700px){
|
||||
.post-head{padding:30px 0 24px}
|
||||
.post-head h1{font-size:29px}
|
||||
.article{padding:28px 18px 8px}
|
||||
.article h2{font-size:22px;margin-top:32px}
|
||||
.article figure{margin:24px -18px}
|
||||
.article figure img{border-radius:0;border-left:0;border-right:0}
|
||||
}
|
||||
@media (max-width:400px){
|
||||
.post-head h1{font-size:25px}
|
||||
.wrap{padding:0 15px}
|
||||
.article{padding:24px 16px 8px}
|
||||
.article figure{margin:22px -16px}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="topbar">
|
||||
<div class="wrap">
|
||||
<a class="logo" href="../index.html"><img src="../pitura/logo/Logo_nero.svg" alt="Bitcoin After Life logo"><span translate="no">Bitcoin After Life</span></a>
|
||||
<button class="navtoggle" id="navToggle" type="button"
|
||||
aria-expanded="false" aria-controls="mainNav" aria-label="Open menu">
|
||||
<span class="bars"></span>
|
||||
</button>
|
||||
<nav id="mainNav">
|
||||
<a href="../index.html#features">Features</a>
|
||||
<a href="../index.html#how">How it works</a>
|
||||
<a href="../index.html#plugin">Plugin</a>
|
||||
<a href="../index.html#faq">FAQ</a>
|
||||
<a class="active" href="../blog.html">Blog</a>
|
||||
<a href="../manifesto.html">Manifesto</a>
|
||||
<a class="x" href="https://x.com/BitcoinAfterLif" title="@BitcoinAfterLif on X">@X</a>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<main>
|
||||
<header class="post-head">
|
||||
<div class="wrap">
|
||||
<span class="eyebrow">Blog</span>
|
||||
<h1>Why We Built BAL as an Electrum Plugin — and Why Timelocks Remove the Need for Trust</h1>
|
||||
<div class="post-meta">
|
||||
<time datetime="2026-08-23">23 August 2026</time>
|
||||
<span class="dot"></span>
|
||||
<span translate="no">Bitcoin After Life</span>
|
||||
<span class="dot"></span>
|
||||
<span>4 min read</span>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<article class="article">
|
||||
<figure>
|
||||
<img src="img/why-electrum-and-timelocks.webp" width="1600" height="900" loading="lazy" alt="Temporal Seal — a padlock shaped like a clock holding a signed Bitcoin document">
|
||||
</figure>
|
||||
|
||||
<p>When people first hear about <span translate="no">Bitcoin After Life</span>, two questions arrive almost immediately. The first: <em>"Why a plugin for Electrum instead of your own wallet?"</em> The second: <em>"And why should I trust these Will-Executor servers with my inheritance?"</em></p>
|
||||
<p>Both questions have the same answer, and it is the design philosophy at the core of the whole protocol: <strong>don't ask people to trust you — build a system where trust is not required.</strong></p>
|
||||
|
||||
<h2>Why Electrum: signing is sacred</h2>
|
||||
<p>The single most security-critical operation in Bitcoin is signing a transaction. Everything else — addresses, balances, broadcasting — is public and verifiable. Signing is where your private keys touch the world, and it is where wallets live or die.</p>
|
||||
<p>Electrum has been signing Bitcoin transactions since 2011. It is one of the oldest, most audited, most battle-tested pieces of software in the entire ecosystem. It supports hardware wallets, it works offline for air-gapped signing, and millions of users have stress-tested it against every edge case imaginable for over a decade.</p>
|
||||
<p>Building a new wallet from scratch would have meant asking users to trust <em>our</em> signing code with <em>their</em> life savings. We refused. The BAL plugin never signs anything. It builds the transaction, shows it to you, and then asks Electrum — your Electrum, with your keys, your password, your hardware wallet — to sign it. The plugin asks; you decide. Your keys never leave your device, and the signing process is entirely independent of BAL.</p>
|
||||
<p>This choice also shrinks the attack surface dramatically: BAL's code handles no secrets, so there is nothing in it worth stealing.</p>
|
||||
|
||||
<h2>Why timelocks: consensus, not promises</h2>
|
||||
<p>The second pillar is <code>nLocktime</code>, a feature built into the Bitcoin protocol itself since the very beginning.</p>
|
||||
<p>A time-locked transaction is a normal, fully signed Bitcoin transaction with one special property: it carries a timestamp, and <strong>Bitcoin nodes will reject it until that moment arrives</strong>. Not "should reject" — <em>will</em> reject. It is not a policy of any company or server. It is a consensus rule, enforced by the same mathematics that prevents double-spending.</p>
|
||||
<p>This changes the entire trust equation of inheritance:</p>
|
||||
<ul style="padding-left:22px">
|
||||
<li><strong>No one can execute your will early.</strong> Not an impatient heir, not a compromised server, not a bug. Before the delivery date, the transaction simply does not exist as far as the network is concerned.</li>
|
||||
<li><strong>No one can alter it.</strong> The transaction is already fully signed by your key. Changing a single satoshi would invalidate the signature.</li>
|
||||
<li><strong>No one can steal with it.</strong> The outputs are fixed at signing time: your heirs' addresses and the executor's fee. A Will-Executor holding the transaction holds something that can only ever pay <em>your</em> chosen destinations.</li>
|
||||
</ul>
|
||||
|
||||
<h2>What Will-Executors actually are (and are not)</h2>
|
||||
<p>With timelocks in place, the role of the Will-Executor becomes almost boring — and that is precisely the point. A Will-Executor server does exactly two things:</p>
|
||||
<ol>
|
||||
<li><strong>Store</strong> your signed, time-locked transaction.</li>
|
||||
<li><strong>Broadcast</strong> it to the Bitcoin network when the delivery date arrives.</li>
|
||||
</ol>
|
||||
<p>It cannot peek at the future, cannot modify the transaction, cannot redirect the funds. It is closer to an automated mailbox than to a bank. And its incentive to behave is not reputational or legal — it is <strong>on-chain</strong>: each inheritance transaction includes a fee for the executor, which is only paid when the transaction confirms. The server earns nothing unless the inheritance executes exactly as you designed it.</p>
|
||||
<p>Redundancy completes the picture. The plugin creates one transaction per selected Will-Executor, drawn from the public WeList directory. Only one of them needs to still be operating on the delivery date for your will to execute. The first to broadcast wins the fee — a built-in race that keeps every executor honest and punctual.</p>
|
||||
|
||||
<h2>Trust, deleted</h2>
|
||||
<p>The history of crypto is littered with "trust us" — trusted exchanges, trusted custodians, trusted recovery services — and with the wreckage left when that trust broke. BAL's architecture is an attempt to delete the word entirely:</p>
|
||||
<div class="tablewrap">
|
||||
<table>
|
||||
<thead>
|
||||
<tr><th>Concern</th><th>Traditional answer</th><th>BAL's answer</th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr><td>Who holds my keys?</td><td>A custodian</td><td>Only you, in Electrum</td></tr>
|
||||
<tr><td>Who controls the timing?</td><td>A court</td><td>Bitcoin consensus (<code>nLocktime</code>)</td></tr>
|
||||
<tr><td>Who executes the will?</td><td>A lawyer</td><td>A redundant network of incentivized servers</td></tr>
|
||||
<tr><td>What stops abuse?</td><td>Legal liability</td><td>Mathematics and game theory</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<p>If you are the kind of person who verifies instead of trusting — and if you hold your own keys, you probably are — both the plugin and the server are open source, MIT-licensed, and waiting for your review on our <a href="https://bitcoin-after.life/gitea/bitcoinafterlife" target="_blank" rel="noopener">Gitea</a>. The full protocol walkthrough is in the <a href="https://bitcoin-after.life/docs/protocol/how-it-works.html" target="_blank" rel="noopener">manual</a>, and we recommend everyone starts on testnet.</p>
|
||||
<p>Don't trust. Verify. Then, and only then, plan.</p>
|
||||
</article>
|
||||
|
||||
<div class="back">
|
||||
<a href="../blog.html">← Back to the blog</a>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<div class="wrap">
|
||||
<div class="sig">Svātantrya</div>
|
||||
<div>Signed — <span translate="no">Bitcoin After Life</span> Protocol</div>
|
||||
<div class="links">
|
||||
<a href="https://bitcoin-after.life">bitcoin-after.life</a>
|
||||
<a href="mailto:info@bitcoin-after.life">info@bitcoin-after.life</a>
|
||||
<a href="https://x.com/BitcoinAfterLif">@BitcoinAfterLif</a>
|
||||
<a href="https://bitcoin-after.life/pgp">PGP Key</a>
|
||||
<a href="https://bitcoin-after.life/gitea/bitcoinafterlife">Source Code</a>
|
||||
</div>
|
||||
<div class="built">Built with ₿itcoin. No FIAT was used in the making of this protocol.</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<script>
|
||||
/* Mobile menu toggle -- identical behaviour across all pages. */
|
||||
(function () {
|
||||
const toggle = document.getElementById('navToggle');
|
||||
const nav = document.getElementById('mainNav');
|
||||
if (!toggle || !nav) return;
|
||||
|
||||
function setOpen(open) {
|
||||
nav.classList.toggle('open', open);
|
||||
toggle.setAttribute('aria-expanded', open ? 'true' : 'false');
|
||||
toggle.setAttribute('aria-label', open ? 'Close menu' : 'Open menu');
|
||||
}
|
||||
|
||||
toggle.addEventListener('click', function () {
|
||||
setOpen(!nav.classList.contains('open'));
|
||||
});
|
||||
nav.addEventListener('click', function (e) {
|
||||
if (e.target.tagName === 'A') setOpen(false);
|
||||
});
|
||||
document.addEventListener('keydown', function (e) {
|
||||
if (e.key === 'Escape') setOpen(false);
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
BIN
favicon.ico
Normal file
|
After Width: | Height: | Size: 28 KiB |
929
index.html
@@ -1,89 +1,870 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang=en>
|
||||
<html lang="en" class="nojs">
|
||||
<head>
|
||||
<title>B.A.L.</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="stylesheet" href="w3.css">
|
||||
<link rel="icon" href="pitura/ico/Logo_nero.ico" type="image/x-icon">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Bitcoin After Life Protocol — Decentralized Bitcoin Inheritance</title>
|
||||
<meta name="description" content="Bitcoin After Life (BAL) Protocol — Decentralized Bitcoin inheritance through time-locked transactions. No notary, no custodian. Open-source Electrum plugin and Will-Executor network.">
|
||||
<link rel="icon" type="image/x-icon" href="/pitura/ico/Logo_nero.ico">
|
||||
<link rel="canonical" href="https://bitcoin-after.life/index.html">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:site_name" content="Bitcoin After Life">
|
||||
<meta property="og:title" content="Bitcoin After Life Protocol — Decentralized Bitcoin Inheritance">
|
||||
<meta property="og:description" content="Decentralized Bitcoin inheritance through time-locked transactions. No notary, no lawyer, no custodian. Open-source Electrum plugin and Will-Executor network.">
|
||||
<meta property="og:url" content="https://bitcoin-after.life/index.html">
|
||||
<meta property="og:image" content="https://bitcoin-after.life/pitura/og-default.png">
|
||||
<meta property="og:image:width" content="1200">
|
||||
<meta property="og:image:height" content="630">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:site" content="@BitcoinAfterLif">
|
||||
<meta name="twitter:title" content="Bitcoin After Life Protocol — Decentralized Bitcoin Inheritance">
|
||||
<meta name="twitter:description" content="Decentralized Bitcoin inheritance through time-locked transactions. No notary, no lawyer, no custodian. Open-source Electrum plugin and Will-Executor network.">
|
||||
<meta name="twitter:image" content="https://bitcoin-after.life/pitura/og-default.png">
|
||||
<meta name="theme-color" content="#2d6cdf">
|
||||
<script>
|
||||
/* Runs before first paint: removes the `nojs` class set on <html>, so the
|
||||
mobile menu button is only shown when it can actually work. */
|
||||
document.documentElement.classList.remove('nojs');
|
||||
</script>
|
||||
<!--
|
||||
=========================================================
|
||||
Bitcoin After Life Protocol — landing page
|
||||
Visual system: "Slate" (adapted from bal-welist-preview.html)
|
||||
Accent: blue (#2d6cdf), faithful to the reference file.
|
||||
Content: index2.html + updated facts from the GitHub repo
|
||||
(Electrum 4.8.0, PyQt6, install flow, Anticipate/Postpone,
|
||||
Server-column states, release v0.6.1, MIT license).
|
||||
All UI copy is in English by project convention.
|
||||
=========================================================
|
||||
-->
|
||||
<style>
|
||||
@font-face { font-family: 'Optima'; src: url('pitura/OPTIMA.TTF'); }
|
||||
h1, h2, p {font-family: 'Optima', sans-serif;}
|
||||
:root{
|
||||
--maxw:1120px;
|
||||
--radius:10px;
|
||||
|
||||
--bg:#eef1f4;
|
||||
--panel:#ffffff;
|
||||
--ink:#1a2027;
|
||||
--muted:#5b6672;
|
||||
--line:#dfe4ea;
|
||||
--line-strong:#cbd2da;
|
||||
--accent:#2d6cdf;
|
||||
--accent-soft:#e6eefc;
|
||||
--ok:#1f9d57;
|
||||
--ok-soft:#e3f4ea;
|
||||
--warn:#b5701b;
|
||||
--warn-soft:#fbf0df;
|
||||
|
||||
--display:"Inter","Segoe UI",system-ui,-apple-system,sans-serif;
|
||||
--body:"Inter","Segoe UI",system-ui,-apple-system,sans-serif;
|
||||
--mono:ui-monospace,"SF Mono",Menlo,Consolas,monospace;
|
||||
--shadow:0 1px 2px rgba(20,30,50,.05);
|
||||
--shadow-lg:0 6px 20px rgba(20,30,50,.08);
|
||||
}
|
||||
|
||||
*{box-sizing:border-box}
|
||||
html{scroll-behavior:smooth}
|
||||
html,body{margin:0}
|
||||
body{
|
||||
background:var(--bg);
|
||||
color:var(--ink);
|
||||
font-family:var(--body);
|
||||
line-height:1.55;
|
||||
-webkit-font-smoothing:antialiased;
|
||||
}
|
||||
.wrap{max-width:var(--maxw);margin:0 auto;padding:0 20px}
|
||||
a{color:var(--accent);text-decoration:none}
|
||||
a:hover{text-decoration:underline}
|
||||
section{scroll-margin-top:72px}
|
||||
|
||||
/* ---------- Top bar ---------- */
|
||||
.topbar{
|
||||
position:sticky;top:0;z-index:30;
|
||||
background:rgba(255,255,255,.86);backdrop-filter:saturate(150%) blur(8px);
|
||||
border-bottom:1px solid var(--line);
|
||||
}
|
||||
.topbar .wrap{display:flex;align-items:center;gap:18px;height:60px}
|
||||
.topbar .logo{display:flex;align-items:center;gap:10px;font-family:var(--display);font-weight:600;color:var(--ink)}
|
||||
.topbar .logo img{width:30px;height:30px;display:block}
|
||||
.topbar .logo span{font-size:15px;letter-spacing:-.01em}
|
||||
.topbar nav{margin-left:auto;display:flex;gap:4px;flex-wrap:wrap}
|
||||
.topbar nav a{
|
||||
color:var(--muted);font-size:13px;padding:7px 11px;border-radius:7px;
|
||||
}
|
||||
.topbar nav a:hover{color:var(--ink);background:var(--accent-soft);text-decoration:none}
|
||||
.topbar .x{color:var(--ink);font-weight:600}
|
||||
.topbar nav a.manifesto{color:var(--accent);font-weight:600;border:1px solid #cfe0fb;background:var(--accent-soft)}
|
||||
.topbar nav a.manifesto:hover{background:#d9e7fd;color:var(--accent)}
|
||||
|
||||
/* ---------- Hero ---------- */
|
||||
header.hero{padding:56px 0 40px;border-bottom:1px solid var(--line);background:
|
||||
radial-gradient(900px 300px at 80% -40%,var(--accent-soft),transparent 70%);}
|
||||
.hero .wrap{display:grid;grid-template-columns:1.4fr .9fr;gap:40px;align-items:center}
|
||||
.hero .badge{
|
||||
display:inline-flex;align-items:center;gap:8px;font-size:12px;font-weight:600;
|
||||
color:var(--accent);background:var(--accent-soft);border:1px solid #cfe0fb;
|
||||
padding:5px 11px;border-radius:999px;letter-spacing:.02em;margin-bottom:18px;
|
||||
}
|
||||
.hero h1{
|
||||
font-family:var(--display);font-weight:600;letter-spacing:-.02em;
|
||||
font-size:42px;line-height:1.06;margin:0 0 14px;
|
||||
}
|
||||
.hero h1 .blue{color:var(--accent)}
|
||||
.hero .lead{color:var(--muted);font-size:17px;max-width:540px;margin:0 0 26px}
|
||||
.cta-row{display:grid;grid-template-columns:1fr 1fr;gap:11px;max-width:540px;margin-bottom:22px}
|
||||
.cta-row .btn{justify-content:center;text-align:center}
|
||||
.btn{
|
||||
font:inherit;font-size:14px;font-weight:600;cursor:pointer;text-decoration:none;
|
||||
padding:11px 18px;border-radius:9px;border:1px solid var(--accent);
|
||||
background:var(--accent);color:#fff;display:inline-flex;gap:8px;align-items:center;
|
||||
}
|
||||
.btn:hover{filter:brightness(1.07);text-decoration:none}
|
||||
.btn.ghost{background:var(--panel);color:var(--ink);border-color:var(--line-strong)}
|
||||
.btn.ghost:hover{border-color:var(--accent);color:var(--accent);filter:none}
|
||||
.fiat-note{font-size:13px;color:var(--muted);max-width:540px;line-height:1.6}
|
||||
.fiat-note strong{color:var(--ink)}
|
||||
/* B2 — accent-bar callout for the "Bitcoin-only / no FIAT" statement */
|
||||
.fiat-bar{
|
||||
display:flex;gap:13px;align-items:flex-start;max-width:540px;
|
||||
background:var(--panel);border:1px solid var(--line);border-left:3px solid var(--accent);
|
||||
border-radius:0 10px 10px 0;padding:14px 18px;box-shadow:var(--shadow);
|
||||
}
|
||||
.fiat-bar .btc{font-size:22px;line-height:1.3;color:#f7931a;font-weight:700;flex:none}
|
||||
.fiat-bar .t{font-size:13.5px;line-height:1.6;color:var(--ink)}
|
||||
.fiat-bar .t strong{font-weight:600}
|
||||
.fiat-bar .t .m{color:var(--muted)}
|
||||
|
||||
.hero-card{
|
||||
background:var(--panel);border:1px solid var(--line);border-radius:14px;
|
||||
box-shadow:var(--shadow-lg);padding:30px 28px;text-align:center;
|
||||
}
|
||||
.hero-card img{width:138px;height:138px;margin:0 auto 14px;display:block}
|
||||
.hero-card .name{font-family:var(--display);font-weight:600;font-size:18px}
|
||||
.hero-card .tag{color:var(--muted);font-size:13px;margin-top:2px}
|
||||
.hero-card .stats{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:20px}
|
||||
.hero-card .stat{background:var(--bg);border:1px solid var(--line);border-radius:10px;padding:12px 8px}
|
||||
.hero-card .stat .n{font-family:var(--display);font-weight:600;font-size:20px;line-height:1}
|
||||
.hero-card .stat .l{font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);margin-top:6px}
|
||||
.hero-card .stat .sig{font-size:10px;margin-top:2px;display:none}
|
||||
.hero-card .stat .sig a{color:var(--muted);text-decoration:underline}
|
||||
.hero-card .stat .sig a:hover{color:var(--accent)}
|
||||
|
||||
/* ---------- Section scaffolding ---------- */
|
||||
.section{padding:56px 0}
|
||||
.section.alt{background:var(--panel);border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
|
||||
.eyebrow{font-family:var(--mono);font-size:12px;color:var(--accent);letter-spacing:.12em;text-transform:uppercase;display:block;margin-bottom:10px}
|
||||
.section h2{font-family:var(--display);font-size:28px;font-weight:600;letter-spacing:-.01em;margin:0 0 12px}
|
||||
.section .sub{color:var(--muted);font-size:16px;max-width:760px;margin:0 0 30px}
|
||||
.prose p{color:var(--muted);font-size:15.5px;max-width:820px;margin:0 0 16px}
|
||||
.prose p strong,.prose p em{color:var(--ink)}
|
||||
.prose p em{font-style:italic;font-weight:500}
|
||||
|
||||
/* ---------- Feature grid ---------- */
|
||||
.grid{display:grid;gap:16px}
|
||||
.cols-3{grid-template-columns:repeat(3,1fr)}
|
||||
.cols-2{grid-template-columns:repeat(2,1fr)}
|
||||
.card{
|
||||
background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);
|
||||
padding:24px;box-shadow:var(--shadow);
|
||||
}
|
||||
.section.alt .card{background:var(--bg)}
|
||||
.card .ic{
|
||||
width:42px;height:42px;border-radius:10px;display:grid;place-items:center;
|
||||
background:var(--accent-soft);font-size:20px;margin-bottom:14px;
|
||||
}
|
||||
.card h3{font-size:16px;margin:0 0 8px;letter-spacing:.01em}
|
||||
.card p{font-size:14px;color:var(--muted);margin:0 0 14px;line-height:1.6}
|
||||
.chips{display:flex;gap:6px;flex-wrap:wrap}
|
||||
.chip{
|
||||
font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);
|
||||
border:1px solid var(--line-strong);border-radius:5px;padding:3px 7px;
|
||||
}
|
||||
.card .more{font-size:13px;font-weight:600;color:var(--accent)}
|
||||
|
||||
/* ---------- Steps ---------- */
|
||||
.steps{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
|
||||
.step{
|
||||
background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);
|
||||
padding:22px;box-shadow:var(--shadow);position:relative;
|
||||
}
|
||||
.section.alt .step{background:var(--bg)}
|
||||
.step .no{
|
||||
font-family:var(--mono);font-size:12px;font-weight:600;color:#fff;background:var(--ink);
|
||||
width:26px;height:26px;border-radius:7px;display:grid;place-items:center;margin-bottom:13px;
|
||||
}
|
||||
.step h3{font-size:15px;margin:0 0 7px}
|
||||
.step p{font-size:13.5px;color:var(--muted);margin:0;line-height:1.6}
|
||||
.phase-row{display:flex;gap:10px;flex-wrap:wrap;margin-top:20px}
|
||||
.phase{font-size:12px;color:var(--muted);background:var(--accent-soft);border:1px solid #cfe0fb;border-radius:7px;padding:6px 12px}
|
||||
.phase b{color:var(--ink)}
|
||||
|
||||
/* ---------- Callout ---------- */
|
||||
.callout{
|
||||
display:flex;gap:14px;background:var(--accent-soft);border:1px solid #cfe0fb;
|
||||
border-radius:var(--radius);padding:18px 20px;margin-top:22px;font-size:14px;color:var(--ink);
|
||||
}
|
||||
.callout .k{font-size:20px;line-height:1}
|
||||
.callout.warn{background:var(--warn-soft);border-color:#eed8b4}
|
||||
.callout p{margin:0;line-height:1.6}
|
||||
.callout p strong{font-weight:600}
|
||||
/* FAQ "see the manual" box: match the FAQ column exactly (880px, left-aligned) */
|
||||
.callout.faq-more{max-width:880px}
|
||||
|
||||
/* ---------- Install ---------- */
|
||||
.install-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}
|
||||
.req-list{list-style:none;margin:0;padding:0}
|
||||
.req-list li{display:flex;gap:10px;padding:10px 0;border-bottom:1px solid var(--line);font-size:14px}
|
||||
.req-list li:last-child{border-bottom:0}
|
||||
.req-list .b{font-weight:600;min-width:118px}
|
||||
.req-list .v{color:var(--muted)}
|
||||
pre.code{
|
||||
background:var(--ink);color:#e8edf3;border-radius:10px;padding:16px 18px;
|
||||
font-family:var(--mono);font-size:12.5px;line-height:1.7;overflow-x:auto;margin:0 0 12px;
|
||||
}
|
||||
pre.code .c{color:#8aa0b6}
|
||||
.ol{margin:0;padding-left:20px;color:var(--muted);font-size:14px}
|
||||
.ol li{margin:8px 0;line-height:1.55}
|
||||
.ol code{font-family:var(--mono);background:var(--bg);border:1px solid var(--line);padding:1px 6px;border-radius:5px;color:var(--ink);font-size:12.5px}
|
||||
|
||||
/* ---------- Server states table ---------- */
|
||||
.table-card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;box-shadow:var(--shadow);margin-top:8px}
|
||||
.section.alt .table-card{background:var(--bg)}
|
||||
table{width:100%;border-collapse:collapse;font-size:14px}
|
||||
thead th{
|
||||
text-align:left;font-weight:600;color:var(--muted);font-size:11px;letter-spacing:.08em;
|
||||
text-transform:uppercase;padding:13px 16px;border-bottom:1px solid var(--line-strong);white-space:nowrap;
|
||||
}
|
||||
tbody td{padding:13px 16px;border-bottom:1px solid var(--line);vertical-align:top}
|
||||
tbody tr:last-child td{border-bottom:0}
|
||||
td.label{font-family:var(--mono);font-size:12.5px;color:var(--ink);white-space:nowrap}
|
||||
td.mean{color:var(--muted)}
|
||||
|
||||
/* ---------- FAQ ---------- */
|
||||
.faq{display:grid;gap:10px;max-width:880px}
|
||||
.qa{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden}
|
||||
.section.alt .qa{background:var(--bg)}
|
||||
.qa>summary{
|
||||
list-style:none;cursor:pointer;
|
||||
display:flex;align-items:center;gap:14px;padding:16px 18px;color:var(--ink);
|
||||
}
|
||||
.qa>summary::-webkit-details-marker{display:none}
|
||||
.qa .qn{font-family:var(--mono);font-size:12px;color:var(--accent);font-weight:600;flex:none;width:26px}
|
||||
.qa .qt{font-weight:600;font-size:15px;flex:1}
|
||||
.qa .chev{flex:none;color:var(--muted);transition:transform .2s}
|
||||
.qa[open] .chev{transform:rotate(180deg)}
|
||||
.qa .ans{padding:0 18px 18px 58px;color:var(--muted);font-size:14.5px;line-height:1.65}
|
||||
.qa .ans p{margin:0 0 10px}.qa .ans p:last-child{margin:0}
|
||||
.qa .ans ul{margin:6px 0;padding-left:18px}
|
||||
.qa .ans li{margin:5px 0}
|
||||
.qa .ans strong{color:var(--ink)}
|
||||
.qa .ans em{color:var(--ink);font-style:italic}
|
||||
|
||||
/* ---------- Footer ---------- */
|
||||
footer{border-top:1px solid var(--line);padding:34px 0 40px;color:var(--muted);font-size:14px;background:var(--panel)}
|
||||
footer .sig{font-family:var(--display);font-weight:600;color:var(--ink);font-size:16px}
|
||||
footer .links{display:flex;gap:16px;flex-wrap:wrap;margin:14px 0}
|
||||
footer .built{font-size:13px;color:var(--muted);margin-top:8px}
|
||||
|
||||
/* ---------- Mobile navigation ---------- */
|
||||
/*
|
||||
The hamburger button is hidden on desktop and only revealed under 900px.
|
||||
WHY a button and not the old `display:none` on the links: hiding the nav
|
||||
removed every in-page destination on phones. The button keeps all sections
|
||||
reachable, and the <noscript> rule below keeps the menu usable even when
|
||||
JavaScript is unavailable.
|
||||
*/
|
||||
.navtoggle{
|
||||
display:none;margin-left:auto;
|
||||
width:44px;height:44px;flex:none;
|
||||
align-items:center;justify-content:center;
|
||||
background:var(--panel);border:1px solid var(--line-strong);border-radius:9px;
|
||||
color:var(--ink);cursor:pointer;padding:0;
|
||||
}
|
||||
.navtoggle:hover{border-color:var(--accent);color:var(--accent)}
|
||||
.navtoggle .bars{display:block;width:18px;height:2px;background:currentColor;position:relative}
|
||||
.navtoggle .bars::before,.navtoggle .bars::after{
|
||||
content:"";position:absolute;left:0;width:18px;height:2px;background:currentColor;
|
||||
}
|
||||
.navtoggle .bars::before{top:-6px}
|
||||
.navtoggle .bars::after{top:6px}
|
||||
.navtoggle[aria-expanded="true"] .bars{background:transparent}
|
||||
.navtoggle[aria-expanded="true"] .bars::before{top:0;transform:rotate(45deg)}
|
||||
.navtoggle[aria-expanded="true"] .bars::after{top:0;transform:rotate(-45deg)}
|
||||
|
||||
/* ---------- Responsive ---------- */
|
||||
@media (max-width:900px){
|
||||
.hero .wrap{grid-template-columns:1fr;gap:28px}
|
||||
.hero-card{order:-1}
|
||||
.cols-3,.steps,.install-grid{grid-template-columns:1fr}
|
||||
.cta-row{grid-template-columns:1fr;max-width:none}
|
||||
.cols-2{grid-template-columns:1fr}
|
||||
.hero h1{font-size:34px}
|
||||
|
||||
/* Off-canvas navigation panel, anchored to the sticky top bar. */
|
||||
.navtoggle{display:inline-flex}
|
||||
.topbar nav{
|
||||
position:absolute;top:100%;left:0;right:0;
|
||||
margin-left:0;display:none;flex-direction:column;gap:2px;flex-wrap:nowrap;
|
||||
background:var(--panel);border-bottom:1px solid var(--line);
|
||||
box-shadow:var(--shadow-lg);padding:10px 20px 16px;
|
||||
}
|
||||
.topbar nav.open{display:flex}
|
||||
/* 44px minimum height: the smallest reliable touch target. */
|
||||
.topbar nav a{
|
||||
font-size:15.5px;padding:0 12px;min-height:44px;
|
||||
display:flex;align-items:center;border-radius:8px;
|
||||
}
|
||||
.topbar nav a.manifesto{justify-content:flex-start}
|
||||
}
|
||||
|
||||
/*
|
||||
Type scale for phones. The desktop sizes (14px cards, 13.5px steps,
|
||||
10.5px chips) are legible on a 1440px monitor but tiny on a 6-inch
|
||||
screen, which is the "everything is too small" complaint. Sizes go up
|
||||
on small screens, not down.
|
||||
*/
|
||||
@media (max-width:700px){
|
||||
.wrap{padding:0 18px}
|
||||
header.hero{padding:34px 0 30px}
|
||||
.section{padding:40px 0}
|
||||
.hero .lead{font-size:16.5px}
|
||||
.section .sub{font-size:15.5px}
|
||||
.prose p{font-size:16px}
|
||||
.card p{font-size:15px}
|
||||
.card h3{font-size:17px}
|
||||
.step p{font-size:15px}
|
||||
.step h3{font-size:16px}
|
||||
.chip{font-size:11.5px}
|
||||
.qa .qt{font-size:15.5px}
|
||||
.qa .ans{font-size:15.5px;padding-left:18px}
|
||||
.req-list li{font-size:15px}
|
||||
.ol{font-size:15px}
|
||||
.callout{font-size:15px}
|
||||
.fiat-bar .t{font-size:14.5px}
|
||||
.btn{font-size:15px;padding:13px 18px}
|
||||
footer .links{gap:12px 18px}
|
||||
}
|
||||
@media (max-width:560px){
|
||||
.section h2{font-size:24px}
|
||||
.hero h1{font-size:29px}
|
||||
.hero-card{padding:24px 18px}
|
||||
.hero-card img{width:112px;height:112px}
|
||||
.card{padding:20px}
|
||||
.step{padding:19px}
|
||||
.req-list .b{min-width:0}
|
||||
.req-list li{flex-direction:column;gap:2px}
|
||||
}
|
||||
@media (max-width:400px){
|
||||
.wrap{padding:0 15px}
|
||||
.hero h1{font-size:26px}
|
||||
.section h2{font-size:22px}
|
||||
.hero-card .stats{grid-template-columns:1fr}
|
||||
}
|
||||
|
||||
/*
|
||||
Wide tables cannot shrink below their content, so on narrow screens they
|
||||
either overflow the page or crush the text. Scrolling the table alone
|
||||
keeps the rest of the layout intact.
|
||||
*/
|
||||
.table-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}
|
||||
.table-scroll table{min-width:420px}
|
||||
|
||||
/*
|
||||
Without JavaScript the panel cannot be toggled, so the links are shown
|
||||
inline. On narrow screens they wrap under the logo and the bar is allowed
|
||||
to grow, instead of being clipped by the fixed 60px height.
|
||||
*/
|
||||
.nojs .navtoggle{display:none}
|
||||
.nojs .topbar nav{position:static;display:flex;flex-direction:row;flex-wrap:wrap;
|
||||
box-shadow:none;border-bottom:0;padding:0;margin-left:auto;background:transparent}
|
||||
@media (max-width:900px){
|
||||
.nojs .topbar .wrap{height:auto;min-height:56px;flex-wrap:wrap;padding-bottom:8px;gap:10px}
|
||||
.nojs .topbar nav{margin-left:0;width:100%;gap:4px 6px}
|
||||
.nojs .topbar nav a{font-size:14.5px;min-height:40px;padding:0 10px;
|
||||
display:flex;align-items:center;border:1px solid var(--line);border-radius:8px}
|
||||
}
|
||||
@media (prefers-reduced-motion:reduce){*{transition:none!important;scroll-behavior:auto!important}}
|
||||
:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
|
||||
</style>
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "Organization",
|
||||
"name": "Bitcoin After Life",
|
||||
"url": "https://bitcoin-after.life",
|
||||
"logo": "https://bitcoin-after.life/pitura/logo/Logo_nero.svg",
|
||||
"sameAs": [
|
||||
"https://x.com/BitcoinAfterLif"
|
||||
]
|
||||
}
|
||||
</script>
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "WebSite",
|
||||
"name": "Bitcoin After Life",
|
||||
"url": "https://bitcoin-after.life"
|
||||
}
|
||||
</script>
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "FAQPage",
|
||||
"mainEntity": [
|
||||
{
|
||||
"@type": "Question",
|
||||
"name": "What is the Bitcoin After Life Protocol for?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "It is open-source software to manage the inheritance of Bitcoin held with a seed phrase, and to create an emergency backup of a wallet. It uses time-locked transactions sent to Will-Executor servers, which broadcast them to the Bitcoin network on a pre-set delivery date."
|
||||
}
|
||||
},
|
||||
{
|
||||
"@type": "Question",
|
||||
"name": "Why a plugin for Electrum rather than a dedicated wallet?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "Electrum is heavily tested and widely regarded as a reference Bitcoin wallet. The BAL plugin never signs transactions itself, Electrum does. This maximises security, reduces maintenance, and lets users trust the signing process independently of BAL."
|
||||
}
|
||||
},
|
||||
{
|
||||
"@type": "Question",
|
||||
"name": "How much does an inheritance or wallet backup cost?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "An inheritance involves two fees, both paid in Bitcoin only: a miner fee chosen by the user at signing time, and a Will-Executor fee deducted from the inheritance when the transaction is broadcast. There are no subscriptions or card payments."
|
||||
}
|
||||
},
|
||||
{
|
||||
"@type": "Question",
|
||||
"name": "What is a Will-Executor?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "A Will-Executor is a server that receives your pre-signed, time-locked transaction, stores it, and broadcasts it on the delivery date. It cannot alter or steal the transaction because you have already signed it; its only incentive is the fee embedded in the transaction, received once the inheritance confirms on-chain."
|
||||
}
|
||||
},
|
||||
{
|
||||
"@type": "Question",
|
||||
"name": "Can I use the plugin with a hardware wallet?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "Yes. The plugin is compatible with any hardware wallet supported by Electrum, such as Ledger, Trezor, Coldcard, BitBox02, Jade and KeepKey. Using a dedicated computer for cold-wallet signing is recommended for maximum security."
|
||||
}
|
||||
},
|
||||
{
|
||||
"@type": "Question",
|
||||
"name": "Is the plugin compatible with all Electrum wallet types?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "It works with standard seed-based single-signature Electrum wallets and with supported hardware wallets. Multisig wallets are not yet supported, and compatibility with Electrum's TrustedCoin (2FA) wallets is currently unknown."
|
||||
}
|
||||
},
|
||||
{
|
||||
"@type": "Question",
|
||||
"name": "Is a BAL 2.0 version planned?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "Yes. BAL 2.0 is in development. Its main new feature will be staggered inheritance: scheduling gradual distributions over time instead of a single lump-sum transfer."
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body class="w3-white">
|
||||
<div class="w3-padding-64 w3-margin-bottom w3-center">
|
||||
<img src="pitura/logo/Logo_nero.svg" alt="Logo BAL">
|
||||
<h1 class="w3-jumbo"><strong>Bitcoin After Life Protocol</strong></h1>
|
||||
<h2>(BAL PROTOCOL)</h2>
|
||||
<body>
|
||||
|
||||
<!-- ===== Top bar ===== -->
|
||||
<div class="topbar">
|
||||
<div class="wrap">
|
||||
<a class="logo" href="#top"><img src="/pitura/logo/Logo_nero.svg" alt="Bitcoin After Life logo" width="30" height="30"><span translate="no">Bitcoin After Life</span></a>
|
||||
<button class="navtoggle" id="navToggle" type="button"
|
||||
aria-expanded="false" aria-controls="mainNav" aria-label="Open menu">
|
||||
<span class="bars"></span>
|
||||
</button>
|
||||
<nav id="mainNav">
|
||||
<a href="#features">Features</a>
|
||||
<a href="#how">How it works</a>
|
||||
<a href="#executors">Will-Executors</a>
|
||||
<a href="#plugin">Plugin</a>
|
||||
<a href="#install">Install</a>
|
||||
<a href="#faq">FAQ</a>
|
||||
<a href="blog.html">Blog</a>
|
||||
<a href="https://bitcoin-after.life/docs/">Docs</a>
|
||||
<a class="manifesto" href="manifesto.html">Manifesto</a>
|
||||
<a class="x" href="https://x.com/BitcoinAfterLif" title="@BitcoinAfterLif on X">@X</a>
|
||||
</nav>
|
||||
</div>
|
||||
<div class="w3-row-padding w3-content" style="max-width:1400px">
|
||||
<div>
|
||||
<div>
|
||||
<strong><p><a href="gitea/bitcoinafterlife/bal-electrum-plugin/releases">Plugin Electrum releases</a></p>
|
||||
<p><a href="gitea/bitcoinafterlife/bal-server/releases">Bal Server releases</a></p>
|
||||
<p><a href="https://welist.bitcoin-after.life/">Will Executor List Premium</a></p>
|
||||
<p><a href="gitea/bitcoinafterlife">Source Code</a></p></strong>
|
||||
</div>
|
||||
<div class="w3-justify w3-xlarge">
|
||||
<p>Today, in this Samhain week, time of the year when the two 'worlds' (material and spiritual) close together and better communicate,
|
||||
we have the launch of this new Protocol to honour Bitcoin and all positivity it will bring to humanity.</p>
|
||||
|
||||
<p>This project was originated to solve an existing problem: to leave bitcoin inheritance to one's own children, but in a decentralised manner,
|
||||
without the intervention of an external third party (spouse, public notary, etc...) thus in perfect accordance with the Fundamental principle of decentralisation.</p>
|
||||
|
||||
<p>We have created this protocol, (seeking inspiration from John Nash game theory 'dominant dynamics' on which bitcoin incentives are based) so that it can have
|
||||
own life, without the need of a central Big Brother to make it work.</p>
|
||||
|
||||
<p>It is an open-source code plug-in and a Will-Executor, taking in charge the inheritance transactions’ push, will stay active for at least the next 10 years
|
||||
to await the consolidation of the protocol with more and more Will-Executors joining in.</p>
|
||||
|
||||
<p>The economic incentive necessary to make all this possible, is a fee included in each inheritance transaction and is paid when the Will-Executor transmits
|
||||
the inheritance transaction to the nodes, and it is therefore inserted in the block.</p>
|
||||
|
||||
<p>We expect the BAL PROTOCOL to be successful thanks to the incentives included in the inheritance transactions. These incentives are substantial and increase
|
||||
with the Bitcoin value in time and above all are appealing for more and more servers to join in the inheritance transactions with a prospective for middle / long period gains.</p>
|
||||
</div>
|
||||
<p>Anybody will have the possibility to create a server Will-Executor to contribute to the protocol and earn commissions, since the code is available as open-source.</p>
|
||||
|
||||
<p>BAL PROTOCOL, together with the Electrum plug-in, besides inheritance can also create a backup of one's own wallets, if planned in advance, to obtain protection in the case of private key loss.</p>
|
||||
|
||||
<p>BAL PROTOCOL is also extremely useful when managing a multi-sig Wallet, in order to have a security option for exceptional cases.</p>
|
||||
|
||||
<p>Many are its potential applications, and we encourage the community to find many more others.</p>
|
||||
|
||||
<p>Our Electrum <a href="gitea/bitcoinafterlife/bal-electrum-plugin">plug-in</a></p>
|
||||
|
||||
<p>The B.A.L. plug-in has been created for Electrum wallet, considered the gold standard among bitcoin wallets. We hope one day that Electrum developers will understand
|
||||
the value of this plug-in and will integrate it directly by default.</p>
|
||||
|
||||
<p>We know technology is useful when it is easily available to people in order to improve their lives; therefore BAL main objective will be
|
||||
to improve and to simplify this interface</p>
|
||||
|
||||
<p>All the work carried out to implement this project and BAL protocol (Bitcoin After Life) has been procured only with payments in Bitcoin with no use of
|
||||
FIAT currencies.</p>
|
||||
|
||||
<p>In the website bitcoin-after.life you will find instructions to install the plug-in in Electrum and several practical examples on how to manage heredity
|
||||
with the Plug-in.</p>
|
||||
|
||||
<p><strong>Plugin Operations</strong></p>
|
||||
|
||||
<p>The plugin generates a transaction with Locktime set to a future date; the transaction is signed and sent to one or several Will-Executors,
|
||||
who will take care in retaining the transaction and send it at the expiry date.</p>
|
||||
|
||||
<p>In order to provide economic incentives for the Will-Executor to keep and broadcast the transaction, an output will contain a fee payment,
|
||||
which will be received only when the heredity transaction is confirmed in the block chain.</p>
|
||||
|
||||
<p>
|
||||
<div>Signed</div>
|
||||
|
||||
<div><strong>Svātantrya</strong></div>
|
||||
<!-- ===== Hero ===== -->
|
||||
<header class="hero" id="top">
|
||||
<div class="wrap">
|
||||
<div>
|
||||
<a href="public_key.gpg">PGP</a>
|
||||
<span class="badge">● Open-source · Bitcoin-only · No custodian</span>
|
||||
<h1>Leave your Bitcoin to your heirs — <span class="blue">without a third party.</span></h1>
|
||||
<p class="lead">The <span translate="no">Bitcoin After Life</span> (BAL) Protocol uses time-locked transactions and an open-source Will-Executor network to make decentralized Bitcoin inheritance possible. No notary, no lawyer, no custodian.</p>
|
||||
<div class="cta-row">
|
||||
<a class="btn" href="https://bitcoin-after.life/gitea/bitcoinafterlife/bal-electrum-plugin/releases">Electrum Plugin Releases</a>
|
||||
<a class="btn ghost" href="https://bitcoin-after.life/gitea/bitcoinafterlife/bal-server/releases">BAL Server Releases</a>
|
||||
<a class="btn ghost" href="https://welist.bitcoin-after.life/">Will-Executor List</a>
|
||||
<a class="btn ghost" href="https://bitcoin-after.life/gitea/bitcoinafterlife">Source Code</a>
|
||||
</div>
|
||||
<div class="fiat-bar">
|
||||
<span class="btc">₿</span>
|
||||
<span class="t"><strong>Open-source project.</strong> <span class="m">The BAL Protocol is built and funded exclusively with Bitcoin — no FIAT currencies were used.</span></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<aside class="hero-card">
|
||||
<img src="/pitura/logo/Logo_nero.svg" alt="Bitcoin After Life Protocol logo" width="138" height="138">
|
||||
<div class="name">BAL Protocol</div>
|
||||
<div class="tag">Electrum plugin + Will-Executor</div>
|
||||
<div class="stats">
|
||||
<div class="stat"><div class="n"><a id="latest-release-link" href="https://bitcoin-after.life/gitea/bitcoinafterlife/bal-electrum-plugin/releases">-</a></div><div class="l">Latest release</div><div class="sig"><a id="latest-release-sig" href="#">sig</a></div></div>
|
||||
<div class="stat"><div class="n">10 yr</div><div class="l">Min. support</div></div>
|
||||
<div class="stat"><div class="n">MIT</div><div class="l">License</div></div>
|
||||
<div class="stat"><div class="n">100%</div><div class="l">Bitcoin-funded</div></div>
|
||||
</div>
|
||||
</aside>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main>
|
||||
|
||||
<!-- ===== Key features ===== -->
|
||||
<section class="section alt" id="features">
|
||||
<div class="wrap">
|
||||
<span class="eyebrow">Key features</span>
|
||||
<h2>What BAL gives you</h2>
|
||||
<p class="sub">Five capabilities, all peer-to-peer, all Bitcoin-only, all open source.</p>
|
||||
<div class="grid cols-3">
|
||||
<div class="card">
|
||||
<div class="ic">🔐</div>
|
||||
<h3>Decentralized inheritance</h3>
|
||||
<p>Plan Bitcoin inheritance without any third party — notary, spouse or custodian. Fully peer-to-peer, with no legal overhead and no intermediaries, ever.</p>
|
||||
<div class="chips"><span class="chip">Bitcoin only</span><span class="chip">Peer-to-peer</span></div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="ic">⏱️</div>
|
||||
<h3>Time-locked transactions</h3>
|
||||
<p>Transactions are created with a Locktime set to a future date. Will-Executors retain and broadcast them automatically on the delivery date. Your keys never leave your device — Electrum handles all signing.</p>
|
||||
<div class="chips"><span class="chip">Desktop</span><span class="chip">Self-custody</span></div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="ic">💾</div>
|
||||
<h3>Wallet backup</h3>
|
||||
<p>Pre-sign a recovery transaction to a secondary address. If you lose your seed, the funds are sent automatically to your backup wallet.</p>
|
||||
<div class="chips"><span class="chip">Recovery</span><span class="chip">Open source</span></div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="ic">💰</div>
|
||||
<h3>Economic incentives</h3>
|
||||
<p>Each inheritance transaction includes a fee for the Will-Executor, paid on confirmation. Incentives grow with Bitcoin's value over time.</p>
|
||||
<div class="chips"><span class="chip">Server</span><span class="chip">Bitcoin only</span></div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="ic">🌐</div>
|
||||
<h3>Open source & community</h3>
|
||||
<p>Anyone can run a Will-Executor server and earn commissions. The community is encouraged to discover new use cases.</p>
|
||||
<div class="chips"><span class="chip">Open source</span><span class="chip">Community</span></div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="ic">🪪</div>
|
||||
<h3>You stay in control</h3>
|
||||
<p>The plugin never signs on your behalf. It asks — you decide. Every refresh of your will is confirmed by you, password or hardware wallet included.</p>
|
||||
<div class="chips"><span class="chip">Non-custodial</span><span class="chip">Hardware-wallet</span></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- ===== How it works ===== -->
|
||||
<section class="section" id="how">
|
||||
<div class="wrap">
|
||||
<span class="eyebrow">How it works</span>
|
||||
<h2>From setup to automatic execution</h2>
|
||||
<p class="sub">Six steps — from first setup to the automatic execution of your Bitcoin will. For the full protocol walkthrough, see <a href="https://bitcoin-after.life/docs/protocol/how-it-works.html">How it works</a> in the manual.</p>
|
||||
<div class="steps">
|
||||
<div class="step"><div class="no">01</div><h3>Add heirs</h3><p>Enter the Bitcoin address of your heir(s) in the BAL plugin. No notary or intermediary required.</p></div>
|
||||
<div class="step"><div class="no">02</div><h3>Prepare transaction</h3><p>The wizard builds a time-locked transaction with your delivery date and the Will-Executor fee.</p></div>
|
||||
<div class="step"><div class="no">03</div><h3>Sign</h3><p>Electrum signs with your key. The plugin never touches your keys — the signed will is stored locally.</p></div>
|
||||
<div class="step"><div class="no">04</div><h3>Send to Will-Executors</h3><p>Your signed will is sent to Will-Executor servers from the WeList. They hold it until the delivery date.</p></div>
|
||||
<div class="step"><div class="no">05</div><h3>Use Electrum normally</h3><p>Keep using Electrum as usual. Every session auto-postpones your delivery date — Check Alive, zero effort. <span style="font-size:.82em;color:var(--muted)">(in Advanced mode)</span></p></div>
|
||||
<div class="step"><div class="no">06</div><h3>Always up to date</h3><p>On close of your wallet, the plugin checks your balance and asks to refresh your will. You confirm — it never signs for you.</p></div>
|
||||
</div>
|
||||
<div class="phase-row">
|
||||
<div class="phase"><b>01–03</b> Setup</div>
|
||||
<div class="phase"><b>04</b> Deploy</div>
|
||||
<div class="phase"><b>05</b> Stay alive</div>
|
||||
<div class="phase"><b>06</b> Auto-execute</div>
|
||||
</div>
|
||||
<div class="callout">
|
||||
<span class="k">🔑</span>
|
||||
<p><strong>Note on signing.</strong> The plugin never signs on your behalf. If your wallet uses a password or a hardware wallet, you will be prompted to confirm. The plugin asks — you decide. Your will stays accurate and always under your control.</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- ===== Will-Executors ===== -->
|
||||
<section class="section alt" id="executors">
|
||||
<div class="wrap prose">
|
||||
<span class="eyebrow">Will-Executors</span>
|
||||
<h2>The beating heart of the protocol</h2>
|
||||
<p>The economic incentive that makes all this possible is a fee included in each inheritance transaction. It is paid when the Will-Executor transmits the inheritance transaction to the nodes, and is therefore inserted into the block. The first one to send the transaction to the nodes wins the inheritance fee.</p>
|
||||
<p>We expect the BAL Protocol to succeed thanks to these incentives. They are <strong>substantial and grow with the value of Bitcoin over time</strong>, and they are attractive to more and more servers joining the inheritance transactions with a prospect of medium- to long-term gains.</p>
|
||||
<p>Anybody can create a Will-Executor server to contribute to the protocol and earn commissions, since the code is available as open source. Read more in the manual: <a href="https://bitcoin-after.life/docs/will-executors/what-they-are.html">what Will-Executors are</a> and <a href="https://bitcoin-after.life/docs/will-executors/running-a-server.html">running a Will-Executor</a>.</p>
|
||||
<div class="callout">
|
||||
<span class="k">📋</span>
|
||||
<p>Will-Executors are listed on the public <strong>WeList</strong> directory and shown directly inside the plugin. <a href="https://welist.bitcoin-after.life/">Browse the Will-Executor List →</a></p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- ===== Components / Plugin ===== -->
|
||||
<section class="section" id="plugin">
|
||||
<div class="wrap">
|
||||
<span class="eyebrow">Components</span>
|
||||
<h2>Plugin, server and docs</h2>
|
||||
<p class="sub">Two open-source components and the documentation that ties them together.</p>
|
||||
<div class="grid cols-3">
|
||||
<div class="card">
|
||||
<div class="ic">🔌</div>
|
||||
<h3><span translate="no">Bitcoin After Life</span> plugin</h3>
|
||||
<p>Created for the <strong>Electrum</strong> wallet — the gold standard among Bitcoin wallets. We hope Electrum developers will one day integrate it by default.</p>
|
||||
<div class="chips"><span class="chip">Desktop</span><span class="chip">PyQt6</span></div>
|
||||
<p style="margin-top:14px"><a class="more" href="https://bitcoin-after.life/gitea/bitcoinafterlife/bal-electrum-plugin">View plugin repository →</a></p>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="ic">🖥️</div>
|
||||
<h3>BAL Server</h3>
|
||||
<p>The server acts as a Will-Executor: it retains signed transactions and broadcasts them at the delivery date, so the inheritance runs without human intervention.</p>
|
||||
<div class="chips"><span class="chip">Server</span><span class="chip">Open source</span></div>
|
||||
<p style="margin-top:14px"><a class="more" href="https://bitcoin-after.life/gitea/bitcoinafterlife/bal-server">View server repository →</a></p>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="ic">📖</div>
|
||||
<h3>Documentation & examples</h3>
|
||||
<p>On bitcoin-after.life you'll find instructions to install the plug-in in Electrum and several practical examples on how to manage inheritance.</p>
|
||||
<div class="chips"><span class="chip">Guides</span><span class="chip">Examples</span></div>
|
||||
<p style="margin-top:14px"><a class="more" href="https://bitcoin-after.life">View website →</a></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- ===== Requirements & Installation (from GitHub) ===== -->
|
||||
<section class="section alt" id="install">
|
||||
<div class="wrap">
|
||||
<span class="eyebrow">Requirements & installation</span>
|
||||
<h2>Get the plugin running</h2>
|
||||
<p class="sub">The plugin is a behavior-preserving refactor that cleanly separates the business logic from the PyQt GUI. Build a clean, integrity-checkable archive and install it in Electrum. For the full step-by-step walkthrough with screenshots, see the <a href="https://bitcoin-after.life/docs/getting-started/installation.html">installation guide</a> in the manual.</p>
|
||||
<div class="install-grid">
|
||||
<div class="card">
|
||||
<h3>Requirements</h3>
|
||||
<ul class="req-list">
|
||||
<li><span class="b">Electrum</span><span class="v">4.8.0 — latest stable release, tested against plugin v0.6.1.</span></li>
|
||||
<li><span class="b">License</span><span class="v">MIT.</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="card">
|
||||
<h3>Install as an external plugin (zip)</h3>
|
||||
<ol class="ol">
|
||||
<li>Electrum → <strong>Tools → Plugins</strong> → install from file → pick the built zip.</li>
|
||||
<li>Enable <strong><span translate="no">Bitcoin After Life</span></strong> and restart Electrum.</li>
|
||||
<li>Recommended: verify the zip's SHA-256 matches the value printed by <code>build_zip.py</code>.</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
<div class="callout warn">
|
||||
<span class="k">⚠️</span>
|
||||
<p><strong>Safety.</strong> This plugin builds real Bitcoin inheritance transactions with time-locks. Test on <strong>testnet</strong> or a small fund wallet first, and you always can review the generated transactions before broadcasting.</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- ===== Plugin operations ===== -->
|
||||
<section class="section" id="operations">
|
||||
<div class="wrap">
|
||||
<span class="eyebrow">Plugin operations</span>
|
||||
<h2>How a will is built and kept safe</h2>
|
||||
<div class="prose">
|
||||
<p>The plugin generates a transaction with a <strong>Locktime</strong> set to a future date. The transaction is signed and sent to one or several Will-Executors, who retain it and broadcast it at the expiry date.</p>
|
||||
<p>To provide the economic incentive for the Will-Executor to keep and broadcast the transaction, an output contains a <strong>fee payment</strong>, received only once the inheritance transaction is confirmed in the blockchain.</p>
|
||||
</div>
|
||||
|
||||
<div class="grid cols-2" style="margin-top:8px">
|
||||
<div class="card">
|
||||
<h3>Changes to the beneficiaries or the Wallet Balance</h3>
|
||||
<p>If there are any changes to the will – for example, prior to the signed locktime, the addition of a beneficiary, or a change to the wallet balance – the will is anticipated by one day and resubmitted to the will executors, without the need to invalidate the old one, saving costly On-Chain fees.</p>
|
||||
</div>
|
||||
<div class="card">
|
||||
<h3>Postpone</h3>
|
||||
<p>If the new delivery time is <em>later</em> than a will that was already signed and/or pushed, the previously committed coins must be invalidated on-chain <strong>first</strong> — otherwise a Will-Executor could broadcast the old, earlier-locktime transaction and execute the inheritance too early.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="callout" style="margin-top:22px">
|
||||
<span class="k">🖥️</span>
|
||||
<p>The will-transaction list also shows a dedicated <strong>Server</strong> column, so you always know whether each inheritance transaction is actually stored on the Will-Executor servers — independently of the row colour. See the full reference (labels, statuses, and available actions) in the <a href="https://bitcoin-after.life/docs/user-guide/will-tab.html">WILL tab guide →</a></p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- ===== FAQ ===== -->
|
||||
<section class="section alt" id="faq">
|
||||
<div class="wrap">
|
||||
<span class="eyebrow">FAQ</span>
|
||||
<h2>Frequently asked questions</h2>
|
||||
<p class="sub">Seven quick answers to the most common questions about the protocol and the plugin.</p>
|
||||
<div class="faq" id="faqList">
|
||||
|
||||
<details class="qa"><summary><span class="qn">01</span><span class="qt">What is the <span translate="no">Bitcoin After Life</span> Protocol for?</span><span class="chev">▾</span></summary>
|
||||
<div class="ans"><p>It is software designed to manage the <strong>inheritance of your Bitcoin</strong> stored with a seed phrase (private key). It also lets you create an <strong>emergency backup</strong> of your wallet in case you lose your seed. The protocol uses time-locked transactions sent to Will-Executor servers, which broadcast them to the Bitcoin network at the pre-set delivery date.</p></div>
|
||||
</details>
|
||||
|
||||
<details class="qa"><summary><span class="qn">02</span><span class="qt">Why a plugin for Electrum rather than a dedicated wallet?</span><span class="chev">▾</span></summary>
|
||||
<div class="ans"><p>Because <strong>Electrum is hyper-tested</strong> and considered the gold standard among Bitcoin wallets. The BAL plugin does <em>not</em> sign transactions itself — that is entirely Electrum's job. This maximises security, reduces the maintenance burden, and lets users trust the signing process completely independently of BAL.</p></div>
|
||||
</details>
|
||||
|
||||
<details class="qa"><summary><span class="qn">03</span><span class="qt">How much does an inheritance or wallet backup cost?</span><span class="chev">▾</span></summary>
|
||||
<div class="ans"><p>An inheritance costs two fees, both paid <strong>exclusively in Bitcoin</strong> — no subscriptions, no credit cards:</p>
|
||||
<ul><li><strong>Miner fee:</strong> chosen by the user at signing time. A higher fee is recommended to ensure future confirmation.</li><li><strong>Will-Executor fee:</strong> deducted directly from the inheritance at execution, when the Will-Executor broadcasts the transaction.</li></ul></div>
|
||||
</details>
|
||||
|
||||
<details class="qa"><summary><span class="qn">04</span><span class="qt">What is a Will-Executor?</span><span class="chev">▾</span></summary>
|
||||
<div class="ans"><p>Will-Executor servers are the <strong>beating heart of the BAL Protocol</strong>. They receive your pre-signed, time-locked transactions, store them securely, and broadcast them at the pre-set delivery date. They <em>cannot alter or steal</em> the transaction, because it is already fully signed by you. Their only incentive to act correctly is the <strong>fee embedded in the transaction</strong>, received only once the inheritance is confirmed on-chain.</p></div>
|
||||
</details>
|
||||
|
||||
<details class="qa"><summary><span class="qn">05</span><span class="qt">Can I use the plugin with a hardware wallet?</span><span class="chev">▾</span></summary>
|
||||
<div class="ans"><p>Yes — the BAL plugin is compatible with <strong>any hardware wallet</strong> supported by Electrum (Ledger, Trezor, Coldcard, BitBox02, Jade, KeepKey and others). Using a dedicated PC for cold-wallet signing is recommended for maximum security.</p></div>
|
||||
</details>
|
||||
|
||||
<details class="qa"><summary><span class="qn">06</span><span class="qt">Is the plugin compatible with all Electrum wallet types?</span><span class="chev">▾</span></summary>
|
||||
<div class="ans"><p>BAL works with <strong>standard Electrum wallets</strong> (single-signature, seed-based) and with <strong>hardware wallets</strong> supported by Electrum (see FAQ 11). It is <strong>not yet compatible with multisig wallets</strong> — support is planned for a future plugin release. Compatibility with <strong>Electrum's TrustedCoin (2FA) wallets</strong> is currently <strong>unknown / unsupported</strong>; it has not yet been determined whether or when this will be addressed.</p>
|
||||
<p>If you use a multisig or TrustedCoin (2FA) wallet, please do not rely on BAL for inheritance until compatibility is confirmed.</p></div>
|
||||
</details>
|
||||
|
||||
<details class="qa"><summary><span class="qn">07</span><span class="qt">Is a BAL 2.0 version planned?</span><span class="chev">▾</span></summary>
|
||||
<div class="ans"><p>Yes — <strong>BAL 2.0</strong> is in development. The main new feature will be support for <strong>staggered inheritance</strong>: instead of a single lump-sum transfer, it will be possible to schedule gradual distributions over time (for example 10% per year), giving heirs a more structured and flexible inheritance plan.</p></div>
|
||||
</details>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="callout faq-more" style="margin-top:22px;max-width:880px">
|
||||
<span class="k">📖</span>
|
||||
<p>Looking for something more specific — Check Alive, running a Will-Executor, wallet compatibility, and more? See the <strong>full FAQ in the manual</strong>. <a href="https://bitcoin-after.life/docs/faq.html">Browse the full FAQ →</a></p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</main>
|
||||
|
||||
<!-- ===== Footer ===== -->
|
||||
<footer>
|
||||
<div class="wrap">
|
||||
<div class="sig">Svātantrya</div>
|
||||
<div>Signed — <span translate="no">Bitcoin After Life</span> Protocol</div>
|
||||
<div class="links">
|
||||
<a href="https://bitcoin-after.life">bitcoin-after.life</a>
|
||||
<a href="mailto:info@bitcoin-after.life">info@bitcoin-after.life</a>
|
||||
<a href="https://x.com/BitcoinAfterLif">@BitcoinAfterLif</a>
|
||||
<a href="https://bitcoin-after.life/svatantrya.asc">PGP Key</a>
|
||||
<a href="https://bitcoin-after.life/docs/press-kit.html">Press Kit</a>
|
||||
<a href="https://bitcoin-after.life/gitea/bitcoinafterlife">Source Code</a>
|
||||
</div>
|
||||
</p>
|
||||
</div>
|
||||
<div class="built">Built with ₿itcoin. No FIAT was used in the making of this protocol.</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<script>
|
||||
/*
|
||||
Mobile menu toggle.
|
||||
The `nojs` class is set on <html> in the document head and removed here,
|
||||
so a visitor without JavaScript keeps a plain inline navigation rather
|
||||
than a button that does nothing.
|
||||
*/
|
||||
(function () {
|
||||
const toggle = document.getElementById('navToggle');
|
||||
const nav = document.getElementById('mainNav');
|
||||
if (!toggle || !nav) return;
|
||||
|
||||
function setOpen(open) {
|
||||
nav.classList.toggle('open', open);
|
||||
toggle.setAttribute('aria-expanded', open ? 'true' : 'false');
|
||||
toggle.setAttribute('aria-label', open ? 'Close menu' : 'Open menu');
|
||||
}
|
||||
|
||||
toggle.addEventListener('click', function () {
|
||||
setOpen(!nav.classList.contains('open'));
|
||||
});
|
||||
|
||||
// Close after choosing a destination, otherwise the panel would cover
|
||||
// the section the visitor just jumped to.
|
||||
nav.addEventListener('click', function (e) {
|
||||
if (e.target.tagName === 'A') setOpen(false);
|
||||
});
|
||||
|
||||
document.addEventListener('keydown', function (e) {
|
||||
if (e.key === 'Escape') setOpen(false);
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
|
||||
<script>
|
||||
/*
|
||||
FAQ accordion built on native <details>/<summary>.
|
||||
WHY native: it stays accessible and keyboard-friendly with zero JS.
|
||||
This small script just enforces single-open behavior (clicking one
|
||||
question closes the others) for a tidier reading experience.
|
||||
*/
|
||||
const items = document.querySelectorAll('#faqList details.qa');
|
||||
items.forEach(d => {
|
||||
d.addEventListener('toggle', () => {
|
||||
if (d.open) items.forEach(o => { if (o !== d) o.open = false; });
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<script>
|
||||
(function () {
|
||||
const apiUrl = 'https://bitcoin-after.life/gitea/api/v1/repos/bitcoinafterlife/bal-electrum-plugin/releases/latest';
|
||||
const link = document.getElementById('latest-release-link');
|
||||
const sig = document.getElementById('latest-release-sig');
|
||||
const releasesUrl = 'https://bitcoin-after.life/gitea/bitcoinafterlife/bal-electrum-plugin/releases';
|
||||
if (!link) return;
|
||||
fetch(apiUrl)
|
||||
.then(r => r.ok ? r.json() : Promise.reject(new Error('HTTP ' + r.status)))
|
||||
.then(data => {
|
||||
if (!data || !data.tag_name) return;
|
||||
link.textContent = data.tag_name;
|
||||
|
||||
const assets = data.assets || [];
|
||||
// Take the real zip asset straight from the API instead of
|
||||
// rebuilding its name from a fixed template. The publisher does
|
||||
// not always use the same filename (e.g. "bal_electrum_plugin_v0.6.0.zip"
|
||||
// vs "bal_v0.6.1.zip"), so any reconstructed name eventually breaks.
|
||||
const zipAsset = assets.find(a => /\.zip$/i.test(a.name));
|
||||
const sigAsset = assets.find(a => /\.zip\.(sig|asc)$/i.test(a.name));
|
||||
|
||||
// If no zip asset is found, fall back to the releases page so the
|
||||
// link is never dead.
|
||||
link.href = zipAsset ? zipAsset.browser_download_url : releasesUrl;
|
||||
|
||||
if (sig) {
|
||||
if (sigAsset) {
|
||||
sig.href = sigAsset.browser_download_url;
|
||||
sig.style.display = 'inline';
|
||||
} else {
|
||||
sig.style.display = 'none';
|
||||
}
|
||||
}
|
||||
})
|
||||
.catch(err => {
|
||||
console.error('Failed to fetch latest release:', err);
|
||||
link.href = releasesUrl;
|
||||
if (sig) sig.style.display = 'none';
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
1904
index2.html
310
manifesto.html
Normal file
78
mobile-check.html
Normal file
@@ -0,0 +1,78 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Mobile diagnostics</title>
|
||||
<style>
|
||||
body{font-family:system-ui,sans-serif;margin:0;padding:20px;background:#eef1f4;color:#1a2027}
|
||||
h1{font-size:20px;margin:0 0 4px}
|
||||
.hint{color:#5b6672;font-size:14px;margin:0 0 18px}
|
||||
table{width:100%;border-collapse:collapse;background:#fff;border:1px solid #dfe4ea;border-radius:10px;overflow:hidden}
|
||||
td{padding:11px 13px;border-bottom:1px solid #dfe4ea;font-size:15px;vertical-align:top}
|
||||
tr:last-child td{border-bottom:0}
|
||||
td.k{color:#5b6672;width:52%}
|
||||
td.v{font-family:ui-monospace,Menlo,Consolas,monospace;font-weight:600}
|
||||
.verdict{margin-top:18px;padding:16px;border-radius:10px;font-size:16px;line-height:1.55}
|
||||
.ok{background:#e3f4ea;border:1px solid #b6e0c6}
|
||||
.bad{background:#fbf0df;border:1px solid #eed8b4}
|
||||
/* These probes report whether the mobile breakpoints are actually active. */
|
||||
.probe900,.probe700,.probe560{display:none}
|
||||
@media (max-width:900px){.probe900{display:inline}}
|
||||
@media (max-width:700px){.probe700{display:inline}}
|
||||
@media (max-width:560px){.probe560{display:inline}}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Mobile diagnostics</h1>
|
||||
<p class="hint">Open this page on the phone and read out the values.</p>
|
||||
|
||||
<table>
|
||||
<tr><td class="k">Layout viewport width (CSS px)</td><td class="v" id="vw">—</td></tr>
|
||||
<tr><td class="k">Screen width reported</td><td class="v" id="sw">—</td></tr>
|
||||
<tr><td class="k">Device pixel ratio</td><td class="v" id="dpr">—</td></tr>
|
||||
<tr><td class="k">Breakpoint ≤900px active</td><td class="v"><span class="probe900">YES</span><span id="n900">NO</span></td></tr>
|
||||
<tr><td class="k">Breakpoint ≤700px active</td><td class="v"><span class="probe700">YES</span><span id="n700">NO</span></td></tr>
|
||||
<tr><td class="k">Breakpoint ≤560px active</td><td class="v"><span class="probe560">YES</span><span id="n560">NO</span></td></tr>
|
||||
<tr><td class="k">JavaScript enabled</td><td class="v" id="js">NO</td></tr>
|
||||
<tr><td class="k">Browser identification</td><td class="v" id="ua" style="font-size:11px;word-break:break-all">—</td></tr>
|
||||
</table>
|
||||
|
||||
<div class="verdict" id="verdict">
|
||||
If "JavaScript enabled" says NO, this box will not update — that alone is a useful result.
|
||||
</div>
|
||||
|
||||
<script>
|
||||
/* Hide the "NO" markers whose matching media query fired, so each row shows
|
||||
a single unambiguous value. */
|
||||
[[900, 'n900'], [700, 'n700'], [560, 'n560']].forEach(function (pair) {
|
||||
if (window.matchMedia('(max-width:' + pair[0] + 'px)').matches) {
|
||||
document.getElementById(pair[1]).style.display = 'none';
|
||||
}
|
||||
});
|
||||
|
||||
var vw = document.documentElement.clientWidth;
|
||||
document.getElementById('vw').textContent = vw + ' px';
|
||||
document.getElementById('sw').textContent = window.screen.width + ' px';
|
||||
document.getElementById('dpr').textContent = window.devicePixelRatio;
|
||||
document.getElementById('js').textContent = 'YES';
|
||||
document.getElementById('ua').textContent = navigator.userAgent;
|
||||
|
||||
var v = document.getElementById('verdict');
|
||||
if (vw > 900) {
|
||||
v.className = 'verdict bad';
|
||||
v.innerHTML = '<b>Found it.</b> The layout viewport is ' + vw + ' CSS pixels, ' +
|
||||
'so the phone is rendering the page as a desktop window and none of the ' +
|
||||
'mobile rules apply. This is a browser setting, not a problem in the page: ' +
|
||||
'look for "Request desktop site" (or "Desktop site") in the browser menu ' +
|
||||
'and turn it off for this site.';
|
||||
} else {
|
||||
v.className = 'verdict ok';
|
||||
v.innerHTML = '<b>The viewport is correct</b> (' + vw + ' CSS pixels) and the ' +
|
||||
'mobile rules are active. If the page still looks wrong, the cause is ' +
|
||||
'elsewhere — most likely a cached copy of the old page. Reload with the ' +
|
||||
'cache cleared.';
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
BIN
pitura/og-default.png
Normal file
|
After Width: | Height: | Size: 43 KiB |
5
robots.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
User-agent: *
|
||||
Allow: /
|
||||
|
||||
Sitemap: https://bitcoin-after.life/sitemap.xml
|
||||
Sitemap: https://bitcoin-after.life/docs/sitemap.xml
|
||||
8
sitemap.xml
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
<url><loc>https://bitcoin-after.life/index.html</loc><lastmod>2026-08-14</lastmod><priority>1.0</priority></url>
|
||||
<url><loc>https://bitcoin-after.life/manifesto.html</loc><lastmod>2026-08-14</lastmod><priority>0.8</priority></url>
|
||||
<url><loc>https://bitcoin-after.life/blog.html</loc><lastmod>2026-08-14</lastmod><priority>0.6</priority></url>
|
||||
<url><loc>https://bitcoin-after.life/blog/inheritance-when-trust-fails.html</loc><lastmod>2026-08-14</lastmod><priority>0.5</priority></url>
|
||||
<url><loc>https://bitcoin-after.life/blog/it-all-starts-with-the-seed.html</loc><lastmod>2026-08-14</lastmod><priority>0.5</priority></url>
|
||||
</urlset>
|
||||