Skip to main content

Deploy Commands

The deploy commands enable deployment of various resources to the Quilibrium network, including applications, tokens, files, and hypergraph schemas.

Overview

The deploy command suite provides a unified interface for deploying different types of resources:

  • Applications: QCL (Quilibrium Compute Language) programs
  • Tokens: Custom token contracts with configurable behaviors
  • Files: Hypergraph namespaces with pre-defined RDF schema for handling data files with encryption support
  • Hypergraph: Hypergraph namespaces, for encrypted data and RDF schemas for enforcing structured data

Base Deploy Command

When used without a subcommand, defaults to compute deployment.

qclient deploy

This is equivalent to:

qclient deploy compute

Deploy Compute

Deploy QCL applications to the network, or update existing applications when domain is specified.

qclient deploy compute [--domain|-d <DomainAddress>] [<ConfigurationKey>=<ConfigurationValue> ...] <QCLFileName> [<RDFFileName>]

Parameters:

  • [--domain|-d <DomainAddress>]: Optional domain for deployment or updating (auto-inferred for new deployments if not specified)
  • [<ConfigurationKey>=<ConfigurationValue>]: Configuration settings (see below)
  • <QCLFileName>: Path to the QCL file to deploy
  • [<RDFFileName>]: Optional RDF schema file (auto-inferred from QCL filename if not specified)

Compute Configuration Options

  • ReadPublicKey: Ed448 public key for read access of encrypted data (57 bytes hex)
  • WritePublicKey: Ed448 public key for write access of encrypted data (57 bytes hex)
  • OwnerPublicKey: BLS48-581 public key for administration of configuration, empty to revoke administration rights completely (585 bytes hex)

Examples:

Basic deployment:

qclient deploy compute application.qcl

With specified keys:

qclient deploy compute \
ReadPublicKey=0x[57-byte hex string] \
WritePublicKey=0x[57-byte hex string] \
OwnerPublicKey=0x[585-byte hex string] \
application.qcl

With explicit domain:

qclient deploy compute -d 0x[32-byte hex string] application.qcl

With explicit RDF schema:

qclient deploy compute application.qcl schema.rdf
note

If no RDF file is specified, the system attempts to find a corresponding file by replacing the .qcl extension with .rdf. For example, application.qcl would look for application.rdf.

Updating Existing Compute Applications

When a domain is specified for an existing deployment, you can update the application:

qclient deploy compute -d 0x[32-byte hex string] \
ReadPublicKey=0x[57-byte hex string] \
WritePublicKey=0x[57-byte hex string] \
updated-app.qcl updated-schema.rdf
warning

Update Restrictions for Compute:

  • Cannot remove any fields from the RDF schema
  • Cannot remove any types from the RDF schema
  • Can only add new fields or types
  • Requires signature from the OwnerPublicKey specified in configuration
  • Update transaction must be signed with the BLS48-581 owner key

Deploy File

Deploy encrypted files to the hypergraph.

qclient deploy file [--domain|-d <DomainAddress>] <FileName> [<EncryptionKeyName>|<EncryptionKeyBytes>]

Parameters:

  • [--domain|-d <DomainAddress>]: Optional domain for the file
  • <FileName>: Path to the file to deploy
  • [<EncryptionKeyName>|<EncryptionKeyBytes>]: Optional encryption key for secure storage, if omitted, uses the default file encryption key

Examples:

Deploy public file:

qclient deploy file document.pdf

Deploy encrypted file:

qclient deploy file private-data.json 0x[57-byte hex string]...

With domain specification:

qclient deploy file -d 0x[32-byte hex string] image.png
tip

This command uses the standard file RDF schema for metadata storage.

Deploy Token

Deploy custom token contracts with configurable properties, or update existing tokens when domain is specified.

qclient deploy token [--domain|-d <DomainAddress>] [<ConfigurationKey>=<ConfigurationValue> ...]

Parameters:

  • [--domain|-d <DomainAddress>]: Optional domain for updating existing token (requires owner key)

