加密货币钱包测试与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有望在更多领域得到应用,为构建更加安全、高效、开放的互联网做出贡献。
超级会员免费看
471

被折叠的 条评论
为什么被折叠?



