L'ordine dei controlli
La finestra di prelievo è un modulo con un indirizzo, un importo, a volte una rete, a volte un tag, e a volte un codice. Moduli come questo esistono su ogni exchange e ogni wallet, e sembrano tutti uguali, il che nasconde quanto della decisione sia già stata presa quando il pulsante è abilitato. Questo è abbastanza breve da leggere per intero, quindi ecco cosa fa.
| CONTROLLO | COSA PASSA | COSA VEDI SE FALLISCE |
|---|---|---|
| È un numero maggiore di zero? | Qualsiasi importo positivo | Un errore di importo, e il pulsante rimane spento |
| Lo hai? | Importo ≤ il tuo saldo in quella moneta, convertito dall'unità più piccola della moneta | "Saldo insufficiente" |
| È abbastanza per inviare? | Importo ≥ il prelievo minimo della moneta | Il minimo, con il simbolo della moneta, nel messaggio |
Il minimo e la commissione sono per moneta e per rete, e entrambi sono stampati nel testo di avviso sotto il modulo prima di digitare qualsiasi cosa.
ENGINE-VERIFIEDcomponent/common/popup/wallet/withdraw.tsx: il validatore di importo rifiuta un valore non positivo (amountError), quindi confronta Big(balance) ÷ 10^precision con il valore digitato (notEnoughBalance), quindi confronta selectCoin.minWithdrawView con esso (minWithdraw, con {min} e {symbol} sostituiti). Il blocco di avviso renderizza withdrawWarn con {symbol}, {min: selectCoin.minWithdrawView} e {fee: selectCoin.feeView}. store/CoinStore.ts: minWithdrawView e feeView dividono i minWithdraw e fee memorizzati per 10^precision.
Rete, tag e codice
Tre campi appaiono solo quando la moneta ne ha bisogno, e ognuno esiste a causa di un modo in cui il denaro è stato perso. Il selettore di rete appare per le monete che esistono su più di una catena: uno stablecoin può viaggiare come token ERC-20, token TRC-20, o su diverse altre reti, e un trasferimento inviato su una rete che il wallet ricevente non monitora non è un trasferimento, è una perdita. Quando scegli una rete la richiesta porta la moneta base di quella rete, così il server sa esattamente quale catena hai chiesto. L'articolo sulla rete copre l'altra metà del problema.
Il campo tag appare per le monete il cui indirizzo identifica un exchange o un wallet condiviso piuttosto che una persona, e il cui tag di destinazione o memo ti identifica dentro. Inviare all'indirizzo senza il tag fa arrivare i fondi nel palazzo giusto senza numero di stanza. La finestra invia il tag come suo campo proprio, e solo per quelle monete.
Il campo del codice appare se hai attivato un codice monouso per il tuo account. La finestra accetta esattamente sei cifre, include il codice nella richiesta e il server la controlla prima di fare qualsiasi altra cosa. È il controllo dell'elenco che ti protegge da chi non sei tu, ed è per questo che vale la pena attivarlo.
ENGINE-VERIFIEDwithdraw.tsx: il corpo della richiesta è { coinId, amount: Big(amount) × 10^precision come stringa, address }; baseCoinId viene aggiunto quando isNetworkCoin && selectedNetwork; otpCode viene aggiunto quando l'input a sei cifre (onTypeOtp: code.length === 6) è compilato; tag viene aggiunto quando selectCoin.type === ECoinType.TAG e il campo non è vuoto. La richiesta è api.post('/wallet/withdraw', body); un codice di non-successo viene lanciato e mostrato, il successo mostra requestWithdrawDone e chiude la finestra.
Quello che non può controllare
Ogni controllo di cui sopra riguarda l'importo, il percorso e il mittente. Nessuno riguarda la destinazione, perché nessuno può. Un indirizzo è una stringa che è ben formata o no, e un indirizzo ben formato appartenente a uno straniero è indistinguibile da un indirizzo ben formato appartenente a te. Il sito può vedere che la stringa fa il parsing. Non può vedere di chi sia.
- Il sito controlla l'importo, il saldo, il minimo, la rete, il tag e il codice. Questi sono i suoi compiti, e un fallimento in uno di essi blocca la richiesta prima che lasci il browser.
- Tu controlli l'indirizzo. Copialo dal posto che l'ha emesso, leggi i caratteri centrali così come i finali, e considera qualsiasi piccolo trasferimento recente nella tua cronologia come una ragione per controllare più attentamente, non come una scorciatoia.
- La commissione è della rete, mostrata in anticipo. È stampata accanto al minimo prima che tu digiti, e l'articolo sulla commissione spiega perché si muove.
- Dopo il pulsante, la catena decide. Un prelievo inviato viene elaborato dal servizio di portafoglio e poi confermato dalla rete; cos'è una conferma copre l'attesa.
Questo articolo descrive il componente di prelievo lato client così come appare nel repository; il servizio di portafoglio esegue i propri controlli sul server ed è l'autorità sulla possibilità di inviare un prelievo. Limiti, commissioni e minimi sono per moneta e possono cambiare; la finestra mostra i valori attuali.
FAQ
Perché il pulsante di prelievo rimane disabilitato?
Perché uno dei controlli ha fallito: l'importo non è positivo, supera il tuo saldo, o è al di sotto del minimo della moneta, oppure manca un campo obbligatorio come la rete, il tag o il codice a sei cifre. Il messaggio sotto l'importo indica quale.
Dove vedo il minimo e la commissione?
Nel testo di avvertenza sotto il modulo, per la moneta e la rete che hai selezionato. Entrambi sono archiviati per moneta nella sua unità più piccola e mostrati convertiti in unità normali.
Perché c'è un selettore di rete per alcune monete?
Perché quelle monete esistono su più di una catena. La richiesta porta la moneta base della rete che scegli in modo che il trasferimento scenda la catena che il tuo portafoglio ricevente osserva.
Cos'è il campo tag?
Un tag di destinazione o memo per monete il cui indirizzo identifica un portafoglio condiviso. Viene inviato come campo proprio solo per quelle monete; senza di esso i fondi arrivano all'indirizzo ma non a te.
La finestra controlla l'indirizzo?
Solo che sia presente. Non può dire di chi è l'indirizzo, motivo per cui dovresti copiarlo dal posto che l'ha emesso e leggere più dei primi e degli ultimi caratteri.
FONTI E RIFERIMENTI
- Codice sorgente client Betkyo: component/common/popup/wallet/withdraw.tsx (validazione, corpo della richiesta, gestione OTP e tag), store/CoinStore.ts (minWithdrawView, feeView)