21、加密货币钱包测试与IPFS系统介绍

加密货币钱包测试与IPFS系统介绍

1. 加密货币钱包测试

为了确保加密货币钱包GUI应用的质量,我们将为其编写测试。这里不会进行详尽的测试,而是为每个标签页创建一个测试,不涉及应用非UI部分的测试。

1.1 账户标签页测试

创建名为 test_account.py 的测试文件,并将其保存到 tests 目录下。以下是测试脚本:

import sys, os
sys.path.append(os.path.realpath(os.path.dirname(__file__)+"/.."))
from wallet import WalletWidget
from PySide2.QtWidgets import QInputDialog
from PySide2 import QtCore

def test_account(qtbot, monkeypatch):
    wallet = WalletWidget()
    qtbot.addWidget(wallet)
    old_accounts_amount = wallet.account_widget.accounts_layout.count()
    monkeypatch.setattr(QInputDialog, 'getText', lambda *args: ("password", True))
    qtbot.mouseClick(wallet.account_widget.create_account_button, QtCore.Qt.LeftButton)
    accounts_amount = wallet.account_widget.accounts_layout.count()
    assert accounts_amount == old_accounts_amount + 1
    wallet.killThreads()

此测试会在点击按钮、弹出对话框、输入密码并点击确定之前,检查账户布局的子项数量。创建新账户后,再次检查子项数量,其数量应增加1。为方便测试,我们对对话框进行了补丁处理。不过,该测试并不全面,失败情况的测试留给读者作为练习。

1.2 发送交易标签页测试

创建名为 test_send.py 的测试文件,保存到 tests 目录下。完整代码可参考 GitLab链接 。测试步骤如下:
1. 检查组合框中第二个账户(目标账户)的余额,从标签读取余额。
2. 将组合框的值改回第一个账户(发送方)。
3. 将目标账户地址输入到目标行编辑框。
4. 在金额行编辑框设置以太币数量,点击发送按钮,注意要对输入对话框进行补丁处理。
5. 等待约20秒,再次将账户组合框的值改为第二个账户,读取余额并比较新旧值,差值应为10以太币。

1.3 代币标签页测试

创建名为 test_token.py 的测试文件,保存到 tests 目录下。测试脚本如下:

import sys, os
sys.path.append(os.path.realpath(os.path.dirname(__file__)+"/.."))
from wallet import WalletWidget
from PySide2.QtWidgets import QInputDialog
from PySide2 import QtCore

def test_token(qtbot, monkeypatch):
    wallet = WalletWidget()
    qtbot.addWidget(wallet)
    old_tokens_amount = wallet.token_widget.tokens_layout.count()
    address = None
    with open('address.txt') as f:
        address = f.readline().rstrip()
    monkeypatch.setattr(QInputDialog, 'getText', lambda *args: (address, True))
    qtbot.mouseClick(wallet.token_widget.watch_token_button, QtCore.Qt.LeftButton)
    tokens_amount = wallet.token_widget.tokens_layout.count()
    assert tokens_amount == old_tokens_amount + 1
    wallet.killThreads()

此测试先从 address.txt 文件加载代币智能合约地址,避免在测试文件中硬编码。测试策略与账户标签页测试类似,检查垂直框布局的子项数量,点击按钮、输入智能合约地址并点击确定后,子项数量应增加1。该测试也不完整,代币信息的测试有待完善。

运行上述测试可使用以下命令:

(wallet-venv) $ pytest tests
2. 构建加密货币钱包的考虑因素

虽然已经创建了桌面加密货币钱包,但它还不完善。构建加密货币钱包时,需要考虑以下方面:

2.1 功能扩展
  • 交易确认块数 :在应用中,我们仅等待一笔交易,但有些用户可能希望先确认几个块。一般来说,12个块确认后,交易基本安全且不可逆转,可参考 相关链接
  • 额外功能 :可以为钱包添加与钱包功能无关的特性,如Mist加密货币钱包不仅是钱包,还是去中心化应用浏览器,能编译智能合约源代码并部署到区块链。
  • 其他特性 :还可实现生成二维码、导出加密私钥、导入私钥、使用助记词生成账户、输入验证以及短时间记住密码等功能。
