Laatst bijgewerkt: 22-08-2025
Wat is een ondertekenaar?
Een ondertekenaar is het cryptografische keypair dat uw Kora-node gebruikt om Solana-transacties te ondertekenen als de betaler van de kosten. Wanneer gebruikers transacties naar uw Kora-node sturen, valideert deze ze en ondertekent ze mee met de privésleutel van uw ondertekenaar om de SOL-transactiekosten te dekken.
Opmerking: Standaard worden tokenbetalingskosten naar het adres van de
ondertekenaar verzonden. U kunt echter een aparte payment_address in uw
kora.toml configureren om betalingen op een ander adres te ontvangen terwijl u
uw ondertekenaar gescheiden houdt. Zie de
Configuratiegids voor details.
Uw ondertekenaar-keypair heeft directe toegang tot uw SOL-gelden die worden gebruikt voor het betalen van transactiekosten. Bij compromittering kan een aanvaller:
- Uw SOL-saldo leegmaken
- Ongeautoriseerde transacties ondertekenen
- Uw paymaster-service verstoren
Ondertekenaarsconfiguratie
De Kora RPC CLI vereist een signer.toml die moet worden opgegeven via de
--signers-config-vlag. Het singer.toml-bestand stelt u in staat om de
ondertekenaar(s) en ondertekenaarconfiguratie voor uw node te configureren.
signer.toml heeft twee secties:
[signer_pool]- Configuratie voor de ondertekenaarspool[[signers]]- Configuratie voor elke ondertekenaar (minimaal één ondertekenaar is vereist, tenzij de--no-load-signer-vlag wordt gebruikt, die beperkte functionaliteit heeft)
[signer_pool]
De configuratie van de ondertekenaarspool specificeert kenmerken die specifiek zijn voor de ondertekenaarspool als geheel:
strategy- De selectiestrategie voor het kiezen van ondertekenaars. Beschikbare strategieën zijn:round_robin(standaard) - Cyclisch door ondertekenaars in volgorde.random- Ondertekenaars willekeurig selecteren.weighted- Ondertekenaars selecteren op basis van gewicht.
[[signers]]
Elke ondertekenaar is geconfigureerd met:
- een
name: een leesbare identificatie voor de ondertekenaar en moet uniek zijn binnen de ondertekenaar-pool - een optionele
weight: een getal dat het gewicht van de ondertekenaar specificeert alsstrategygelijk is aanweighted - een
typeen typespecifieke configuratie (zie Ondertekenaar-types)
Eén ondertekenaar is vereist, tenzij de --no-load-signer-vlag wordt gebruikt,
die beperkte functionaliteit heeft. Voor productie-implementaties wordt
aanbevolen om meerdere ondertekenaars te configureren voor verbeterde
betrouwbaarheid en prestaties.
Voorbeeld
Hier is een voorbeeld signers.toml-bestand dat een round-robin
ondertekenaar-pool definieert met drie ondertekenaars (opmerking: we behandelen
de verschillende ondertekenaar-types/configuraties in de volgende sectie):
[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
Omgevingsvariabelen
Stel omgevingsvariabelen in voor alle geconfigureerde ondertekenaars:
# 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"
Start Kora met Ondertekenaars-configuratie
kora --config path/to/kora.toml rpc start --signers-config path/to/signers.toml
Ondertekenaar-types
Kora ondersteunt vier hoofdondertekenaar-types, elk met verschillende beveiligings- en operationele kenmerken (en een optie zonder ondertekenaar voor beperkt testen):
- Privésleutel - eenvoudig, zelfbeheerd
- Turnkey - sleutelbeheerservice
- Privy - sleutelbeheerservice
- Vault - HashiCorp Vault-integratie
- Geen ondertekenaar - geen ondertekenaar (voor beperkt testen)
Privésleutel-ondertekenaar
De eenvoudigste aanpak - bewaar uw privésleutel rechtstreeks in omgevingsvariabelen of geef deze door via CLI-vlaggen. Kora accepteert privésleutels in drie formaten:
1. Base58-formaat (standaard)
Standaard Solana base58-gecodeerde privésleutel:
KORA_PRIVATE_KEY="5KKsLVU6TcbVDK4BS6K1DGDxnh4Q9xjYJ8XaDCG5t8ht..."
2. U8Array-formaat
Array van 64 bytes in JSON-formaat:
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. JSON-bestandspad
Pad naar een JSON-bestand dat het keypair bevat:
KORA_PRIVATE_KEY="/path/to/keypair.json"
Waarbij keypair.json het volgende bevat:
[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]
Nieuw Keypair Genereren
Je kunt een nieuw keypair aanmaken voor je Kora-node met behulp van de 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
Signer.toml Configuratie
Vereiste variabelen:
name- De naam van de signertype- Het type signer (moetmemoryzijn)private_key_env- De omgevingsvariabele die de private key bevat
[[signers]]name = "my_memory_signer"type = "memory"private_key_env = "KORA_PRIVATE_KEY" # (or your environment variable name)
Turnkey Signer
Turnkey biedt enterprise-grade sleutelbeheer met hardware security modules (HSM's) en beleidscontroles.
Vereisten
Je hebt een Turnkey Account nodig om de Turnkey signer te gebruiken. Registreer je op turnkey.com
Instellen
Je hebt vijf sleutels nodig om de Turnkey signer te gebruiken:
- Turnkey organisatie-ID
- Turnkey API publieke sleutel
- Turnkey API private sleutel
- Turnkey private sleutel ID
- Turnkey publieke sleutel
Laten we ze ophalen uit Turnkey:
1. Turnkey Organisatie
Klik op het gebruikersmenu rechtsboven in het Turnkey-dashboard en kopieer de organisatie-ID:
Turnkey Organisatie-ID
Sla de organisatie-ID op in een omgevingsvariabele:
TURNKEY_ORGANIZATION_ID="your_organization_id"
2. Turnkey API-sleutels
- Klik op het gebruikersmenu rechtsboven in het Turnkey-dashboard en klik op "Account Settings".
- Klik onder "API Keys" op "+ Create API Key".
- Selecteer "Generate API keys in-browser"
- Voer een naam in voor de API-sleutel en klik op "Continue"
- Bewaar de publieke en private sleutels en klik op "Approve"
Turnkey API-sleutels
Sla de publieke en private API-sleutels op in omgevingsvariabelen:
TURNKEY_API_PUBLIC_KEY="your_turnkey_api_public_key"TURNKEY_API_PRIVATE_KEY="your_turnkey_api_private_key"
3. Turnkey Wallet-sleutels
Navigeer vanuit het hoofdmenu naar "Wallets" en klik op "Create Private Key".
We gaan een nieuwe ED25519 private key aanmaken met het adrestype "Solana":
Turnkey Wallets
Klik op "Continue" en vervolgens op "Approve".
Op je wallets-pagina zou je nu je nieuwe private key moeten zien. Klik erop om de details te bekijken. Je moet de "Private key ID" en het wallet-"Address" kopiëren. Sla ze op als omgevingsvariabelen:
TURNKEY_PRIVATE_KEY_ID="your_private_key_id" #7936...TURNKEY_PUBLIC_KEY="your_solana_address" # 4gBe...
Turnkey Wallet Details
Je moet de wallet met SOL financieren om de transactiekosten te betalen.
Omgevingsvariabelen configureren
Je zou nu de volgende omgevingsvariabelen moeten hebben:
# .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"
Zie de Kora repository voor een
compleet .env.example bestand.
Voor ondersteuning met Turnkey, zie de Turnkey-documentatie.
Signer.toml-configuratie
Vereiste variabelen:
name- De naam van de signertype- Het type signer (moetturnkeyzijn)api_public_key_env- De omgevingsvariabele die de Turnkey API public key bevatapi_private_key_env- De omgevingsvariabele die de Turnkey API private key bevatorganization_id_env- De omgevingsvariabele die de Turnkey organization ID bevatprivate_key_id_env- De omgevingsvariabele die de Turnkey private key ID bevatpublic_key_env- De omgevingsvariabele die de Turnkey public key bevat
[[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"
Privy Signer
Privy biedt embedded wallet-infrastructuur met veilig sleutelbeheer voor Web3-applicaties.
Vereisten
Je hebt een Privy-account nodig om de Privy signer te gebruiken. Meld je aan op privy.io
Installatie
Je hebt drie sleutels nodig om de Privy signer te gebruiken:
- Privy App ID
- Privy App Secret
- Privy Wallet ID
Laten we ze ophalen van Privy:
1. Privy App ID
Selecteer vanuit je dashboard de applicatie die je wilt gebruiken voor Kora (of klik op "+ New app" als je er nog geen hebt).
Selecteer "Retrieve API Keys" en klik op "+ New Secret":
Privy Wallets
Kopieer je "App ID" en "App Secret" en bewaar ze in omgevingsvariabelen:
PRIVY_APP_ID="your_privy_app_id"PRIVY_APP_SECRET="your_privy_app_secret"
2. Privy Wallet
Vervolgens moeten we een nieuwe wallet aanmaken voor Kora. Klik in de zijbalk van je dashboard op "Wallets" onder "Wallet Infrastructure" en selecteer "New Wallet".
Selecteer "Solana" als de blockchain en klik op "Save".
Klik op de wallet om de details te bekijken:
Privy Wallets
Kopieer de "Wallet ID" en bewaar deze in omgevingsvariabelen:
PRIVY_WALLET_ID="your_privy_wallet_id"
Je moet de wallet financieren met SOL om transactiekosten te betalen.
Omgevingsvariabelen Configureren
Je zou nu de volgende omgevingsvariabelen moeten hebben:
# .env filePRIVY_APP_ID="your_privy_app_id"PRIVY_APP_SECRET="your_privy_app_secret"PRIVY_WALLET_ID="your_wallet_id"
Zie de Kora repository voor een
complet .env.example bestand.
Voor ondersteuning met Privy, zie de Privy documentatie.
Signer.toml Configuratie
Vereiste variabelen:
name- De naam van de signertype- Het type signer (moetprivyzijn)app_id_env- De omgevingsvariabele die de Privy app ID bevatapp_secret_env- De omgevingsvariabele die het Privy app secret bevatwallet_id_env- De omgevingsvariabele die de Privy wallet ID bevat
[[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"
Geen Signer
Als er geen signer is geconfigureerd, zal Kora een fout genereren. Als je Kora
wilt uitvoeren zonder een signer, kun je het uitvoeren met de --no-signer
vlag:
kora --config path/to/kora.toml rpc start --no-signer
Let op dat dit je node beperkt tot het verwerken van alleen verzoeken die geen signer vereisen.
Probleemoplossing
Snelle Referentie
| Foutmelding | Signer Type | Snelle Oplossing |
|---|---|---|
| "At least one signer must be configured" | Willekeurig | Voeg minstens één signer toe aan de configuratie |
| "Failed to read config file" | Willekeurig | Controleer bestandspad en inhoud |
| "Failed to parse signers config TOML" | Willekeurig | Controleer bestandsformaat en signer-inhoud |
| "Duplicate signer name" | Willekeurig | Zorg dat elke signer uniek is benoemd in de configuratie |
| "Invalid base58 string" | Private Key | Controleer sleutelformaat, geen extra spaties |
| "Invalid private key length" | Private Key | Gebruik volledige 64-byte Solana-sleutel |
| "Turnkey {key} required" | Turnkey | Stel TURNKEY_{key} in |
| "Privy {key} required" | Privy | Stel PRIVY_{key} in |
| "Vault {key} required" | Vault | Stel VAULT_{key} in |
| "Failed to create Vault client" | Vault | Verifieer Vault-inloggegevens |
| "Failed to sign with [service]" | Willekeurig | Controleer servicestatus, inloggegevens en tarieflimieten |
| "Signer pool not initialized" | Multi-Signer | Controleer signers.toml pad en formaat |
| "Cannot create empty signer pool" | Multi-Signer | Voeg minstens één signer toe aan de configuratie |
| "Signer with pubkey ... not found" | Multi-Signer | Controleer of signer-hint overeenkomt met geconfigureerde signers |
| "Signers configuration is required unless using --no-load-signer" | Willekeurig | Voeg een signers-configuratiebestand toe |
Algemene Debuggingtips
Gedetailleerde logging inschakelen
Voeg gedetailleerde logging toe om problemen te diagnosticeren:
RUST_LOG=debug kora rpc --with-turnkey-signer
Beveiliging & Best Practices
Algemene beveiliging
- Gebruik toegewijde keypairs voor Kora (hergebruik geen persoonlijke wallets)
- Financier alleen met SOL die je bereid bent te besteden aan vergoedingen
- Handhaaf een minimaal operationeel saldo met geautomatiseerde monitoring en aanvullingen
- Implementeer monitoring en waarschuwingen voor ongebruikelijke activiteit
- Alle private keys en API-sleutels moeten worden opgeslagen in omgevingsvariabelen of secrets management-systemen (Railway secrets, AWS Secrets Manager, etc.)
Een signer specificeren (client-side)
Clients kunnen een voorkeursondertekenaar specificeren voor consistentie bij gerelateerde operaties:
// 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});
Zonder signer keys bepaalt de geconfigureerde strategie de selectie van de ondertekenaar. Het is belangrijk op te merken dat keys consistent moeten zijn over alle aanroepen die gerelateerd zijn aan dezelfde transactie (bijvoorbeeld, als je een transactie genereert met een gespecificeerde signer key, moet je dezelfde signer key gebruiken voor alle gerelateerde aanroepen).
Is this page helpful?