ckBTC and Chain Fusion is a killer feature for the Internet Computer, as a developer of an app that uses this feature we love it, and would like the world to use it.
However, as it stands today the withdrawal limit makes it useless for small transactions that the user wants to settle on the Bitcoin network.
The current minimum ckBTC that can be transferred to the Bitcoin network is about USD $40 at the current Bitcoin price as you can see from the screenshot I attach.
In order to compete with the Lightning Network, and bring more Bitcoin users to the Internet Computer DFINITY must do all it can to lower this value to a very small minimum. I do suggest make that the price of a cup of coffee, or lower, that would be about USD 5, not the current $ 40.
I do hope this is possible, and would appreciate any feedback on this topic. I just found out myself while doing testing for Satoshi Notes.
this is mostly due to security reasons to ensure that the Bitcoin transactions are eventually being confirmed by the Bitcoin network without any human interaction.
I agree that it would be awesome to be able to withdraw a lower amount. IMO we could also think about changing ckBTC fees for transfers and approvals. That is a totally different topic which I do not want to touch deeply at this point.
I think ckBTC is competitive as far as (ICRC) transfers are concerned.
Withdrawing bitcoin is something else entirely because it obviously requires a Bitcoin transaction, which can be costly.
As I mentioned in the post linked by @marc0olo, the withdrawal limit is kept relatively high for security reasons. Apart from that, does it make sense to withdraw 5$ worth of bitcoin if the network fee is 1$ or (much) more, i.e., the fee can be anywhere between around 20% to 100%?
First thanks for taking the time to answer, and thanks also to @marc0olo.
Prices in the Bitcoin network are far lower than the numbers you quote, to send about $9 USD equivalent in Bitcoin cost me about USD 0.65 cents.
So it is not hard to lower the ckBTC to Bitcoin minimum to a figure lower than $40, why not $10 or $20 instead? Remember that if the price of Bitcoin rises the current $40 could easily be double that number.
I am attaching the receipts of these fees, and the Mempool that shows them at the bottom of this post. I sent this to the Bitcoin address of my wallet on the IC, and yes it worked perfectly.
That is why given that ckBTC and Chain Fusion support for Bitcoin are one of the killer features of the Internet Computer I do think that it would be beneficial for DFINITY, us the developers, Bitcoiners and the whole Internet Computer community to lower this fee as much as possible, and to make the whole Bitcoin support better, and better.
As I said, it is a security feature. Check out the Transactions section for a detailed explanation.
Yes, it is a conservative limit but there is likely little appetite to increase risk just to make it possible to retrieve smaller amounts.
Of course, anybody is free to create such a service, that is, a canister that accepts small amounts of ckBTC and returns bitcoins (and the people providing bitcoins to the canister receive parts of the fees).
Okay, I just read it, not easy to understand by the average Bitcoiner for sure.
But it seems that you decided on this limit to ensure that the BIP-125 Bitcoin’s request by fee (RBF) mechanism not be used against people who hold ckBTC and want to transfer it to the main Bitcoin network.
It seems that if the transactions are kept at 0.0005 BTC or above it becomes almost impossible for an attacker to jump over, or cancel our transaction by paying a large fee. Am I correct in this interpretation? If not please explain.
If this is the case, then it would also mean that any Bitcoin transaction that is below USD $40 today could easily be attacked in the Mempool by BIP-125. Can you explain what this attack would do exactly? Is it just a delay, or an actual cancellation of the operation that would force us to do it again?
P.S. Apologies if I continue to insist with these questions, but believe me Bitcoiners are frequently a mean and demanding bunch, and they will always look for ways to criticize any side chain, L2, or non-Bitcoin way, that is why we must be fully prepared to answer to them.
I think the way the ckBTC minter works is that in order to serve one withdrawal request it picks a set of available UTXOs and pays the withdrawal from that, and then has to make sure that the withdrawal will be served from that set of outputs. It will never change the set of UTXOs for this withdrawal nor add any additional UTXOs to it if the withdrawal does not get confirmed. The only thing the ckBTC minter will do is use RBF to decrease the amount that goes to the user and increase the amount that goes to the Bitcoin network fee. The 50k sats minimum withdrawal amount is chosen based on the assumption that it will always be possible to get a transaction confirmed with 50k sats in fees. Albeit, of course in this extreme case, the withdrawal of 50k sats would be quite useless because all of it would go to miners and 0 would go to the user.
So the reason of the minimum withdrawal amount is that the ckBTC minter’s logic is not as smart as it could (theoretically) be. That’s because it is very hard to program fully automated, non-interactive Bitcoin wallet logic because UTXO handling is so difficult problem. A smarter version could theoretically double spend non-confirming withdrawals and add UTXOs to them, etc.
But back to your problem of making small withdrawals. I have the exact same problem and am looking for a solution. I already wanted to start what @THLO proposed: a canister where people can provide Bitcoin liquidity, that accepts ckBTC deposits from users and then processes a small Bitcoin withdrawal for them. If anyone is interested in building this then please let me know. I will offer support and even a grant for it.
The way I would do it is a little different than how the ckBTC minter works. I would always consolidate all new Bitcoin liquidity deposits plus the current existing pool with one big transaction into a single output. And I would always batch-serve all withdrawal requests in a given collection period (say 10 minutes) with one big transaction. That way, we have a single linear chain of transactions, all new deposits are merged in and all withdrawal split off from it. If a withdrawal is not confirmed due to low fee then it can be replaced with RBF or the next withdrawal can build on the unconfirmed last withdrawal. The miners see this as a set of two dependent unconfirmed transactions and will look at the combined fee for the two of them. If the first withdrawal does not confirm then the fee of the next withdrawal can be raised and increase the chances for the confirmation of both. In either case (RBF or chaining unconfirmed transactions) the full pool amount is available for fees so that there should never be any problem.
It would be a very nice application that could end up being simpler than the ckBTC minter and serve user with small withdrawals. I agree that user will want to withdraw in the order of $5 if fees are <1$ at the moment. What might also be important for small amounts is that users want to know the received amount in advance, something that ckBTC minter cannot give you. That is because users want to pay for stuff with the withdrawal, so the amount has to be exact. If they have to pay $5 for something they don’t want to withdraw $10 to their other Bitcoin wallet, hoping they get some amount >$5 out, and pay in two hops paying twice the Bitcoin network fee. That doesn’t work. So this service is absolutely needed.
Timo, thanks for the comprehensive explanation. It seems it is not so simple to move funds from the IC to the Bitcoin network, and those 50,000 SATS ensure that it is always done.
Can you share some statistics on what is the usual fee required to move the BTC from the IC to the Bitcoin network? Given the low fees today in the actual Bitcoin network, I hope the IC fees are reasonable.
About the new architecture for the Bitcoin canister, I do hope this happens and that lower minimums for ICP to BTC network are achieved. I am interested in any effort that wants to do that, including applying to make it happen via a grant. We have worked for a year now with the ICs Bitcoin functionality, it’s pretty good except this fund transfer between the ICP network and the BTC network.
I have seen withdrawal fees of around 1400 sats lately.
Bitcoin wallets simply aren’t simple to begin with. And implementing one in a canister is even harder. It would be huge if we could solve that somehow. Oisy has the same problem and, as a result, it’s user experience related to native Bitcoin is far from that of normal Bitcoin wallets.
We’ve been building Bitcoin related software for over a year now on ICP.
I think we know the ins and outs well, especially from a user perspective.
From a technical perspective this would be my two end goals:
An API that enables any ICP developer to abstract away the whole Internet Computer, the same way that Odin.fun has done.
An API powered wallet for Bitcoin and ICP, one that can be used by any IC developer and easily added to a canister.
Some of the in-between milestones related to what I wrote on this thread, and the solution you mentioned:
Better Bitcoin to Canister interaction, a better overall architecture that allows us to compete with the Lightning Network at the low range of $5 to $10.
Ease of transfer back and forth to the Bitcoin network from $10 instead of $40.
Creation of Bitcoin pools that receive rewards for liquidity, and allow for easier back and forth transfer of Bitcoin. Some resemblance to the Lightning Network, but much more simple because the IC provides a backbone for secure transactions already.
I would love to lead the creation of this in stages, it for sure can be done, but I do trust you that is not easy, otherwise you would have done it already
I am interested in this a lot, DM me if you are too.