manifast-platform/scripts · 항목·플래그 추가 시 app/scripts/data.ts의 variants(옵션별 차이)와 플랫폼 scripts/README.md를 같이 맞춥니다.목록 (6)
지갑 시크릿 → JSON 배열
wallet-secret-to-json.tsMetaMask 등 base58 개인키를 Railway WALLET_SECRET_KEY용 숫자 배열 JSON으로 출력. load-test 설정 전 1회.
명령 옵션별 차이
npx tsx scripts/wallet-secret-to-json.ts "paste-base58-key-here"
하는 일 · 인자로 받은 base58 → stdout에 [1,2,...] 한 줄 출력
다른 점 · 기본. 출력 전체를 Railway load-test Variables WALLET_SECRET_KEY에 붙임
npx tsx scripts/wallet-secret-to-json.ts paste-base58-key-here
하는 일 · 따옴표 없이 인자만 넘긴 경우 (키에 특수문자 없으면)
다른 점 · PowerShell에서 < > 리다이렉트 문자를 쓰면 깨짐 — 따옴표·붙여넣기만
- manifast-platform 루트에서 실행
- ts-node -e + bs58 한줄은 ESM에서 실패할 수 있음 → 이 스크립트 사용
- WALLET_SECRET_KEY는 load-test 전용(UI 주문은 Phantom). 키·출력 커밋 금지
realtime SSE 접속 부하
load-sse.ts가상 탭 N개 × SSE(기본 Online만, --full-tab이면 Trade UI 전체). realtime·Redis 실측. Railway load-sse.
명령 옵션별 차이
npx tsx scripts/load-sse.ts --count 500 --full-tab --ramp 100/2s
하는 일 · 2초마다 100유저 입장 × SSE 5 ≈ 500유저·2500연결, 1분 유지
다른 점 · 동시 몰림 완화. env LOAD_SSE_RAMP=100/2s 동일
npx tsx scripts/load-sse.ts --count 50 --full-tab --market sol-usdc
하는 일 · 탭 50 × SSE 5(presence·호가×2·체결·미체결) ≈ 250연결, 1분 유지
다른 점 · 실제 Trade 화면과 가장 가깝다. count=가상 유저 수
npx tsx scripts/load-sse.ts --count 100 --hold 60
하는 일 · presence만 100연결
다른 점 · Online만. full-tab보다 가볍다
npx tsx scripts/load-sse.ts --count 50 --full-tab --no-open-orders
하는 일 · 지갑 미연결 유저: presence+호가×2+체결 (탭당 4 SSE)
다른 점 · 미체결 SSE 제외
npx tsx scripts/load-sse.ts --count 10 --dry-run
하는 일 · URL·모드만 출력
다른 점 · 연결 없음
- 실측: railway up --service load-sse · LOAD_SSE_FULL_TAB=1 · LOAD_SSE_RAMP=100/2s
- count=가상 탭 수. full-tab raw SSE ≈ count×5
- dev만 — presence마다 daily_visitors +1. 테스트 후 realtime 재시작 권장
서버 지갑 동시 주문 부하
load-orders.tsexecuteServerPlaceOrder를 count번 Promise.allSettled. HTTP load-test 서버 없음. 실측은 Railway load-test 기동.
명령 옵션별 차이
npx tsx scripts/load-orders.ts --count 10 --market sol-usdc
하는 일 · SOL/USDC 소액 limit 10건 동시 전송
다른 점 · 기본 마켓. Railway에선 LOAD_TEST_COUNT/MARKET env로 동일
npx tsx scripts/load-orders.ts --count 50 --market dogek-sol
하는 일 · DOGEK/SOL 소액 limit 50건 동시 전송
다른 점 · 마켓 옵션만 다름. 주문 세트는 dogek 가격대
npx tsx scripts/load-orders.ts --count 10 --dry-run
하는 일 · 전송 없이 순환 파라미터만 출력
다른 점 · 체인·지갑 안 씀. 건수·마켓 확인용
- 실측: railway up --service load-test (로컬 RPS는 참고만)
- WALLET_SECRET_KEY · SOLANA_RPC_URL 필수 (dry-run 제외). Railway load-test에 설정
- 상한 MAX_CONCURRENT_ORDERS 기본 1000
- 키 변환은 위 wallet-secret-to-json.ts (s0600) 참고
fills 페어 라벨 보강
label-fills.ts이미 있는 fills에 marketId/pair/base/quote를 일괄 $set. 구 문서에 페어 구분이 없을 때.
컬렉션:
fills명령 옵션별 차이
npx tsx scripts/label-fills.ts
하는 일 · LISTED_MARKETS 전 마켓 fills에 페어 라벨 upsert
다른 점 · 체인·삭제는 안 함. 필드만 채움. MONGO_URL로 로컬/dev 선택
- Railway dev: MONGO_URL에 공개 프록시 URL 넣고 실행
마켓 Mongo 데이터 삭제
delete-market-data.ts테스트 페어(예: sol-usdc)의 fills · candle_bars · 레거시 candle_series만 지운다. LISTED_MARKETS 코드 제거는 별도.
컬렉션:
fillscandle_barscandle_series명령 옵션별 차이
npx tsx scripts/delete-market-data.ts --market sol-usdc --dry-run
하는 일 · 해당 마켓 문서 건수만 출력
다른 점 · DB에서 아무것도 지우지 않음 — 미리보기 전용
npx tsx scripts/delete-market-data.ts --market sol-usdc --yes
하는 일 · fills / candle_bars / candle_series 실제 삭제
다른 점 · --dry-run과 달리 데이터가 사라짐. --yes 없으면 실행 거부
- marketId 또는 마켓 주소로 필터
- npm run delete:market -- --market sol-usdc --dry-run
체결·캔들 과거 백필
backfill-fills.tsManifest 마켓 서명을 페이지하며 fills upsert하고, 필요하면 candle_bars OHLC를 재구성한다.
컬렉션:
fillscandle_bars명령 옵션별 차이
npx tsx scripts/backfill-fills.ts --market dogek-sol
하는 일 · 체인에서 체결 백필 → 이어서 candle_bars를 fills 시간순으로 재구성
다른 점 · 기본값. 체인도 보고 캔들도 채움 (가장 완전한 한 방)
npx tsx scripts/backfill-fills.ts --market dogek-sol --candles-only
하는 일 · 체인 조회 없이, 이미 Mongo에 있는 fills만으로 candle_bars 재구성
다른 점 · RPC/서명 페이지 안 함. fills는 그대로 두고 캔들만 다시 맞춤
npx tsx scripts/backfill-fills.ts --market dogek-sol --no-candles
하는 일 · 체인에서 fills만 upsert
다른 점 · candle_bars는 건드리지 않음. 체결만 넣고 차트는 나중에 할 때
- 추가: --max-sigs N (스모크), --dry-run (쓰기 스킵)
- 커서: .backfill-fills-<marketId>.cursor.json
- SOLANA_RPC_URL · MONGO_URL — candles-only는 Mongo만으로도 가능
- npm run backfill:fills -- --market dogek-sol