随笔 - 18  文章 - 0  评论 - 2  阅读 - 6844

区块链浏览器&常见的区块链钱包

区块链浏览器&常见的区块链钱包

实验概述

  区块链技术的重要特点之一是具有数据不可篡改性。而在其所构筑的公链应用(如数字货币、智能合约)中,良好的数据透明性使得经过区块链接收确认的所有数据变得公开可验证,这也是区块链技术无需信任的决定性因素。区块链浏览器,作为区块链项目的关键基础设施,能够帮助大众在无需运行任何专用软件的情况下,对实时的区块链状态进行解析,获取其感兴趣的部分数据,也是学习区块链技术最为直观便捷的工具。
  本实验一方面以比特币和以太坊的区块链浏览器为例,首先介绍获取区块链数据的基本技巧;进而利用区块链浏览器解析并学习区块链账本层与合约层的构造,结合多个典型事务,加深学生对于多种区块链状态的认知与体会;对批量获取区块链数据进行数据挖掘的相关技巧进行点拨,该实验也是后续所有区块链实践的必备积淀。另一方面,针对于存储私钥的应用——区块链钱包,本实验旨在让学生掌握主流货币系统生成密钥和地址、签发交易的基本方法,以及掌握区块链钱包的基本分类,了解并体验不同类型的区块链钱包,并针对学有余力的同学组队展开进阶实验。

实验 4-1:区块链浏览器的基本操作与功能

1)请在区块链浏览器中查询区块
000000000000000003dd2fdbb484d6d9c349d644d8bbb3cbfa5e67f639a465fe 并对该区块进行分析,该区块有何异常,造成该异常的原因是什么,这可能体现了区块链系统设计中的哪些问题?
2)观察浏览器对于比特币挖矿难度变化的可视化实时结果
https://btc.com/stats/diff ,尝试回答:难度调整的间隔;难度变化的趋势和其带来的影响;推测平均算力的计算方法。
3)参考 blockstream API 的调用说明:
https://github.com/Blockstream/esplora/blob/master/API.md,调用 API 回答以下问题:
a.当前比特币待验证的交易数目为多少?数据量为多大?大概几个区块才能处理完这些交易?
b. 给出高度在 9991-10000 间区块内包含的总交易数目。

实验流程

  • 打开区块链浏览器https://blockstream.info,输入区块地址000000000000000003dd2fdbb484d6d9c349d644d8bbb3cbfa5e67f639a465fe即可进行查询和分析。
  • 打开https://btc.com/stats/diff ,观察浏览器对于比特币挖矿难度变化的可视化实时结果,分析和推测难度调整的间隔,难度变化的趋势和其带来的影响,推测平均算力的计算方法。
  • 参考blockstream API的调用说明,分析当前比特币待验证的交易数目、数据量等;查看高度在特定区间内区块内包含的总交易数目。

实验结果截图

1)image

图1 区块000000000000000003dd2fdbb484d6d9c349d644d8bbb3cbfa5e67f639a465fe信息

image

图2 区块000000000000000003dd2fdbb484d6d9c349d644d8bbb3cbfa5e67f639a465fe交易信息

2)

image

图3 比特币挖矿难度可视化查询

3)

image

图4 内存池积压统计信息

image

图5 高度在9991-10000间的区块信息

思考题回答

1)查询区块000000000000000003dd2fdbb484d6d9c349d644d8bbb3cbfa5e67f639a465fe的交易信息,由图2可知可以看到该区块记录了两场交易,第一场交易是Coinbase类型的,是向1KFHE7w8BhaENAswwryaoccDb6qcT6DbYY支付25BTC的矿工费;第二场交易是5569个地址分别向1KFHE7w8BhaENAswwryaoccDb6qcT6DbYY转账0.00001BTC,总计0.05569BTC。

在第二场交易中,每次交易金额均为小额支付且数量非常多,且交易对象都是同一人,而支付方则有很多,算是支付方对服务器发动了一个DDOS攻击,导致目标地址需要对5569项交易都进行验证,在短时间内无法处理其他交易。