2.2 不同平台差异
  • 桌面钱包 :桌面应用有充足的内存和存储资源,比特币桌面加密货币钱包可本地访问完整节点。
  • 移动钱包 :移动设备无法存储完整的比特币节点,比特币移动加密货币钱包开发者通常使用简化支付验证(SPV),无需在手机上存储完整节点。
2.3 安全与用户体验
  • 安全
    • 第三方库使用 :谨慎使用第三方库,每个库都可能是攻击向量。我们的加密货币钱包使用了Ethereum GitHub的核心库(如web3.py和Populus)、Qt公司的PySide2库,以及一个用于生成标识头像的第三方库,使用时需确保无隐藏恶意软件。
    • 交易确认数 :根据威胁和风险模型确定交易完成所需的最小确认数,通常12个确认使交易逆转变得不切实际,Mist钱包使用12个确认,ZCash钱包使用10个确认。
    • 密码要求 :可强制用户在创建账户时设置强密码,但要注意避免过度惹恼用户。
  • 用户体验
    • 易用性 :应用应易于使用,比特币创始人中本聪在设计软件时就充分考虑了用户体验,使用base58表示比特币地址,避免了base64中易混淆的字符。
    • 参考指南 :Zcash发布了加密货币钱包设计的UX指南,可参考 链接 ,虽并非所有建议都适用于以太坊,但市场信息展示等建议可采纳。
    • 平台规范 :构建iOS钱包需遵循苹果人机界面指南,构建安卓钱包需遵循Material Design指南,同时注意排版和颜色选择,并进行用户访谈。
3. 星际文件系统(IPFS)

IPFS并非区块链技术的一部分,而是对其的补充,与区块链结合堪称完美。由于区块链存储成本高,人们通常在区块链中保存文件链接,将实际文件存储在云存储等普通存储中,但这种策略存在中心化问题,IPFS为区块链开发者提供了避免此问题的方法。

3.1 IPFS的动机
  • 跨设备文件系统 :IPFS类似于Dropbox,是跨设备文件系统,可在其中保存文件,全球用户访问如同文件在本地计算机一样方便。若将以太坊视为世界单一操作系统,IPFS可看作世界单一存储。
  • 替代或补充HTTP :HTTP协议使用客户端 - 服务器模型,存在资源要求高和效率低的问题。例如,两人在公园相邻位置观看同一视频,服务器需重复发送文件,若能从相邻用户获取文件则更高效。
  • 解决数据分发问题 :2013年末,Juan Benet受知识工具工作中数据分发和版本管理问题的启发,结合Git和BitTorrent的优点,创建了IPFS。BitTorrent启发了文件分发和查找,Git启发了文件完整性和存储转换。
3.2 IPFS的目标
  • 实用目标
    • 节省带宽 :通过P2P网络减少服务器带宽压力。
    • 增加文件寿命 :避免因服务器资源问题导致文件被删除,如Geocities关闭时许多文件丢失。
    • 减轻网络故障影响 :缓解因网络基础设施损坏导致的部分地区网络离线问题。
  • 理想目标
    • 内容民主化 :打破信息集中在少数网站的局面,促进互联网创新。
    • 抵抗审查 :使人们更易镜像和提供可能被审查的文件。

以下是IPFS目标的总结表格:
|目标类型|具体目标|
| ---- | ---- |
|实用目标|节省带宽、增加文件寿命、减轻网络故障影响|
|理想目标|内容民主化、抵抗审查|

mermaid流程图展示IPFS与HTTP的对比:

graph LR
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
    A(HTTP):::process --> B(客户端):::process
    A --> C(服务器):::process
    B -->|请求| C
    C -->|响应| B
    D(IPFS):::process --> E(节点1):::process
    D --> F(节点2):::process
    D --> G(节点3):::process
    E <-->|共享文件| F
    F <-->|共享文件| G
    E <-->|共享文件| G

