EVM Trackooor:在 EVM 链上跟踪任何事物
- 原文链接:www.zellic.io/blog...
- 译者:AI翻译官,校对:翻译小组
- 本文链接:learnblockchain.cn/article…
Zellic 自豪地宣布推出 EVM trackooor,这是一个在区块链上跟踪和处理任意数据的框架。
由于区块链包含大量数据,不容易查询和处理未索引的事件字段。
这就是我们构建 EVM trackooor↗ 的原因——一个用于监控链上任意行为的模块化工具。
EVM trackooor 是一个用于在区块链上跟踪任何类型数据的框架。它允许用户轻松请求和处理区块链数据,包括事件日志、交易和挖掘的区块。
它基本上允许你注册你想要从区块链获取的数据,无论它们是来自特定合约的事件还是特定账户的交易。然后,你可以定义在接收到数据时发生的事情,比如处理数据并将其记录在数据库中,或通过 webhook 发送警报。
EVM trackooor 具有以下特点:
你可以请求实时数据以监控某些活动,或者请求历史数据,提供一个区块范围来处理特定时间段的数据。
区块链有大量数据。虽然有 RPC 调用可以查询这些数据,但是每次要查询和过滤特定目的的数据时,创建一个新项目是非常麻烦的。
EVM trackooor 简化了这个过程,成为一个通用框架用于查询和过滤数据——你所需要做的就是告诉它你在寻找什么数据,它就会直接为你提供这些数据。
例如,假设有一个地址 0xcafe...
持有原生 ETH 和一些 ERC-20 代币,而我们想在该地址移动这些资金时接收通知。
在 RPC 层,这样做看起来像是
eth_subscribe("newHeads")
挖掘的新块,迭代块中的所有交易以查找 0xcafe...
的交易,然后检查交易的 value
。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
和更多内容!
EVM trackooor 是一个命令行工具,你可以在 GitHub↗ 上访问它。在那里,你可以找到更多关于使用的信息,包括如何使用现有模块或创建自己的模块的文档。
Zellic 专注于保障新兴技术的安全。我们的安全研究人员发现了从财富 500 强到 DeFi 巨头等最有价值目标的漏洞。
开发者、创始人和投资者信赖我们的安全评估,以快速、自信地发布产品,而不会出现重大漏洞。凭借我们在现实世界的主动安全研究背景,我们发现了其他人所忽略的问题。
联系我们↗进行更好的审计。真实的审计,而不是走过场。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!