ZenulAbidin/electrum-silent-payments-sender

GitHub: ZenulAbidin/electrum-silent-payments-sender

Electrum Qt 桌面钱包的 BIP352 Silent Payments 发送方插件,让用户无需更换钱包即可向静默支付地址发起交易。

Stars: 1 | Forks: 0

# Electrum 的 Silent Payments 发送器 [![测试](https://static.pigsec.cn/wp-content/uploads/repos/cas/c7/c719263266358fdd8a1c44525b9c6c2b8c2b2f3224bc0767bc503767aed57290.svg)](https://github.com/ZenulAbidin/electrum-silent-payments-sender/actions/workflows/tests.yml) [![GitHub 发布](https://img.shields.io/github/v/release/ZenulAbidin/electrum-silent-payments-sender)](https://github.com/ZenulAbidin/electrum-silent-payments-sender/releases) [![许可证:MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) [BIP352 Silent Payments](https://bips.dev/352/) 针对 Electrum Qt 桌面钱包的发送方实现。 它直接集成到 Electrum 现有的**发送**标签页中。将 Silent Payment 地址粘贴到**支付给**字段,输入金额,然后像往常一样按**支付...**。插件会自动检测地址,并构建一笔标准的 Bitcoin 交易,其接收方输出由钱包选定的输入派生。 ## 安全状态 这是一个独立插件,并非官方的 Electrum 功能,且未经过专业的安全审计。请审查源代码、验证发布哈希、在 testnet 上进行测试,并在首次进行 mainnet 支付时仅使用少量金额。 ## 功能 版本 1.0.0 基于 BIP352 1.1.1 并支持: - Electrum 4.6.0 或更高版本,Qt 桌面 GUI - 标准的单签名确定性软件钱包 - 压缩密钥的 P2PKH、嵌套 SegWit 和原生 SegWit 输入 - mainnet 上的 `sp1...` 以及 testnet、signet 或 regtest 上的 `tsp1...` - 原始地址和 BIP21 `sp` 支付指令 - 向前兼容 Silent Payment 地址版本 1 至 30 目前尚不支持: - 硬件、仅观察、导入密钥、multisig 和 2FA 钱包 - Taproot 输入、交易批量处理、payjoin 和 swaps - 未签名预览/导出及后续签名 - 多个接收方或多个 Silent 输出 该交易被设置为不可使用 RBF,尽管设置了 mempoolfullrbf 协议标志,它仍可能发出支持 RBF 的信号。插件仅在 Electrum 选定输入后派生最终输出,在费用确认对话框后再次验证输入和输出,然后立即签名。这些限制确保了依赖输入的 BIP352 派生与签名的交易严格绑定。 ## 安装 1. 从[最新发布版本](https://github.com/ZenulAbidin/electrum-silent-payments-sender/releases/latest)下载 `silent_payments_sender-*.zip` 可安装资产,并针对发布版的 `SHA256SUMS-*` 资产验证其 SHA-256。 2. 在 Electrum 中,打开**工具 → 插件**。 3. 点击**添加插件**,选择该 ZIP 文件,查看 Electrum 的外部插件警告,并启用**Silent Payments Sender**。 4. 如果 Electrum 提示,请重启/重新加载钱包,然后打开常规的**发送**标签页。 ## 使用 将 BIP352 地址或包含 `sp` 参数的 BIP21 URI 粘贴到常规的**支付给**字段中,在 Electrum 常规的**金额**字段中输入金额,然后按**支付...**。现有的描述字段将被保留。如果 URI 包含金额,当金额字段为空时,插件会自动填充该金额。 在 Electrum 的**新交易**发送预览中,支付输出采用紧凑的单行格式 `first-8...last-8 (bc1p-first-8...last-8)`。在最终交易详情中,输出区域会将完整的可重用 `sp1...`/`tsp1...` 接收方地址和完整的一次性派生 `bc1p...`/`tb1p...` 输出包装为对齐的 42 字符行。输出的右键**复制地址**操作将继续复制派生的链上地址。 Silent Payment 地址和派生的 Taproot 地址均可从交易详情对话框中复制。 通过 Electrum 常规的“Coins”标签页选择支持 Coin control。如果遇到极小概率的无效标量(scalar),请选择另一组 UTXO 并重试。 ## 构建与测试 在此仓库中: ``` python3 -m unittest discover -s tests -v python3 scripts/electrum_cli_harness.py python3 scripts/build_release.py python3 scripts/check_release.py dist/silent_payments_sender-1.0.0.zip ``` 这些测试是独立的,并使用一个小巧的纯 Python secp256k1 测试垫片(shim),针对完整的上游 BIP352 1.1.1 向量语料库运行实际的插件核心,执行插件文档范围内记录的每一个发送方用例。发布检查器还会编译每个 Python 文件,并验证 ZIP 布局和清单。有关需求矩阵和明确限制,请参阅 `CONFORMANCE.md`。 CLI 集成测试套件独立于自包含的单元测试。它已在官方 Electrum 4.6.0、4.7.2 和 4.8.0 AppImage Python 环境中,在 Bitcoin mainnet 和 testnet 规则下进行了运行测试。它创建了一个真实的 `Standard_Wallet`,注入了一个合成的离线融资交易,使用了 Electrum 的 Coin 选择和交易类,运行了插件实际的 finalize/seal 路径,重现了费用对话框的 RBF 变异,独立派生了接收方输出密钥,通过 `wallet.sign_transaction` 进行签名,并在往返处理最终原始交易之前以加密方式验证了输入签名。它针对 P2PKH、嵌套 SegWit 和原生 SegWit 钱包重复了此流程。它从不连接到网络。 在使用以下命令提取受支持的官方 Electrum AppImage 后 `--appimage-extract`,运行: ``` APPROOT=/path/to/squashfs-root LD_LIBRARY_PATH="$APPROOT/usr/lib:$APPROOT/usr/lib/x86_64-linux-gnu" \ "$APPROOT/usr/bin/python3" -s scripts/electrum_cli_harness.py \ --network testnet \ --output test-results/electrum-VERSION-testnet-cli-integration.json ``` 再次使用 `--network mainnet` 运行以测试 mainnet 地址编码和交易规则。该测试套件完全离线:其融资交易、种子和 Coins 均为合成的,且不广播任何内容。 已发布的源代码归档包含了 Electrum 4.6.0、4.7.2 和 4.8.0 的 mainnet 和 testnet 结果。 Electrum 4.6.0 是最低受支持版本。它的桌面二进制文件是首批正式支持安装第三方 ZIP 插件的版本,并且其完整的 testnet 交易生命周期通过了此测试套件。Electrum 4.5.8 不兼容,因为它不提供独立的 `electrum_ecc` 包。 ## 许可证与归属 请参阅 `LICENSE` 和 `NOTICE`。 BIP352 的派生改编自 MorenoProg 及 Electrum 贡献者的 Electrum PR [#9900](https://github.com/spesmilo/electrum/pull/9900)。 打包的插件使用了 SilentPayments.xyz 的 SVG 图标作为其 Electrum 插件管理器图标。
标签:BIP352, Electrum插件, 加密货币, 区块链, 比特币, 逆向工具, 钱包