The order of checks
The withdraw window is a form with an address, an amount, sometimes a network, sometimes a tag, and sometimes a code. Forms like it exist on every exchange and every wallet, and they all look the same, which hides how much of the decision has already been made by the time the button is enabled. This one is short enough to read in full, so here is what it does.
| CHECK | WHAT PASSES | WHAT YOU SEE IF IT FAILS |
|---|---|---|
| Is it a number greater than zero? | Any positive amount | An amount error, and the button stays off |
| Do you have it? | Amount ≤ your balance in that coin, converted from the coin’s smallest unit | “Not enough balance” |
| Is it enough to send? | Amount ≥ the coin’s minimum withdrawal | The minimum, with the coin symbol, in the message |
The minimum and the fee are per coin and per network, and both are printed in the warning text under the form before you type anything.
Network, tag and code
Three fields appear only when the coin needs them, and each one exists because of a way money has been lost. The network selector appears for coins that live on more than one chain: a stablecoin can travel as an ERC-20 token, a TRC-20 token, or on several other networks, and a transfer sent on a network the receiving wallet does not watch is not a transfer, it is a loss. When you choose a network the request carries the base coin of that network, so the server knows exactly which chain you asked for. The network article covers the other half of the problem.
The tag field appears for coins whose address identifies an exchange or a shared wallet rather than a person, and whose destination tag or memo identifies you inside it. Sending to the address without the tag lands the funds in the right building with no room number. The window sends the tag as its own field, and only for those coins.
The code field appears if you have turned on a one-time code for your account. The window accepts exactly six digits, includes the code in the request, and the server checks it before it does anything else. It is the one check on the list that protects you from someone who is not you, which is the reason it is the one worth switching on.
What it cannot check
Every check above is about the amount, the route and the sender. None is about the destination, because none can be. An address is a string that is either well-formed or not, and a well-formed address belonging to a stranger is indistinguishable from a well-formed address belonging to you. The site can see that the string parses. It cannot see whose it is.
- The site checks the amount, the balance, the minimum, the network, the tag and the code. Those are its job, and a failure in any of them stops the request before it leaves the browser.
- You check the address. Copy it from the place that issued it, read the middle characters as well as the ends, and treat any recent tiny transfer in your history as a reason to look harder, not as a shortcut.
- The fee is the network’s, shown up front. It is printed next to the minimum before you type, and the fee article explains why it moves.
- After the button, the chain decides. A submitted withdrawal is processed by the wallet service and then confirmed by the network; what a confirmation is covers the waiting.
Why does the withdraw button stay disabled?
Because one of the checks failed: the amount is not positive, exceeds your balance, or is below the coin’s minimum, or a required field such as the network, tag or six-digit code is missing. The message under the amount says which.
Where do I see the minimum and the fee?
In the warning text under the form, for the coin and network you have selected. Both are stored per coin in the coin’s smallest unit and shown converted to normal units.
Why is there a network selector for some coins?
Because those coins exist on more than one chain. The request carries the base coin of the network you choose so the transfer goes down the chain your receiving wallet watches.
What is the tag field?
A destination tag or memo for coins whose address identifies a shared wallet. It is sent as its own field only for those coins; without it the funds arrive at the address but not at you.
Does the window check the address?
Only that it is present. It cannot tell whose address it is, which is why you should copy it from the place that issued it and read more than the first and last characters.
- Betkyo client source: component/common/popup/wallet/withdraw.tsx (validation, request body, OTP and tag handling), store/CoinStore.ts (minWithdrawView, feeView)



