solana-fcg-tool


Namesolana-fcg-tool JSON
Version 1.0.4 PyPI version JSON
download
home_pagehttps://github.com/yourusername/solana-fcg-tool
SummaryA comprehensive Rust project analyzer for Solana development with multi-platform support
upload_time2025-10-30 09:39:55
maintainerSolana Analyzer Team
docs_urlNone
authorSolana Analyzer Team
requires_python>=3.7
licenseMIT
keywords rust analyzer solana blockchain code-analysis
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Solana Analyzer

用于分析 Solana/Rust 项目的 Python 包(已发布至 PyPI),封装了对定制版 rust-analyzer 的调用,提供符号查找、结构体提取与调用图分析三大能力。

## 功能特性

- **符号查找**: 在 Rust 项目中查找特定符号(函数、结构体等)
- **结构体分析**: 提取合约结构体、常量、Program ID(返回汇总信息)
- **调用图分析**: 生成函数调用关系图并输出为 JSON 文件
- **多种使用方式**: 支持 Python API 与命令行工具

## 安装

### 方式 A:通过 PyPI(推荐,自动构建)

```bash
pip install solana-fcg-tool
```

- 当前版本:`1.0.3`
- 项目主页:`https://pypi.org/project/solana-fcg-tool/1.0.3/`

> **新特性**:从 v1.0.1 开始,pip install 会自动检测并安装 Rust 环境,然后构建定制版 rust-analyzer 二进制。无需手动配置!

**自动安装流程**:
1. 检测系统是否已安装 Rust/Cargo
2. 如未安装,自动下载并安装 Rust(Unix/Linux/macOS)
3. 自动构建定制版 rust-analyzer 二进制
4. 将二进制文件集成到 Python 包中

**系统要求**:
- **macOS/Linux**: 支持自动安装 Rust 和构建
- **Windows**: 需要手动安装 Rust(见下方说明)
- **网络连接**: 首次安装需要下载 Rust 工具链

**Windows 用户**:
如果您使用 Windows,请先手动安装 Rust:
1. 访问 https://rustup.rs/
2. 下载并运行 rustup-init.exe
3. 重启终端后再运行 `pip install solana-fcg-tool`

### 方式 B:本地开发模式

```bash
pip install -e .
```

## 二进制依赖(重要)

本工具需要一个包含自定义子命令的 rust-analyzer 可执行文件。你可以:

1) 在本仓库根目录构建二进制

```bash
cargo build --release
# 生成的二进制位于:target/release/rust-analyzer
```

2) 让工具能找到该二进制(任选其一):

- 放到 PATH 中,例如:`cp target/release/rust-analyzer ~/.local/bin/`(或 `/usr/local/bin/`)
- 放到包目录:
  ```bash
  python - <<'PY'
  import solana_fcg_tool, pathlib
  p = pathlib.Path(solana_fcg_tool.__file__).parent / 'bin'
  p.mkdir(exist_ok=True)
  print(p)
  PY
  # 将上一步打印的路径替换到下面命令
  cp target/release/rust-analyzer <打印出的路径>/rust-analyzer
  ```
- 直接位于本仓库 `target/release/rust-analyzer`(开发模式下会自动发现)

> 提示:若使用系统 PATH 的 `rust-analyzer`,请确保该二进制就是本仓库构建出的定制版;官方发布版没有本工具需要的子命令。

## 快速开始

### 命令行(安装后提供 `solana-fcg-tool` 命令)

```bash
# 查找符号(逐行 JSON 输出)
solana-fcg-tool source-finder main /path/to/project

# 结构体分析(输出汇总信息到控制台)
solana-fcg-tool struct-analyzer /path/to/project

# 调用图分析(会在包目录 output 下生成 <project>_call_graph.json)
solana-fcg-tool call-graph /path/to/project
```

### Python API

```python
from solana_fcg_tool import SolanaAnalyzer

# 创建分析器实例
analyzer = SolanaAnalyzer("/path/to/your/rust/project")

# 符号查找:返回“多行 JSON 文本”(每行一个 JSON 对象)
symbols_text = analyzer.find_symbols("main")
print(symbols_text)

# 结构体分析:返回汇总字典(数量统计 + 文本摘要)
structs_summary = analyzer.analyze_structs()
print(structs_summary)

# 调用图分析:在包目录 output 中生成 <project>_call_graph.json
call_graph_info = analyzer.analyze_call_graph()
print(call_graph_info)
```

