Smart contracts that powers the PoS (proof-of-stake) based bridge mechanism for Matic Network.
Audit - Matic Audit CertiK Report.pdf
Install package from NPM using
npm i @maticnetwork/pos-portal
git clone https://github.com/maticnetwork/pos-portal
cd pos-portal
npm install
npm run template:process
npm run build
Start Main chain
npm run testrpc
Start Matic child chain (Requires docker)
npm run bor
If you ran a bor instance before, a dead docker container might still be lying around, clean it using following command:
npm run bor:clean
npm run test
npm run migrate
- Moonwalker needs rabbitmq and local geth running
docker run -d -p 5672:5672 -p 15672:15672 rabbitmq:3-management
npm run testrpc
- Export env vars
export MNEMONIC=
export FROM=
export PROVIDER_URL=
export ROOT_CHAIN_ID=
export CHILD_CHAIN_ID=
export PLASMA_ROOT_CHAIN=
export GAS_PRICE=
- Compile contracts
npm run template:process -- --root-chain-id $ROOT_CHAIN_ID --child-chain-id $CHILD_CHAIN_ID
npm run build
- Add root chain contract deployments to queue
npm run truffle exec moonwalker-migrations/queue-root-deployment.js
- Process queue (rerun if interrupted)
node moonwalker-migrations/process-queue.js
- Extract contract addresses from moonwalker output
node moonwalker-migrations/extract-addresses.js
- Deploy child chain contracts
npm run truffle -- migrate --network mainnetChild --f 3 --to 3
- Add root chain initializations to queue
node moonwalker-migrations/queue-root-initializations.js
- Process queue (rerun if interrupted)
node moonwalker-migrations/process-queue.js
- Initialize child chain contracts
npm run truffle -- migrate --network mainnetChild --f 5 --to 5
- Register State Sync
- Register RootChainManager and ChildChainManager on StateSender
- Set stateSenderAddress on RootChainManager
- Grant STATE_SYNCER_ROLE on ChildChainManager
npm run truffle exec scripts/update-implementation.js -- --network <network-name> <new-address>
Set list of contract addresses and new owner address in 6_change_owners.js
migration script
Set MNEMONIC
and API_KEY
as env variables
npm run change-owners -- --network <network-name>