比特币网络和支付

2024-09-04 07:52
文章标签 网络 支付 比特

本文主要是介绍比特币网络和支付,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 比特币网络

        比特币网络是一个去中心化的点对点网络,节点之间可以直接进行交易。网络上有不同类型的节点。

1.1 比特币网络的节点

        比特币网络的节点有两种主要类型:全节点也称为完整节点和简单支付验证(Simple Payment Verification,SPV)节点。

        全节点可以执行比特币钱包、矿工、完整区块链存储和网络路由等全功能的比特币核心客户端的实现。但是,并不是所有节点都必须执行全部功能。

简单支付验证节点或轻量级客户端仅执行比特币钱包和网络路由功能。

        比特币协议的最新版本是 70015,并由比特比核心客户端 0.13.2 版本引入。

        有些节点更喜欢成为包含完整区块链的完整区块链节点,因为它们更安全并在区块传播中起着至关重要的作用,而另外一些节点则仅执行网络路由功能,而不执行挖矿或存储私钥(钱包)功能。还有一种类型是个体矿工节点,可以执行挖掘、存储完整的区块链并充当比特币网络由节点。

1.2 比特币网络常用的协议消息

        比特币网络通过不同的魔数值(Magic Values) 来识别,如下表所示:

网络魔数值十六进制
main0xD9B4BEF9F9 BE B4 D9
testnet30x0709110B0B 11 09 07

交换 getaddr 和 addr 消息以查找客户端不知道的对等方。同时,任何一个节点都可以发送 ping 消息以查看连接是否仍处于活动状态。 getaddr 和 addr 消息是在比特币协议中定义的类型。下图显示了此过程:

        节点还将检查标头链是否具有比区块更多的标头,然后通过发出 getdata 协议消息请求区块,如下下图所示:

 1.3 Wireshark

        要可视化对等方之间的消息交换,可以使用 Wireshark。

        Wireshark 可以用作了解比特币协议的宝贵工具。下面将通过一个显示 version、verack、getaddr、ping、addr 和 inv 消息的基本示例来介绍它。

        在消息的详细信息中,可以看到一些有价值的信息,例如数据包类型、命令名称和协议消息的结果,如下图所示:

        上图显示的是一个协议,该图显示了两个对等方之间的数据流,通过该图可以了解到节点何时启动以及使用了哪种类型的消息。

        下图所示的示例中可以看到消息的交换,如 version、getaddr 和 getdata,以及一些描述消息名称的适当注释。

2. 比特币钱包

        比特币钱包软件用于存储私钥或公钥以及比特币地址,它可以执行不同的功能,例如接收和发送比特币。如今,软件通常提供两种功能:比特币客户端和比特币钱包。在磁盘上,比特币核心客户端比特币钱包被存储为 Berkeley DB 文件。

         比特币钱包软件通过随机选择 256 位数字来生成私钥。生成规则是预定义的。比特币钱包使用私钥对外交易并进行签名。比特币钱包不存储任何硬币,也没有为用户存储余额或硬币的概念。实际上,在比特比网络中,并不存在硬币。取而代之的是,只有交易信息存储在区块链上(更确切地说是UTXO,未使用的交易输出),然后将其用于计算比特币的数量。

        在比特币中,可以使用不同类型的钱包来存储私钥。作为软件程序,它们还可以向用户提供一些额外功能。以在比特币网络中管理和执行交易。

2.1  非确定性钱包

        这些钱包包含随机生成的私钥,因此也被戏称为一堆密钥钱包(Just a Bunch Of Key,JBOK)。比特币核心客户端在首次启动时会生成一些密钥,以及在需要时生成一些密钥。

        对于非确定性钱包来说,管理大量密钥非常困难,并且容易出错,这也可能导致盗窃和丢失硬币。

        此外,用户还需要创建密钥的常规备份并采取适当的方式保护它们,例如加密密钥以防止盗窃或丢失。

 2.2 确定性钱包

        在这类钱包中,密钥是通过哈希函数从种子值中派生出来的。该种子值是随机生成的,通常由人类可读的助记码(Mnemonic Code) 单词表示。助记码单词在 BIP 39 中进行了定义,其中包含用于生成确定性密钥的助记码的比特币改进建议。 

