Minimal implementation of the Mimblewimble protocol.
Find a file
Antioch Peverell 20e5c1910b
NRD rules and "recent" kernel pos index (#3302)
* variants for output_pos linked list entries (head/tail/middle/unique)
next and prev and Vec<u8> lmdb keys

* get_pos on enum

* break list and list entries out into separate enums

* track output features in the new output_pos index, so we can determine coinbase maturity

* push entry impl for none and unique

* some test coverage for output_pos_list

* commit

* wip - FooListEntry

* use instance of the index

* linked list of output_pos and commit_pos both now supported

* linked_list

* cleanup and rename

* rename

* peek_pos

* push some, peek some, pop some

* cleanup

* commit pos
cleanup

* split list and entry out into separate db prefixes

* cleanup and add placeholder for pop_back

* pop_pos_back (for popping off the back of the linked list)
test coverage for pop_pos_back

* wip

* placeholder for prune via a trait
pos must always increase in the index

* rewind kernel_pos_idx when calling rewind_single_block

* RewindableListIndex with rewind support.

* test coverage for rewindable list index

* test coverage for rewind back to 0

* rewind past end of list

* add tests for kernel_pos_idx with multiple commits

* commit

* cleanup

* hook NRD relative lock height validation into block processing and tx validation

* cleanup

* set local chain type for kernel_idx tests

* add test coverage for NRD rules in block processing

* NRD test coverage and cleanup

* NRD relative height 1 test

* test coverage for NRD kernels in block processing

* cleanup

* start of test coverage for txpool NRD kernel rules

* wip

* rework pool tests to use real chain (was mock chain) to better reflect reality (tx/block validation rules etc.)

* cleanup

* cleanup pruneable trait for kernel pos index

* add clear() to kernel_pos idx and test coverage

* hook kernel_pos rebuild into node startup, compaction and fast sync

* verify full NRD history on fast sync

* return early if nrd disabled

* fix header sync issue
2020-06-10 16:38:29 +01:00
.cargo windows cargo settings (#2632) 2019-02-26 16:48:45 +00:00
.ci Update Cursive to 0.14 and update backend. (#3291) 2020-04-17 15:41:55 -04:00
.github Update contributing guidelines (#2563) 2019-02-19 14:29:58 +00:00
.hooks chore: pre-commit hook - format all staged files, re-add then commit (#3078) 2019-10-07 21:00:41 +01:00
api NRD rules and "recent" kernel pos index (#3302) 2020-06-10 16:38:29 +01:00
chain NRD rules and "recent" kernel pos index (#3302) 2020-06-10 16:38:29 +01:00
config Cargo Update (#3338) 2020-06-08 17:15:32 -04:00
core NRD rules and "recent" kernel pos index (#3302) 2020-06-10 16:38:29 +01:00
doc Update link to podcast featuring tromp (#3283) 2020-03-30 11:10:42 -05:00
etc thread local chain type vs global chain type (#3327) 2020-05-22 12:51:58 +01:00
keychain Cargo Update (#3338) 2020-06-08 17:15:32 -04:00
p2p Cargo Update (#3338) 2020-06-08 17:15:32 -04:00
pool NRD rules and "recent" kernel pos index (#3302) 2020-06-10 16:38:29 +01:00
servers Cargo Update (#3338) 2020-06-08 17:15:32 -04:00
src Cargo Update (#3338) 2020-06-08 17:15:32 -04:00
store NRD rules and "recent" kernel pos index (#3302) 2020-06-10 16:38:29 +01:00
util Cargo Update (#3338) 2020-06-08 17:15:32 -04:00
.editorconfig [1.1.0] Merge master into 1.1.0 (#2720) 2019-04-01 11:47:48 +01:00
.gitignore ignore .vscode (#3333) 2020-05-24 23:34:33 +02:00
azure-pipelines.yml Use latest hosted agent for CI (#3278) 2020-04-14 09:25:10 -04:00
Cargo.lock NRD rules and "recent" kernel pos index (#3302) 2020-06-10 16:38:29 +01:00
Cargo.toml Cargo Update (#3338) 2020-06-08 17:15:32 -04:00
CODE_OF_CONDUCT.md Many typo fixes (#1158) 2018-06-13 17:03:34 +01:00
CONTRIBUTING.md Remove old website for grin.mw (#3195) 2020-01-17 16:29:55 -05:00
LICENSE Create LICENSE 2017-06-29 09:24:44 -07:00
README.md Replace Gitter by Keybase in README.MD (#3215) 2020-01-30 17:08:20 -05:00
rustfmt.toml Update hyper/tokio/futures dependencies (#3214) 2020-02-18 23:45:27 +01:00
SECURITY.md Remove old website for grin.mw (#3195) 2020-01-17 16:29:55 -05:00

Build Status Coverage Status Chat Support Documentation Wiki Release Version License

Grin

Grin is an in-progress implementation of the Mimblewimble protocol. Many characteristics are still undefined but the following constitutes a first set of choices:

  • Clean and minimal implementation, and aiming to stay as such.
  • Follows the Mimblewimble protocol, which provides hidden amounts and scaling advantages.
  • Cuckoo Cycle proof of work in two variants named Cuckaroo (ASIC-resistant) and Cuckatoo (ASIC-targeted).
  • Relatively fast block time: one minute.
  • Fixed block reward over time with a decreasing dilution.
  • Transaction fees are based on the number of Outputs created/destroyed and total transaction size.
  • Smooth curve for difficulty adjustments.

To learn more, read our introduction to Mimblewimble and Grin.

Status

Grin is live with mainnet. Still, much is left to be done and contributions are welcome (see below). Check our mailing list archives for the latest status.

Contributing

To get involved, read our contributing docs.

Find us:

Getting Started

To learn more about the technology, read our introduction.

To build and try out Grin, see the build docs.

Philosophy

Grin likes itself small and easy on the eyes. It wants to be inclusive and welcoming for all walks of life, without judgement. Grin is terribly ambitious, but not at the detriment of others, rather to further us all. It may have strong opinions to stay in line with its objectives, which doesn't mean disrespect of others' ideas.

We believe in pull requests, data and scientific research. We do not believe in unfounded beliefs.

Credits

Tom Elvis Jedusor for the first formulation of Mimblewimble.

Andrew Poelstra for his related work and improvements.

John Tromp for the Cuckoo Cycle proof of work.

J.K. Rowling for making it despite extraordinary adversity.

License

Apache License v2.0.