掌握比特币:开放区块链编程全解析

项目标题与描述

本项目为 《Mastering Bitcoin: Programming the Open Blockchain》(中文译名:掌握比特币:开放区块链编程)第三版的完整开源内容库。本书由著名比特币技术专家 Andreas M. Antonopoulos 和 David A. Harding 共同撰写,并由 O'Reilly Media 出版。

这是一个技术性书籍项目,旨在全面、深入地解释比特币是什么以及它是如何工作的。本书是开发人员、投资者和任何对比特币技术感兴趣的人的权威指南,提供了参与"互联网货币"时代所需的核心知识。项目以开源形式托管,允许社区协作贡献、修正和改进书稿内容。

功能特性

  • 完整开源书籍:提供《Mastering Bitcoin》第一、第二和第三版的完整 AsciiDoc 源文件,遵循开放式创作模式。

  • 多版本支持:项目仓库中包含了三个已出版版本(2014年第一版、2018年第二版、2023年第三版)的文本内容,供读者和研究者查阅。

  • 技术深度解析:内容覆盖比特币技术的方方面面,包括但不限于:

    • 比特币核心客户端
    • 密钥与地址的生成和管理
    • 钱包的工作原理与类型
    • 交易的构建、签名与广播
    • 比特币网络与区块链数据结构
    • 挖矿原理与共识机制
    • 安全最佳实践与应用案例
  • 代码示例丰富:书中包含大量 Python 代码示例(部分示例代码已包含在本项目仓库中),帮助读者通过实践理解抽象概念。

  • 规范的发布流程:与专业出版社合作,确保内容的严谨性和高质量,最终发布为平装书和电子书。

安装指南

本书主要以在线网页形式和已出版的电子书/纸质书形式供阅读。若您希望参与本书的贡献或本地构建,则需要搭建相应的文档处理环境。

在线阅读 最简单的方式是直接在线阅读。项目提供了 BOOK.md 文件,其中包含各章节的链接,可直接在 GitHub 或浏览器中阅读。

本地开发/构建环境 如果您想贡献内容或需要生成本地格式(如 PDF、EPUB),需要配置 AsciiDoc 处理工具链。

  1. 克隆仓库:

    bash 复制代码
    git clone https://github.com/bitcoinbook/bitcoinbook.git
    cd bitcoinbook
  2. 安装依赖 :构建过程通常需要 AsciiDoc 处理器(如 asciidoctor)以及可能的相关工具(如 make)。具体依赖请参考项目根目录可能存在的构建脚本(如 Makefile)或文档。对于大多数 Linux/macOS 系统,可以使用包管理器安装:

    bash 复制代码
    # 例如,在基于 Debian/Ubuntu 的系统上
    sudo apt-get install asciidoctor
    # 或在 macOS 上使用 Homebrew
    brew install asciidoctor
  3. 平台注意:所有提交的 AsciiDoc 文件应使用 Unix 样式的行尾符(LF),以确保在不同系统上处理的一致性。建议使用专业的文本编辑器(如 VSCode)进行编辑。

使用说明

阅读本书 访问 BOOK.md 文件,点击其中的章节链接即可开始免费阅读。

贡献内容 项目欢迎社区贡献,但请注意贡献规范:

  1. 许可与归属 :所有原创贡献默认采用 CC-BY 许可。贡献者需在 meta/github_contrib.adoc 文件中自行添加署名(姓名、GitHub 用户名或笔名)。引用他人内容需注明来源和兼容的原始许可。

  2. 提交 Pull Request

    • Fork 本仓库并在您的副本上创建新分支。
    • 编辑您想要修改的 .adoc.asciidoc 文件。
    • 一个 Pull Request 应只针对一个文件,避免大范围合并。
    • 提交清晰的描述性信息。
  3. 内容重点:请主要提交非领域专家的文案编辑可能忽略的技术性错误修正。常规的拼写、语法错误将由出版社的编辑团队处理。

代码示例学习 本书包含许多实用的代码片段,展示了如何与比特币网络交互。这些代码是学习比特币编程的宝贵资源。

核心代码

以下是项目关联书籍中部分核心代码示例,演示了使用 Python 与比特币核心节点交互的基本操作:

示例1:查询区块链信息 此代码连接到本地比特币核心节点,并获取当前区块链的高度(区块数)。

python 复制代码
from bitcoin.rpc import RawProxy

# 创建到本地比特币核心节点的连接
p = RawProxy()

# 运行 getblockchaininfo 命令,将结果数据存储在 info 中
info = p.getblockchaininfo()

# 从 info 中检索 'blocks' 元素并打印
print(info['blocks'])

