チェック順序
出金ウィンドウはアドレス、金額、ネットワーク(時による)、タグ(時による)、コード(時による)を含むフォームです。あらゆる取引所とウォレットにはこのようなフォームが存在し、どれも同じに見えます。これは、ボタンが有効化される時点までにどれだけの判定が既に下されているかを隠しています。これは読み切れるほど短いので、ここに何をするのかがあります。
| チェック | 成功する条件 | 失敗時に表示される内容 |
|---|---|---|
| ゼロより大きい数ですか? | 任意の正の金額 | 金額エラーが出てボタンがオフのままになります |
| 残高がありますか? | 金額 ≤ そのコインの残高(コインの最小単位から変換) | 「残高不足」 |
| 送金に十分ですか? | 金額 ≥ そのコインの最小出金額 | 最小額とコインシンボルがメッセージに表示されます |
最小額と手数料はコインごと、ネットワークごとであり、両方ともフォーム下部の警告テキストに何も入力する前に表示されます。
ENGINE-VERIFIEDcomponent/common/popup/wallet/withdraw.tsx: 金額バリデーターが非正の値(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で割ります。
ネットワーク、タグ、コード
3つのフィールドはコインがそれを必要とする場合のみ表示され、それぞれが資金喪失の一つの方法のために存在します。ネットワークセレクターは複数のチェーンに存在するコインに現れます。ステーブルコインはERC-20トークン、TRC-20トークン、または他の複数のネットワークで移動でき、受取人のウォレットが監視していないネットワークで送られた移動は移動ではなく損失です。ネットワークを選択すると、リクエストはそのネットワークのベースコインを保持するため、サーバーはあなたがどのチェーンを要求したかを正確に知ります。ネットワーク記事は問題の他の半分をカバーしています。
タグフィールドはアドレスが人ではなく取引所またはシェアウォレットを識別するコイン、および宛先タグまたはメモがその中であなたを識別するコインに表示されます。タグなしでアドレスに送ると、資金は正しい建物に着きますが部屋番号がありません。ウィンドウはタグを独自のフィールドとして送信し、それらのコインに対してのみです。
コード欄はアカウントで一度限りのコードをオンにしている場合に表示されます。ウィンドウは正確に6桁を受け入れ、リクエストにコードを含め、サーバーが他の何かをする前にそれをチェックします。これはリスト上のチェックの中で、あなた以外の誰かからあなたを保護するチェックであり、それがオンに切り替える価値がある理由です。
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.
チェックできないもの
上記のすべてのチェックは金額、ルート、送信者についてのものです。宛先についてのチェックはありません。なぜなら何もできないからです。アドレスは正しい形式か正しくないかのどちらかの文字列であり、知らない人に属する正しい形式のアドレスはあなたに属する正しい形式のアドレスと区別できません。サイトはその文字列がパースできることを見ることができます。それが誰のものかは見ることができません。
- サイトは金額、残高、最小値、ネットワーク、タグ、コードをチェックします。これらはそのジョブであり、それらのいずれかの失敗はブラウザを離れる前にリクエストを停止します。
- あなたはアドレスをチェックします。それを発行した場所からコピーし、終わりだけでなく中間の文字も読み、あなたの履歴内の最近のわずかな転送を扱うショートカットとしてではなく、より注意深く見る理由として扱ってください。
- 手数料はネットワークのもので、事前に表示されます。最小値の横に印刷され、あなたが入力する前に、手数料の記事がなぜそれが動くのかを説明しています。
- ボタンの後、チェーンが決定します。提出された引き出しはウォレットサービスで処理された後、ネットワークによって確認されます; 確認とは何かについて待機をカバーしています。
この記事はリポジトリに表示される通りのクライアント側の引き出しコンポーネントについて説明しています; ウォレットサービスはサーバー上で独自のチェックを実行し、引き出しが送信されるかどうかについての権限です。制限、手数料、最小値はコインごとに異なり、変更できます; ウィンドウは現在の値を表示します。
FAQ
なぜ引き出しボタンは無効のままですか?
チェックの1つが失敗したためです: 金額が正でない、あなたの残高を超えている、またはコインの最小値以下である、またはネットワーク、タグ、6桁のコードなどの必須フィールドが不足しています。金額の下のメッセージがどれかを言っています。
最小値と手数料はどこで見ますか?
フォームの下の警告テキストで、選択したコインとネットワーク用。両方はコインの最小単位でコインごとに保存され、通常の単位に変換して表示されます。
一部のコインのネットワークセレクタがあるのはなぜですか?
それらのコインが複数のチェーン上に存在するためです。リクエストは選択したネットワークの基本コインを持つため、転送はあなたの受取ウォレットが監視しているチェーンを下ります。
タグフィールドとは何ですか?
宛先タグまたはメモであり、アドレスが共有ウォレットを識別するコイン用です。それは送信されるのはそれらのコインのためだけ独自のフィールドとして; それなしで資金はアドレスに到着しますが、あなたには到着しません。
ウィンドウはアドレスをチェックしますか?
それが存在することだけです。それが誰のアドレスかを判断できません。これはあなたがそれを発行した場所からコピーし、最初と最後の文字以上を読むべき理由です。
ソースとリファレンス
- Betkyo クライアントソース: component/common/popup/wallet/withdraw.tsx (validation、request body、OTP およびタグハンドリング)、store/CoinStore.ts (minWithdrawView、feeView)