可以看到区块链系统设计中对于这种单词交易金额极少但数量庞大的垃圾订单考虑不足,极其影响服务器的运行。

2)查阅资料得知,比特币系统每2016个区块调整一次挖矿难度系数,每个区块的产生时间大约是10分钟,因此大约每14天调整一次比特币挖矿难度。

难度变化的趋势:难度整体在上升,中间略有波动。

带来的影响:使得计算区块的难度越来越大。

平均算力的计算方法:用当前难度除以平均出块时间。

3)a.由图4可知,当前比特币的交易数目为28729,数据量为69415714,大约69415714/22067个区块可以处理完这些交易。

b.由图5可知高度在9991-10000间区块内包含的总交易数目为10.

实验 4-2:利用区块链浏览器学习区块链账本层构造

观察 P2SH 交易的赎回脚本:
OP_3DUP OP_ADD OP_PUSHNUM_9 OP_EQUALVERIFY OP_ADD OP_PUSHNUM_7 OP_EQUALVERIFY OP_ADD OP_PUSHNUM_8 OP_EQUALVERIFY OP_PUSHNUM_1
参考 https://en.bitcoin.it/wiki/Script
说明该脚本规定的解锁条件和运行机理,并拟写其解锁脚本。

实验流程

参考P2SH交易的脚本规则,说明脚本规定的解锁条件和运行机理,并拟写解锁脚本。

思考题解答

上述赎回脚本的含义是:假设原先栈内有三个数,先将三个数进行复制后置于栈顶,然后将栈顶两数进行相加,再将数字9压入栈内,判断新栈顶两数是否相等,若不等则返回fail,否则将栈顶两数字清除,然后将新栈顶的两数相加并替换原来的两数字进入栈内。之后再将数字7和数字8压入栈内同理。最后若栈顶两数字相等,则将数字1压入栈内,表示解锁成功。

假设原先栈内的三个数分别为xyz,根据上述分析可以列出方程组

