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

如何查询Solana链上智能合约的部署日期?以Bonk合约为例

查询Solana智能合约部署日期的方法

核心思路:通过合约创建交易获取日期

Solana链上没有直接返回合约部署日期的字段,但合约的创建必然对应一笔初始化交易,找到这笔交易的区块时间戳即可转换为部署日期。

方法1:通过区块链浏览器手动定位

多数浏览器默认按最新交易排序,需调整为从旧到新:

  • 输入合约地址DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263打开Solscan或Solana Explorer
  • 切换至「Transactions」标签,调整排序规则为“最早优先”
  • 找到最早的交易,通常包含initialize类指令(比如SPL代币合约的initialize_mint)
  • 查看该交易对应的区块时间戳,转换为常规日期格式即可

以Bonk合约为例,其最早交易为初始化mint的操作,对应区块时间戳转换后为2022年12月29日左右。

方法2:使用Solana官方SDK查询

Python(solana-py库)

先安装依赖:

pip install solana

代码示例:

from solana.rpc.api import Client
from datetime import datetime

# 连接主网节点
client = Client("https://api.mainnet-beta.solana.com")
contract_address = "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263"

# 获取合约地址的交易签名列表
sig_response = client.get_signatures_for_address(contract_address, limit=1000)
signatures = sig_response["result"]

# 遍历交易,找到初始化指令对应的记录
for sig_info in signatures:
    tx_response = client.get_transaction(sig_info["signature"], encoding="jsonParsed")
    instructions = tx_response["result"]["transaction"]["message"]["instructions"]
    
    for instr in instructions:
        if instr["parsed"]["type"] == "initializeMint":
            # 获取区块时间戳并转换为日期
            block_time = client.get_block_time(sig_info["blockTime"])["result"]
            print(f"合约部署日期:{datetime.fromtimestamp(block_time)}")
            exit()

JavaScript(@solana/web3.js库)

先安装依赖:

npm install @solana/web3.js

代码示例:

const { Connection, PublicKey } = require('@solana/web3.js');
const connection = new Connection('https://api.mainnet-beta.solana.com');

const contractAddress = new PublicKey('DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263');

async function fetchDeploymentDate() {
    const signatures = await connection.getSignaturesForAddress(contractAddress, { limit: 1000 });
    
    for (const sigInfo of signatures) {
        const tx = await connection.getTransaction(sigInfo.signature, { encoding: 'jsonParsed' });
        const instructions = tx.transaction.message.instructions;
        
        for (const instr of instructions) {
            if (instr.parsed?.type === 'initializeMint') {
                const blockTime = await connection.getBlockTime(sigInfo.blockTime);
                console.log(`合约部署日期:${new Date(blockTime * 1000)}`);
                return;
            }
        }
    }
}

fetchDeploymentDate();

方法3:使用Solscan公开API

Solscan公开API虽文档有限,但可通过交易列表接口获取最早交易:

  • 调用/account/transactions接口,传入合约地址并指定按时间升序排序
  • 取返回结果的第一笔交易,提取blockTime字段转换为日期即可
  • 注意公开API存在请求频率限制,需控制调用次数

注意事项

  • 若合约由工厂合约创建,需追溯工厂合约的创建交易以获取准确时间
  • 部分合约可能存在多次初始化操作,需确认最早的、对应合约创建的交易记录
  • 公共节点有速率限制,高频查询建议使用付费节点或本地节点

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 23:30:03