Paradigm 투자이고, 솔라나 파운더 야나톨리 및 솔라나 진영에서도 꾸준히 밀어주고 있는 퍼프입니다. 제가 계속 퍼프 작업하는 이유는 원래 비트매매만 하기도 했고, 그렇게 하지 않았다면 트라도어, 아반티스, 아스터, 베이스드 초기 기회를 절대 잡지 못했을 거란걸 알기 때문입니다.
물론 지금은 수수료만 태우는 시대는 이미 지난지 오래입니다. 최근에는 볼트 플레이, 비트 매매, 펀딩비 매매 등 각자에게 맞는 전략을 고도화하면서 손실은 최소화하고, 동시에 수익까지 노리는 방향이 가장 좋습니다.
Phoenix Trade (Solana perp DEX) momentum scalper를 TypeScript로 만들어줘.
# 사양
- REST: https://perp-api.phoenix.trade
- WS: wss://perp-api.phoenix.trade/v1/ws
- SDK: @ellipsis-labs/rise (npm)
- Fee: maker 0.5bps, taker 3.5bps
- Round-trip cost: 7bps
# SDK 패턴
const client = createPhoenixClient({apiUrl, rpcUrl, exchangeMetadata:{stream:false}});
await client.exchange.ready();
const packet = await client.orderPackets.buildMarketOrderPacket({symbol, side:Side.Bid, baseUnits});
const ix = await client.ixs.buildPlaceMarketOrder({authority, symbol, orderPacket:packet, traderPdaIndex:0});
# 함정 (꼭 지킬 것)
1. ix.accounts.role은 숫자 (web3.js v2): 0=RO, 1=W, 2=ROSigner, 3=WSigner
→ isSigner: role===2||role===3, isWritable: role===1||role===3
2. skipPreflight: true
3. BigInt JSON 직렬화 replacer 필요
4. trader state 경로: response.traders[0].positions (subaccounts X)
5. baseUnits는 market.baseLotsDecimals 기준
# 안전망 (필수)
- 내장 stop loss: 15초마다 collateralBalance 체크, -$100 시 position close + exit(0)
- 외부 watchdog: cron 2분마다 같은 체크 + systemctl stop
# 파일
scalper.ts, .env (chmod 600), systemd unit (template), watchdog.sh + cron
---
.env 템플릿 (직접 채움, 절대 공유 X):
PHOENIX_WALLET=<본인 public address>
PHOENIX_PRIVATE_KEY=<본인 base58 private key>
PHOENIX_API_URL=https://perp-api.phoenix.trade
PHOENIX_WS_URL=wss://perp-api.phoenix.trade/v1/ws
SOLANA_RPC=https://api.mainnet-beta.solana.com
---
보안 필수:
- .env chmod 600 + .gitignore
- 트레이딩 전용 wallet 격리
- Stop loss 잔고 10-30% 한도
- 초기 size $30 이하
- paper 모드 검증 후 LIVE 전환
가장 자주 실패하는 부분: AccountRole 숫자 매핑(string X), trader state JSON 경로, lot decimals.
독스 : https://docs.phoenix.trade/api
https://www.phoenix.trade/
프라이빗 참여 코드 : EG2XN4DV
