You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何比特币采用地址而非公钥作为交易输出?

为什么比特币用地址而非直接用公钥作为交易输出?

这问题问到点子上了!其实比特币没直接把公钥当交易输出,反而搞出“地址”这个概念,核心是为了解决公钥直接暴露带来的一系列实际问题,我给你拆解清楚:

  • 区块空间能省则省
    比特币采用的是secp256k1椭圆曲线,它的公钥分两种:非压缩版是65字节,压缩版也有33字节。而地址呢?比如早期的P2PKH地址经过编码后只有34个字符左右(对应25字节原始数据),SegWit的Bech32地址更紧凑。区块链的存储空间是有限且宝贵的,每笔交易用更短的地址,能省下大量区块空间,让链上容纳更多交易。

  • 隐私保护是核心刚需
    如果直接把公钥写在交易输出里,任何人都能在区块链上把所有关联这个公钥的交易串起来,相当于把你的资金流水完全公开。而地址是公钥经过两次哈希(SHA-256 → RIPEMD-160)再加上版本字节和校验和生成的,哈希是单向不可逆的——没人能从地址反推出你的公钥,只有当你用这个地址的私钥签名交易、把公钥放到交易输入里时,别人才会知道这个地址对应的公钥。这样就能避免你的所有交易被提前关联追踪。

  • 防错易用性拉满
    公钥是一串枯燥的十六进制字符,不仅难记,输入时很容易打错字符,而且没有校验机制——一旦输错公钥转币,那钱就彻底找不回来了。而地址用的是Base58(或Bech32)编码,直接剔除了容易混淆的字符(比如0和O、l和I),还加了4字节的校验和。钱包在接收地址时会自动校验,发现错误就立刻提醒,大大降低转错币的风险。

  • 留足功能扩展空间
    比特币发展这么多年,交易脚本类型一直在升级:从最初的P2PKH,到后来的P2SH(支持多重签名)、SegWit的P2WPKH/P2WSH,再到现在的Taproot。不同的交易类型对应不同的地址格式,而这些格式都是基于公钥哈希扩展出来的。如果当初直接用公钥当输出,就没法区分这些不同的脚本逻辑,后续的功能升级会变得异常麻烦。

补充个小细节:你问题里提到的Curve25519不是比特币使用的曲线,比特币用的是secp256k1,但不管用哪种椭圆曲线,直接暴露公钥都会遇到上述问题,所以地址的设计逻辑是通用的。

内容的提问来源于stack exchange,提问作者Jörg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:41:34