> ## Documentation Index
> Fetch the complete documentation index at: https://www.helius.dev/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# 사전 처리된 거래에서 거래하기

> 프로그램의 Solana 트랜잭션이 처리된 커밋 수준에 도달하기 전에 preprocessedSubscribe로 관찰하세요.

`preprocessedSubscribe`는 서명된 트랜잭션이 `processed` 커밋 수준에 도달하기 전에 스트리밍합니다. 검증자에 도착하는 대로 오류를 복구하지 않고도 손쉽게 해독된 형태로 전송됩니다.

이 가이드는 거래 프로그램을 사전 실행 모니터링하고 피드를 중복 제거하며 서버의 백프레셔 제한 범위 내에 머무르고 처리된 데이터를 기반으로 조정하여 실행하는 방법을 설명합니다.

<Tip>
  [사전 처리된 거래](/docs/ko/preprocessed-transactions/overview)는 모든 유료 플랜에서 사용 가능하며, 메시지당 0.1 크레딧이 소모되고 API 키당 최대 10개의 동시 연결이 가능합니다.
</Tip>

## 목표에 맞게 구독 범위 설정하기

필터링되지 않은 스트림은 없습니다: `accountInclude`와 `accountRequired`는 최소한 하나의 계정을 지정해야 합니다. 거래 모니터의 경우 거래 대상 프로그램을 포함하고, 그렇지 않으면 비용이 발생할 잡음을 제외하십시오:

```json theme={"system"}
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "preprocessedSubscribe",
  "params": {
    "accountInclude": ["JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4"],
    "accountExclude": ["Vote111111111111111111111111111111111111111"],
    "accountRequired": []
  }
}
```

필터는 AND로 결합되며, 각 목록은 최대 5,000개의 주소를 받을 수 있습니다. Helius는 서버 측에서 주소 조회 테이블을 해결하므로 ALT를 통해 로드된 계정도 일치합니다. 특정 지갑이 프로그램과 상호작용하는 것을 관찰하려면 둘 다 `accountRequired` 필드에 넣으세요.

## 프레임 해독 및 서명별 중복 제거

알림은 73바이트의 접두사를 가진 바이너리 프레임으로 도착하고 그 다음에 bincode로 직렬화된 트랜잭션이 옵니다. 접두사에 서명이 들어 있어 본문을 해독하지 않고도 중복을 제거할 수 있습니다. 스트림은 여러 사전 실행 소스를 집계하며, 동일한 트랜잭션이 여러 번 도착할 수 있습니다:

```javascript monitor.js theme={"system"}
const WebSocket = require('ws');
const bs58module = require('bs58');
const bs58 = bs58module.default ?? bs58module;

const ws = new WebSocket('wss://beta.helius-rpc.com/?api-key=YOUR_API_KEY');
const seen = new Set(); // rotate or expire entries in production
const queue = [];       // decode off the receive path; see next step

ws.on('open', () => {
  ws.send(JSON.stringify({
    jsonrpc: '2.0',
    id: 1,
    method: 'preprocessedSubscribe',
    params: {
      accountInclude: ['JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4'],
      accountExclude: ['Vote111111111111111111111111111111111111111'],
      accountRequired: []
    }
  }));
  setInterval(() => ws.ping(), 30_000);
});

ws.on('message', (data, isBinary) => {
  if (!isBinary) {
    const msg = JSON.parse(data.toString());
    if (msg.id === 1) console.log('Subscribed, ID:', msg.result);
    return;
  }

  // version (u8) | slot (u64 LE) | signature ([u8; 64]) | bincode(VersionedTransaction)
  const buf = Buffer.from(data);
  if (buf.readUInt8(0) !== 1) return; // unknown schema version; update your decoder
  const signature = bs58.encode(buf.subarray(9, 73));
  if (seen.has(signature)) return;
  seen.add(signature);

  queue.push({
    slot: buf.readBigUInt64LE(1),
    signature,
    txBytes: buf.subarray(73)
  });
});

ws.on('error', console.error);
ws.on('close', () => process.exit(1)); // supervisor restarts and resubscribes
```

## 수신 루프를 스트림보다 빠르게 유지하기

Helius는 느린 소비자를 위해 무한히 버퍼링하지 않습니다: 서버 측에서 4,000개 이상의 메시지가 대기 중이면 연결이 종료됩니다. 그래서 위의 핸들러는 73바이트의 접두사만 읽고 대기하도록 되어 있습니다.

역직렬화 및 전략 논리는 별도의 루프에서 실행됩니다:

```javascript theme={"system"}
setImmediate(async function drain() {
  const { VersionedTransaction } = require('@solana/web3.js');
  while (true) {
    const item = queue.shift();
    if (!item) { await new Promise(r => setTimeout(r, 1)); continue; }
    const tx = VersionedTransaction.deserialize(item.txBytes);
    strategy.onPreExecution(item.slot, item.signature, tx);
  }
});
```

큐가 무한히 증가하면 필터를 조여야 합니다. 클라이언트 측에서 버리는 트랜잭션도 각각 0.1 크레딧의 비용이 들며 여전히 백프레셔 제한에 포함됩니다.

## 처리된 데이터에 대한 조정

사전 처리된 트랜잭션은 발신자가 시도한 내용을 보여주며, 실제로 어떤 일이 일어났는지는 알 수 없습니다. 실행 상태, 잔액 변경 또는 로그를 포함하지 않으며 실패할 수 있고, 삭제되거나 다른 포크에 적용될 수 있습니다. 제공은 최선의 노력으로 이루어지며 과거 재생은 없습니다, 그래서:

* 전략이 어떤 것을 사실로 기록하기 전에 `processed` 또는 `confirmed` 커밋에서 [`transactionSubscribe`](/docs/ko/rpc/websocket/transaction-subscribe)와 조정하십시오.
* 연결이 끊어지면 즉시 재구독하고, 재생으로 빈 부분을 채울 수 없으니 그 간격을 받아들이세요.
* 트랜잭션 의도보다는 실시간 계정 상태가 필요하다면, 그것은 실행 후에만 존재하므로 [LaserStream gRPC](/docs/ko/laserstream)를 `processed`에서 사용하세요.

## 관련 가이드

<CardGroup cols={2}>
  <Card title="preprocessedSubscribe 참조" icon="code" href="/docs/ko/preprocessed-transactions/preprocessed-subscribe">
    전체 페이로드 레이아웃, 필터 규칙, 백프레셔, 가격 정보
  </Card>

  <Card title="사전 확인 거래" icon="stopwatch" href="/docs/ko/pre-confirmations/guides/trade-on-preconfirmations">
    Helius가 제공하는 가장 빠른 거래 신호, 스케줄러에서 직접 제공
  </Card>
</CardGroup>
