grin/doc/code_structure.md
Simon B 7c3994e521 Cleanup docs before testnet2 (#798)
* move FAQ.md to https://github.com/mimblewimble/docs/wiki/FAQ and unduplicate (Troubleshooting segment already present on its own wiki page)
* Update doc/style and move it into CONTRIBUTING.
* group up docs overview for more clarity
* link to previously unlinked content in the docs overview
* update + cleanup doc/build
* Update links to reflect troubleshooting is now only in the wiki
* More link fixes and spelling
* Remove doc/usage.md that I've faile to keep updated, and use a wiki page instead
* Last forgotten CONTRIBUTING.md fix
2018-03-17 18:08:40 +00:00

58 lines
3.3 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# grin code structure
grin is built in [rust](https://www.rust-lang.org/), a memory safe, compiled language. Performance critical parts like the Cuckoo mining algorithm are built as plugins, making it easy to swap between algorithm implementations for various hardware. Grin comes with CPU and experimental GPU support.
## Files in project root
List of files tracked in `git` and some files you'll create when you use grin.
- [CODE_OF_CONDUCT](../CODE_OF_CONDUCT.md) - How to behave if you want to participate. Taken from rust. Slightly modified.
- [CONTRIBUTING](../CONTRIBUTING.md) - How to help and become part of grin.
- [Cargo.toml](../Cargo.toml) and Cargo.lock (locally created, _not_ in git) - defines how to the project code is to be compiled and built
- [LICENSE](../LICENSE) - Apache 2.0 license
- [README](../README.md) - The first document you should read, with pointers to find more detail.
- [rustfmt.toml](../rustfmt.toml) - configuration file for rustfmt. Required before contributing _new_ code.
## Folder structure
After checking out grin, building and using, these are the folders you'll have:
- api
Code for ApiEndpoints accessible over REST.
- chain
The blockchain implementation. Accepts a block (see pipe.rs) and adds it to the chain, or reject it.
- config
Code for handling configuration.
- core
All core types: Hash, Block, Input, Output, and how to serialize them. Core mining algorith, and more.
- doc
All documentation.
- grin
Code for the `grin` binary. Many parts (adapters, lib, miner, seed, server, sync, types) that the `grin` binary needs.
- keychain
Code for working safely with keys and doing blinding.
- p2p
All peer to peer connection and protocol-related logic (handshake, block propagation, etc.).
- pool
Code for the transaction pool implementation.
- pow
The Proof-of-Work algorithm. Testnet1 uses algo Cuckoo16. Mainnet uses Cuckoo32, the best known choice for GPU mining on 4GB cards.
- server
A folder you're [supposed to create](build.md#running-a-node), before starting your server: cd to project root; mkdir server; cd server; grin server start (or run) and it will create a subfolder .grin
- .grin
- chain - a Rocksdb with the blockchain blocks and related information
- peers - a Rocksdb with the list of Grin peers you're connected to
- txhashset - containts folders kernel, rangeproof and output that each have a pmmr_dat.bin
- src
Code for the `grin` binary.
- store
Data store - a thin wrapper for Rocksdb, a key-value database forked from LevelDB.
- target
Where the grin binary ends up, after the compile and build process finishes.
In case of trouble, see [troubleshooting](https://github.com/mimblewimble/docs/wiki/Troubleshooting)
- util
Low-level rust utilities.
- wallet
A folder you're [supposed to create](build.md), before creating your wallet: cd to project root; mkdir wallet; cd wallet; grin wallet init
- wallet.dat - your "outputs", that once confirmed and matured, can be spent with the [`grin wallet send`](wallet.md) command. (locally created, _not_ in git)
- wallet.seed - your secret wallet seed. (locally created, _not_ in git)
## grin dependencies
- [secp256k1](https://github.com/mimblewimble/rust-secp256k1-zkp)
Integration and rust bindings for libsecp256k1, and some changes waiting to be upstreamed. Imported in util/Cargo.toml.