首页 > 其他分享 >比特币客户端&比特币回归测试网络

比特币客户端&比特币回归测试网络

时间:2024-01-20 20:11:27浏览次数:69  
标签:比特 指令 测试 bob 区块 节点 客户端

比特币客户端&比特币回归测试网络

实验概述

区块链技术需要协调一个庞大的去中心化网络以实现功能复杂的分布式状态机副本,必然涉及频繁的指令交互。在此过程中,除了设计功能完备、高鲁棒性的客户端程序,作为构建和调试分布式系统的重要协议,RPC(远程过程调用)也是实现上述功能不可或缺的工具。
本实验以比特币的开源客户端 Bitcoin Core 为例,介绍回归测试网络的搭建方法以及重要 RPC 指令的使用技巧,进而部署一个多节点的本地区块链网络,测试区块链账本层的诸多功能。以此加深学生对于区块链基础协议的理解,提高对于区块链功能的实践能力,实验传授的基本技能也是区块链复杂协议调试过程中的必备积淀。
实验内容概述如下:
A. 掌握 Bitcoin Core 的基础知识、安装与配置方法
B. 利用 Bitcoin Core 搭建多节点回归测试网络,实现挖矿与交易
C. 了解 RPC 的作用,通过控制台与测试链进行更加丰富的交互
D. 拓展实验:利用回归测试网络模拟并测试复杂的区块链状态与功能(分叉、多签交易、局域网联机测试等)

预备知识

1.RPC:远程过程调用(Remote Procedure Control),该类协议可完成网络环境下的对象之间的消息传递工作,传递调用的语义和数据,并从远程计算机程序上请求服务,调用该计算机上提供的函数/方法。
经典的场景下,RPC 最多应用于客户端与服务端间的交互:
image
在区块链网络中,由于所有的全节点都是对称的,无论是轻节点还是全节点本身在发送一条 RPC 指令时,都需要将该指令广播给尽可能多的全节点,每个节点按照最新的区块链状态独立验证并处理该指令,最终通过区块链的共识算法完成对于该指令执行结果的共识。
2.Bitcoin Core:比特币官方开发的节点客户端,提供了成为全节点所需的全面功能,并为比特币的开发、测试和实际运行提供了友好的工具,包含 3 个主要程序:
1)bitcoin-qt:封装了完整的比特币全节点,并提供了一个带有 GUI 的钱包程序,可以对交易数据可视化,在钱包的帮助菜单中提供了控制台以发布多类RPC 指令,对普通用户更加友好。
2)bitcoind:提供了一个轻量级的封装好的比特币全节点,在部署后可以通过向其发布 RPC 指令与之交互,对开发者更加友好。
3)bitcoin-cli:提供了通过命令行全节点发送 RPC 指令的功能,一般用于与bitcoin-d 配合进行调试。
3.Bitcoin 支持的部署类型:
1)主链模式(Mainnet Mode)-原生态的区块链网络,运行需要庞大的存储、通信以及算力开销,其中流通的代币具备经济价值。
2)测试网络模式(Testnet Mode)-由热心开发者组成的全球测试环境,用于在真实的分布式场景下对区块链进行测试,其网络拓扑与区块产生过程都与主链类似,差别是代币没有任何价值。
3)回归测试模式(Regtest Mode)-用于开发者测试区块链功能的本地测试环境,测试者具备完整的权限,可以通过指令随意产生区块、创建没有实际价值的代币或测试任何区块链的实际功能。
以上模式的切换由改写比特币的配置文件的相关参数进行控制。

实验 3-1 熟悉 Bitcoin Core 的基本配置方法

3-1.1 熟悉比特币客户端的配置方法

比特币客户端的配置可以通过在命令行指令中赋值选项参数的方法进行配置,打开命令行,尝试输入口令 bitcoind -h,即可查阅所有的指令。
不过,每次重复输入已有的配置相对非常低效,更加常用的手段是将配置信息写入配置文件 bitcoin.conf 中,再通过命令行工具中的-datadir=,输入配置文件的路径进行读取。比特币客户端在windows下的默认读取路径为:%APPDATA%\Bitcoin\。

