You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测以太坊中由其他合约创建的合约?

检测以太坊中由合约创建的合约的方法

一、链上数据查询与调用栈分析

对于没有自定义事件的第三方合约,需要通过以太坊节点的RPC接口解析交易执行过程:

  • 获取交易回执:调用eth_getTransactionReceipt接口,若返回结果包含contractAddress,说明该交易执行过程中创建了新合约。但如果交易的to字段是合约地址(即你提到的场景),需进一步分析调用栈确认发起创建的合约。
  • 解析调用栈:使用debug_traceTransaction接口获取交易的完整执行轨迹,筛选op为CREATE或CREATE2的操作步骤。该步骤的from字段即为发起创建的合约地址,result.address则是新创建的合约地址。

示例(ethers.js调用思路):

const provider = new ethers.providers.JsonRpcProvider("你的节点URL");
const trace = await provider.send("debug_traceTransaction", ["0x3322e04231dde2bad1fd876bc439661531b037e8bd308329768952246781dc62"]);
// 筛选CREATE/CREATE2操作步骤
const createOps = trace.steps.filter(step => step.op === "CREATE" || step.op === "CREATE2");
createOps.forEach(op => {
  console.log("创建者合约地址:", op.from);
  console.log("新合约地址:", op.result.address);
});

二、智能合约层面主动记录

如果是你自己开发的合约体系,最可靠的方式是在合约中主动记录创建关系:

  1. 子合约构造函数记录创建者
    在子合约的构造函数中,用msg.sender获取创建它的合约/外部账户地址,存储为状态变量并发射事件:
pragma solidity ^0.8.0;

contract ChildContract {
    address public immutable creator;
    event ContractCreated(address indexed creator, address indexed child);

    constructor() {
        creator = msg.sender;
        emit ContractCreated(msg.sender, address(this));
    }
}

后续只需查询子合约的creator变量,或解析交易日志中的ContractCreated事件,就能直接获取创建者地址。

  1. 父合约创建时发射事件
    在父合约创建子合约的方法中,主动发射包含子合约地址的事件:
pragma solidity ^0.8.0;

contract ParentContract {
    event ChildDeployed(address indexed parent, address indexed child);

    function deployChild() external returns (address) {
        ChildContract child = new ChildContract();
        emit ChildDeployed(address(this), address(child));
        return address(child);
    }
}

通过监听ChildDeployed事件,可以直接关联父合约与子合约的创建关系。

三、关注交易与日志属性

  • 交易回执的logs字段:如果合约创建时发射了自定义事件,日志中会包含事件的topics和data。可以通过事件签名(如keccak256("ContractCreated(address,address)"))匹配日志,解析出创建者和子合约地址。
  • 合约代码的区块特征:新创建的合约在其创建区块之后才会有代码,可通过eth_getCode接口检查地址是否为合约,再结合区块高度查找对应的创建交易,进一步分析创建来源。

内容的提问来源于stack exchange,提问作者Moon soon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 18:13:20