Struct ic_agent::agent::Agent [−][src]
pub struct Agent { /* fields omitted */ }
Expand description
A low level Agent to make calls to a Replica endpoint.
use ic_agent::Agent; use ic_types::Principal; use candid::{Encode, Decode, CandidType, Nat}; use serde::Deserialize; #[derive(CandidType)] struct Argument { amount: Option<Nat>, } #[derive(CandidType, Deserialize)] struct CreateCanisterResult { canister_id: candid::Principal, } async fn create_a_canister() -> Result<Principal, Box<dyn std::error::Error>> { let agent = Agent::builder() .with_url(URL) .with_identity(create_identity()) .build()?; // Only do the following call when not contacting the IC main net (e.g. a local emulator). // This is important as the main net public key is static and a rogue network could return // a different key. // If you know the root key ahead of time, you can use `agent.set_root_key(root_key)?;`. agent.fetch_root_key().await?; let management_canister_id = Principal::from_text("aaaaa-aa")?; let waiter = garcon::Delay::builder() .throttle(std::time::Duration::from_millis(500)) .timeout(std::time::Duration::from_secs(60 * 5)) .build(); // Create a call to the management canister to create a new canister ID, // and wait for a result. let response = agent.update(&management_canister_id, "provisional_create_canister_with_cycles") .with_arg(&Encode!(&Argument { amount: None })?) .call_and_wait(waiter) .await?; let result = Decode!(response.as_slice(), CreateCanisterResult)?; let canister_id: Principal = Principal::from_text(&result.canister_id.to_text())?; Ok(canister_id) } let canister_id = create_a_canister().await.unwrap(); eprintln!("{}", canister_id);
This agent does not understand Candid, and only acts on byte buffers.
Implementations
Create an instance of an AgentBuilder
for building an Agent
. This is simpler than
using the AgentConfig
and Agent::new()
.
Create an instance of an Agent
.
Set the transport of the Agent
.
By default, the agent is configured to talk to the main Internet Computer, and verifies responses using a hard-coded public key.
This function will instruct the agent to ask the endpoint for its public key, and use that instead. This is required when talking to a local test instance, for example.
Only use this when you are not talking to the main Internet Computer, otherwise you are prone to man-in-the-middle attacks! Do not call this function by default.
By default, the agent is configured to talk to the main Internet Computer, and verifies responses using a hard-coded public key.
Using this function you can set the root key to a known one if you know if beforehand.
pub async fn poll(
&self,
request_id: &RequestId,
effective_canister_id: &Principal
) -> Result<PollResult, AgentError>
[src]pub async fn wait<W: Waiter>(
&self,
request_id: RequestId,
effective_canister_id: &Principal,
waiter: W
) -> Result<Vec<u8>, AgentError>
[src]pub async fn read_state_canister_info(
&self,
canister_id: Principal,
path: &str
) -> Result<Vec<u8>, AgentError>
[src]pub async fn request_status_raw(
&self,
request_id: &RequestId,
effective_canister_id: Principal
) -> Result<RequestStatusResponse, AgentError>
[src]Returns an UpdateBuilder enabling the construction of an update call without passing all arguments.
Calls and returns the information returned by the status endpoint of a replica.
Trait Implementations
Auto Trait Implementations
impl !RefUnwindSafe for Agent
impl !UnwindSafe for Agent
Blanket Implementations
Mutably borrows from an owned value. Read more
Instruments this type with the provided Span
, returning an
Instrumented
wrapper. Read more
type Output = T
type Output = T
Should always be Self
pub fn vzip(self) -> V