> For the complete documentation index, see [llms.txt](https://exfaz.gitbook.io/namada/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://exfaz.gitbook.io/namada/panduan-integrasi/menggunakan-sdk/menyiapkan-dompet.md).

# Menyiapkan dompet

## Menyiapkan dompet SDK

### Impor yang relevan

#### Impor umum

{% code overflow="wrap" %}

```
// namada_sdk::Namada is a high level interface in order to interact with the Namada SDK
use namada_sdk::Namada;
// The NamadaImpl provides convenient implementations to frequently used Namada SDK interactons
use namada_sdk::NamadaImpl;
```

{% endcode %}

#### Impor khusus dompet

{% code overflow="wrap" %}

```
// SecretKey, common and SchemeType give access to Namada cryptographic keys and their relevant implementations. Namada supports ED25519 and SECP256K1 keys.
use namada_sdk::core::types::key::common::SecretKey;
use namada_sdk::core::types::key::{common, SchemeType};
// Filesystem wallet utilities (stores the path of the wallet on the filesystem)
use namada_sdk::wallet::fs::FsWalletUtils;
```

{% endcode %}

### Membuat dompet dari mnemonik

SDK dapat membuat dompet dari frase mnemonik. Frase mnemonik adalah frase 24 kata yang dapat digunakan untuk memulihkan dompet.

{% code overflow="wrap" %}

```
let mnemonic = Mnemonic::from_phrase(MNEMONIC_CODE, namada_sdk::bip39::Language::English)
```

{% endcode %}

{% code overflow="wrap" %}

```
// Assuming a cometbft node is running on localhost:26657
let http_client = HttpClient::new("http://localhost:26657").unwrap();
// Assuming wallet.toml exists in the current directory
let mut wallet = FsWalletUtils::new(PathBuf::from("wallet.toml"));
// The key can be generated from the wallet by passing in the mnemonic phrase
let (_key_alias, sk) = NamadaImpl::new(&http_client, &mut wallet, &mut shielded_ctx, &NullIo)
            .wallet_mut()
            .await
            .derive_key_from_user_mnemonic_code(
                SchemeType::Ed25519,
                Some(alias),
                false,
                Some(derivation_path),
                Some((mnemonic.clone(), Zeroizing::new("".to_owned()))),
                None,
            )
            .expect("unable to derive key from mnemonic code")
            .unwrap();
```

{% endcode %}

Pada bagian kedua dari fungsi di atas, kuncinya diturunkan dari frase mnemonik. Adalah `alias`nama kunci yang akan disimpan di dompet. Ini `derivation_path`adalah jalur menuju kunci di dompet HD. Ini `mnemonic`adalah frase mnemonik yang dihasilkan sebelumnya. Ini `shielded_ctx`adalah konteks untuk transaksi terlindung. Ini `NullIo`adalah konteks IO untuk dompet.

### Menghasilkan dompet baru dan menyimpannya ke sistem file

Dimungkinkan juga untuk membuat dompet SDK dari awal. Ini lebih rumit karena memerlukan pembuatan toko baru agar dompet bisa ada.

{% code overflow="wrap" %}

```
use std::path::PathBuf;
 
use namada::{
    sdk::wallet::{
        alias::Alias, ConfirmationResponse, GenRestoreKeyError, Store, StoredKeypair, Wallet,
        WalletUtils,
    },
    types::{
        address::Address,
        key::{common::SecretKey, PublicKeyHash},
    },
};
use rand::rngs::OsRng;
 
pub struct SdkWallet {
    pub wallet: Wallet<SdkWalletUtils>,
}
 
impl SdkWallet {
    pub fn new(sk: SecretKey, nam_address: Address) -> Self {
        let store = Store::default();
        let mut wallet = Wallet::new(PathBuf::new(), store);
        let stored_keypair = StoredKeypair::Raw(sk.clone());
        let pk_hash = PublicKeyHash::from(&sk.to_public());
        let alias = "alice".to_string();
        wallet.insert_keypair(alias, stored_keypair, pk_hash, true);
        wallet.add_address("nam", nam_address, true);
        Self { wallet }
    }
}
 
pub struct SdkWalletUtils {}
 
impl WalletUtils for SdkWalletUtils {
    type Storage = PathBuf;
 
    type Rng = OsRng;
 
    fn read_decryption_password() -> zeroize::Zeroizing<std::string::String> {
        panic!("attempted to prompt for password in non-interactive mode");
    }
 
    fn read_encryption_password() -> zeroize::Zeroizing<std::string::String> {
        panic!("attempted to prompt for password in non-interactive mode");
    }
 
    fn read_alias(_prompt_msg: &str) -> std::string::String {
        panic!("attempted to prompt for alias in non-interactive mode");
    }
 
    fn read_mnemonic_code() -> std::result::Result<namada::bip39::Mnemonic, GenRestoreKeyError> {
        panic!("attempted to prompt for mnemonic in non-interactive mode");
    }
 
    fn read_mnemonic_passphrase(_confirm: bool) -> zeroize::Zeroizing<std::string::String> {
        panic!("attempted to prompt for mnemonic in non-interactive mode");
    }
 
    fn show_overwrite_confirmation(
        _alias: &Alias,
        _alias_for: &str,
    ) -> namada::sdk::wallet::store::ConfirmationResponse {
        // Automatically replace aliases in non-interactive mode
        ConfirmationResponse::Replace
    }
}
```

{% endcode %}

Kode di atas sekarang memungkinkan kita membuat instance apa pun `SdkWallet`hanya dengan memasukkan kunci rahasia dan alamat token `NAM`. Jika kami ingin melakukan transfer dengan token lain, kami perlu menambahkan alamat tersebut juga.
