What is Incognito?
We now live in a token economy. Everything is being tokenized. Fiats. Gold. Bond. Storage. Computing Power. Digital Art. Collectibles. Buildings. More.
We believe the biggest problem to this new token economy is the lack of privacy. Current blockchains display all transactions publicly — so anyone can see your balances or track your activity. Given the choice, we strongly believe that very few people will willingly disclose their crypto financials to the entire world. Incognito offers anyone the option to turn on privacy mode in this new token economy.
That's why we work to create solutions that make privacy widely accessible and incredibly simple for anyone, anywhere on earth, to exercise their right to that choice.
Incognito is live. Give it a try!
Github branches and running environments
In Incognito’s Git version control, there are three main branches, first for core team development, second for release and third for production:
-
development (on Testnet 1): this is a branch that developers would branch from for building feature X and create pull requests to merge into. The code on this branch is usually deployed onto Testnet 1.
-
release (on Testnet 2): After finishing testing on Testnet 1, the changes from development branch would be merged into this branch then deployed onto Testnet 2. The code on this branch should be almost the same as production’s.
-
production (on Mainnet): After finishing testing on Testnet 2, the changes from release branch would be merged into this branch then deployed onto Mainnet. In an emergency case, hot fixes would also be branched directly from this branch and merged into it through PR(s). The fixes would be deployed onto Mainnet and then cherry-picked into release & development branches.
Build the code
The below instructions will get you up and running on your local machine for development and testing purposes. Building Incognito requires Go. Once Go is installed, clone this project to your local GOPATH and build it.
go build -o incognito
Then, run an Incognito Node
./incognito -n incognito --testnet false --discoverpeers --discoverpeersaddress 51.91.72.45:9330 --miningkeys "your validator key" --nodemode "auto" --datadir "/path/to/data" --listen "0.0.0.0:9334" --externaladdress "0.0.0.0:9334" --norpcauth --enablewallet --wallet "incognito" --walletpassphrase "your wallet passphrase" --walletautoinit --rpclisten "0.0.0.0:9335" --rpcwslisten "0.0.0.0:9336" --loglevel "info"
Read the code
There is more than 1 million lines of code in the Incognito codebase. Below is a quick overview of Incognito architecture and its key components that will help you navigate through the code.
-
P2P Networking
-
Peer Management. Peer management handles peer-to-peer communications such as finding peers, connecting to them, sending and receiving transactions, blocks, and messages. Its code is in the connmanager package and addrmanager package.
-
NetSync. NetSync is a mediator that receives incoming messages, parses them, and routes the messages to the right components. Its code is in netsync package.
-
Highway. Highway is a new network topology design that speeds up P2P communications. Its code is in highway repo.
-
Blockchain
-
Shards. Shards are subchains. A subchain is a Proof-of-Stake blockchain with its own committee of N nodes. A shard's job is to produces new block via a Practical Byzantine Fault Toloerance (pBFT) consenus algorithm. Its code is in the blockchain package.
-
Beacon. Beacon is also a subchain. A beacon's job is to coordinates the shards and maintain the global state of the network. Its code is in the blockchain package.
-
Synker. Synker makes sure the node is up to date among its peers and also broadcasts the node status to its peers. Its code is in the blockchain package.
-
Mempool. Mempool (memory pool) is a collection of transactions and blocks that have been verified but are not yet confirmed. Its code is in the mempool package.
-
Wallet. Software that holds all your Incognito keys. Use it to send and receive your Incognito tokens. Its code is in the wallet package.
-
Database. Incognito uses LevelDB to store block data. Its code is in the drawdbv2 package and statedb package.
-
Core
-
Developer Tools
-
RPC. RPC lets developers interact with Incognito via your own programs. Its code is in the rpcserver package.
-
WebSocket. WebSocket is another way for developers to interact with Incognito via your own programs. Its code is in the rpcserver package.
-
SDK. Incognito is working on Developer SDKs to make it even easier to build on top of Incognito. Estimated ship date (TBD).
-
Apps
-
Mobile Apps. It's easy to build your own mobile apps on top of Incognito, once the SDK is available. Here is an example: Mobile Wallet.
-
Web Apps. It's easy to build your web apps on top of Incognito, once the SDK is available. Here are some examples: Web Wallet or a Desktop Network Monitor.
-
Hardware Devices. It's easy to build your own hardware on top of Incognito, once the SDK is available. Here is an example: Node Device.
Contribution
Incognito is and will always be 100% open-source. Anyone can participate, everyone can join, no one can ever restrict or control Incognito. There are many ways to participate.
-
Report a bug via Github Issues
-
Suggest a new feature via Github Issues
-
Want to build a feature or fix a bug? Please send a Pull Request for the maintainers to review your code and merge into the main codebase.
-
Write tests. We'll provide instructions soon how to setup local test environment.
License
Incognito is released under the terms of the MIT license. See COPYING for more information or see LICENSE