From 1a8dc290ebc172d94d8ce05f452216a16e3a1a01 Mon Sep 17 00:00:00 2001 From: samkim-crypto Date: Thu, 17 Oct 2024 18:04:45 +0900 Subject: [PATCH] add support for `ConfigureAccountWithRegistry` in the token-client --- Cargo.lock | 31 +++++++++++++++++++++++++++++++ token/client/Cargo.toml | 2 ++ token/client/src/token.rs | 27 ++++++++++++++++++++++++++- 3 files changed, 59 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 19571906ee7..0dd09da68dc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6989,6 +6989,17 @@ dependencies = [ "thiserror", ] +[[package]] +name = "spl-elgamal-registry" +version = "0.1.0" +dependencies = [ + "bytemuck", + "solana-program", + "solana-zk-sdk", + "spl-pod 0.4.0", + "spl-token-confidential-transfer-proof-extraction", +] + [[package]] name = "spl-example-cross-program-invocation" version = "1.0.0" @@ -7295,6 +7306,19 @@ dependencies = [ "spl-program-error 0.5.0", ] +[[package]] +name = "spl-pod" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00e38c99f09d58df06ca9a29fc0211786a4c34f4d099c1df27b1abaa206569a4" +dependencies = [ + "bytemuck", + "bytemuck_derive", + "solana-program", + "solana-zk-sdk", + "spl-program-error 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "spl-program-error" version = "0.5.0" @@ -7588,6 +7612,7 @@ dependencies = [ "solana-sdk", "solana-security-txt", "solana-zk-sdk", + "spl-elgamal-registry", "spl-memo 5.0.0", "spl-pod 0.4.0", "spl-tlv-account-resolution 0.8.1", @@ -7614,6 +7639,7 @@ dependencies = [ "solana-program-test", "solana-sdk", "spl-associated-token-account 5.0.1", + "spl-elgamal-registry", "spl-instruction-padding", "spl-memo 5.0.0", "spl-pod 0.4.0", @@ -7621,6 +7647,7 @@ dependencies = [ "spl-tlv-account-resolution 0.8.1", "spl-token-2022 5.0.2", "spl-token-client", + "spl-token-confidential-transfer-proof-extraction", "spl-token-confidential-transfer-proof-generation", "spl-token-group-interface 0.4.2", "spl-token-metadata-interface 0.5.1", @@ -7685,10 +7712,12 @@ dependencies = [ "solana-rpc-client-api", "solana-sdk", "spl-associated-token-account-client", + "spl-elgamal-registry", "spl-memo 5.0.0", "spl-record", "spl-token 6.0.0", "spl-token-2022 5.0.2", + "spl-token-confidential-transfer-proof-extraction", "spl-token-confidential-transfer-proof-generation", "spl-token-group-interface 0.4.2", "spl-token-metadata-interface 0.5.1", @@ -7732,7 +7761,9 @@ version = "0.1.0" dependencies = [ "bytemuck", "solana-curve25519", + "solana-program", "solana-zk-sdk", + "spl-pod 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "thiserror", ] diff --git a/token/client/Cargo.toml b/token/client/Cargo.toml index 2ecf6710e04..b5d526e9965 100644 --- a/token/client/Cargo.toml +++ b/token/client/Cargo.toml @@ -20,6 +20,7 @@ solana-rpc-client = "2.0.3" solana-rpc-client-api = "2.0.3" solana-sdk = "2.0.3" spl-associated-token-account-client = { version = "1.0.0", path = "../../associated-token-account/client" } +spl-elgamal-registry = { version = "0.1.0", path = "../confidential-transfer/elgamal-registry"} spl-memo = { version = "5.0", path = "../../memo/program", features = [ "no-entrypoint", ] } @@ -27,6 +28,7 @@ spl-record = { version = "0.2.1", path = "../../record/program", features = ["no spl-token = { version = "6.0", path = "../program", features = [ "no-entrypoint", ] } +spl-token-confidential-transfer-proof-extraction = { version = "0.1.0", path = "../confidential-transfer/proof-extraction" } spl-token-confidential-transfer-proof-generation = { version = "0.1.0", path = "../confidential-transfer/proof-generation" } spl-token-2022 = { version = "5.0.2", path = "../program-2022" } spl-token-group-interface = { version = "0.4.2", path = "../../token-group/interface" } diff --git a/token/client/src/token.rs b/token/client/src/token.rs index 165616a645f..f244f19dd73 100644 --- a/token/client/src/token.rs +++ b/token/client/src/token.rs @@ -47,7 +47,6 @@ use { BaseStateWithExtensions, Extension, ExtensionType, StateWithExtensionsOwned, }, instruction, offchain, - proof::{zk_proof_type_to_instruction, ProofData, ProofLocation}, solana_zk_sdk::{ encryption::{ auth_encryption::AeKey, @@ -63,6 +62,9 @@ use { }, state::{Account, AccountState, Mint, Multisig}, }, + spl_token_confidential_transfer_proof_extraction::{ + zk_proof_type_to_instruction, ProofData, ProofLocation, + }, spl_token_confidential_transfer_proof_generation::{ transfer::TransferProofData, transfer_with_fee::TransferWithFeeProofData, withdraw::WithdrawProofData, @@ -1972,6 +1974,29 @@ where .await } + /// Configures confidential transfers for a token account using an ElGamal + /// registry account + pub async fn confidential_transfer_configure_token_account_with_registry( + &self, + account: &Pubkey, + elgamal_registry_account: &Pubkey, + authority: &Pubkey, + ) -> TokenResult { + self.process_ixs::<[&dyn Signer; 0]>( + &[ + confidential_transfer::instruction::configure_account_with_registry( + &self.program_id, + account, + &self.pubkey, + elgamal_registry_account, + authority, + )?, + ], + &[], + ) + .await + } + /// Approves a token account for confidential transfers pub async fn confidential_transfer_approve_account( &self,