练习3-1.1

尝试打开以上地址,新建文件 bitcoin.conf,右击通过常用文本编辑器进行编辑(没有则用系统自带的记事本也可以),在文件第一行添加:regtest=1,保存后调出 cmd 命令行,运行指令:bitcoind,观察以上文件夹内的变化。
正常的情况下,比特币的回归测试模式被激活,bitcoind 建立了一个全节点,可以发现默认路径下出现了 regtest 目录,打开目录,目录中的前三个文件夹分别对应记录了该节点存储的区块数据,链上交易状态以及钱包的配置状态,打开debug.log,便可以阅读在这次测试过程中的调试日志信息。

实验流程
  • 将比特币安装路径和比特币安装路径\daemon\添加到变量中,并检测环境是否配置成功;

  • 打开地址%APPDATA%\Bitcoin\,新建文件 bitcoin.conf,右击通过常用文本编辑器进行编辑,在文件第一行添加:regtest=1,保存后调出 cmd 命令行,运行指令:bitcoind观察以上文件夹内的变化;

  • 打开debug.log,阅读在这次测试过程中的调试日志信息。

实验结果截图
  • 检测环境配置是否成功:
    image

  • 编辑%APPDATA%\Bitcoin\bitcoin.conf的文件内容:

image

  • 运行指令:bitcoind,观察文件夹%APPDATA%\Bitcoin内的变化:

image

可以看到新增了regtest目录。

查看regtest目录内容:

image

查看debug.log,查看该次测试过程中的调试日志信息:

image

思考题

解读当前日志信息,回答以下问题:
1)测试中为存储链上交易状态初始化的数据空间是多少?
2)初始化过程中,节点钱包密钥池最终保存了多少对密钥?
3)简述回归测试模式下,程序添加 P2P 节点的步骤?

思考题回答

1)测试中为存储链上交易状态初始化的数据空间是多少?

答:image

由上图可知,测试中为存储链上交易状态初始化的数据空间为8MiB。

2)初始化过程中,节点钱包密钥池最终保存了多少对密钥?

答:image

答:由上图可知,节点钱包密钥池最终保存了2000对密钥。

3)简述回归测试模式下,程序添加 P2P 节点的步骤?

答:在区块链中增加新的区块并与ip端口绑定,然后加载P2P地址,重建peers.dat和banlist.dat;启动网线程,完成加载,然后开启其他线程,寻找新鲜的更新信息,最后接受版本信息。

3-1.2 学习 bitcoin.conf 的配置方法

练习3-1.2
实验流程
  • 在%APPDATA%\Bitcoin\目录下,新建alice、bob、network三个文件夹,每个文件夹中分别建立一个bitcoin.conf文件,并进行配置;
  • 三个节点皆配置完成后依次通过命令行输入 bitcoind -conf=%APPDATA%\Bitcoin\文件名启动三个全节点;
  • 检验连接是否成功。
实验结果截图
  • 对alice、bob、network三个文件夹下的bitcoin.conf文件分别进行配置,配置内容如下所示:

image

  • 依次通过命令行启动三个节点:

image

  • 打开任意一个节点的日志,发现如下节点成功连接的提示消息:

image

实验3-2 掌握常用 RPC 指令,利用回归测试网络实现挖矿与交易

练习3-2
实验步骤
  • 进行regtest指令的优化;

  • 为 alice 生成至少 150 BTC 的可用余额;

  • 生成交易,由 alice 分别支付给 bob 2.5BTC,network 1.5BTC,并使交易入块获得确认;

  • 展示时请分别用指令获取 bob 和 network 的余额,并展示承载上述关键

    交易的区块原始数据。

实验结果截图
  • 建立regtest.bat文件,文件内容如下所示:

image

  • 将regtest.bat文件路径添加进入注册表:

image

  • 同时运行alice、bob、network三个节点,保证全程一直开启;

1)为 alice 生成至少 150 BTC 的可用余额

  • 使用节点alice生成300个区块:

image

  • 查看alice的余额:

image

2)由 alice 分别支付给 bob 2.5BTC,network 1.5BTC

  • bob和network分别生成一个新的地址:

image

