Minimal implementation of the Mimblewimble protocol.
Find a file
Ignotus Peverell d189770080 Wallet LMDB backend (#1151)
* Migrate main node store to LMDB

In preparation to using LMDB as a wallet database, migrate the
node db. There's no point in having 2 key-value stores.
In addition LMDB provides a few advantages as a node db, namely a
much faster build (compared to RocksDb), lesser dependencies and
transactions.

* Migrated p2p store to lmdb, stuff compiles

* More fixes, chain tests starting to pass

* Fixed txhashset rollback messing with block save and general batch delimitation. Chain tests passing.

* rustfmt

* LMDB max map size of 10MB isn't really workable. Half TB seems reasonable.

* Fix wallet tests

* Rather crucial commit was missing

* rustfmt

* Fixing new merged tests following lmdb changes

* rustfmt

* * Make txhashset validation read-only on fast sync to avoid having
a really long open transaction.
* Fix deadlock in new block processing, batch should always be
created within a txhashset lock (when they interact).

* Comment about batch and txhashset interlacing

* Fix store tests to use batch

* Externalize wallet config and seed

* Converted direct read access to file outputs map to an iterator

* Cleaned up and simplified wallet Backend trait:

* No more direct mutable access to internal structures (HashMap)
* Batch interface for all writes
* Remove unneeded read wrapper (read_wallet)

* rustfmt

* First (incomplete) pass at wallet LMDB backend

* Progressing on lmdb backent iml

* Added batch impl for LMDB wallet backend. Pretty much done with it, but not sure how to deal with commit (owned).

* rustfmt

* Wrapping LMDB batch around a refcell to work around borrow rules

* Compilation up to grin chain
2018-06-22 09:08:06 +01:00
.hooks Make pre-commit more portable (#993) 2018-04-22 08:33:58 -04:00
api Wallet LMDB backend (#1151) 2018-06-22 09:08:06 +01:00
chain Wallet LMDB backend (#1151) 2018-06-22 09:08:06 +01:00
config [consensus breaking] New Improved Merkle Proofs (#1119) 2018-06-20 15:18:52 -04:00
core Wallet LMDB backend (#1151) 2018-06-22 09:08:06 +01:00
doc Fix typo (#1181) 2018-06-20 09:31:55 -04:00
keychain Kernel sum and MMR sizes in block header (#1163) 2018-06-21 02:30:22 +01:00
p2p Wallet LMDB backend (#1151) 2018-06-22 09:08:06 +01:00
pool Wallet LMDB backend (#1151) 2018-06-22 09:08:06 +01:00
servers Wallet LMDB backend (#1151) 2018-06-22 09:08:06 +01:00
src Wallet LMDB backend (#1151) 2018-06-22 09:08:06 +01:00
store Wallet LMDB backend (#1151) 2018-06-22 09:08:06 +01:00
util Wallet LMDB backend (#1151) 2018-06-22 09:08:06 +01:00
wallet Wallet LMDB backend (#1151) 2018-06-22 09:08:06 +01:00
.editorconfig Add a .editorconfig file 2018-05-07 10:08:55 -04:00
.gitignore add test_output to .gitignore (#1092) 2018-05-25 21:34:49 -04:00
.gitlab-ci.yml Add gitlab ci config (#860) 2018-03-25 17:41:49 +00:00
.travis.yml As per Travis CI advice trying sudo builds 2018-06-20 17:11:13 +01:00
Cargo.lock Wallet LMDB backend (#1151) 2018-06-22 09:08:06 +01:00
Cargo.toml [milestone/testnet3] Handle SIGINT and SIGTERM (#1182) 2018-06-20 23:16:02 -04:00
CODE_OF_CONDUCT.md Many typo fixes (#1158) 2018-06-13 17:03:34 +01:00
CONTRIBUTING.md Cleanup docs before testnet2 (#798) 2018-03-17 18:08:40 +00:00
Dockerfile Add a minimal dockerfile (#1136) 2018-06-05 14:54:06 -04:00
grin.toml Web wallet api updates (#1155) 2018-06-11 18:19:38 +01:00
LICENSE Create LICENSE 2017-06-29 09:24:44 -07:00
README.md Many typo fixes (#1158) 2018-06-13 17:03:34 +01:00
rustfmt.toml cannot use write_mode in rustfmt.toml in stable (get rid of the warnings) (#752) 2018-03-05 15:23:52 -05: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.
  • Relatively fast block time (a 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 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 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.