Skip to content

외부 출금 요청 ​

외부 출금은 비동기로 처리됩니다. 생성 전에 수신 주소와 견적을 검증하고 결과 상태는 별도로 추적합니다.

수신 주소 검증 ​

튜토리얼에서는 외부 테스트넷 주소를 사용합니다. 다른 OOLIN 계정의 입금 주소를 지정하면 내부이체로 분류될 수 있습니다.

bash
export TO_ADDRESS='{valid-testnet-address}'
export WITHDRAW_AMOUNT='1.00'

asset_response="$(
  wallet_request GET "/assets/by-type-network?asset_type_id=$ASSET_TYPE_ID&network_id=$NETWORK_ID"
)"
export ASSET_ID="$(printf '%s' "$asset_response" | jq -r '.data.asset_id')"

validate_body="$(jq -nc --arg address "$TO_ADDRESS" '{address:$address}')"
wallet_request POST "/assets/$ASSET_ID/validate-address" "$validate_body" | jq

data.is_valid가 true일 때만 다음 단계로 진행합니다.

출금 견적 요청 ​

bash
quote_body="$(jq -nc \
  --argjson account_id "$ACCOUNT_ID" \
  --argjson asset_type_id "$ASSET_TYPE_ID" \
  --arg amount "$WITHDRAW_AMOUNT" \
  --arg to_address "$TO_ADDRESS" \
  --argjson network_id "$NETWORK_ID" \
  '{account_id:$account_id,asset_type_id:$asset_type_id,amount:$amount,to_address:$to_address,network_id:$network_id}')"

wallet_request POST '/withdrawals/quote' "$quote_body" | jq

can_withdraw: true이고 transfer_type: "EXTERNAL"인지 확인합니다. 고객이 확정하기 전에 수수료, 수령 금액, 최소·최대 한도를 표시합니다.

계정에서 예약·차감되는 금액은 amount + fee_amount이며 receive_amount는 수취 금액입니다. 견적은 잔액 예약이나 출금 성공을 보장하지 않으므로 생성 시 오류도 처리해야 합니다.

외부 출금 생성 ​

전역에서 고유한 client_request_id를 만들고 요청을 전송하기 전에 영구 저장합니다.

bash
export WITHDRAWAL_REQUEST_ID="withdrawal-$(node -e 'process.stdout.write(require("crypto").randomUUID())')"

withdrawal_body="$(jq -nc \
  --argjson account_id "$ACCOUNT_ID" \
  --argjson asset_type_id "$ASSET_TYPE_ID" \
  --arg amount "$WITHDRAW_AMOUNT" \
  --arg to_address "$TO_ADDRESS" \
  --argjson network_id "$NETWORK_ID" \
  --arg client_request_id "$WITHDRAWAL_REQUEST_ID" \
  '{account_id:$account_id,asset_type_id:$asset_type_id,amount:$amount,to_address:$to_address,network_id:$network_id,client_request_id:$client_request_id}')"

withdrawal_response="$(wallet_request POST '/withdrawals' "$withdrawal_body")"
printf '%s\n' "$withdrawal_response" | jq

export WITHDRAWAL_ID="$(printf '%s' "$withdrawal_response" | jq -r '.data.withdrawal_id')"

응답의 request_type이 EXTERNAL인지 확인합니다. 생성 시 출금액과 수수료가 사용 가능 잔액에서 pending 출금 잔액으로 이동하지만 온체인 처리가 완료된 것은 아닙니다.

생성 응답이 유실되면 새 요청을 만들기 전에 기존 결과를 복구합니다.

bash
wallet_request GET "/withdrawals/client-request/$WITHDRAWAL_REQUEST_ID" | jq

복구 응답이 성공하면 반환된 withdrawal_id를 WITHDRAWAL_ID에 저장하고 상태 추적을 진행합니다. 한 번의 WITHDRAWAL_NOT_FOUND로 미처리를 확정하지 않으며 멱등성 가이드에 따라 기존 ID로 복구합니다.

다음: 출금 상태 추적

OOLIN은 BPMG가 제공하는 디지털자산 운영 인프라 제품입니다.