Implementation of Plasma EVM. You can check smart contracts here. For more information, see documentations.
- Make enter / exit requests
- Submit NRBs / ORBs
- Finalize block and requests
- Challenge on Null Address Transaction in NRBs
- Continuous Rebase
- Integration Computation Challenge using solevm.
For the simple start of both clients(ethereum, plasma-evm), you can run run.rootchain.sh
in Onther-Tech/go-ethereum and run.pls.sh
in Onther-Tech/plasma-evm (this is recommended way to setup develop and test environment).
Faraday testnet is running based on Rinkeby network as root chain.
See Onther-Tech/plasma-evm-networks
$ make geth
Before running plasma-evm client, you MUST run another geth client as root chain client.
$ git clone https://github.com/Onther-Tech/go-ethereum.git root-chain-geth && cd root-chain-geth
$ bash run.rootchain.sh
Then you can run or test plasma-evm client.
$ git clone https://github.com/Onther-Tech/plasma-evm.git && cd plasma-evm
$ bash run.pls.sh
Some original go-ethereum tests may fail.
To test plasam-evm related features,
$ go test github.com/Onther-Tech/plasma-evm/pls
$ go test github.com/Onther-Tech/plasma-evm/tx
build/bin/geth help
returns available flags. Belows are plasma-evm-specific flags.
PLASMA EVM - DEVELOPMENT MODE OPTIONS:
--dev Ephemeral proof-of-authority network with a pre-funded developer account, mining enabled
--dev.period value Block period to use in developer mode (0 = mine only if transaction pending) (default: 0)
--dev.key value Comma seperated developer account key as hex(for dev)
PLASMA EVM - OPERATOR OPTIONS:
--operator value Plasma operator address as hex.
--operator.key value Plasma operator key as hex(for dev)
--operator.password value Operator password file to use for non-interactive password input
--operator.minether value Plasma operator minimum balance (default = 0.5 ether) (default: "0.5")
--miner.recommit value Time interval to recreate the block being mined (default: 3s)
PLASMA EVM - ROOTCHAIN TRANSACTION MANAGER OPTIONS:
--tx.gasprice value Gas price for transaction (default = 10 Gwei) (default: 0)
--tx.mingasprice value Minimum gas price for submitting a block (default = 1 Gwei) (default: 1000000000)
--tx.maxgasprice value Maximum gas price for submitting a block (default = 100 Gwei) (default: 100000000000)
--tx.interval value Pending interval time after submitting a block (default = 10s). If block submit transaction is not mined in 2 intervals, gas price will be adjusted. See https://golang.org/pkg/time/#ParseDuration (default: 10s)
PLASMA EVM - STAMINA OPTIONS:
--stamina.operatoramount value Operator stamina amount at genesis block in ETH (default: 1)
--stamina.mindeposit value Minimum deposit amount in ETH (default: 0.5)
--stamina.recoverepochlength value The length of recovery epoch in block (default: 120960)
--stamina.withdrawaldelay value Withdrawal delay in block (default: 362880)
PLASMA EVM - CHALLENGER OPTIONS:
--rootchain.challenger value Address of challenger account
--challenger.password value Challenger password file to use for non-interactive password input
PLASMA EVM - ROOTCHAIN CONTRACT OPTIONS:
--rootchain.url value JSONRPC endpoint of rootchain provider. If URL is empty, ignore the provider.
--rootchain.contract value Address of the RootChain contract
--rootchain.deploygasprice value Transaction gas price to deploy rootchain in GWei (default: 10000000000). This flag applies only to deploy command.
PLASMA EVM - STAKING OPTIONS:
--unlock value Comma separated list of accounts to unlock
--password value Password file to use for non-interactive password input
--rootchain.sender value Address of root chain transaction sender account. it MUST be unlocked by --unlock, --password flags (CAVEAT: To set plasma operator, use --operator flag)
--rootchain.gasprice value Transaction gas price to root chain in GWei (default: 10000000000)
--rootchain.ton value Address of TON token contract
--rootchain.wton value Address of WTON token contract
--rootchain.registry value Address of RootChainRegistry contract
--rootchain.depositmanager value Address of Deposit Manager contract
--rootchain.seigmanager value Address of SeigManager contract
--rootchain.powerton value Address of PowerTON contract
PLASMA EVM - CHILDCHAIN OPTIONS:
--childchain.url value JSONRPC endpoint of child chain provider.
--childchain.sender value Sender address of child chain transaction
--childchain.gasprice value Gas price for child chain transaction in GWei (default: 0)
For more information, run below command (and sub-command) with --help
flag.
$ geth account import-key <privateKey> # Import a private key from hex key into a new account
ETHEREUM OPTIONS:
--datadir value Data directory for the databases and keystore (default: "/Users/thomashin/Library/Ethereum")
--keystore value Directory for the keystore (default = inside the datadir)
--lightkdf Reduce key-derivation RAM & CPU usage at some expense of KDF strength
ACCOUNT OPTIONS:
--password value Password file to use for non-interactive password input
$ geth account import-hdwallet <mnemonic> <path> # Import a mnemonic into a new account
ETHEREUM OPTIONS:
--datadir value Data directory for the databases and keystore (default: "/Users/thomashin/Library/Ethereum")
--keystore value Directory for the keystore (default = inside the datadir)
--lightkdf Reduce key-derivation RAM & CPU usage at some expense of KDF strength
ACCOUNT OPTIONS:
--password value Password file to use for non-interactive password input
$ geth deploy <genesisPath> <chainId> <withPETH> <NRELength> # Deploy RootChain contract and make genesis file
ETHEREUM OPTIONS:
--datadir value Data directory for the databases and keystore (default: "/Users/thomashin/Library/Ethereum")
ACCOUNT OPTIONS:
--unlock value Comma separated list of accounts to unlock
--password value Password file to use for non-interactive password input
PLASMA EVM - DEVELOPMENT MODE OPTIONS:
--dev.key value Comma seperated developer account key as hex(for dev)
PLASMA EVM - STAMINA OPTIONS:
--stamina.operatoramount value Operator stamina amount at genesis block in ETH (default: 1)
--stamina.mindeposit value Minimum deposit amount in ETH (default: 0.5)
--stamina.recoverepochlength value The length of recovery epoch in block (default: 120960)
--stamina.withdrawaldelay value Withdrawal delay in block (default: 362880)
PLASMA EVM - ROOTCHAIN CONTRACT OPTIONS:
--rootchain.url value JSONRPC endpoint of rootchain provider. If URL is empty, ignore the provider.
--rootchain.deploygasprice value Transaction gas price to deploy rootchain in GWei (default: 10000000000). This flag applies only to deploy command.
PLASMA EVM - STAKING OPTIONS OPTIONS:
--rootchain.sender value Address of root chain transaction sender account. it MUST be unlocked by --unlock, --password flags (CAVEAT: To set plasma operator, use --operator flag)
$ geth stamina get-delegatee <address> # Get delegatee of account
PLASMA EVM - CHILDCHAIN OPTIONS OPTIONS:
--childchain.url value JSONRPC endpoint of child chain provider.
$ geth stamina get-stamina <address> # Get stamina of account
PLASMA EVM - CHILDCHAIN OPTIONS OPTIONS:
--childchain.url value JSONRPC endpoint of child chain provider.
$ geth stamina get-totaldeposit <address> # Get total deposit of account
PLASMA EVM - CHILDCHAIN OPTIONS OPTIONS:
--childchain.url value JSONRPC endpoint of child chain provider.
$ geth stamina get-deposit <depositor> <delegatee> # Get deposit of account from the depositor
PLASMA EVM - CHILDCHAIN OPTIONS OPTIONS:
--childchain.url value JSONRPC endpoint of child chain provider.
$ geth stamina get-lastrecoveryblock <delegatee> # Get last recovery block of the delegatee
PLASMA EVM - CHILDCHAIN OPTIONS OPTIONS:
--childchain.url value JSONRPC endpoint of child chain provider.
$ geth stamina get-withdrawal <depositor> # Get withdrawal requests
PLASMA EVM - CHILDCHAIN OPTIONS OPTIONS:
--childchain.url value JSONRPC endpoint of child chain provider.
$ geth stamina set-delegator <delegator> # Set delegator
ETHEREUM OPTIONS:
--datadir value Data directory for the databases and keystore (default: "/Users/thomashin/Library/Ethereum")
ACCOUNT OPTIONS:
--unlock value Comma separated list of accounts to unlock
--password value Password file to use for non-interactive password input
PLASMA EVM - CHILDCHAIN OPTIONS OPTIONS:
--childchain.url value JSONRPC endpoint of child chain provider.
--childchain.sender value Sender address of child chain transaction
--childchain.gasprice value Gas price for child chain transaction in GWei (default: 0)
$ geth stamina deposit <delegatee> <value> # Deposit PETH to gain stamina
ETHEREUM OPTIONS:
--datadir value Data directory for the databases and keystore (default: "/Users/thomashin/Library/Ethereum")
ACCOUNT OPTIONS:
--unlock value Comma separated list of accounts to unlock
--password value Password file to use for non-interactive password input
PLASMA EVM - CHILDCHAIN OPTIONS OPTIONS:
--childchain.url value JSONRPC endpoint of child chain provider.
--childchain.sender value Sender address of child chain transaction
--childchain.gasprice value Gas price for child chain transaction in GWei (default: 0)
$ geth stamina request-withdrawal <delegatee> <value> # Request withdraw
ETHEREUM OPTIONS:
--datadir value Data directory for the databases and keystore (default: "/Users/thomashin/Library/Ethereum")
ACCOUNT OPTIONS:
--unlock value Comma separated list of accounts to unlock
--password value Password file to use for non-interactive password input
PLASMA EVM - CHILDCHAIN OPTIONS OPTIONS:
--childchain.url value JSONRPC endpoint of child chain provider.
--childchain.sender value Sender address of child chain transaction
--childchain.gasprice value Gas price for child chain transaction in GWei (default: 0)
$ geth stamina withdraw # Process withdraw
ETHEREUM OPTIONS:
--datadir value Data directory for the databases and keystore (default: "/Users/thomashin/Library/Ethereum")
ACCOUNT OPTIONS:
--unlock value Comma separated list of accounts to unlock
--password value Password file to use for non-interactive password input
PLASMA EVM - CHILDCHAIN OPTIONS OPTIONS:
--childchain.url value JSONRPC endpoint of child chain provider.
--childchain.sender value Sender address of child chain transaction
--childchain.gasprice value Gas price for child chain transaction in GWei (default: 0)
$ geth manage-staking deploy-managers <withdrawalDelay> <seigPerBlock> # Deploy staking manager contracts (except PowerTON)
ETHEREUM OPTIONS:
--datadir value Data directory for the databases and keystore (default: "/Users/thomashin/Library/Ethereum")
ACCOUNT OPTIONS:
--unlock value Comma separated list of accounts to unlock
--password value Password file to use for non-interactive password input
PLASMA EVM - DEVELOPMENT MODE OPTIONS:
--dev.key value Comma separated developer account key as hex(for dev)
PLASMA EVM - ROOTCHAIN CONTRACT OPTIONS:
--rootchain.url value JSONRPC endpoint of rootchain provider. If URL is empty, ignore the provider.
PLASMA EVM - STAKING OPTIONS OPTIONS:
--rootchain.sender value Address of root chain transaction sender account. it MUST be unlocked by --unlock, --password flags (CAVEAT: To set plasma operator, use --operator flag)
--rootchain.ton value Address of TON token contract
--rootchain.wton value Address of WTON token contract
--rootchain.gasprice value Transaction gas price to root chain in GWei (default: 10000000000)
$ geth manage-staking deploy-powerton <roundDuration> # Deploy PowerTON contract
ETHEREUM OPTIONS:
--datadir value Data directory for the databases and keystore (default: "/Users/thomashin/Library/Ethereum")
ACCOUNT OPTIONS:
--unlock value Comma separated list of accounts to unlock
--password value Password file to use for non-interactive password input
PLASMA EVM - ROOTCHAIN CONTRACT OPTIONS:
--rootchain.url value JSONRPC endpoint of rootchain provider. If URL is empty, ignore the provider.
PLASMA EVM - STAKING OPTIONS OPTIONS:
--rootchain.sender value Address of root chain transaction sender account. it MUST be unlocked by --unlock, --password flags (CAVEAT: To set plasma operator, use --operator flag)
--rootchain.gasprice value Transaction gas price to root chain in GWei (default: 10000000000)
--rootchain.wton value Address of WTON token contract
--rootchain.seigmanager value Address of SeigManager contract
$ geth manage-staking start-powerton # Start PowerTON first round
ETHEREUM OPTIONS:
--datadir value Data directory for the databases and keystore (default: "/Users/thomashin/Library/Ethereum")
ACCOUNT OPTIONS:
--unlock value Comma separated list of accounts to unlock
--password value Password file to use for non-interactive password input
PLASMA EVM - DEVELOPMENT MODE OPTIONS:
--dev.key value Comma seperated developer account key as hex(for dev)
PLASMA EVM - ROOTCHAIN CONTRACT OPTIONS:
--rootchain.url value JSONRPC endpoint of rootchain provider. If URL is empty, ignore the provider.
PLASMA EVM - STAKING OPTIONS OPTIONS:
--rootchain.sender value Address of root chain transaction sender account. it MUST be unlocked by --unlock, --password flags (CAVEAT: To set plasma operator, use --operator flag)
--rootchain.powerton value Address of PowerTON contract
--rootchain.gasprice value Transaction gas price to root chain in GWei (default: 10000000000)
$ geth manage-staking register # Register RootChain contract
ETHEREUM OPTIONS:
--datadir value Data directory for the databases and keystore (default: "/Users/thomashin/Library/Ethereum")
ACCOUNT OPTIONS:
--unlock value Comma separated list of accounts to unlock
--password value Password file to use for non-interactive password input
PLASMA EVM - DEVELOPMENT MODE OPTIONS:
--dev.key value Comma seperated developer account key as hex(for dev)
PLASMA EVM - ROOTCHAIN CONTRACT OPTIONS:
--rootchain.url value JSONRPC endpoint of rootchain provider. If URL is empty, ignore the provider.
PLASMA EVM - STAKING OPTIONS OPTIONS:
--rootchain.sender value Address of root chain transaction sender account. it MUST be unlocked by --unlock, --password flags (CAVEAT: To set plasma operator, use --operator flag)
--rootchain.gasprice value Transaction gas price to root chain in GWei (default: 10000000000)
$ geth manage-staking set-commission-rate <rate> <isCommissionRateNegative> # Set commission rate
ETHEREUM OPTIONS:
--datadir value Data directory for the databases and keystore (default: "/Users/thomashin/Library/Ethereum")
ACCOUNT OPTIONS:
--unlock value Comma separated list of accounts to unlock
--password value Password file to use for non-interactive password input
PLASMA EVM - DEVELOPMENT MODE OPTIONS:
--dev.key value Comma seperated developer account key as hex(for dev)
PLASMA EVM - ROOTCHAIN CONTRACT OPTIONS:
--rootchain.url value JSONRPC endpoint of rootchain provider. If URL is empty, ignore the provider.
PLASMA EVM - STAKING OPTIONS OPTIONS:
--rootchain.sender value Address of root chain transaction sender account. it MUST be unlocked by --unlock, --password flags (CAVEAT: To set plasma operator, use --operator flag)
--rootchain.gasprice value Transaction gas price to root chain in GWei (default: 10000000000)
$ geth manage-staking get-managers <path> # Get staking managers addresses in database
ETHEREUM OPTIONS:
--datadir value Data directory for the databases and keystore (default: "/Users/thomashin/Library/Ethereum")
$ geth manage-staking set-managers <uri> # Set staking managers addresses in database
ETHEREUM OPTIONS:
--datadir value Data directory for the databases and keystore (default: "/Users/thomashin/Library/Ethereum")
PLASMA EVM - ROOTCHAIN CONTRACT OPTIONS:
--rootchain.url value JSONRPC endpoint of rootchain provider. If URL is empty, ignore the provider.
PLASMA EVM - STAKING OPTIONS OPTIONS:
--rootchain.ton value Address of TON token contract
--rootchain.wton value Address of WTON token contract
--rootchain.depositmanager value Address of Deposit Manager contract
--rootchain.registry value Address of RootChainRegistry contract
--rootchain.seigmanager value Address of SeigManager contract
--rootchain.powerton value Address of PowerTON contract
--rootchain.gasprice value Transaction gas price to root chain in GWei (default: 10000000000)
$ geth manage-staking mint-ton <to> <amount> # Mint TON to account (for dev)
ETHEREUM OPTIONS:
--datadir value Data directory for the databases and keystore (default: "/Users/thomashin/Library/Ethereum")
ACCOUNT OPTIONS:
--unlock value Comma separated list of accounts to unlock
--password value Password file to use for non-interactive password input
PLASMA EVM - ROOTCHAIN CONTRACT OPTIONS:
--rootchain.url value JSONRPC endpoint of rootchain provider. If URL is empty, ignore the provider.
PLASMA EVM - STAKING OPTIONS OPTIONS:
--rootchain.sender value Address of root chain transaction sender account. it MUST be unlocked by --unlock, --password flags (CAVEAT: To set plasma operator, use --operator flag)
--rootchain.ton value Address of TON token contract
--rootchain.gasprice value Transaction gas price to root chain in GWei (default: 10000000000)
$ geth staking balances <address> # Print balances of token and stake
ETHEREUM OPTIONS:
--datadir value Data directory for the databases and keystore (default: "/Users/thomashin/Library/Ethereum")
PLASMA EVM - ROOTCHAIN CONTRACT OPTIONS:
--rootchain.url value JSONRPC endpoint of rootchain provider. If URL is empty, ignore the provider.
PLASMA EVM - STAKING OPTIONS OPTIONS:
--rootchain.sender value Address of root chain transaction sender account. it MUST be unlocked by --unlock, --password flags (CAVEAT: To set plasma operator, use --operator flag)
--rootchain.ton value Address of TON token contract
--rootchain.wton value Address of WTON token contract
--rootchain.depositmanager value Address of Deposit Manager contract
--rootchain.seigmanager value Address of SeigManager contract
$ geth staking swap-from-ton <tonAmount> # Swap TON to WTON
ETHEREUM OPTIONS:
--datadir value Data directory for the databases and keystore (default: "/Users/thomashin/Library/Ethereum")
ACCOUNT OPTIONS:
--unlock value Comma separated list of accounts to unlock
--password value Password file to use for non-interactive password input
PLASMA EVM - ROOTCHAIN CONTRACT OPTIONS:
--rootchain.url value JSONRPC endpoint of rootchain provider. If URL is empty, ignore the provider.
PLASMA EVM - STAKING OPTIONS OPTIONS:
--rootchain.sender value Address of root chain transaction sender account. it MUST be unlocked by --unlock, --password flags (CAVEAT: To set plasma operator, use --operator flag)
--rootchain.ton value Address of TON token contract
--rootchain.wton value Address of WTON token contract
--rootchain.depositmanager value Address of Deposit Manager contract
--rootchain.seigmanager value Address of SeigManager contract
--rootchain.gasprice value Transaction gas price to root chain in GWei (default: 10000000000)
$ geth staking swap-to-ton <wtonAmount> # Swap WTON to TON
ETHEREUM OPTIONS:
--datadir value Data directory for the databases and keystore (default: "/Users/thomashin/Library/Ethereum")
ACCOUNT OPTIONS:
--unlock value Comma separated list of accounts to unlock
--password value Password file to use for non-interactive password input
PLASMA EVM - ROOTCHAIN CONTRACT OPTIONS:
--rootchain.url value JSONRPC endpoint of rootchain provider. If URL is empty, ignore the provider.
PLASMA EVM - STAKING OPTIONS OPTIONS:
--rootchain.sender value Address of root chain transaction sender account. it MUST be unlocked by --unlock, --password flags (CAVEAT: To set plasma operator, use --operator flag)
--rootchain.ton value Address of TON token contract
--rootchain.wton value Address of WTON token contract
--rootchain.depositmanager value Address of Deposit Manager contract
--rootchain.seigmanager value Address of SeigManager contract
--rootchain.gasprice value Transaction gas price to root chain in GWei (default: 10000000000)
$ geth staking stake-ton <amount> # Stake TON
ETHEREUM OPTIONS:
--datadir value Data directory for the databases and keystore (default: "/Users/thomashin/Library/Ethereum")
ACCOUNT OPTIONS:
--unlock value Comma separated list of accounts to unlock
--password value Password file to use for non-interactive password input
PLASMA EVM - ROOTCHAIN CONTRACT OPTIONS:
--rootchain.url value JSONRPC endpoint of rootchain provider. If URL is empty, ignore the provider.
PLASMA EVM - STAKING OPTIONS OPTIONS:
--rootchain.sender value Address of root chain transaction sender account. it MUST be unlocked by --unlock, --password flags (CAVEAT: To set plasma operator, use --operator flag)
--rootchain.ton value Address of TON token contract
--rootchain.wton value Address of WTON token contract
--rootchain.depositmanager value Address of Deposit Manager contract
--rootchain.seigmanager value Address of SeigManager contract
--rootchain.gasprice value Transaction gas price to root chain in GWei (default: 10000000000)
$ geth staking stake-wton <amount> # Stake WTON
ETHEREUM OPTIONS:
--datadir value Data directory for the databases and keystore (default: "/Users/thomashin/Library/Ethereum")
ACCOUNT OPTIONS:
--unlock value Comma separated list of accounts to unlock
--password value Password file to use for non-interactive password input
PLASMA EVM - ROOTCHAIN CONTRACT OPTIONS:
--rootchain.url value JSONRPC endpoint of rootchain provider. If URL is empty, ignore the provider.
PLASMA EVM - STAKING OPTIONS OPTIONS:
--rootchain.sender value Address of root chain transaction sender account. it MUST be unlocked by --unlock, --password flags (CAVEAT: To set plasma operator, use --operator flag)
--rootchain.ton value Address of TON token contract
--rootchain.wton value Address of WTON token contract
--rootchain.depositmanager value Address of Deposit Manager contract
--rootchain.seigmanager value Address of SeigManager contract
--rootchain.gasprice value Transaction gas price to root chain in GWei (default: 10000000000)
$ geth staking restake <amount> # Restake pending withdrawal request
ETHEREUM OPTIONS:
--datadir value Data directory for the databases and keystore (default: "/Users/thomashin/Library/Ethereum")
ACCOUNT OPTIONS:
--unlock value Comma separated list of accounts to unlock
--password value Password file to use for non-interactive password input
PLASMA EVM - ROOTCHAIN CONTRACT OPTIONS:
--rootchain.url value JSONRPC endpoint of rootchain provider. If URL is empty, ignore the provider.
PLASMA EVM - STAKING OPTIONS OPTIONS:
--rootchain.sender value Address of root chain transaction sender account. it MUST be unlocked by --unlock, --password flags (CAVEAT: To set plasma operator, use --operator flag)
--rootchain.ton value Address of TON token contract
--rootchain.wton value Address of WTON token contract
--rootchain.depositmanager value Address of Deposit Manager contract
--rootchain.seigmanager value Address of SeigManager contract
--rootchain.gasprice value Transaction gas price to root chain in GWei (default: 10000000000)
$ geth staking request-withdrawal <amount> # Make a withdrawal request
ETHEREUM OPTIONS:
--datadir value Data directory for the databases and keystore (default: "/Users/thomashin/Library/Ethereum")
ACCOUNT OPTIONS:
--unlock value Comma separated list of accounts to unlock
--password value Password file to use for non-interactive password input
PLASMA EVM - ROOTCHAIN CONTRACT OPTIONS:
--rootchain.url value JSONRPC endpoint of rootchain provider. If URL is empty, ignore the provider.
PLASMA EVM - STAKING OPTIONS OPTIONS:
--rootchain.sender value Address of root chain transaction sender account. it MUST be unlocked by --unlock, --password flags (CAVEAT: To set plasma operator, use --operator flag)
--rootchain.depositmanager value Address of Deposit Manager contract
--rootchain.gasprice value Transaction gas price to root chain in GWei (default: 10000000000)
$ geth staking process-withdrawal <numRequests> # Process pending withdrawals
ETHEREUM OPTIONS:
--datadir value Data directory for the databases and keystore (default: "/Users/thomashin/Library/Ethereum")
ACCOUNT OPTIONS:
--unlock value Comma separated list of accounts to unlock
--password value Password file to use for non-interactive password input
PLASMA EVM - ROOTCHAIN CONTRACT OPTIONS:
--rootchain.url value JSONRPC endpoint of rootchain provider. If URL is empty, ignore the provider.
PLASMA EVM - STAKING OPTIONS OPTIONS:
--rootchain.sender value Address of root chain transaction sender account. it MUST be unlocked by --unlock, --password flags (CAVEAT: To set plasma operator, use --operator flag)
--rootchain.depositmanager value Address of Deposit Manager contract
--rootchain.gasprice value Transaction gas price to root chain in GWei (default: 10000000000)