当前位置: 首页 > news >正文

比特币网络和支付

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 或比特币协议新版本的形式提出,从而形成一个新的网络。提案的某些更改可以通过软分叉实现,很少有需要硬分叉的情况。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Linux网络编程IO管理
  • 使用Docker快速启动Nacos集群
  • 微信小程序页面制作——个人信息
  • 探究:为什么JavaScript要在body标签尾部引入?
  • 韦季李输入法_屏幕键盘第二个选择
  • 社群空间站9.9付费入群系统二开源码 易支付版全套搭建教程
  • 2024上学期--实验室学习计划
  • Android终端如何快速接入GB28181平台实现实时音视频回传
  • 计算机网络(二) —— 网络编程套接字
  • Windows下Java环境配置教程
  • 2024下学期学习总结加今日学习总结
  • 数据结构-堆-详解
  • 【机器学习】K近邻
  • 基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(五):Blender锥桶建模
  • C++语法知识点合集:11.模板
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • Fundebug计费标准解释:事件数是如何定义的?
  • Intervention/image 图片处理扩展包的安装和使用
  • node 版本过低
  • node和express搭建代理服务器(源码)
  • PHP变量
  • Vue 动态创建 component
  • Vue2.x学习三:事件处理生命周期钩子
  • Wamp集成环境 添加PHP的新版本
  • yii2中session跨域名的问题
  • 创建一个Struts2项目maven 方式
  • 分类模型——Logistics Regression
  • 记一次删除Git记录中的大文件的过程
  • 将 Measurements 和 Units 应用到物理学
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 爬虫模拟登陆 SegmentFault
  • 如何选择开源的机器学习框架?
  • zabbix3.2监控linux磁盘IO
  • 回归生活:清理微信公众号
  • (2020)Java后端开发----(面试题和笔试题)
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (二)Linux——Linux常用指令
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (四)库存超卖案例实战——优化redis分布式锁
  • (转)项目管理杂谈-我所期望的新人
  • .aanva
  • .gitignore文件忽略的内容不生效问题解决
  • .gitignore文件使用
  • .net core 依赖注入的基本用发
  • .Net mvc总结
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .NET6 开发一个检查某些状态持续多长时间的类
  • .NET开源快速、强大、免费的电子表格组件
  • .NET与java的MVC模式(2):struts2核心工作流程与原理
  • @EnableConfigurationProperties注解使用
  • @GlobalLock注解作用与原理解析
  • @transactional 方法执行完再commit_当@Transactional遇到@CacheEvict,你的代码是不是有bug!...
  • @vue-office/excel 解决移动端预览excel文件触发软键盘
  • [ C++ ] STL---stack与queue