Files
nym/nym-api/Cargo.toml
T
Jędrzej Stuczyński a21a01cf1a node families (#6715)
* start node families topic branch

* start node families topic branch

* initialise node families contract

* define contract storage

* registering new family in storage

* accepting family invitation

* add_pending_invitation

* revoke_pending_invitation

* remove_family_member

* reject_pending_invitation

* disband_family

* added unit tests for the storage methods

* added restriction on uniquness of family names

* update rustc version for node families contract common

* clippy

* basic queries by id

* query_families_paged

* change family membership storage and expose query for all members of a family

* queries for pending invitations

* queries for past invitations

* queries for past data per node

* queries for past family members

* query_past_members_for_node_paged

* queries for family by name and by owner

* fixup family name normalisation

* fixed incorrect lower bound for queries for past data

* implement contract and storage initialisation

* stubbing tx messages that are to be exposed by the contract

* handler for updating config

* removed partial fee return

* wip: create family

* move mixnet contract interaction traits to shared location

* store original family name alongside the normalised variant

* prevent family creation if owner has a node in another family

* try_disband_family

* try_invite_to_family + shared helpers

* try_revoke_family_invitation

* accept_family_invitation

* stub method for node unbonding

* try_reject_family_invitation

* unit tests for family name normalisation

* try_leave_family

* try_kick_from_family

* fix outdated comments and add paid fee event attribute

* feat: NMv3: leave family upon node unbonding

* NF contract handling of unbonding

* lints

* init node families contract when creating performance contract tester

* clippy

* avoid self-dep in the contract dev deps

* introduced client traits for interacting with the node families contract

* add node families contract to cache refresher

* added query for all node family members (globally) and started scaffolding nym-api caches

* docs and cache -> api conversion

* calculating average node age based on individual timestamps

* wire up node families cache

* http stubs

* filled in the implementation

* route tests + extracting shared code

* review fixes

* feat: expose family information for all dvpn gateway endpoints within NS API

* expose family information for explorer v3 route

* clippy

* review comments and optimise db family update

* feat: Node Families: expose stake information inside DVpnGateway

* chore: update lock files after rebase

* chore: sort workspace members

* explicitly require providing node families contract address for mixnet contract migration

* fix missing node families contract address env export

* dont swallow cache overwrite failures in fixture

* pin network-defaults rustc version due to contracts dep

* further version pinning

* chore: update mixnet contract schema
2026-05-19 10:36:20 +01:00

138 lines
4.4 KiB
TOML

# Copyright 2020 - Nym Technologies SA <contact@nymtech.net>
# SPDX-License-Identifier: GPL-3.0-only
[package]
name = "nym-api"
version = "1.1.79"
authors.workspace = true
edition = "2021"
license = "GPL-3.0"
rust-version.workspace = true
publish = false
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
async-trait = { workspace = true }
bs58 = { workspace = true }
bip39 = { workspace = true }
bincode.workspace = true
console-subscriber = { workspace = true, optional = true } # nym-api needs to be built with RUSTFLAGS="--cfg tokio_unstable"
cfg-if = { workspace = true }
clap = { workspace = true, features = ["cargo", "derive", "env"] }
dashmap = { workspace = true }
futures = { workspace = true }
humantime-serde = { workspace = true }
moka = { workspace = true }
pin-project = { workspace = true }
rand = { workspace = true }
rand_chacha = { workspace = true }
semver = { workspace = true }
serde = { workspace = true }
serde_json = { workspace = true }
thiserror = { workspace = true }
time = { workspace = true, features = ["serde-human-readable", "parsing"] }
tokio = { workspace = true, features = [
"rt-multi-thread",
"macros",
"signal",
"time",
] }
tokio-stream = { workspace = true }
tokio-util = { workspace = true }
url = { workspace = true }
tendermint = { workspace = true }
ts-rs = { workspace = true, optional = true }
anyhow = { workspace = true }
sqlx = { workspace = true, features = [
"runtime-tokio-rustls",
"sqlite",
"macros",
"migrate",
"time",
] }
schemars = { workspace = true, features = ["preserve_order"] }
zeroize = { workspace = true }
# for axum server
axum = { workspace = true, features = ["tokio"] }
tower-http = { workspace = true, features = ["cors", "trace", "compression-br", "compression-deflate", "compression-gzip", "compression-zstd"] }
utoipa = { workspace = true, features = ["axum_extras", "time"] }
utoipauto = { workspace = true }
utoipa-swagger-ui = { workspace = true, features = ["axum"] }
tracing = { workspace = true }
## internal
nym-cache = { workspace = true }
nym-bandwidth-controller = { workspace = true }
nym-ecash-contract-common = { workspace = true }
nym-ecash-time = { workspace = true, features = ["expiration"] }
nym-coconut-dkg-common = { workspace = true }
nym-compact-ecash = { workspace = true }
nym-credentials-interface = { workspace = true }
nym-config = { workspace = true }
cosmwasm-std = { workspace = true }
nym-credential-storage = { workspace = true, features = [
"persistent-storage",
] }
nym-credentials = { workspace = true }
nym-crypto = { workspace = true }
cw2 = { workspace = true }
cw3 = { workspace = true }
cw4 = { workspace = true }
nym-dkg = { workspace = true, features = ["cw-types"] }
nym-gateway-client = { workspace = true }
nym-mixnet-contract-common = { workspace = true, features = ["utoipa"] }
nym-contracts-common = { workspace = true, features = ["naive_float", "utoipa"] }
nym-sphinx = { workspace = true }
nym-pemstore = { workspace = true }
nym-task = { workspace = true }
nym-topology = { workspace = true }
nym-api-requests = { workspace = true }
nym-validator-client = { workspace = true }
nym-http-api-client = { workspace = true }
nym-bin-common = { workspace = true, features = ["output_format", "openapi", "basic_tracing"] }
nym-node-tester-utils = { workspace = true }
nym-node-requests = { workspace = true, features = ["client"] }
nym-types = { workspace = true }
nym-http-api-common = { workspace = true, features = ["utoipa", "output", "middleware"] }
nym-serde-helpers = { workspace = true, features = ["date"] }
nym-ticketbooks-merkle = { workspace = true }
nym-statistics-common = { workspace = true }
nym-ecash-signer-check = { workspace = true }
nym-node-families-contract-common = { workspace = true }
[features]
no-reward = []
v2-performance = []
generate-ts = ["ts-rs"]
[build-dependencies]
anyhow = { workspace = true }
tokio = { workspace = true, features = ["rt-multi-thread", "macros"] }
sqlx = { workspace = true, features = [
"runtime-tokio-rustls",
"sqlite",
"macros",
"migrate",
] }
[dev-dependencies]
axum-test = { workspace = true }
reqwest = { workspace = true, features = ["json", "query"] }
tempfile = { workspace = true }
cw3 = { workspace = true }
cw-utils = { workspace = true }
rand_chacha = { workspace = true }
sha2 = { workspace = true }
dotenvy = { workspace = true }
test-with = { workspace = true, default-features = false }
[lints]
workspace = true