{y+z=9z+x=7x+y=8

可以得到x=3,y=5,z=4

将得到的解依次按顺序入栈,再读入赎回脚本的hex编码即可得到解锁脚本。

查看赎回脚本对应的十六进制串:

image

图6 赎回脚本对应的十六进制串

原先赎回脚本的字节数为7,故解锁脚本为OP_PUSHNUM3 OP_PUSHNUM_4 OP_PUSHNUM_5 OP_PUSHDATA1 07 6f938893889388

实验 4-3:利用区块链浏览器解析并学习区块链合约层构造

实验流程

  • 点击任意区块的详情,以 https://etherscan.io/block/8413441 为例,观察合约层部署带来的不同。
  • 以著名的 ERC 代币合约为例探究合约和其触发事务的状态。

实验结果截图

image

图7 https://etherscan.io/block/8413441界面

image

图8 代币的价值以及合约定义的所有方法

image

图9 events一栏

image

图10 查看具体事务地址

思考题解答

学习总结:在智能合约中,区块的大小不再有固定上限,而是由事务费用上线Gaslimit所决定,事务费用则直接与矿工所执行合约的总复杂度相关联。智能合约可以看作是一段写在区块链上的代码,一但某个事件触发合约中的条款,代码将自动执行,每一笔触发合约状态变动的事务在执行时都会扣除一定的执行费用,如果附加的 Gas 因不足被耗尽,则该次执行不会造成区块状态变动,且不会退回所消耗的费用。智能合约具有很多的优势,可以降低生态丧失去中心性的风险,避免免庞大的计算开销以及恶意合约的影响;可以保证透明公平,智能合约会用代码将条件写得清清楚楚并记录在区块链上,整个过程由程序执行,包括编写这个代码的开发者都不能篡改,可以很好地解决传统合约中的信任问题。

实验 4-4:体验比特币靓号地址

查阅相关资料,尝试生成满足以下条件的地址:
包含"ccc"的地址;
以 11 开头且以 77 结尾的地址;
以 3 个数字结尾的地址;
以 3 个数字再接"88"结尾的地址。

实验流程

打开 cmd,直接将 vanitygen.exe 的图标拖拽进 cmd 的小黑窗里打开,然后分别生成满足以下条件的地址:

  • 包含"ccc"的地址;

  • 以 11 开头且以 77 结尾的地址;

  • 以 3 个数字结尾的地址;

  • 以 3 个数字再接"88"结尾的地址。

实验结果截图

(1)指令:-r ccc

地址:1MGe8XqFuDkCgTXDYUwjHnmxsAonWaVccc
image

图11 包含"ccc"的地址

(2)指令:-r ^11.*77$

地址:115jc9NQcTPGMH6aiJkgaJzqJrRrMwVf77
image

图12 以11开头且以77结尾的地址
(3)指令:-r \d{3}$

地址:12XvFGGzLTBfRe9889kMivFyHJwC6Jj671
image

图13 以3个数字结尾的地址

(4)指令:-r \d{3}88$

地址:1EPtFGeBxw1B5tmMHPPnpXxSLvQx58588
image

图14 以3个数字再接"88"结尾的地址

实验 4-5:体验在线生成不同种类的钱包地址

打开实验提供的 html 文件,选择“简体中文”模式,体验各类钱包地址的生成(任选三种方式)。

实验流程

打开实验提供的 html 文件,选择“简体中文”模式,体验各类钱包地址的生成。

实验结果截图&思考题解答

image

图15 普通钱包

image

图16 纸钱包

image

图17 虚荣钱包

拓展实验 4-8藏头诗

实验流程

使用批处理的方式,通过 vanitygen 工具生成一首斜向藏头诗。

实验结果截图

image

图18 斜向藏头诗生成
image-20231016195536723
图19 包含"experiment"的斜向藏头诗

实验4-8:藏头诗

在实验 4-4 中,我们使用 vanitygen 工具生成了很多比特币的靓号地址,现在我们
想要实现一首藏在很多比特币地址中的藏头诗,示例如下:
1 e L u s E 4 j b T M V o w p Z D 9 C 7 z L 2 o b X E v N p X B n d
1 9 x 8 n M x M t S B x B 5 f L k 3 t T n P f p d U K 6 4 9 s D y H "
1 N P p X x j n P H 9 D v h j U j A c J G h y y 4 E J Q n g M b p H
1 4 r e v e k 3 J p C 1 P F r r m s G G R c 5 P d C G S 1 4 Y g h y
1 K y s 8 4 r X X a r 2 8 D P 5 6 Y V 1 3 R U y n d L S x u A v 9 w
1 P h n J 3 t i k w L o v T 1 k n v A L E c 1 t 3 A 7 f A B o Q X u
1 8 T p z 7 N D m Z K d 5 A R P J Z g 1 7 P Y j z R i t 3 s E T C c
1 F 9 L z n R Q V e y a u a 3 f 4 8 M a B P J 9 E T d U W g Q 1 6
1 N n m 2 d R 9 v h n f 4 k w R k 8 D 5 3 S F M L P p 7 x e U 2 a G
1 6 E b 3 S p B y 5 P t t t N e 7 d F G V U g i J g g Z r c S 5 s V
请使用批处理的方式,通过 vanitygen 工具生成一首类似于示例的斜向藏头诗。

采用批处理方式,使得想要隐藏的字符串的第i位位于藏头诗第i行的第i+1个位置。

代码如下:

import os

words = input()
for i, c in enumerate(words):
    pattern = "^\w{%d}%c" % (i + 1, c)
    f = os.popen('vanitygen.exe -r "%s"' % pattern)
    data = f.readlines()
    addr = data[3][8:-1]
    print(addr)

posted on   CyberFisher  阅读(769)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示