[package]
name = "darkfi"
version = "0.3.0"
homepage = "https://dark.fi"
description = "Anonymous. Uncensored. Sovereign."
authors = ["darkfi <dev@dark.fi>"]
repository = "https://github.com/darkrenaissance/darkfi"
license = "AGPL-3.0-only"
edition = "2021"

[lib]
name = "darkfi"

#[profile.release]
#debug = true
#lto = "fat"
#codegen-units = 1

[workspace]
members = [
	"bin/zkas",
	#"bin/cashierd",
	"bin/darkwiki",
	"bin/darkwikid",
	"bin/darkfid",
	"bin/darkotc",
	"bin/drk",
	"bin/faucetd",
	"bin/ircd",
	#"bin/irc-raft",
	"bin/dnetview",
	"bin/daod",
	"bin/dao-cli",
	"bin/tau/taud",
	"bin/tau/tau-cli",
	"bin/vanityaddr",
	"bin/lilith",

	"src/sdk",
	"src/util/derive",
	"src/util/derive-internal",

    "example/dchat",
]

[dependencies]
# Hard dependencies
libc = "0.2.132"
log = "0.4.17"
thiserror = "1.0.32"

# async-runtime
smol = {version = "1.2.5", optional = true}
futures = {version = "0.3.24", optional = true}
async-std = {version = "1.12.0", features = ["attributes"], optional = true}
async-trait = {version = "0.1.57", optional = true}
async-channel = {version = "1.7.1", optional = true}
async-executor = {version = "1.4.1", optional = true}

# async-net
async-native-tls = {version = "0.4.0", optional = true}
native-tls = {version = "0.2.10", optional = true}

# Networking
socket2 = {version = "0.4.6", optional = true}
futures-rustls = {version = "0.22.2", features = ["dangerous_configuration"], optional = true}

# TLS cert utilities
ed25519-compact = {version = "1.0.11", features = ["pem"], optional = true}
rcgen = {version = "0.9.3", features = ["pem"], optional = true}
rustls-pemfile = {version = "1.0.1", optional = true}

# Encoding
hex = {version = "0.4.3", optional = true}
bs58 = {version = "0.4.0", optional = true}
toml = {version = "0.5.9", optional = true}
bytes = {version = "1.2.1", optional = true}
bincode = {version = "2.0.0-rc.1", features = ["serde"], optional = true}
serde_json = {version = "1.0.85", optional = true}
serde = {version = "1.0.144", features = ["derive"], optional = true}
structopt = {version= "0.3.26", optional = true}
structopt-toml = {version= "0.5.1", optional = true}

# Utilities
url = {version = "2.2.2", features = ["serde"], optional = true}
dirs = {version = "4.0.0", optional = true}
subtle = {version = "2.4.1", optional = true}
lazy_static = {version = "1.4.0", optional = true}
lazy-init = {version = "0.5.1", optional = true}
fxhash = {version = "0.2.1", optional = true}
indexmap = {version = "1.9.1", optional = true}
itertools = {version = "0.10.3", optional = true}
darkfi-derive = {path = "src/util/derive", optional = true}
darkfi-derive-internal = {path = "src/util/derive-internal", optional = true}
chrono = {version = "0.4.22", optional = true}

# Misc
termion = {version = "1.5.6", optional = true}
simplelog = {version = "0.12.0", optional = true}
indicatif = {version = "0.17.0", optional = true}

# Websockets
tungstenite = {version = "0.17.3", optional = true}
async-tungstenite = {version = "0.17.2", optional = true}

# socks5
fast-socks5 = {version = "0.4.3", optional = true}

# Crypto
bitvec = {version = "1.0.1", optional = true}
rand = {version = "0.8.5", optional = true}
blake3 = {version = "1.3.1", optional = true}
sha2 = {version = "0.10.2", optional = true}
group = {version = "0.12.0", optional = true}
arrayvec = {version = "0.7.2", optional = true}
blake2b_simd = {version = "1.0.0", optional = true}
pasta_curves = {version = "0.4.0", optional = true}
crypto_api_chachapoly = {version = "0.5.0", optional = true}
incrementalmerkletree = {version = "0.3.0", optional = true}
halo2_proofs = {version = "0.2.0", optional = true}
halo2_gadgets = {version = "0.2.0", optional = true}
#halo2_proofs = {git = "https://github.com/zcash/halo2.git", rev = "a898d65ae3ad3d41987666f6a03cfc15edae01c4", optional = true}
#halo2_gadgets = {git = "https://github.com/zcash/halo2.git", rev = "a898d65ae3ad3d41987666f6a03cfc15edae01c4", optional = true}

