Skip to main content

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

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.21.tar.gz (30.0 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.21-py3-none-any.whl (36.6 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for mab_crystal_clear-1.0.21.tar.gz
Algorithm Hash digest
SHA256 709e4fa4f5f058389c0eeb3b8536039de01c7d2fb273611ef10c4fa7b91ffe21
MD5 65b3a0dd290d2a0d125975d1945c0258
BLAKE2b-256 5b6aef013dcdf658561977449e0775c1448436c1948700916e139665e3dbf7a2

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for mab_crystal_clear-1.0.21-py3-none-any.whl
Algorithm Hash digest
SHA256 d1b108f5cd4b9059d4dfa94266b05947f5956bb04b87a53e3c6843ec1dc9cc6b
MD5 ce0dff7f5197540eca10517b583ea521
BLAKE2b-256 d19e132ad75be52f3b1676e1e08ce12657ed45c09069c84cabfc22c1f38a62c9

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

1.0.21 This release

2 files

1.0.20

2 files

1.0.19

2 files

1.0.18

2 files

1.0.17

2 files

1.0.16

2 files

1.0.15

2 files

1.0.14

2 files

1.0.13

2 files

1.0.12

2 files

1.0.11

2 files

1.0.10

2 files

1.0.9

2 files

1.0.8

2 files

1.0.7

2 files

1.0.6

2 files

1.0.5

2 files

1.0.4

2 files

1.0.3

2 files

1.0.2

2 files

1.0.1

2 files

Supported by

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