Bethropic

O que a janela de saque verifica antes de enviar

sepialadle7750 visualizações
🌐 Originally written in English· AI translationView original

A ordem das verificações

A janela de saque é um formulário com um endereço, um valor, às vezes uma rede, às vezes uma tag, e às vezes um código. Formulários assim existem em todas as exchanges e carteiras, e todos parecem iguais, o que esconde quanto da decisão já foi tomada no momento em que o botão fica ativado. Este é curto o suficiente para ler na íntegra, então aqui está o que ele faz.

As verificações que a janela de saque executa no valor, em ordem

VERIFICAÇÃOO QUE PASSAO QUE VOCÊ VÊ SE FALHAR
É um número maior que zero?Qualquer valor positivoUm erro de valor e o botão fica desativado
Você tem isso?Valor ≤ seu saldo naquela moeda, convertido da menor unidade da moeda"Saldo insuficiente"
É o suficiente para enviar?Valor ≥ o saque mínimo da moedaO mínimo, com o símbolo da moeda, na mensagem

O mínimo e a taxa são por moeda e por rede, e ambos são exibidos no texto de aviso sob o formulário antes de você digitar nada.

ENGINE-VERIFIEDcomponent/common/popup/wallet/withdraw.tsx: o validador de valor rejeita um valor não positivo (amountError), depois compara Big(balance) ÷ 10^precision com o valor digitado (notEnoughBalance), depois compara selectCoin.minWithdrawView com ele (minWithdraw, com {min} e {symbol} substituídos). O bloco de aviso renderiza withdrawWarn com {symbol}, {min: selectCoin.minWithdrawView} e {fee: selectCoin.feeView}. store/CoinStore.ts: minWithdrawView e feeView dividem o minWithdraw e fee armazenados por 10^precision.

Rede, tag e código

Três campos aparecem apenas quando a moeda precisa deles, e cada um existe por causa de uma forma como dinheiro foi perdido. O seletor de rede aparece para moedas que existem em mais de uma chain: uma stablecoin pode viajar como um token ERC-20, um token TRC-20, ou em várias outras redes, e uma transferência enviada em uma rede que a carteira receptora não monitora não é uma transferência, é uma perda. Quando você escolhe uma rede, o pedido carrega a moeda base dessa rede, então o servidor sabe exatamente qual chain você pediu. O artigo sobre rede cobre a outra metade do problema.

O campo de tag aparece para moedas cujo endereço identifica uma exchange ou uma carteira compartilhada em vez de uma pessoa, e cuja tag de destino ou memo o identifica dentro dela. Enviar para o endereço sem a tag coloca os fundos no prédio certo sem número de apartamento. A janela envia a tag como seu próprio campo, e apenas para aquelas moedas.

O campo de código aparece se você ativou um código de uso único para sua conta. A janela aceita exatamente seis dígitos, inclui o código na solicitação, e o servidor verifica antes de fazer qualquer outra coisa. É a única verificação na lista que protege você de alguém que não é você, que é o motivo pelo qual vale a pena ativá-la.

ENGINE-VERIFIEDwithdraw.tsx: the request body is { coinId, amount: Big(amount) × 10^precision as a string, address }; baseCoinId is added when isNetworkCoin && selectedNetwork; otpCode is added when the six-digit input (onTypeOtp: code.length === 6) is filled; tag is added when selectCoin.type === ECoinType.TAG and the field is non-empty. The request is api.post('/wallet/withdraw', body); a non-success code is thrown and shown, success shows requestWithdrawDone and closes the window.

O que não pode verificar

Toda verificação acima é sobre o valor, a rota e o remetente. Nenhuma é sobre o destino, porque nenhuma pode ser. Um endereço é uma string que está bem-formada ou não, e um endereço bem-formado pertencente a um estranho é indistinguível de um endereço bem-formado pertencente a você. O site consegue ver que a string faz parse. Não consegue ver de quem é.

  • O site verifica o valor, o saldo, o mínimo, a rede, a tag e o código. Esse é seu trabalho, e uma falha em qualquer um deles interrompe a solicitação antes de sair do navegador.
  • Você verifica o endereço. Copie do local que o emitiu, leia os caracteres do meio tanto quanto as extremidades, e trate qualquer transferência pequena recente no seu histórico como um motivo para verificar com mais atenção, não como um atalho.
  • A taxa é da rede, mostrada antecipadamente. É impressa ao lado do mínimo antes de você digitar, e o artigo sobre taxa explica por que ela se move.
  • Depois do botão, a chain decide. Um saque submetido é processado pelo serviço de wallet e depois confirmado pela rede; o que é uma confirmação cobre a espera.

Este artigo descreve o componente de saque do lado do cliente conforme aparece no repositório; o serviço de wallet realiza suas próprias verificações no servidor e é a autoridade sobre se um saque é enviado. Limites, taxas e mínimos são por coin e podem mudar; a janela mostra os valores atuais.

FAQ

Por que o botão de saque fica desativado?

Porque uma das verificações falhou: o valor não é positivo, ultrapassa seu saldo, ou está abaixo do mínimo da coin, ou um campo obrigatório como a rede, tag ou código de seis dígitos está faltando. A mensagem sob o valor diz qual.

Onde vejo o mínimo e a taxa?

No texto de aviso sob o formulário, para a coin e rede que você selecionou. Ambos são armazenados por coin em sua menor unidade e mostrados convertidos para unidades normais.

Por que existe um seletor de rede para algumas coins?

Porque essas coins existem em mais de uma chain. A solicitação carrega a coin base da rede que você escolhe para que a transferência vá pela chain que sua wallet receptora observa.

O que é o campo de tag?

Uma destination tag ou memo para coins cujo endereço identifica uma wallet compartilhada. Ela é enviada como seu próprio campo apenas para essas coins; sem ela os fundos chegam ao endereço mas não a você.

A janela verifica o endereço?

Apenas que está presente. Não consegue dizer de quem é o endereço, por isso você deve copiá-lo do local que o emitiu e ler mais do que apenas o primeiro e último caracteres.

FONTES E REFERÊNCIAS

  • Código fonte do cliente Betkyo: component/common/popup/wallet/withdraw.tsx (validação, corpo da requisição, tratamento de OTP e tag), store/CoinStore.ts (minWithdrawView, feeView)
O que a janela de saque verifica antes de enviar

Comentários (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.