通过以上内容,我们了解了加密货币钱包测试、构建钱包的考虑因素以及IPFS的相关知识。IPFS作为一种新兴的分布式文件系统,有望解决区块链存储成本高和中心化等问题,为未来的去中心化应用发展提供有力支持。

加密货币钱包测试与IPFS系统介绍

4. IPFS的技术原理

IPFS基于几个关键的技术概念来实现其目标,下面我们将详细介绍这些原理。

4.1 Merkle DAG

Merkle有向无环图(DAG)是IPFS的核心数据结构之一。它用于确保文件的完整性和版本控制。在Merkle DAG中,每个文件或目录被分割成小块,每个小块都有一个唯一的哈希值。这些哈希值被组合成一个树状结构,其中每个节点的哈希值是其所有子节点哈希值的哈希。

这种结构的好处是,如果文件的任何部分发生变化,整个文件的哈希值都会改变。因此,IPFS可以通过比较哈希值来快速验证文件的完整性。此外,Merkle DAG还支持版本控制,因为每个版本的文件都有一个唯一的哈希值。

4.2 对等网络

IPFS是一个对等(P2P)网络,这意味着网络中的每个节点都可以直接与其他节点通信。在IPFS中,节点通过分布式哈希表(DHT)来查找其他节点和文件。当一个节点想要查找一个文件时,它会向DHT发送请求,DHT会返回拥有该文件的节点的地址。

P2P网络的优点是它可以提高文件传输的效率和可靠性。由于文件可以从多个节点同时下载,因此下载速度更快。此外,由于文件存储在多个节点上,即使某个节点离线,文件仍然可以被访问。

5. IPFS的应用场景

IPFS的应用场景非常广泛,下面我们将介绍一些常见的应用场景。

5.1 去中心化存储

IPFS可以用于构建去中心化的存储系统,用户可以将文件存储在IPFS网络中,而不是集中式的服务器上。这样可以提高数据的安全性和可靠性,因为文件存储在多个节点上,并且无法被单一实体控制。

5.2 分布式应用

IPFS可以与区块链技术结合,用于构建分布式应用(DApps)。例如,一个去中心化的社交媒体应用可以使用IPFS来存储用户的帖子和图片,而使用区块链来存储用户的身份和交易信息。

5.3 数据共享

IPFS可以用于数据共享,例如科学研究数据、开源软件等。由于IPFS可以提供高效的文件传输和版本控制,因此可以方便地共享和协作处理数据。

以下是IPFS应用场景的总结表格:
|应用场景|描述|
| ---- | ---- |
|去中心化存储|将文件存储在IPFS网络中,提高数据安全性和可靠性|
|分布式应用|与区块链结合构建DApps,存储应用数据|
|数据共享|方便科学研究数据、开源软件等的共享和协作|

mermaid流程图展示IPFS在分布式应用中的应用:

graph LR
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
    A(用户):::process --> B(DApp):::process
    B --> C(区块链):::process
    B --> D(IPFS):::process
    D --> E(节点1):::process
    D --> F(节点2):::process
    E <-->|共享文件| F
    C -->|存储交易信息| B
    D -->|存储应用数据| B
6. 总结

通过前面的介绍,我们了解了加密货币钱包的测试方法、构建钱包时需要考虑的因素,以及星际文件系统(IPFS)的相关知识。

对于加密货币钱包,测试是确保其质量的重要步骤,我们可以通过编写针对不同标签页的测试脚本来验证钱包的功能。在构建钱包时,需要平衡安全和用户体验,同时考虑不同平台的差异和功能扩展。

IPFS作为一种新兴的分布式文件系统,具有许多优点,如节省带宽、增加文件寿命、抵抗审查等。它的技术原理基于Merkle DAG和P2P网络,使其能够实现高效的文件存储和传输。IPFS的应用场景非常广泛,包括去中心化存储、分布式应用和数据共享等。

未来,随着区块链和去中心化技术的发展,IPFS有望在更多领域得到应用,为构建更加安全、高效、开放的互联网做出贡献。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值