### 便捷函数

```python
from solana_fcg_tool import find_symbols, analyze_structs, analyze_call_graph

symbols_text = find_symbols("/path/to/project", "main")
structs_summary = analyze_structs("/path/to/project")
call_graph_info = analyze_call_graph("/path/to/project")
```

## 输出说明

- `source-finder`:标准输出为“逐行 JSON”,每行一个独立对象,表示一个符号命中;请按行解析。
- `struct-analyzer`:当前返回汇总信息(结构体/常量/ProgramID 数量与摘要),用于快速评估工程特征。
- `call-graph`:会在包目录 `solana_fcg_tool/output/` 下生成 `<project>_call_graph.json`,包含函数到被调函数的映射关系。

## 示例

仓库内置示例工程,可直接运行:

```bash
python example_usage.py

# 或者使用 CLI 对示例工程分析
solana-fcg-tool call-graph ./2025-01-pump-science
```

## 项目结构(简要)

```
├── solana_fcg_tool/          # Python 包源码与 CLI
│   ├── __init__.py           # API 导出(SolanaAnalyzer 及便捷函数)
│   ├── cli.py                # 命令行入口(console_script: solana-fcg-tool)
│   ├── interface.py          # 统一封装,查找并调用 rust-analyzer
│   └── output/               # 调用图 JSON 输出目录
├── crates/                   # 定制 rust-analyzer 源码(含子命令)
└── example_usage.py          # 使用示例
```

## 版本与依赖

- **Python**: >= 3.8
- **Rust/Cargo**: 构建定制版 rust-analyzer 必需
- **rust-analyzer(定制版)**: 含 `source-finder`/`function-analyzer` 子命令

## 故障排除(FAQ)

1. 找不到 `rust-analyzer` 或提示无子命令
   - 请使用本仓库 `cargo build --release` 构建的定制版,并放入 PATH 或包目录 `bin/` 下
   - 官方 rust-analyzer 不包含所需子命令
2. 提示“不是 Rust 工程”
   - 传入的路径需包含 `Cargo.toml`
3. 调用图分析失败
   - 检查二进制路径与权限:`chmod +x target/release/rust-analyzer`
   - 尝试在仓库根目录重新构建
4. Python 包已安装但 CLI 不可用
   - 确认 `solana-fcg-tool` 在 PATH 中:`which solana-fcg-tool`

## 许可证

MIT License

## 贡献

