Switch branches/tags
Nothing to show
Clone or download
Latest commit 831ed5b Dec 14, 2018
Type Name Latest commit message Commit time
Failed to load latest commit information.
contracts Add deprecation warning to vyper Dec 8, 2018
docs Update transaction format Dec 14, 2018
plasmalib Clean up utils.py Dec 14, 2018
tests Update transaction format Dec 14, 2018
.gitignore Add tx validation minus sig checking Nov 18, 2018
README.md Add tx validation minus sig checking Nov 18, 2018
requirements.txt add vyper to requirements.txt Oct 27, 2018
setup.py add setup.py Oct 28, 2018


WARNING: this is an experimental project. not for mainnet deployment.

I'm currently in the process of rewriting the client-side construction of inclusion proofs for the exit game. Also, the vyper contract is still missing some challenge mechanisms. Don't deposit any testnet eth if you plan on keeping it.


git clone https://github.com/endorphin/plasmaprime.git
cd plasmaprime
pip install -r requirements.txt
python setup.py install

client usage

create a new account (send your testnet eth to the created address):

cd client
plasma new

deposit some test eth (all values are in wei):

plasma deposit --contract <address> --amount <value>

send a transaction:

plasma send --to <address> --amount <value>

check your balance (and what ranges you own):

plasma query

watch for malicious exits (not yet implemented):

plasma guard


plasma exit --amount <value>


transaction format:

    sender: address,
    recipient: address,
    start: uint,
    offset: uint,
    signature: {
        sig_v: uint,
        sig_r: uint,
        sig_s: uint,


  • challenges for exits that include coins previously exited
  • challenges for transaction history
  • challenges for subsequent spends
  • implement plasma guard
  • concise exclusion proofs with RSA accumulators
  • proper merkle sum tree


  • Dynamodb for DB
  • Get lock with lambda for address->owned ranges. Atomic read / update.
  • Once updated, append transaction to the list of transactions
  • A block is generated based on the START_TX_POS and END_TX_POS which are the indexes of the transactions in our TX_LIST. That way there is no blocking needed.