gmsol_solana_utils/utils/
inspect.rs

1use solana_sdk::message::VersionedMessage;
2
3use crate::cluster::Cluster;
4
5/// Generate inspector url or encoded transaction message for the given message.
6pub fn inspect_transaction(
7    message: &VersionedMessage,
8    cluster: Option<&Cluster>,
9    raw: bool,
10) -> String {
11    use base64::{prelude::BASE64_STANDARD, Engine};
12    use url::form_urlencoded;
13
14    let message = BASE64_STANDARD.encode(message.serialize());
15
16    if raw {
17        message
18    } else {
19        let mut serializer = form_urlencoded::Serializer::new(String::new());
20        serializer.append_pair("message", &message);
21
22        let cluster = cluster.cloned().unwrap_or(Cluster::Mainnet);
23        match cluster {
24            Cluster::Localnet => {
25                serializer
26                    .append_pair("cluster", "custom")
27                    .append_pair("customUrl", "http://localhost:8899");
28            }
29            Cluster::Custom(url, _) => {
30                serializer
31                    .append_pair("cluster", "custom")
32                    .append_pair("customUrl", &url);
33            }
34            _ => {
35                serializer.append_pair("cluster", &cluster.to_string());
36            }
37        }
38
39        format!(
40            "https://explorer.solana.com/tx/inspector?{}",
41            serializer.finish()
42        )
43    }
44}