// SPDX-License-Identifier: agpl-3.0 pragma solidity ^0.6.12; pragma experimental ABIEncoderV2; import "./libs/SafeMath.sol"; import "./libs/SafeERC20.sol"; // AIP: https://github.com/AdExNetwork/aips/issues/18 // Quick overview: // - it's divided into pools, each pool may represent a validator; it may represent something else too (for example, we may launch staking for publishers to prove their legitimacy) // - the slasherAddr will be a multisig that will be controlled by the AdEx team - and later full control of the multisig will be given to a bridge to Polkadot, where we'll run the full on-chain slashing mechanism // - we will clearly communicate this migration path to our community and stakers // - reward distribution is off-chain: depending on the pool, it may be done either via OUTPACE, via the Polkadot parachain, or via an auxilary contract that implements round-based reward distribution (you check into each round, the SC confirms you have a bond on Staking.sol, and you can withdraw your pro-rata earnings for the round) // - each bond will be slashed relative to the time it bonded/unbonded; e.g. if the pool is slashed 12%, you bonded, then the pool was slashed 2%, then you unbonded, you'd only suffer a 2% slash library BondLibrary { struct Bond { uint amount; bytes32 poolId; uint nonce; } function hash(Bond memory bond, address sender) internal view returns (bytes32) { return keccak256(abi.encode( address(this), sender, bond.amount, bond.poolId, bond.nonce )); } } contract Staking { using SafeMath for uint; using BondLibrary for BondLibrary.Bond; struct BondState { bool active; uint64 slashedAtStart; uint64 willUnlock; } // Events event LogSlash(bytes32 indexed poolId, uint newSlashPts); event LogBond(address indexed owner, uint amount, bytes32 poolId, uint nonce, uint64 slashedAtStart); event LogUnbondRequested(address indexed owner, bytes32 indexed bondId, uint64 willUnlock); event LogUnbonded(address indexed owner, bytes32 indexed bondId); // could be 2**64 too, since we use uint64 uint constant MAX_SLASH = 10 ** 18; uint constant TIME_TO_UNBOND = 30 days; address constant BURN_ADDR = address(0xaDbeEF0000000000000000000000000000000000); address public tokenAddr; address public slasherAddr; // Addressed by poolId mapping (bytes32 => uint) public slashPoints; // Addressed by bondId mapping (bytes32 => BondState) public bonds; constructor(address token, address slasher) public { tokenAddr = token; slasherAddr = slasher; emit LogBond(0xd6e371526cdaeE04cd8AF225D42e37Bc14688D9E, 8700000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xd6e371526cdaeE04cd8AF225D42e37Bc14688D9E, 20000000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xd6e371526cdaeE04cd8AF225D42e37Bc14688D9E, 10000000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x2eDb6737346293Bc22B9b196F4a0792d4691E8e0, 9000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x2eDb6737346293Bc22B9b196F4a0792d4691E8e0, 49000000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x1Ad2d3389895D00910A09f85B12073170af43a2F, 2300000000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xAAA760E33c9C7397aF1AF1aaF4Ca52d9fF7759BE, 1000000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xE14f7A9AF3F75a4Ccd33909B0046b16d82c6EC0e, 7293059000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x997276717E68266F8588EfAd560AeD5a04b70c7b, 70000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xb38248704ddd3011AC724ac01d3663bBECFFE20d, 408295800000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xa09444dcF95C14E197B09987Bb9F4e1b2aC4A1D3, 99990000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xE73A25b58Bf440D8AD53Eb773f412a4E89E22719, 3822614600000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xa09444dcF95C14E197B09987Bb9F4e1b2aC4A1D3, 300000000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xa09444dcF95C14E197B09987Bb9F4e1b2aC4A1D3, 729980260000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x2b4b7465Ea3115297e37E0030d78DBc73074620e, 500000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x13a6CF411Ae98FaBcfee9029BabC8738137C2190, 500000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xcF80287b491399f50b6C0E30C3F56E8F48D44b7e, 601000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x13a6CF411Ae98FaBcfee9029BabC8738137C2190, 10000000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xcF80287b491399f50b6C0E30C3F56E8F48D44b7e, 20000000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x13a6CF411Ae98FaBcfee9029BabC8738137C2190, 13892000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xA2dCB52F5cF34a84A2eBFb7D937f7051ae4C697B, 1143000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xcF80287b491399f50b6C0E30C3F56E8F48D44b7e, 14086000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x13a6CF411Ae98FaBcfee9029BabC8738137C2190, 15000000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xcF80287b491399f50b6C0E30C3F56E8F48D44b7e, 25990130000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x13a6CF411Ae98FaBcfee9029BabC8738137C2190, 25000000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xFC0e8B03b648Ab83F4E845497160907013fE850d, 1188450000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xa09444dcF95C14E197B09987Bb9F4e1b2aC4A1D3, 63224370000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x2Ef98eCE0237bAd425De6E67623Eb102b240e4bd, 33432000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xA24bf448E1D40Cb0fCc3E72842F8720A9ddE9a13, 20000000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x5DCB3152072D13dBAaBD68eD85d6192Ca543b04E, 5740000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xC2254d8EAc6720579A50bC3b4Ae7CC5C30802B9C, 14943206000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x2b4b7465Ea3115297e37E0030d78DBc73074620e, 4368141300000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x57080EF7511D29FF64610B58aBd73A9e402C7095, 492700000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xA2B0370846a4dF507E2dc88160602a565Ed8697B, 4373000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x2C0D84b2335EE3F9020667DCEA7449Fc8D0717ae, 90560000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xB948444b1Af66167dc5f56febe721C57336D37fC, 1320402162900000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x7aD02ebEF42356D64ea57823ff26626554BEC14c, 7515394200000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xB5c9F8fA537aa674ece4ceb4acb870fd828FD18A, 1713213700000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x0F0cB3644Ec200308C8101C54866E1FB6ab88560, 1840110200000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xf7BdBf79D8799ea093e037dBD725713982140D9b, 1647500000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x6196163Ac4401268c9413664eD72Cd753B6aB24f, 1215156800000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xB4fA71df2a11d1C3273aDeF06c3F3d0238426301, 16380000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x452d245458e1d58eC64EaD6f36c67C8194b01ACd, 599600000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x1606C00CAe5dd9Df7ecA8533Ef12bA99aA8DE6DD, 1032612000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x776B41563EaDb3CFB94E4C3Df877Bd61D80276F6, 650100000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xbF4FcD4a4A6564cC8483d47F74af142Df4054D2b, 3082005000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xBfA2B308D14d7B4e6f10142323f1c02eF5D174E8, 1198493700000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x82064D3E56aD316926f861B93159C8013955E842, 480386600000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x779505DD861897f1faBa8853d0B1742375276680, 1004006900000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x09bD15403eEbA50CC33735bE03f12a3f1Ed778Bf, 78066700000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xd6e371526cdaeE04cd8AF225D42e37Bc14688D9E, 2000000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x1Ad2d3389895D00910A09f85B12073170af43a2F, 1410112000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x161F4F1e10ec72F3a8eb8e33AE19CF1c6303d508, 2564000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x285B10c73de847Ee35BCB5Cd86f17D55Ff936476, 40026000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x4133ee50336F0D4D7f1c5Bd83996150E1F856123, 7000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x4133ee50336F0D4D7f1c5Bd83996150E1F856123, 300000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x4133ee50336F0D4D7f1c5Bd83996150E1F856123, 340000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x4133ee50336F0D4D7f1c5Bd83996150E1F856123, 10500460600000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x75C242995575c786224CE5eF3D9aBFF8b643B62e, 189480000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x9872D789AD73e88FA6751BDCfB42A5A7A38D3973, 265392600000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xa48FB6a720d7b6EC648c70d51e0D93de61c6DFEF, 233000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x7C8761035B01787145a85f5381Fc65a86b67ae3A, 331700000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x8fB612444395a16f75446D81a2D8fD26F52349aa, 20000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogUnbondRequested(0xa09444dcF95C14E197B09987Bb9F4e1b2aC4A1D3, 0x5d69e70185fb83e971b21d7f569d576f302b0bc0a94cf6b90528cce5a8b6c157, 1584636429); emit LogBond(0x8C6b36F6edD4d063A7689D221eaE34a857ea25F8, 49990000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xb3737B6b83c81877AB4b1177C63C24D383530222, 5182000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xD6EAff0C0Ec0b74f3C753484A6a611FA20B84c72, 11396000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x00164D1aB7Ce1B366B302a2B3CA66CB7Bb206B8F, 35000000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xC56CE55dFB2Ee28e5F69bCA53F37F7223684be64, 18042400000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x24B0bD8F3fca87b279EDF8c4777554d4aabDC80b, 329775700000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xB93A855d912E18EDdef4E8064de68606a16F0f0a, 6235000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x97850CeA36Dc72c957c21637b7631A2eFD458a02, 500000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xf7FB07E46a54A0878105C6271B753948E715a962, 40000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xDF77dA839B438a86A8E50097236C9c0E65E1f33c, 3053050600000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xc95e85F87F664A3857723fb8506AeDE484053A4a, 300000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x75C242995575c786224CE5eF3D9aBFF8b643B62e, 147710000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xcE347964a84C5B2576c5Ddcdd4eC343680022795, 993000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogUnbondRequested(0x161F4F1e10ec72F3a8eb8e33AE19CF1c6303d508, 0x5fe550eef0ef3f48114d2ce9b747aab3bc4e956b3b64694eb8473251c854d12e, 1586152911); emit LogUnbondRequested(0x13a6CF411Ae98FaBcfee9029BabC8738137C2190, 0xb604c157dcbe19da7c4010c498a4522d23acaf136dc595d7c8efa10afeec7dca, 1586248633); emit LogUnbondRequested(0x13a6CF411Ae98FaBcfee9029BabC8738137C2190, 0x66b048e7f10b59a1a69ac5d1843acf9c8cded43ce680e8c5c48fcd9ebddd6eba, 1586248687); emit LogUnbondRequested(0x13a6CF411Ae98FaBcfee9029BabC8738137C2190, 0x8e27e492a950f85498c3654a42067d9140bf4d4e0090fe0a3721281788a0d4f2, 1586248735); emit LogUnbondRequested(0x13a6CF411Ae98FaBcfee9029BabC8738137C2190, 0xb9751189cd299ef7a77e0f0ceb1cffdeeb3889fa552a4aa0091b896d9285ba49, 1586248788); emit LogUnbondRequested(0x13a6CF411Ae98FaBcfee9029BabC8738137C2190, 0x7e655dbe5fba6f54e0332bb6f8c870943c747e340fb00c082d97c9a6cfb1e0e2, 1586248831); emit LogUnbondRequested(0xcF80287b491399f50b6C0E30C3F56E8F48D44b7e, 0x50dac0c464a06f7e24327451d175f84370465914dcc846294fb5b4faa3644564, 1586248916); emit LogUnbondRequested(0xcF80287b491399f50b6C0E30C3F56E8F48D44b7e, 0x97104ffe1bf98fdcade5483b8733d4f88bb0b31b92c6d2140059ddf06525b008, 1586248916); emit LogUnbondRequested(0xcF80287b491399f50b6C0E30C3F56E8F48D44b7e, 0x51c1ceb80e9d172d2cf4e54ae99b5565c98aa7022055d7bffdde117b67775e8a, 1586249055); emit LogUnbondRequested(0xcF80287b491399f50b6C0E30C3F56E8F48D44b7e, 0xa30cbb1096e13f1343207e9d82330d8314703c5420c4fc71dbfa59ff868e206f, 1586249055); emit LogBond(0x09bD15403eEbA50CC33735bE03f12a3f1Ed778Bf, 199565000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x98725bEA9CaF118e3E31a0fE480B887f81f45BD7, 6824000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xae5001b8fB5387eADA1d5af9e82Fd164664A0396, 143000000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x2eDb6737346293Bc22B9b196F4a0792d4691E8e0, 300000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x2eDb6737346293Bc22B9b196F4a0792d4691E8e0, 100028000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x98725bEA9CaF118e3E31a0fE480B887f81f45BD7, 3821000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xA24bf448E1D40Cb0fCc3E72842F8720A9ddE9a13, 24988000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x136c6ac2909D1DDDA297c9c830f46AF1599AC96a, 309000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogUnbonded(0xa09444dcF95C14E197B09987Bb9F4e1b2aC4A1D3, 0x5d69e70185fb83e971b21d7f569d576f302b0bc0a94cf6b90528cce5a8b6c157); emit LogUnbondRequested(0xa09444dcF95C14E197B09987Bb9F4e1b2aC4A1D3, 0xe39aacff72c239437c5e77847614cbc5be3c8fe94abd658baceb716f9aed1f25, 1587804651); emit LogUnbondRequested(0xa09444dcF95C14E197B09987Bb9F4e1b2aC4A1D3, 0xc2cec8afc55b07392fd28b88a69a216f62d35125827beb4a7a444ddd01c1b7cc, 1587804651); emit LogBond(0x279930d09C521c503d10cf4Cb0021E8b1CC36042, 193000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x3902F114088AC61B054EE5904c390183aBACb2b1, 883227500000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogUnbondRequested(0x452d245458e1d58eC64EaD6f36c67C8194b01ACd, 0x9f55014c20e5d030238316d3e346a305f026d9e871665316022279b2b61c3fb5, 1588236158); emit LogUnbonded(0x161F4F1e10ec72F3a8eb8e33AE19CF1c6303d508, 0x5fe550eef0ef3f48114d2ce9b747aab3bc4e956b3b64694eb8473251c854d12e); emit LogUnbonded(0xcF80287b491399f50b6C0E30C3F56E8F48D44b7e, 0x50dac0c464a06f7e24327451d175f84370465914dcc846294fb5b4faa3644564); emit LogUnbonded(0x13a6CF411Ae98FaBcfee9029BabC8738137C2190, 0x7e655dbe5fba6f54e0332bb6f8c870943c747e340fb00c082d97c9a6cfb1e0e2); emit LogUnbonded(0x13a6CF411Ae98FaBcfee9029BabC8738137C2190, 0xb9751189cd299ef7a77e0f0ceb1cffdeeb3889fa552a4aa0091b896d9285ba49); emit LogUnbonded(0x13a6CF411Ae98FaBcfee9029BabC8738137C2190, 0x8e27e492a950f85498c3654a42067d9140bf4d4e0090fe0a3721281788a0d4f2); emit LogUnbonded(0x13a6CF411Ae98FaBcfee9029BabC8738137C2190, 0x66b048e7f10b59a1a69ac5d1843acf9c8cded43ce680e8c5c48fcd9ebddd6eba); emit LogUnbonded(0x13a6CF411Ae98FaBcfee9029BabC8738137C2190, 0xb604c157dcbe19da7c4010c498a4522d23acaf136dc595d7c8efa10afeec7dca); emit LogUnbonded(0xcF80287b491399f50b6C0E30C3F56E8F48D44b7e, 0xa30cbb1096e13f1343207e9d82330d8314703c5420c4fc71dbfa59ff868e206f); emit LogUnbonded(0xcF80287b491399f50b6C0E30C3F56E8F48D44b7e, 0x51c1ceb80e9d172d2cf4e54ae99b5565c98aa7022055d7bffdde117b67775e8a); emit LogUnbonded(0xcF80287b491399f50b6C0E30C3F56E8F48D44b7e, 0x97104ffe1bf98fdcade5483b8733d4f88bb0b31b92c6d2140059ddf06525b008); emit LogBond(0x007cBb01a3DD8833Cc5e9e36C49E5Ad343C8F7bc, 13038220000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x4be663B218ce73D47bE6CFFA1624c32a7651cdB4, 87000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x4be663B218ce73D47bE6CFFA1624c32a7651cdB4, 3998000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x8F254305181A2E64c5D67d11Fdb02192D1365b89, 493000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x0035CD7a3D382605De4172A056A7c670C0608077, 4680000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogUnbonded(0xa09444dcF95C14E197B09987Bb9F4e1b2aC4A1D3, 0xe39aacff72c239437c5e77847614cbc5be3c8fe94abd658baceb716f9aed1f25); emit LogUnbonded(0xa09444dcF95C14E197B09987Bb9F4e1b2aC4A1D3, 0xc2cec8afc55b07392fd28b88a69a216f62d35125827beb4a7a444ddd01c1b7cc); emit LogBond(0x1c800f732Abc64FcE90eE9304E4fa3A0daE6A225, 100980000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x1Ad2d3389895D00910A09f85B12073170af43a2F, 1000000000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogUnbondRequested(0xa09444dcF95C14E197B09987Bb9F4e1b2aC4A1D3, 0x56efc7d877d7a76cee812fd3b6b231d29904e6598a2bd4c91a3df40d4d2ea5db, 1591181777); emit LogBond(0x5d8Ff01Ec1A97e29c99C9a3303C1C012e69DbA89, 1600000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xF25ee6b1712A4d3059154703f8F29c4ece479280, 4660439900000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xdEB4a54314B6eA5f4872291727BE5e124a6538f4, 2138862900000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogUnbondRequested(0x24B0bD8F3fca87b279EDF8c4777554d4aabDC80b, 0xc12cdf62ed11840b2ae4b59fae596419e049a75c8371ea401419f9e7dc0bdd1a, 1592301221); emit LogBond(0x4fa5e2150534Aa96749fEC4130fC9A5E9bA7B6d0, 315000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x181c11b2Afb0715848A684cE907bd096037DEdA4, 2730000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogUnbondRequested(0x779505DD861897f1faBa8853d0B1742375276680, 0x62b4ec8e2b2d0af8987c8356f4ddeeb60e320fbd5c0832fa08d34c429fb01bdf, 1593010188); emit LogBond(0x1b22bc5F3e381D2d5Cc51E758af69882CCE1dB9d, 300000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogUnbondRequested(0x136c6ac2909D1DDDA297c9c830f46AF1599AC96a, 0x7a1af6dc2193dedf7a7ca3262a0962a0c0171008f69e7a386d531a2755b5111b, 1593185189); emit LogUnbondRequested(0xB948444b1Af66167dc5f56febe721C57336D37fC, 0x2897c37022347892190a76af5be338d021329bd64b116569b66776e2047e511f, 1593201889); emit LogBond(0x75C242995575c786224CE5eF3D9aBFF8b643B62e, 147900000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogUnbonded(0xa09444dcF95C14E197B09987Bb9F4e1b2aC4A1D3, 0x56efc7d877d7a76cee812fd3b6b231d29904e6598a2bd4c91a3df40d4d2ea5db); emit LogBond(0x1237347090891500d07eC918ee67aAa95Ba880EF, 1000000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogUnbondRequested(0xA24bf448E1D40Cb0fCc3E72842F8720A9ddE9a13, 0xe75e8f33ab429d20ca5d2f01ace176733c2585c75991b86b55e0edaa89eecacf, 1593974908); emit LogUnbondRequested(0xA24bf448E1D40Cb0fCc3E72842F8720A9ddE9a13, 0x53cc7dd7afb5f7324df7325795aeb5f839a780bf5c1b8984e47fb6f2b8bcb43e, 1593974931); emit LogBond(0xEf58321032cF693Fa7e39F31e45CBc32f2092cb3, 103002501000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xe4D012bC7B9Ff97585d8b8a26bCc05e6bBab52aA, 4079783000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x1237347090891500d07eC918ee67aAa95Ba880EF, 24047664400000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x6d5f7bEca81976fa363FFAa6D65171D66B5deE65, 100000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogUnbonded(0x24B0bD8F3fca87b279EDF8c4777554d4aabDC80b, 0xc12cdf62ed11840b2ae4b59fae596419e049a75c8371ea401419f9e7dc0bdd1a); emit LogUnbondRequested(0x6d5f7bEca81976fa363FFAa6D65171D66B5deE65, 0x5c1dd3b7053f9017286d2da670797af18e2ef5d5ffe0f2377012231c82a45fd5, 1595075391); emit LogBond(0x06fe45706315a6FB700Be07936bA53D06A682c96, 9846133000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogUnbonded(0x136c6ac2909D1DDDA297c9c830f46AF1599AC96a, 0x7a1af6dc2193dedf7a7ca3262a0962a0c0171008f69e7a386d531a2755b5111b); emit LogUnbondRequested(0xC56CE55dFB2Ee28e5F69bCA53F37F7223684be64, 0x205beeafb5643243afb4400bc0983c5e01e65f8e7debfdc8510349562d1a172a, 1595822086); emit LogUnbonded(0x779505DD861897f1faBa8853d0B1742375276680, 0x62b4ec8e2b2d0af8987c8356f4ddeeb60e320fbd5c0832fa08d34c429fb01bdf); emit LogBond(0x8da02D597a2616e9eC0c82B2b8366B00d69da29A, 712000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xE7fF6f70171f271Af014751D679C39c3AA70238F, 493000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x1C670d91e129c1a5876249B11fbfb420835D4700, 393000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogUnbondRequested(0xF25ee6b1712A4d3059154703f8F29c4ece479280, 0x11d9eb32f013fd40168d45f4a5316a778100f4728d730601f9cc4baadded15d6, 1597480348); emit LogUnbondRequested(0xB5c9F8fA537aa674ece4ceb4acb870fd828FD18A, 0x3b20cb7f22ebef04834645e1b9e0d79aaa094c0a24093ba8f93946bcb3b16a02, 1597526774); emit LogBond(0x285B10c73de847Ee35BCB5Cd86f17D55Ff936476, 59989000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xd6e371526cdaeE04cd8AF225D42e37Bc14688D9E, 1000080000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xd6e371526cdaeE04cd8AF225D42e37Bc14688D9E, 10000000100000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogUnbonded(0xA24bf448E1D40Cb0fCc3E72842F8720A9ddE9a13, 0x53cc7dd7afb5f7324df7325795aeb5f839a780bf5c1b8984e47fb6f2b8bcb43e); emit LogUnbonded(0xA24bf448E1D40Cb0fCc3E72842F8720A9ddE9a13, 0xe75e8f33ab429d20ca5d2f01ace176733c2585c75991b86b55e0edaa89eecacf); emit LogBond(0xC49cd385A7C2099154CF85Bf6D33888a207d6119, 13082760000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogUnbonded(0xB948444b1Af66167dc5f56febe721C57336D37fC, 0x2897c37022347892190a76af5be338d021329bd64b116569b66776e2047e511f); emit LogUnbondRequested(0xD6EAff0C0Ec0b74f3C753484A6a611FA20B84c72, 0xcfc500163c533531485979ebb1e844e940e249ac3810d638e0a82513e3ec9d89, 1597837711); emit LogUnbonded(0xC56CE55dFB2Ee28e5F69bCA53F37F7223684be64, 0x205beeafb5643243afb4400bc0983c5e01e65f8e7debfdc8510349562d1a172a); emit LogBond(0x6d328B8De10FD9bC0801d396377a6ddd784141Fa, 135850000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogUnbondRequested(0x6d328B8De10FD9bC0801d396377a6ddd784141Fa, 0x8cf3d536052fe7e0961a8a3bca6d27a344ef6083e5a4f6f61984b45b214b2aad, 1598540388); emit LogBond(0x90294A8A0eA500e54d32267e962c35c76E91441E, 10009308800000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xBA101A1Fc1C540EC1E6C38B75976b2B66aB8Ba8e, 12000026300000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xaeEDb8Ee84515F7385030ee7D4dc5a3dCe73416c, 16087500000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogUnbondRequested(0x75C242995575c786224CE5eF3D9aBFF8b643B62e, 0x8bea4fdbcc2213f440484edb47a0a7cea3a5f35b24977890b1319bf2e73458a4, 1598593508); emit LogUnbondRequested(0xB4fA71df2a11d1C3273aDeF06c3F3d0238426301, 0x61d7e7aec459c6cc34ae663d8cff2388ceed4fbc537e03a5dc63fcb089da0577, 1598602467); emit LogBond(0x8B536c481Fa51caCC616D1ed34BCA205862316FC, 4680000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogUnbondRequested(0x5DCB3152072D13dBAaBD68eD85d6192Ca543b04E, 0x065e414068acd4f97d7d2dbb40970aafca5ff12074e8316ada253ff978d6ddc3, 1598614343); emit LogUnbondRequested(0x98725bEA9CaF118e3E31a0fE480B887f81f45BD7, 0xe5ca383a1179e734baefbf198e58363d84f5d51ca0c852e4349b6b0aa1a0880e, 1598625410); emit LogUnbondRequested(0x007cBb01a3DD8833Cc5e9e36C49E5Ad343C8F7bc, 0xb792d5d871623794b2a3f91165d85113239b98acac07297d5d1c9b8ed4131bf0, 1598628318); emit LogBond(0xB6C3F6FEe5d2eEF936E6C723c3fA747092999326, 1499990000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x5E2c450c478Bbf63EA0d27026A54fD8A0bE5234f, 10291000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x71249f442Da06793725da4791373801A9AeB14B5, 4993000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xADA781aF341439bB76Eb5ade71EB9A5fcF8Eb13d, 622999100000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x3837E2c3Ba88D3706FAb9337B4337a8D0BaEb06c, 11109635000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xF1c7568032ACe20294a4F87CD43E97B0bC7B04cA, 40582759200000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x8D7d9Bad3dB08ee4E4D306F22870186c6F26CA77, 993000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x54690C14B2B9c873D470cB8C3bf6afEDb9F24808, 1107900500000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x300575c02d5AD480AC1a7b5F7aC87C3c1c48D7aA, 593030000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x48271c4b00121cf1580c1e5c3a50a44F9Ac01e9e, 33000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0xDDa4Ab964300d50dE804CCF424311d66b732982f, 11363000000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogBond(0x2b9e8c8d9bfB803Fd0E663D6573086Ab8C435098, 14715867000000000000000, 0x2ce0c96383fb229d9776f33846e983a956a7d95844fac57b180ed0071d93bb28, 0, 0); emit LogUnbondRequested(0x1b22bc5F3e381D2d5Cc51E758af69882CCE1dB9d, 0x31f8430259cb9ad84ba74518f2366d909433dfbe56fdf2ff79c9c777ec9b0d2d, 1598837449); bonds[0x6bf7e0212177c5854fecfc9b725e5ceb022bab8c7f068968ea1a8d7f3f8d14b1] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x537baf86ae2825477b718fedadee841938483e783b2b6a0f39400a6281f0af7c] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0xcee5ac7ce17f0a7950d239154292914212c70c156a2e22a03fc2ae92fbcf1894] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x2656af2cb93a26898ba040e561e48db4da4cd941888e207f8c0ba3718f938874] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0xfbf230dfe512be808c7ee7a053d1454133594b9994eef39e6ddc8c0556322e52] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x841e0a5de608d7f162fcb8233ceef69cfaed5ed47715326cf26ca970dd749c04] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x55f91535b9b3dbb3780e495db47e80fc2267e6cd8805047683d33c5df8524cee] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x497a1d8247071a99703af30506238b8a86b3aafba1ebfca7888fca7e1a10cd24] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x084579db72e000e52fe7f1b2a0177823d82536b2fbc9bdef9e5567283550310a] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0xd53ecca5d968e55e456a3c931885c1637daeb76ade20b409b270e7eb6dfaa877] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0xfd82e4680aba5e0c37931e045720f5459d52816f767b59e84bb9deb038fa2dc5] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0xe83b8cdde5c5ebf9c2ee8b9900c7ee7c2050863de327b5718fda9d7f34e91300] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x7684f7fe4c908e8a00d074e7082cdb0c8074221b20cca5032bb4c448d3a9ada9] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x6b345a5726cc9fd9ba79a5e39d736696008e26306cc3d1b3c3739d181485c81a] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0xec28124a750f56ea37081d85882fc95c6087a2f241d91dd5404761825a68fb12] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x065e414068acd4f97d7d2dbb40970aafca5ff12074e8316ada253ff978d6ddc3] = BondState({ active: true, slashedAtStart: 0, willUnlock: 1598614343 }); bonds[0xcd3e6ed86a961c47c6b254a4883c32374a077557926cebc74b2a40c31d7fa077] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x1a8159ffd15983daadb3fa50c4f3201fe8d7957371b6baba14386a674c1506a5] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0xb6579ae95fa777b0cba6d63ed8fdb70814c7023d71b8ef5600c0828d40cfc214] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0xd9185be1e9d93f1c5dc3c91ebb7d797cb228f7eb8f31c2251b3acb0474253d34] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0xb76cbf1e23e921114134419c621f267000f435be6f8a30b8ffabf27ad2cb596f] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0xe9f6ab79958bca6b3f71e51c56457719a0e93c33a0c60c8278ef4dbaaa96c827] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x3b20cb7f22ebef04834645e1b9e0d79aaa094c0a24093ba8f93946bcb3b16a02] = BondState({ active: true, slashedAtStart: 0, willUnlock: 1597526774 }); bonds[0x463cd780afa534748ce483528c617aabd0d0434c50da8884d5f47e1df60439de] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x261417636a7b6e5c6617d264ee66f421c8d63d8aab0c6637a99fd434cf685768] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0xed467b0f953b2162a46d23e1a1a14a1c3ca919398216300a9096196633cc85ca] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x61d7e7aec459c6cc34ae663d8cff2388ceed4fbc537e03a5dc63fcb089da0577] = BondState({ active: true, slashedAtStart: 0, willUnlock: 1598602467 }); bonds[0x9f55014c20e5d030238316d3e346a305f026d9e871665316022279b2b61c3fb5] = BondState({ active: true, slashedAtStart: 0, willUnlock: 1588236158 }); bonds[0x54b25d862b8144eb9307da6818b0f5e24eb7e3495bc90547609ee060c10c03b2] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x4e6fef268090fa372ea0feda943f2be17c97b962c0d361ccf241b88528f011e5] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x10090f224da873e06023ba12da3a8cc7447291fa4b2a64ed3e8742b980a2b78f] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0xf7ef708a4267fa400cfab8f123e140b6291a6ba954c738f8c57f06673465f0ea] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x3939543b4093495ebcc9312af394d80a7e0314e84850d1c075557b8725f1b2e4] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x49f903e6eceb5688ea922920f729eb6e7daf5adb14c9aeb66173767670682001] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0xbd81ecc7e090a4c73a7fea203ce8ec81bff3dee0277f8c96e8f5a3c065c7739e] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0xc0c3731eb93c4103fb6fbafba2b673c96da52a4d9c6a25a971357986b0672328] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x19727f2fbc61de16bd363d4068675d2211270634d175a02acd95392a9e67d5d1] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x351a00e76233023161f69089d28f426c53e5fabe047c8c1409e48db07ac47150] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x54f88dcbb2ac75b79df5dfad62d16b211907f226aea636c9bba60e438e7aa8b3] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0xfe4ac65475129493cab64b4549a6dc4fbf03219724799c57de3efaa3b205a1d1] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x3db96d72020bd055c589146b0e0e67684040e1ae4a6d744387cc5daf268080ae] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0xe178e15b8a0527162d3f996c771d635e603a4cedf8e3ea2fcc3f87eb5415e8d7] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x67b2e3b4f2a8c17698426d3d83448e518026c1e2270358c4b1d8af13fd91f5ed] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x63c20de5426e85724bc6167fcaace46ed17ae5172da1002da103b49cf4d527f5] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0xc7cd52114ba90eb1c4ffe226210d3b450269ade61eab5ed0c098485b94e1db3b] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x6004b687c29c5bf8fe2f0cb3e143e3e1b9f88c3fe21de511a775124677291a98] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x64c0e62a33e1fcf4654e47fc9d692db2b2d87fa3d043e057021133f817e15e38] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x985b3fdf6745e92e03d631982ea15c7515eb720f973ce93228a75236721ffcf1] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0xcfc500163c533531485979ebb1e844e940e249ac3810d638e0a82513e3ec9d89] = BondState({ active: true, slashedAtStart: 0, willUnlock: 1597837711 }); bonds[0x4c55c332d8b9715e44fcfe8b7f24b0cf83799f3ba1008497110436769380b8d9] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x1b9d8c6e4bd2e2a48999f8944c411fa49d885bfc15b1eec7714aeda744c2893d] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0xf54a14aabfeed3ac02aa5d7146e0c319f342951ed88218d12189bb0deea15247] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0xb600f5824e2e4882d2a5afbadafcd9ae84bde0b0d895968f3ba2f45e2e03952a] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x580ec01b33458c3687e454e445490b05abfc6b2f18fdd8d84b0d8bf38ed26cdd] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x4a76af25a9c65de47b13e06c481ff92cea091f4dc88140638763a90fcf635517] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0xc064700c2e042361f791092b590ba8c3b801a73d328136706fcdefb7ca38479c] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x6e0031b54289af48bea24043f25717bcbed5e60eb3f4ee23bdccd87c98051b58] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x2948ec66a4d906166df7b78f8a45e4a52852c8679027449a161a5f2e4a692713] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x4d254e52a9da50e15783657c83a55aaa8140829190ccd53802ce7d88db7c9234] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x3b7a0b6d857478420a3e619b3dcbf2c237affa2dac7273b68c6d7e1446991e59] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x53dadac3513760637d6a18b6df62cc3ad5aa14c069128f3ac9a499b05968ad32] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x974de668e26fd5afc2bd4a8a2fc517a498f33f63044196a88654b51f3752e60f] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0xe5ca383a1179e734baefbf198e58363d84f5d51ca0c852e4349b6b0aa1a0880e] = BondState({ active: true, slashedAtStart: 0, willUnlock: 1598625410 }); bonds[0x17e3908f3ff0e74f42378ea427f6893a9332cc54e25f0094edc1033a7064197d] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x98876de456545622e28c4fd3b7cee918057227ba355bf57140414f8702475467] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0xb792d5d871623794b2a3f91165d85113239b98acac07297d5d1c9b8ed4131bf0] = BondState({ active: true, slashedAtStart: 0, willUnlock: 1598628318 }); bonds[0x25686ef25a39f77719b16b60f23baaef3d324158685250adb4865b3a94b39d90] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0xde1473077731573a25aedcefc07f0933cc045033f20c525baaaa71a6bd7dffe5] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0xb685481d5771d882b19c284f50ac3e90064d064a6743e0c0a893f64e2511def2] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0xf4a4b5c5cd7567355c115320529a4b10e4223e02d9c738418de8269da1db8eea] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x8867c6476d92cab84a0132edf105ff51bfda7061d70ef61c24c6202bbf3c37c9] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x3fdd567bb5682dc5633fc48c89749af562e8baf2f074925a0a6060c1bfdc3695] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x3a7f411baf3208a70c7db16f248e4e593488dc2b25e9684755c1687b7d2c3fcc] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x11d9eb32f013fd40168d45f4a5316a778100f4728d730601f9cc4baadded15d6] = BondState({ active: true, slashedAtStart: 0, willUnlock: 1597480348 }); bonds[0x6241e8de94fca22624cdabc8c9120d96a99419d53024b26540e32395db69cb36] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0xe2741d1e28c160602b032b43d35adb26c5e95921f268f9a1803ff6af16429c43] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x9731ec9e0dfd72e15c6437694b5231772bbfeb54f7bc1c7e7fb9ba60b7d14306] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x31f8430259cb9ad84ba74518f2366d909433dfbe56fdf2ff79c9c777ec9b0d2d] = BondState({ active: true, slashedAtStart: 0, willUnlock: 1598837449 }); bonds[0x8bea4fdbcc2213f440484edb47a0a7cea3a5f35b24977890b1319bf2e73458a4] = BondState({ active: true, slashedAtStart: 0, willUnlock: 1598593508 }); bonds[0xc262e1848368b7cf7f99795d8f238c2dac6f2ed24621d2e87977f7114d5026d5] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x7b9442a846f3a0babbb595fe27fb4bba9ad52f2a49c3ef647a53d3544db5f2e6] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0xe3aedc79d206ebe61d682c3e1949bf9e2a75eafd415ec937e1ae1fcd324b268c] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x55c46d0042208d5961841c104730a81c5c9aa94a68c35c5bb3b18fbdf0ca634f] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x5c1dd3b7053f9017286d2da670797af18e2ef5d5ffe0f2377012231c82a45fd5] = BondState({ active: true, slashedAtStart: 0, willUnlock: 1595075391 }); bonds[0x44ca4e4965db4208b091a84bc728e89f1c4fb67725cd772acb0050368db9961e] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0xb18b96d8d198493107b69bd940e5a8948cf8aca50384d062aac1c9af1eddeb22] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x4cf3b02e1cf7172fd86f80a33233e722ee3f93c6c2e032b70caff0adf3c3b232] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x4c728add44251452901047ab3bf3062b9a07e4674413c85f81419a615d4e3aec] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0xe0525ce5a0aca03ba22d6cbcf508c0ff6083cdddede4c8e320e3ab9f051a8d14] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x5415a6caf5fe415dbf4bca04deecb7256fe2294ede04cc527087587641eee72e] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0xd5d7f6958b92d4869d17cfca6ed283693c4fdc44f5d318875557715c10eb2571] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0xd514f1644998d48c5a46167b7a95b4476f2ad51b40536d7efbb671519daa11a2] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x8cf3d536052fe7e0961a8a3bca6d27a344ef6083e5a4f6f61984b45b214b2aad] = BondState({ active: true, slashedAtStart: 0, willUnlock: 1598540388 }); bonds[0x06246b57bc894029014ce1d0b3c84209981395987eb818e95159a0b92a0d4e48] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x7264e89959ebf9290a4b521303ffd70e7f336abe9e9ee487c050c444de9a9ab0] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0xf3f87df3460196224d955cf768b5264d067f2e04caec803c0b064d332cd7e5ac] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0xbdf38689a9cbb8d694ed2aaebf2a4e6f99c37532d6a597b555240e3756d67460] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0xd2fa2491f4dea717ed201ceed2258d6c157a5aabf197ef507885d05200705931] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0xea5a0eadbec156573fa25309c410e693386e848952a57484e25ebc2799a59b68] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x9a40a998d448f3a0d2b1c2fa1838656318df2a2764d0ef886cb010f01c19c8fc] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x5c7908761d6c64867130ed79a74584f714135ec2f6a3483df6d9492e3173624f] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x7ad96e092b5b24e8e9d7c1ceae15ae1bfcce6e1ccec03d27ebb8e66018f5b5fc] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x188f71cf2f81f898886a9dceea0f1b53fea5c7d509e07703e8e3480aa1a8f933] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x51fd11bf8d46eef3f7e3cbbe24f587e3e1e7bcd02a65a9788e0ba9b628031e51] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x071e0c3071bc38cb40cb4d8fe838cad84cf6430896f488399e2cb1ec33781bab] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x81ec2b509207318ccf3fd1bd0668ecba114d45a8835931e0603440ad203a6750] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0xd27e975efb411e0e52febabdf61f0c86ae91175884c9365f630b2f0a5bfe123d] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0xc677b315f22425f58818d41a4ae201b4ea9420106180d393bee90a1d37ccb017] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); bonds[0x11e3aa1e9325483d0d9f2bcb76a9f05d55518eb2c5df24e549db23737b052fb2] = BondState({ active: true, slashedAtStart: 0, willUnlock: 0 }); } function slash(bytes32 poolId, uint pts) external { require(msg.sender == slasherAddr, 'ONLY_SLASHER'); uint newSlashPts = slashPoints[poolId].add(pts); require(newSlashPts <= MAX_SLASH, 'PTS_TOO_HIGH'); slashPoints[poolId] = newSlashPts; emit LogSlash(poolId, newSlashPts); } function addBond(BondLibrary.Bond memory bond) public { bytes32 id = bond.hash(msg.sender); require(!bonds[id].active, 'BOND_ALREADY_ACTIVE'); require(slashPoints[bond.poolId] < MAX_SLASH, 'POOL_SLASHED'); bonds[id] = BondState({ active: true, slashedAtStart: uint64(slashPoints[bond.poolId]), willUnlock: 0 }); SafeERC20.transferFrom(tokenAddr, msg.sender, address(this), bond.amount); emit LogBond(msg.sender, bond.amount, bond.poolId, bond.nonce, bonds[id].slashedAtStart); } function requestUnbond(BondLibrary.Bond memory bond) public { bytes32 id = bond.hash(msg.sender); BondState storage bondState = bonds[id]; require(bondState.active && bondState.willUnlock == 0, 'BOND_NOT_ACTIVE'); bondState.willUnlock = uint64(now + TIME_TO_UNBOND); emit LogUnbondRequested(msg.sender, id, bondState.willUnlock); } function unbond(BondLibrary.Bond memory bond) public { bytes32 id = bond.hash(msg.sender); BondState storage bondState = bonds[id]; require(bondState.willUnlock > 0 && now > bondState.willUnlock, 'BOND_NOT_UNLOCKED'); uint amount = calcWithdrawAmount(bond, uint(bondState.slashedAtStart)); uint toBurn = bond.amount - amount; delete bonds[id]; SafeERC20.transfer(tokenAddr, msg.sender, amount); if (toBurn > 0) SafeERC20.transfer(tokenAddr, BURN_ADDR, toBurn); emit LogUnbonded(msg.sender, id); } function getWithdrawAmount(address owner, BondLibrary.Bond memory bond) public view returns (uint) { BondState storage bondState = bonds[bond.hash(owner)]; if (!bondState.active) return 0; return calcWithdrawAmount(bond, uint(bondState.slashedAtStart)); } function calcWithdrawAmount(BondLibrary.Bond memory bond, uint slashedAtStart) internal view returns (uint) { return bond.amount .mul(MAX_SLASH.sub(slashPoints[bond.poolId])) .div(MAX_SLASH.sub(slashedAtStart)); } }