Bethropic

출금 창이 전송 전에 확인하는 것들

sepialadle775조회 0
🌐 이 글의 원문은 영어로 작성되었습니다· AI 번역원문 보기

확인 순서

출금 창은 주소, 금액, 때로는 네트워크, 때로는 태그, 때로는 코드로 이루어진 폼입니다. 이런 폼은 모든 거래소와 모든 지갑에 존재하며 모두 똑같아 보이지만, 그 버튼이 활성화될 때까지 이미 얼마나 많은 판단이 내려졌는지는 겉으로 드러나지 않습니다. 이 폼은 전체를 다 읽을 수 있을 만큼 짧으니, 여기서 무엇을 하는지 살펴보겠습니다.

출금 창이 금액에 대해 순서대로 실행하는 확인 항목들

확인 항목통과 조건실패 시 표시되는 내용
0보다 큰 숫자인가?양수인 모든 금액금액 오류가 표시되고 버튼은 비활성 상태로 유지됩니다
보유하고 있는가?금액 ≤ 해당 코인의 가장 작은 단위에서 변환된 잔액“잔액 부족”
전송하기에 충분한가?금액 ≥ 해당 코인의 최소 출금액메시지에 코인 심볼과 함께 표시되는 최소 금액

최소 금액과 수수료는 코인별, 네트워크별로 다르며, 둘 다 입력을 시작하기 전 폼 아래의 경고 텍스트에 표시됩니다.

엔진 검증됨component/common/popup/wallet/withdraw.tsx: 금액 검증기는 0 이하의 값을 거부하고(amountError), 그다음 Big(balance) ÷ 10^precision을 입력된 값과 비교하며(notEnoughBalance), 그다음 selectCoin.minWithdrawView와 비교합니다(minWithdraw, {min}과 {symbol}이 치환됨). 경고 블록은 {symbol}, {min: selectCoin.minWithdrawView}, {fee: selectCoin.feeView}와 함께 withdrawWarn을 렌더링합니다. store/CoinStore.ts: minWithdrawView와 feeView는 저장된 minWithdraw와 fee를 10^precision으로 나눕니다.

네트워크, 태그, 코드

이 세 필드는 해당 코인이 필요로 할 때만 나타나며, 각각 돈이 실제로 손실된 사례가 있어 존재합니다. 네트워크 선택기는 여러 체인에 존재하는 코인에 대해 나타납니다. 스테이블코인은 ERC-20 토큰, TRC-20 토큰, 또는 여러 다른 네트워크로 이동할 수 있으며, 수신 지갑이 감시하지 않는 네트워크로 전송된 전송은 전송이 아니라 손실입니다. 네트워크를 선택하면 요청에 해당 네트워크의 기본 코인이 포함되어, 서버가 정확히 어떤 체인을 요청했는지 알 수 있습니다. 네트워크 관련 글에서 문제의 나머지 절반을 다룹니다.

태그 필드는 주소가 개인이 아니라 거래소나 공유 지갑을 식별하고, 목적지 태그나 메모가 그 안에서 당신을 식별하는 코인에 대해 나타납니다. 태그 없이 주소로 전송하면 자금은 올바른 건물에는 도착하지만 호실 번호가 없는 셈이 됩니다. 이 창은 태그를 별도의 필드로 전송하며, 오직 그런 코인에 대해서만 그렇게 합니다.

코드 입력란은 계정에 일회용 코드(OTP)를 켜둔 경우에 나타납니다. 이 창은 정확히 6자리 숫자만 받으며, 요청에 코드를 포함시키고, 서버는 다른 무엇보다 먼저 이를 확인합니다. 목록에 있는 확인 항목 중 유일하게 당신이 아닌 누군가로부터 당신을 보호해주는 것이라, 켜둘 가치가 있는 유일한 항목입니다.

엔진 검증됨withdraw.tsx: 요청 본문은 { coinId, amount: Big(amount) × 10^precision을 문자열로, address }이며; baseCoinId는 isNetworkCoin && selectedNetwork일 때 추가되고; otpCode는 6자리 입력(onTypeOtp: code.length === 6)이 채워졌을 때 추가되며; tag는 selectCoin.type === ECoinType.TAG이고 필드가 비어있지 않을 때 추가됩니다. 요청은 api.post('/wallet/withdraw', body)이며; 성공하지 않은 코드는 예외 처리되어 표시되고, 성공 시 requestWithdrawDone이 표시되며 창이 닫힙니다.

