Skip to content

Commit 0b889f3

Browse files
authored
Merge pull request #94 from bitcoin-dev-project/add-new-explainers
feat: add 6 new explainers
2 parents 745316f + 90b32bf commit 0b889f3

33 files changed

Lines changed: 296 additions & 0 deletions

static/explainers/explainers-data.json

Lines changed: 296 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1200,5 +1200,301 @@
12001200
"altText": "Future blockchain security research"
12011201
}
12021202
]
1203+
},
1204+
{
1205+
"id": "wormhole-attack",
1206+
"title": "Wormhole Attack",
1207+
"description": "How two colluding nodes in the Lightning Network can steal routing fees by bypassing intermediate nodes using the HTLC pre-image",
1208+
"category": "Lightning Network",
1209+
"difficulty": "Intermediate",
1210+
"slideCount": 4,
1211+
"tags": ["lightning", "htlc", "routing", "attack", "security", "ptlc"],
1212+
"lastUpdated": "2026-02-24",
1213+
"slides": [
1214+
{
1215+
"id": "slide-1",
1216+
"title": "Wormhole Attack Introduction",
1217+
"description": "Overview of the wormhole attack: two colluding nodes that steal routing fees in the Lightning Network",
1218+
"imageUrl": "/decoding-bitcoin/static/explainers/images/wormhole-attack/slide-1.png",
1219+
"altText": "Wormhole attack introduction with A to E node diagram"
1220+
},
1221+
{
1222+
"id": "slide-2",
1223+
"title": "Normal Payment Routing",
1224+
"description": "How a normal Lightning payment is routed through intermediate nodes using HTLCs",
1225+
"imageUrl": "/decoding-bitcoin/static/explainers/images/wormhole-attack/slide-2.png",
1226+
"altText": "Normal HTLC payment routing from A to E through B, C, D"
1227+
},
1228+
{
1229+
"id": "slide-3",
1230+
"title": "The Attack: Pre-image Theft",
1231+
"description": "How malicious nodes B and D bypass C by sharing the pre-image out-of-band, leaving C unpaid",
1232+
"imageUrl": "/decoding-bitcoin/static/explainers/images/wormhole-attack/slide-3.png",
1233+
"altText": "B and D share pre-image bypassing C to steal routing fees"
1234+
},
1235+
{
1236+
"id": "slide-4",
1237+
"title": "Mitigation: PTLC",
1238+
"description": "How Point-Time-Locked Contracts (PTLCs) prevent the wormhole attack",
1239+
"imageUrl": "/decoding-bitcoin/static/explainers/images/wormhole-attack/slide-4.png",
1240+
"altText": "PTLC mitigation strategy for wormhole attack"
1241+
}
1242+
]
1243+
},
1244+
{
1245+
"id": "coinjoin",
1246+
"title": "CoinJoin",
1247+
"description": "How CoinJoin combines multiple Bitcoin transactions into one to enhance privacy by obscuring the link between inputs and outputs",
1248+
"category": "Privacy",
1249+
"difficulty": "Beginner",
1250+
"slideCount": 4,
1251+
"tags": ["coinjoin", "privacy", "mixing", "transactions", "anonymity"],
1252+
"lastUpdated": "2026-02-24",
1253+
"slides": [
1254+
{
1255+
"id": "slide-1",
1256+
"title": "CoinJoin Introduction",
1257+
"description": "Introduction to CoinJoin and why Bitcoin transaction privacy matters",
1258+
"imageUrl": "/decoding-bitcoin/static/explainers/images/coinjoin/slide-1.png",
1259+
"altText": "CoinJoin introduction slide"
1260+
},
1261+
{
1262+
"id": "slide-2",
1263+
"title": "How CoinJoin Works",
1264+
"description": "How multiple participants combine their transactions into a single transaction",
1265+
"imageUrl": "/decoding-bitcoin/static/explainers/images/coinjoin/slide-2.png",
1266+
"altText": "CoinJoin transaction combining diagram"
1267+
},
1268+
{
1269+
"id": "slide-3",
1270+
"title": "Privacy Benefits",
1271+
"description": "The privacy benefits of CoinJoin and how it breaks transaction graph analysis",
1272+
"imageUrl": "/decoding-bitcoin/static/explainers/images/coinjoin/slide-3.png",
1273+
"altText": "CoinJoin privacy benefits"
1274+
},
1275+
{
1276+
"id": "slide-4",
1277+
"title": "CoinJoin Implementations",
1278+
"description": "Real-world CoinJoin implementations and their trade-offs",
1279+
"imageUrl": "/decoding-bitcoin/static/explainers/images/coinjoin/slide-4.png",
1280+
"altText": "CoinJoin implementations overview"
1281+
}
1282+
]
1283+
},
1284+
{
1285+
"id": "full-node",
1286+
"title": "Full Node",
1287+
"description": "What a Bitcoin full node is, why it matters, and how it enforces the rules of the Bitcoin network without trusting anyone",
1288+
"category": "Bitcoin Basics",
1289+
"difficulty": "Beginner",
1290+
"slideCount": 5,
1291+
"tags": ["full-node", "validation", "consensus", "decentralization", "trust"],
1292+
"lastUpdated": "2026-02-24",
1293+
"slides": [
1294+
{
1295+
"id": "slide-1",
1296+
"title": "What is a Full Node?",
1297+
"description": "Introduction to Bitcoin full nodes and their role in the network",
1298+
"imageUrl": "/decoding-bitcoin/static/explainers/images/full-node/slide-1.png",
1299+
"altText": "Full node introduction"
1300+
},
1301+
{
1302+
"id": "slide-2",
1303+
"title": "What a Full Node Does",
1304+
"description": "How a full node downloads, validates, and stores the entire Bitcoin blockchain",
1305+
"imageUrl": "/decoding-bitcoin/static/explainers/images/full-node/slide-2.png",
1306+
"altText": "Full node downloading and validating the blockchain"
1307+
},
1308+
{
1309+
"id": "slide-3",
1310+
"title": "Why Run a Full Node?",
1311+
"description": "The benefits of running your own full node: trustless verification and network contribution",
1312+
"imageUrl": "/decoding-bitcoin/static/explainers/images/full-node/slide-3.png",
1313+
"altText": "Benefits of running a full node"
1314+
},
1315+
{
1316+
"id": "slide-4",
1317+
"title": "Full Node vs SPV",
1318+
"description": "Comparing full nodes to lightweight SPV clients and the trust trade-offs",
1319+
"imageUrl": "/decoding-bitcoin/static/explainers/images/full-node/slide-4.png",
1320+
"altText": "Full node vs SPV comparison"
1321+
},
1322+
{
1323+
"id": "slide-5",
1324+
"title": "Running a Full Node",
1325+
"description": "Requirements and options for running your own Bitcoin full node",
1326+
"imageUrl": "/decoding-bitcoin/static/explainers/images/full-node/slide-5.png",
1327+
"altText": "How to run a Bitcoin full node"
1328+
}
1329+
]
1330+
},
1331+
{
1332+
"id": "sha256-message-schedule",
1333+
"title": "SHA256 Message Schedule",
1334+
"description": "A deep dive into the SHA256 message schedule — how the 16 input words are expanded into 64 words used in the compression function",
1335+
"category": "Cryptography",
1336+
"difficulty": "Advanced",
1337+
"slideCount": 9,
1338+
"tags": ["sha256", "hashing", "cryptography", "message-schedule", "bitcoin-mining"],
1339+
"lastUpdated": "2026-02-24",
1340+
"slides": [
1341+
{
1342+
"id": "slide-1",
1343+
"title": "SHA256 Overview",
1344+
"description": "Introduction to SHA256 and its role in Bitcoin",
1345+
"imageUrl": "/decoding-bitcoin/static/explainers/images/sha256-message-schedule/slide-1.png",
1346+
"altText": "SHA256 overview"
1347+
},
1348+
{
1349+
"id": "slide-2",
1350+
"title": "Input Preparation",
1351+
"description": "How the input message is prepared and split into 512-bit blocks",
1352+
"imageUrl": "/decoding-bitcoin/static/explainers/images/sha256-message-schedule/slide-2.png",
1353+
"altText": "SHA256 input preparation"
1354+
},
1355+
{
1356+
"id": "slide-3",
1357+
"title": "The 16 Initial Words",
1358+
"description": "How the 512-bit block is divided into 16 32-bit words (W0–W15)",
1359+
"imageUrl": "/decoding-bitcoin/static/explainers/images/sha256-message-schedule/slide-3.png",
1360+
"altText": "SHA256 initial 16 words"
1361+
},
1362+
{
1363+
"id": "slide-4",
1364+
"title": "Word Expansion",
1365+
"description": "The formula for expanding W0–W15 into W16–W63",
1366+
"imageUrl": "/decoding-bitcoin/static/explainers/images/sha256-message-schedule/slide-4.png",
1367+
"altText": "SHA256 word expansion formula"
1368+
},
1369+
{
1370+
"id": "slide-5",
1371+
"title": "Sigma Functions",
1372+
"description": "The sigma0 and sigma1 bitwise rotation and shift functions used in expansion",
1373+
"imageUrl": "/decoding-bitcoin/static/explainers/images/sha256-message-schedule/slide-5.png",
1374+
"altText": "SHA256 sigma functions"
1375+
},
1376+
{
1377+
"id": "slide-6",
1378+
"title": "Full 64-Word Schedule",
1379+
"description": "The complete 64-word message schedule ready for the compression rounds",
1380+
"imageUrl": "/decoding-bitcoin/static/explainers/images/sha256-message-schedule/slide-6.png",
1381+
"altText": "SHA256 full 64-word message schedule"
1382+
},
1383+
{
1384+
"id": "slide-7",
1385+
"title": "Compression Function Link",
1386+
"description": "How the message schedule feeds into the SHA256 compression function",
1387+
"imageUrl": "/decoding-bitcoin/static/explainers/images/sha256-message-schedule/slide-7.png",
1388+
"altText": "SHA256 message schedule feeding compression function"
1389+
},
1390+
{
1391+
"id": "slide-8",
1392+
"title": "Why Message Expansion Matters",
1393+
"description": "The security rationale behind expanding 16 words to 64",
1394+
"imageUrl": "/decoding-bitcoin/static/explainers/images/sha256-message-schedule/slide-8.png",
1395+
"altText": "Why SHA256 message expansion matters for security"
1396+
},
1397+
{
1398+
"id": "slide-9",
1399+
"title": "Summary",
1400+
"description": "Summary of the SHA256 message schedule and key takeaways",
1401+
"imageUrl": "/decoding-bitcoin/static/explainers/images/sha256-message-schedule/slide-9.png",
1402+
"altText": "SHA256 message schedule summary"
1403+
}
1404+
]
1405+
},
1406+
{
1407+
"id": "sha256-padding",
1408+
"title": "SHA256 Padding",
1409+
"description": "How SHA256 pads messages to a multiple of 512 bits before hashing, including the length encoding",
1410+
"category": "Cryptography",
1411+
"difficulty": "Advanced",
1412+
"slideCount": 6,
1413+
"tags": ["sha256", "hashing", "cryptography", "padding", "merkle-damgard"],
1414+
"lastUpdated": "2026-02-24",
1415+
"slides": [
1416+
{
1417+
"id": "slide-1",
1418+
"title": "Why Padding is Needed",
1419+
"description": "Why SHA256 requires messages to be padded to a multiple of 512 bits",
1420+
"imageUrl": "/decoding-bitcoin/static/explainers/images/sha256-padding/slide-1.png",
1421+
"altText": "SHA256 padding introduction"
1422+
},
1423+
{
1424+
"id": "slide-2",
1425+
"title": "Step 1: Append a 1 Bit",
1426+
"description": "The first step of SHA256 padding: appending a single 1 bit after the message",
1427+
"imageUrl": "/decoding-bitcoin/static/explainers/images/sha256-padding/slide-2.png",
1428+
"altText": "SHA256 padding step 1 append 1 bit"
1429+
},
1430+
{
1431+
"id": "slide-3",
1432+
"title": "Step 2: Append Zero Bits",
1433+
"description": "Padding with zeros until the message length is 448 mod 512",
1434+
"imageUrl": "/decoding-bitcoin/static/explainers/images/sha256-padding/slide-3.png",
1435+
"altText": "SHA256 padding step 2 zero bits"
1436+
},
1437+
{
1438+
"id": "slide-4",
1439+
"title": "Step 3: Append Message Length",
1440+
"description": "Appending the original message length as a 64-bit big-endian integer",
1441+
"imageUrl": "/decoding-bitcoin/static/explainers/images/sha256-padding/slide-4.png",
1442+
"altText": "SHA256 padding step 3 message length"
1443+
},
1444+
{
1445+
"id": "slide-5",
1446+
"title": "Complete Padded Block",
1447+
"description": "The final padded 512-bit block ready for SHA256 processing",
1448+
"imageUrl": "/decoding-bitcoin/static/explainers/images/sha256-padding/slide-5.png",
1449+
"altText": "SHA256 complete padded block"
1450+
},
1451+
{
1452+
"id": "slide-6",
1453+
"title": "Summary",
1454+
"description": "Summary of the SHA256 padding scheme and why it prevents length extension attacks",
1455+
"imageUrl": "/decoding-bitcoin/static/explainers/images/sha256-padding/slide-6.png",
1456+
"altText": "SHA256 padding summary"
1457+
}
1458+
]
1459+
},
1460+
{
1461+
"id": "tx-pinning",
1462+
"title": "Transaction Pinning",
1463+
"description": "How transaction pinning attacks exploit mempool rules to prevent fee bumping, and why this matters for Lightning Network security",
1464+
"category": "Security",
1465+
"difficulty": "Advanced",
1466+
"slideCount": 4,
1467+
"tags": ["tx-pinning", "mempool", "lightning", "rbf", "cpfp", "security", "fees"],
1468+
"lastUpdated": "2026-02-24",
1469+
"slides": [
1470+
{
1471+
"id": "slide-1",
1472+
"title": "Transaction Pinning Introduction",
1473+
"description": "What transaction pinning is and why it's a concern for time-sensitive Bitcoin protocols",
1474+
"imageUrl": "/decoding-bitcoin/static/explainers/images/tx-pinning/slide-1.png",
1475+
"altText": "Transaction pinning introduction"
1476+
},
1477+
{
1478+
"id": "slide-2",
1479+
"title": "How Pinning Works",
1480+
"description": "How an attacker exploits mempool policy rules (RBF, CPFP limits) to pin a transaction",
1481+
"imageUrl": "/decoding-bitcoin/static/explainers/images/tx-pinning/slide-2.png",
1482+
"altText": "Transaction pinning attack mechanism"
1483+
},
1484+
{
1485+
"id": "slide-3",
1486+
"title": "Impact on Lightning Network",
1487+
"description": "Why transaction pinning is especially dangerous for Lightning channel closures and HTLCs",
1488+
"imageUrl": "/decoding-bitcoin/static/explainers/images/tx-pinning/slide-3.png",
1489+
"altText": "Transaction pinning impact on Lightning Network"
1490+
},
1491+
{
1492+
"id": "slide-4",
1493+
"title": "Mitigations",
1494+
"description": "Proposed and deployed mitigations including package relay and v3 transactions",
1495+
"imageUrl": "/decoding-bitcoin/static/explainers/images/tx-pinning/slide-4.png",
1496+
"altText": "Transaction pinning mitigations"
1497+
}
1498+
]
12031499
}
12041500
]
2.07 MB
Loading
1.68 MB
Loading
1.98 MB
Loading
1.47 MB
Loading
973 KB
Loading
1.34 MB
Loading
1.45 MB
Loading
1.38 MB
Loading
2.1 MB
Loading

0 commit comments

Comments
 (0)