推开区块链世界的大门 : 玩转区块浏览器
随着区块链渐渐进入普通用户视野,很多有趣的去中心化应用开始流行起来,比如下图中去中心化交易所(Uniswap、pancakeSwap、JustSwap、DefiBox),还有基于多种玩法的 DeFi 协议等等。
很多区块链小白们可能费时费力学了半天区块链,创建了钱包,从各种渠道买到了数字货币,开始在钱包中参与各种各样五花八门的 DeFi 应用。那么,钱花出去了有没有被骗?是否根据正常流程参与了应用?这些都是普通非区块链技术用户们最关心的事情。因为不懂得如何确保自己数字货币流向的安全,或者自己参与业务的安全性,导致被骗的情况在区块链世界里屡见不鲜。
本文从区块链的显示器——区块浏览器来教大家玩转当前主流应用型区块链,基于区块链浏览器中交易内容查看、交易关键数据格式、区块链数据存储等几个模块,由浅入深教大家学习区块链,拒绝做“韭菜”,自我辨别项目风险性与交易安全性。
图 1 Uniswap - Ethereum 链
图 2 PancakeSwap - BSC 链
图 3 JustSwap – Tron 链
图 4 DefiBox – EOS 链
今天实验室从几大支持智能合约的区块链平台的区块链浏览器入手,带大家驰骋区块链的海洋。按照智能合约编写语言分类,本期主要讲解支持 Solidity 语言智能合约(以太坊系)与 C++语言智能合约(柚子 EOS)的区块链浏览器。
以太坊系区块浏览器
以太坊系主要分为以下几条区块链,首先是 Ethereum (以太坊),其次是以其为基准进行独自运营发展的几条公链,分别是 Tron (波场)、BSC (币安智能链)、HECO (火币生态链)以及 OKEXChain (OKEX 公链)。作为以太坊系,这几家区块链项目的浏览器产品又细分为三种不同的框架。
Etherscan、BscScan、HecoInfo
以太坊浏览器团队开发的这三个区块浏览器,在框架、数据显示、功能等方面都近乎一致,详细的使用方法后续会统一讲解。
图 5 Etherscan 浏览器主页
图 6 BscScan 浏览器主页
图 7 HecoInfo 浏览器主页
TRONSCAN 波场浏览器
波场浏览器结合其自身账户模型特点以及与以太坊的区别,在框架上与前三个有少许差别,但在功能使用、数据存储以及编码等方面还是存在一些共通性。
图 8 TRONSCAN 浏览器主页
OKT 浏览器
该浏览器主要与其他多个区块链项目浏览器被统一整合在一个平台,主要用于区块数据查询,但其他智能合约读写功能与数据也相应可以实现。
图 9 OKT 浏览器主页
去中心化金融应用(DeFi)中有一些常见的交易类别,以及在区块浏览器中有不同交易信息查询入口,通过这些信息来对应到不同的区块浏览器进行信息匹配查找,确认交易内容是否与 Dapp 前端进行的内容一致(避免前端业务作恶或错误导致数字货币资产丢失)。
1、数字货币转账
几乎所有的 DeFi 协议核心内容均涉及数字货币转账,通过数字货币兑换、锁定、抵押等不同形式的操作来为项目方或者用户带来数字货币收益。
当用户在 DeFi 协议前端执行了需要支出数字货币的操作后,在对应的代币合约中会执行 approve 函数 与 transferFrom 函数,此时打开区块浏览器根据钱包提示的交易 hash (绝对主键,每一笔交易的唯一对应查询 key)、个人钱包地址(对应多个相关地址交易)、交易事件(对应多个相同交易类型)等查找对应交易。
图 10 defi 交易类型查询示例
此处要注意,浏览器页签不同,对应查询页面的内容结构也是完全不同的,图 10 中显示的区块链数据为所有涉及 UNI 代币 的交易,所以交易调用函数多种多样。
图 11 以代币为基准的数据查询链接
图 12 以合约地址为基准的查询页面
图 13 以合约地址为基准的数据查询链接
2、交易匹配查询
交易 method根据以太坊虚拟机底层编码,简单来说,交易 method (即函数 selector,对应图 10 当中的不同交易)为函数体的一个加密 hash 的前 4 位,如下所示:
图 14 交易 method 签名方式
同一函数在以太坊系浏览器中的结果均是相同的,以 Etherscan 和 OKT 浏览器为例,如下所示:
图 15 swapExactTokensForTokens 函数 method (Etherscan 显示)
图 16 swapExactTokensForTokens 函数 method (OKT 浏览器显示)
通过在区块浏览器中查询指定交易可以比对与实际交易操作是否匹配。
交易事件
交易事件用于记录指定函数调用日志,在唯一调用函数中触发一个或多个,用户可以根据事件中记录的内容来查询有限的记录数据是否正确以及与实际交易功能匹配(例如代币流向是否实际转入需要转入的地址等等)。
与交易 method 一样,事件编号(指 topic0,匿名事件 anonymous event 暂不说明)在 EVM (以太坊虚拟机)中也是以声明结构进行加密签名的,可以作为索引进行批量查找:
图 17 事件 topic0 签名方式
图 18 批量查询指定事件 event
如上图所示,这种查找方式在现有区块浏览器中只能查找到部分内容,全部数据需要同步对应区块链全节点进行查找。
交易调用数据比对
最为完整的数据对比就是直接比较对应交易中的函数调用数据,文中以开源合约的对比进行讲解,在开源合约中(图 19),区块浏览器自动将调用数据字节码进行对应序列化存储与显示,而在非开源合约中(图 20),调用数据仍以 EVM 字节码 的形式显示,不太适用于初学者进行比对,此处暂不详解。
图 19 调用数据对比(开源合约)
图 20 调用数据对比(非开源合约)
以转账功能为例,可以通过区块浏览器来对比数据一致性,很方便,以太坊系区块浏览器提供了将数据解码功能,可以更直观的看到调用数据
图 21 转账数据对比(解码前)
图 22 转账数据对比(解码后)
以上功能在其他以太坊系区块浏览器中同样可以进行查找与对比,同样的区块浏览器还提供了很多其他功能,例如审计报告查询等等。有资质的项目方一般会将审计报告在区块浏览器上传,用户可以从根本判断项目风险,拒绝做区块链文盲,保证数字资产安全。关于以太坊系区块浏览器还有很多其他的功能,例如反编译字节码、转账交易列表等等可以更好的用于分析区块链数据、数字货币流向。
柚子 EOS 区块浏览器
其次,我们从柚子 EOS 链的几个区块浏览器产品对比来解释不同区块浏览器的用法。一般来说想要知道一笔转账什么时候到账,当前 EOS 的转账费用是多高,给你转账的地址到底有多土豪,都可以通过区块链浏览器直接展现出来。当然,我们也可以查询到区块中包含的交易信息,以及区块的高度、哈希值、发布时间和开采的矿工,部分区块链浏览器还会显示全网算力、算力难度以及其他的一些参考内容。
EOS 主流常用的区块浏览器有 eosflare、eostracker、bloks.io 等,不同的浏览器在区块链数据展示和查询方面各有优点,后续展开为大家介绍。
图 23 eosflare 浏览器主页
图 24 EOSTracker 浏览器主页
图 25 bloks.io 浏览器主页
由于 EOS 区块链与以太坊的设计理念的不同,他的资源利用以及账户模型都与以太坊有着很大的区别,本文中仅针对不同 EOS 区块浏览器在数据对比查询方面的优劣性做一个说明。以发行在 EOS 区块链上的 USDT 合约(账户地址 tethertether)为例,进行一些数据查询优劣性对比:
1、转账区块信息概览查询
Eosflare 浏览器主要用于快速浏览整个 EOS 区块链数据,查询指定合约账户、区块等数据,无法对应到具体合约存储数据查询等其他精细查询,这一点需要用户自行配合其他 EOS 区块浏览器来查询数据。
图 26 Eosflare 浏览器查询页面
2、详细交易所在区块属性查询
EOS Tracker 浏览器主要用来辅助查询完整交易 id 以及其他一些交易对应区块属性,从而配合在其他区块浏览器进行详细查询。
图 27 EOS Tracker 浏览器查询页面
3、智能合约表存储查询以及详细交易查询
Bloks.io 浏览器相对全面的查询了指定智能合约账户的详细交易信息和存储信息,包括交易元数据、账户信息、资源消耗、不同存储表的指定查询等。结合另外两个区块浏览器和实际参与 Dapp 交易内容进行对比,确保交易内容正确。
图 28 Bloks.io 浏览器查询详细交易内容
图 29 Bloks.io 浏览器查询智能合约存储表内容
区块链世界在区块浏览器上的展示与查询,仅仅是这个世界有限数据查看对比的易中方式,但对于普通用户鉴别五花八门智能合约交易安全与交易流向来说绰绰有余。整个区块链海洋中更深处的奥秘还需要通过搭建区块链节点等方式来一一探究,关于智能合约应用层面的各种实用小 tips 今天就先说到这,下回继续!