빠른 시작
5분 이내에 Savitri 로컬 노드를 시작하고 첫 번째 트랜잭션을 전송하세요.
1. 키 생성
# Generate a node keypair
cargo run -p savitri-sdk --bin key_generator
이 명령은 ed25519 키 쌍을 생성합니다:
- 개인 키: 16진수 64자 (32바이트) -- 비밀로 유지하세요
- 공개 키: 16진수 64자 (32바이트) -- 이것이 주소입니다
2. Lightnode 시작
cargo run -p savitri-lightnode --bin lightnode -- \
--listen-port 4001 \
--tx-interval-secs 2 \
--block-interval-secs 10 \
--max-block-txs 32
lightnode는 포트 4001 (P2P)과 8545 (RPC)에서 수신 대기를 시작합니다.
3. 노드 상태 확인
curl -X POST http://localhost:8545/rpc \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "savitri_health",
"params": [],
"id": 1
}'
응답:
{
"jsonrpc": "2.0",
"result": {
"status": "ok",
"service": "savitri-rpc",
"mode": "lightnode"
},
"id": 1
}
4. 블록 높이 조회
curl -X POST http://localhost:8545/rpc \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "savitri_blockNumber",
"params": [],
"id": 2
}'
5. 계정 잔액 확인
curl -X POST http://localhost:8545/rpc \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "savitri_getAccount",
"params": ["YOUR_ADDRESS_HEX_64_CHARS"],
"id": 3
}'
6. 테스트넷 토큰 요청 (파우셋)
테스트넷에서 무료 SAVT 토큰을 요청합니다:
curl -X POST http://localhost:8545/rpc \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "savitri_faucetClaim",
"params": ["YOUR_ADDRESS_HEX_64_CHARS"],
"id": 4
}'
응답:
{
"jsonrpc": "2.0",
"result": {
"result": {
"tx_hash": "0x...",
"amount": "5000000000000000000"
}
},
"id": 4
}
파우셋은 요청당 5 SAVT를 제공하며 24시간 대기 시간이 있습니다.
7. SDK 사용법 (Rust)
Cargo.toml에 추가:
[dependencies]
savitri-sdk = { path = "../savitri-sdk" }
tokio = { version = "1", features = ["full"] }
use savitri_sdk::{RpcClient, Wallet, TransactionBuilder};
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let client = RpcClient::from_url("http://localhost:8545")?;
// Health check
let health = client.health().await?;
println!("Node mode: {}", health.mode);
// Block height
let height = client.get_block_number().await?;
println!("Block height: {}", height);
// Create wallet and check balance
let wallet = Wallet::new();
let account = client.get_account(wallet.address()).await?;
println!("Address: {}", wallet.address());
println!("Balance: {}", account.balance);
Ok(())
}
다음 단계
- SDK 참조 -- SDK 전체 문서
- RPC API 참조 -- 모든 JSON-RPC 메서드
- 트랜잭션 전송 -- 트랜잭션 구성, 서명 및 전송