1
0
mirror of https://github.com/bitcoin/bips.git synced 2024-11-19 01:40:05 +01:00

dont include pseudo-code for lexicographical sorting

This commit is contained in:
Daniel Cousens 2015-08-21 09:22:50 +10:00
parent 5f75c82dc4
commit 64f321e2c9

View File

@ -61,31 +61,21 @@ In the event that future protocol upgrades introduce new signature hash types, c
While out of scope of this BIP, protocols that do require a specified order of inputs/outputs (e.g. due to use of SIGHASH_SINGLE) should consider the goals of this BIP and how best to adapt them to the specific needs of those protocols.
===Lexicographical Sorting===
===Lexicographical Ordering===
Ordering of inputs and outputs will rely on the output of sorting functions.
These functions can be defined as taking two inputs or two outputs as parameters and returning their appropriate ordering with respect to each other.
Lexicographical ordering is an algorithm for comparison used to sort two sets based on their cartesian order within their common superset.
Lexicographic order is also often known as alphabetical order, or dictionary order.
Byte arrays must be sorted with an algorithm that produces the same output as the following comparison algorithm:
Common implementations include:
<nowiki>#returns -1 if barr1 is lesser, 1 if barr1 is greater, and 0 if equal
def bytearr_cmp(barr1, barr2):
pos = 0
while (pos < len(barr1) and pos < len(barr2)):
if (barr1[pos] < barr2[pos]):
return -1;
elif (barr1[pos] > barr2[pos]):
return 1;
pos = pos + 1
#the shorter array will be ordered first
if (len(barr1) < len(barr2)):
return -1
elif (len(barr1) > len(barr2)):
return 1
else:
return 0</nowiki>
* `std::lexicographical_compare` in C++ [5]
* `cmp` in Python 2.7
* `memcmp` in C [6]
* `Buffer.compare` in Node.js [7]
N.B. These comparisons do not need to operate in constant time since they are not processing secret information.
For more information, see the wikipedia entry on Lexicographical order. [8]
N.B. All comparisons do not need to operate in constant time since they are not processing secret information.
===Transaction Inputs===
@ -159,6 +149,10 @@ Outputs:
* [[https://github.com/OpenBitcoinPrivacyProject/wallet-ratings/blob/master/2015-1/criteria.md|2: OBPP Random Indexing as Countermeasure]]
* [[https://github.com/aantonop/bitcoinbook/blob/develop/ch05.asciidoc|3: Mastering Bitcoin]]
* [[https://en.bitcoin.it/wiki/Script|4: Bitcoin Wiki on Script]]
* [[http://www.cplusplus.com/reference/algorithm/lexicographical_compare|5: std::lexicographical_compare]]
* [[http://www.cplusplus.com/reference/cstring/memcmp|6: memcmp]]
* [[https://nodejs.org/api/buffer.html#buffer_class_method_buffer_compare_buf1_buf2|7: Buffer.compare]]
* [[https://en.wikipedia.org/wiki/Lexicographical_order|8: Lexicographical order]]
==Implementations==