Медиа Центр

Here is an article about Solana: Decoding data from the Accountsubscribe WebSocket method using a rust:

Data Decoding with ACCOUNTSUBSCRIPTION WebSocket in Solana with rust

The WSS “AccountsubsCrict” method (WebSockets subscribers) is a powerful tool to download data relating to Solana Blockchain Subscriber. If used properly, it can give a valuable idea of ​​the participation and transactions of your Vault property. However, the decoding of the coded JSON of the beneficial load of Base64 obtained from the server may be a challenge.

In this article, we will study how to decode the data sent by the accountsubscrict using a rust, focusing on the specific requirements of portfolio addresses based on the portfolio, such as the “bases” and “quoted” assets.

Prerequisites

Solana: Decoding data from accountSubscribe Websocket method. RUST

Before you dive into the code you must have:

  • Performing a solar node (eg Solflare)

  • Cristed Solana-Websocket 'installed in your Project Rust

  • A great understanding of API to sign out a subscription to the salt pans

Example Code

Below is an example of how to get data fromAccountsubsCrictusing the" Solana-Websocket "box:

Rust

Use Solana_sdk :: {Accountinfo, PubKey};

Use Solana_websoCket :: {ApspubletionResponse, subscription};

#[Tokyo :: Basic]

Async fn main () {{)

// initialize your salt node

Let (context, accounts) = tokyo :: Mrrijwn (Solana_node :: Init ());

// subscribe to the events of Accountsubscribe

Let the subscription_options = subscriptions :: new (

Contextpubkey,

PubKey :: New ("Your Acknowledgments"),

);

Let the subscription_response = tokio :: Run (subscription_options);

// analyzes the answer as json

Let Json: Serde_json :: Value = Serde_json :: from_str (& subscription_response) .unwrap ();

// cycles through each account and print his details

for (Account_id, information) in json ["accounts"]. Iter () {{

Println! ("Account ID: {}", Account_id);

Println! ("Pubkey: {}", info.pubkey.to_string ());

Println! ("Owner: {}", info.owner.value ());

Println! ("Tip: {}", info.type_.value ());

// ...

Iche

Iche

// Determine subscription options

#[Denive (default)]

Struct subscribers {

PubKey: Pubkey,

Iche

In this example, we initialize the junction of the solana usingTokyo :: Spawn, and then subscribe to the events of Accountsubscribe. We analyze the answer as Json and the bike through each account by printing his details.

Decoding 64-coded databases

After receiving Json's response fromAccountsubscribe,” Base64 coded it. To decoded this information, we can use the following steps:

  • Unpack the response to the JSON object using Serde_json :: From_str.

  • Decorate all binary data at Json.

Here’s an example of how to deal with these steps:

`Rust

Use Serde :: {desseralize, serialize};

Use base64;

#[Denive (default)]

Struct adBoncriptionresponse {

Accounts: already ,

Iche

Imple Serde_json :: Subscribe Card for Reply {

Fn Get (& Self, Key: & Str) -> Option <& Serde_json :: Value> {

Match [Key] {{

Some (value) => value,

None => no,

Iche

Iche

fn as_bytes (& self) -> option > {{

match self.as_ref () {{

Some (map) => map.get ("accounts"). Map (| Value | Base64 :: Decoding (Value) .unwrap ()),

_ => No,

Iche

Iche

Iche

In this example, we define the subscription structure to an answer that implement 'Serde_json :: Map. We also apply the necessary methods to process the decoding of binary data at JSON.

Finally, when we analyze the answer such as JSON and call As_bytes, we use ‘Base64 :: Decode` for decipher any binary data present at the JSON web site. If binary data is not found, the method returns “no”.