web3的数据获取技巧 (v2)
August 23rd, 2022

今天分享的主题是如何在web3的世界里高效的找到自己想要的东西.

首先问一个问题. 这个有没有人不会的?

很好, 都会了是吧, 今天的分享可以结束了.

但是当简单查询查不到想要的东西怎么办, 比如说想知道某个 dapp 的真实用户数量, 不能直接在google上问对吧.


1 - 如何找到某个 Dapp 的合约部署地址

需求: 想知道这个 dapp 的真实用户数量

首先要确定的一点是, 在开始搜索之前一定要明确一个目标, 到底需要的是一个什么样的结果.

不然就会像无头苍蝇那样到处乱看半天都找不到想要的.

1.1 - 官方文档 / 官方仪表盘

一般来说项目方的东西我们可以当做第一可信来源, 这个数据是可以拿来直接用的, 因为错了的话你也不用背锅, 是项目方的数据错了.

以 Uniswap 为例

https://info.uniswap.org/#/optimism/
https://info.uniswap.org/#/optimism/

这里可以看到 Uniswap 在 Optimism 上面的数据

不过就像上面说的那样, 中心化的数据是很容易出错的, 你无法判断这个项目方有没有偷偷的把它的数据改的好看一点. 所以我们的目标是找出该 Dapp 的合约地址, 然后用链上数据验证它的真实性.

所以我们看他的官方文档里有没有说部署后的合约地址

https://docs.uniswap.org/
https://docs.uniswap.org/

如果一时间没看到 deployment / development / contract address 之类的字样也可以直接搜0x

善用你的 F3 / Ctrl + F / 自带的搜索框

Uniswap 说他们家的合约不管是哪条链, 不管是正式网还是测试网都是同样的地址, 然后基本上每条链上每个合约都认证开源了.

https://github.com/Uniswap/v3-periphery/blob/main/deploys.md
https://github.com/Uniswap/v3-periphery/blob/main/deploys.md

然后我们重点找一下 Router / Aggregator 之类的字样, 这种一般是作为一个 Dapp 路由的入口, 如果每一个 Uniswap 的用户都要经过这个入口的话, 那我们只用统计这个入口的使用人数就可以了.

https://optimistic.etherscan.io/address/0xE592427A0AEce92De3Edee1F18E0157C05861564
https://optimistic.etherscan.io/address/0xE592427A0AEce92De3Edee1F18E0157C05861564

区块浏览器的细节我们之后再讲.

如果每个 Dapp 文档写得都这么好的话那就皆大欢喜了. 更多的情况下项目方没有在文档中写出他们的部署后的地址, 或者是哪怕写了但是更新不及时, 这种情况下就得通过别的方式来获取想要的合约地址.

1.2 - Dune / Footprint / Dappradar

有些项目方会维护一个官方的 Dune 仪表盘, Dune 是一个数据聚合的提供方, 在区块链里面可以说是比较可信的数据来源

还有一个平台叫 footprint 更小众一点, 但是 Dune 只有 ETH主网 和 Optimism 的数据, footprint 就包括了 Arbitrum, 做到了完美的互补

要使用这两个数据平台就得会一些 sql, 对于业务和产品, 能简单的看懂 sql 语句就已经是加分项了

https://dune.com/queries/415170/791856
https://dune.com/queries/415170/791856

你可以完全不用理解这其他的在做什么, 就只用看 \x 之后那一串就可以了, 再深入就得是进阶课程的内容了. 如果是官方的仪表盘的话, 那就当做这个地址是正确的.

1.3 - 交互(缕清业务逻辑)

如果上面两个都走不通, 那么就只好自己人肉交互一遍了.

同样以 Uniswap 为例, 这里教大家一个方法怎么白嫖合约地址

点进去看看

得出的结论是 Uniswap 不知道什么时候多加了一个 Router 并且没有写到文档里

而且别忘了 Uniswap 也不是只能做 Swap 还可以提供流动性. 简单解释一下提供流动性的意思就是你把你自己的币存在 Uniswap 然后它会给你年化几个百分点的利息.

进 fe88 里看看

一般来说看到跟 Uniswap 有关的就能80%确定了

但是因为有些时候授权访问行为是和链上的官方 USDC 交互的, 所以我们再确认下

Uniswap 文档里这次给出了 Fe88 这个地址

1.4 - 特例

但是你必须得知道你在干什么, 以及你点的确定到底是什么意思, 不然会有很迷惑性的结果产生

DeFi Saver 举例:

https://app.defisaver.com
https://app.defisaver.com

换一个账号交互

https://app.defisaver.com
https://app.defisaver.com

可以看到同一个入口调用的合约是不一样的, 方法也是不一样的.

如果你把 6e895 这个入口就当做 DeFi Saver 的数据的话就会得到错误的结果. (因为后来我发现不止一个 Dapp 会调用这个合约)

https://app.defisaver.com
https://app.defisaver.com

原因是 DeFi Saver 和 Cozy 用的是用样的逻辑, 先用用户的账户生成一个 smart wallet, 之后的交易会从 smart wallet 之中产生.

