Keychain

Solana Keychain은 여러 키 관리 백엔드에 걸쳐 Solana 트랜잭션에 서명하기 위한 통합 인터페이스를 제공합니다. 인메모리 키로 로컬에서 개발한 후, 서명 코드를 재작성하지 않고도 엔터프라이즈 키 관리, 클라우드 HSM, 또는 매니지드 지갑 서비스로 전환할 수 있습니다.

Keychain을 사용해야 하는 이유는?

  • 단일 인터페이스: 모든 백엔드에서 SolanaSigner 기본 인터페이스 하나를 사용하며, 백엔드마다 서명, 재작성 후 서명, 서명 후 브로드캐스트 중 하나의 기능 제공
  • 백엔드 교체: 설정을 통해 키 관리 공급자 변경 가능. 새 백엔드의 기능이 다른 경우 (Crossmint 및 Fordefi 네이티브 모드)에만 호출 지점 변경 필요
  • 필요한 만큼만 사용: Rust 기능 플래그, 백엔드별 npm 패키지, Python extras, 백엔드별 Go 모듈을 통해 필요한 백엔드만 포함
  • 감사 완료: Rust, TypeScript, Python, Go는 OtterSec의 감사를 받았으며(선택 적용 Ledger 백엔드는 범위에서 제외), 이전에 Accretion 감사에서 Rust와 TypeScript를 다룬 바 있습니다. 자세한 내용은 감사 현황을 참조하세요.

아키텍처

  • 언어: Rust, TypeScript, Python, Go (동등한 수준으로 지원, Ledger 백엔드는 Rust 전용)
  • 인터페이스: SolanaSigner 기본 인터페이스(pubkey, sign_message, is_available) 및 백엔드당 정확히 하나의 기능: TransactionSigner, ModifyingSigner 또는 SendingSigner
  • 백엔드: Memory, Vault, AWS KMS, GCP KMS, Privy, Turnkey, Fireblocks, CDP, Crossmint, Dfns, Openfort, Para, Utila, Fordefi, Ledger (Rust 전용, 선택 적용, 감사 미실시)
  • 호환성: @solana/kit 및 @solana/signers 8.1+ (TypeScript) | sdk-v2 / sdk-v3 / sdk-v4 기능을 통한 solana-sdk 2.x, 3.x 또는 4.x (Rust, v1 트랜잭션은 sdk-v4 필요) | solders (Python) | solana-go v2 (Go)

지원되는 백엔드

백엔드는 로컬 개발, 자체 호스팅 및 클라우드 키 관리, 매니지드 또는 MPC 지갑 서비스를 아우릅니다. 커스터디 모델을 비교하고 적합한 백엔드를 선택하려면 백엔드 선택하기를 참고하세요.

백엔드사용 사례RustTypeScriptPythonGo
Memory개발, 테스트✓✓✓✓
HashiCorp Vault자체 호스팅 키 관리✓✓✓✓
AWS KMS클라우드 네이티브 (AWS)✓✓✓✓
GCP KMS클라우드 네이티브 (GCP)✓✓✓✓
Privy임베디드 지갑✓✓✓✓
Turnkey비수탁형 키 관리✓✓✓✓
Fireblocks기관 수탁✓✓✓✓
CDPCoinbase 개발자 플랫폼✓✓✓✓
CrossmintCrossmint 매니지드 지갑✓✓✓✓
DfnsDfns 지갑 인프라✓✓✓✓
OpenfortOpenfort 백엔드 지갑✓✓✓✓
ParaPara MPC 지갑✓✓✓✓
UtilaUtila MPC 수탁✓✓✓✓
FordefiFordefi MPC 커스터디✓✓✓✓
Ledger하드웨어 지갑 (선택 적용, 감사 미실시)✓

빠른 시작

Rust

Rust 크레이트를 설치하세요:

cargo add solana-keychain

기본 사용법:

use solana_keychain::{Signer, SolanaSigner};
// Create a signer from any backend
let signer = Signer::from_memory("base58_private_key")?;
let pubkey = signer.pubkey();
// Transaction signing is a capability; `tx` is a VersionedTransaction
if let Some(tx_signer) = signer.as_transaction_signer() {
let result = tx_signer.sign_transaction(&mut tx).await?;
}
// Or let the umbrella route any backend shape and supply the RPC hop yourself
let signature = signer
.sign_and_send(&mut tx, |encoded| async move { broadcast(encoded).await })
.await?;

TypeScript

TypeScript 패키지를 설치하세요:

pnpm add @solana/keychain

기본 사용법:

import { createKeychainSigner } from "@solana/keychain";
import { signTransactionWithSigners } from "@solana/signers";
// Create any signer via the unified factory
const signer = await createKeychainSigner({
backend: "vault",
vaultAddr: "https://vault.example.com:8200",
vaultToken: "hvs.xxxxx",
keyName: "my-solana-key",
publicKey: "base58_public_key"
});
// Sign an already-compiled transaction
const signedTx = await signTransactionWithSigners(
[signer],
compiledTransaction
);

Kit 클라이언트에 Keychain 서명자를 payer 또는 identity로 설치하려면 @solana/keychain-kit-plugin을 사용하세요 (Crossmint 및 Fordefi 네이티브 모드는 트랜잭션을 재작성하므로 제외됩니다).

Python

패키지를 설치하세요(무거운 백엔드는 extras로 제공되며, 예를 들어 solana-keychain[aws-kms]):

pip install solana-keychain

기본 사용법:

import os
from solana_keychain import VaultSignerConfig, create_vault_signer
signer = await create_vault_signer(
VaultSignerConfig(
api_base_url="https://vault.example.com:8200",
token=os.environ["VAULT_TOKEN"],
key_name="my-solana-key",
public_key="base58_public_key",
)
)
# tx is a solders VersionedTransaction
result = await signer.sign_transaction(tx)

Go

각 백엔드는 별도의 Go 모듈이므로 임포트하는 백엔드만 가져오게 됩니다:

go get github.com/solana-foundation/solana-keychain/go/signers/vault/v2@latest

기본 사용법:

import "github.com/solana-foundation/solana-keychain/go/signers/vault/v2"
signer, err := vault.New(vault.Config{
VaultAddr: "https://vault.example.com:8200",
Token: os.Getenv("VAULT_TOKEN"),
KeyName: "my-solana-key",
Pubkey: "base58_public_key",
})
if err != nil {
return err
}
// tx is a *solana.Transaction from solana-go v2
res, err := signer.SignTransaction(ctx, tx)

다음 단계

소스

Solana Foundation이 구축하고 유지 관리합니다. MIT 라이선스 하에 배포됩니다.

Is this page helpful?

목차

페이지 편집