Skip to content

Commit

Permalink
feat(torii-client): retrieve controllers from client (#2996)
Browse files Browse the repository at this point in the history
* feat(torii-client): retrieve controllers from client

* fmt

* add to grpc client

* fix imports

* fmt
  • Loading branch information
Larkooo authored Feb 7, 2025
1 parent 99d2e60 commit d11a7ec
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 12 deletions.
22 changes: 19 additions & 3 deletions crates/torii/client/src/client/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,13 @@ use torii_grpc::client::{
EntityUpdateStreaming, EventUpdateStreaming, IndexerUpdateStreaming, TokenBalanceStreaming,
};
use torii_grpc::proto::world::{
RetrieveEntitiesResponse, RetrieveEventsResponse, RetrieveTokenBalancesResponse,
RetrieveTokensResponse,
RetrieveControllersResponse, RetrieveEntitiesResponse, RetrieveEventsResponse,
RetrieveTokenBalancesResponse, RetrieveTokensResponse,
};
use torii_grpc::types::schema::Entity;
use torii_grpc::types::{EntityKeysClause, Event, EventQuery, Query, Token, TokenBalance};
use torii_grpc::types::{
Controller, EntityKeysClause, Event, EventQuery, Query, Token, TokenBalance,
};
use torii_relay::client::EventLoop;
use torii_relay::types::Message;

Expand Down Expand Up @@ -90,6 +92,20 @@ impl Client {
self.metadata.read()
}

/// Retrieves controllers matching contract addresses.
pub async fn controllers(
&self,
contract_addresses: Vec<Felt>,
) -> Result<Vec<Controller>, Error> {
let mut grpc_client = self.inner.write().await;
let RetrieveControllersResponse { controllers } =
grpc_client.retrieve_controllers(contract_addresses).await?;
Ok(controllers
.into_iter()
.map(TryInto::try_into)
.collect::<Result<Vec<Controller>, _>>()?)
}

/// Retrieves tokens matching contract addresses.
pub async fn tokens(&self, contract_addresses: Vec<Felt>) -> Result<Vec<Token>, Error> {
let mut grpc_client = self.inner.write().await;
Expand Down
34 changes: 25 additions & 9 deletions crates/torii/grpc/src/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,15 @@ use tonic::codec::CompressionEncoding;
use tonic::transport::Endpoint;

use crate::proto::world::{
world_client, RetrieveEntitiesRequest, RetrieveEntitiesResponse, RetrieveEventMessagesRequest,
RetrieveEventsRequest, RetrieveEventsResponse, RetrieveTokenBalancesRequest,
RetrieveTokenBalancesResponse, RetrieveTokensRequest, RetrieveTokensResponse,
SubscribeEntitiesRequest, SubscribeEntityResponse, SubscribeEventMessagesRequest,
SubscribeEventsRequest, SubscribeEventsResponse, SubscribeIndexerRequest,
SubscribeIndexerResponse, SubscribeModelsRequest, SubscribeModelsResponse,
SubscribeTokenBalancesResponse, UpdateEntitiesSubscriptionRequest,
UpdateEventMessagesSubscriptionRequest, UpdateTokenBalancesSubscriptionRequest,
WorldMetadataRequest,
world_client, RetrieveControllersRequest, RetrieveControllersResponse, RetrieveEntitiesRequest,
RetrieveEntitiesResponse, RetrieveEventMessagesRequest, RetrieveEventsRequest,
RetrieveEventsResponse, RetrieveTokenBalancesRequest, RetrieveTokenBalancesResponse,
RetrieveTokensRequest, RetrieveTokensResponse, SubscribeEntitiesRequest,
SubscribeEntityResponse, SubscribeEventMessagesRequest, SubscribeEventsRequest,
SubscribeEventsResponse, SubscribeIndexerRequest, SubscribeIndexerResponse,
SubscribeModelsRequest, SubscribeModelsResponse, SubscribeTokenBalancesResponse,
UpdateEntitiesSubscriptionRequest, UpdateEventMessagesSubscriptionRequest,
UpdateTokenBalancesSubscriptionRequest, WorldMetadataRequest,
};
use crate::types::schema::{Entity, SchemaError};
use crate::types::{
Expand Down Expand Up @@ -95,6 +95,22 @@ impl WorldClient {
.and_then(|metadata| metadata.try_into().map_err(Error::ParseStr))
}

pub async fn retrieve_controllers(
&mut self,
contract_addresses: Vec<Felt>,
) -> Result<RetrieveControllersResponse, Error> {
self.inner
.retrieve_controllers(RetrieveControllersRequest {
contract_addresses: contract_addresses
.into_iter()
.map(|c| c.to_bytes_be().to_vec())
.collect(),
})
.await
.map_err(Error::Grpc)
.map(|res| res.into_inner())
}

pub async fn retrieve_tokens(
&mut self,
contract_addresses: Vec<Felt>,
Expand Down
18 changes: 18 additions & 0 deletions crates/torii/grpc/src/types/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,24 @@ use crate::proto::{self};

pub mod schema;

#[derive(Debug, Serialize, Deserialize, PartialEq, Hash, Eq, Clone)]
pub struct Controller {
pub address: Felt,
pub username: String,
pub deployed_at: u64,
}

impl TryFrom<proto::types::Controller> for Controller {
type Error = SchemaError;
fn try_from(value: proto::types::Controller) -> Result<Self, Self::Error> {
Ok(Self {
address: Felt::from_bytes_be_slice(&value.address),
username: value.username,
deployed_at: value.deployed_at_timestamp,
})
}
}

#[derive(Debug, Serialize, Deserialize, PartialEq, Hash, Eq, Clone)]
pub struct Token {
pub contract_address: Felt,
Expand Down

0 comments on commit d11a7ec

Please sign in to comment.