We're implementing the Minimum Viable Plasma
Current repo includes:
- Root chain smart contracts
- Building blocks for child chain
Install dependencies with
python setup.py install
The MVP requires Solidity 0.4.18.
The rest of the child chain and client will pushed up after an internal audit.
To deploy root chain smart contracts start testrpc on port 8545 and run:
make root-chain
To run tests:
make test
client
is a simple Python wrapper of the RPC API exposed by child_chain
, similar to Web3.py
for Ethereum. You can use this client to write Python applications that interact with this Plasma chain.
cli
is a simple Python application that uses client
to interact with child_chain
, via the command line. A detailed documentation of cli
is available here.
This project has a few pre-installation dependencies.
Mac:
$ brew install leveldb
Linux:
LevelDB should be installed along with plyvel
once you make the project later on.
Windows:
First, install vcpkg. Then,
> vcpkg install leveldb
Mac:
$ brew unlink solidity
$ brew install https://raw.githubusercontent.com/ethereum/homebrew-ethereum/2aea171d7d6901b97d5f1f71bd07dd88ed5dfb42/solidity.rb
Linux:
$ wget https://github.com/ethereum/solidity/releases/download/v0.4.18/solc-static-linux
$ chmod +x ./solc-static-linux
$ sudo mv solc-static-linux /usr/bin/solc
Windows:
Follow this guide.
It's also recommended to run ganache-cli
when developing, testing, or playing around. This will allow you to receive near instant feedback.
Note: we optionally recommend using something like virtualenv
in order to create an isolated Python environment:
$ virtualenv env -p python3
Fetch and install the project's dependencies with:
$ make
Before you run tests, make sure you have an Ethereum client running and an JSON RPC API exposed on port 8545
. We recommend using ganache-cli
to accomplish this when running tests.
Project tests can be found in the tests/
folder. Run tests with:
$ make test
If you're contributing to this project, make sure you also install flake8
and lint your work:
$ make lint
The fastest way to start playing with our Plasma MVP is by starting up ganache-cli
, deploying everything locally, and running our CLI. Full documentation for the CLI is available here.
$ ganache-cli -m=plasma_mvp # Start ganache-cli
$ make root-chain # Deploy the root chain contract
$ make child-chain # Run our child chain and server
omg
is a simple Plasma CLI that enables interactions with the child chain. Full documentation is provided below.
Shows a list of available commands.
help
Creates a deposit transaction and submits it to the child chain.
deposit <amount> <address>
deposit 100 0xfd02ecee62797e75d86bcff1642eb0844afb28c7
Creates a transaction and submits it to the child chain.
sendtx <blknum1> <txindex1> <oindex1> <blknum2> <txindex2> <oindex2> <newowner1> <amount1> <newowner2> <amount2> <fee> <key1> [<key2>]
send_tx 1 0 0 0 0 0 0xfd02ecee62797e75d86bcff1642eb0844afb28c7 50 0x4b3ec6c9dc67079e82152d6d55d8dd96a8e6aa26 45 5 3bb369fecdc16b93b99514d8ed9c2e87c5824cf4a6a98d2e8e91b7dd0c063304
Signs and submits the current block to the root contract.
submitblock <key>
submitblock 3bb369fecdc16b93b99514d8ed9c2e87c5824cf4a6a98d2e8e91b7dd0c063304
Creates an exit transaction for the given UTXO.
withdraw <blknum> <txindex> <oindex> <key1> [<key2>]
withdraw 1000 0 0 3bb369fecdc16b93b99514d8ed9c2e87c5824cf4a6a98d2e8e91b7dd0c063304
Withdraws from a deposit.
withdrawdeposit 0xfd02ecee62797e75d86bcff1642eb0844afb28c7 1 100
Let's play around a bit:
-
Deploy the root chain contract and start the child chain as per Starting Plasma.
-
Start by depositing:
omg deposit 100 0xfd02ecee62797e75d86bcff1642eb0844afb28c7
- Send a transaction:
omg sendtx 1 0 0 0 0 0 0xfd02ecee62797e75d86bcff1642eb0844afb28c7 50 0x4b3ec6c9dc67079e82152d6d55d8dd96a8e6aa26 45 5 3bb369fecdc16b93b99514d8ed9c2e87c5824cf4a6a98d2e8e91b7dd0c063304
- Submit the block:
omg submitblock 3bb369fecdc16b93b99514d8ed9c2e87c5824cf4a6a98d2e8e91b7dd0c063304
- Withdraw the original deposit (this is a double spend!):
omg withdrawdeposit 0xfd02ecee62797e75d86bcff1642eb0844afb28c7 1 100
Note: The functionality to challenge double spends from the cli is still being worked on.