如何查询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
相关产品推荐
相关产品推荐

