Die Reihenfolge der Überprüfungen
Das Auszahlungsfenster ist ein Formular mit einer Adresse, einem Betrag, manchmal einem Netzwerk, manchmal einem Tag und manchmal einem Code. Formulare wie dieses existieren auf jeder Exchange und in jedem Wallet, und sie sehen alle gleich aus, was verbirgt, wie viel der Entscheidung bereits getroffen wurde, bevor die Schaltfläche aktiviert ist. Dieses ist kurz genug, um vollständig gelesen zu werden, daher hier ist, was es tut.
| ÜBERPRÜFUNG | WAS DURCHGEHT | WAS DU SIEHST, WENN ES FEHLSCHLÄGT |
|---|---|---|
| Ist es eine Zahl größer als null? | Jeder positive Betrag | Ein Betragsfehler, und die Schaltfläche bleibt aus |
| Hast du es? | Betrag ≤ dein Guthaben in dieser Münze, umgerechnet von der kleinsten Einheit der Münze | „Nicht genug Guthaben |
| Ist es genug zum Senden? | Betrag ≥ die Mindestabhebung der Münze | Das Minimum, mit dem Münzensymbol, in der Nachricht |
Das Minimum und die Gebühr sind pro Münze und pro Netzwerk, und beide werden in der Warnmeldung unter dem Formular angedruckt, bevor du etwas eingibst.
ENGINE-VERIFIEDcomponent/common/popup/wallet/withdraw.tsx: the amount validator rejects a non-positive value (amountError), then compares Big(balance) ÷ 10^precision with the typed value (notEnoughBalance), then compares selectCoin.minWithdrawView with it (minWithdraw, with {min} and {symbol} substituted). The warning block renders withdrawWarn with {symbol}, {min: selectCoin.minWithdrawView} and {fee: selectCoin.feeView}. store/CoinStore.ts: minWithdrawView and feeView divide the stored minWithdraw and fee by 10^precision.
Netzwerk, Tag und Code
Drei Felder erscheinen nur, wenn die Münze sie benötigt, und jedes existiert wegen einer Art, wie Geld verloren wurde. Der Netzwerkwähler erscheint für Münzen, die auf mehr als einer Kette existieren: eine Stablecoin kann als ERC-20-Token, als TRC-20-Token oder auf mehreren anderen Netzwerken reisen, und eine Überweisung, die in einem Netzwerk gesendet wird, das das empfangende Wallet nicht überwacht, ist keine Überweisung, es ist ein Verlust. Wenn du ein Netzwerk wählst, trägt die Anfrage die Basismünze dieses Netzwerks, also weiß der Server genau, welche Kette du angefordert hast. Der Netzwerkartikel behandelt die andere Hälfte des Problems.
Das Tag-Feld erscheint für Münzen, deren Adresse eine Exchange oder ein gemeinsames Wallet statt einer Person identifiziert, und deren Ziel-Tag oder Memo dich darin identifiziert. Das Senden an die Adresse ohne den Tag bringt die Gelder ins richtige Gebäude ohne Zimmernummer. Das Fenster sendet den Tag als sein eigenes Feld, und nur für diese Münzen.
Das Codefeld wird angezeigt, wenn Sie eine Einmalcode für Ihr Konto aktiviert haben. Das Fenster akzeptiert genau sechs Ziffern, fügt den Code in die Anfrage ein, und der Server überprüft ihn, bevor er etwas anderes tut. Es ist die eine Überprüfung in der Liste, die Sie vor jemandem schützt, der nicht Sie ist, weshalb es sich lohnt, sie einzuschalten.
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.
Was es nicht überprüfen kann
Jede oben genannte Überprüfung betrifft den Betrag, die Route und den Absender. Keine betrifft das Ziel, weil keine es kann. Eine Adresse ist ein String, der entweder wohlgeformt ist oder nicht, und eine wohlgeformte Adresse, die einem Fremden gehört, ist nicht zu unterscheiden von einer wohlgeformten Adresse, die Ihnen gehört. Die Website kann sehen, dass der String sich analysieren lässt. Sie kann nicht sehen, wem er gehört.
- Die Website überprüft den Betrag, das Guthaben, das Minimum, das Netzwerk, den Tag und den Code. Das ist ihre Aufgabe, und ein Fehler bei einer von ihnen stoppt die Anfrage, bevor sie den Browser verlässt.
- Sie überprüfen die Adresse. Kopieren Sie sie von dem Ort, der sie ausgegeben hat, lesen Sie auch die mittleren Zeichen sowie die Enden, und behandeln Sie alle kürzlichen winzigen Transfers in Ihrer Historie als Grund, genauer hinzuschauen, nicht als Abkürzung.
- Die Gebühr gehört dem Netzwerk und wird im Voraus angezeigt. Sie wird neben dem Minimum gedruckt, bevor Sie eingeben, und der Gebührenartikel erklärt, warum sie sich ändert.
- Nach dem Button entscheidet die Chain. Eine eingereichte Abhebung wird vom Wallet-Service verarbeitet und dann vom Netzwerk bestätigt; was eine Bestätigung ist behandelt das Warten.
Dieser Artikel beschreibt die Client-seitige Withdraw-Komponente, wie sie im Repository angezeigt wird; der Wallet-Service führt seine eigenen Überprüfungen auf dem Server durch und ist die Autorität darüber, ob eine Abhebung gesendet wird. Limits, Gebühren und Mindestwerte sind pro Coin und können sich ändern; das Fenster zeigt die aktuellen Werte.
Häufig gestellte Fragen
Warum bleibt der Withdraw-Button deaktiviert?
Weil eine der Überprüfungen fehlgeschlagen ist: Der Betrag ist nicht positiv, überschreitet Ihr Guthaben oder liegt unter dem Minimum der Münze, oder ein erforderliches Feld wie das Netzwerk, der Tag oder der sechsstellige Code fehlt. Die Nachricht unter dem Betrag sagt, welche.
Wo sehe ich das Minimum und die Gebühr?
Im Warntext unter dem Formular für die Münze und das Netzwerk, die Sie ausgewählt haben. Beide werden pro Münze in der kleinsten Einheit der Münze gespeichert und umgerechnet in normale Einheiten angezeigt.
Warum gibt es einen Netzwerk-Selector für einige Münzen?
Weil diese Münzen auf mehr als einer Chain existieren. Die Anfrage trägt die Basis-Münze des Netzwerks, das Sie wählen, damit die Überweisung auf der Chain verläuft, die Ihr empfangendes Wallet überwacht.
Was ist das Tag-Feld?
Ein Ziel-Tag oder Memo für Münzen, deren Adresse ein gemeinsames Wallet identifiziert. Es wird nur für diese Münzen als sein eigenes Feld gesendet; ohne es erreichen die Mittel die Adresse, aber nicht Sie.
Überprüft das Fenster die Adresse?
Nur dass sie vorhanden ist. Es kann nicht sehen, wem die Adresse gehört, deshalb sollten Sie sie von dem Ort kopieren, der sie ausgegeben hat, und mehr als nur die ersten und letzten Zeichen lesen.
QUELLEN & VERWEISE
- Betkyo client source: component/common/popup/wallet/withdraw.tsx (validation, request body, OTP and tag handling), store/CoinStore.ts (minWithdrawView, feeView)