2.6 硬件钱包

        除纸钱包外,在物理上保证钱包安全的另一种方法是使用防篡改设备存储密钥。这种防篡改设备可以定制制造,随着支持近场通信(Near Filed Communication,NFC)的手机的出现,它也可以是 NFC 手机中的安全元件(Secure Element,SE)。

        Trezor 和 Ledger 钱包是最常用的比特币硬件钱包。下图展示的就是 Trezor 钱包的照片。

3. 比特币支付

        可以使用各种技术接受比特币作为支付手段。在许多司法管辖区中,比特币未取得合法货币的地位,但也有很多在线商人和电子商务网站将其视为一种付款方式。买家可以通过多种方式给接受比特币的业务付款。例如,在网上商店中,可以使用比特比商家的解决方案;而在传统的实体商店中,可以使用销售点终端和其他专用硬件。客户可以简单地扫描其中包含卖方付款统一资源标识符(Uniform Resource Identifier,URI) 的二维码,然后使用移动设备付款。比特币 URI 允许用户只需单击链接名扫描二维码即可付款。URI 是代表交易信息的字符串。它在 BIP 21 中定义。二维码可以显示在销售终端附近。几乎所有的比特币钱包都支持此功能。

4. 比特币的创新

        比特币经历了多次修改,并且仍在不断演变。通过解决系统中的各种弱点,它逐渐发展成为越来越可靠的系统。多年以来,比特币的性能一直是比特币专家和发烧友之间争论的焦点。因此,最近几年提出了各种建议来改善比特币性能,从而在协议级别提高交易速度,增强安全性、支付标准化和整体性能。

        这些改进建议通常以 BIP 或比特币协议新版本的形式提出,从而形成一个新的网络。提案的某些更改可以通过软分叉实现,很少有需要硬分叉的情况。

这篇关于比特币网络和支付的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

SpringBoot使用OkHttp完成高效网络请求详解

《SpringBoot使用OkHttp完成高效网络请求详解》OkHttp是一个高效的HTTP客户端,支持同步和异步请求,且具备自动处理cookie、缓存和连接池等高级功能,下面我们来看看SpringB... 目录一、OkHttp 简介二、在 Spring Boot 中集成 OkHttp三、封装 OkHttp

Linux系统之主机网络配置方式

《Linux系统之主机网络配置方式》:本文主要介绍Linux系统之主机网络配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、查看主机的网络参数1、查看主机名2、查看IP地址3、查看网关4、查看DNS二、配置网卡1、修改网卡配置文件2、nmcli工具【通用

使用Python高效获取网络数据的操作指南

《使用Python高效获取网络数据的操作指南》网络爬虫是一种自动化程序,用于访问和提取网站上的数据,Python是进行网络爬虫开发的理想语言,拥有丰富的库和工具,使得编写和维护爬虫变得简单高效,本文将... 目录网络爬虫的基本概念常用库介绍安装库Requests和BeautifulSoup爬虫开发发送请求解

SpringBoot基于沙箱环境实现支付宝支付教程

《SpringBoot基于沙箱环境实现支付宝支付教程》本文介绍了如何使用支付宝沙箱环境进行开发测试,包括沙箱环境的介绍、准备步骤、在SpringBoot项目中结合支付宝沙箱进行支付接口的实现与测试... 目录一、支付宝沙箱环境介绍二、沙箱环境准备2.1 注册入驻支付宝开放平台2.2 配置沙箱环境2.3 沙箱

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为

SSID究竟是什么? WiFi网络名称及工作方式解析

《SSID究竟是什么?WiFi网络名称及工作方式解析》SID可以看作是无线网络的名称,类似于有线网络中的网络名称或者路由器的名称,在无线网络中,设备通过SSID来识别和连接到特定的无线网络... 当提到 Wi-Fi 网络时,就避不开「SSID」这个术语。简单来说,SSID 就是 Wi-Fi 网络的名称。比如

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

poj 3181 网络流,建图。

题意: 农夫约翰为他的牛准备了F种食物和D种饮料。 每头牛都有各自喜欢的食物和饮料,而每种食物和饮料都只能分配给一头牛。 问最多能有多少头牛可以同时得到喜欢的食物和饮料。 解析: 由于要同时得到喜欢的食物和饮料,所以网络流建图的时候要把牛拆点了。 如下建图: s -> 食物 -> 牛1 -> 牛2 -> 饮料 -> t 所以分配一下点: s  =  0, 牛1= 1~