|
1 | | -# Tenderloin |
2 | | -Ethereum smart contracts development environment based on Ethermint/Tendermint |
| 1 | +# Etherloin |
| 2 | + |
| 3 | +Hassle-free Ethereum smart contracts development kit, that uses full-fledged Ethereum cluster and does not require heavyweight mining. |
| 4 | + |
| 5 | +The toolset is based on Docker-compose, Truffle framework and Ethermint/Tendermint. |
| 6 | + |
| 7 | +Etherloin provides private Ethereum (Ethermint) network, that you can use both for smart contracts development and any other blockchain-related operations, e.g. create accounts, transfer funds, etc. |
3 | 8 |
|
4 | 9 | ## Motivation |
5 | 10 |
|
6 | | -TBD |
| 11 | +Project is inspired by existing smart contract development toolkits, such as [Ganache](http://truffleframework.com/ganache/)/TestRPC, [geth-truffle-docker](https://github.com/gregbkr/geth-truffle-docker) and [instant-dapp-ide](https://github.com/dominicwilliams/instant-dapp-ide). |
| 12 | +All 3 are great starting points for smart contract development, but have significant disadvantages: |
| 13 | + |
| 14 | +* Ganache uses TestRPC instead of normal Ethereum Virtual Machine, so it can be used for deploying smart contracts, but not other related activities like acreating accounts and redistributing account funds via thos smart contracts. Another drawback is that Ganache is not docker-friendly out of the box, which adds some overhead for docker-based projects. |
| 15 | +* geth-truffle-docker and instant-dapp-ide use full-fledged go-Ethereum (AKA geth) clients and Docker, which make it free from Ganache issues but introduce a new issue: you have to enabled mining in go-ethereum in order to have gas for using smart contracts. Mining takes lot of system resources and makes development process almost impossible on battery-powered laptops. |
| 16 | + |
| 17 | +Etherlion solves both issues by using Ethermint/Tendermint clients instead of go-ethereum. Ethermint is an Ethereum fork, that uses lightweight Tendermint POS consensus engine, while preserving virtually full backward compatibility with Ethereum. |
7 | 18 |
|
8 | 19 |
|
9 | 20 | ## Usage |
10 | 21 |
|
11 | | -TBD |
| 22 | +### Prerequisites |
| 23 | + |
| 24 | +It is assumed you already have Docker, Docker-compose and familiar with both tools. |
| 25 | + |
| 26 | +### Architecturee |
| 27 | + |
| 28 | +Etherlion consists of multiple Docker containers interacting with each other: |
| 29 | + |
| 30 | +- `ethermaster` – main Ethermint node |
| 31 | +- `etherslave` – slave Ethermint node, have the same functionality as the main one |
| 32 | +- `tendermaster` – Tendermint consensus enging seving `ethermaster` node |
| 33 | +- `tenderslave` - Tendermint consensus enging seving `etherslave` node |
| 34 | +- `geth` – Ethereum console connecting to `ethermaster`. Technically implemented as a vanilla go-ethereum client. |
| 35 | +- `ethutils` – vanilla Ethereum client node with additional tools such as bootnode, etc. Used for cases you need to access any of those tools. |
| 36 | +- `contracts_test` – Truffle-based container that does just 1 thing: runs tests on your Solidity smart contracts. |
| 37 | +- `contracts_deploy` – automatically deploys your Truffle-based smart contracts to the private Ethermint network. |
| 38 | +- `contracts_console` – interactive Truffle console working with private Ethermint network. |
| 39 | +- `netstats` – [eth-netstats](https://github.com/cubedro/eth-netstats) server. Disabled by default, see "Known issues" section. |
| 40 | +- `master_monitor` – netstats client, monitoring master Ethermint node. Disabled by default, see "Known issues" section. |
| 41 | +- `slave_monitor` – netstats client, monitoring slave Ethermint node. Disabled by default, see "Known issues" section. |
| 42 | + |
| 43 | +It is assumed you'll add own containers or enable/disable some of existing ones if needed. |
| 44 | + |
| 45 | +### Typical usage scenarios |
| 46 | + |
| 47 | +- `docker-compose up --build` to start whole development environment |
| 48 | +- Create smart contracts in _contracts/contracts_ directory and appropriate Truffle migrations in _contracts/migrations_ |
| 49 | +- Interact with Ethereum blockchain either programmatically via RPC API or via included geth client: `docker-compose run geth` |
| 50 | + |
| 51 | +### Production usage |
| 52 | + |
| 53 | +Etherloin uses `docker-compose` as on of its main components. However inside it is split into a set of Docker containers, so nothing stops you from using Etherloin-based application in production using docker containers deployment/orchestration tools like Kubernetes, Docker Swarm, etc. |
12 | 54 |
|
13 | 55 | ## Directory structure |
14 | 56 |
|
|
21 | 63 |
|
22 | 64 | ## Roadmap |
23 | 65 |
|
24 | | -- [x] Add sample contracts subproject with truffle and autodeployment |
25 | 66 | - [ ] Build Tendermint from source instead of downloading prepackaged version |
26 | | -- [ ] Add usage docs |
27 | 67 | - [ ] Include sample data encoding/decoding solidity contract |
28 | 68 | - [ ] Add visual block explorer |
29 | 69 | - [ ] Create a fork of netstats-client that does not break Ethermint |
30 | 70 |
|
31 | 71 | ## Known issues |
32 | 72 |
|
33 | 73 | - When netstats monitoring enabled, it causes Golang errors on Ethermint nodes. Not critical for the functionality, but litters log output with errors. |
34 | | -- When netstats monitoring enabled, it increases CPU load dramatically (but very little comparing to classic Ethereum mining), which could cause significantly smaller battery time for laptops running Tenderloin. |
| 74 | +- When netstats monitoring enabled, it increases CPU load dramatically (but very little comparing to classic Ethereum mining), which could cause significantly smaller battery time for laptops running Etherloin. |
35 | 75 | - Both Tendermint and Ethermint are crashing on Docker for Windows in case their respective data directories are shared with the host OS. Same issue happens with vanilla go-Ethereum since it is not a bug on Ethereum/Ethermint/Tendermint but a bug in Docker for Windows. |
0 commit comments