Configuration Parameters:

Core Properties

  • Name: Token name (e.g., "Example Token")
  • Symbol: Token symbol (e.g., "EXMPL")
  • Supply: Initial token supply (big endian integer, hex string)
  • Units: Decimal units for divisible tokens (big endian integer, hex string)
  • OwnerPublicKey: BLS48-581 public key for ownership, empty to revoke or deploy as immutable (585 bytes hex)

Behavior Flags

  • Behavior: Comma-separated list or bitwise flags:
    • Mintable (1): New tokens can be minted up to total supply
    • Burnable (2): Tokens can be burned, decreasing total supply
    • Divisible (4): Token has decimal units
    • Acceptable (8): Requires acceptance for transfers
    • Expirable (16): Transfers can have expiration limits
    • Tenderable (32): Can be used as payment method

Mint Strategy (for Mintable tokens)

  • MintStrategy.MintBehavior: How tokens can be minted

    • NoMintBehavior: Cannot be minted
    • MintWithProof: Requires proof
    • MintWithAuthority: Requires authority signature
    • MintWithSignature: Requires specific signature
    • MintWithPayment: Requires payment
  • MintStrategy.ProofBasis: Type of proof required (if MintWithProof)

    • NoProofBasis: No proof accepted
    • ProofOfMeaningfulWork: Requires proof of meaningful work
    • VerkleMultiproofWithSignature: Requires verkle multiproof with signature
  • MintStrategy.VerkleRoot: Verkle root (if ProofBasis is VerkleMultiproofWithSignature)

  • MintStrategy.Authority: Authority configuration (if MintWithAuthority/Signature)

    • MintStrategy.Authority.KeyType: Key type identifier
    • MintStrategy.Authority.PublicKey: Authority's public key
    • MintStrategy.Authority.CanBurn: Whether authority can burn tokens
  • MintStrategy.PaymentAddress: Address for payments (if MintWithPayment)

  • MintStrategy.FeeBasis.Type: Fee structure (if MintWithPayment)

    • NoFeeBasis: Cannot be purchased
    • PerUnit: Per-unit fee
  • MintStrategy.FeeBasis.Baseline: Base fee amount (big integer)

Additional References

  • AdditionalReference: Comma-separated 64-byte addresses for linked resources

Examples:

Basic fungible token:

qclient deploy token \
Name="Example Token" \
Symbol="EXMPL" \
Behavior=Divisible,Acceptable,Expirable \
Units=1000000 \
Supply=1000000000000 \
OwnerPublicKey=0x[585-byte hex string]

NFT collection with minting:

qclient deploy token \
Name="Art Collection" \
Symbol="ART" \
Behavior=Mintable \
MintStrategy.MintBehavior=MintWithPayment \
MintStrategy.PaymentAddress=0x[112-byte hex string] \
MintStrategy.FeeBasis.Type=PerUnit \
MintStrategy.FeeBasis.Baseline=8000000000 \
Supply=1000 \
OwnerPublicKey=0x[585-byte hex string]

Token with authority-based minting:

qclient deploy token \
Name="Authority Token" \
Symbol="AUTH" \
Behavior=Mintable,Burnable \
MintStrategy.MintBehavior=MintWithAuthority \
MintStrategy.Authority.KeyType=1 \
MintStrategy.Authority.PublicKey=0x[public-key-hex] \
MintStrategy.Authority.CanBurn=true \
Supply=1000000 \
OwnerPublicKey=0x[585-byte hex string]

Token with linked files:

# First deploy metadata files
qclient deploy file metadata1.json 0x[57-byte hex string encryption public key]
qclient deploy file metadata2.json 0x[57-byte hex string encryption public key]

# Then deploy token with references
qclient deploy token \
Name="Enhanced Token" \
Symbol="ENHT" \
AdditionalReference=0x[64-byte hex string],0x[64-byte hex string] \
Supply=100000

Updating Existing Tokens

When a domain is specified, you can update certain parameters of an existing token:

