When transferring DOT tokens, make sure you are aware of the following:
1 DOT Requirement
- In order to activate an account, the first deposit must be equal or greater than 1 DOT.
- If the account (address) goes below 1 DOT, the account is reaped and is prone to a replay attack. To protect against this attack, Fireblocks prevents Polkadot wallets from going below 1 DOT. If a user tries to withdraw an amount from a vault account that results in the Polkadot wallet balance going below 1 DOT, the transaction will fail.
Note:
Polkadot's testnet, WND, also has a minimum balance of 0.01 WND.
What is a replay attack?
A replay attack is an attack where a valid transaction is repeated at a later time by a malicious actor. The malicious actor is able to withdraw the same original amount of funds once again and receive them at the original destination.
Why are Polkadot wallets below 1 DOT vulnerable to replay attacks?
Polkadot accounts are vulnerable to replay attacks when the account balance becomes less than 1 DOT and the account deactivates. When an account becomes deactivated, its nonce (which prevents replay attacks) is reset, allowing for a potentially valid replay.
The attack can only be conducted while a transaction is valid. On Fireblocks, DOT transactions are valid for two hours to provide manual approvers enough time to sign transactions.
Emptying DOT wallets via the API
Fireblocks allows explicitly emptying DOT wallets via the API by passing forceSweep=true in the POST /v1/transactions body request.
Notes:
- If forceSweep is used to lower a DOT wallet's balance below 1 DOT, and the value of the transaction does not set the balance to zero, the transaction will fail. To avoid failed transactions, either the entire wallet should be emptied, or a balance of more than 1 DOT should remain.
- Due to a known limitation, forceSweep does not work if the wallet consists of an exact balance of 1 DOT/0.01 WND/0.000333333 KSM.
Polkadot transaction fees
Polkadot transaction fees consist of a fixed base fee, a fee-per-byte rate multiplied by the transaction’s size, plus an optional tip. You can change the tip amount according to the transaction’s priority level or enter a custom amount. When you set a tip amount, Fireblocks automatically calculates the total transaction fee by adding the tip amount and network fee together. However, only the tip amount is shown in the Console.
Polkadot uses a weight-based fee model as opposed to a gas-metering model. Fees are charged before transaction execution. Once the fee is paid, nodes will execute the transaction.
Fee estimation using the API
You can estimate the tip using the estimate network fee endpoint via the API. This returns the tip, not the total fee, which is based on the transaction weight and is calculated when creating a transaction.