Repository navigation
Expand file tree
/
Copy pathCargo.toml
More file actions
110 lines (95 loc) · 5.1 KB
/
Copy pathCargo.toml
File metadata and controls
110 lines (95 loc) · 5.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
[workspace]
resolver = "2"
members = ["crates/randprotocol-core", "crates/randprotocol-zkvm", "crates/randprotocol-client", "crates/randprotocol-node", "crates/bridge-codec", "crates/randprotocol-rvm", "crates/randprotocol-prover", "crates/randprotocol-msig"]
# The two circuits crates vendored under `vendor/circuits/` (audit v6 PROC-2, issue #109;
# `vendor/circuits/PROVENANCE.md`) are copied verbatim, and upstream each is a workspace root of
# its own (`[workspace]` in its manifest). A path dependency inside this directory would otherwise
# become a member, and a member that is its own root is refused by cargo; excluded, they are
# ordinary path dependencies of `randprotocol-zkvm`, as they were from the sibling checkout.
exclude = ["vendor/circuits/evm-core", "vendor/circuits/sbpf-core", "vendor/circuits/dilithium-core"]
[workspace.package]
version = "0.8.0"
edition = "2021"
license = "GPL-3.0-only"
authors = ["RandProtocol Contributors"]
[workspace.dependencies]
randprotocol-core = { path = "crates/randprotocol-core" }
randprotocol-client = { path = "crates/randprotocol-client" }
randprotocol-zkvm = { path = "crates/randprotocol-zkvm" }
randprotocol-msig = { path = "crates/randprotocol-msig" }
randprotocol-rvm = { path = "crates/randprotocol-rvm" }
randprotocol-prover = { path = "crates/randprotocol-prover", default-features = false }
bridge-codec = { path = "crates/bridge-codec" }
# crypto
crystals-dilithium = "2.0"
blake3 = "1.8"
bs58 = "0.5"
rand = "0.8"
zeroize = "1"
k256 = { version = "0.13", features = ["ecdsa"] }
sha3 = "0.10"
# serialization
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
bincode = "1.3"
hex = "0.4"
# The scan heads `rand_getScanLeaves` serves: 1 208 bytes a leaf as base64 rather than hex, a third
# less on the wire. Already in the lock through reqwest/hyper; pinned to that version.
base64 = "=0.22.1"
# errors / logging
thiserror = "2.0"
anyhow = "1.0"
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
# async / net
tokio = { version = "1.35", features = ["full"] }
futures = "0.3"
libp2p = { version = "0.57", features = ["tokio", "tcp", "noise", "yamux", "gossipsub", "mdns", "identify", "kad", "request-response", "cbor", "ping", "macros"] }
# The sync request-response codec is ours rather than libp2p's `cbor::Behaviour`, because that one
# hard-codes its size limits (see `network::codec`). Same serializer, same versions libp2p pins.
cbor4ii = { version = "0.3.2", features = ["serde1", "use_std"] }
async-trait = "0.1"
axum = { version = "0.7", features = ["ws"] }
# `rustls-tls`, not the platform TLS: the CLI talks to `https://rpc.randprotocol.org` and a droplet
# build must not depend on the host's OpenSSL. Without a TLS backend reqwest refuses every https
# URL before connecting ("scheme is not http"), which is how the public RPC was once unreachable.
reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls"] }
# The disk guard's `statvfs` (audit v4 OPS-3); already in the lock file through rocksdb.
libc = "0.2"
# storage
rocksdb = { version = "0.22", default-features = false, features = ["lz4"] }
# cli
clap = { version = "4.4", features = ["derive", "env"] }
# test
tempfile = "3.10"
# The WebSocket *client* the `ws` integration test drives. axum's own `ws` feature brings a
# tungstenite of its own for the server side; this is the other end of the wire, and a test-only
# dependency for that reason.
tokio-tungstenite = "0.24"
[profile.release]
opt-level = 3
[profile.dev.package."*"]
opt-level = 2
# The zkVM prover runs in dev/test builds (the cluster tests prove real bundles). At the
# default dev opt-level 0 a single bundle proof took 575 s; `"*"` above covers dependencies
# only, never a workspace member, so this member needs its own entry.
[profile.dev.package.randprotocol-zkvm]
opt-level = 2
# The recursion VM's prover runs in dev/test builds too (the aggregation cluster tests prove
# real rVM aggregates): the same member-level entry as the zkVM's, and for the same reason.
[profile.dev.package.randprotocol-rvm]
opt-level = 2
# Plonky3 0.7.0 with one fix in two crates (upstream issue Plonky3 #2363, fix PR #2368): HidingFriPcs and
# MerkleTreeHidingMmcs held a spin lock around their RNG across rayon work, and a
# worker waiting on a stolen job could steal another `commit` and spin on its own lock for ever
# (vendor/p3-fri/src/hiding_pcs.rs, "RandProtocol patch"). Everything else is the crates.io source.
# `vendor/p3-batch-stark` is a third: p3-batch-stark 0.7.0 with a quotient-layout switch
# (`QuotientLayout`), the circuits fork copied verbatim from circuits 5ff7676; circuits'
# `vendor/PROVENANCE.md` and `recursion/docs/05-quotient-layout.md` are its record.
[patch.crates-io]
p3-fri = { path = "vendor/p3-fri" }
p3-merkle-tree = { path = "vendor/p3-merkle-tree" }
# The quotient-layout fork (circuits `vendor/PROVENANCE.md`, `recursion/docs/05-quotient-layout.md`):
# `QuotientLayout::PerChunk` is crates.io's behaviour byte for byte and is what `randprotocol-zkvm`
# (the RV32 machine, every wallet proof) gets; `randprotocol-rvm` pins `PerInstance`.
p3-batch-stark = { path = "vendor/p3-batch-stark" }