Skip to main content

Crystal-Clear CLI: Smart Contract Supply Chain Tool

Project description

Crystal-Clear CLI: Smart Contract Supply Chain 🔗

Python 3.12+ Poetry License: MIT Tests

Analyze and visualize Ethereum smart contract dependencies with ease. SCSC helps you understand contract interactions by generating detailed call graphs from on-chain data.

✨ Features

  • 📊 Generate comprehensive call graphs from smart contract interactions
  • 🔍 Analyze contract dependencies across specified block ranges
  • 📈 Export visualizations in DOT format for further analysis
  • ⚙️ Flexible configuration options for node connections and logging

🚀 Quick Start

Prerequisites

  • Python 3.12 or higher
  • Access to an Archive Ethereum node (local or remote)
  • Allium API access: optional, used to enrich addresses with labels
  • Etherscan API access: required for retrieving verified smart contract source code
  • Poetry

Installation

# Clone the repository
git clone https://github.com/mab-xyz/crystal-clear.git
cd crystal-clear/webapp/backend/crystal-clear

# Install with Poetry
poetry install

# Activate the environment
poetry shell

💻 Usage

Crystal-Clear CLI provides two main commands:

1. Analyze Dependencies Command

Dependency Graph

# note the RPC node must have method trace_filter 
crystal-clear dependency --node-url <node_url> \
            --address <contract_address> \
            --from-block <block> \
            --to-block <block> \
            [options]

# this exports the smart contract dependency graph
crystal-clear dependency  --node-url <node_url>
            --address 0xE592427A0AEce92De3Edee1F18E0157C05861564 \
            --from-block 0x14c3b86 \
            --to-block 0x14c3b90 \
            --export-dot graph.dot

Risk analysis per contract (computes the risk factors, incl. proxy and permission risks)

You can select the scope of the analysis:

  • single – assesses the risk of the specified contract only.
  • supply-chain – assesses the risk of the contract and all dependent contracts in its supply chain.
crystal-clear risk --etherscan-api-key <etherscan_api> \
            --node-url <node_url> \
            --scope [single|supply-chain]
            --address <contract_address> \
            [options]

crystal-clear risk
            --address 0xE592427A0AEce92De3Edee1F18E0157C05861564 \
            --scope single
            --export-json analysis.json

Key Parameters

Parameter Description Example
--node-url Ethereum node URL http://localhost:8545
--allium-api-key Allium API Key ``
--etherscan-api-key Etherscan API Key ``
--address Contract address to analyze 0xE592427A0AEce92De3Edee1F18E0157C05861564
--from-block Starting block number (hex/decimal) 0x14c3b86 or 21665670
--to-block Ending block number (hex/decimal) 0x14c3b90 or 21665680
--log-level Logging verbosity (analyze only) ERROR, INFO, DEBUG
--export-dot Output file for DOT graph (analyze only) output.dot
--export-json Output file for JSON (analyze only) output.json

🛠️ Development

We use modern Python tools to maintain high code quality:

  • Black: Code formatting
  • Ruff: Fast Python linting
  • pre-commit: Git hooks

Set up the development environment:

# Install development dependencies
poetry install --with dev

# Set up pre-commit hooks
pre-commit install

📄 License

This project is licensed under the MIT License - see the LICENSE file for details.

🤝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.


Made with transparency 🔍 by the crystal-clear team

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mab_crystal_clear-1.0.18.tar.gz (29.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mab_crystal_clear-1.0.18-py3-none-any.whl (36.3 kB view details)

Uploaded Python 3

File details

Details for the file mab_crystal_clear-1.0.18.tar.gz.

File metadata

  • Download URL: mab_crystal_clear-1.0.18.tar.gz
  • Upload date:
  • Size: 29.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.3.3 CPython/3.12.13 Linux/6.17.0-1010-azure

File hashes

Hashes for mab_crystal_clear-1.0.18.tar.gz
Algorithm Hash digest
SHA256 6ed8c64aec0c32fbbf0b54569ca713fd3dda1d7160e456159f4846977c0a87f7
MD5 25c147639c6580e49afca19d7ca54a6a
BLAKE2b-256 6e6ba2e6f0178d2b5bc04dcdb08b67b414104b3ba4d54ff42a8ca9dd7b52db97

See more details on using hashes here.

File details

Details for the file mab_crystal_clear-1.0.18-py3-none-any.whl.

File metadata

  • Download URL: mab_crystal_clear-1.0.18-py3-none-any.whl
  • Upload date:
  • Size: 36.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.3.3 CPython/3.12.13 Linux/6.17.0-1010-azure

File hashes

Hashes for mab_crystal_clear-1.0.18-py3-none-any.whl
Algorithm Hash digest
SHA256 e02fc7a5b31c7c52827ce56f122ca74c1fa4a8cb78b02bd52ba3a0fb3915d0fa
MD5 1de5c3307416e9a9032444c6db8d0290
BLAKE2b-256 93d2ef3249bf1adefd1dec2026fdb366e200676ae24c7524cc126f63922d135c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page