由于 smart wallet 是一个合约地址, 合约与合约之间交互不会产生 tx, 所以一个用户的行为只会产生一笔 tx, 就是 from 真实账户 to smart wallet.

这个时候想单纯的通过对方的合约来判断真实数据就更复杂了. 幸运的是目前我也就在 L2 上发现这一家是这样的. 大部分都还是比较友好的.

如果听不懂这一段没有关系, 哪天你碰到类似的情况就懂了, 你总会碰到的

1.5 - 直接 discord 问

如果你还不确定的话, 有一个最直接的方法就是去官方放出来的 Discord / Telegram 频道里面问一句, 能否提供某条链上的合约部署地址, 有些会给有些不会给, 看运气

也会碰到听不懂人话的


Ok了, 现在你已经学会怎么找出一个 Dapp 所有的合约了. 但是当我们查看浏览器的时候, 绝大部分都是不开源的, 没有标签的合约, 这个时候就有新的需求出现, 我该怎么找出合约背后的组织?


2 - 如何从一个合约地址反推出 Dapp

需求: 想知道这个合约是属于哪个组织的

2.1 - 链上数据基础

  1. 区块浏览器都有哪些

  2. 一笔tx发起方一定是账户地址, 接收方是账户地址(转账)或是合约(交互)都可以

    • 如果有人发现不一样的欢迎来打我的脸

    • optimism 上有些会把发起方标识为合约, 但是点进去其实还是账户

  3. methods 为所调用方法的字节头部

  4. 一个合约可以产生任意数量的 internal tx, 这些tx不产生 tx id

  5. ERC20 是代币的标准协议 ERC721是NFT的协议

  6. input data里可以发送字符串消息

https://etherscan.io/tx/0x73052b80983c3f35dad560cb44e7e3f52c626e3a403b7c0d66d61be27c110a2f
https://etherscan.io/tx/0x73052b80983c3f35dad560cb44e7e3f52c626e3a403b7c0d66d61be27c110a2f

这个是几个月前 Harmony 的桥被盗之后的那个黑客的地址:
https://etherscan.io/address/0x0d043128146654c7683fbf30ac98d7b2285ded00

可以看到方法那里带星号意思就是可能 input data 里能被解析成 utf-8 的形式

除了共同的地方, 有些链还有点别的的特点:

  • optimism 里每个block有且只有一条tx

  • nova 每个block 里有且只有两条tx, 其中第一条固定是 ArbOS

  • zksync(v1) 没有 evm ,所以看起来就像全部都是账户

  • 而 starknet 全是合约, 账户本身也是合约

2.2 - 合约溯源

  • 合约认证过的名字

之前 Uniswap 我们已经看过了, 那个就是被认证过的名字

合约的名字只有40%能判断出来, 因为发布者想起什么名字就起什么名字.

https://nova-explorer.arbitrum.io/address/0x28e0f3ebab59a998C4f1019358388B5E2ca92cfA/transactions
https://nova-explorer.arbitrum.io/address/0x28e0f3ebab59a998C4f1019358388B5E2ca92cfA/transactions

比如说 nova 上的这个合约, 名字叫UniswapV2Router, 实际上我们后来发现是属于 RCPswap 的

  • 搜索引擎 / twitter

google 搜索 0xb3833ecd19d4ff964fa7bc3f8ac070ad5e360e56

  • 100% 相似合约 / proxy 合约

如果刚刚这个 0e56 没有搜出来是 CBridge 怎么办呢

0e56 的 byte code 和 563d 是一样的, 而 563d 又是 Celer 项目方部署的, 那么一般情况下 0e56 就属于 Celer, 并且我们能通过相似合约再进一步验证.

  • 代码内标识 / 合约中大量的 token
https://arbiscan.io/address/0xCBBFB7e0E6782DF0d3e91F8D785A5Bf9E8d9775F#code
https://arbiscan.io/address/0xCBBFB7e0E6782DF0d3e91F8D785A5Bf9E8d9775F#code

但是从我挺多天的实际操作下来, 大部分合约都是搜不到+不开源+没标签的状态, 能识别出实体的大概只有10%. 这种时候就不要讲什么搜索技巧了, 直接下一个吧.


3 - 代码搜索

有时候 github 也是一个搜索的好去处, 而且我会经常忘记用它. 就像刚刚说的 dopex 地址, 在这里也能搜到一些些

接下来我就讲讲跟技术关系多一点的 Github 吧. 我用的也不算多, 有讲错了的欢迎指正.

提示: Github 搜索需要登录, 不登录搜索出来的东西是不全的.

需求: github上有什么好项目?
需求: 从某一个/一堆 repo 中找特定的代码

3.1 - code 搜索

在接入 starknet 数据的时候我会利用 starknet 的 python sdk

https://github.com/software-mansion/starknet.py
https://github.com/software-mansion/starknet.py

但是很气的是连 readme 里面的 demo 都运行不起来. (官方把 sdk 升级了但是没有改 readme)

我只有在它库里的代码去找我想要的.

我想找一个能直接调用合约的方法, 而不是通过 function name

可以发现有个 function 就叫 call_contract

