Awesome
POA bridge smart contracts
The goal of these contracts is to allow users to tokenize native POA coin into ERC20 token on ethereum mainnet. Home Bridge is a smart contract that should be deployed in POA.network Foreign Bridge is a smart contract that should be deployed in Ethereum Mainnet
Responsibilities and roles of the bridge:
- Administrator Role(representation of a multisig contract):
- add/remove validators
- set daily limits on both bridges
- set maximum per transaction limit on both bridges
- set minimum per transaction limit on both bridges
- upgrade contracts in case of vulnerability
- set minimum required signatures from validators in order to relay a user's transaction
- Validator Role :
- provide 100% uptime to relay transactions
- listen for Deposit events on Home bridge to mint erc20 token on Foreign bridge
- listen for Withdraw events on Foreign bridge to unlock funds on Home Bridge
- User role:
- sends POA coins to Home bridge in order to receive ERC20 token on Foreign Bridge
- sends ERC20 POA20 token on Foreign Bridge in order to receive POA coins on Home Bridge
Dependencies
npm install
To Deploy
Check truffle.js
for networks and their ports
NETWORK=sokol npm run deploy
Manual Deployment steps
Home Deployment(Sokol)
- Deploy EternalStorageProxy contract (Example address: '0x01') that will be used as Home Bridge Validators Proxy contract
- Deploy BridgeValidators contract (Example address: '0x02')
- Call
upgradeTo
of EternalStorageProxy that is used as Home Bridge Validators with 2 parameters:
- 0 - version of implementation contract
- address of implementation which is the address of step#2 BridgeValidators deployed contract (
0x02
)
- Call
initialize
method at Home Bridge Validators Proxy(0x01
) with 2 parameters:
- REQUIRED_NUMBER_OF_VALIDATORS. Example:
1
- Array of validators. Example
["0x0039F22efB07A647557C7C5d17854CFD6D489eF3", "0xf052d236b8076879d86c9e4c116a068a0d420c55"]
- Deploy Home Bridge. Example address:
0x03
- Deploy EternalStorageProxy contract
that will be used as Home Bridge Proxy contract. Example address:
0x04
- Call
upgradeTo
of EternalStorageProxy that is used as Home Bridge Proxy(step#6) with 2 parameters:
- 0 - version of implementation contract
- address of implementation which is the address of step#5 HomeBridge deployed contract. (
0x03
)
- Call
initialize
method at Home Bridge Proxy address with 4 parameters:
- address of Home Bridge Validators address Proxy ( step# 1)
0x01
- Daily Limit in wei: Example
1000000000000000000
== 1 ether - Maximum Per Transaction Limit in wei: Example
100000000000000000
== 0.1 ether. Should be less than Daily Limit - Minimum Per Transaction Limit in wei: Example
10000000000000000
== 0.01 ether. Should be less than Daily Limit and less than MaxPerTx =====
Foreign Deployment on Kovan
=====
- Deploy POA20 contract Example(
0x05
) - Deploy EternalStorageProxy contract
that will be used as Foreign Bridge Validators Proxy contract. Example
0x06
- Deploy BridgeValidators contract Example
0x07
- Call
upgradeTo
of EternalStorageProxy(0x06
) that is used as Foreign Bridge Validators Proxy(step#10) with 2 parameters:
- 0 - version of implementation contract
- address of implementation which is the address of step#11 Foreign BridgeValidators deployed contract. (
0x07
)
- Call
initialize
method at Foreign Bridge Validators Proxy(0x06
) with 2 parameters:
- REQUIRED_NUMBER_OF_VALIDATORS. Example:
1
- Array of validators. Example
["0x0039F22efB07A647557C7C5d17854CFD6D489eF3", "0xf052d236b8076879d86c9e4c116a068a0d420c55"]
- Deploy EternalStorageProxy contract
that will be used as Foreign Bridge Proxy contract. Example
0x08
- Deploy Foreign Bridge contract Example
0x09
- Call
upgradeTo
of EternalStorageProxy(0x08
) that is used as Foreign Bridge Proxy(step#14) with 2 parameters:
- 0 - version of implementation contract
- address of implementation which is the address of step#15 Foreign Bridge deployed contract. (
0x09
)
- Call
initialize
method at Foreign Bridge Proxy(0x08
) address with 5 parameters:
- address of Foreign Bridge Validators address Proxy ( step# 10)
0x06
- address of POA20 token contract. Step#9
0x05
- Daily Limit in wei: Example
1000000000000000000
== 1 ether - Maximum Per Transaction Limit in wei: Example
100000000000000000
== 0.1 ether. Should be less than Daily Limit - Minimum Per Transaction Limit in wei: Example
10000000000000000
== 0.01 ether. Should be less than Daily Limit and less than MaxPerTx
- Call
transferOwnership
of POA20 contract(0x05) with 1 parameter:
- address of Foreign Bridge Proxy (
0x08
) from step#14
To Flatten
npm run flatten