Pages:
Author

Topic: Intentionally make a transaction slower - page 2. (Read 520 times)

copper member
Activity: 821
Merit: 1992
March 20, 2022, 03:01:19 AM
#12
Quote
Such a transaction could be seen as "not-finalized" so it shouldn't be propagated in first place.
It shouldn't be, but it technically can be, as long as it will not be placed in a block. And that could be useful in some protocols, like "sell this for 1 BTC". All that is needed is creating transaction, for example as "0.5 BTC -> 1.5 BTC" and sign it with such sighash. Then, the buyer could attach some input and accept the trade. By the way, this sighash has some nice properties:

negative fee, "0.5 BTC -> 1.5 BTC": Sell something for 1 BTC.
zero fee, "0.5 BTC -> 0.5 BTC": Move coins for free, so "you pay my fees" transaction.
positive fee, "0.5 BTC -> 0 BTC (OP_RETURN?)": Donation to anyone (probably miner, unless combined with something else).

Also, SIGHASH_SINGLE bug could be used in the last case, just to reduce transaction size and skip one output. Or maybe SIGHASH_NONE, it would be even better (unless there is some amount left, then SIGHASH_SINGLE would do the trick).
legendary
Activity: 3472
Merit: 10611
March 19, 2022, 10:50:02 PM
#11
The means of creating the transaction is irrelevant. The point is that you could create a tx with a negative fee (by modifying software the creates transactions), however that no miner is ever going to intentionally accept this transaction into their block. Doing so would not be rational.
You don't have to modify the software to sign a transaction with SIGHASH_SINGLE|SIGHASH_ANYONECANPAY sighashtype flag. You just have to use the bitcoin core console since the UI doesn't have the option.
https://bitcoincore.org/en/doc/22.0.0/rpc/rawtransactions/signrawtransactionwithkey/
Such a transaction could be seen as "not-finalized" so it shouldn't be propagated in first place.
sr. member
Activity: 1190
Merit: 469
March 19, 2022, 08:18:24 PM
#10

The means of creating the transaction is irrelevant. The point is that you could create a tx with a negative fee (by modifying software the creates transactions), however that no miner is ever going to intentionally accept this transaction into their block. Doing so would not be rational.

the miner would have to subsidize the transaction using their block reward or some other mechanism.
copper member
Activity: 1666
Merit: 1901
Amazon Prime Member #7
March 19, 2022, 06:38:45 PM
#9
Quote
No economically rational miner is going to accept a negative fee transaction.
A negative fee transaction is invalid, unless it uses some sighashes, where it is possible to make it valid by adding some inputs. But even then, you probably need to recompile your client to reach that. Or you could have some proxy that would capture invalid transactions and store some of them, but probably doing changes in Bitcoin Core and making a custom version that would store more transactions would be easier.
The means of creating the transaction is irrelevant. The point is that you could create a tx with a negative fee (by modifying software the creates transactions), however that no miner is ever going to intentionally accept this transaction into their block. Doing so would not be rational.
copper member
Activity: 909
Merit: 2301
March 18, 2022, 05:11:14 AM
#8
Quote
No economically rational miner is going to accept a negative fee transaction.
A negative fee transaction is invalid, unless it uses some sighashes, where it is possible to make it valid by adding some inputs. But even then, you probably need to recompile your client to reach that. Or you could have some proxy that would capture invalid transactions and store some of them, but probably doing changes in Bitcoin Core and making a custom version that would store more transactions would be easier.

Quote
the only correct answer is to use nLockTime to make the transaction invalid until x blocks in the future
It could be also possible to add some difficulty to the transaction, if some opcodes like OP_CAT or OP_SUBSTR would be re-enabled in TapScript.
copper member
Activity: 1666
Merit: 1901
Amazon Prime Member #7
March 18, 2022, 04:36:48 AM
#7
Also, it used to be possible to make zero-fee transactions. Is this still possible in 2022?
You can manually construct a transaction even with negative fees. The question is will nodes or miners accept such a transaction?

