Go implementation of the Ethereum protocol
Find a file
2019-03-25 15:37:40 +07:00
.github remove issue template 2018-04-03 11:45:08 +07:00
accounts new blocksigner contract 2018-07-23 11:05:03 +07:00
bmt all: use gometalinter.v2, fix new gosimple issues (#15650) 2017-12-12 19:05:47 +01:00
build remove unused files in build/ 2018-07-31 14:49:33 +07:00
cmd create new func penalties for hard fork 2019-03-05 15:13:25 +07:00
common set TIP random to 3410000 2019-03-25 15:36:41 +07:00
compression/rle rlp, trie, contracts, compression, consensus: improve comments (#14580) 2017-06-12 14:45:17 +02:00
consensus move unit-test to posv 2019-03-22 15:33:24 +07:00
console Update console_test.go 2019-01-04 12:26:43 +07:00
containers/docker containers: drop vagrant support, noone's maintaining it 2018-03-14 13:23:40 +02:00
contracts create new func penalties for hard fork 2019-03-05 15:13:25 +07:00
core remove fork point, check signHash != nil 2019-03-12 10:19:46 +07:00
crypto gofmt 2018-10-04 17:13:39 +07:00
dashboard cmd, ethdb, vendor: integrate leveldb iostats (#16277) 2018-03-08 14:59:00 +02:00
docker minor organisation tweak 2019-03-05 18:03:53 +07:00
eth return penalties at randomize tip fork 2019-03-22 15:39:32 +07:00
ethclient all: switch gas limits from big.Int to uint64 2018-01-03 14:45:35 +02:00
ethdb cmd: export preimages in RLP, support GZIP, uniform with block export 2018-03-26 14:08:01 +03:00
ethstats correct peer on stats 2019-01-30 22:50:12 +07:00
event event: fix datarace between Subscribe and Send 2017-10-20 14:42:19 +03:00
genesis change genesis to reset Testnet 2019-02-12 16:33:55 +07:00
internal Fixed randomize for prevent case m2 down affect to m1. 2019-03-22 15:33:24 +07:00
les fix error read reward 2019-01-02 15:42:44 +07:00
light light: new CHT for ropsten (#16393) 2018-03-27 10:09:15 +03:00
log log: fix megacheck warnings 2017-08-07 13:40:05 +03:00
metrics metrics: fix flaky Example metrics test (#16222) 2018-03-01 19:55:31 +02:00
miner fix signing with m1 = m2 2019-03-22 11:31:26 +07:00
mobile whisper: some components are still using v5, switch to v6 2018-03-22 15:48:52 +01:00
node refactor name flag committxwhennotmining -> announce-txs 2018-12-10 13:45:46 +07:00
p2p Fixed golint. 2018-11-06 11:40:47 +07:00
params set version to v1.3.2 2019-03-25 15:37:40 +07:00
rlp rlp: fix string size check in readKind (#15625) 2017-12-11 22:47:10 +01:00
rpc Fixed randomize for prevent case m2 down affect to m1. 2019-03-22 15:33:24 +07:00
swarm Fixed minimum gas used when deploy SMC. 2019-01-04 11:17:24 +07:00
tests Fixed unit test for new m2 block header. 2018-10-25 01:27:23 +07:00
trie create new func penalties for hard fork 2019-03-05 15:13:25 +07:00
vendor upgrade github.com/rjeczalik/notify 2018-11-20 09:56:16 +07:00
whisper whisper: fix issue in topic list copy (#16381) 2018-03-27 17:26:08 +02:00
.dockerignore dockerignore, internal/build: forward correct git folder 2017-11-12 22:52:41 +02:00
.gitattributes .gitattributes: add 2015-08-06 17:18:59 +02:00
.gitignore merge upstream 2018-05-03 04:05:41 +00:00
.mailmap all: update license information (#16089) 2018-02-14 13:49:11 +01:00
.travis.yml remove autotag for testnet release channel 2018-11-20 16:32:44 +07:00
appveyor.yml travis, Dockerfile, appveyor, build: bump to Go 1.10 2018-03-08 16:34:26 +02:00
AUTHORS all: update license information (#16089) 2018-02-14 13:49:11 +01:00
COPYING all: update license information 2015-07-07 14:12:44 +02:00
COPYING.LESSER all: update license information 2015-07-07 14:12:44 +02:00
Dockerfile Add new pipeline for bootnode binary 2018-07-23 14:57:59 +07:00
Dockerfile.bootnode refactor bootnode docker 2018-09-12 17:10:02 +07:00
Dockerfile.node Update node Dockerfile with new env 2018-12-10 11:58:39 +07:00
interfaces.go all: switch gas limits from big.Int to uint64 2018-01-03 14:45:35 +02:00
Makefile clean up Makefile 2018-07-31 14:49:10 +07:00
README.md Corrections to grammar and sentences 2019-01-02 02:14:50 -05:00

Tomochain

Build Status Join the chat at https://gitter.im/tomochain/tomochain

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 a Proof of Stake Voting consensus that can support near-zero fee, and 2-second transaction confirmation times. 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, and hardware integration will be continuously researched and incorporated into Tomochain's masternode architecture. This architecture 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

Read more about us on:

Building the source

Tomochain provides a client binary called tomo for both running a masternode and running a full-node. Building tomo requires both a Go (1.7+) and C compiler; install both of these.

Once the dependencies are installed, just run the below commands:

$ git clone https://github.com/tomochain/tomochain tomochain
$ cd tomochain
$ make tomo

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

Running tomo

Running a tomo masternode

Please refer to the official documentation on how to run a node if your 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 https://stats.testnet.tomochain.com. If you'd like to experiment with smart contract creation and DApps, you might be interested to give these a try on our Testnet.

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

$ tomo attach https://testnet.tomochain.com

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 https://raw.githubusercontent.com/tomochain/tomochain/master/genesis/testnet.json -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@52.221.28.223:30301,enode://298780104303fcdb37a84c5702ebd9ec660971629f68a933fd91f7350c54eea0e294b0857f1fd2e8dba2869fcc36b83e6de553c386cf4ff26f19672955d9f312@13.251.101.216:30301,enode://46dba3a8721c589bede3c134d755eb1a38ae7c5a4c69249b8317c55adc8d46a369f98b06514ecec4b4ff150712085176818d18f59a9e6311a52dbe68cff5b2ae@13.250.94.232:30301"

// 6. Start up tomo now
$ export NAME=YOUR_NODE_NAME
$ tomo \
  --verbosity 4 \
  --datadir $DATA_DIR \
  --keystore $KEYSTORE_DIR \
  --identity $NAME \
  --password $DATA_DIR \
  --networkid 89 \
  --port 30303 \
  --rpc \
  --rpccorsdomain "*" \
  --rpcaddr 0.0.0.0 \
  --rpcport 8545 \
  --rpcvhosts "*" \
  --ws \
  --wsaddr 0.0.0.0 \
  --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-chain interoperabilty

Contributing and technical discussion

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 to official Go formatting guidelines (i.e uses gofmt).
  • Code comments must adhere to the official Go commentary guidelines.
  • Pull requests need to be based on and opened against the master branch.
  • Any code 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.