欢迎提交 Issue 和 Pull Request!

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/yourusername/solana-fcg-tool",
    "name": "solana-fcg-tool",
    "maintainer": "Solana Analyzer Team",
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": null,
    "keywords": "rust, analyzer, solana, blockchain, code-analysis",
    "author": "Solana Analyzer Team",
    "author_email": "your.email@example.com",
    "download_url": "https://files.pythonhosted.org/packages/43/e1/e93993742d91741f78e71d18ad92bb90b815b73a9f7b3a59d83e03d67de8/solana_fcg_tool-1.0.4.tar.gz",
    "platform": null,
    "description": "# Solana Analyzer\n\n\u7528\u4e8e\u5206\u6790 Solana/Rust \u9879\u76ee\u7684 Python \u5305\uff08\u5df2\u53d1\u5e03\u81f3 PyPI\uff09\uff0c\u5c01\u88c5\u4e86\u5bf9\u5b9a\u5236\u7248 rust-analyzer \u7684\u8c03\u7528\uff0c\u63d0\u4f9b\u7b26\u53f7\u67e5\u627e\u3001\u7ed3\u6784\u4f53\u63d0\u53d6\u4e0e\u8c03\u7528\u56fe\u5206\u6790\u4e09\u5927\u80fd\u529b\u3002\n\n## \u529f\u80fd\u7279\u6027\n\n- **\u7b26\u53f7\u67e5\u627e**: \u5728 Rust \u9879\u76ee\u4e2d\u67e5\u627e\u7279\u5b9a\u7b26\u53f7\uff08\u51fd\u6570\u3001\u7ed3\u6784\u4f53\u7b49\uff09\n- **\u7ed3\u6784\u4f53\u5206\u6790**: \u63d0\u53d6\u5408\u7ea6\u7ed3\u6784\u4f53\u3001\u5e38\u91cf\u3001Program ID\uff08\u8fd4\u56de\u6c47\u603b\u4fe1\u606f\uff09\n- **\u8c03\u7528\u56fe\u5206\u6790**: \u751f\u6210\u51fd\u6570\u8c03\u7528\u5173\u7cfb\u56fe\u5e76\u8f93\u51fa\u4e3a JSON \u6587\u4ef6\n- **\u591a\u79cd\u4f7f\u7528\u65b9\u5f0f**: \u652f\u6301 Python API \u4e0e\u547d\u4ee4\u884c\u5de5\u5177\n\n## \u5b89\u88c5\n\n### \u65b9\u5f0f A\uff1a\u901a\u8fc7 PyPI\uff08\u63a8\u8350\uff0c\u81ea\u52a8\u6784\u5efa\uff09\n\n```bash\npip install solana-fcg-tool\n```\n\n- \u5f53\u524d\u7248\u672c\uff1a`1.0.3`\n- \u9879\u76ee\u4e3b\u9875\uff1a`https://pypi.org/project/solana-fcg-tool/1.0.3/`\n\n> **\u65b0\u7279\u6027**\uff1a\u4ece v1.0.1 \u5f00\u59cb\uff0cpip install \u4f1a\u81ea\u52a8\u68c0\u6d4b\u5e76\u5b89\u88c5 Rust \u73af\u5883\uff0c\u7136\u540e\u6784\u5efa\u5b9a\u5236\u7248 rust-analyzer \u4e8c\u8fdb\u5236\u3002\u65e0\u9700\u624b\u52a8\u914d\u7f6e\uff01\n\n**\u81ea\u52a8\u5b89\u88c5\u6d41\u7a0b**\uff1a\n1. \u68c0\u6d4b\u7cfb\u7edf\u662f\u5426\u5df2\u5b89\u88c5 Rust/Cargo\n2. \u5982\u672a\u5b89\u88c5\uff0c\u81ea\u52a8\u4e0b\u8f7d\u5e76\u5b89\u88c5 Rust\uff08Unix/Linux/macOS\uff09\n3. \u81ea\u52a8\u6784\u5efa\u5b9a\u5236\u7248 rust-analyzer \u4e8c\u8fdb\u5236\n4. \u5c06\u4e8c\u8fdb\u5236\u6587\u4ef6\u96c6\u6210\u5230 Python \u5305\u4e2d\n\n**\u7cfb\u7edf\u8981\u6c42**\uff1a\n- **macOS/Linux**: \u652f\u6301\u81ea\u52a8\u5b89\u88c5 Rust \u548c\u6784\u5efa\n- **Windows**: \u9700\u8981\u624b\u52a8\u5b89\u88c5 Rust\uff08\u89c1\u4e0b\u65b9\u8bf4\u660e\uff09\n- **\u7f51\u7edc\u8fde\u63a5**: \u9996\u6b21\u5b89\u88c5\u9700\u8981\u4e0b\u8f7d Rust \u5de5\u5177\u94fe\n\n**Windows \u7528\u6237**\uff1a\n\u5982\u679c\u60a8\u4f7f\u7528 Windows\uff0c\u8bf7\u5148\u624b\u52a8\u5b89\u88c5 Rust\uff1a\n1. \u8bbf\u95ee https://rustup.rs/\n2. \u4e0b\u8f7d\u5e76\u8fd0\u884c rustup-init.exe\n3. \u91cd\u542f\u7ec8\u7aef\u540e\u518d\u8fd0\u884c `pip install solana-fcg-tool`\n\n### \u65b9\u5f0f B\uff1a\u672c\u5730\u5f00\u53d1\u6a21\u5f0f\n\n```bash\npip install -e .\n```\n\n## \u4e8c\u8fdb\u5236\u4f9d\u8d56\uff08\u91cd\u8981\uff09\n\n\u672c\u5de5\u5177\u9700\u8981\u4e00\u4e2a\u5305\u542b\u81ea\u5b9a\u4e49\u5b50\u547d\u4ee4\u7684 rust-analyzer \u53ef\u6267\u884c\u6587\u4ef6\u3002\u4f60\u53ef\u4ee5\uff1a\n\n1) \u5728\u672c\u4ed3\u5e93\u6839\u76ee\u5f55\u6784\u5efa\u4e8c\u8fdb\u5236\n\n```bash\ncargo build --release\n# \u751f\u6210\u7684\u4e8c\u8fdb\u5236\u4f4d\u4e8e\uff1atarget/release/rust-analyzer\n```\n\n2) \u8ba9\u5de5\u5177\u80fd\u627e\u5230\u8be5\u4e8c\u8fdb\u5236\uff08\u4efb\u9009\u5176\u4e00\uff09\uff1a\n\n- \u653e\u5230 PATH \u4e2d\uff0c\u4f8b\u5982\uff1a`cp target/release/rust-analyzer ~/.local/bin/`\uff08\u6216 `/usr/local/bin/`\uff09\n- \u653e\u5230\u5305\u76ee\u5f55\uff1a\n  ```bash\n  python - <<'PY'\n  import solana_fcg_tool, pathlib\n  p = pathlib.Path(solana_fcg_tool.__file__).parent / 'bin'\n  p.mkdir(exist_ok=True)\n  print(p)\n  PY\n  # \u5c06\u4e0a\u4e00\u6b65\u6253\u5370\u7684\u8def\u5f84\u66ff\u6362\u5230\u4e0b\u9762\u547d\u4ee4\n  cp target/release/rust-analyzer <\u6253\u5370\u51fa\u7684\u8def\u5f84>/rust-analyzer\n  ```\n- \u76f4\u63a5\u4f4d\u4e8e\u672c\u4ed3\u5e93 `target/release/rust-analyzer`\uff08\u5f00\u53d1\u6a21\u5f0f\u4e0b\u4f1a\u81ea\u52a8\u53d1\u73b0\uff09\n\n> \u63d0\u793a\uff1a\u82e5\u4f7f\u7528\u7cfb\u7edf PATH \u7684 `rust-analyzer`\uff0c\u8bf7\u786e\u4fdd\u8be5\u4e8c\u8fdb\u5236\u5c31\u662f\u672c\u4ed3\u5e93\u6784\u5efa\u51fa\u7684\u5b9a\u5236\u7248\uff1b\u5b98\u65b9\u53d1\u5e03\u7248\u6ca1\u6709\u672c\u5de5\u5177\u9700\u8981\u7684\u5b50\u547d\u4ee4\u3002\n\n## \u5feb\u901f\u5f00\u59cb\n\n### \u547d\u4ee4\u884c\uff08\u5b89\u88c5\u540e\u63d0\u4f9b `solana-fcg-tool` \u547d\u4ee4\uff09\n\n```bash\n# \u67e5\u627e\u7b26\u53f7\uff08\u9010\u884c JSON \u8f93\u51fa\uff09\nsolana-fcg-tool source-finder main /path/to/project\n\n# \u7ed3\u6784\u4f53\u5206\u6790\uff08\u8f93\u51fa\u6c47\u603b\u4fe1\u606f\u5230\u63a7\u5236\u53f0\uff09\nsolana-fcg-tool struct-analyzer /path/to/project\n\n# \u8c03\u7528\u56fe\u5206\u6790\uff08\u4f1a\u5728\u5305\u76ee\u5f55 output \u4e0b\u751f\u6210 <project>_call_graph.json\uff09\nsolana-fcg-tool call-graph /path/to/project\n```\n\n### Python API\n\n```python\nfrom solana_fcg_tool import SolanaAnalyzer\n\n# \u521b\u5efa\u5206\u6790\u5668\u5b9e\u4f8b\nanalyzer = SolanaAnalyzer(\"/path/to/your/rust/project\")\n\n# \u7b26\u53f7\u67e5\u627e\uff1a\u8fd4\u56de\u201c\u591a\u884c JSON \u6587\u672c\u201d\uff08\u6bcf\u884c\u4e00\u4e2a JSON \u5bf9\u8c61\uff09\nsymbols_text = analyzer.find_symbols(\"main\")\nprint(symbols_text)\n\n# \u7ed3\u6784\u4f53\u5206\u6790\uff1a\u8fd4\u56de\u6c47\u603b\u5b57\u5178\uff08\u6570\u91cf\u7edf\u8ba1 + \u6587\u672c\u6458\u8981\uff09\nstructs_summary = analyzer.analyze_structs()\nprint(structs_summary)\n\n# \u8c03\u7528\u56fe\u5206\u6790\uff1a\u5728\u5305\u76ee\u5f55 output \u4e2d\u751f\u6210 <project>_call_graph.json\ncall_graph_info = analyzer.analyze_call_graph()\nprint(call_graph_info)\n```\n\n### \u4fbf\u6377\u51fd\u6570\n\n```python\nfrom solana_fcg_tool import find_symbols, analyze_structs, analyze_call_graph\n\nsymbols_text = find_symbols(\"/path/to/project\", \"main\")\nstructs_summary = analyze_structs(\"/path/to/project\")\ncall_graph_info = analyze_call_graph(\"/path/to/project\")\n```\n\n## \u8f93\u51fa\u8bf4\u660e\n\n- `source-finder`\uff1a\u6807\u51c6\u8f93\u51fa\u4e3a\u201c\u9010\u884c JSON\u201d\uff0c\u6bcf\u884c\u4e00\u4e2a\u72ec\u7acb\u5bf9\u8c61\uff0c\u8868\u793a\u4e00\u4e2a\u7b26\u53f7\u547d\u4e2d\uff1b\u8bf7\u6309\u884c\u89e3\u6790\u3002\n- `struct-analyzer`\uff1a\u5f53\u524d\u8fd4\u56de\u6c47\u603b\u4fe1\u606f\uff08\u7ed3\u6784\u4f53/\u5e38\u91cf/ProgramID \u6570\u91cf\u4e0e\u6458\u8981\uff09\uff0c\u7528\u4e8e\u5feb\u901f\u8bc4\u4f30\u5de5\u7a0b\u7279\u5f81\u3002\n- `call-graph`\uff1a\u4f1a\u5728\u5305\u76ee\u5f55 `solana_fcg_tool/output/` \u4e0b\u751f\u6210 `<project>_call_graph.json`\uff0c\u5305\u542b\u51fd\u6570\u5230\u88ab\u8c03\u51fd\u6570\u7684\u6620\u5c04\u5173\u7cfb\u3002\n\n## \u793a\u4f8b\n\n\u4ed3\u5e93\u5185\u7f6e\u793a\u4f8b\u5de5\u7a0b\uff0c\u53ef\u76f4\u63a5\u8fd0\u884c\uff1a\n\n```bash\npython example_usage.py\n\n# \u6216\u8005\u4f7f\u7528 CLI \u5bf9\u793a\u4f8b\u5de5\u7a0b\u5206\u6790\nsolana-fcg-tool call-graph ./2025-01-pump-science\n```\n\n## \u9879\u76ee\u7ed3\u6784\uff08\u7b80\u8981\uff09\n\n```\n\u251c\u2500\u2500 solana_fcg_tool/          # Python \u5305\u6e90\u7801\u4e0e CLI\n\u2502   \u251c\u2500\u2500 __init__.py           # API \u5bfc\u51fa\uff08SolanaAnalyzer \u53ca\u4fbf\u6377\u51fd\u6570\uff09\n\u2502   \u251c\u2500\u2500 cli.py                # \u547d\u4ee4\u884c\u5165\u53e3\uff08console_script: solana-fcg-tool\uff09\n\u2502   \u251c\u2500\u2500 interface.py          # \u7edf\u4e00\u5c01\u88c5\uff0c\u67e5\u627e\u5e76\u8c03\u7528 rust-analyzer\n\u2502   \u2514\u2500\u2500 output/               # \u8c03\u7528\u56fe JSON \u8f93\u51fa\u76ee\u5f55\n\u251c\u2500\u2500 crates/                   # \u5b9a\u5236 rust-analyzer \u6e90\u7801\uff08\u542b\u5b50\u547d\u4ee4\uff09\n\u2514\u2500\u2500 example_usage.py          # \u4f7f\u7528\u793a\u4f8b\n```\n\n## \u7248\u672c\u4e0e\u4f9d\u8d56\n\n- **Python**: >= 3.8\n- **Rust/Cargo**: \u6784\u5efa\u5b9a\u5236\u7248 rust-analyzer \u5fc5\u9700\n- **rust-analyzer\uff08\u5b9a\u5236\u7248\uff09**: \u542b `source-finder`/`function-analyzer` \u5b50\u547d\u4ee4\n\n## \u6545\u969c\u6392\u9664\uff08FAQ\uff09\n\n1. \u627e\u4e0d\u5230 `rust-analyzer` \u6216\u63d0\u793a\u65e0\u5b50\u547d\u4ee4\n   - \u8bf7\u4f7f\u7528\u672c\u4ed3\u5e93 `cargo build --release` \u6784\u5efa\u7684\u5b9a\u5236\u7248\uff0c\u5e76\u653e\u5165 PATH \u6216\u5305\u76ee\u5f55 `bin/` \u4e0b\n   - \u5b98\u65b9 rust-analyzer \u4e0d\u5305\u542b\u6240\u9700\u5b50\u547d\u4ee4\n2. \u63d0\u793a\u201c\u4e0d\u662f Rust \u5de5\u7a0b\u201d\n   - \u4f20\u5165\u7684\u8def\u5f84\u9700\u5305\u542b `Cargo.toml`\n3. \u8c03\u7528\u56fe\u5206\u6790\u5931\u8d25\n   - \u68c0\u67e5\u4e8c\u8fdb\u5236\u8def\u5f84\u4e0e\u6743\u9650\uff1a`chmod +x target/release/rust-analyzer`\n   - \u5c1d\u8bd5\u5728\u4ed3\u5e93\u6839\u76ee\u5f55\u91cd\u65b0\u6784\u5efa\n4. Python \u5305\u5df2\u5b89\u88c5\u4f46 CLI \u4e0d\u53ef\u7528\n   - \u786e\u8ba4 `solana-fcg-tool` \u5728 PATH \u4e2d\uff1a`which solana-fcg-tool`\n\n## \u8bb8\u53ef\u8bc1\n\nMIT License\n\n## \u8d21\u732e\n\n\u6b22\u8fce\u63d0\u4ea4 Issue \u548c Pull Request\uff01\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "A comprehensive Rust project analyzer for Solana development with multi-platform support",
    "version": "1.0.4",
    "project_urls": {
        "Homepage": "https://github.com/your-repo/solana-analyzer",
        "Issues": "https://github.com/your-repo/solana-analyzer/issues",
        "Repository": "https://github.com/your-repo/solana-analyzer.git"
    },
    "split_keywords": [
        "rust",
        " analyzer",
        " solana",
        " blockchain",
        " code-analysis"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "57e2341c6ad43ba73a8f6555bec1377173211476bc95cc98dc09c736672e1c14",
                "md5": "4ee56e3e0e2cb1752223ba8b8c6df7de",
                "sha256": "5d7f9f47cabc6467d32d033d6be317569081baba0864abaecf6b18dca03d20bc"
            },
            "downloads": -1,
            "filename": "solana_fcg_tool-1.0.4-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "4ee56e3e0e2cb1752223ba8b8c6df7de",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.7",
            "size": 78919405,
            "upload_time": "2025-10-30T09:39:51",
            "upload_time_iso_8601": "2025-10-30T09:39:51.624408Z",
            "url": "https://files.pythonhosted.org/packages/57/e2/341c6ad43ba73a8f6555bec1377173211476bc95cc98dc09c736672e1c14/solana_fcg_tool-1.0.4-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "43e1e93993742d91741f78e71d18ad92bb90b815b73a9f7b3a59d83e03d67de8",
                "md5": "563548564f1db70c3f8b01d633ba6c06",
                "sha256": "cb2850b7649b30bf795890b86b9aa8eefaf735aa057ab9341c9d40b64cc3284c"
            },
            "downloads": -1,
            "filename": "solana_fcg_tool-1.0.4.tar.gz",
            "has_sig": false,
            "md5_digest": "563548564f1db70c3f8b01d633ba6c06",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7",
            "size": 80509312,
            "upload_time": "2025-10-30T09:39:55",
            "upload_time_iso_8601": "2025-10-30T09:39:55.250083Z",
            "url": "https://files.pythonhosted.org/packages/43/e1/e93993742d91741f78e71d18ad92bb90b815b73a9f7b3a59d83e03d67de8/solana_fcg_tool-1.0.4.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-10-30 09:39:55",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "yourusername",
    "github_project": "solana-fcg-tool",
    "github_not_found": true,
    "lcname": "solana-fcg-tool"
}
        
Elapsed time: 0.63994s