diff --git a/doc/authors.md b/doc/authors.md new file mode 100644 index 000000000..4f39de07d --- /dev/null +++ b/doc/authors.md @@ -0,0 +1,38 @@ +Zcash Contributors +================== + +Jack Grigg (264) +Simon Liu (191) +Sean Bowe (162) +Taylor Hornby (65) +Daira Hopwood (62) +Kevin Gallagher (38) +Jay Graber (28) +Nathan Wilcox (10) +Wladimir J. van der Laan (9) +Pieter Wuille (8) +Cory Fields (7) +ITH4Coinomia (4) +David Mercer (4) +4ZEC (4) +Patrick Strateman (3) +Paige Peterson (3) +MarcoFalke (3) +Alfie John (3) +aniemerg (2) +Robert C. Seacord (2) +Joe Turgeon (2) +Gregory Maxwell (2) +kazcw (1) +fanquake (1) +Tom Ritter (1) +S. Matthew English (1) +Philip Kaufmann (1) +Louis Nyffenegger (1) +Lars-Magnus Skog (1) +Gaurav Rana (1) +Ethan Heilman (1) +Chirag Davé (1) +Cameron Boehmer (1) +Bryan Stitt (1) +Alex (1) diff --git a/doc/release-notes/release-notes-0.11.2.z6.md b/doc/release-notes/release-notes-0.11.2.z6.md index 6d7aa0c57..5d6054509 100644 --- a/doc/release-notes/release-notes-0.11.2.z6.md +++ b/doc/release-notes/release-notes-0.11.2.z6.md @@ -1,19 +1,18 @@ -Jack Grigg: +Jack Grigg (4): Equihash: Only compare the first n/(k+1) bits when sorting. Randomise the nonce in the block header. Clear mempool before using it for benchmark test, fix parameter name. Fix memory leak in large tx benchmark. -Sean Bowe: +Sean Bowe (5): Increase block size to 2MB and update performance test. Make sigop limit `20000` just as in Bitcoin, ignoring our change to the blocksize limit. Remove the mainnet checkpoints. Fix performance test for block verification. Make `validatelargetx` test more accurate. -Taylor Hornby: +Taylor Hornby (1): Add example mock test of CheckTransaction. -aniemerg: +aniemerg (1): Suppress Libsnark Debugging Info. - diff --git a/doc/release-notes/release-notes-0.11.2.z9.md b/doc/release-notes/release-notes-0.11.2.z9.md index 071712967..3c45b9d9a 100644 --- a/doc/release-notes/release-notes-0.11.2.z9.md +++ b/doc/release-notes/release-notes-0.11.2.z9.md @@ -1,5 +1,4 @@ - -Sean Bowe: +Sean Bowe (6): Change memo field size and relocate `ciphertexts` field of JoinSplit description. Implement zkSNARK compression. Perform curve parameter initialization at start of gtest suite. @@ -7,7 +6,7 @@ Sean Bowe: Enable MONTGOMERY_OUTPUT everywhere. Update proving/verifying keys. -Jack Grigg: +Jack Grigg (11): Add support for spending keys to the basic key store. Merge AddSpendingKeyPaymentAddress into AddSpendingKey to simplify API. Add methods for byte array expansion and compression. @@ -20,7 +19,7 @@ Jack Grigg: Add separate lock for SpendingKey key store operations. Test conversion between solution indices and minimal representation. -Daira Hopwood: +Daira Hopwood (6): Move bigint arithmetic implementations to libsnark. Add mostly-static checks on consistency of Equihash parameters, MAX_HEADERS_RESULTS, and MAX_PROTOCOL_MESSAGE_LENGTH. Change some asserts in equihash.cpp to be static. @@ -28,30 +27,29 @@ Daira Hopwood: Increment version numbers for z9 release. Add these release notes for z9. -Taylor Hornby: +Taylor Hornby (5): Disable hardening when building for coverage reports. Upgrade libsodium for AVX2-detection bugfix. Fix inconsistent optimization flags; single source of truth. Add -fwrapv -fno-strict-aliasing; fix libzcash flags. Use libsodium's s < L check, instead checking that libsodium checks that. -Simon Liu: +Simon Liu (3): Fixes #1193 so that during verification benchmarking it does not unncessarily create thousands of CTransaction objects. Closes #701 by adding documentation about the Payment RPC interface. Add note about zkey and encrypted wallets. -Gaurav Rana: +Gaurav Rana (1): Update zcash-cli stop message. -Tom Ritter: +Tom Ritter (1): Clarify comment about nonce space for Note Encryption. -Robert C. Seacord: +Robert C. Seacord (1): Memory safety and correctness fixes found in NCC audit. -Patrick Strateman (merged by Taylor Hornby): +Patrick Strateman (1): Pull in some DoS mitigations from upstream. (#1258) -Wladimir J. van der Laan: +Wladimir J. van der Laan (1): net: correctly initialize nMinPingUsecTime. - diff --git a/doc/release-notes/release-notes-1.0.2.md b/doc/release-notes/release-notes-1.0.2.md index 2625cb909..1c594f32a 100644 --- a/doc/release-notes/release-notes-1.0.2.md +++ b/doc/release-notes/release-notes-1.0.2.md @@ -5,12 +5,12 @@ ITH4Coinomia (2): S. Matthew English (1): enforcing consistency 'tor' to 'Tor' -Sean Bowe (1): +Sean Bowe (2): Write R1CS output to file in GenerateParams. + 1.0.2 release. -Simon (4): +Simon Liu (4): Fixes #1762 segfault when miner is interrupted. Fixes #1779 so that sending to multiple zaddrs no longer fails. Add GenIdentity, an identity function for MappedShuffle. Add transaction size and zaddr output limit checks to z_sendmany. - diff --git a/zcutil/release-notes.py b/zcutil/release-notes.py new file mode 100644 index 000000000..aa524bacf --- /dev/null +++ b/zcutil/release-notes.py @@ -0,0 +1,99 @@ +import re, sys, os, os.path +import subprocess +import argparse +from itertools import islice +from operator import itemgetter + +author_aliases = { + 'Simon': 'Simon Liu', + 'bitcartel': 'Simon Liu', + 'EthanHeilman': 'Ethan Heilman', +} + +def apply_author_aliases(name): + if name in author_aliases: + return author_aliases[name] + else: + return name + +def parse_authors(line): + commit_search = re.search('(\d+)', line) + if commit_search: + commits = commit_search.group(1) + else: + commits = 0 + name = re.sub(' \(\d+\)|:|\n|\r\n$', '', line) + return name, commits + +def alias_authors_in_release_notes(line): + for key in author_aliases: + if re.match(key, line): + line = line.replace(key, author_aliases[key]) + break + return line + +## Returns dict of {'author': #_of_commits} from a release note +def authors_in_release_notes(filename): + note = os.path.join(doc_dir, 'release-notes', filename) + with open(note, 'r') as f: + authors = {} + line = f.readline() + first_name, commits = parse_authors(line) + authors[apply_author_aliases(first_name)] = commits + for line in f: + if line in ['\n', '\r\n']: + for author in islice(f, 1): + name, commits = parse_authors(author) + authors[apply_author_aliases(name)] = commits + return authors + +## Sums commits made by contributors in each Zcash release note in ./doc/release-notes and writes to authors.md +def document_authors(): + print "Writing contributors documented in release-notes directory to authors.md." + authors_file = os.path.join(doc_dir, 'authors.md') + with open(authors_file, 'w') as f: + f.write('Zcash Contributors\n==================\n\n') + total_contrib = {} + for notes in os.listdir(os.path.join(doc_dir, 'release-notes')): + authors = authors_in_release_notes(notes) + for author in authors: + commits = int(authors[author]) + if author in total_contrib: + total_contrib[author] += commits + else: + total_contrib[author] = commits + sorted_contrib = sorted(total_contrib.items(), key=itemgetter(1, 0), reverse=True) + for n, c in sorted_contrib: + if c != 0: + f.write("{0} ({1})\n".format(n, c)) + +## Writes release note to ./doc/release-notes based on git shortlog when current version number is specified +def generate_release_note(version, filename): + print "Automatically generating release notes for {0} from git shortlog. Should review {1} for accuracy.".format(version, filename) + prev_tag = subprocess.Popen(['git describe --abbrev=0 v{0}^'.format(version)], shell=True, stdout=subprocess.PIPE).communicate()[0].strip() + print "Previous release tag: ", prev_tag + notes = subprocess.Popen(['git shortlog --no-merges {0}..v{1}'.format(prev_tag, version)], shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE).communicate()[0] + lines = notes.split('\n') + lines = [alias_authors_in_release_notes(line) for line in lines] + release_note = os.path.join(doc_dir, 'release-notes', 'release-notes-{0}.md'.format(version)) + with open(release_note, 'w') as f: + f.writelines('\n'.join(lines)) + +def main(version, filename): + if version != None: + generate_release_note(version, filename) + document_authors() + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument('--version') + args = parser.parse_args() + + root_dir = os.path.dirname(os.path.dirname(os.path.realpath(__file__))) + doc_dir = os.path.join(root_dir, 'doc') + version = None + filename = None + if args.version: + version = args.version + filename = 'release-notes-{0}.md'.format(version) + main(version, filename)