Skip to content

Commit 931d76d

Browse files
authored
Kochab release 2.71.0 (Synthetixio#1791)
1 parent 3334c35 commit 931d76d

File tree

5 files changed

+211
-20
lines changed

5 files changed

+211
-20
lines changed

contracts/Issuer.sol

+19
Original file line numberDiff line numberDiff line change
@@ -618,6 +618,25 @@ contract Issuer is Owned, MixinSystemSettings, IIssuer {
618618
return rateInvalid;
619619
}
620620

621+
/**
622+
* One-time use function used to migrate balances from the CollateralShort contract
623+
* @param short The address of the CollateralShort contract to be upgraded
624+
* @param amount The amount of sUSD collateral to be burnt
625+
*/
626+
bool public shortsUpgraded = false;
627+
628+
function upgradeCollateralShort(address short, uint amount) external onlyOwner {
629+
require(!shortsUpgraded, "Issuer: shorts already upgraded");
630+
shortsUpgraded = true;
631+
require(short == resolver.getAddress("CollateralShort"), "Issuer: wrong short address");
632+
require(address(synths[sUSD]) != address(0), "Issuer: synth doesn't exist");
633+
require(amount > 0, "Issuer: cannot burn 0 synths");
634+
635+
exchanger().settle(short, sUSD);
636+
637+
synths[sUSD].burn(short, amount);
638+
}
639+
621640
function issueSynths(address from, uint amount) external onlySynthetix {
622641
require(amount > 0, "Issuer: cannot issue 0 synths");
623642

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
pragma solidity ^0.5.16;
2+
3+
import "../AddressResolver.sol";
4+
import "../BaseMigration.sol";
5+
import "../Issuer.sol";
6+
import "../SystemStatus.sol";
7+
8+
interface ISynthetixNamedContract {
9+
// solhint-disable func-name-mixedcase
10+
function CONTRACT_NAME() external view returns (bytes32);
11+
}
12+
13+
// solhint-disable contract-name-camelcase
14+
contract Migration_KochabOptimism is BaseMigration {
15+
// https://explorer.optimism.io/address/0x6d4a64C57612841c2C6745dB2a4E4db34F002D20;
16+
address public constant OWNER = 0x6d4a64C57612841c2C6745dB2a4E4db34F002D20;
17+
18+
// ----------------------------
19+
// EXISTING SYNTHETIX CONTRACTS
20+
// ----------------------------
21+
22+
// https://explorer.optimism.io/address/0x95A6a3f44a70172E7d50a9e28c85Dfd712756B8C
23+
AddressResolver public constant addressresolver_i = AddressResolver(0x95A6a3f44a70172E7d50a9e28c85Dfd712756B8C);
24+
// https://explorer.optimism.io/address/0xE8c41bE1A167314ABAF2423b72Bf8da826943FFD
25+
SystemStatus public constant systemstatus_i = SystemStatus(0xE8c41bE1A167314ABAF2423b72Bf8da826943FFD);
26+
// https://explorer.optimism.io/address/0x0333BD82e1F5FF89c19EC44Ab5302A0041b33139
27+
Issuer public constant issuer_i = Issuer(0x0333BD82e1F5FF89c19EC44Ab5302A0041b33139);
28+
29+
// ----------------------------------
30+
// NEW CONTRACTS DEPLOYED TO BE ADDED
31+
// ----------------------------------
32+
33+
// https://explorer.optimism.io/address/0x0333BD82e1F5FF89c19EC44Ab5302A0041b33139
34+
address public constant new_Issuer_contract = 0x0333BD82e1F5FF89c19EC44Ab5302A0041b33139;
35+
36+
constructor() public BaseMigration(OWNER) {}
37+
38+
function contractsRequiringOwnership() public pure returns (address[] memory contracts) {
39+
contracts = new address[](3);
40+
contracts[0] = address(addressresolver_i);
41+
contracts[1] = address(systemstatus_i);
42+
contracts[2] = address(issuer_i);
43+
}
44+
45+
function migrate() external onlyOwner {
46+
// ACCEPT OWNERSHIP for all contracts that require ownership to make changes
47+
acceptAll();
48+
49+
// MIGRATION
50+
// Import all new contracts into the address resolver;
51+
addressresolver_importAddresses_0();
52+
// Rebuild the resolver caches in all MixinResolver contracts - batch 1;
53+
addressresolver_rebuildCaches_1();
54+
// Rebuild the resolver caches in all MixinResolver contracts - batch 2;
55+
addressresolver_rebuildCaches_2();
56+
// Ensure Issuer contract can suspend issuance - see SIP-165;
57+
systemstatus_i.updateAccessControl("Issuance", new_Issuer_contract, true, false);
58+
// Add synths to the Issuer contract - batch 1;
59+
issuer_addSynths_6();
60+
61+
// NOMINATE OWNERSHIP back to owner for aforementioned contracts
62+
nominateAll();
63+
}
64+
65+
function acceptAll() internal {
66+
address[] memory contracts = contractsRequiringOwnership();
67+
for (uint i = 0; i < contracts.length; i++) {
68+
Owned(contracts[i]).acceptOwnership();
69+
}
70+
}
71+
72+
function nominateAll() internal {
73+
address[] memory contracts = contractsRequiringOwnership();
74+
for (uint i = 0; i < contracts.length; i++) {
75+
returnOwnership(contracts[i]);
76+
}
77+
}
78+
79+
function addressresolver_importAddresses_0() internal {
80+
bytes32[] memory addressresolver_importAddresses_names_0_0 = new bytes32[](1);
81+
addressresolver_importAddresses_names_0_0[0] = bytes32("Issuer");
82+
address[] memory addressresolver_importAddresses_destinations_0_1 = new address[](1);
83+
addressresolver_importAddresses_destinations_0_1[0] = address(new_Issuer_contract);
84+
addressresolver_i.importAddresses(
85+
addressresolver_importAddresses_names_0_0,
86+
addressresolver_importAddresses_destinations_0_1
87+
);
88+
}
89+
90+
function addressresolver_rebuildCaches_1() internal {
91+
MixinResolver[] memory addressresolver_rebuildCaches_destinations_1_0 = new MixinResolver[](20);
92+
addressresolver_rebuildCaches_destinations_1_0[0] = MixinResolver(0x47eE58801C1AC44e54FF2651aE50525c5cfc66d0);
93+
addressresolver_rebuildCaches_destinations_1_0[1] = MixinResolver(0x45c55BF488D3Cb8640f12F63CbeDC027E8261E79);
94+
addressresolver_rebuildCaches_destinations_1_0[2] = MixinResolver(0x68a8b098967Ae077dcFf5cC8E29B7cb15f1A3cC8);
95+
addressresolver_rebuildCaches_destinations_1_0[3] = MixinResolver(0xF4EebDD0704021eF2a6Bbe993fdf93030Cd784b4);
96+
addressresolver_rebuildCaches_destinations_1_0[4] = MixinResolver(0xD3739A5F06747e148E716Dcb7147B9BA15b70fcc);
97+
addressresolver_rebuildCaches_destinations_1_0[5] = MixinResolver(0x274D1dbe298993EaD5AC1B25624F53786d16006e);
98+
addressresolver_rebuildCaches_destinations_1_0[6] = MixinResolver(0x17628A557d1Fc88D1c35989dcBAC3f3e275E2d2B);
99+
addressresolver_rebuildCaches_destinations_1_0[7] = MixinResolver(0xcC02F000b0aA8a0eFC2B55C9cf2305Fb3531cca1);
100+
addressresolver_rebuildCaches_destinations_1_0[8] = MixinResolver(0x7322e8F6cB6c6a7B4e6620C486777fcB9Ea052a4);
101+
addressresolver_rebuildCaches_destinations_1_0[9] = MixinResolver(0x136b1EC699c62b0606854056f02dC7Bb80482d63);
102+
addressresolver_rebuildCaches_destinations_1_0[10] = MixinResolver(0xA997BD647AEe62Ef03b41e6fBFAdaB43d8E57535);
103+
addressresolver_rebuildCaches_destinations_1_0[11] = MixinResolver(0xD1599E478cC818AFa42A4839a6C665D9279C3E50);
104+
addressresolver_rebuildCaches_destinations_1_0[12] = MixinResolver(0x0681883084b5De1564FE2706C87affD77F1677D5);
105+
addressresolver_rebuildCaches_destinations_1_0[13] = MixinResolver(0xC4Be4583bc0307C56CF301975b2B2B1E5f95fcB2);
106+
addressresolver_rebuildCaches_destinations_1_0[14] = MixinResolver(0x2302D7F7783e2712C48aA684451b9d706e74F299);
107+
addressresolver_rebuildCaches_destinations_1_0[15] = MixinResolver(0x91DBC6f587D043FEfbaAD050AB48696B30F13d89);
108+
addressresolver_rebuildCaches_destinations_1_0[16] = MixinResolver(0x5D7569CD81dc7c8E7FA201e66266C9D0c8a3712D);
109+
addressresolver_rebuildCaches_destinations_1_0[17] = MixinResolver(0xF5d0BFBc617d3969C1AcE93490A76cE80Db1Ed0e);
110+
addressresolver_rebuildCaches_destinations_1_0[18] = MixinResolver(0xB16ef128b11e457afA07B09FCE52A01f5B05a937);
111+
addressresolver_rebuildCaches_destinations_1_0[19] = MixinResolver(0x5eA2544551448cF6DcC1D853aDdd663D480fd8d3);
112+
addressresolver_i.rebuildCaches(addressresolver_rebuildCaches_destinations_1_0);
113+
}
114+
115+
function addressresolver_rebuildCaches_2() internal {
116+
MixinResolver[] memory addressresolver_rebuildCaches_destinations_2_0 = new MixinResolver[](4);
117+
addressresolver_rebuildCaches_destinations_2_0[0] = MixinResolver(0xC19d27d1dA572d582723C1745650E51AC4Fc877F);
118+
addressresolver_rebuildCaches_destinations_2_0[1] = MixinResolver(0xc66499aCe3B6c6a30c784bE5511E8d338d543913);
119+
addressresolver_rebuildCaches_destinations_2_0[2] = MixinResolver(0x15E7D4972a3E477878A5867A47617122BE2d1fF0);
120+
addressresolver_rebuildCaches_destinations_2_0[3] = MixinResolver(new_Issuer_contract);
121+
addressresolver_i.rebuildCaches(addressresolver_rebuildCaches_destinations_2_0);
122+
}
123+
124+
function issuer_addSynths_6() internal {
125+
ISynth[] memory issuer_addSynths_synthsToAdd_6_0 = new ISynth[](11);
126+
issuer_addSynths_synthsToAdd_6_0[0] = ISynth(0xD1599E478cC818AFa42A4839a6C665D9279C3E50);
127+
issuer_addSynths_synthsToAdd_6_0[1] = ISynth(0x0681883084b5De1564FE2706C87affD77F1677D5);
128+
issuer_addSynths_synthsToAdd_6_0[2] = ISynth(0xC4Be4583bc0307C56CF301975b2B2B1E5f95fcB2);
129+
issuer_addSynths_synthsToAdd_6_0[3] = ISynth(0x2302D7F7783e2712C48aA684451b9d706e74F299);
130+
issuer_addSynths_synthsToAdd_6_0[4] = ISynth(0x91DBC6f587D043FEfbaAD050AB48696B30F13d89);
131+
issuer_addSynths_synthsToAdd_6_0[5] = ISynth(0x5D7569CD81dc7c8E7FA201e66266C9D0c8a3712D);
132+
issuer_addSynths_synthsToAdd_6_0[6] = ISynth(0xF5d0BFBc617d3969C1AcE93490A76cE80Db1Ed0e);
133+
issuer_addSynths_synthsToAdd_6_0[7] = ISynth(0xB16ef128b11e457afA07B09FCE52A01f5B05a937);
134+
issuer_addSynths_synthsToAdd_6_0[8] = ISynth(0x5eA2544551448cF6DcC1D853aDdd663D480fd8d3);
135+
issuer_addSynths_synthsToAdd_6_0[9] = ISynth(0xC19d27d1dA572d582723C1745650E51AC4Fc877F);
136+
issuer_addSynths_synthsToAdd_6_0[10] = ISynth(0xc66499aCe3B6c6a30c784bE5511E8d338d543913);
137+
issuer_i.addSynths(issuer_addSynths_synthsToAdd_6_0);
138+
}
139+
}

publish/deployed/mainnet-ovm/deployment.json

+46-11
Large diffs are not rendered by default.

publish/releases.json

+6-9
Original file line numberDiff line numberDiff line change
@@ -645,6 +645,11 @@
645645
"layer": "both",
646646
"sources": ["Synthetix"],
647647
"released": "both"
648+
},
649+
{
650+
"sip": 243,
651+
"layer": "ovm",
652+
"sources": ["Issuer"]
648653
}
649654
],
650655
"releases": [
@@ -1185,22 +1190,14 @@
11851190
"sips": [239],
11861191
"released": true
11871192
},
1188-
{
1189-
"name": "Kochab",
1190-
"version": {
1191-
"major": 2,
1192-
"minor": 71
1193-
},
1194-
"sips": []
1195-
},
11961193
{
11971194
"name": "Kochab (Optimism)",
11981195
"ovm": true,
11991196
"version": {
12001197
"major": 2,
12011198
"minor": 71
12021199
},
1203-
"sips": []
1200+
"sips": [243]
12041201
},
12051202
{
12061203
"name": "Saiph",

test/contracts/Issuer.js

+1
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ contract('Issuer (via Synthetix)', async accounts => {
171171
'removeSynths',
172172
'setCurrentPeriodId',
173173
'setLastDebtRatio',
174+
'upgradeCollateralShort',
174175
],
175176
});
176177
});

0 commit comments

Comments
 (0)