image

  • alice分别向bob、network生成的地址支付2.5、1.5个比特币:

image

image

  • bob和network分别产生一个新的区块,使得交易入块:

image

image

3)用指令获取 bob 和 network 的余额,并展示承载上述关键交易的区块原始数据

  • 查看bob和network的余额:

image

image

  • 查看承载上述两次交易的区块原始数据:

image

image

实验 3-3 通过控制台与测试链进行更加丰富的交互

练习3-3
实验流程
  • 关闭之前打开的运行 bitcoind 的命令行,启动alice、bob、network节点的qt客户端;

  • 选择任意节点的钱包-帮助-调试窗口,切换到控制台菜单下,输入 getbalance 指令使前端更新正确的余额;

  • 利用 rpc 指令将如下交易源数据解析为 JSON 格式:010000000156211389e5410a9fd1fc684ea3a852b8cee07fd15398689d99441b98b

    fa76e290000000000ffffffff0280969800000000001976a914fdc7990956642433ea75ca

    bdcc0a9447c5d2b4ee88acd0e89600000000001976a914d6c492056f3f99692b56967a4

    2b8ad44ce76b67a88ac00000000

实验结果截图
  • 启动alice、bob、network三个节点的qt客户端,更新前端数据之后查看交易记录:

image

  • 利用decoderawtransaction指令解析上述交易源数据可得:

image

思考题回答

**a.该交易的输入输出情况; **

答:该交易的输入为

"vin": [
    {
      "txid": "296ea7bf981b44999d689853d17fe0ceb852a8a34e68fcd19f0a41e589132156",
      "vout": 0,
      "scriptSig": {
        "asm": "",
        "hex": ""
      },
      "sequence": 4294967295
    }
  ],

包含交易的id和序列号;

输出为

"vout": [
    {
      "value": 0.10000000,
      "n": 0,
      "scriptPubKey": {
        "asm": "OP_DUP OP_HASH160 fdc7990956642433ea75cabdcc0a9447c5d2b4ee OP_EQUALVERIFY OP_CHECKSIG",
        "hex": "76a914fdc7990956642433ea75cabdcc0a9447c5d2b4ee88ac",
        "reqSigs": 1,
        "type": "pubkeyhash",
        "addresses": [
          "n4epMtJQQE2WkvjgspLnyoTWw6z9qbvdWF"
        ]
      }
    }, 
    {
      "value": 0.09890000,
      "n": 1,
      "scriptPubKey": {
        "asm": "OP_DUP OP_HASH160 d6c492056f3f99692b56967a42b8ad44ce76b67a OP_EQUALVERIFY OP_CHECKSIG",
        "hex": "76a914d6c492056f3f99692b56967a42b8ad44ce76b67a88ac",
        "reqSigs": 1,
        "type": "pubkeyhash",
        "addresses": [
          "n16YP4DTiYAbYbdd7f3G7UjwCoCkwwhEiN"
        ]
      }
    }
  ]

包含两次交易的交易值、scriptPubKey、收款方地址。

b.该交易的数据量大小;

答:由size的大小可知该交易的数据量大小为119。

实验 3-4:利用回归测试网络模拟并测试复杂的区块链状态与功能

拓展实验 3-4.1
实验步骤
  • 配置A、B、C三个节点,使得A与B、C相连但B与C不相连。
  • 当三者均在线时,挖的区块均在一条链上。
  • 将A下线,B和C继续挖一个区块。
  • A重新上线,观察各节点所在链的数据块数量。
实验结果截图
  • A、B、C同时上线并挖矿,可以看到A、B、C所在支链的数据块的数量相同。

image

  • A下线,B、C各自挖不同数量的数据块(假设B>C),可以看到B、C所在的支链的数据块数量不再相同。

image

  • A再次上线,可以看到,A、B、C所在支链的数据块数量立即取得同步,且数量与A未上线时B所在支链(较长)的数据块的数量相同,即较短的一条支链被遗忘,三节点在最长的链上继续往后的挖矿操作。

image

标签:比特,指令,测试,bob,区块,节点,客户端
From: https://www.cnblogs.com/Silverplan/p/17977068

