diff --git a/Cargo.lock b/Cargo.lock index ead2338..e84de32 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1772,7 +1772,7 @@ dependencies = [ [[package]] name = "bridge-cli" -version = "0.3.36" +version = "0.3.37" dependencies = [ "alloy", "clap", @@ -5392,7 +5392,7 @@ dependencies = [ [[package]] name = "omni-connector" -version = "0.3.4" +version = "0.3.5" dependencies = [ "alloy", "bip0039", @@ -7496,7 +7496,7 @@ dependencies = [ [[package]] name = "solana-bridge-client" -version = "0.2.7" +version = "0.2.8" dependencies = [ "base64 0.22.1", "bitvec", diff --git a/bridge-cli/Cargo.toml b/bridge-cli/Cargo.toml index 5fe0288..2977a0c 100644 --- a/bridge-cli/Cargo.toml +++ b/bridge-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "bridge-cli" -version = "0.3.36" +version = "0.3.37" edition = "2021" repository = "https://github.com/Near-One/bridge-sdk-rs" rust-version = "1.88.0" diff --git a/bridge-cli/src/omni_connector_command.rs b/bridge-cli/src/omni_connector_command.rs index b086b61..3342799 100644 --- a/bridge-cli/src/omni_connector_command.rs +++ b/bridge-cli/src/omni_connector_command.rs @@ -588,6 +588,13 @@ pub enum InternalSubCommand { #[command(flatten)] config_cli: CliConfig, }, + #[clap(about = "Get Solana token vault (locker) PDA")] + SolanaGetTokenVault { + #[clap(short, long, help = "Token mint address")] + token: String, + #[command(flatten)] + config_cli: CliConfig, + }, } #[allow(clippy::too_many_lines)] @@ -1249,6 +1256,12 @@ pub async fn match_subcommand(cmd: OmniConnectorSubCommand, network: Network) { tracing::info!("Near Tx Hash: {tx_hash}"); } + InternalSubCommand::SolanaGetTokenVault { token, config_cli } => { + omni_connector(network, config_cli) + .solana_get_token_vault(token.parse().unwrap()) + .await + .unwrap(); + } }, } } diff --git a/bridge-sdk/bridge-clients/solana-bridge-client/Cargo.toml b/bridge-sdk/bridge-clients/solana-bridge-client/Cargo.toml index 8a94f02..94208ec 100644 --- a/bridge-sdk/bridge-clients/solana-bridge-client/Cargo.toml +++ b/bridge-sdk/bridge-clients/solana-bridge-client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "solana-bridge-client" -version = "0.2.7" +version = "0.2.8" edition = "2021" [dependencies] diff --git a/bridge-sdk/bridge-clients/solana-bridge-client/src/solana_bridge_client.rs b/bridge-sdk/bridge-clients/solana-bridge-client/src/solana_bridge_client.rs index 37410a7..bf70993 100644 --- a/bridge-sdk/bridge-clients/solana-bridge-client/src/solana_bridge_client.rs +++ b/bridge-sdk/bridge-clients/solana-bridge-client/src/solana_bridge_client.rs @@ -1001,6 +1001,12 @@ impl SolanaBridgeClient { Ok(mint_account.owner) } + pub fn get_token_vault(&self, token: Pubkey) -> Result { + let program_id = self.program_id()?; + let (vault, _) = Pubkey::find_program_address(&[b"vault", token.as_ref()], program_id); + Ok(vault) + } + pub fn client(&self) -> Result<&RpcClient, SolanaBridgeClientError> { self.client .as_ref() diff --git a/bridge-sdk/connectors/omni-connector/Cargo.toml b/bridge-sdk/connectors/omni-connector/Cargo.toml index a8a29b1..653cae0 100644 --- a/bridge-sdk/connectors/omni-connector/Cargo.toml +++ b/bridge-sdk/connectors/omni-connector/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "omni-connector" -version = "0.3.4" +version = "0.3.5" edition = "2021" rust-version = "1.88.0" diff --git a/bridge-sdk/connectors/omni-connector/src/omni_connector.rs b/bridge-sdk/connectors/omni-connector/src/omni_connector.rs index be9b6cf..404a910 100644 --- a/bridge-sdk/connectors/omni-connector/src/omni_connector.rs +++ b/bridge-sdk/connectors/omni-connector/src/omni_connector.rs @@ -1457,6 +1457,19 @@ impl OmniConnector { Ok(version) } + pub async fn solana_get_token_vault(&self, token: Pubkey) -> Result { + let solana_bridge_client = self.solana_bridge_client()?; + let vault = solana_bridge_client.get_token_vault(token)?; + + tracing::info!( + token = token.to_string(), + vault = vault.to_string(), + "Derived Solana token vault" + ); + + Ok(vault) + } + pub async fn solana_log_metadata(&self, token: Pubkey) -> Result { let solana_bridge_client = self.solana_bridge_client()?;