Tangle CLI
Create, run, and operate blueprints on the Tangle EVM and EigenLayer.
Table of Contents
- Tangle CLI
Overview
The CLI bundles every workflow needed for the EVM-only SDK:
cargo tangle blueprint createscaffolds a new blueprint from the templates.cargo tangle blueprint run --protocol tangleboots a manager connected to the Tangle v2 contracts.cargo tangle blueprint register-tangleregisters an operator againstITangle,MultiAssetDelegation, andOperatorStatusRegistry.cargo tangle key *manages local and remote k256 keys viablueprint-keystore.
All Substrate helpers have been removed; the CLI now targets EVM-first flows only.
Installation
Linux, macOS, and Windows (WSL2) are supported.
Feature flags
The CLI supports optional features that can be enabled at build time:
remote-providers - Enables cloud deployment functionality
Adds support for deploying blueprints to AWS, GCP, Azure, DigitalOcean, and Vultr. This enables the cargo tangle cloud subcommand and the --remote flag for blueprint deployment.
Without this feature, cloud commands are not available and using --remote will show:
❌ Remote deployment requires the 'remote-providers' feature.
Build with: cargo build --features remote-providers
vm-debug - Enables VM sandbox debugging (Linux only)
Creating a New Blueprint
The scaffold asks for a source template, optional variables, and whether to skip prompts. The generated workspace already depends on blueprint-sdk with the tangle feature.
Running a Blueprint on Tangle
The runner expects RPC URLs, a keystore, and the EVM contract coordinates. You can provide them via CLI flags or a settings.env file that the command loads before boot.
BLUEPRINT_ID=0 \
SERVICE_ID=0 \
TANGLE_CONTRACT=0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9 \
STAKING_CONTRACT=0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512 \
STATUS_REGISTRY_CONTRACT=0xdC64a140Aa3E981100a9BecA4E685f962f0CF6C9 \
| Variable | Description |
|---|---|
BLUEPRINT_ID |
Blueprint registered on ITangle. |
SERVICE_ID |
Optional fixed service (leave unset to process all). |
TANGLE_CONTRACT |
ITangle contract address. |
STAKING_CONTRACT |
MultiAssetDelegation staking contract. |
STATUS_REGISTRY_CONTRACT |
OperatorStatusRegistry heartbeat contract. |
The CLI automatically ensures an ECDSA key exists under --keystore-path and derives the operator address from it.
Registering an Operator
register-tangle performs the on-chain registration + announcement flow in one command:
You can optionally set --rpc-endpoint to push metadata to a remote operator directory service during registration.
Service Lifecycle Commands
The cargo tangle blueprint service namespace mirrors everything exposed in Tangle.sol:
service requestsubmits a pending service with per-operator exposures, rich config payloads, and optional asset security requirements.service approve/service rejectlets operators respond to a request; approvals can include explicit asset commitments when the request included requirements.service join/service leavelet operators participate in dynamic membership services; leaving succeeds when the service's exit queue allows the legacy helper.service listandservice requestssurface active services vs. pending requests, with a--jsontoggle for scripting.
Requesting a Service
- Provide one
--operator-exposure-bpsper operator (basis points, 10_000 = 100%). Leave unset to fall back to the default BPS of 100% per operator. - Security requirements use the format
KIND:TOKEN:MIN:MAXwhereKINDisnativeorerc20. Use_/0for the native token placeholder. - TTLs are expressed in seconds to match the
Tangle.solschema.
Approving or Rejecting
# Simple staking approval
# Approval that matches request-level security requirements
--security-commitmentmirrors theKIND:TOKEN:EXPOSUREstructure expected byapproveServiceWithCommitments.- Use
service reject --request-id <ID>to decline participation.
Listing Services/Requests
Both commands read via TangleClient::{list_services,list_service_requests} and print either friendly tables or JSON for automation.
Cloud Deployment
Note: Cloud deployment requires the
remote-providersfeature flag. See Feature flags for installation instructions.
The Tangle CLI supports deploying blueprints to cloud providers for scalable, distributed execution:
Configure Cloud Provider
# Configure AWS
# Configure GCP
# Configure other providers
Cost Estimation
# Compare costs across all providers
# Estimate for specific provider with spot pricing
# GPU-enabled instances
Deploy Blueprint to Cloud
# Deploy with remote deployment flag
# Deploy with specific policy
Monitor Cloud Deployments
# Check status of all deployments
# Check specific deployment
# Terminate deployment
Preflight and TEE Readiness
# Validate credentials/provider readiness and print manager bootstrap env
# Validate fail-closed TEE readiness (including cryptographic verifier requirements)
# Write bootstrap env directly to file
Spawning a Service Runtime
Kick off the blueprint manager using a specific runtime without re-running the full deploy flow:
The command reuses the same manager wiring as cargo tangle blueprint run, so any RPC endpoint + runtime combo works (VM/native/container). For devnet, omit the overrides and the defaults point at the local harness.
Key Management
All keys are EVM-native. Use the cargo tangle key subcommands to handle k256 material:
# Generate a new operator key
# Import an existing hex secret into the keystore
# List local keys
The keystore supports filesystem, in-memory, and remote HSM backends through blueprint-keystore.
EigenLayer Helpers
EigenLayer support remains available under cargo tangle blueprint eigenlayer <subcommand>. Use it to register AVSs, list allocations, or run the EigenLayer manager by supplying the addresses exported from the EigenLayer contracts.
Operator Status
Inspect the latest heartbeat/online status from OperatorStatusRegistry:
Omit --operator to query the locally configured operator. Add --json for machine-friendly output (timestamp, raw status code, online boolean).
Need More?
- End-to-end demos and advanced options live on the CLI reference.
- For pricing/QoS flows, combine the CLI with
crates/pricing-engineand the newOPERATOR_*env vars described in that README.
The manager will:
- Read all active AVS registrations from
~/.tangle/eigenlayer_registrations.json - Spawn a separate blueprint instance for each AVS
- Monitor rewards and slashing events
- Auto-restart failed blueprints
5. Deregister from an AVS
EigenLayer Command Reference
eigenlayer register
Register with a new EigenLayer AVS.
Arguments:
--config: Path to JSON configuration file--keystore-uri: Keystore path (default:./keystore)--runtime: Runtime target (native,hypervisor,container) - overrides config file--verify: Perform on-chain verification (optional)
Aliases: reg
eigenlayer deregister
Deregister from an EigenLayer AVS.
Arguments:
--service-manager: Service manager contract address--keystore-uri: Keystore path (default:./keystore)
Aliases: dereg
eigenlayer list
List all registered AVS services.
Arguments:
--active-only: Show only active registrations--format: Output format:table(default) orjson
Aliases: ls
eigenlayer sync
Synchronize local registrations with on-chain state.
Arguments:
--http-rpc-url: HTTP RPC endpoint (default:http://127.0.0.1:8545)--keystore-uri: Keystore path (default:./keystore)--settings-file: Protocol settings file (optional)
Runtime Targets
Each AVS can specify its execution runtime:
-
native- Bare process (no sandbox)- Fastest startup and lowest overhead
- For testing only - no isolation
- Direct process execution
-
hypervisor- cloud-hypervisor VM (default)- Production-ready VM isolation
- Strong security boundaries
- Resource limits enforced
- Recommended for production
-
container- Docker/Kata containers (Coming Soon)- Not yet implemented
- For now, use
nativefor testing orhypervisorfor production
Set via config file or override via CLI --runtime flag.
Generating Keys from the Command Line
The following command will generate a keypair for a given key type:
cargo tangle blueprint generate-keys -k <KEY_TYPE> -p <PATH> -s <SURI/SEED> --show-secret
where it is optional to include the path, seed, or the show-secret flags.
Flags
-kor--key-type: Required flag. The key type to generate (sr25519, ecdsa, bls_bn254, ed25519, bls381).-por--path: The path to write the generated keypair to. If not provided, the keypair will be written solely to stdout.-sor--seed: The suri/seed to generate the keypair from. If not provided, a random keypair will be generated.--show-secret: Denotes that the Private Key should also be printed to stdout. If not provided, only the public key will be printed.
For all of our features for created and using keys, see the key management section of our CLI docs.