📅 Original date posted:2021-07-22
📝 Original message:Hello list,
Someone reviewing my taproot privacy BIP proposal suggested
clarification on the spec, so I've written some python-like pseudocode.
It implements the suggestion of choosing a random input instead of the
first one.
Some wallet teams are already working on implementing taproot for their
on-chain app. I urge wallet developers to include this BIP as well, so
that their user's spends will improve the privacy and fungibility of
off-chain protocols. Also, and admittedly a less urgently,
anti-fee-sniping will improve the incentives for miners in the
low-inflation future of bitcoin.
As before find the latest version of this BIP here:
https://gist.github.com/chris-belcher/903feab321bf41055c91eaec46581e89
def apply_anti_fee_sniping_fields(transaction):
# bip68 requires v=2
transaction.version = 2
# always set nlocktime if any of the transaction inputs have more
# confirmations than 65535 or are taproot inputs
# otherwise choose either nlocktime or nsequence with 50% odds
if any(map(lambda input: input.confirmations() > 65535
|| input.is_taproot(), transaction.inputs))\
|| randint(2) == 0:
transaction.nlocktime = blockchain.height()
if randint(10) == 0:
transaction.nlocktime = max(0, transaction.nlocktime
- randint(0, 99))
else:
input_index = randint(len(transaction.inputs))
transaction.inputs[input_index].nsequence = transaction.inputs\
[input_index].confirmations()
if randint(10) == 0:
transaction.inputs[input_index].nsequence = max(0,
transaction.inputs[input_index].nsequence
- randint(0, 99))