확인할 수 없는 것

위의 모든 확인은 금액, 경로, 발신자에 관한 것입니다. 목적지에 대한 것은 없는데, 이는 확인할 수 없기 때문입니다. 주소는 형식이 올바르거나 그렇지 않은 문자열일 뿐이며, 낯선 사람의 형식이 올바른 주소와 당신 소유의 형식이 올바른 주소는 구별할 수 없습니다. 사이트는 문자열이 파싱되는지는 볼 수 있지만, 그것이 누구의 것인지는 알 수 없습니다.

  • 사이트는 금액, 잔액, 최소 금액, 네트워크, 태그, 코드를 확인합니다. 이것이 사이트의 역할이며, 이 중 하나라도 실패하면 요청이 브라우저를 떠나기 전에 중단됩니다.
  • 주소는 당신이 확인해야 합니다. 발급한 곳에서 직접 복사하고, 양 끝뿐 아니라 중간 문자까지 읽으며, 최근 기록에 있는 작은 소액 전송을 지름길이 아니라 더 자세히 살펴봐야 할 이유로 여기세요.
  • 수수료는 네트워크의 것이며, 미리 표시됩니다. 입력하기 전에 최소 금액 옆에 표시되며, 수수료 관련 글에서 왜 변동하는지 설명합니다.
  • 버튼을 누른 후에는 체인이 결정합니다. 제출된 출금은 지갑 서비스가 처리한 후 네트워크에 의해 확인되며; 확인이란 무엇인가에서 대기 시간에 대해 다룹니다.

이 글은 저장소에 나타나는 클라이언트 측 출금 컴포넌트를 설명합니다. 지갑 서비스는 서버 측에서 자체적으로 확인을 수행하며 출금 전송 여부에 대한 최종 권한을 가집니다. 한도, 수수료, 최소 금액은 코인별로 다르며 변경될 수 있습니다. 창에는 현재 값이 표시됩니다.

자주 묻는 질문

출금 버튼이 계속 비활성화되어 있는 이유는 무엇인가요?

확인 항목 중 하나가 실패했기 때문입니다: 금액이 양수가 아니거나, 잔액을 초과하거나, 코인의 최소 금액보다 낮거나, 네트워크, 태그, 6자리 코드 같은 필수 필드가 누락된 경우입니다. 금액 아래 메시지에 어떤 것인지 표시됩니다.

최소 금액과 수수료는 어디서 확인하나요?

선택한 코인과 네트워크에 대해 양식 아래 경고 텍스트에 표시됩니다. 둘 다 코인별로 최소 단위로 저장되며 일반 단위로 변환되어 표시됩니다.

일부 코인에만 네트워크 선택기가 있는 이유는 무엇인가요?

그 코인들이 여러 체인에 존재하기 때문입니다. 요청에는 선택한 네트워크의 기본 코인이 포함되어, 받는 지갑이 감시하는 체인을 통해 전송이 이루어집니다.

태그 필드는 무엇인가요?

주소가 공유 지갑을 나타내는 코인을 위한 목적지 태그 또는 메모입니다. 이러한 코인에 한해 별도 필드로 전송됩니다. 이것이 없으면 자금이 주소에는 도착하지만 당신에게는 도착하지 않습니다.

창이 주소를 확인하나요?

주소가 입력되어 있는지만 확인합니다. 누구의 주소인지는 알 수 없으므로, 발급한 곳에서 직접 복사하고 첫 글자와 마지막 글자 이상을 확인해야 합니다.

출처 및 참고자료

  • Betkyo 클라이언트 소스: component/common/popup/wallet/withdraw.tsx (validation, request body, OTP and tag handling), store/CoinStore.ts (minWithdrawView, feeView)
출금 창이 전송 전에 확인하는 것들

댓글 (1)

  • bluekettle58

    So the withdraw form basically locks you out until you hit every single requirement - makes sense but never really thought about the order mattering like that.