Minimal implementation of the Mimblewimble protocol.
Find a file
AntiochP cbd3b2ff87
hash (features|commitment) in output mmr (#615)
* experiment with lock_heights on outputs

* playing around with lock_height as part of the switch commitment hash

* cleanup

* include features in the switch commit hash key

* commit

* rebase off master

* commit

* cleanup

* missing docs

* rework coinbase maturity test to build valid tx

* pool and chain tests passing (inputs have switch commitments)

* commit

* cleanup

* check inputs spending coinbase outputs have valid lock_heights

* wip - got it building (tests still failing)

* use zero key for non coinbase switch commit hash

* fees and height wrong order...

* send output lock_height over to wallet via api

* no more header by height index
workaround this for wallet refresh and wallet restore

* refresh heights for unspent wallet outputs where missing

* TODO - might be slow?

* simplify - do not pass around lock_height for non coinbase outputs

* commit

* fix tests after merge

* build input vs coinbase_input
switch commit hash key encodes lock_height
cleanup output by commit index (currently broken...)

* is_unspent and get_unspent cleanup - we have no outputs, only switch_commit_hashes

* separate concept of utxo vs output in the api
utxos come from the sumtrees (and only the sumtrees, limited info)
outputs come from blocks (and we need to look them up via block height)

* cleanup

* better api support for block outputs with range proofs

* basic wallet operations appear to work
restore is not working fully
refresh refreshes heights correctly (at least appears to)

* wallet refresh and wallet restore appear to be working now

* fix core tests

* fix some mine_simple_chain tests

* fixup chain tests

* rework so pool tests pass

* wallet restore now safely habndles duplicate commitments (reused wallet keys)
for coinbase outputs where lock_height is _very_ important

* wip

* validate_coinbase_maturity
got things building
tests are failing

* lite vs full versions of is_unspent

* builds and working locally
zero-conf - what to do here?

* handle zero-conf edge case (use latest block)

* introduce OutputIdentifier, avoid leaking SumCommit everywhere

* fix the bad merge

* pool verifies coinbase maturity via is_matured
this uses sumtree in a consistent way

* cleanup

* add docs, cleanup build warnings

* fix core tests

* fix chain tests

* fix pool tests

* cleanup debug logging that we no longer need

* make out_block optional on an input (only care about it for spending coinbase outputs)

* cleanup

* bump the build
2018-01-16 22:03:40 -05:00
.hooks fix the bash array loop 2017-12-20 15:37:23 -05:00
api hash (features|commitment) in output mmr (#615) 2018-01-16 22:03:40 -05:00
chain hash (features|commitment) in output mmr (#615) 2018-01-16 22:03:40 -05:00
config Forgotten testnet1 cherries (#475) 2017-12-13 21:52:21 +00:00
core hash (features|commitment) in output mmr (#615) 2018-01-16 22:03:40 -05:00
doc coinbase maturity and output lock height docs (#597) 2018-01-16 07:46:49 -05:00
grin hash (features|commitment) in output mmr (#615) 2018-01-16 22:03:40 -05:00
keychain hash (features|commitment) in output mmr (#615) 2018-01-16 22:03:40 -05:00
p2p Add POST peers/a.b.c.d/unban in REST API (#571) 2018-01-04 03:25:14 +00:00
pool hash (features|commitment) in output mmr (#615) 2018-01-16 22:03:40 -05:00
pow miner timing resolution (#351) 2017-11-20 22:57:36 +00:00
src/bin Add ban/unban in grin client (#620) 2018-01-16 01:44:03 +00:00
store pmmr should not depend on switch_commit_hash to identify utxo (#576) 2018-01-04 13:38:46 -05:00
util Aggsig Serialization (#618) 2018-01-15 20:45:26 +00:00
wallet hash (features|commitment) in output mmr (#615) 2018-01-16 22:03:40 -05:00
.gitignore Markdown fixes + gitignore addition (#334) 2017-11-20 14:33:35 +00:00
.travis.yml Adding kcov code coverage to chain and core modules (#547) 2018-01-06 20:54:46 +00:00
Cargo.toml Update ``grin client status`` (#599) 2018-01-11 05:25:48 +00:00
CODE_OF_CONDUCT.md Fix code of conduct typo: adapter -> adapted (#614) 2018-01-15 20:26:12 +00:00
CONTRIBUTING.md updating contribution guidelines with info on how to submit documentation changes 2017-11-07 21:45:52 +00:00
grin.toml better error messages + some cleanup (#497) 2017-12-18 08:17:11 -05:00
LICENSE Create LICENSE 2017-06-29 09:24:44 -07:00
README.md Add kcov support (#545) 2017-12-27 02:09:10 +00:00
rustfmt.toml Start of a binary file for the grin node 2017-04-24 18:55:01 -07:00

Build Status Gitter chat Codecov coverage status

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, aiming to stay as such.
  • Follows the MimbleWimble protocol, which provides great anonymity and scaling characteristics.
  • Cuckoo Cycle proof of work (at least to start with).
  • Relatively fast block time (a minute or less, possibly decreasing as networks improve).
  • Fixed block reward, both over time and in blocks (fees are not additive).
  • Transaction fees are based on the number of UTXO created/destroyed and total transaction size.
  • Smooth curve for difficulty adjustments.

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

Status

Grin is still an infant, 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 disrepect 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.