Praktik terbaik produksi

Keychain mengabstraksi backend penandatanganan, tetapi mengoperasikan penanda tangan di produksi tetap menjadi tanggung jawab Anda. Praktik-praktik ini berlaku di semua backend; lihat Memilih backend untuk memilih salah satunya.

Pisahkan penanda tangan hot dan cold

Gunakan penanda tangan operasional bersaldo rendah ("hot") untuk transaksi yang sering dan otomatis, serta penanda tangan bernilai tinggi ("cold") yang terpisah untuk pergerakan kas. Dukung penanda tangan cold dengan kustodi MPC atau cloud HSM dan terapkan kebijakan persetujuan sebelum penandatanganan. Karena antarmukanya identik, setiap peran dapat menggunakan backend yang berbeda tanpa mengubah lokasi pemanggilan.

Rotasi kunci secara terencana

Di Solana, kunci penandatanganan adalah alamat akun, sehingga merotasi kunci menghasilkan alamat baru. Rencanakan rotasi sebagai migrasi: provisikan kunci baru, tetapkan kembali otoritas yang relevan (atau pindahkan dana) ke alamat baru, lalu nonaktifkan yang lama. Gunakan kunci berbeda per lingkungan agar kunci devnet tidak pernah digunakan ulang di mainnet.

Berikan akses hak istimewa minimal

Batasi kredensial setiap backend hanya sebatas yang diperlukan untuk menandatangani. Untuk AWS KMS, itu adalah kms:Sign, kms:DescribeKey, dan kms:GetPublicKey pada kunci yang spesifik (pemeriksaan ketersediaan menggunakan dua yang terakhir); utamakan peran IAM daripada kredensial statis. Terapkan prinsip yang sama pada kebijakan Vault dan kunci API wallet terkelola.

Rencanakan ketersediaan

Backend jarak jauh bergantung pada layanan jaringan. Periksa ketersediaan sebelum mengandalkan sebuah signer (isAvailable() di TypeScript, is_available() di Rust dan Python, IsAvailable(ctx) di Go), coba ulang kegagalan yang hanya melibatkan penandatanganan dengan backoff, dan tentukan jalur cadangan untuk saat terjadi gangguan. Jangan mencoba ulang backend yang melakukan broadcast secara membabi buta (Crossmint, mode otomatis native Fordefi): lihat Tangani broadcast yang belum terkonfirmasi. Keychain memberlakukan HTTPS pada base URL yang dikonfigurasi, menolak pengalihan (redirect), dan menerapkan batas waktu permintaan default.

Tangani broadcast yang belum terkonfirmasi

Crossmint dan mode otomatis native Fordefi menandatangani dan melakukan broadcast di sisi server, sehingga panggilan yang gagal tidak berarti tidak ada yang terkirim. Ketika penyedia mungkin telah menerima transaksi, Keychain melaporkan BROADCAST_UNCONFIRMED (SignerError::BroadcastUnconfirmed di Rust). Error ini membawa id transaksi penyedia jika permintaan pembuatan diterima, dan selalu membawa kunci idempotensi yang digunakan saat permintaan pembuatan dikirim, yang diturunkan dari pesan.

  • Lakukan rekonsiliasi dengan penyedia menggunakan id transaksi sebelum melakukan hal lainnya.
  • Mengirim ulang transaksi yang identik byte demi byte aman dilakukan: kunci idempotensi mencegah duplikasi.
  • Membangun ulang transaksi (misalnya dengan blockhash baru) menghasilkan kunci baru dan karenanya transfer baru.

Lindungi rahasia dan transportasi

  • Backend jarak jauh memberlakukan HTTPS pada base URL yang dikonfigurasi dan menolak pengalihan (redirect). Satu-satunya pengecualian adalah Vault, yang menerima HTTP biasa pada loopback sehingga vault server -dev lokal dapat berfungsi.
  • Sediakan kunci API, token, dan kredensial dari pengelola rahasia atau variabel lingkungan — jangan pernah menyandikannya secara langsung atau menyimpannya ke kontrol sumber.
  • Keychain membersihkan respons kesalahan untuk menghindari kebocoran rahasia ke log; jaga pencatatan Anda sendiri bebas dari kredensial mentah dan materi kunci.

Pantau dan audit penandatanganan

Lacak tingkat keberhasilan penandatanganan, latensi, dan jumlah kegagalan, serta beri peringatan pada lonjakan — lihat metrik di Kesiapan Produksi. Aktifkan log audit sisi penyedia (KMS, Vault, atau kustodian) dan rekonsiliasi dengan transaksi yang diajukan aplikasi Anda.

Ketahui apa yang diperiksa Keychain

  • Keychain memvalidasi tahap penandatanganan, bukan transaksi Anda: tidak ada simulasi, tidak ada pemeriksaan isi transaksi, dan tidak ada mesin kebijakan. Terapkan hal tersebut di aplikasi Anda atau pada kontrol kebijakan penyedia.
  • Mode manual native Fordefi menulis ulang transaksi (blockhash, instruksi biaya Compute Budget) sebelum menandatanganinya. Lanjutkan dari transaksi yang dikembalikan, bukan yang Anda kirimkan, dan jalankan sebelum signer lainnya.
  • Rust melakukan zeroize pada buffer kunci perantara; Python dan Go tidak bisa. Dengan backend Memory di bahasa-bahasa tersebut, perlakukan seluruh memori proses sebagai data sensitif.
  • Dengan Ledger, layar perangkat adalah satu-satunya deskripsi yang dapat dipercaya tentang apa yang sedang ditandatangani. Jangan aktifkan fitur unsafe-debug atau logging TRACE untuk solana_remote_wallet di produksi, karena keduanya mencatat detail perangkat dan transaksi.

Lihat model keamanan untuk gambaran lengkapnya.

Is this page helpful?

Daftar Isi

Edit Halaman
© 2026 Yayasan Solana. Semua hak dilindungi.