diff --git a/bip-0010.mediawiki b/bip-0010.mediawiki index 7e6015cc..268a6047 100644 --- a/bip-0010.mediawiki +++ b/bip-0010.mediawiki @@ -95,7 +95,7 @@ In this transaction, there are two inputs, one of 150 BTC and the other of 12 BT The style of communication is taken directly from PGP/GPG, which uses blocks of ASCII like this to communicate encrypted messages and signatures. This serialization is compact, and will be interpreted the same in all character encodings. It can be copied inline into an email, or saved in a text file. The advantage over the analogous PGP encoding is that there are some human readable elements to it, for users that wish to examine the TxDP packet manually, instead of requiring a program to parse the core elements of the TxDP. -A party receiving this TxDP can simply add their signature to the appropriate _TXINPUT_ line. If that is the last signature required, they can broadcast it themselves. Any software that implements this standard should be able to combine multiple TxDPs into a single TxDP. However, even without the programmatic support, a user could manually combine them by copying the appropriate _TXSIGS_ lines between serializations, though it is not the recommended method for combining TxDPs. +A party receiving this TxDP can simply add their signature to the appropriate _TXINPUT_ line. If that is the last signature required, they can broadcast it themselves. Any software that implements this standard should be able to combine multiple TxDPs into a single TxDP. However, even without the programmatic support, a user could manually combine them by copying the appropriate _SIG_ lines between serializations, though it is not the recommended method for combining TxDPs. == Reference Implementation == diff --git a/bip-0016.mediawiki b/bip-0016.mediawiki index abc27d66..4e8ba139 100644 --- a/bip-0016.mediawiki +++ b/bip-0016.mediawiki @@ -58,7 +58,7 @@ Examples: +3 signature operations: {2 [pubkey1] [pubkey2] [pubkey3] 3 OP_CHECKMULTISIG} -+22 signature operations ++22 signature operations: {OP_CHECKSIG OP_IF OP_CHECKSIGVERIFY OP_ELSE OP_CHECKMULTISIGVERIFY OP_ENDIF} ==Rationale== @@ -74,7 +74,7 @@ The signature operation counting rules are intended to be easy and quick to impl There is a 1-confirmation attack on old implementations, but it is expensive and difficult in practice. The attack is: # Attacker creates a pay-to-script-hash transaction that is valid as seen by old software, but invalid for new implementation, and sends themselves some coins using it. -# Attacker also creates a standard transaction that spends the pay-to-script transaction, and pays the victim who is running old software. +# Attacker also creates a standard transaction that spends the pay-to-script-hash transaction, and pays the victim who is running old software. # Attacker mines a block that contains both transactions. If the victim accepts the 1-confirmation payment, then the attacker wins because both transactions will be invalidated when the rest of the network overwrites the attacker's invalid block. @@ -116,4 +116,5 @@ https://gist.github.com/gavinandresen/3966071 * [[bip-0016/qa.mediawiki|Quality Assurance test checklist]] == References == - + + diff --git a/bip-0119/simulation.py b/bip-0119/simulation.py index e40d61e6..d8d807b2 100755 --- a/bip-0119/simulation.py +++ b/bip-0119/simulation.py @@ -11,7 +11,7 @@ MAX_BLOCK_SIZE = 1e6 AVG_INTERVAL = 10*60 TXNS_PER_SEC = 0.5*MAX_BLOCK_SIZE/AVG_TX/AVG_INTERVAL MAX_MEMPOOL = MAX_BLOCK_SIZE * 100 -COMPRESSABLE = 0.05 +COMPRESSIBLE = 0.05 @@ -59,7 +59,7 @@ def compressed(rate_multiplier = 1): block_time = np.random.exponential(AVG_INTERVAL) total_time[i] = block_time txns = np.random.poisson(rate_multiplier*get_rate(phase)*block_time) - postponed = txns * COMPRESSABLE + postponed = txns * COMPRESSIBLE weight = (txns-postponed)*AVG_TX + backlog secondary_backlog += postponed*133 + postponed*34 # Total extra work if weight > MAX_BLOCK_SIZE: @@ -88,7 +88,7 @@ if __name__ == "__main__": compressed_txs2, unspendable2, blocktimes_c2 = compressed(2) fig, host = plt.subplots() - host.set_title("Transaction Compression Performance with %d%% Adoption During Spike"%(100*COMPRESSABLE)) + host.set_title("Transaction Compression Performance with %d%% Adoption During Spike"%(100*COMPRESSIBLE)) fig.subplots_adjust(right=0.75) par1 = host.twinx() par2 = host.twinx() diff --git a/bip-0327/reference.py b/bip-0327/reference.py index c34e8c1e..5b8d114f 100644 --- a/bip-0327/reference.py +++ b/bip-0327/reference.py @@ -4,7 +4,7 @@ # be used in production environments. The code is vulnerable to timing attacks, # for example. -from typing import Any, List, Optional, Tuple, NewType, NamedTuple +from typing import List, Optional, Tuple, NewType, NamedTuple import hashlib import secrets import time diff --git a/bip-0330/minisketch.py b/bip-0330/minisketch.py index 5e397793..88174513 100755 --- a/bip-0330/minisketch.py +++ b/bip-0330/minisketch.py @@ -1,5 +1,7 @@ #!/usr/bin/env python3 +import random + ######## ENCODING and DECODING ######## FIELD_BITS = 32 @@ -31,8 +33,6 @@ def sketch(shortids, capacity): ######## DECODING only ######## -import random - def inv(x): """Compute 1/x in GF(2^FIELD_BITS)""" t = x @@ -154,4 +154,3 @@ def decode(sketch): else: sums.append(odd_sums[(i+1)//2]) return find_roots(list(reversed(berlekamp_massey(sums)))) - diff --git a/bip-0340/reference.py b/bip-0340/reference.py index b327e0a2..912ffd91 100644 --- a/bip-0340/reference.py +++ b/bip-0340/reference.py @@ -1,6 +1,5 @@ from typing import Tuple, Optional, Any import hashlib -import binascii # Set DEBUG to True to get a detailed debug output including # intermediate values during key generation, signing, and diff --git a/bip-0352/bitcoin_utils.py b/bip-0352/bitcoin_utils.py index ee55f2d3..9e279e45 100644 --- a/bip-0352/bitcoin_utils.py +++ b/bip-0352/bitcoin_utils.py @@ -33,7 +33,7 @@ def deser_txid(txid: str): def deser_compact_size(f: BytesIO): view = f.getbuffer() - nbytes = view.nbytes; + nbytes = view.nbytes view.release() if (nbytes == 0): return 0 # end of stream diff --git a/bip-0388.mediawiki b/bip-0388.mediawiki index adb26cf1..7d3f3d6d 100644 --- a/bip-0388.mediawiki +++ b/bip-0388.mediawiki @@ -35,7 +35,7 @@ This BIP is licensed under the BSD 2-clause license. Unfortunately, descriptors are not a perfect match for the typical usage of hardware signing devices (often also called ''hardware wallets''). Most of them have some of the following limitations when compared to a general-purpose machine running Bitcoin Core: -* they are embedded devices with limited RAM, and computational power; +* they are embedded devices with limited RAM and computational power; * they cannot import additional private keys (that is, they can only sign with keys derived from a single seed via [[bip-0032.mediawiki|BIP-32]]); * they have limited storage, or they might not have persistent storage at all (''stateless design''). @@ -74,7 +74,7 @@ It is out of scope for this document to guarantee that users do not reuse extend ==== UX issues ==== -Miniscript (and taproot trees) allow substantially more complex spending policies. It is a challenge to ensure that the user can practically verify such spending policies per the screen. +Miniscript (and taproot trees) allow substantially more complex spending policies. It is a challenge to ensure that the user can practically verify such spending policies on the screen. We set two fundamental design goals: * Minimize the amount of information that is shown on screen - so that the user can actually validate it. @@ -124,7 +124,7 @@ This section formally defines wallet policies, and how they relate to output scr === Formal definition === -A ''wallet policy'' is composed by a ''wallet descriptor template'', together with a vector of ''key information items''. +A ''wallet policy'' is composed of a ''wallet descriptor template'', together with a vector of ''key information items''. ==== Wallet descriptor template ==== @@ -309,7 +309,7 @@ The following descriptor templates are invalid: * sh(multi(1,@0/**,@0/**)): Repeated keys with the same path expression * sh(multi(1,@0/<0;1>/*,@0/<1;2>/*)): Non-disjoint multipath expressions (@0/1/* appears twice) * sh(multi(1,@0/**,xpub6AHA9hZDN11k2ijHMeS5QqHx2KP9aMBRhTDqANMnwVtdyw2TDYRmF8PjpvwUFcL1Et8Hj59S3gTSMcUQ5gAqTz3Wd8EsMTmF3DChhqPQBnU/<0;1>/*)): Expression with a non-KP key present -* pkh(@0/<0;1;2>/*): Solved cardinality > 2 +* pkh(@0/<0;1;2>/*): Allowed cardinality > 2 * tr(musig(@0/**,@1/**)): Derivation before aggregation is not allowed in wallet policies (despite being allowed in [[bip-0390.mediawiki|BIP-390]]) Remark: some of the examples of invalid descriptor templates may be valid via optional extensions. diff --git a/bip-0443.mediawiki b/bip-0443.mediawiki index aa3879c8..0bcf045b 100644 --- a/bip-0443.mediawiki +++ b/bip-0443.mediawiki @@ -176,7 +176,7 @@ If the is non-empty, then the additive tweak for the data is In the following, the ''current input'' is the input whose script is being executed. -The following value of the are defined: +The following values of the are defined: * CCV_MODE_CHECK_INPUT = -1: Check an input's script; no amount check. * CCV_MODE_CHECK_OUTPUT = 0: Check an output's script; preserve the (possibly residual) amount. * CCV_MODE_CHECK_OUTPUT_IGNORE_AMOUNT = 1: Check an output's script; ignore amounts. @@ -252,7 +252,7 @@ This is executed at the beginning of the evaluation of each input's script. It i the full amount of the current input. - residual_input_amount = input[this_input_index].amount + residual_input_amount = inputs[this_input_index].amount ==== OP_CHECKCONTRACTVERIFY evaluation ==== diff --git a/scripts/buildtable.pl b/scripts/buildtable.pl index bc9e4b5f..ae231970 100755 --- a/scripts/buildtable.pl +++ b/scripts/buildtable.pl @@ -199,7 +199,8 @@ while (++$bipnum <= $topbip) { die "First Comments-URI must be exactly \"$first_comments_uri\" in $fn" unless $val eq $first_comments_uri; } } elsif (exists $DateField{$field}) { - die "Invalid date format in $fn" unless $val =~ /^20\d{2}\-(?:0\d|1[012])\-(?:[012]\d|30|31)$/; + # Enforce date format 20XX-MM-DD, where XX is 00-99, MM is 01-12 and DD is 01-31 + die "Invalid date format in $fn" unless $val =~ /^20\d{2}\-(?:0[1-9]|1[0-2])\-(?:0[1-9]|[12]\d|30|31)$/; } elsif (exists $EmailField{$field}) { $val =~ m/^(\S[^<@>]*\S) \<[^@>]*\@[\w.]+\.\w+\>$/ or die "Malformed $field line in $fn"; } elsif (not exists $MiscField{$field}) { diff --git a/scripts/link-format-chk.sh b/scripts/link-format-chk.sh index 08c8ef39..b0d14849 100755 --- a/scripts/link-format-chk.sh +++ b/scripts/link-format-chk.sh @@ -8,7 +8,7 @@ ECODE=0 for fname in *.mediawiki; do - GRES=$(grep -n '](http' $fname) + GRES=$(grep -n '](http' "$fname") if [ "$GRES" != "" ]; then if [ $ECODE -eq 0 ]; then >&2 echo "Github Mediawiki format writes link as [URL text], not as [text](url):"