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/signers8.1+ (TypeScript) |sdk-v2/sdk-v3/sdk-v4기능을 통한solana-sdk2.x, 3.x 또는 4.x (Rust, v1 트랜잭션은sdk-v4필요) |solders(Python) |solana-gov2 (Go)
지원되는 백엔드
백엔드는 로컬 개발, 자체 호스팅 및 클라우드 키 관리, 매니지드 또는 MPC 지갑 서비스를 아우릅니다. 커스터디 모델을 비교하고 적합한 백엔드를 선택하려면 백엔드 선택하기를 참고하세요.
| 백엔드 | 사용 사례 | Rust | TypeScript | Python | Go |
|---|---|---|---|---|---|
| Memory | 개발, 테스트 | ✓ | ✓ | ✓ | ✓ |
| HashiCorp Vault | 자체 호스팅 키 관리 | ✓ | ✓ | ✓ | ✓ |
| AWS KMS | 클라우드 네이티브 (AWS) | ✓ | ✓ | ✓ | ✓ |
| GCP KMS | 클라우드 네이티브 (GCP) | ✓ | ✓ | ✓ | ✓ |
| Privy | 임베디드 지갑 | ✓ | ✓ | ✓ | ✓ |
| Turnkey | 비수탁형 키 관리 | ✓ | ✓ | ✓ | ✓ |
| Fireblocks | 기관 수탁 | ✓ | ✓ | ✓ | ✓ |
| CDP | Coinbase 개발자 플랫폼 | ✓ | ✓ | ✓ | ✓ |
| Crossmint | Crossmint 매니지드 지갑 | ✓ | ✓ | ✓ | ✓ |
| Dfns | Dfns 지갑 인프라 | ✓ | ✓ | ✓ | ✓ |
| Openfort | Openfort 백엔드 지갑 | ✓ | ✓ | ✓ | ✓ |
| Para | Para MPC 지갑 | ✓ | ✓ | ✓ | ✓ |
| Utila | Utila MPC 수탁 | ✓ | ✓ | ✓ | ✓ |
| Fordefi | Fordefi MPC 커스터디 | ✓ | ✓ | ✓ | ✓ |
| Ledger | 하드웨어 지갑 (선택 적용, 감사 미실시) | ✓ |
빠른 시작
Rust
Rust 크레이트를 설치하세요:
cargo add solana-keychain
기본 사용법:
use solana_keychain::{Signer, SolanaSigner};// Create a signer from any backendlet signer = Signer::from_memory("base58_private_key")?;let pubkey = signer.pubkey();// Transaction signing is a capability; `tx` is a VersionedTransactionif 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 yourselflet 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 factoryconst 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 transactionconst signedTx = await signTransactionWithSigners([signer],compiledTransaction);
- TypeScript 가이드 -
@solana/keychain패키지 - npm 패키지 - npm 패키지
Kit 클라이언트에 Keychain 서명자를
payer 또는 identity로 설치하려면 @solana/keychain-kit-plugin을 사용하세요
(Crossmint 및 Fordefi 네이티브 모드는 트랜잭션을 재작성하므로 제외됩니다).
Python
패키지를 설치하세요(무거운 백엔드는 extras로 제공되며, 예를 들어
solana-keychain[aws-kms]):
pip install solana-keychain
기본 사용법:
import osfrom solana_keychain import VaultSignerConfig, create_vault_signersigner = 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 VersionedTransactionresult = await signer.sign_transaction(tx)
- Python 가이드 - 전체 설치, extras 및 백엔드 구성
- PyPI - Python 패키지
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 v2res, err := signer.SignTransaction(ctx, tx)
- Go 가이드 - 모듈, 기능 및 백엔드 구성
- pkg.go.dev - Go 레퍼런스
다음 단계
Rust 가이드
크레이트를 설치하고 각 백엔드를 구성하세요.
TypeScript 가이드
패키지를 설치하고 각 백엔드를 구성하세요.
Python 가이드
패키지와 extras를 설치하고 각 백엔드를 구성하세요.
Go 가이드
백엔드별 모듈을 추가하고 각 백엔드를 구성하세요.
백엔드 선택
커스터디 모델을 비교하고 적합한 서명 백엔드를 선택하세요.
프로덕션 모범 사례
서명을 안전하게 운영하세요: 핫/콜드 분리, 키 교체, 모니터링.
커스텀 서명자 추가
새로운 키 관리 백엔드를 통합하세요.
소스
Solana Foundation이 구축하고 유지 관리합니다. MIT 라이선스 하에 배포됩니다.
Is this page helpful?