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:
parent
5f75c82dc4
commit
64f321e2c9
@ -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==
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user