pub struct AdminClient { /* private fields */ }Expand description
A client for Canton’s Ledger-API admin services: PartyManagementService
and UserManagementService.
Served on the Ledger API port (e.g. :3901) — the same endpoint and auth as
canton_ledger. Party-management RPCs require the ParticipantAdmin
right; the current_user* self-inspect calls do not.
Implementations§
Source§impl AdminClient
impl AdminClient
Sourcepub fn connect_lazy(config: Config) -> Result<Self>
pub fn connect_lazy(config: Config) -> Result<Self>
Build a lazily-connected client. Returns immediately; the TCP/TLS handshake happens on the first RPC.
§Errors
Returns Error::InvalidRequest if the endpoint is not a valid URI.
Sourcepub async fn participant_id(&self) -> Result<String>
pub async fn participant_id(&self) -> Result<String>
Sourcepub async fn allocate_party(
&self,
party_id_hint: Option<&str>,
) -> Result<PartyDetails>
pub async fn allocate_party( &self, party_id_hint: Option<&str>, ) -> Result<PartyDetails>
Allocate a new party (AllocateParty). party_id_hint suggests the
local part of the party id; the participant returns the actual
PartyDetails (party = "<hint>::<fingerprint>").
Requires the ParticipantAdmin right. Not retried: party allocation is
a non-idempotent topology mutation (a lost response must not double
allocate), so a transient failure surfaces to the caller.
§Errors
Returns an Error if authentication/authorization fails, the RPC
fails, or the response carries no party details.
Sourcepub async fn generate_external_party_topology(
&self,
synchronizer: &str,
party_hint: &str,
public_key: &PublicKey,
) -> Result<ExternalPartyTopology>
pub async fn generate_external_party_topology( &self, synchronizer: &str, party_hint: &str, public_key: &PublicKey, ) -> Result<ExternalPartyTopology>
Ask the participant what allocating an external party for public_key
would look like, without allocating it.
The first half of external-party onboarding. The participant computes
the key’s fingerprint and the party id derived from it, builds the
onboarding topology transactions, and returns one hash over them. None
of it is submitted: that is allocate_external_party, after the key
has signed the hash.
§Errors
Returns an Error if the RPC fails, or Error::UnexpectedResponse
if the participant answers without a hash to sign or without the
fingerprint — either of which would leave the caller unable to sign as
this party at all.
Sourcepub async fn allocate_external_party(
&self,
synchronizer: &str,
topology: &ExternalPartyTopology,
signer: &dyn Signer,
user_id: &str,
) -> Result<String>
pub async fn allocate_external_party( &self, synchronizer: &str, topology: &ExternalPartyTopology, signer: &dyn Signer, user_id: &str, ) -> Result<String>
Allocate the external party described by topology, authorized by
signer.
The second half. The signature is over
multi_hash
— one hash covering every onboarding transaction, so one signature
authorizes the whole set — and it is what proves the party controls the
key being registered for it.
user_id gets act_as rights on the new party; empty grants none.
Returns the allocated party id. This waits for the allocation to reach the synchronizer, so the party is usable when it returns.
§Errors
Returns an Error if signing fails or the RPC does. A signature made
by a key other than the one in the topology is rejected by the
participant, not here.
Sourcepub async fn list_known_parties_page(
&self,
page_size: i32,
page_token: Option<String>,
) -> Result<(Vec<PartyDetails>, Option<String>)>
pub async fn list_known_parties_page( &self, page_size: i32, page_token: Option<String>, ) -> Result<(Vec<PartyDetails>, Option<String>)>
Sourcepub async fn list_known_parties(&self) -> Result<Vec<PartyDetails>>
pub async fn list_known_parties(&self) -> Result<Vec<PartyDetails>>
Sourcepub async fn get_parties(
&self,
parties: Vec<String>,
) -> Result<Vec<PartyDetails>>
pub async fn get_parties( &self, parties: Vec<String>, ) -> Result<Vec<PartyDetails>>
Sourcepub async fn current_user(&self) -> Result<User>
pub async fn current_user(&self) -> Result<User>
Sourcepub async fn current_user_rights(&self) -> Result<Vec<Right>>
pub async fn current_user_rights(&self) -> Result<Vec<Right>>
Sourcepub async fn list_packages(&self) -> Result<Vec<String>>
pub async fn list_packages(&self) -> Result<Vec<String>>
Sourcepub async fn get_package(&self, package_id: &str) -> Result<Vec<u8>>
pub async fn get_package(&self, package_id: &str) -> Result<Vec<u8>>
The status of a package on the participant
(PackageService.GetPackageStatus): Registered if the package is
known, Unspecified otherwise.
§Errors
Download a package the participant knows, as ArchivePayload bytes.
This is what canton_lf::decode_payload reads — the inner half of an
archive. A DAR entry is the whole Archive, payload and hash together,
and canton_lf::decode_package reads that one; the Ledger API returns
the parts separately, so the two are different bytes and each has its
own decoder.
Bindings can therefore be generated from what a participant has actually vetted, rather than from a DAR file that has to be found somewhere — and for a package that only ever existed on a network, there may be no such file at all.
The payload is hashed and the digest checked against package_id before the bytes are
handed back. A package id is the hash of its payload, so that check
is what makes asking by id pin the content exactly, with nothing further
to checksum.
§Errors
Returns an Error if the RPC fails, and
Error::UnexpectedResponse if the participant answers with no payload
or whose bytes do not hash to the id that was asked for.
Sourcepub async fn get_package_status(
&self,
package_id: &str,
) -> Result<PackageStatus>
pub async fn get_package_status( &self, package_id: &str, ) -> Result<PackageStatus>
Returns an Error if authentication or the RPC fails.
Sourcepub async fn acting_parties(&self) -> Result<Vec<String>>
pub async fn acting_parties(&self) -> Result<Vec<String>>
The specific parties the authenticated user may act as — the CanActAs
subset of Self::current_user_rights. Supersedes the ad-hoc party
discovery used in early tests.
Note: a user granted the wildcard CanActAsAnyParty right may act as
any party yet carries no explicit CanActAs entries, so this returns
an empty list for such users — an empty result means “no specific
parties”, not necessarily “cannot act”. Inspect
Self::current_user_rights directly if you need the wildcard.
§Errors
Returns an Error if the underlying rights RPC fails.
Trait Implementations§
Source§impl Clone for AdminClient
impl Clone for AdminClient
Auto Trait Implementations§
impl !RefUnwindSafe for AdminClient
impl !UnwindSafe for AdminClient
impl Freeze for AdminClient
impl Send for AdminClient
impl Sync for AdminClient
impl Unpin for AdminClient
impl UnsafeUnpin for AdminClient
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request