[package]
name = "ghost-service"
description = "Utils to tie different Ghost components together and allow instantiation of a node."
license.workspace = true
authors.workspace = true
version.workspace = true
edition.workspace = true
homepage.workspace = true
repository.workspace = true

[dependencies]
sc-authority-discovery = { workspace = true, default-features = true }
babe = { workspace = true, default-features = true }
grandpa = { workspace = true, default-features = true }
sc-block-builder = { workspace = true, default-features = true }
sc-chain-spec = { workspace = true, default-features = true }
sc-client-api = { workspace = true, default-features = true }
sc-client-db = { workspace = true, default-features = true }
sc-consensus = { workspace = true, default-features = true }
sc-consensus-slots = { workspace = true, default-features = true }
sc-executor = { workspace = true, default-features = true }
sc-network = { workspace = true, default-features = true }
sc-network-common = { workspace = true, default-features = true }
sc-network-sync = { workspace = true, default-features = true }
sc-transaction-pool = { workspace = true, default-features = true }
sc-sync-state-rpc = { workspace = true, default-features = true }
sc-keystore = { workspace = true, default-features = true }
sc-basic-authorship = { workspace = true, default-features = true }
sc-offchain = { workspace = true, default-features = true }
sc-sysinfo = { workspace = true, default-features = true }
sc-service = { workspace = true }
telemetry = { workspace = true, default-features = true }
tx-pool-api = { workspace = true, default-features = true }

# Substrate Primitives
authority-discovery-primitives = { workspace = true, default-features = true }
consensus-common = { workspace = true, default-features = true }
grandpa-primitives = { workspace = true, default-features = true }
inherents = { workspace = true, default-features = true }
keyring = { workspace = true, default-features = true }
sp-api = { workspace = true, default-features = true }
block-builder-api = { workspace = true, default-features = true }
sp-blockchain = { workspace = true, default-features = true }
sp-core = { workspace = true, default-features = true }
sp-io = { workspace = true, default-features = true }
sp-keystore = { workspace = true, default-features = true }
offchain-primitives = { workspace = true, default-features = true }
sp-runtime = { workspace = true, default-features = true }
sp-session = { workspace = true, default-features = true }
sp-storage = { workspace = true, default-features = true }
babe-primitives = { workspace = true, default-features = true }
sp-state-machine = { workspace = true, default-features = true }
sp-weights = { workspace = true, default-features = true }
sp-version = { workspace = true, default-features = true }
sp-timestamp = { workspace = true, default-features = true }

# Substrate Pallets
pallet-babe = { workspace = true, default-features = true }
pallet-staking = { workspace = true, default-features = true }
pallet-transaction-payment = { workspace = true, default-features = true }
pallet-transaction-payment-rpc-runtime-api = { workspace = true, default-features = true }
frame-system = { workspace = true, default-features = true }

# Substrate Other
frame-system-rpc-runtime-api = { workspace = true, default-features = true }
prometheus-endpoint = { workspace = true, default-features = true }
frame-support = { workspace = true, default-features = true }
frame-benchmarking-cli = { workspace = true, default-features = true }
frame-benchmarking = { workspace = true, default-features = true }

# External crates
async-trait = { workspace = true, default-features = true }
futures = { workspace = true, default-features = true }
hex-literal = { workspace = true, default-features = true }
is_executable = { workspace = true, default-features = true }
log = { workspace = true, default-features = true }
schnellru = { workspace = true, default-features = true }
serde = { workspace = true, default-features = true, features = ["derive"] }
serde_json = { workspace = true, default-features = true }
thiserror = { workspace = true, default-features = true }
kvdb = { workspace = true, default-features = true }
kvdb-rocksdb = { workspace = true, default-features = true, optional = true }
parity-db = { workspace = true, default-features = true, optional = true }
codec = { workspace = true, default-features = true }
parking_lot = { workspace = true, default-features = true }
bitvec = { workspace = true, default-features = true, optional = true }

# Ghost inner
primitives = { workspace = true }
ghost-networks = { workspace = true }
ghost-slow-clap = { workspace = true }
ghost-rpc = { workspace = true }
ghost-machine-primitives = { workspace = true }

# Ghost Runtimes
casper-runtime = { workspace = true, default-features = true, optional = true }
casper-runtime-constants = { workspace = true, default-features = true, optional = true }

[dev-dependencies]
env_logger = { workspace = true }
assert_matches = { workspace = true }
serial_test = { workspace = true }
tempfile = { workspace = true }

[features]
default = ["db", "full-node"]
db = ["sc-service/rocksdb"]
full-node = ["kvdb-rocksdb", "parity-db"]
runtime-benchmarks = [
	"frame-benchmarking-cli/runtime-benchmarks",
	"frame-benchmarking/runtime-benchmarks",
	"frame-support/runtime-benchmarks",
	"frame-system/runtime-benchmarks",
	"pallet-babe/runtime-benchmarks",
	"pallet-staking/runtime-benchmarks",
	"casper-runtime?/runtime-benchmarks",
	"sc-client-db/runtime-benchmarks",
	"sc-service/runtime-benchmarks",
	"sp-runtime/runtime-benchmarks",
]
try-runtime = [
    "frame-support/try-runtime",
    "frame-system/try-runtime",
    "pallet-babe/try-runtime",
    "pallet-staking/try-runtime",
    "pallet-transaction-payment/try-runtime",
    "casper-runtime?/try-runtime",
    "sp-runtime/try-runtime",
]
fast-runtime = ["casper-runtime?/fast-runtime"]

# Configure the native runtimes to use.
casper-native = ["casper-runtime", "casper-runtime-constants", "bitvec"]
ghost-native = []