diff --git a/Backup-codes-fullingtonamanda074.txt b/Backup-codes-fullingtonamanda074.txt new file mode 100644 index 0000000..53e0125 --- /dev/null +++ b/Backup-codes-fullingtonamanda074.txt @@ -0,0 +1,14 @@ +SAVE YOUR BACKUP CODES +Keep these backup codes somewhere safe but accessible. + +1. 8134 7585 6. 5819 7838 +2. 4992 3817 7. 7053 0676 +3. 1499 2848 8. 8290 8141 +4. 0305 7161 9. 0101 6188 +5. 2986 6446 10. 6076 3525 + +(fullingtonamanda074@gmail.com) + +* You can only use each backup code once. +* Need more? Visit https://g.co/2sv +* These codes were generated on: Mar 28, 2023. \ No newline at end of file diff --git a/Fair Use Doctrine and the Digital Millennium Copyright Act_ Does.pdf b/Fair Use Doctrine and the Digital Millennium Copyright Act_ Does.pdf new file mode 100644 index 0000000..7ff4cc7 Binary files /dev/null and b/Fair Use Doctrine and the Digital Millennium Copyright Act_ Does.pdf differ diff --git a/SHA256SUMS.ots b/SHA256SUMS.ots new file mode 100644 index 0000000..4e1764f Binary files /dev/null and b/SHA256SUMS.ots differ diff --git a/appveyor.yml b/appveyor.yml new file mode 100644 index 0000000..ac39fe2 --- /dev/null +++ b/appveyor.yml @@ -0,0 +1,58 @@ +version: '{branch}.{build}' +skip_tags: true +image: Visual Studio 2017 +configuration: Release +platform: x64 +clone_depth: 5 +environment: + APPVEYOR_SAVE_CACHE_ON_ERROR: true + CLCACHE_SERVER: 1 + PACKAGES: berkeleydb boost-filesystem boost-signals2 boost-test libevent openssl rapidcheck zeromq + PATH: 'C:\Python37-x64;C:\Python37-x64\Scripts;%PATH%' + PYTHONUTF8: 1 +cache: +- C:\tools\vcpkg\installed -> .appveyor.yml +- C:\Users\appveyor\clcache -> .appveyor.yml, build_msvc\**, **\Makefile.am, **\*.vcxproj.in +install: +- cmd: pip install --quiet git+https://github.com/frerich/clcache.git@v4.2.0 +# Disable zmq test for now since python zmq library on Windows would cause Access violation sometimes. +# - cmd: pip install zmq +- cmd: echo set(VCPKG_BUILD_TYPE release) >> C:\tools\vcpkg\triplets\%PLATFORM%-windows-static.cmake +- cmd: vcpkg remove --outdated --recurse +- cmd: vcpkg install --triplet %PLATFORM%-windows-static %PACKAGES% > NUL +before_build: +- ps: clcache -M 536870912 +- cmd: python build_msvc\msvc-autogen.py +- ps: $files = (Get-ChildItem -Recurse | where {$_.extension -eq ".vcxproj"}).FullName +- ps: for (${i} = 0; ${i} -lt ${files}.length; ${i}++) { + ${content} = (Get-Content ${files}[${i}]); + ${content} = ${content}.Replace("", "None"); + ${content} = ${content}.Replace("true", "false"); + Set-Content ${files}[${i}] ${content}; + } +- ps: Start-Process clcache-server +- ps: fsutil behavior set disablelastaccess 0 # Enable Access time feature on Windows (for clcache) +build_script: +- cmd: msbuild /p:TrackFileAccess=false /p:CLToolExe=clcache.exe build_msvc\bitcoin.sln /m /v:q /nologo +after_build: +- ps: fsutil behavior set disablelastaccess 1 # Disable Access time feature on Windows (better performance) +- ps: clcache -z +before_test: +- ps: ${conf_ini} = (Get-Content([IO.Path]::Combine(${env:APPVEYOR_BUILD_FOLDER}, "test", "config.ini.in"))) +- ps: ${conf_ini} = ${conf_ini}.Replace("@abs_top_srcdir@", ${env:APPVEYOR_BUILD_FOLDER}) +- ps: ${conf_ini} = ${conf_ini}.Replace("@abs_top_builddir@", ${env:APPVEYOR_BUILD_FOLDER}) +- ps: ${conf_ini} = ${conf_ini}.Replace("@EXEEXT@", ".exe") +- ps: ${conf_ini} = ${conf_ini}.Replace("@ENABLE_WALLET_TRUE@", "") +- ps: ${conf_ini} = ${conf_ini}.Replace("@BUILD_BITCOIN_CLI_TRUE@", "") +- ps: ${conf_ini} = ${conf_ini}.Replace("@BUILD_BITCOIND_TRUE@", "") +- ps: ${conf_ini} = ${conf_ini}.Replace("@ENABLE_ZMQ_TRUE@", "") +- ps: ${utf8} = New-Object System.Text.UTF8Encoding ${false} +- ps: '[IO.File]::WriteAllLines([IO.Path]::Combine(${env:APPVEYOR_BUILD_FOLDER}, "test", "config.ini"), ${conf_ini}, ${utf8})' +- ps: move "build_msvc\${env:PLATFORM}\${env:CONFIGURATION}\*.exe" src +test_script: +- cmd: src\test_bitcoin.exe -k stdout -e stdout 2> NUL +- cmd: src\bench_bitcoin.exe -evals=1 -scaling=0 > NUL +- ps: python test\util\bitcoin-util-test.py +- cmd: python test\util\rpcauth-test.py +- cmd: python test\functional\test_runner.py --ci --quiet --combinedlogslen=4000 --failfast +deploy: off diff --git a/bip-0173.mediawiki b/bip-0173.mediawiki new file mode 100644 index 0000000..1fdd8be --- /dev/null +++ b/bip-0173.mediawiki @@ -0,0 +1,405 @@ +
+  BIP: 173
+  Layer: Applications
+  Title: Base32 address format for native v0-16 witness outputs
+  Author: Pieter Wuille 
+          Greg Maxwell 
+  Comments-Summary: No comments yet.
+  Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0173
+  Status: Final
+  Type: Informational
+  Created: 2017-03-20
+  License: BSD-2-Clause
+  Replaces: 142
+
+ +==Introduction== + +===Abstract=== + +This document proposes a checksummed base32 format, "Bech32", and a standard for native segregated witness output addresses using it. + +===Copyright=== + +This BIP is licensed under the 2-clause BSD license. + +===Motivation=== + +For most of its history, Bitcoin has relied on base58 addresses with a +truncated double-SHA256 checksum. They were part of the original +software and their scope was extended in +[https://github.com/bitcoin/bips/blob/master/bip-0013.mediawiki BIP13] +for Pay-to-script-hash +([https://github.com/bitcoin/bips/blob/master/bip-0016.mediawiki P2SH]). +However, both the character set and the checksum algorithm have limitations: +* Base58 needs a lot of space in QR codes, as it cannot use the ''alphanumeric mode''. +* The mixed case in base58 makes it inconvenient to reliably write down, type on mobile keyboards, or read out loud. +* The double SHA256 checksum is slow and has no error-detection guarantees. +* Most of the research on error-detecting codes only applies to character-set sizes that are a [https://en.wikipedia.org/wiki/Prime_power prime power], which 58 is not. +* Base58 decoding is complicated and relatively slow. + +Included in the Segregated Witness proposal are a new class of outputs +(witness programs, see +[https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki BIP141]), +and two instances of it ("P2WPKH" and "P2WSH", see +[https://github.com/bitcoin/bips/blob/master/bip-0143.mediawiki BIP143]). +Their functionality is available indirectly to older clients by embedding in P2SH +outputs, but for optimal efficiency and security it is best to use it +directly. In this document we propose a new address format for native +witness outputs (current and future versions). + +This replaces +[https://github.com/bitcoin/bips/blob/master/bip-0142.mediawiki BIP142], +and was previously discussed +[https://bitcoincore.org/logs/2016-05-zurich-meeting-notes.html#base32 here] (summarized +[https://bitcoincore.org/en/meetings/2016/05/20/#error-correcting-codes-for-future-address-types here]). + +===Examples=== + +All examples use public key +0279BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798. +The P2WSH examples use key OP_CHECKSIG as script. + +* Mainnet P2WPKH: bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4 +* Testnet P2WPKH: tb1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx +* Mainnet P2WSH: bc1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3qccfmv3 +* Testnet P2WSH: tb1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3q0sl5k7 + +==Specification== + +We first describe the general checksummed base32'''Why use base32 at all?''' The lack of mixed case makes it more +efficient to read out loud or to put into QR codes. It does come with a 15% length +increase, but that does not matter when copy-pasting addresses. format called +''Bech32'' and then define Segregated Witness addresses using it. + +===Bech32=== + +A Bech32'''Why call it Bech32?''' "Bech" contains the characters BCH (the error +detection algorithm used) and sounds a bit like "base". string is at most 90 characters long and consists of: +* The '''human-readable part''', which is intended to convey the type of data, or anything else that is relevant to the reader. This part MUST contain 1 to 83 US-ASCII characters, with each character having a value in the range [33-126]. HRP validity may be further restricted by specific applications. +* The '''separator''', which is always "1". In case "1" is allowed inside the human-readable part, the last one in the string is the separator'''Why include a separator in addresses?''' That way the human-readable +part is unambiguously separated from the data part, avoiding potential +collisions with other human-readable parts that share a prefix. It also +allows us to avoid having character-set restrictions on the human-readable part. The +separator is ''1'' because using a non-alphanumeric character would +complicate copy-pasting of addresses (with no double-click selection in +several applications). Therefore an alphanumeric character outside the normal character set +was chosen.. +* The '''data part''', which is at least 6 characters long and only consists of alphanumeric characters excluding "1", "b", "i", and "o"'''Why not use an existing character set like [http://www.faqs.org/rfcs/rfc3548.html RFC3548] or [https://philzimmermann.com/docs/human-oriented-base-32-encoding.txt z-base-32]'''? +The character set is chosen to minimize ambiguity according to +[https://hissa.nist.gov/~black/GTLD/ this] visual similarity data, and +the ordering is chosen to minimize the number of pairs of similar +characters (according to the same data) that differ in more than 1 bit. +As the checksum is chosen to maximize detection capabilities for low +numbers of bit errors, this choice improves its performance under some +error models.. + + +{| class="wikitable" +|- +! +!0 +!1 +!2 +!3 +!4 +!5 +!6 +!7 +|- +!+0 +|q||p||z||r||y||9||x||8 +|- +!+8 +|g||f||2||t||v||d||w||0 +|- +!+16 +|s||3||j||n||5||4||k||h +|- +!+24 +|c||e||6||m||u||a||7||l +|} + + +'''Checksum''' + +The last six characters of the data part form a checksum and contain no +information. Valid strings MUST pass the criteria for validity specified +by the Python3 code snippet below. The function +bech32_verify_checksum must return true when its arguments are: +* hrp: the human-readable part as a string +* data: the data part as a list of integers representing the characters after conversion using the table above + +
+def bech32_polymod(values):
+  GEN = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3]
+  chk = 1
+  for v in values:
+    b = (chk >> 25)
+    chk = (chk & 0x1ffffff) << 5 ^ v
+    for i in range(5):
+      chk ^= GEN[i] if ((b >> i) & 1) else 0
+  return chk
+
+def bech32_hrp_expand(s):
+  return [ord(x) >> 5 for x in s] + [0] + [ord(x) & 31 for x in s]
+
+def bech32_verify_checksum(hrp, data):
+  return bech32_polymod(bech32_hrp_expand(hrp) + data) == 1
+
+ +This implements a [https://en.wikipedia.org/wiki/BCH_code BCH code] that +guarantees detection of '''any error affecting at most 4 characters''' +and has less than a 1 in 109 chance of failing to detect more +errors. More details about the properties can be found in the +Checksum Design appendix. The human-readable part is processed by first +feeding the higher bits of each character's US-ASCII value into the +checksum calculation followed by a zero and then the lower bits of each'''Why are the high bits of the human-readable part processed first?''' +This results in the actually checksummed data being ''[high hrp] 0 [low hrp] [data]''. This means that under the assumption that errors to the +human readable part only change the low 5 bits (like changing an alphabetical character into another), errors are restricted to the ''[low hrp] [data]'' +part, which is at most 89 characters, and thus all error detection properties (see appendix) remain applicable.. + +To construct a valid checksum given the human-readable part and (non-checksum) values of the data-part characters, the code below can be used: + +
+def bech32_create_checksum(hrp, data):
+  values = bech32_hrp_expand(hrp) + data
+  polymod = bech32_polymod(values + [0,0,0,0,0,0]) ^ 1
+  return [(polymod >> 5 * (5 - i)) & 31 for i in range(6)]
+
+ +'''Error correction''' + +One of the properties of these BCH codes is that they can be used for +error correction. An unfortunate side effect of error correction is that +it erodes error detection: correction changes invalid inputs into valid +inputs, but if more than a few errors were made then the valid input may +not be the correct input. Use of an incorrect but valid input can cause +funds to be lost irrecoverably. Because of this, implementations SHOULD +NOT implement correction beyond potentially suggesting to the user where +in the string an error might be found, without suggesting the correction +to make. + +'''Uppercase/lowercase''' + +The lowercase form is used when determining a character's value for checksum purposes. + +Encoders MUST always output an all lowercase Bech32 string. +If an uppercase version of the encoding result is desired, (e.g.- for presentation purposes, or QR code use), +then an uppercasing procedure can be performed external to the encoding process. + +Decoders MUST NOT accept strings where some characters are uppercase and some are lowercase (such strings are referred to as mixed case strings). + +For presentation, lowercase is usually preferable, but inside QR codes uppercase SHOULD be used, as those permit the use of +''[http://www.thonky.com/qr-code-tutorial/alphanumeric-mode-encoding alphanumeric mode]'', which is 45% more compact than the normal +''[http://www.thonky.com/qr-code-tutorial/byte-mode-encoding byte mode]''. + +===Segwit address format=== + +A segwit address'''Why not make an address format that is generic for all scriptPubKeys?''' +That would lead to confusion about addresses for +existing scriptPubKey types. Furthermore, if addresses that do not have a one-to-one mapping with scriptPubKeys (such as ECDH-based +addresses) are ever introduced, having a fully generic old address type available would +permit reinterpreting the resulting scriptPubKeys using the old address +format, with lost funds as a result if bitcoins are sent to them. is a Bech32 encoding of: + +* The human-readable part "bc"'''Why use 'bc' as human-readable part and not 'btc'?''' 'bc' is shorter. for mainnet, and "tb"'''Why use 'tb' as human-readable part for testnet?''' It was chosen to +be of the same length as the mainnet counterpart (to simplify +implementations' assumptions about lengths), but still be visually +distinct. for testnet. +* The data-part values: +** 1 character (representing 5 bits of data): the witness version +** A conversion of the 2-to-40-byte witness program (as defined by [https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki BIP141]) to base32: +*** Start with the bits of the witness program, most significant bit per byte first. +*** Re-arrange those bits into groups of 5, and pad with zeroes at the end if needed. +*** Translate those bits to characters using the table above. + +'''Decoding''' + +Software interpreting a segwit address: +* MUST verify that the human-readable part is "bc" for mainnet and "tb" for testnet. +* MUST verify that the first decoded data value (the witness version) is between 0 and 16, inclusive. +* Convert the rest of the data to bytes: +** Translate the values to 5 bits, most significant bit first. +** Re-arrange those bits into groups of 8 bits. Any incomplete group at the end MUST be 4 bits or less, MUST be all zeroes, and is discarded. +** There MUST be between 2 and 40 groups, which are interpreted as the bytes of the witness program. + +Decoders SHOULD enforce known-length restrictions on witness programs. +For example, BIP141 specifies ''If the version byte is 0, but the witness +program is neither 20 nor 32 bytes, the script must fail.'' + +As a result of the previous rules, addresses are always between 14 and 74 characters long, and their length modulo 8 cannot be 0, 3, or 5. +Version 0 witness addresses are always 42 or 62 characters, but implementations MUST allow the use of any version. + +Implementations should take special care when converting the address to a +scriptPubkey, where witness version ''n'' is stored as ''OP_n''. OP_0 is +encoded as 0x00, but OP_1 through OP_16 are encoded as 0x51 though 0x60 +(81 to 96 in decimal). If a bech32 address is converted to an incorrect +scriptPubKey the result will likely be either unspendable or insecure. + +===Compatibility=== + +Only new software will be able to use these addresses, and only for +receivers with segwit-enabled new software. In all other cases, P2SH or +P2PKH addresses can be used. + +==Rationale== + + + +==Reference implementations== + +* Reference encoder and decoder: +** [https://github.com/sipa/bech32/tree/master/ref/c For C] +** [https://github.com/sipa/bech32/tree/master/ref/c++ For C++] +** [https://github.com/sipa/bech32/tree/master/ref/javascript For JavaScript] +** [https://github.com/sipa/bech32/tree/master/ref/go For Go] +** [https://github.com/sipa/bech32/tree/master/ref/python For Python] +** [https://github.com/sipa/bech32/tree/master/ref/haskell For Haskell] +** [https://github.com/sipa/bech32/tree/master/ref/ruby For Ruby] +** [https://github.com/sipa/bech32/tree/master/ref/rust For Rust] + +* Fancy decoder that localizes errors: +** [https://github.com/sipa/bech32/tree/master/ecc/javascript For JavaScript] ([http://bitcoin.sipa.be/bech32/demo/demo.html demo website]) + +==Registered Human-readable Prefixes== + +SatoshiLabs maintains a full list of registered human-readable parts for other cryptocurrencies: + +[https://github.com/satoshilabs/slips/blob/master/slip-0173.md SLIP-0173 : Registered human-readable parts for BIP-0173] + +==Appendices== + +===Test vectors=== + +The following strings are valid Bech32: +* A12UEL5L +* a12uel5l +* an83characterlonghumanreadablepartthatcontainsthenumber1andtheexcludedcharactersbio1tt5tgs +* abcdef1qpzry9x8gf2tvdw0s3jn54khce6mua7lmqqqxw +* 11qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqc8247j +* split1checkupstagehandshakeupstreamerranterredcaperred2y9e3w +* ?1ezyfcl WARNING: During conversion to US-ASCII some encoders may set unmappable characters to a valid US-ASCII character, such as '?'. For example: + +
+>>> bech32_encode('\x80'.encode('ascii', 'replace').decode('ascii'), [])
+'?1ezyfcl'
+
+ +The following string are not valid Bech32 (with reason for invalidity): +* 0x20 + 1nwldj5: HRP character out of range +* 0x7F + 1axkwrx: HRP character out of range +* 0x80 + 1eym55h: HRP character out of range +* an84characterslonghumanreadablepartthatcontainsthenumber1andtheexcludedcharactersbio1569pvx: overall max length exceeded +* pzry9x0s0muk: No separator character +* 1pzry9x0s0muk: Empty HRP +* x1b4n0q5v: Invalid data character +* li1dgmt3: Too short checksum +* de1lg7wt + 0xFF: Invalid character in checksum +* A1G7SGD8: checksum calculated with uppercase form of HRP +* 10a06t8: empty HRP +* 1qzzfhee: empty HRP + +The following list gives valid segwit addresses and the scriptPubKey that they +translate to in hex. +* BC1QW508D6QEJXTDG4Y5R3ZARVARY0C5XW7KV8F3T4: 0014751e76e8199196d454941c45d1b3a323f1433bd6 +* tb1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3q0sl5k7: 00201863143c14c5166804bd19203356da136c985678cd4d27a1b8c6329604903262 +* bc1pw508d6qejxtdg4y5r3zarvary0c5xw7kw508d6qejxtdg4y5r3zarvary0c5xw7k7grplx: 5128751e76e8199196d454941c45d1b3a323f1433bd6751e76e8199196d454941c45d1b3a323f1433bd6 +* BC1SW50QA3JX3S: 6002751e +* bc1zw508d6qejxtdg4y5r3zarvaryvg6kdaj: 5210751e76e8199196d454941c45d1b3a323 +* tb1qqqqqp399et2xygdj5xreqhjjvcmzhxw4aywxecjdzew6hylgvsesrxh6hy: 0020000000c4a5cad46221b2a187905e5266362b99d5e91c6ce24d165dab93e86433 + +The following list gives invalid segwit addresses and the reason for +their invalidity. +* tc1qw508d6qejxtdg4y5r3zarvary0c5xw7kg3g4ty: Invalid human-readable part +* bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t5: Invalid checksum +* BC13W508D6QEJXTDG4Y5R3ZARVARY0C5XW7KN40WF2: Invalid witness version +* bc1rw5uspcuh: Invalid program length +* bc10w508d6qejxtdg4y5r3zarvary0c5xw7kw508d6qejxtdg4y5r3zarvary0c5xw7kw5rljs90: Invalid program length +* BC1QR508D6QEJXTDG4Y5R3ZARVARYV98GJ9P: Invalid program length for witness version 0 (per BIP141) +* tb1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3q0sL5k7: Mixed case +* bc1zw508d6qejxtdg4y5r3zarvaryvqyzf3du: zero padding of more than 4 bits +* tb1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3pjxtptv: Non-zero padding in 8-to-5 conversion +* bc1gmk9yu: Empty data section + +===Checksum design=== + +'''Design choices''' + +BCH codes can be constructed over any prime-power alphabet and can be chosen to have a good trade-off between +size and error-detection capabilities. While most work around BCH codes uses a binary alphabet, that is not a requirement. +This makes them more appropriate for our use case than [https://en.wikipedia.org/wiki/Cyclic_redundancy_check CRC codes]. Unlike +[https://en.wikipedia.org/wiki/Reed%E2%80%93Solomon_error_correction Reed-Solomon codes], +they are not restricted in length to one less than the alphabet size. While they also support efficient error correction, +the implementation of just error detection is very simple. + +We pick 6 checksum characters as a trade-off between length of the addresses and the error-detection capabilities, as 6 +characters is the lowest number sufficient for a random failure chance below 1 per billion. For the length of data +we're interested in protecting (up to 71 bytes for a potential future 40-byte witness +program), BCH codes can be constructed that guarantee detecting up to 4 errors. + +'''Selected properties''' + +Many of these codes perform badly when dealing with more errors than they are designed to detect, but not all. +For that reason, we consider codes that are designed to detect only 3 errors as well as 4 errors, +and analyse how well they perform in practice. + +The specific code chosen here is the result +of: +* Starting with an exhaustive list of 159605 BCH codes designed to detect 3 or 4 errors up to length 93, 151, 165, 341, 1023, and 1057. +* From those, requiring the detection of 4 errors up to length 71, resulting in 28825 remaining codes. +* From those, choosing the codes with the best worst-case window for 5-character errors, resulting in 310 remaining codes. +* From those, picking the code with the lowest chance for not detecting small numbers of ''bit'' errors. + +As a naive search would require over 6.5 * 1019 checksum evaluations, a collision-search approach was used for +analysis. The code can be found [https://github.com/sipa/ezbase32/ here]. + +'''Properties''' + +The following table summarizes the chances for detection failure (as +multiples of 1 in 109). + +{| class="wikitable" +|- +!colspan="2" | Window length +!colspan="6" | Number of wrong characters +|- +!Length +!Description +!≤4 +!5 +!6 +!7 +!8 +!≥9 +|- +| 8 || Longest detecting 6 errors || colspan="3" | 0 || 1.127 || 0.909 || n/a +|- +| 18 || Longest detecting 5 errors || colspan="2" | 0 || 0.965 || 0.929 || 0.932 || 0.931 +|- +| 19 || Worst case for 6 errors || 0 || 0.093 || 0.972 || 0.928 || colspan="2" | 0.931 +|- +| 39 || Length for a P2WPKH address || 0 || 0.756 || 0.935 || 0.932 || colspan="2" | 0.931 +|- +| 59 || Length for a P2WSH address || 0 || 0.805 || 0.933 || colspan="3" | 0.931 +|- +| 71 || Length for a 40-byte program address || 0 || 0.830 || 0.934 || colspan="3" | 0.931 +|- +| 89 || Longest detecting 4 errors || 0 || 0.867 || 0.933 || colspan="3" | 0.931 +|} +This means that when 5 changed characters occur randomly distributed in +the 39 characters of a P2WPKH address, there is a chance of +''0.756 per billion'' that it will go undetected. When those 5 changes +occur randomly within a 19-character window, that chance goes down to +''0.093 per billion''. As the number of errors goes up, the chance +converges towards ''1 in 230'' = ''0.931 per billion''. + +Even though the chosen code performs reasonably well up to 1023 characters, +other designs are preferable for lengths above 89 characters (excluding the +separator). + +==Acknowledgements== + +This document is inspired by the [https://rusty.ozlabs.org/?p=578 address proposal] by Rusty Russell, the +[https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2014-February/004402.html base32] proposal by Mark Friedenbach, and had input from Luke Dashjr, +Johnson Lau, Eric Lombrozo, Peter Todd, and various other reviewers. diff --git a/bitcoin-25.0 (1).tar.gz b/bitcoin-25.0 (1).tar.gz new file mode 100644 index 0000000..65b58e8 Binary files /dev/null and b/bitcoin-25.0 (1).tar.gz differ diff --git a/bitcoin-25.0.tar.gz b/bitcoin-25.0.tar.gz new file mode 100644 index 0000000..65b58e8 Binary files /dev/null and b/bitcoin-25.0.tar.gz differ diff --git a/bitcoin-25.0.torrent b/bitcoin-25.0.torrent new file mode 100644 index 0000000..ad5bdac Binary files /dev/null and b/bitcoin-25.0.torrent differ diff --git a/bitcoin-25.0.zip b/bitcoin-25.0.zip new file mode 100644 index 0000000..76b61ee Binary files /dev/null and b/bitcoin-25.0.zip differ diff --git a/bolt-16.0.0.src.tar.xz b/bolt-16.0.0.src.tar.xz new file mode 100644 index 0000000..641e2ec Binary files /dev/null and b/bolt-16.0.0.src.tar.xz differ diff --git a/bolt-16.0.0.src.tar.xz.sig b/bolt-16.0.0.src.tar.xz.sig new file mode 100644 index 0000000..3d04d2b Binary files /dev/null and b/bolt-16.0.0.src.tar.xz.sig differ diff --git a/chapter12.pdf b/chapter12.pdf new file mode 100644 index 0000000..6d65ddc Binary files /dev/null and b/chapter12.pdf differ diff --git a/cirrus.yml b/cirrus.yml new file mode 100644 index 0000000..1b6bb9f --- /dev/null +++ b/cirrus.yml @@ -0,0 +1,23 @@ +container: + image: ubuntu:jammy + cpu: 1 + memory: 1G +lint_task: + use_compute_credits: true + only_if: $CIRRUS_BASE_BRANCH == 'main' + stateful: false # https://cirrus-ci.org/guide/writing-tasks/#stateful-tasks + setup_script: apt-get update && apt-get install -y git libgpgme-dev + merge_base_script: + - git fetch $CIRRUS_REPO_CLONE_URL "pull/${CIRRUS_PR}/merge" + - git checkout FETCH_HEAD # Derive full diff based on merge commit, see lint_script + + cargo_target_cache: + folder: out-dir + fingerprint_script: git log -1 -- ./contrib/touched-files-check/ .cirrus.yml + populate_script: + - mkdir out-dir + - apt-get install -y cargo + - cd ./contrib/touched-files-check + - cargo build + - mv ./target/debug/touched-files-check ./../../out-dir/ + lint_script: ./out-dir/touched-files-check "HEAD~..HEAD" diff --git a/description b/description new file mode 100644 index 0000000..25d7c98 --- /dev/null +++ b/description @@ -0,0 +1 @@ +GNU Guix and GNU Guix System diff --git a/gh-2.30.0-2.fc39.aarch64.rpm b/gh-2.30.0-2.fc39.aarch64.rpm new file mode 100644 index 0000000..3cca66b Binary files /dev/null and b/gh-2.30.0-2.fc39.aarch64.rpm differ diff --git a/gh-2.30.0-2.fc39.ppc64le.rpm b/gh-2.30.0-2.fc39.ppc64le.rpm new file mode 100644 index 0000000..83b46b2 Binary files /dev/null and b/gh-2.30.0-2.fc39.ppc64le.rpm differ diff --git a/gh-2.30.0-2.fc39.s390x.rpm b/gh-2.30.0-2.fc39.s390x.rpm new file mode 100644 index 0000000..1e622fd Binary files /dev/null and b/gh-2.30.0-2.fc39.s390x.rpm differ diff --git a/gh-2.30.0-2.fc39.src.rpm b/gh-2.30.0-2.fc39.src.rpm new file mode 100644 index 0000000..9b5ef3f Binary files /dev/null and b/gh-2.30.0-2.fc39.src.rpm differ diff --git a/gh-debuginfo-2.30.0-2.fc39.ppc64le.rpm b/gh-debuginfo-2.30.0-2.fc39.ppc64le.rpm new file mode 100644 index 0000000..c7b28ca Binary files /dev/null and b/gh-debuginfo-2.30.0-2.fc39.ppc64le.rpm differ diff --git a/gh-debugsource-2.30.0-2.fc39.aarch64.rpm b/gh-debugsource-2.30.0-2.fc39.aarch64.rpm new file mode 100644 index 0000000..6296c72 Binary files /dev/null and b/gh-debugsource-2.30.0-2.fc39.aarch64.rpm differ diff --git a/gh-debugsource-2.30.0-2.fc39.ppc64le.rpm b/gh-debugsource-2.30.0-2.fc39.ppc64le.rpm new file mode 100644 index 0000000..11e60e1 Binary files /dev/null and b/gh-debugsource-2.30.0-2.fc39.ppc64le.rpm differ diff --git a/gh_2.30.0_linux_386.rpm b/gh_2.30.0_linux_386.rpm new file mode 100644 index 0000000..f372106 Binary files /dev/null and b/gh_2.30.0_linux_386.rpm differ diff --git a/gh_2.30.0_linux_386.tar.gz b/gh_2.30.0_linux_386.tar.gz new file mode 100644 index 0000000..9cd452d Binary files /dev/null and b/gh_2.30.0_linux_386.tar.gz differ diff --git a/golang-github-cli-2-devel-2.30.0-2.fc39.noarch.rpm b/golang-github-cli-2-devel-2.30.0-2.fc39.noarch.rpm new file mode 100644 index 0000000..a25566d Binary files /dev/null and b/golang-github-cli-2-devel-2.30.0-2.fc39.noarch.rpm differ diff --git a/llvm-project-llvmorg-16.0.0.tar.gz b/llvm-project-llvmorg-16.0.0.tar.gz new file mode 100644 index 0000000..f8f1506 Binary files /dev/null and b/llvm-project-llvmorg-16.0.0.tar.gz differ diff --git a/llvm-project-llvmorg-16.0.0.zip b/llvm-project-llvmorg-16.0.0.zip new file mode 100644 index 0000000..5a54636 Binary files /dev/null and b/llvm-project-llvmorg-16.0.0.zip differ diff --git a/mariadb-check.log b/mariadb-check.log new file mode 100644 index 0000000..d1aad8e --- /dev/null +++ b/mariadb-check.log @@ -0,0 +1,300 @@ +-SET INSERT_ID=2/*!*/; +-SET TIMESTAMP=1579609942/*!*/; +-insert into t1 values(null, "b") +-/*!*/; +-SET TIMESTAMP=1579609942/*!*/; +-COMMIT +-/*!*/; + DELIMITER ; + # End of log file + ROLLBACK /* added by mysqlbinlog */; +@@ -680,11 +670,8 @@ + /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; + DELIMITER /*!*/; + ROLLBACK/*!*/; +-BEGIN +-/*!*/; +-SET INSERT_ID=3/*!*/; + use `test`/*!*/; +-SET TIMESTAMP=1579609944/*!*/; ++SET TIMESTAMP=1579609942/*!*/; + SET @@session.pseudo_thread_id=999999999/*!*/; + SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/; + SET @@session.sql_mode=0/*!*/; +@@ -693,6 +680,30 @@ + SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/; + SET @@session.lc_time_names=0/*!*/; + SET @@session.collation_database=DEFAULT/*!*/; ++create table t1 (a int auto_increment not null primary key, b char(3)) ++/*!*/; ++BEGIN ++/*!*/; ++SET INSERT_ID=1/*!*/; ++SET TIMESTAMP=1579609942/*!*/; ++insert into t1 values(null, "a") ++/*!*/; ++SET TIMESTAMP=1579609942/*!*/; ++COMMIT ++/*!*/; ++BEGIN ++/*!*/; ++SET INSERT_ID=2/*!*/; ++SET TIMESTAMP=1579609942/*!*/; ++insert into t1 values(null, "b") ++/*!*/; ++SET TIMESTAMP=1579609942/*!*/; ++COMMIT ++/*!*/; ++BEGIN ++/*!*/; ++SET INSERT_ID=3/*!*/; ++SET TIMESTAMP=1579609944/*!*/; + insert into t1 values(null, "c") + /*!*/; + SET TIMESTAMP=1579609944/*!*/; +@@ -747,37 +758,6 @@ + /*!40019 SET @@session.max_insert_delayed_threads=0*/; + /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; + DELIMITER /*!*/; +-ROLLBACK/*!*/; +-use `test`/*!*/; +-SET TIMESTAMP=1579609942/*!*/; +-SET @@session.pseudo_thread_id=999999999/*!*/; +-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/; +-SET @@session.sql_mode=0/*!*/; +-SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/; +-/*!\C latin1 *//*!*/; +-SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/; +-SET @@session.lc_time_names=0/*!*/; +-SET @@session.collation_database=DEFAULT/*!*/; +-create table t1 (a int auto_increment not null primary key, b char(3)) +-/*!*/; +-BEGIN +-/*!*/; +-SET INSERT_ID=1/*!*/; +-SET TIMESTAMP=1579609942/*!*/; +-insert into t1 values(null, "a") +-/*!*/; +-SET TIMESTAMP=1579609942/*!*/; +-COMMIT +-/*!*/; +-BEGIN +-/*!*/; +-SET INSERT_ID=2/*!*/; +-SET TIMESTAMP=1579609942/*!*/; +-insert into t1 values(null, "b") +-/*!*/; +-SET TIMESTAMP=1579609942/*!*/; +-COMMIT +-/*!*/; + DELIMITER ; + # End of log file + ROLLBACK /* added by mysqlbinlog */; +@@ -1040,11 +1020,8 @@ + /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; + DELIMITER /*!*/; + ROLLBACK/*!*/; +-BEGIN +-/*!*/; +-SET INSERT_ID=3/*!*/; + use `test`/*!*/; +-SET TIMESTAMP=1579609944/*!*/; ++SET TIMESTAMP=1579609942/*!*/; + SET @@session.pseudo_thread_id=999999999/*!*/; + SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/; + SET @@session.sql_mode=0/*!*/; +@@ -1053,6 +1030,30 @@ + SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/; + SET @@session.lc_time_names=0/*!*/; + SET @@session.collation_database=DEFAULT/*!*/; ++create table t1 (a int auto_increment not null primary key, b char(3)) ++/*!*/; ++BEGIN ++/*!*/; ++SET INSERT_ID=1/*!*/; ++SET TIMESTAMP=1579609942/*!*/; ++insert into t1 values(null, "a") ++/*!*/; ++SET TIMESTAMP=1579609942/*!*/; ++COMMIT ++/*!*/; ++BEGIN ++/*!*/; ++SET INSERT_ID=2/*!*/; ++SET TIMESTAMP=1579609942/*!*/; ++insert into t1 values(null, "b") ++/*!*/; ++SET TIMESTAMP=1579609942/*!*/; ++COMMIT ++/*!*/; ++BEGIN ++/*!*/; ++SET INSERT_ID=3/*!*/; ++SET TIMESTAMP=1579609944/*!*/; + insert into t1 values(null, "c") + /*!*/; + SET TIMESTAMP=1579609944/*!*/; +@@ -1087,37 +1088,6 @@ + /*!40019 SET @@session.max_insert_delayed_threads=0*/; + /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; + DELIMITER /*!*/; +-ROLLBACK/*!*/; +-use `test`/*!*/; +-SET TIMESTAMP=1579609942/*!*/; +-SET @@session.pseudo_thread_id=999999999/*!*/; +-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/; +-SET @@session.sql_mode=0/*!*/; +-SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/; +-/*!\C latin1 *//*!*/; +-SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/; +-SET @@session.lc_time_names=0/*!*/; +-SET @@session.collation_database=DEFAULT/*!*/; +-create table t1 (a int auto_increment not null primary key, b char(3)) +-/*!*/; +-BEGIN +-/*!*/; +-SET INSERT_ID=1/*!*/; +-SET TIMESTAMP=1579609942/*!*/; +-insert into t1 values(null, "a") +-/*!*/; +-SET TIMESTAMP=1579609942/*!*/; +-COMMIT +-/*!*/; +-BEGIN +-/*!*/; +-SET INSERT_ID=2/*!*/; +-SET TIMESTAMP=1579609942/*!*/; +-insert into t1 values(null, "b") +-/*!*/; +-SET TIMESTAMP=1579609942/*!*/; +-COMMIT +-/*!*/; + DELIMITER ; + # End of log file + ROLLBACK /* added by mysqlbinlog */; +@@ -1443,11 +1413,8 @@ + /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; + DELIMITER /*!*/; + ROLLBACK/*!*/; +-BEGIN +-/*!*/; +-SET INSERT_ID=3/*!*/; + use `test`/*!*/; +-SET TIMESTAMP=1579609944/*!*/; ++SET TIMESTAMP=1579609942/*!*/; + SET @@session.pseudo_thread_id=999999999/*!*/; + SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/; + SET @@session.sql_mode=0/*!*/; +@@ -1456,6 +1423,30 @@ + SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/; + SET @@session.lc_time_names=0/*!*/; + SET @@session.collation_database=DEFAULT/*!*/; ++create table t1 (a int auto_increment not null primary key, b char(3)) ++/*!*/; ++BEGIN ++/*!*/; ++SET INSERT_ID=1/*!*/; ++SET TIMESTAMP=1579609942/*!*/; ++insert into t1 values(null, "a") ++/*!*/; ++SET TIMESTAMP=1579609942/*!*/; ++COMMIT ++/*!*/; ++BEGIN ++/*!*/; ++SET INSERT_ID=2/*!*/; ++SET TIMESTAMP=1579609942/*!*/; ++insert into t1 values(null, "b") ++/*!*/; ++SET TIMESTAMP=1579609942/*!*/; ++COMMIT ++/*!*/; ++BEGIN ++/*!*/; ++SET INSERT_ID=3/*!*/; ++SET TIMESTAMP=1579609944/*!*/; + insert into t1 values(null, "c") + /*!*/; + SET TIMESTAMP=1579609944/*!*/; +@@ -1510,37 +1501,6 @@ + /*!40019 SET @@session.max_insert_delayed_threads=0*/; + /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; + DELIMITER /*!*/; +-ROLLBACK/*!*/; +-use `test`/*!*/; +-SET TIMESTAMP=1579609942/*!*/; +-SET @@session.pseudo_thread_id=999999999/*!*/; +-SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/; +-SET @@session.sql_mode=0/*!*/; +-SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/; +-/*!\C latin1 *//*!*/; +-SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/; +-SET @@session.lc_time_names=0/*!*/; +-SET @@session.collation_database=DEFAULT/*!*/; +-create table t1 (a int auto_increment not null primary key, b char(3)) +-/*!*/; +-BEGIN +-/*!*/; +-SET INSERT_ID=1/*!*/; +-SET TIMESTAMP=1579609942/*!*/; +-insert into t1 values(null, "a") +-/*!*/; +-SET TIMESTAMP=1579609942/*!*/; +-COMMIT +-/*!*/; +-BEGIN +-/*!*/; +-SET INSERT_ID=2/*!*/; +-SET TIMESTAMP=1579609942/*!*/; +-insert into t1 values(null, "b") +-/*!*/; +-SET TIMESTAMP=1579609942/*!*/; +-COMMIT +-/*!*/; + DELIMITER ; + # End of log file + ROLLBACK /* added by mysqlbinlog */; + +mysqltest: Result length mismatch + +safe_process[22541]: Got signal 17, child_pid: 22542 +safe_process[22541]: Killing child: 22542 +safe_process[22541]: Child exit: 1 + + - saving '/tmp/guix-build-mariadb-10.1.38.drv-0/build/mysql-test/var/2/log/binlog.binlog_mysqlbinlog2-mix/' to '/tmp/guix-build-mariadb-10.1.38.drv-0/build/mysql-test/var/log/binlog.binlog_mysqlbinlog2-mix/' +worker[2] > Stopping all servers... + +Only 2357 of 6894 completed. +-------------------------------------------------------------------------- +The servers were restarted 504 times +Spent 1764.770 of 874 seconds executing testcases + +Failure: Failed 1/1034 tests, 99.90% were successful. + +Failing test(s): binlog.binlog_mysqlbinlog2 + +The log files in var/log may give you some hint of what went wrong. + +If you want to report this error, please read first the documentation +at http://dev.mysql.com/doc/mysql/en/mysql-test-suite.html + +484 tests were skipped, 72 by the test itself. + +mysql-test-run: *** ERROR: there were failing test cases +Backtrace: + 6 (primitive-load "/gnu/store/yzksam4xs36zdhicldvmdd42gvr…") +In ice-9/eval.scm: + 191:35 5 (_ _) +In srfi/srfi-1.scm: + 863:16 4 (every1 # …) +In /gnu/store/6bwkbm3a80v0xab5qsicij7bjvmn5yna-module-import/guix/build/gnu-build-system.scm: + 799:28 3 (_ _) +In ice-9/eval.scm: + 619:8 2 (_ #(#(#) #t)) +In ice-9/boot-9.scm: + 142:2 1 (dynamic-wind # …) +In /gnu/store/6bwkbm3a80v0xab5qsicij7bjvmn5yna-module-import/guix/build/utils.scm: + 616:6 0 (invoke _ . _) + +/gnu/store/6bwkbm3a80v0xab5qsicij7bjvmn5yna-module-import/guix/build/utils.scm:616:6: In procedure invoke: +Throw to key `srfi-34' with args `(#)'. \ No newline at end of file diff --git a/node-v18.16.0-linux-x64.tar.xz b/node-v18.16.0-linux-x64.tar.xz new file mode 100644 index 0000000..c45d002 Binary files /dev/null and b/node-v18.16.0-linux-x64.tar.xz differ diff --git a/openmp-16.0.0.src.tar.xz.sig b/openmp-16.0.0.src.tar.xz.sig new file mode 100644 index 0000000..82d7499 Binary files /dev/null and b/openmp-16.0.0.src.tar.xz.sig differ diff --git a/openssl-3.0.8-security-policy-2023-05-05.pdf b/openssl-3.0.8-security-policy-2023-05-05.pdf new file mode 100644 index 0000000..21bfe3c Binary files /dev/null and b/openssl-3.0.8-security-policy-2023-05-05.pdf differ diff --git a/repository-open-graph-template.png b/repository-open-graph-template.png new file mode 100644 index 0000000..d03dffd Binary files /dev/null and b/repository-open-graph-template.png differ diff --git a/setup-x86_64.exe b/setup-x86_64.exe new file mode 100644 index 0000000..ae36f0e Binary files /dev/null and b/setup-x86_64.exe differ