比特币普通地址、隔离见证(兼容)、隔离见证(原生)、Taproot 地址傻傻分不清楚

本文主要是介绍比特币普通地址、隔离见证(兼容)、隔离见证(原生)、Taproot 地址傻傻分不清楚,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

我们在使用比特币钱包的时候,可以看到各种地址类型:普通地址、隔离见证(兼容)、隔离见证(原生)、Taproot 地址。

在这里插入图片描述

看得我们一脸懵逼,为什么会有这么多种类型的地址?

它们之间都有什么区别?

接下来我就给你介绍一下。

比特币的地址类型是慢慢发展过来的,刚开始只有普通地址,后来比特币进行了SegWit(隔离见证)升级,所以就发展出来了隔离见证(兼容)和隔离见证(原生)地址。

隔离见证(兼容)地址主要是为了兼容那些不支持隔离见证的老钱包,也就是说那些一直没有升级的老钱包也能使用隔离见证(兼容)地址。

而隔离见证(原生)地址就不兼容老钱包了,只有支持隔离见证的钱包才能使用。

再后来为了提高隐私性、扩展性和效率,特别是在执行复杂交易和智能合约方面的能力,比特币网络又进行了Taproot升级,所以就出现了Taproot地址。

下面我们再来详细看下各个地址的特点:

普通地址(P2PKH)

普通地址,也被称为P2PKH(Pay to Public Key Hash)地址,是比特币最早使用的地址类型。它们以数字“1”开头,例如“1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2”。普通地址的主要特点是直接将比特币发送给一个特定的公钥哈希(即地址),而公钥本身直到交易被广播时才被揭露。这种地址类型的实现原理相对简单,但缺点在于每笔交易都需要公开公钥,从而略微降低了隐私性,并且由于数据结构的限制,增加了交易的大小和费用。

隔离见证地址(SegWit)

为了解决交易可扩展性问题,比特币引入了隔离见证(SegWit)技术。SegWit地址分为兼容模式(P2SH-P2WPKH)和原生模式(P2WPKH)。

兼容模式(P2SH-P2WPKH)

兼容模式地址以数字“3”开头,如“3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy”。它们通过将见证数据(即签名和公钥信息)从交易的传统数据结构中分离出来,来降低每笔交易的大小。

这种方式不仅提高了网络的处理能力,而且向后兼容,通过在P2SH地址中嵌套P2WPKH地址,既兼容了老式钱包,又能利用SegWit带来的优势(如降低交易费用、提高区块链效率),意味着不支持SegWit的钱包和服务也可以使用。

原生模式(P2WPKH)

原生SegWit地址,也称为Bech32地址,以“bc1”开头,如“bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq”。它们完全采用SegWit结构,进一步优化了交易大小和处理速度。相比于兼容模式,原生SegWit地址提供了更好的效率和更低的手续费,但在兼容性方面可能略逊一筹,不支持SegWit的钱包就用不了了。

Taproot地址(P2TR)

Taproot是比特币最新的升级,旨在提高隐私、扩展性和安全性。Taproot地址以“bc1p”开头,通过利用Schnorr签名和Merkle化的脚本树(MAST),它能够提供更高的效率和隐私。这种地址类型能够使复杂的智能合约看起来与普通交易无异,从而增加了链上活动的隐私性。尽管Taproot带来了显著的好处,但其全面采用还需时间,因为它需要钱包和服务提供者的支持。

不同类型的地址之间能互相转账吗?

普通地址、隔离见证(兼容)、隔离见证(原生)、Taproot 地址之间可以互相转账。在比特币网络中,不同类型的地址主要涉及到如何编码和处理交易的细节,但它们都遵循相同的底层比特币协议。

比特币网络根据交易使用的地址类型不同,比特币网络中的节点和矿工会采用不同的处理方法来验证和确认交易。

因此,从任何一种地址类型向另一种类型的地址发送比特币都是可以的,地址类型的不同只是传输的数据格式和方法不同,并不影响发送和接受比特币。

为什么普通比特币地址不能采用SegWit的规则来处理?

普通比特币地址(非SegWit地址)不采用SegWit(隔离见证)的规则来处理,主要基于以下几个原因:

  • 向后兼容性:比特币网络强调向后兼容性,以确保网络的稳定性和旧地址的有效性。比特币是一个去中心化网络,任何改动都需要社区的广泛共识。完全弃用非SegWit地址并强制转向SegWit地址可能会导致未升级钱包的交易被网络拒绝,这会割裂社区,影响现有用户的资金安全。
  • 渐进式升级:比特币采取渐进式的技术升级路径,SegWit的引入就是一个典型例子。通过允许新旧地址类型共存,比特币网络可以确保在引入新技术的同时,不会立即使旧技术过时。这种方法减少了升级对用户的影响,并给予用户和服务提供商时间来适应新技术。
  • 用户选择:不同类型的地址提供了不同的功能和优势。例如,虽然SegWit地址在交易费用和区块链效率方面有优势,但一些用户和服务可能因为特定的兼容性或技术需求而选择继续使用传统地址。提供多种地址类型,允许用户根据自己的需求做出选择。
  • 技术和经济因素:实施SegWit并不仅仅是一个技术升级,它也涉及到经济和政治因素。比如,矿工可能对减少交易费用有所顾虑,因为这直接关系到他们的收入。此外,大规模升级到SegWit也需要广泛的社区支持和足够的技术准备,这需要时间和资源。
  • 兼容性和安全性考虑:任何在比特币网络中推广的新技术都需要经过充分的测试和验证,以确保其不会引入新的安全问题。渐进式地接受新技术,同时保持旧技术的支持,是一种谨慎的做法,可以保障网络的安全性和稳定性。