Almost all nodes won't accept 0-fee transaction since it's default Bitcoin Core behavior. Miner might include it, but you need to find out how to make your transaction enter miner mempool.
No economically rational miner is going to accept a negative fee transaction. At least not intentionally. Some miners will allow for people to send transactions directly to them, with the guarantee the transaction will be included in the miner's (next) block, in exchange for a fee. I am curious if any of these miners have their software configured to reject transactions that include a negative transaction fee.


To answer the OP's question directly, the only correct answer is to use nLockTime to make the transaction invalid until x blocks in the future.
legendary
Activity: 3472
Merit: 10611
March 18, 2022, 01:16:30 AM
#6
Like taking 10 blocks or more to confirm?
Another way of looking at your question is that you are asking for a way to put an additional and unnecessary burden on other nodes.
A transaction that is not going to be mined for n number of blocks is going to cost the node that holds it in its mempool. It takes up space in the memory and also consumes bandwidth when they have to relay it to other nodes which is increased with n.
copper member
Activity: 821
Merit: 1992
March 18, 2022, 12:39:16 AM
#5
Quote
Also, it used to be possible to make zero-fee transactions. Is this still possible in 2022?
You can make it in Bitcoin Core by using createrawtransaction. You can even send that to some nodes, if they have this setup in their bitcoin.conf:
Code:
minrelaytxfee=0.00000000
blockmintxfee=0.00000000
But by default, miners don't accept free transactions (and nodes that do, usually also have other default settings like 300 MB max mempool size, also they will get the highest fees first anyway, because that's how getblocktemplate works with default settings).

Quote
You can manually construct a transaction even with negative fees. The question is will nodes or miners accept such a transaction?
Do you mean using SIGHASH_SINGLE|SIGHASH_ANYONECANPAY, where the output is higher than the input? Then yes, in this case someone can pay fees for you.
legendary
Activity: 2744
Merit: 3097
Top Crypto Casino
March 17, 2022, 07:40:42 AM
#4
You can use either nLockTime or CheckLockTimeVerify opcode based on your needs.
Specifying an nLockTime value greater than the current block height will ensure your transaction will remain invalid and can't be mined till the block height become less than or equal to nLockTime.
CLTV, on the other hand, is used to time-lock the output(s) of the transaction not the transaction itself. Meaning that your transaction can be confirmed but the receiver can't spend the outpu(s) before the specified block height.
You can read more about TimeLocks here:
https://en.bitcoin.it/wiki/Timelock
You can create a time locked address with coinb.in (do it offline) and the coins you send to the generated address will be locked until the block height/date condition is met.
legendary
Activity: 2870
Merit: 7490
Crypto Swap Exchange
March 17, 2022, 07:20:43 AM
#3
Can we think of any other ways?

Setup script to broadcast your transaction on specific time/date.

Also, it used to be possible to make zero-fee transactions. Is this still possible in 2022?
You can manually construct a transaction even with negative fees. The question is will nodes or miners accept such a transaction?

Almost all nodes won't accept 0-fee transaction since it's default Bitcoin Core behavior. Miner might include it, but you need to find out how to make your transaction enter miner mempool.
legendary
Activity: 2464
Merit: 4415
🔐BitcoinMessage.Tools🔑
March 17, 2022, 04:55:59 AM
#2
I can only think of one obvious way, paying a very low fee. Obviously this would only work when the network is congested.

Can we think of any other ways?
If you don't want your transaction to be included in a block right away, you simply don't broadcast it to the network and wait for as many blocks as you want.

Also, it used to be possible to make zero-fee transactions. Is this still possible in 2022?
 
You can manually construct a transaction even with negative fees. The question is will nodes or miners accept such a transaction?

Also read this: https://bitcoin.stackexchange.com/questions/91124/how-to-send-zero-fee-bitcoin-transaction

full member
Activity: 209
Merit: 148
March 17, 2022, 04:39:01 AM
#1
Usually people want their transactions to confirm as fast as possible, but I was wondering, are there ways of making a transaction slower to confirm? Like taking 10 blocks or more to confirm?

I can only think of one obvious way, paying a very low fee. Obviously this would only work when the network is congested.

Can we think of any other ways?

Also, it used to be possible to make zero-fee transactions. Is this still possible in 2022?
 
Pages:
Jump to: