pragma solidity ^0.5.16; import "../BaseMigration.sol"; import "../AddressResolver.sol"; import "../SystemStatus.sol"; import "../Issuer.sol"; import "../SystemSettings.sol"; interface ISynthetixNamedContract { // solhint-disable func-name-mixedcase function CONTRACT_NAME() external view returns (bytes32); } // solhint-disable contract-name-camelcase contract Migration_Algol is BaseMigration { // https://etherscan.io/address/0xEb3107117FEAd7de89Cd14D463D340A2E6917769; address public constant OWNER = 0xEb3107117FEAd7de89Cd14D463D340A2E6917769; // ---------------------------- // EXISTING SYNTHETIX CONTRACTS // ---------------------------- // https://etherscan.io/address/0x823bE81bbF96BEc0e25CA13170F5AaCb5B79ba83 AddressResolver public constant addressresolver_i = AddressResolver(0x823bE81bbF96BEc0e25CA13170F5AaCb5B79ba83); // https://etherscan.io/address/0x696c905F8F8c006cA46e9808fE7e00049507798F SystemStatus public constant systemstatus_i = SystemStatus(0x696c905F8F8c006cA46e9808fE7e00049507798F); // https://etherscan.io/address/0xc9380E4A1570cce7b99eeD107aC42C754c4CE3Bf Issuer public constant issuer_i = Issuer(0xc9380E4A1570cce7b99eeD107aC42C754c4CE3Bf); // https://etherscan.io/address/0x5ad055A1F8C936FB0deb7024f1539Bb3eAA8dc3E SystemSettings public constant systemsettings_i = SystemSettings(0x5ad055A1F8C936FB0deb7024f1539Bb3eAA8dc3E); // ---------------------------------- // NEW CONTRACTS DEPLOYED TO BE ADDED // ---------------------------------- // https://etherscan.io/address/0x5ad055A1F8C936FB0deb7024f1539Bb3eAA8dc3E address public constant new_SystemSettings_contract = 0x5ad055A1F8C936FB0deb7024f1539Bb3eAA8dc3E; // https://etherscan.io/address/0xc9380E4A1570cce7b99eeD107aC42C754c4CE3Bf address public constant new_Issuer_contract = 0xc9380E4A1570cce7b99eeD107aC42C754c4CE3Bf; constructor() public BaseMigration(OWNER) {} function contractsRequiringOwnership() public pure returns (address[] memory contracts) { contracts = new address[](4); contracts[0] = address(addressresolver_i); contracts[1] = address(systemstatus_i); contracts[2] = address(issuer_i); contracts[3] = address(systemsettings_i); } function migrate() external onlyOwner { // ACCEPT OWNERSHIP for all contracts that require ownership to make changes acceptAll(); // MIGRATION // Import all new contracts into the address resolver; addressresolver_importAddresses_0(); // Rebuild the resolver caches in all MixinResolver contracts - batch 1; addressresolver_rebuildCaches_1(); // Rebuild the resolver caches in all MixinResolver contracts - batch 2; addressresolver_rebuildCaches_2(); // Ensure Issuer contract can suspend issuance - see SIP-165; systemstatus_i.updateAccessControl("Issuance", new_Issuer_contract, true, false); // Add synths to the Issuer contract - batch 1; issuer_addSynths_6(); // Set the penalty amount of SNX from a liquidated account; systemsettings_i.setSnxLiquidationPenalty(300000000000000000); // NOMINATE OWNERSHIP back to owner for aforementioned contracts nominateAll(); } function acceptAll() internal { address[] memory contracts = contractsRequiringOwnership(); for (uint i = 0; i < contracts.length; i++) { Owned(contracts[i]).acceptOwnership(); } } function nominateAll() internal { address[] memory contracts = contractsRequiringOwnership(); for (uint i = 0; i < contracts.length; i++) { returnOwnership(contracts[i]); } } function addressresolver_importAddresses_0() internal { bytes32[] memory addressresolver_importAddresses_names_0_0 = new bytes32[](2); addressresolver_importAddresses_names_0_0[0] = bytes32("SystemSettings"); addressresolver_importAddresses_names_0_0[1] = bytes32("Issuer"); address[] memory addressresolver_importAddresses_destinations_0_1 = new address[](2); addressresolver_importAddresses_destinations_0_1[0] = address(new_SystemSettings_contract); addressresolver_importAddresses_destinations_0_1[1] = address(new_Issuer_contract); addressresolver_i.importAddresses( addressresolver_importAddresses_names_0_0, addressresolver_importAddresses_destinations_0_1 ); } function addressresolver_rebuildCaches_1() internal { MixinResolver[] memory addressresolver_rebuildCaches_destinations_1_0 = new MixinResolver[](20); addressresolver_rebuildCaches_destinations_1_0[0] = MixinResolver(new_SystemSettings_contract); addressresolver_rebuildCaches_destinations_1_0[1] = MixinResolver(0xDA4eF8520b1A57D7d63f1E249606D1A459698876); addressresolver_rebuildCaches_destinations_1_0[2] = MixinResolver(0x89FCb32F29e509cc42d0C8b6f058C993013A843F); addressresolver_rebuildCaches_destinations_1_0[3] = MixinResolver(0x0e5fe1b05612581576e9A3dB048416d0B1E3C425); addressresolver_rebuildCaches_destinations_1_0[4] = MixinResolver(0xf79603a71144e415730C1A6f57F366E4Ea962C00); addressresolver_rebuildCaches_destinations_1_0[5] = MixinResolver(0x3B2f389AeE480238A49E3A9985cd6815370712eB); addressresolver_rebuildCaches_destinations_1_0[6] = MixinResolver(0x08F30Ecf2C15A783083ab9D5b9211c22388d0564); addressresolver_rebuildCaches_destinations_1_0[7] = MixinResolver(0x1620Aa736939597891C1940CF0d28b82566F9390); addressresolver_rebuildCaches_destinations_1_0[8] = MixinResolver(0xD64D83829D92B5bdA881f6f61A4e4E27Fc185387); addressresolver_rebuildCaches_destinations_1_0[9] = MixinResolver(0xeAcaEd9581294b1b5cfb6B941d4B8B81B2005437); addressresolver_rebuildCaches_destinations_1_0[10] = MixinResolver(0x39Ea01a0298C315d149a490E34B59Dbf2EC7e48F); addressresolver_rebuildCaches_destinations_1_0[11] = MixinResolver(0xe533139Af961c9747356D947838c98451015e234); addressresolver_rebuildCaches_destinations_1_0[12] = MixinResolver(0x10A5F7D9D65bCc2734763444D4940a31b109275f); addressresolver_rebuildCaches_destinations_1_0[13] = MixinResolver(0xa8E31E3C38aDD6052A9407298FAEB8fD393A6cF9); addressresolver_rebuildCaches_destinations_1_0[14] = MixinResolver(0xE1cc2332852B2Ac0dA59A1f9D3051829f4eF3c1C); addressresolver_rebuildCaches_destinations_1_0[15] = MixinResolver(0xfb020CA7f4e8C4a5bBBe060f59a249c6275d2b69); addressresolver_rebuildCaches_destinations_1_0[16] = MixinResolver(0xdc883b9d9Ee16f74bE08826E68dF4C9D9d26e8bD); addressresolver_rebuildCaches_destinations_1_0[17] = MixinResolver(0xBb5b03E920cF702De5A3bA9Fc1445aF4B3919c88); addressresolver_rebuildCaches_destinations_1_0[18] = MixinResolver(0xdAe6C79c46aB3B280Ca28259000695529cbD1339); addressresolver_rebuildCaches_destinations_1_0[19] = MixinResolver(0x1cB004a8e84a5CE95C1fF895EE603BaC8EC506c7); addressresolver_i.rebuildCaches(addressresolver_rebuildCaches_destinations_1_0); } function addressresolver_rebuildCaches_2() internal { MixinResolver[] memory addressresolver_rebuildCaches_destinations_2_0 = new MixinResolver[](9); addressresolver_rebuildCaches_destinations_2_0[0] = MixinResolver(0x5D4C724BFe3a228Ff0E29125Ac1571FE093700a4); addressresolver_rebuildCaches_destinations_2_0[1] = MixinResolver(0xDF69bC4541b86Aa4c5A470B4347E730c38b2c3B2); addressresolver_rebuildCaches_destinations_2_0[2] = MixinResolver(0x91b82d62Ff322b8e02b86f33E9A99a813437830d); addressresolver_rebuildCaches_destinations_2_0[3] = MixinResolver(0x942Eb6e8c029EB22103743C99985aF4F4515a559); addressresolver_rebuildCaches_destinations_2_0[4] = MixinResolver(0x75A0c1597137AA36B40b6a515D997F9a6c6eefEB); addressresolver_rebuildCaches_destinations_2_0[5] = MixinResolver(0x07C1E81C345A7c58d7c24072EFc5D929BD0647AD); addressresolver_rebuildCaches_destinations_2_0[6] = MixinResolver(0xC1AAE9d18bBe386B102435a8632C8063d31e747C); addressresolver_rebuildCaches_destinations_2_0[7] = MixinResolver(0x067e398605E84F2D0aEEC1806e62768C5110DCc6); addressresolver_rebuildCaches_destinations_2_0[8] = MixinResolver(new_Issuer_contract); addressresolver_i.rebuildCaches(addressresolver_rebuildCaches_destinations_2_0); } function issuer_addSynths_6() internal { ISynth[] memory issuer_addSynths_synthsToAdd_6_0 = new ISynth[](14); issuer_addSynths_synthsToAdd_6_0[0] = ISynth(0x10A5F7D9D65bCc2734763444D4940a31b109275f); issuer_addSynths_synthsToAdd_6_0[1] = ISynth(0xa8E31E3C38aDD6052A9407298FAEB8fD393A6cF9); issuer_addSynths_synthsToAdd_6_0[2] = ISynth(0xE1cc2332852B2Ac0dA59A1f9D3051829f4eF3c1C); issuer_addSynths_synthsToAdd_6_0[3] = ISynth(0xfb020CA7f4e8C4a5bBBe060f59a249c6275d2b69); issuer_addSynths_synthsToAdd_6_0[4] = ISynth(0xdc883b9d9Ee16f74bE08826E68dF4C9D9d26e8bD); issuer_addSynths_synthsToAdd_6_0[5] = ISynth(0xBb5b03E920cF702De5A3bA9Fc1445aF4B3919c88); issuer_addSynths_synthsToAdd_6_0[6] = ISynth(0xdAe6C79c46aB3B280Ca28259000695529cbD1339); issuer_addSynths_synthsToAdd_6_0[7] = ISynth(0x1cB004a8e84a5CE95C1fF895EE603BaC8EC506c7); issuer_addSynths_synthsToAdd_6_0[8] = ISynth(0x5D4C724BFe3a228Ff0E29125Ac1571FE093700a4); issuer_addSynths_synthsToAdd_6_0[9] = ISynth(0xDF69bC4541b86Aa4c5A470B4347E730c38b2c3B2); issuer_addSynths_synthsToAdd_6_0[10] = ISynth(0x91b82d62Ff322b8e02b86f33E9A99a813437830d); issuer_addSynths_synthsToAdd_6_0[11] = ISynth(0x942Eb6e8c029EB22103743C99985aF4F4515a559); issuer_addSynths_synthsToAdd_6_0[12] = ISynth(0x75A0c1597137AA36B40b6a515D997F9a6c6eefEB); issuer_addSynths_synthsToAdd_6_0[13] = ISynth(0x07C1E81C345A7c58d7c24072EFc5D929BD0647AD); issuer_i.addSynths(issuer_addSynths_synthsToAdd_6_0); } }