EVM Trackooor:在 EVM 链上跟踪任何事情

  • zellic
  • 更新于 14小时前
  • 阅读 79

EVM Trackooor:在 EVM 链上跟踪任何事物

Zellic 自豪地宣布推出 EVM trackooor,这是一个在区块链上跟踪和处理任意数据的框架。

由于区块链包含大量数据,不容易查询和处理未索引的事件字段。

这就是我们构建 EVM trackooor↗ 的原因——一个用于监控链上任意行为的模块化工具。

什么是 EVM Trackooor?

EVM trackooor 是一个用于在区块链上跟踪任何类型数据的框架。它允许用户轻松请求和处理区块链数据,包括事件日志、交易和挖掘的区块。

它基本上允许你注册你想要从区块链获取的数据,无论它们是来自特定合约的事件还是特定账户的交易。然后,你可以定义在接收到数据时发生的事情,比如处理数据并将其记录在数据库中,或通过 webhook 发送警报。

EVM trackooor 具有以下特点:

  • 实时数据监控,包括事件日志、交易和挖掘的区块
  • 请求历史数据的能力,例如发生在特定区块范围内的过去事件或交易
  • 模块化的方法来请求和处理任意目的的数据
  • 自动解码事件日志和交易数据的事件和函数 ABI 获取

你可以请求实时数据以监控某些活动,或者请求历史数据,提供一个区块范围来处理特定时间段的数据。

我们为什么要制作它?

区块链有大量数据。虽然有 RPC 调用可以查询这些数据,但是每次要查询和过滤特定目的的数据时,创建一个新项目是非常麻烦的。

EVM trackooor 简化了这个过程,成为一个通用框架用于查询和过滤数据——你所需要做的就是告诉它你在寻找什么数据,它就会直接为你提供这些数据。

例如,假设有一个地址 0xcafe... 持有原生 ETH 和一些 ERC-20 代币,而我们想在该地址移动这些资金时接收通知。

在 RPC 层,这样做看起来像是

  • (对于原生 ETH)监听使用 eth_subscribe("newHeads") 挖掘的新块,迭代块中的所有交易以查找 0xcafe... 的交易,然后检查交易的 value
  • (对于 ERC-20 代币)监听 ERC-20 代币合约(例如 USDT 代币合约)发出的 Transfer 事件日志,使用 eth_subscribe("logs"),解码日志并检查 from 地址和 value

这非常繁琐,特别是如果我们要跟踪多个不同的事件,因为对于每个事件,我们必须拥有其 ABI 以进行解码。

EVM trackooor 处理所有这些——它处理检索和过滤数据的整个过程,并实现一种简单的方法提供事件 ABI 以解码事件日志。

我们所需要做的就是提供我们想要监控的交易地址或我们想要监控的事件日志的合约,以及 EVM trackooor 将调用的回调函数,以便我们处理请求的数据。然后在回调函数中,我们可以实现值的检查和发送警报。

现在,我们可以轻松查询和处理区块链上的数据,使我们能够创建复杂的模块,从图形化资金路径到监控合约代理升级和所有权转移。

示例代码

以下是上述用例的示例代码。

package actions 
import (
"evm-trackooor/shared"
"evm-trackooor/utils"
"fmt"
"math/big"
"slices"

"github.com/ethereum/go-ethereum/common"
)

var monitoredAddresses []common.Address

func (p action) InitMonitorTransfers() {
// monitor addresses for transactions
monitoredAddresses = p.o.Addresses
for _, addr := range monitoredAddresses {
addTxAddressAction(addr, handleAddressTx)
}
// monitor erc20 token for transfer events
for _, addrInterface := range p.o.CustomOptions["erc20-tokens"].([]interface{}) {
erc20TokenAddress := common.HexToAddress(addrInterface.(string))
addAddressEventSigAction(erc20TokenAddress, "Transfer(address,address,uint256)", handleTokenTransfer)
}
}

// called when a tx is from/to monitored address
func handleAddressTx(p ActionTxData) {
from := \*p.From
value := p.Transaction.Value()
// tx is from monitored address (since it can be either from/to)
// and value of tx > 0
if slices.Contains(monitoredAddresses, from) &&
value.Cmp(big.NewInt(0)) > 0 {
// alert
fmt.Printf("Native ETH Transfer by %v with value %v\n", from, utils.FormatDecimals(value, 18))
}
}

// called when erc20 token we're tracking emits Transfer event
func handleTokenTransfer(p ActionEventData) {
from := p.DecodedTopics["from"].(common.Address)
value := p.DecodedData["value"].(*big.Int)

// erc20 transfer is from an address we're monitoring
if slices.Contains(monitoredAddresses, from) {
// get erc20 token info (to format value decimals + symbol)
token := p.EventLog.Address
tokenInfo := shared.RetrieveERC20Info(token)
decimals := tokenInfo.Decimals
symbol := tokenInfo.Symbol

// alert
fmt.Printf("ERC20 Transfer by %v with value %v %v\n", from, utils.FormatDecimals(value, decimals), symbol)
}
}

EVM trackooor 接受一个 JSON 配置文件,我们可以在其中指定要跟踪的地址和 ERC-20 代币。这里我们正在跟踪 Binance 18↗ EOA 的原生 ETH 转账和 USDT 转账。

{    "rpcurl": "wss://...",    "actions": {
"MonitorTransfers": {
    "addresses":{ 
            "0x9696f59E4d72E237BE84fFD425DCaD154Bf96976":{}
            },
                "options":{                
                "erc20-tokens":[                    "0xdAC17F958D2ee523a2206206994597C13D831ec7"       ]            
                }
        }
    }
}

以下是模块运行的示例:

这有什么用?

EVM trackooor 使我们能够处理和监控任何 EVM 链上的任意数据。

我们已经使用 EVM trackooor

  • 绘制资金路径以可视化资金流动,包括原生 ETH 和 ERC-20 代币

  • 监听高价值合约的所有权转移和代理升级

和更多内容!

我该如何使用它?

EVM trackooor 是一个命令行工具,你可以在 GitHub↗ 上访问它。在那里,你可以找到更多关于使用的信息,包括如何使用现有模块或创建自己的模块的文档。

关于我们

Zellic 专注于保障新兴技术的安全。我们的安全研究人员发现了从财富 500 强到 DeFi 巨头等最有价值目标的漏洞。

开发者、创始人和投资者信赖我们的安全评估,以快速、自信地发布产品,而不会出现重大漏洞。凭借我们在现实世界的主动安全研究背景,我们发现了其他人所忽略的问题。

联系我们↗进行更好的审计。真实的审计,而不是走过场。

我是 AI 翻译官,为大家转译优秀英文文章,如有翻译不通的地方,在这里修改,还请包涵~

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
zellic
zellic
江湖只有他的大名,没有他的介绍。