# Smart contract runtime
drk-sdk = {path = "src/sdk", optional = true}
wasmer = {version = "2.3.0", optional = true}
wasmer-compiler-singlepass = {version = "2.3.0", optional = true}
wasmer-middlewares = {version = "2.3.0", optional = true}

# Wallet management
sqlx = {version = "0.6.1", features = ["runtime-async-std-native-tls", "sqlite"], optional = true}
libsqlite3-sys = {version = "0.24.1", features = ["bundled-sqlcipher"],  optional = true }

# Blockchain store
sled = {version = "0.34.7", optional = true}

[dev-dependencies]
clap = {version = "3.2.18", features = ["derive"]}
halo2_proofs = {version = "0.2.0", features = ["dev-graph", "gadget-traces", "sanity-checks"]}
halo2_gadgets = {version = "0.2.0", features = ["dev-graph", "test-dependencies"]}
#halo2_proofs = {git = "https://github.com/zcash/halo2.git", rev = "a898d65ae3ad3d41987666f6a03cfc15edae01c4", features = ["dev-graph", "gadget-traces", "sanity-checks"]}
#halo2_gadgets = {git = "https://github.com/zcash/halo2.git", rev = "a898d65ae3ad3d41987666f6a03cfc15edae01c4", features = ["dev-graph", "test-dependencies"]}

plotters = "0.3.3"

[features]
async-runtime = [
	"async-std",
	"async-channel",
	"async-executor",
	"async-trait",
	"futures",
	"smol",
]

async-net = [
	"async-native-tls",
	"native-tls",
]

websockets = [
	"async-tungstenite",
	"tungstenite",
]

util = [
    "blake3",
	"bs58",
	"hex",
	"bincode",
	"serde",
	"toml",
	"url",
	"simplelog",
	"serde_json",
	"dirs",
	"fxhash",
	"chrono",
	"indicatif",
	"termion",

    "async-net",
    "async-runtime",
	"darkfi-derive",
	"darkfi-derive-internal",
	"rpc",
]

rpc = [
	"rand",
	"url",
	"fast-socks5",

	"async-net",
	"async-runtime",
	"websockets",
	"net",
]

blockchain = [
	"blake3",
	"chrono",
	"indexmap",
	"sled",

	"crypto",
	"tx",
	"net",
	"node",
	"util",
]

system = [
	"fxhash",
	"rand",

	"async-runtime",
]

net = [
	"fxhash",
	"socket2",
	"futures-rustls",
	"fast-socks5",
	"ed25519-compact",
	"rcgen",
	"rustls-pemfile",
	"structopt",
	"structopt-toml",

	"util",
	"system",
]

crypto = [
	"bitvec",
	"blake3",
	"rand",
	"pasta_curves",
	"blake2b_simd",
	"incrementalmerkletree",
	"halo2_proofs",
	"halo2_gadgets",
	"subtle",
	"lazy_static",
	"group",
	"arrayvec",
	"crypto_api_chachapoly",
	"sha2",
	"bs58",

	"util",
	"zkas",
]

wallet = [
	"sqlx",
	"libsqlite3-sys",
	"async-std",

	"crypto",
	"util",
]

wasm-runtime = [
	"drk-sdk",
	"wasmer",
	"wasmer-compiler-singlepass",
	"wasmer-middlewares",
]

node = [
	"url",
	"bytes",
	"lazy-init",

	"async-runtime",
	"blockchain",
	"crypto",
	"wallet",
	"util",
	"net",
]

zkas = [
	"termion",
	"indexmap",
	"itertools",

	"util",
]

raft = [
	"blake3",
	"sled",

	"util",
	"net",
	"rpc",
]

tx = [
	"crypto",
	"util",
]

dht = [
    "util",
]

[[example]]
name = "net"
path = "example/net.rs"
required-features = ["async-runtime", "net"]

[[example]]
name = "tx"
path = "example/tx.rs"
required-features = ["node"]

[[example]]
name = "zk"
path = "example/zk.rs"
required-features = ["crypto"]

#[[example]]
#name = "lead"
#path = "example/lead.rs"
#required-features = ["node"]
