This contract allows Moonbeam (Moonriver) collators to guarantee staking rewards to their delegators. Collators (members) deposit an amount to the contract to cover any missed rounds from being down or out. The contract receives information about the state of the collators from an oracle, and credits the accounts of delegators if a member collator does not sign any blocks on a specific round. The oracle operates as a quorum of oracle members that run a service to periodically query the chain and report back the staking state.
Most of the protocol is implemented as a set of smart contracts. These contracts are located in the contracts/ directory.
Main contract that implements the cover insurance logic.
Deposits can be staked. Members do not earn staking rewards and only the manager can withdraw these rewards. Because staking decreases the reducible contract balance, the manager must take care to allow for enough funds to be available to cover delegator claims and member deposit withdrawals. If a payment fails, the contract disables further delegations by the manager, and enables an open-access method for undelegating funds.
Contract uses consensus mechanism for protecting from malicious members. Pushing the data to InactivityCover requires that a particular quorum from oracle members report and agree on the new state. This is forked from the Lido contract.
The hub for all oracles, which receives all reports from oracles members and simply sends them to oracles. This is forked from the Lido contract.
A contract which manages roles for the whole protocol. New and old roles can be added and removed. This is forked from the Lido contract.
npm i
truffle run moonbeam install
truffle run moonbeam start
# make sure Moonbeam node is v0.27.2 or later; if not, remove old docker image and reinstall
# Dev
SUPERIOR_KEY="99B3C12287537E38C90A9219D4CB074A89A16E9CDB20BF85728EBD97C343E342"
DEV_KEY="99B3C12287537E38C90A9219D4CB074A89A16E9CDB20BF85728EBD97C343E342"
MANAGER_KEY="c62cdb5b38cad27b9434933d087814a3bd848e67aeee66024ab65b1ccb9962b0"
MEMBER1_KEY="0x5fb92d6e98884f76de468fa3f6278f8807c48bebc13595d45af5bdc4da702133"
MEMBER2_KEY="eb5c4f9e734bfbd7dad641d348e1cc35dc22acf332cbecbc6ef163f20981392b"
MEMBER3_KEY="52d6050aae9787adab586a79d8dcfe46a5a82b262ab4fce33470cf318cdba757"
DELEGATOR1_KEY="bd283860f92e4c2626432e2c2d7b272a8818babc862f8cc121fc60804100e2f1"
DELEGATOR2_KEY="9cb20912f72e7993be55aac8000fa63453a9d0c932563ede6fc5a9193de1851b"
DELEGATOR3_KEY="eec6cb0332e91b94ebabb25f6b974dbb957c896a2c24f1763cfae12f02002245"
ORACLE_MANAGER_KEY="7ea73166025b7982a2d7c708fef083c87e159455f621a0a8b3816b135b6faa37"
AGENT007_KEY="8109a2d5ae13ddfb7ddadd8569004cb5e3b20484e889e1ac4883f1adc318d717"
MEMBER1_PROXY_KEY="87cbe4c17819499ab99ad9005cc3afe730b684d5d64d701e73d8b08791231239"
MEMBER2_PROXY_KEY="2a66481f08a4db6420bd865145a74c067aabfcf60c6893afc7394a138c7a681b"
MEMBER3_PROXY_KEY="03373da1e0e622131bc7c2f0d348ec21f640ab82f43ce285751d77acf4c09e3c"
ORACLE1_KEY="362f385cd2ad1474dc8081d3124cb7cc439147148f5a2de332fb11c8753c96cb"
ORACLE2_KEY="c2975923781e283db769b787632589b451e892dac559afcc4c3be87376a1383f"
ORACLE3_KEY="ccc01b2035ea819bdee378ab29cbcbc5fc52c3928a3790eb78959dfa471647d9"
# Moonbase
MOONBASE_KEY="<MOONASE_FUNDED_ACCOUNT>"
MOONBASE_MANAGER="<MOONASE_FUNDED_ACCOUNT>"
MOONBASE_ORACLE_MEMBERS_MANAGER="<MOONASE_FUNDED_ACCOUNT>"
MOONBASE_ORACLE_MEMBER="<MOONASE_FUNDED_ACCOUNT>"
truffle compile
truffle test --network dev
truffle migrate --network dev
AuthManager 0x2221d5f95004888a8703a3fe0A970aea791bDc60
Oracle 0xC3a6F635a4696Cbf8436f9e917F16D4e4D9673Fe
OracleMaster 0x455F39bdf5a5c7932D3c4C40694bd192C1d735Ed
InactivityCover 0x1d6061E3aB039149c7C2F55ca1f5D3e27A6B896d
DepositStaking 0xaFE179Ea99d52656f21E94D83334F68208fb5139