diff --git a/Cargo.lock b/Cargo.lock index 51f215d322ecfe..3ec0372c9d3fdb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4575,7 +4575,7 @@ dependencies = [ "solana-sdk 1.10.35", "solana-vote-program", "spl-token", - "spl-token-2022 0.4.1", + "spl-token-2022 0.4.2", "thiserror", "zstd", ] @@ -4985,7 +4985,7 @@ dependencies = [ "solana-transaction-status", "solana-version", "solana-vote-program", - "spl-token-2022 0.4.1", + "spl-token-2022 0.4.2", "thiserror", "tokio", "tokio-stream", @@ -5973,7 +5973,7 @@ dependencies = [ "solana-version", "solana-vote-program", "spl-token", - "spl-token-2022 0.4.1", + "spl-token-2022 0.4.2", "stream-cancel", "symlink", "thiserror", @@ -6447,7 +6447,7 @@ dependencies = [ "spl-associated-token-account", "spl-memo", "spl-token", - "spl-token-2022 0.4.1", + "spl-token-2022 0.4.2", "thiserror", ] @@ -6760,9 +6760,9 @@ dependencies = [ [[package]] name = "spl-token-2022" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e684f055853cf11bdc9cd3301da1a3238bc95d25c9e563fd67533c2314900eab" +checksum = "f0a97cbf60b91b610c846ccf8eecca96d92a24a19ffbf9fe06cd0c84e76ec45e" dependencies = [ "arrayref", "bytemuck", diff --git a/account-decoder/Cargo.toml b/account-decoder/Cargo.toml index 55430c25bac1ba..f37c3e9df14fac 100644 --- a/account-decoder/Cargo.toml +++ b/account-decoder/Cargo.toml @@ -23,7 +23,7 @@ solana-config-program = { path = "../programs/config", version = "=1.10.35" } solana-sdk = { path = "../sdk", version = "=1.10.35" } solana-vote-program = { path = "../programs/vote", version = "=1.10.35" } spl-token = { version = "=3.3.1", features = ["no-entrypoint"] } -spl-token-2022 = { version = "=0.4.1", features = ["no-entrypoint"] } +spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } thiserror = "1.0" zstd = "0.11.1" diff --git a/account-decoder/src/parse_token_extension.rs b/account-decoder/src/parse_token_extension.rs index 7a3dcf681f1c9d..6a24a01f7bfbc5 100644 --- a/account-decoder/src/parse_token_extension.rs +++ b/account-decoder/src/parse_token_extension.rs @@ -14,8 +14,8 @@ pub enum UiExtension { TransferFeeConfig(UiTransferFeeConfig), TransferFeeAmount(UiTransferFeeAmount), MintCloseAuthority(UiMintCloseAuthority), - ConfidentialTransferMint, // Implementation of extension state to come - ConfidentialTransferAccount, // Implementation of extension state to come + ConfidentialTransferMint(UiConfidentialTransferMint), + ConfidentialTransferAccount(UiConfidentialTransferAccount), DefaultAccountState(UiDefaultAccountState), ImmutableOwner, MemoTransfer(UiMemoTransfer), @@ -42,8 +42,14 @@ pub fn parse_extension( .get_extension::() .map(|&extension| UiExtension::MintCloseAuthority(extension.into())) .unwrap_or(UiExtension::UnparseableExtension), - ExtensionType::ConfidentialTransferMint => UiExtension::ConfidentialTransferMint, - ExtensionType::ConfidentialTransferAccount => UiExtension::ConfidentialTransferAccount, + ExtensionType::ConfidentialTransferMint => account + .get_extension::() + .map(|&extension| UiExtension::ConfidentialTransferMint(extension.into())) + .unwrap_or(UiExtension::UnparseableExtension), + ExtensionType::ConfidentialTransferAccount => account + .get_extension::() + .map(|&extension| UiExtension::ConfidentialTransferAccount(extension.into())) + .unwrap_or(UiExtension::UnparseableExtension), ExtensionType::DefaultAccountState => account .get_extension::() .map(|&extension| UiExtension::DefaultAccountState(extension.into())) @@ -197,3 +203,86 @@ impl From for UiInteres } } } + +#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)] +#[serde(rename_all = "camelCase")] +pub struct UiConfidentialTransferMint { + pub authority: String, + pub auto_approve_new_accounts: bool, + pub auditor_encryption_pubkey: String, + pub withdraw_withheld_authority_encryption_pubkey: String, + pub withheld_amount: String, +} + +impl From + for UiConfidentialTransferMint +{ + fn from( + confidential_transfer_mint: extension::confidential_transfer::ConfidentialTransferMint, + ) -> Self { + Self { + authority: confidential_transfer_mint.authority.to_string(), + auto_approve_new_accounts: confidential_transfer_mint.auto_approve_new_accounts.into(), + auditor_encryption_pubkey: format!( + "{}", + confidential_transfer_mint.auditor_encryption_pubkey + ), + withdraw_withheld_authority_encryption_pubkey: format!( + "{}", + confidential_transfer_mint.withdraw_withheld_authority_encryption_pubkey + ), + withheld_amount: format!("{}", confidential_transfer_mint.withheld_amount), + } + } +} + +#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)] +#[serde(rename_all = "camelCase")] +pub struct UiConfidentialTransferAccount { + pub approved: bool, + pub encryption_pubkey: String, + pub pending_balance_lo: String, + pub pending_balance_hi: String, + pub available_balance: String, + pub decryptable_available_balance: String, + pub allow_balance_credits: bool, + pub pending_balance_credit_counter: u64, + pub maximum_pending_balance_credit_counter: u64, + pub expected_pending_balance_credit_counter: u64, + pub actual_pending_balance_credit_counter: u64, + pub withheld_amount: String, +} + +impl From + for UiConfidentialTransferAccount +{ + fn from( + confidential_transfer_account: extension::confidential_transfer::ConfidentialTransferAccount, + ) -> Self { + Self { + approved: confidential_transfer_account.approved.into(), + encryption_pubkey: format!("{}", confidential_transfer_account.encryption_pubkey), + pending_balance_lo: format!("{}", confidential_transfer_account.pending_balance_lo), + pending_balance_hi: format!("{}", confidential_transfer_account.pending_balance_hi), + available_balance: format!("{}", confidential_transfer_account.available_balance), + decryptable_available_balance: format!( + "{}", + confidential_transfer_account.decryptable_available_balance + ), + allow_balance_credits: confidential_transfer_account.allow_balance_credits.into(), + pending_balance_credit_counter: confidential_transfer_account + .pending_balance_credit_counter + .into(), + maximum_pending_balance_credit_counter: confidential_transfer_account + .maximum_pending_balance_credit_counter + .into(), + expected_pending_balance_credit_counter: confidential_transfer_account + .expected_pending_balance_credit_counter + .into(), + actual_pending_balance_credit_counter: confidential_transfer_account + .actual_pending_balance_credit_counter + .into(), + withheld_amount: format!("{}", confidential_transfer_account.withheld_amount), + } + } +} diff --git a/client/Cargo.toml b/client/Cargo.toml index ef7da112e0ed76..31724b599365c7 100644 --- a/client/Cargo.toml +++ b/client/Cargo.toml @@ -50,7 +50,7 @@ solana-streamer = { path = "../streamer", version = "=1.10.35" } solana-transaction-status = { path = "../transaction-status", version = "=1.10.35" } solana-version = { path = "../version", version = "=1.10.35" } solana-vote-program = { path = "../programs/vote", version = "=1.10.35" } -spl-token-2022 = { version = "=0.4.1", features = ["no-entrypoint"] } +spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } thiserror = "1.0" tokio = { version = "1", features = ["full"] } tokio-stream = "0.1.8" diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index 3435099e682520..4534b80870ddd0 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -4057,7 +4057,7 @@ dependencies = [ "solana-sdk 1.10.35", "solana-vote-program", "spl-token", - "spl-token-2022 0.4.1", + "spl-token-2022 0.4.2", "thiserror", "zstd", ] @@ -4647,7 +4647,7 @@ dependencies = [ "solana-transaction-status", "solana-version", "solana-vote-program", - "spl-token-2022 0.4.1", + "spl-token-2022 0.4.2", "thiserror", "tokio", "tokio-stream", @@ -5309,7 +5309,7 @@ dependencies = [ "solana-version", "solana-vote-program", "spl-token", - "spl-token-2022 0.4.1", + "spl-token-2022 0.4.2", "stream-cancel", "thiserror", "tokio", @@ -5664,7 +5664,7 @@ dependencies = [ "spl-associated-token-account", "spl-memo", "spl-token", - "spl-token-2022 0.4.1", + "spl-token-2022 0.4.2", "thiserror", ] @@ -5950,9 +5950,9 @@ dependencies = [ [[package]] name = "spl-token-2022" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e684f055853cf11bdc9cd3301da1a3238bc95d25c9e563fd67533c2314900eab" +checksum = "f0a97cbf60b91b610c846ccf8eecca96d92a24a19ffbf9fe06cd0c84e76ec45e" dependencies = [ "arrayref", "bytemuck", diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index 0c1d5b4c6f9f84..bf5dc030d8029a 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -49,7 +49,7 @@ solana-transaction-status = { path = "../transaction-status", version = "=1.10.3 solana-version = { path = "../version", version = "=1.10.35" } solana-vote-program = { path = "../programs/vote", version = "=1.10.35" } spl-token = { version = "=3.3.1", features = ["no-entrypoint"] } -spl-token-2022 = { version = "=0.4.1", features = ["no-entrypoint"] } +spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } stream-cancel = "0.8.1" thiserror = "1.0" tokio = { version = "~1.14.1", features = ["full"] } diff --git a/transaction-status/Cargo.toml b/transaction-status/Cargo.toml index 73c776a0f24157..ba2a198ffb7ebb 100644 --- a/transaction-status/Cargo.toml +++ b/transaction-status/Cargo.toml @@ -28,7 +28,7 @@ solana-vote-program = { path = "../programs/vote", version = "=1.10.35" } spl-associated-token-account = { version = "=1.0.5", features = ["no-entrypoint"] } spl-memo = { version = "=3.0.1", features = ["no-entrypoint"] } spl-token = { version = "=3.3.1", features = ["no-entrypoint"] } -spl-token-2022 = { version = "=0.4.1", features = ["no-entrypoint"] } +spl-token-2022 = { version = "=0.4.2", features = ["no-entrypoint"] } thiserror = "1.0" [package.metadata.docs.rs]