qclient deploy token -d 0x[32-byte hex string] \
Name="Updated Token Name" \
Supply=2000000 \
AdditionalReference=0x[64-byte hex string],0x[64-byte hex string]
warning

Update Restrictions for Tokens:

  • Cannot change Behavior flags
  • Cannot change Units
  • Can update: Name, Symbol, Supply (if mintable), AdditionalReference, MintStrategy parameters
  • Requires signature from the OwnerPublicKey specified in original deployment
  • Update transaction must be signed with the BLS48-581 owner key

Deploy Hypergraph

Deploy hypergraph namespaces and configurations, or update existing hypergraph schemas when domain is specified.

qclient deploy hypergraph [--domain|-d <DomainAddress>] [<ConfigurationKey>=<ConfigurationValue> ...] [<RDFFileName>]

Parameters:

  • [--domain|-d <DomainAddress>]: Optional domain for updating existing hypergraph (requires owner signature)
  • [<ConfigurationKey>=<ConfigurationValue>]: Configuration settings (see below)
  • [<RDFFileName>]: RDF schema file defining the structured data for vertices

Hypergraph Configuration Options

  • ReadPublicKey: Ed448 public key for read access (57 bytes hex)
  • WritePublicKey: Ed448 public key for write access (57 bytes hex)
  • OwnerPublicKey: BLS48-581 public key for ownership, empty if revoked or deployed as immutable (585 bytes hex)

Examples:

Initial deployment:

qclient deploy hypergraph \
ReadPublicKey=0x[57-byte hex string] \
WritePublicKey=0x[57-byte hex string] \
OwnerPublicKey=0x[585-byte hex string] \
schema.rdf

Updating Existing Hypergraph

When a domain is specified, you can update the hypergraph configuration:

qclient deploy hypergraph -d 0x[32-byte hex string] \
ReadPublicKey=0x[57-byte hex string] \
WritePublicKey=0x[57-byte hex string] \
updated-schema.rdf
warning

Update Restrictions for Hypergraph:

  • Cannot remove any fields from the RDF schema
  • Cannot remove any types from the RDF schema
  • Can only add new fields or types
  • Can update access keys (ReadPublicKey, WritePublicKey)
  • Requires signature from the OwnerPublicKey specified in original deployment
  • Update transaction must be signed with the BLS48-581 owner key

Cost Estimation

All deploy commands support the --dry-run flag for cost estimation:

qclient deploy compute application.qcl --dry-run

This will:

  • Calculate deployment costs based on current fee market
  • Show estimated QUIL required
  • Not execute the actual deployment

Deployment Process

  1. Validation: Verifies file existence and syntax
  2. Compilation: Compiles QCL code (for compute deployments)
  3. Schema Processing: Processes and validates RDF schemas
  4. Fee Calculation: Determines deployment cost
  5. Transaction Creation: Creates deployment transaction
  6. Network Submission: Submits to the network
  7. Confirmation: Waits for network confirmation

Error Handling

Common deployment errors:

  • Insufficient Funds: Not enough QUIL for deployment fees
  • Compilation Error: QCL code has syntax or semantic errors
  • Schema Validation Error: RDF schema is invalid
  • File Not Found: Specified file doesn't exist
  • Network Error: Unable to connect to the network
  • Domain Error: Specified domain doesn't exist or is inaccessible

Best Practices

Before Deployment

  1. Test Locally: Validate code and schemas before deployment
  2. Estimate Costs: Use --dry-run to check fees and validity
  3. Backup Keys: Ensure you have backups of deployment keys
  4. Verify Domains: Confirm domain addresses if using specific domains

During Deployment

  1. Monitor Progress: Watch for confirmation messages
  2. Save Addresses: Record deployed resource addresses
  3. Verify Deployment: Check deployment succeeded using query commands

After Deployment

  1. Test Functionality: Verify deployed resources work as expected
  2. Document Addresses: Keep records of all deployed addresses
  3. Monitor Usage: Track resource utilization and costs