Bethropic

Qué valida la ventana de retiro antes de enviar

sepialadle7750 visitas
🌐 Originally written in English· AI translationView original

El orden de las validaciones

La ventana de retiro es un formulario con una dirección, un monto, a veces una red, a veces una etiqueta, y a veces un código. Formularios como este existen en todos los exchanges y todas las wallets, y todos se ven iguales, lo que oculta cuánta de la decisión ya ha sido tomada en el momento en que el botón se habilita. Este es lo suficientemente corto para leerlo completamente, así que aquí está lo que hace.

Las validaciones que ejecuta la ventana de retiro en el monto, en orden

VALIDACIÓNQUÉ PASAQUÉ VES SI FALLA
¿Es un número mayor que cero?Cualquier monto positivoUn error de monto, y el botón se mantiene deshabilitado
¿Lo tienes?Monto ≤ tu balance en esa moneda, convertido desde la unidad más pequeña de la moneda"Saldo insuficiente"
¿Es suficiente para enviar?Monto ≥ el retiro mínimo de la monedaEl mínimo, con el símbolo de la moneda, en el mensaje

El mínimo y la comisión son por moneda y por red, y ambos se imprimen en el texto de advertencia bajo el formulario antes de que escribas nada.

ENGINE-VERIFIEDcomponent/common/popup/wallet/withdraw.tsx: el validador de monto rechaza un valor no positivo (amountError), luego compara Big(balance) ÷ 10^precision con el valor escrito (notEnoughBalance), luego compara selectCoin.minWithdrawView con él (minWithdraw, con {min} y {symbol} sustituidos). El bloque de advertencia renderiza withdrawWarn con {symbol}, {min: selectCoin.minWithdrawView} y {fee: selectCoin.feeView}. store/CoinStore.ts: minWithdrawView y feeView dividen el minWithdraw y fee almacenados entre 10^precision.

Red, etiqueta y código

Tres campos aparecen solo cuando la moneda los necesita, y cada uno existe por una forma en que se ha perdido dinero. El selector de red aparece para monedas que existen en más de una cadena: una stablecoin puede viajar como un token ERC-20, un token TRC-20, o en varias otras redes, y una transferencia enviada en una red que la wallet receptora no monitorea no es una transferencia, es una pérdida. Cuando eliges una red, la solicitud lleva la moneda base de esa red, así que el servidor sabe exactamente qué cadena solicitaste. El artículo sobre redes cubre la otra mitad del problema.

El campo de etiqueta aparece para monedas cuya dirección identifica un exchange o una wallet compartida en lugar de una persona, y cuya etiqueta de destino o memo te identifica a ti dentro de ella. Enviar a la dirección sin la etiqueta coloca los fondos en el edificio correcto sin número de apartamento. La ventana envía la etiqueta como su propio campo, y solo para esas monedas.

El campo de código aparece si has activado un código de una sola vez para tu cuenta. La ventana acepta exactamente seis dígitos, incluye el código en la solicitud y el servidor lo verifica antes de hacer cualquier otra cosa. Es la única verificación en la lista que te protege de alguien que no eres tú, por lo que es la que vale la pena activar.

ENGINE-VERIFIEDwithdraw.tsx: el cuerpo de la solicitud es { coinId, amount: Big(amount) × 10^precision como string, address }; baseCoinId se añade cuando isNetworkCoin && selectedNetwork; otpCode se añade cuando el input de seis dígitos (onTypeOtp: code.length === 6) está lleno; tag se añade cuando selectCoin.type === ECoinType.TAG y el campo no está vacío. La solicitud es api.post('/wallet/withdraw', body); un código de no éxito se lanza y se muestra, el éxito muestra requestWithdrawDone y cierra la ventana.

Lo que no puede verificar

Cada verificación anterior es sobre la cantidad, la ruta y el remitente. Ninguna es sobre el destino, porque ninguna puede serlo. Una dirección es una cadena que está bien formada o no, y una dirección bien formada perteneciente a un extraño es indistinguible de una dirección bien formada que te pertenece a ti. El sitio puede ver que la cadena se analiza. No puede ver de quién es.

  • El sitio verifica la cantidad, el saldo, el mínimo, la red, el tag y el código. Ese es su trabajo, y un fallo en cualquiera de ellos detiene la solicitud antes de que salga del navegador.
  • Tú verificas la dirección. Cópiala del lugar que la emitió, lee los caracteres del medio así como los finales, y trata cualquier transferencia pequeña reciente en tu historial como una razón para mirar más de cerca, no como un atajo.
  • La comisión es de la red, mostrada por adelantado. Se imprime junto al mínimo antes de que escribas, y el artículo sobre comisiones explica por qué se mueve.
  • Después del botón, la cadena decide. Un retiro enviado es procesado por el servicio de billetera y luego confirmado por la red; qué es una confirmación cubre la espera.

Este artículo describe el componente de retiro del lado del cliente tal como aparece en el repositorio; el servicio de billetera realiza sus propias verificaciones en el servidor y es la autoridad sobre si se envía un retiro. Los límites, comisiones y mínimos son por moneda y pueden cambiar; la ventana muestra los valores actuales.

Preguntas frecuentes

¿Por qué el botón de retiro permanece deshabilitado?

Porque una de las verificaciones falló: la cantidad no es positiva, excede tu saldo, o está por debajo del mínimo de la moneda, o falta un campo requerido como la red, el tag o el código de seis dígitos. El mensaje debajo de la cantidad dice cuál.

¿Dónde veo el mínimo y la comisión?

En el texto de advertencia debajo del formulario, para la moneda y red que has seleccionado. Ambos se almacenan por moneda en la unidad más pequeña de la moneda y se muestran convertidos a unidades normales.

¿Por qué hay un selector de red para algunas monedas?

Porque esas monedas existen en más de una cadena. La solicitud lleva la moneda base de la red que elijas para que la transferencia baje por la cadena que observa tu billetera receptora.

¿Qué es el campo de tag?

Una etiqueta de destino o memo para monedas cuya dirección identifica una billetera compartida. Se envía como su propio campo solo para esas monedas; sin él, los fondos llegan a la dirección pero no a ti.

¿Verifica la ventana la dirección?

Solo que esté presente. No puede decir de quién es la dirección, por lo que deberías copiarla del lugar que la emitió y leer más que los primeros y últimos caracteres.

FUENTES Y REFERENCIAS

  • Código fuente del cliente Betkyo: component/common/popup/wallet/withdraw.tsx (validación, cuerpo de solicitud, manejo de OTP y etiquetas), store/CoinStore.ts (minWithdrawView, feeView)
Qué valida la ventana de retiro antes de enviar

Comentarios (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.