代码注释:此脚本依赖于 python-bitcoinlib 库的 RawProxy 类与 Bitcoin Core 的 JSON-RPC API 交互,getblockchaininfo 返回一个包含区块链各种状态信息的字典,我们从中提取了最新的区块数量。

示例2:解码特定交易 此代码通过交易 ID 获取一笔交易的详细信息,并打印出其所有输出的地址和金额。

python 复制代码
from bitcoin.rpc import RawProxy

p = RawProxy()

# 假设的交易 ID
txid = "466200308696215bbc949d5141a49a4138ecdfdfaa2a8029c1f9bcecd1f96177"

# 首先,以十六进制形式检索原始交易数据
raw_tx = p.getrawtransaction(txid)

# 将交易十六进制解码为 JSON 对象
decoded_tx = p.decoderawtransaction(raw_tx)

# 从交易中检索每一个输出
for output in decoded_tx['vout']:
    print(output['scriptPubKey']['address'], output['value'])

代码注释:getrawtransaction 获取序列化的交易数据,decoderawtransaction 将其解析为可读的 JSON 格式。循环遍历 vout(交易输出列表)可以访问每一笔输出的锁定脚本(包含地址)和输出的比特币数量。

示例3:计算区块的总交易价值 此代码计算指定高度区块内所有交易输出的总值。

python 复制代码
from bitcoin.rpc import RawProxy

p = RawProxy()

# 目标区块的高度
blockheight = 775072

# 获取给定高度的区块哈希
blockhash = p.getblockhash(blockheight)

# 通过哈希检索区块数据
block = p.getblock(blockhash)

# 区块数据中的 'tx' 元素包含了该区块中所有交易 ID 的列表
transactions = block['tx']

block_value = 0

# 遍历区块中的每个交易 ID
for txid in transactions:
    tx_value = 0
    # 通过 ID 检索原始交易
    raw_tx = p.getrawtransaction(txid)
    # 解码交易
    decoded_tx = p.decoderawtransaction(raw_tx)
    # 遍历交易中的每个输出
    for output in decoded_tx['vout']:
        # 累加每个输出的值
        tx_value = tx_value + output['value']

    # 将此交易的价值加到总值中
    block_value = block_value + tx_value

print("Total value in block: ", block_value)

代码注释:该脚本演示了如何从区块到交易进行层层深入的数据获取和计算。它首先通过高度找到区块,然后遍历区块内的每笔交易,最后累加每笔交易所有输出的面值,得到该区块承载的总交易价值(注意:此值包含新挖出的区块奖励和手续费)。

示例4:比特币总量计算 此 Python 函数模拟了比特币的发行计划,计算出比特币的最大总供应量(单位为聪)。

python 复制代码
# 矿工的初始区块奖励是 50 BTC
start_block_reward = 50
# 大约每 4 年(基于 10 分钟的区块间隔)奖励减半
reward_interval = 210000


def max_money():
    # 50 BTC = 50 0000 0000 聪
    current_reward = 50 * 10**8
    total = 0
    while current_reward > 0:
        total += reward_interval * current_reward
        current_reward /= 2
    return total


print("Total BTC to ever be created:", max_money(), "Satoshis")

代码注释:这段代码清晰地体现了比特币的通货紧缩模型。它通过循环模拟了每 210,000 个区块奖励减半一次的机制,直到奖励降至 0 为止,将所有奖励相加即得到理论上限 21,000,000 BTC(即 2,100,000,000,000,000 聪)。

相关推荐
轻赚时代1 小时前
PC 端 AI 图像处理工具实操指南:抠图 / 证件照优化 / 智能擦除全流程解析
图像处理·人工智能·经验分享·笔记·深度学习·创业创新·学习方法
晓山清1 小时前
Meeting Summarizer Using Natural Language Processing论文理解
人工智能·python·nlp·摘要生成
池央1 小时前
从“算子不支持”到“NPU高效执行”:CANN 8.0 TBE 自定义算子落地实践
linux·人工智能
龙腾AI白云1 小时前
卷积神经网络(CNN)详细介绍及其原理详解前言一、什么是卷积神经网络二、输入层
人工智能·django
上海蓝色星球1 小时前
打破BIM应用“花瓶”窘境:让模型“活”在业务场景中
大数据·人工智能
币圈菜头1 小时前
GAEA:情感AI如何改变我们的生活?12月空投前瞻
人工智能·web3·区块链·生活
骥龙1 小时前
5.15、未来已来:AI安全的发展趋势与伦理思考
人工智能·安全
糖果罐子♡1 小时前
在 openEuler 上部署 YOLOv8 实现实时目标检测
人工智能·yolo·目标检测
鲸采云SRM采购管理系统1 小时前
SRM采购系统:鲸采云如何实现全链路管控
大数据·人工智能