相关文章

  • UI测试脚本录制器已上线,RunnerGo :UI自动化测试平台
    想快速配置可视化UI自动化测试脚本?RunnerGo近期上线脚本录制器,根据你的测试操作直接生成UI自动化测试脚本,下面是使用方法Step1:下载录制器点击RunnerGo上方插件按钮下载录制器Step2:录制器使用将插件文件拖入浏览器扩展程序点击打开录制器,在浏览器中进行操作时录制器会将操作录制为......
  • UI测试脚本录制器已上线,RunnerGo :UI自动化测试平台
    想快速配置可视化UI自动化测试脚本?RunnerGo近期上线脚本录制器,根据你的测试操作直接生成UI自动化测试脚本,下面是使用方法Step1:下载录制器点击RunnerGo上方插件按钮下载录制器 Step2:录制器使用将插件文件拖入浏览器扩展程序 点击打开录制器,在浏览器中进行操作时录制器......
  • 性能测试基础
    性能测试指标:Vuser虚拟用户transaction事务TPS每秒事务数PV浏览量  PeakPV峰值浏览量性能测试通过标准: 压力测试  压力测试分两种场景:一种是单场景,压一个接口的;第二种是混合场景,多个有关联的接口。压测时间,一般场景都运行10-15分钟。如果是疲劳测试,可以压一天或一......
  • 软件测试的原则有哪些?全文干货!
    前言大家好,我是chowley,最近阅读了不少博客,感觉在软件测试原则方面的内容还是太冗余和笼统,今天我来精简一下,用少量的语言告诉你最干活的东西!软件测试的原则全面性(Exhaustiveness):确保测试覆盖所有可能的情况,包括正常和异常情况。同时,测试应该尽可能地涵盖各种输入和使用情境。......
  • 前端歌谣-第六十五课-express之服务端渲染和客户端渲染
    前言我是歌谣微信公众号关注前端小歌谣一起学习前端知识今天继续给大家讲解服务端渲染和客户端渲染静态资源的讲解案列index.html<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,init......
  • 关于 Special Judge 的编写和本地测试
    最近有几位同学来问我SpecialJudge怎么写?为了让大家可以写出SpecialJudge方便在本地调试和对拍,我就想写一篇文章来介绍SpecialJudge。SpecialJudge是什么?有什么用?大家可以先看这样一篇文章:SpecialJudge-OIWiki(oi-wiki.org)。SpecialJudge(简称:SPJ,别名:checker)......
  • SQL常见面试题(测试工程师)
    用一条 SQL 语句 查询出每门课都大于 60 分的学生姓名。表 scores 如下SELECTname,MIN(score)ashigtfromstudent_scoressgroupbynameHAVINGhigt>60用一条 SQL 语句 查询两门以上不及格课程的同学的学号姓名以及其平均成绩, 并按成绩排序SELECT......
  • 如何编写一个好的测试用例?才能防止背黑锅
    五星上将麦克阿瑟曾经说过“老夫干测试,测试用例不过删用例!“一让我们来讲一个故事今天和女朋友吵架了,(假设你有女朋友)。今晚又是一个人睡沙发,这天晚上,你躺在沙发上,夜不能寐决定学习一下这个事情——如何编写好的测试用例?测试用例什么是测试用例?在这之前,思考一个问题,下面这个简单的QQ......
  • 使用 postman 进行接口自动化测试
    新建一个合集创建新的请求保存在此合集下,并添加测试脚本//根据返回的Code判断请求情况tests["HTTP响应成功"]=responseCode.code===200;varjsonData=JSON.parse(responseBody);tests["业务处理成功"]=jsonData.statusCode===100;运行合集请求运行结果......
  • 快速录制UI测试脚本,RunnerGo新上脚本录制器
    想快速配置可视化UI自动化测试脚本?RunnerGo近期上线脚本录制器,根据你的测试操作直接生成UI自动化测试脚本,下面是使用方法Step1:下载录制器点击RunnerGo上方插件按钮下载录制器Step2:录制器使用将插件文件拖入浏览器扩展程序点击打开录制器,在浏览器中进行操作时录制器会将操作录制为......