Terakhir Diperbarui: 2025-08-22
Apa itu Penandatangan?
Penandatangan adalah keypair kriptografi yang digunakan node Kora Anda untuk menandatangani transaksi Solana sebagai pembayar biaya. Ketika pengguna mengirim transaksi ke node Kora Anda, node akan memvalidasi dan menandatangani bersama dengan kunci privat penandatangan Anda untuk menutup biaya transaksi SOL.
Catatan: Secara default, biaya pembayaran token dikirim ke alamat
penandatangan. Namun, Anda dapat mengonfigurasi payment_address terpisah di
kora.toml Anda untuk menerima pembayaran di alamat yang berbeda sambil
memisahkan penandatangan Anda. Lihat
Panduan Konfigurasi untuk detail
lebih lanjut.
Keypair penandatangan Anda memiliki akses langsung ke dana SOL yang digunakan untuk membayar biaya transaksi. Jika dikompromikan, penyerang dapat:
- Menguras saldo SOL Anda
- Menandatangani transaksi yang tidak sah
- Mengganggu layanan paymaster Anda
Konfigurasi Penandatangan
Kora RPC CLI memerlukan signer.toml yang ditentukan melalui flag
--signers-config. File singer.toml memungkinkan Anda mengonfigurasi
penandatangan dan konfigurasi penandatangan untuk node Anda. signer.toml
memiliki dua bagian:
[signer_pool]- Konfigurasi untuk pool penandatangan[[signers]]- Konfigurasi untuk setiap penandatangan (setidaknya satu penandatangan diperlukan kecuali menggunakan flag--no-load-signeryang memiliki fungsionalitas terbatas)
[signer_pool]
Konfigurasi pool penandatangan menentukan atribut khusus untuk keseluruhan pool penandatangan:
strategy- Strategi pemilihan untuk memilih penandatangan. Strategi yang tersedia adalah:round_robin(default) - Memutar penandatangan secara berurutan.random- Memilih penandatangan secara acak.weighted- Memilih penandatangan berdasarkan bobot.
[[signers]]
Setiap penandatangan dikonfigurasi dengan:
- sebuah
name: pengenal yang dapat dibaca manusia untuk penandatangan dan harus unik dalam kumpulan penandatangan - opsional
weight: angka yang menentukan bobot penandatangan jikastrategyadalahweighted - sebuah
typedan konfigurasi khusus tipe (lihat Tipe Penandatangan)
Satu penandatangan diperlukan kecuali menggunakan flag --no-load-signer yang
memiliki fungsionalitas terbatas. Untuk deployment produksi, disarankan untuk
mengonfigurasi beberapa penandatangan untuk meningkatkan keandalan dan performa.
Contoh
Berikut adalah contoh file signers.toml yang mendefinisikan kumpulan
penandatangan round-robin dengan tiga penandatangan (catatan: kita akan
membahas berbagai tipe/konfigurasi penandatangan di bagian berikutnya):
[signer_pool]# Selection strategy: round_robin, random, weightedstrategy = "round_robin"# Primary memory signer[[signers]]name = "signer_1"type = "memory"private_key_env = "SIGNER_1_PRIVATE_KEY"# weight = 1 # Not required if strategy is not weighted# Backup memory signer[[signers]]name = "signer_2"type = "memory"private_key_env = "SIGNER_2_PRIVATE_KEY"# weight = 1 # Not required if strategy is not weighted# Turnkey signer for high-value operations[[signers]]name = "signer_3_turnkey"type = "turnkey"api_public_key_env = "TURNKEY_API_PUBLIC_KEY"api_private_key_env = "TURNKEY_API_PRIVATE_KEY"organization_id_env = "TURNKEY_ORG_ID"private_key_id_env = "TURNKEY_PRIVATE_KEY_ID"public_key_env = "TURNKEY_PUBLIC_KEY"# weight = 2 # Higher weight = selected more often
Variabel Lingkungan
Atur variabel lingkungan untuk semua penandatangan yang dikonfigurasi:
# Memory signersSIGNER_1_PRIVATE_KEY="your_base58_private_key_1"SIGNER_2_PRIVATE_KEY="your_base58_private_key_2"# Turnkey signerTURNKEY_API_PUBLIC_KEY="your_turnkey_api_public_key"TURNKEY_API_PRIVATE_KEY="your_turnkey_api_private_key"TURNKEY_ORG_ID="your_turnkey_organization_id"TURNKEY_PRIVATE_KEY_ID="your_turnkey_private_key_id"TURNKEY_PUBLIC_KEY="your_turnkey_public_key"
Memulai Kora dengan Konfigurasi Penandatangan
kora --config path/to/kora.toml rpc start --signers-config path/to/signers.toml
Tipe Penandatangan
Kora mendukung empat tipe penandatangan utama, masing-masing dengan karakteristik keamanan dan operasional yang berbeda (dan opsi tanpa penandatangan untuk pengujian terbatas):
- Kunci Privat - sederhana, dikelola sendiri
- Turnkey - layanan manajemen kunci
- Privy - layanan manajemen kunci
- Vault - integrasi HashiCorp Vault
- Tanpa Penandatangan - tanpa penandatangan (untuk pengujian terbatas)
Penandatangan Kunci Privat
Pendekatan paling sederhana - simpan kunci privat Anda langsung di variabel lingkungan atau lewati melalui flag CLI. Kora menerima kunci privat dalam tiga format:
1. Format Base58 (Default)
Kunci privat standar Solana yang dikodekan base58:
KORA_PRIVATE_KEY="5KKsLVU6TcbVDK4BS6K1DGDxnh4Q9xjYJ8XaDCG5t8ht..."
2. Format U8Array
Array dari 64 byte dalam format JSON:
KORA_PRIVATE_KEY="[174, 47, 154, 16, 202, 193, 206, 113, 199, 190, 53, 133, 169, 175, 31, 56, 222, 53, 138, 189, 224, 216, 117, 173, 10, 149, 53, 45, 73, 251, 237, 246, 15, 185, 186, 82, 177, 240, 148, 69, 241, 227, 167, 80, 141, 89, 240, 121, 121, 35, 172, 247, 68, 251, 226, 218, 48, 63, 176, 109, 168, 89, 238, 135]"
3. Path File JSON
Path ke file JSON yang berisi keypair:
KORA_PRIVATE_KEY="/path/to/keypair.json"
Di mana keypair.json berisi:
[174, 47, 154, 16, 202, 193, 206, 113, 199, 190, 53, 133, 169, 175, 31, 56,222, 53, 138, 189, 224, 216, 117, 173, 10, 149, 53, 45, 73, 251, 237, 246, 15,185, 186, 82, 177, 240, 148, 69, 241, 227, 167, 80, 141, 89, 240, 121, 121,35, 172, 247, 68, 251, 226, 218, 48, 63, 176, 109, 168, 89, 238, 135]
Buat Keypair Baru
Anda dapat membuat keypair baru untuk node Kora Anda menggunakan Solana CLI:
# Generate new keypair filesolana-keygen new --outfile ~/.config/solana/kora-keypair.json# Get the public keysolana-keygen pubkey ~/.config/solana/kora-keypair.json# Fund with SOL for transaction feessolana transfer --from <your-funding-wallet> <kora-public-key> 0.1
Konfigurasi Signer.toml
Variabel yang diperlukan:
name- Nama signertype- Jenis signer (harusmemory)private_key_env- Variabel lingkungan yang berisi kunci privat
[[signers]]name = "my_memory_signer"type = "memory"private_key_env = "KORA_PRIVATE_KEY" # (or your environment variable name)
Signer Turnkey
Turnkey menyediakan manajemen kunci tingkat perusahaan dengan modul keamanan perangkat keras (HSM) dan kontrol kebijakan.
Prasyarat
Anda memerlukan Akun Turnkey untuk menggunakan signer Turnkey. Daftar di turnkey.com
Pengaturan
Anda memerlukan lima kunci untuk menggunakan signer Turnkey:
- ID organisasi Turnkey
- Kunci publik API Turnkey
- Kunci privat API Turnkey
- ID kunci privat Turnkey
- Kunci publik Turnkey
Mari kita ambil dari Turnkey:
1. Organisasi Turnkey
Klik menu pengguna di pojok kanan atas dashboard Turnkey dan salin ID organisasi:
ID Organisasi Turnkey
Simpan ID organisasi dalam variabel lingkungan:
TURNKEY_ORGANIZATION_ID="your_organization_id"
2. Kunci API Turnkey
- Klik menu pengguna di pojok kanan atas dashboard Turnkey dan klik "Account Settings".
- Di bawah "API Keys", klik "+ Create API Key".
- Pilih "Generate API keys in-browser"
- Masukkan nama untuk kunci API dan klik "Continue"
- Simpan kunci publik dan privat, lalu klik "Approve"
Kunci API Turnkey
Simpan kunci publik dan privat API dalam variabel lingkungan:
TURNKEY_API_PUBLIC_KEY="your_turnkey_api_public_key"TURNKEY_API_PRIVATE_KEY="your_turnkey_api_private_key"
3. Kunci Dompet Turnkey
Dari menu utama, navigasi ke "Wallets" dan klik "Create Private Key".
Kita akan membuat kunci privat ED25519 baru dengan tipe alamat aset "Solana":
Turnkey Wallets
Klik "Continue" dan kemudian "Approve".
Dari halaman dompet Anda, Anda akan melihat kunci privat baru Anda. Klik untuk melihat detailnya. Anda perlu menyalin "Private key ID" dan "Address" dompet. Simpan ke variabel environment:
TURNKEY_PRIVATE_KEY_ID="your_private_key_id" #7936...TURNKEY_PUBLIC_KEY="your_solana_address" # 4gBe...
Turnkey Wallet Details
Anda perlu mendanai dompet dengan SOL untuk membayar biaya transaksi.
Konfigurasi Variabel Environment
Anda sekarang harus memiliki variabel environment berikut:
# .env fileTURNKEY_ORGANIZATION_ID="your_organization_id"TURNKEY_API_PUBLIC_KEY="your_turnkey_api_public_key"TURNKEY_API_PRIVATE_KEY="your_turnkey_api_private_key"TURNKEY_PRIVATE_KEY_ID="your_private_key_id"TURNKEY_PUBLIC_KEY="your_solana_public_key"
Lihat repositori Kora untuk file
.env.example lengkap.
Untuk dukungan dengan Turnkey, lihat dokumentasi Turnkey.
Konfigurasi Signer.toml
Variabel yang diperlukan:
name- Nama signertype- Tipe signer (harusturnkey)api_public_key_env- Variabel environment yang berisi kunci publik API Turnkeyapi_private_key_env- Variabel environment yang berisi kunci privat API Turnkeyorganization_id_env- Variabel environment yang berisi ID organisasi Turnkeyprivate_key_id_env- Variabel environment yang berisi ID kunci privat Turnkeypublic_key_env- Variabel environment yang berisi kunci publik Turnkey
[[signers]]name = "my_turnkey_signer"type = "turnkey"api_public_key_env = "TURNKEY_API_PUBLIC_KEY"api_private_key_env = "TURNKEY_API_PRIVATE_KEY"organization_id_env = "TURNKEY_ORG_ID"private_key_id_env = "TURNKEY_PRIVATE_KEY_ID"public_key_env = "TURNKEY_PUBLIC_KEY"
Signer Privy
Privy menawarkan infrastruktur dompet tertanam dengan manajemen kunci yang aman untuk aplikasi Web3.
Prasyarat
Anda akan memerlukan Akun Privy untuk menggunakan signer Privy. Daftar di privy.io
Pengaturan
Anda akan memerlukan tiga kunci untuk menggunakan signer Privy:
- ID Aplikasi Privy
- Rahasia Aplikasi Privy
- ID Dompet Privy
Mari kita ambil dari Privy:
1. ID Aplikasi Privy
Dari dasbor Anda, pilih aplikasi yang ingin Anda gunakan untuk Kora (atau klik "+ Aplikasi baru" jika Anda belum memilikinya).
Pilih "Retrieve API Keys" dan klik "+ New Secret":
Privy Wallets
Salin "App ID" dan "App Secret" Anda lalu simpan dalam variabel environment:
PRIVY_APP_ID="your_privy_app_id"PRIVY_APP_SECRET="your_privy_app_secret"
2. Dompet Privy
Selanjutnya, kita perlu membuat dompet baru untuk Kora. Dari sidebar dasbor Anda klik "Wallets" di bawah "Wallet Infrastructure", dan pilih "New Wallet".
Pilih "Solana" sebagai blockchain dan klik "Save".
Klik pada dompet untuk melihat detailnya:
Privy Wallets
Salin "Wallet ID" dan simpan dalam variabel environment:
PRIVY_WALLET_ID="your_privy_wallet_id"
Anda perlu mengisi dompet dengan SOL untuk membayar biaya transaksi.
Konfigurasi Variabel Environment
Anda sekarang harus memiliki variabel environment berikut:
# .env filePRIVY_APP_ID="your_privy_app_id"PRIVY_APP_SECRET="your_privy_app_secret"PRIVY_WALLET_ID="your_wallet_id"
Lihat repositori Kora untuk file
.env.example lengkap.
Untuk dukungan dengan Privy, lihat dokumentasi Privy.
Konfigurasi Signer.toml
Variabel yang diperlukan:
name- Nama signertype- Jenis signer (harusprivy)app_id_env- Variabel environment yang berisi ID aplikasi Privyapp_secret_env- Variabel environment yang berisi rahasia aplikasi Privywallet_id_env- Variabel environment yang berisi ID dompet Privy
[[signers]]name = "my_privy_signer"type = "privy"app_id_env = "PRIVY_APP_ID"app_secret_env = "PRIVY_APP_SECRET"wallet_id_env = "PRIVY_WALLET_ID"
Tanpa Penandatangan
Jika tidak ada penandatangan yang dikonfigurasi, Kora akan menampilkan error.
Jika Anda ingin menjalankan Kora tanpa penandatangan, Anda dapat menjalankannya
dengan flag --no-signer:
kora --config path/to/kora.toml rpc start --no-signer
Perhatikan bahwa ini akan membatasi node Anda untuk hanya memproses permintaan yang tidak memerlukan penandatangan.
Pemecahan Masalah
Referensi Cepat
| Pesan Error | Jenis Penandatangan | Solusi Cepat |
|---|---|---|
| "At least one signer must be configured" | Apa pun | Tambahkan setidaknya satu penandatangan ke konfigurasi |
| "Failed to read config file" | Apa pun | Periksa jalur file dan kontennya |
| "Failed to parse signers config TOML" | Apa pun | Periksa format file dan konten penandatangan |
| "Duplicate signer name" | Apa pun | Pastikan setiap penandatangan memiliki nama unik di konfigurasi |
| "Invalid base58 string" | Kunci Privat | Periksa format kunci, tidak ada spasi ekstra |
| "Invalid private key length" | Kunci Privat | Gunakan kunci Solana 64-byte yang lengkap |
| "Turnkey {key} required" | Turnkey | Atur TURNKEY_{key} |
| "Privy {key} required" | Privy | Atur PRIVY_{key} |
| "Vault {key} required" | Vault | Atur VAULT_{key} |
| "Failed to create Vault client" | Vault | Verifikasi kredensial Vault |
| "Failed to sign with [service]" | Apa pun | Periksa status layanan & kredensial & batas kecepatan |
| "Signer pool not initialized" | Multi-Penandatangan | Periksa jalur dan format signers.toml |
| "Cannot create empty signer pool" | Multi-Penandatangan | Tambahkan setidaknya satu penandatangan ke konfigurasi |
| "Signer with pubkey ... not found" | Multi-Penandatangan | Periksa petunjuk penandatangan sesuai dengan yang dikonfigurasi |
| "Signers configuration is required unless using --no-load-signer" | Apa pun | Tambahkan file konfigurasi penandatangan |
Tips Debugging Umum
Aktifkan Logging Verbose
Tambahkan logging terperinci untuk mendiagnosis masalah:
RUST_LOG=debug kora rpc --with-turnkey-signer
Keamanan & Praktik Terbaik
Keamanan Umum
- Gunakan keypair khusus untuk Kora (jangan gunakan ulang dompet pribadi)
- Hanya isi dengan SOL yang Anda bersedia gunakan untuk biaya
- Pertahankan saldo operasional minimal dengan pemantauan dan pengisian otomatis
- Terapkan pemantauan dan peringatan untuk aktivitas yang tidak biasa
- Semua private key dan API key harus disimpan dalam variabel environment atau sistem manajemen secrets (Railway secrets, AWS Secrets Manager, dll.)
Menentukan Signer (Sisi Klien)
Klien dapat menentukan signer yang diinginkan untuk konsistensi di seluruh operasi yang terkait:
// Fetch the signers by calling getPayerSignerconst { signer, payment_destination } = await client.getPayerSigner();console.log(signer, payment_destination);// Estimate with specific signerconst estimate = await client.estimateTransactionFee({transaction: tx,signer_key: signer // Public key of preferred signer (one of the signers in the signer pool)});// Sign with same signerconst signed = await client.signTransaction({transaction: tx,signer_key: signer // Same signer for consistency});
Tanpa kunci signer, strategi yang dikonfigurasi menentukan pemilihan signer. Penting untuk dicatat bahwa kunci harus konsisten di seluruh panggilan yang terkait dengan transaksi yang sama (misalnya, jika Anda membuat transaksi dengan kunci signer yang ditentukan, Anda harus menggunakan kunci signer yang sama untuk semua panggilan terkait).
Is this page helpful?