总的来说,虽然SegWit带来了显著的好处,但在全面采纳之前,比特币社区需要考虑到各种技术、经济和社会因素。通过允许不同类型的地址共存,比特币网络能够提供更广泛的兼容性,同时逐步引导用户和服务提供商向更高效的技术转移。

最后请注意

一个秘钥可以同时生成普通地址、隔离见证(兼容)、隔离见证(原生)、Taproot 地址,但是各地址之间是相互隔离的,就好像你有同一个银行不同的账号,每个账号里的钱是独立的。

如果你把比特币转到你的普通地址里,那么就只能在普通地址里看到你的比特币,其他地址是看不到的。所以你一定要搞清楚,你的比特币是在哪个具体的地址里面。

这篇关于比特币普通地址、隔离见证(兼容)、隔离见证(原生)、Taproot 地址傻傻分不清楚的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/788809

相关文章

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2

Ubuntu固定虚拟机ip地址的方法教程

《Ubuntu固定虚拟机ip地址的方法教程》本文详细介绍了如何在Ubuntu虚拟机中固定IP地址,包括检查和编辑`/etc/apt/sources.list`文件、更新网络配置文件以及使用Networ... 1、由于虚拟机网络是桥接,所以ip地址会不停地变化,接下来我们就讲述ip如何固定 2、如果apt安

查询SQL Server数据库服务器IP地址的多种有效方法

《查询SQLServer数据库服务器IP地址的多种有效方法》作为数据库管理员或开发人员,了解如何查询SQLServer数据库服务器的IP地址是一项重要技能,本文将介绍几种简单而有效的方法,帮助你轻松... 目录使用T-SQL查询方法1:使用系统函数方法2:使用系统视图使用SQL Server Configu

使用Java实现获取客户端IP地址

《使用Java实现获取客户端IP地址》这篇文章主要为大家详细介绍了如何使用Java实现获取客户端IP地址,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 首先是获取 IP,直接上代码import org.springframework.web.context.request.Requ

Linux环境变量&&进程地址空间详解

《Linux环境变量&&进程地址空间详解》本文介绍了Linux环境变量、命令行参数、进程地址空间以及Linux内核进程调度队列的相关知识,环境变量是系统运行环境的参数,命令行参数用于传递给程序的参数,... 目录一、初步认识环境变量1.1常见的环境变量1.2环境变量的基本概念二、命令行参数2.1通过命令编程

C++实现获取本机MAC地址与IP地址

《C++实现获取本机MAC地址与IP地址》这篇文章主要为大家详细介绍了C++实现获取本机MAC地址与IP地址的两种方式,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 实际工作中,项目上常常需要获取本机的IP地址和MAC地址,在此使用两种方案获取1.MFC中获取IP和MAC地址获取

C/C++通过IP获取局域网网卡MAC地址

《C/C++通过IP获取局域网网卡MAC地址》这篇文章主要为大家详细介绍了C++如何通过Win32API函数SendARP从IP地址获取局域网内网卡的MAC地址,感兴趣的小伙伴可以跟随小编一起学习一下... C/C++通过IP获取局域网网卡MAC地址通过win32 SendARP获取MAC地址代码#i

React实现原生APP切换效果

《React实现原生APP切换效果》最近需要使用Hybrid的方式开发一个APP,交互和原生APP相似并且需要IM通信,本文给大家介绍了使用React实现原生APP切换效果,文中通过代码示例讲解的非常... 目录背景需求概览技术栈实现步骤根据 react-router-dom 文档配置好路由添加过渡动画使用

什么是 Ubuntu LTS?Ubuntu LTS和普通版本区别对比

《什么是UbuntuLTS?UbuntuLTS和普通版本区别对比》UbuntuLTS是Ubuntu操作系统的一个特殊版本,旨在提供更长时间的支持和稳定性,与常规的Ubuntu版本相比,LTS版... 如果你正打算安装 Ubuntu 系统,可能会被「LTS 版本」和「普通版本」给搞得一头雾水吧?尤其是对于刚入

常用的jdk下载地址

jdk下载地址 安装方式可以看之前的博客: mac安装jdk oracle 版本:https://www.oracle.com/java/technologies/downloads/ Eclipse Temurin版本:https://adoptium.net/zh-CN/temurin/releases/ 阿里版本: github:https://github.com/