The efficient platform for the token economy
Clone or download
Pull request Compare This branch is 582 commits ahead, 885 commits behind ethereum:master.
ngtuna Merge pull request #280 from ngtuna/clean-up
some code clean up for mainnet
Latest commit 9c84193 Dec 10, 2018
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github remove issue template Apr 3, 2018
accounts new blocksigner contract Jul 23, 2018
bmt all: use gometalinter.v2, fix new gosimple issues (#15650) Dec 12, 2017
build remove unused files in build/ Jul 31, 2018
cmd refactor name flag committxwhennotmining -> announce-txs Dec 10, 2018
common Fixed genesis for add team MSW contract. Dec 4, 2018
compression/rle rlp, trie, contracts, compression, consensus: improve comments (#14580) Jun 12, 2017
consensus small c.HookValidator refactor, some more clean-up Dec 10, 2018
console fix typo Apr 10, 2018
containers/docker containers: drop vagrant support, noone's maintaining it Mar 14, 2018
contracts update smart contract after audit, change to solc 0.4.21 Dec 7, 2018
core tiny make up Dec 10, 2018
crypto gofmt Oct 4, 2018
dashboard fix reduce change code Aug 28, 2018
docker update file to env in entrypoint Dec 10, 2018
eth small c.HookValidator refactor, some more clean-up Dec 10, 2018
ethclient all: switch gas limits from big.Int to uint64 Jan 3, 2018
ethdb cmd: export preimages in RLP, support GZIP, uniform with block export Mar 26, 2018
ethstats omit ethstats weird warning msg Jul 27, 2018
event event: fix datarace between Subscribe and Send Oct 20, 2017
genesis create tmp mainnet genesis block Nov 26, 2018
internal fix maximum 100 % finality Nov 5, 2018
les Fixed test problem when change config MaxBlockFetch in downloader. Aug 17, 2018
light light: new CHT for ropsten (#16393) Mar 27, 2018
log log: fix megacheck warnings Aug 7, 2017
metrics metrics: fix flaky Example metrics test (#16222) Mar 1, 2018
miner small c.HookValidator refactor, some more clean-up Dec 10, 2018
mobile whisper: some components are still using v5, switch to v6 Mar 22, 2018
node refactor name flag committxwhennotmining -> announce-txs Dec 10, 2018
p2p Fixed golint. Nov 6, 2018
params bump up to v1.1.0 Dec 10, 2018
rlp rlp: fix string size check in readKind (#15625) Dec 11, 2017
rpc Disable function send transaction with rpc Aug 22, 2018
swarm Fixed golint. Nov 6, 2018
tests Fixed unit test for new m2 block header. Oct 24, 2018
trie metrics: pull library and introduce ResettingTimer and InfluxDB repor… Feb 23, 2018
vendor upgrade Nov 20, 2018
whisper whisper: fix issue in topic list copy (#16381) Mar 27, 2018
.dockerignore dockerignore, internal/build: forward correct git folder Nov 12, 2017
.gitattributes .gitattributes: add Aug 6, 2015
.gitignore merge upstream May 3, 2018
.mailmap all: update license information (#16089) Feb 14, 2018
.travis.yml remove autotag for testnet release channel Nov 20, 2018
AUTHORS all: update license information (#16089) Feb 14, 2018
COPYING all: update license information Jul 7, 2015
COPYING.LESSER all: update license information Jul 7, 2015
Dockerfile Add new pipeline for bootnode binary Jul 23, 2018
Dockerfile.bootnode refactor bootnode docker Sep 12, 2018
Dockerfile.node Update node Dockerfile with new env Dec 10, 2018
Makefile clean up Makefile Jul 31, 2018 Update Nov 23, 2018
appveyor.yml travis, Dockerfile, appveyor, build: bump to Go 1.10 Mar 8, 2018
interfaces.go all: switch gas limits from big.Int to uint64 Jan 3, 2018


Build Status Join the chat at

About Tomochain

TomoChain is an innovative solution to the scalability problem with the Ethereum blockchain. Our mission is to be a leading force in building the Internet of Value, and its infrastructure. We are working to create an alternative, scalable financial system which is more secure, transparent, efficient, inclusive and equitable for everyone.

TomoChain relies on a system of 150 Masternodes with Proof of Stake Voting consensus that can support near-zero fee, and 2-second transaction confirmation time. Security, stability and chain finality are guaranteed via novel techniques such as double validation, staking via smart-contracts and "true" randomization processes.

Tomochain supports all EVM-compatible smart-contracts, protocols, and atomic cross-chain token transfers. New scaling techniques such as sharding, private-chain generation, hardware integration will be continuously researched and incorporated into Tomochain's masternode architecture which will be an ideal scalable smart-contract public blockchain for decentralized apps, token issuances and token integrations for small and big businesses.

More details can be found at our technical white paper

Reading more about us on:

Tomochain vs Giants

Tomochain is built by the mindset of standing on the giants shoulder. We have learned from all advanced technical design concept of many well-known public blockchains on the market and shaped up the platform with our own ingredients. See below the overall technical comparison table that we try to make clear the position of Tomochain comparing to some popular blockchains at the top-tier.


Building the source

Tomochain provides client binary called tomo for both running a masternode and running a full-node. Building tomo requires both a Go (1.7+) and a C compiler. Install them by your own way. Once the dependencies are installed, just run below commands:

$ git clone tomochain
$ cd tomochain
$ make tomo

Alternatively, you could quickly download pre-complied binary on our github release page

Running tomo

Running a tomo masternode

Please refer to the official documentation on how to run a node if you goal is to run a masternode. The recommanded ways of running a node and applying to become a masternode are explained in detail there.

Attaching to the Tomochain test network

We published our test network 2.0 with full implementation of PoSV consensus at If you'd like to experiment with smart contracts creation and DApps, you might be interested in giving it a try on our Testnet.

In order to connect to one of the masternodes on the Testnet, just run the command below:

$ tomo attach

This will open the JavaScript console and let you query the blockchain directly via RPC.

Running tomo locally

If you would like to run tomo locally to see how it works under the hood and have a copy of the blockchain, you can try it on our Testnet by running the commands below:

// 1. create a folder to store tomochain data on your machine
$ export DATA_DIR=/path/to/your/data/folder
$ mkdir -p $DATA_DIR/tomo

// 2. download our genesis file
$ export GENESIS_PATH=$DATA_DIR/genesis.json
$ curl -L -o $GENESIS_PATH

// 3. init the chain from genesis
$ tomo init $GENESIS_PATH --datadir $DATA_DIR

// 4. get a test account. Create a new one if you don't have any:
$ export KEYSTORE_DIR=keystore
$ touch $DATA_DIR/password && echo 'your-password' > $DATA_DIR/password
$ tomo account new \
      --datadir $DATA_DIR \
      --keystore $KEYSTORE_DIR \
      --password $DATA_DIR/password

// if you already have a test account, import it now
$ tomo  account import ./private_key \
      --datadir $DATA_DIR \
      --keystore $KEYSTORE_DIR \
      --password $DATA_DIR/password

// get the account
$ account=$(
  tomo account list --datadir $DATA_DIR  --keystore $KEYSTORE_DIR \
  2> /dev/null \
  | head -n 1 \
  | cut -d"{" -f 2 | cut -d"}" -f 1

// 5. prepare the bootnodes list
$ export BOOTNODES="enode://4d3c2cc0ce7135c1778c6f1cfda623ab44b4b6db55289543d48ecfde7d7111fd420c42174a9f2fea511a04cf6eac4ec69b4456bfaaae0e5bd236107d3172b013@,enode://298780104303fcdb37a84c5702ebd9ec660971629f68a933fd91f7350c54eea0e294b0857f1fd2e8dba2869fcc36b83e6de553c386cf4ff26f19672955d9f312@,enode://46dba3a8721c589bede3c134d755eb1a38ae7c5a4c69249b8317c55adc8d46a369f98b06514ecec4b4ff150712085176818d18f59a9e6311a52dbe68cff5b2ae@"

// 6. Start up tomo now
$ tomo \
  --verbosity 4 \
  --datadir $DATA_DIR \
  --keystore $KEYSTORE_DIR \
  --identity $NAME \
  --password $DATA_DIR \
  --networkid 89 \
  --port 30303 \
  --rpc \
  --rpccorsdomain "*" \
  --rpcaddr \
  --rpcport 8545 \
  --rpcvhosts "*" \
  --ws \
  --wsaddr \
  --wsport 8546 \
  --wsorigins "*" \
  --mine \
  --gasprice "1" \
  --targetgaslimit "420000000"

Some explanations on the flags

--verbosity: log level from 1 to 5. Here we're using 4 for debug messages
--datadir: path to your data directory created above.
--keystore: path to your account's keystore created above.
--identity: your full-node's name.
--password: your account's password.
--networkid: our testnet network ID.
--port: your full-node's listening port (default to 30303)
--rpc, --rpccorsdomain, --rpcaddr, --rpcport, --rpcvhosts: your full-node will accept RPC requests at 8545 TCP.
--ws, --wsaddr, --wsport, --wsorigins: your full-node will accept Websocket requests at 8546 TCP.
--mine: your full-node wants to register to be a candidate for masternode selection.
--gasprice: Minimal gas price to accept for mining a transaction.
--targetgaslimit: Target gas limit sets the artificial target gas floor for the blocks to mine (default: 4712388)

Road map

The implementation of the following features is being studied by our research team:

  • Layer 2 scalability with state sharding
  • DEX integration
  • Spam filtering
  • Multi-chains interoperabilty

Contribution and technical discuss

Thank you for considering to try out our network and/or help out with the source code. We would love to get your help, feel free to lend a hand. Even the smallest bit of code, bug reporting or just discussing ideas are highly appreciated.

If you would like to contribute to the tomochain source code, please refer to our Developer Guide for details on configuring development environment, managing dependencies, compiling, testing and submitting your code changes to our repo.

Please also make sure your contributions adhere to the base coding guidelines:

  • Code must adhere the official Go formatting guidelines (i.e uses gofmt).
  • Code must be documented adhering to the official Go commentary guidelines.
  • Pull requests need to be based on and opened against the master branch.
  • Problem you are trying to contribute must be well-explained as an issue on our github issue page
  • Commit messages should be short but clear enough and should refer to the corresponding pre-logged issue mentioned above.

For technical discussion, feel free to join our chat at Gitter.