点击它可以看到是在哪里被定义的, 在哪里被引用了

我需要的是这个 Invoke Function

来验证一下我得到的结果对不对

好吧其实真的使用中我会用 IDE 直接查, 我相信大部分的技术人员都是这样的对吧. 但是对于不会代码的产品/运营同学提供了一种新的思路去找到自己想要的东西

Github 同时还提供了高级的搜索功能

3.2 - repo 搜索

需求: 不用 api 就能爬取 twitter 数据

直接搜 twitter, 搜出来的东西太多了, 而且大部分是官方 sdk 或者对官方 api 的封装.

这个时候我们搜 twitter scrap (twitter 爬取)

同时我们又想过滤掉那些很久没更新的库

这样筛选出来的两个库已经能满足我们的需要了.

3.3 - github rank

需求: 有没有最近爆火的项目

这里可以看到 Github 推荐给你的一些东西

我更喜欢看每天的这个 trending 榜单, 里面两三天基本榜单就不会重复了, 会有很多新兴的 repo 出现在里面.

但是在语言那里好像选不了 nodejs, 大概是 Github 把他们都归类为 Js 或者 Type Script 了

https://github.com/topics/nodejs
https://github.com/topics/nodejs

那同样的可以去 topics 的页面看有没有新兴的库.


4 - web3搜索 / 搜索技巧

说完 Github 最后再来说说一些通用的搜索技巧吧. 一般大部分人的需求就只有那么几个

需求: 搜不到想要的东西
需求: 搜出来的东西太多
需求: 搜出来的不是我想要的

首先说一句, 2022年了, 8月份了, 现在还有人用百度当做主要搜索引擎吗?

不想用梯子的话, 推荐用 bing, 目前国内最好的了. 不要用夸克, 夸克的搜索是经过过滤的, 它会引导你往他想去的地方去, 很容易造成信息来源单一的问题

得益于大数据加成下的搜索引擎, 现在相比之前更容易搜到想要的东西了, 因为像 google 这样的巨头都有自己的推荐算法, 有时候他们比我们自己还知道想要什么

4.1 - 搜索引擎的工作原理

说实话我看到这种图第一反应是挺烦的.

  1. 收集全网的网站数据, 构建数据库 (数据采集+存储)

  2. 解析文档, 创建索引和 倒排索引

  3. 将用户请求翻译成查询语句(SQL 精确搜索)

  4. 相似度得分排序, 推荐系统, 内部权重/SEO (模糊搜索)

  5. 竞价排名, 广告

一般来说,信息在2页之后被看到的几率就会大大的较低, 所以我们做的所有步骤都是为了让前两页就出现我们想要的信息.

所以插一句题外话, 都去装一个去广告的插件, 免费的就可以, adblock 或者 ublock 都可以 (不会有人用的不是 chrome 浏览器吧)

4.2 - 符号搜索技巧

""
双引号可以完全匹配搜索
这个用的最多 尤其是搜索引擎总是强制分开你想要的东西

AND / &
平时用空格分隔的话就是AND

NOT / -
减号用来排除一些不想要的词条
比如说第一页全是百度知道/百度百科 就可以 -百度
ipad -apple

关键词都出现就用加号
uniswap +sushiswap +pancakeswap

OR / |
uniswap OR sushiswap OR pancakeswap

()
组合关键词
(ipad OR iphone) apple

4.3 - 关键字搜索技巧

site:
uniswap site:twitter.com

intitle:
强制包含在标题里

filetype: / ext:
除了学术类的pdf 其他类型的不推荐用这个方法
更适合去特定的站点找

cache:
直接查看某个站点的缓存
cache:hop.exchange

一般来说掌握这些就足够了, 剩下的就了解就可以了, 我一向来都是如此, 没有必要把所有东西都记住, 哪怕记住了一直不用也总会忘的. 只要知道能实现某种能力, 那我只需要知道在哪里去找这种能力就可以了.

而且有时候我们并不想让算法帮我们过滤太多的信息, 我个人还是喜欢保持有用的消息越多越好的.

  • ip:

  • language: 语言

  • loc: / location: 位置

  • feed: 搜索带 RSS 的

4.4 - web3搜索 / twitter搜索

twitters搜索

推荐大家用 twitterdeck 进行搜索

web3搜索

mirror搜索

后两个网站可能都不太全 就比如我搜自己的 mirror 就搜不到hhh

这几个链接在你想快速了解某个区块链的东西的时候很有用.


5 - 其他

  1. 图片类型搜索

    1. google搜图

    2. 搜狗识图

  2. 代币相关

    1. Coingecko

    2. 非小号

  3. 网盘搜索 / 文件搜索

  4. 特定网站类型

  5. 其他信息收集

    • 淘宝商品详情比说明书还清楚

    • 社会工程学

文章同步的放在了 mirror, 欢迎大家订阅一下, 当然如果再关注我的 twitter 就更好了.


6 - 小实践

怎么搜索 (3,3) ? (限定区块链领域)


Ref.

Subscribe to 0xice9
Receive the latest updates directly to your inbox.
Nft graphic
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.
More from 0xice9

Skeleton

Skeleton

Skeleton