Skip to content

Commit 9a162ee

Browse files
committed
Merge branch 'staging' into 'main'
Merge Staging into Main See merge request orderlynetwork/orderly-v2/contract-evm!306
2 parents 37c2f32 + c074c92 commit 9a162ee

27 files changed

Lines changed: 2305 additions & 103 deletions

.env.example

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ RPC_URL_GOERLI="https://rpc.ankr.com/eth_goerli"
1616
RPC_URL_HYPERSPACE="https://rpc.ankr.com/filecoin_testnet"
1717
RPC_URL_SEPOLIA="https://rpc.sepolia.org"
1818
RPC_URL_FUJI="https://api.avax-test.network/ext/bc/C/rpc"
19+
RPC_URL_AVAX="https://api.avax.network/ext/bc/C/rpc"
1920
RPC_URL_ORDERLY="https://testnet-fuji-rpc-1.orderly.network/ext/bc/fVgSf4ruGhwvEMd8z6dRwsH6XgRaq31wxN4tRhZPN6rWYhjVt/rpc"
2021
RPC_URL_MUMBAI="https://polygon-mumbai.infura.io/v3/eda7ae04091a465eb960308cb44bf0b3"
2122
RPC_URL_BSC="https://bsc-dataseed1.binance.org"

README.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ forge script script/ledgerV2/DeployNewFeeManager.s.sol -f $RPC_URL_ORDERLYMAIN -
158158
forge script script/ledgerV2/DeployNewVaultManager.s.sol -f $RPC_URL_ORDERLYMAIN --broadcast --verifier-url https://explorer.orderly.network/api\? --verifier blockscout --verify
159159
forge script script/ledgerV2/DeployNewMarketManager.s.sol -f $RPC_URL_ORDERLYMAIN --broadcast --verifier-url https://explorer.orderly.network/api\? --verifier blockscout --verify
160160
forge script script/ledgerV2/DeployNewLedgerImplA.s.sol -f $RPC_URL_ORDERLYMAIN --broadcast --verifier-url https://explorer.orderly.network/api\? --verifier blockscout --verify
161+
forge script script/ledgerV2/DeployNewOperatorManagerImplA.s.sol -f $RPC_URL_ORDERLYMAIN --broadcast --verifier-url https://explorer.orderly.network/api\? --verifier blockscout --verify
161162
```
162163

163164
## Vault scripts
@@ -189,6 +190,14 @@ forge script script/vaultV2/DeployProxyVault.s.sol -f $RPC_URL_BASE --verifier-u
189190
forge script script/vaultV2/DeployProxyVault.s.sol -f $RPC_URL_MANTLESEPOLIA --verifier-url https://api-sepolia.mantlescan.xyz/api --broadcast --verify --etherscan-api-key $MANTLE_ETHERSCAN_API_KEY --skip-simulation
190191
# mantle mainnet
191192
forge script script/vaultV2/DeployProxyVault.s.sol -f $RPC_URL_MANTLE --verifier-url https://api.mantlescan.xyz/api --broadcast --verify --etherscan-api-key $MANTLE_ETHERSCAN_API_KEY --skip-simulation
193+
# ethereum sepolia
194+
forge script script/vaultV2/DeployProxyVault.s.sol -f $RPC_URL_SEPOLIA --verifier-url https://api-sepolia.etherscan.io/api --broadcast --verify --etherscan-api-key $ETHERSCAN_API_KEY
195+
# ethereum mainnet
196+
forge script script/vaultV2/DeployProxyVault.s.sol -f $RPC_URL_ETHEREUM --verifier-url https://api.etherscan.io/api --broadcast --verify --etherscan-api-key $ETHERSCAN_API_KEY
197+
# avax fuji
198+
forge script script/vaultV2/DeployProxyVault.s.sol -f $RPC_URL_FUJI --broadcast --verifier-url 'https://api.routescan.io/v2/network/testnet/evm/43113/etherscan' --verify --etherscan-api-key "verifyContract"
199+
# avax mainnet
200+
forge script script/vaultV2/DeployProxyVault.s.sol -f $RPC_URL_AVAX --broadcast --verifier-url 'https://api.routescan.io/v2/network/mainnet/evm/43114/etherscan' --verify --etherscan-api-key "verifyContract"
192201
```
193202

194203
### Deploy new implement command:

config/deploy-vault.json

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,18 @@
4747
"proxyAdmin": "0xD756A519b8f7B9609Ea61d44804dE79931A0c547",
4848
"usdc": "0xAcab8129E2cE587fD203FD770ec9ECAFA2C88080",
4949
"vault": "0x3CAA46F94610BDa1C60267a364d2E154E677BdF9"
50+
},
51+
"sepolia": {
52+
"multiSig": "0xFae9CAF31EeD9f6480262808920dA03eb7f76E7E",
53+
"proxyAdmin": "0x91243E4876D6c39554987cfD9d022Abe60252652",
54+
"usdc": "0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238",
55+
"vault": "0x1A26FBE7A6Dc6c12b8E10CD703b0c520Ee996B15"
56+
},
57+
"avalanchefuji": {
58+
"multiSig": "0xFae9CAF31EeD9f6480262808920dA03eb7f76E7E",
59+
"proxyAdmin": "0x694713fBeE0D942923D25E72948ed92d08a3cDf2",
60+
"usdc": "0x5425890298aed601595a70ab815c96711a31bc65",
61+
"vault": "0x695Cb2ab1b2Db899F8B653B36eF865D13E6809a8"
5062
}
5163
},
5264
"qa": {
@@ -97,6 +109,18 @@
97109
"proxyAdmin": "0xEcb4abe96113c9caA3204e96C63C5377D02cb636",
98110
"usdc": "0xAcab8129E2cE587fD203FD770ec9ECAFA2C88080",
99111
"vault": "0x08a17582C4cCe303C37439341c6E6138Fb62304d"
112+
},
113+
"sepolia": {
114+
"multiSig": "0xc1465019B3e04602a50d34A558c6630Ac50f8fbb",
115+
"proxyAdmin": "0x0FF2537214614d82335B1621a0bEBECA41045662",
116+
"usdc": "0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238",
117+
"vault": "0xd5164A5a83c64E59F842bC091E06614b84D95fF5"
118+
},
119+
"avalanchefuji": {
120+
"multiSig": "0xc1465019B3e04602a50d34A558c6630Ac50f8fbb",
121+
"proxyAdmin": "0x4EC52Fc0a8A501D0F67B27dc51d46D175c6AA8aB",
122+
"usdc": "0x5425890298aed601595a70ab815c96711a31bc65",
123+
"vault": "0xb960E6329a75716ea11090B6B42580d3004dab77"
100124
}
101125
},
102126
"staging": {
@@ -147,6 +171,18 @@
147171
"proxyAdmin": "0xdc7348975aE9334DbdcB944DDa9163Ba8406a0ec",
148172
"usdc": "0xAcab8129E2cE587fD203FD770ec9ECAFA2C88080",
149173
"vault": "0xfb0E5f3D16758984E668A3d76f0963710E775503"
174+
},
175+
"sepolia": {
176+
"multiSig": "0x7D1e7BeAd9fBb72e35Dc8E6d1966c2e57DbDA3F0",
177+
"proxyAdmin": "0xa3BB1F1Aa238AF13528965f069fD0a4F1595d8e9",
178+
"usdc": "0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238",
179+
"vault": "0x0EaC556c0C2321BA25b9DC01e4e3c95aD5CDCd2f"
180+
},
181+
"avalanchefuji": {
182+
"multiSig": "0x7D1e7BeAd9fBb72e35Dc8E6d1966c2e57DbDA3F0",
183+
"proxyAdmin": "0xB483f9D0bD47371B54087983214887c3Be103b92",
184+
"usdc": "0x5425890298aed601595a70ab815c96711a31bc65",
185+
"vault": "0xAB6c8F6245B67421302AAe30AcEB10E00c30F463"
150186
}
151187
},
152188
"mainnet": {
@@ -179,6 +215,18 @@
179215
"proxyAdmin": "0xA2eA0a58b083c492AdC91A687FAc8B53AdB7c0Fd",
180216
"usdc": "0x09bc4e0d864854c6afb6eb9a9cdf58ac190d0df9",
181217
"vault": "0x816f722424B49Cf1275cc86DA9840Fbd5a6167e9"
218+
},
219+
"ethereum": {
220+
"multiSig": "0x4e834Ca9310d7710a409638A7aa70CB22F141Df3",
221+
"proxyAdmin": "0xA2eA0a58b083c492AdC91A687FAc8B53AdB7c0Fd",
222+
"usdc": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
223+
"vault": "0x816f722424B49Cf1275cc86DA9840Fbd5a6167e9"
224+
},
225+
"avalanche": {
226+
"multiSig": "0x4e834Ca9310d7710a409638A7aa70CB22F141Df3",
227+
"proxyAdmin": "0xA2eA0a58b083c492AdC91A687FAc8B53AdB7c0Fd",
228+
"usdc": "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E",
229+
"vault": "0x816f722424B49Cf1275cc86DA9840Fbd5a6167e9"
182230
}
183231
}
184232
}

foundry.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
[profile.default]
2-
solc_version = "0.8.19"
2+
solc_version = "0.8.26"
3+
evm_version = "cancun"
34
src = 'src'
45
out = 'out'
56
libs = ['lib']

src/Ledger.sol

Lines changed: 67 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import "./library/typesHelper/AccountTypeHelper.sol";
1414
import "./library/typesHelper/AccountTypePositionHelper.sol";
1515
import "./library/typesHelper/SafeCastHelper.sol";
1616
import "./interface/ILedgerImplA.sol";
17+
import "./interface/ILedgerImplB.sol";
1718

1819
/// @title Ledger contract
1920
/// @author Orderly_Rubick
@@ -29,6 +30,7 @@ contract Ledger is ILedger, OwnableUpgradeable, LedgerDataLayout {
2930
struct LedgerStorage {
3031
// Because of EIP170 size limit, the implementation should be split to impl contracts
3132
address ledgerImplA;
33+
address ledgerImplB;
3234
}
3335

3436
// keccak256(abi.encode(uint256(keccak256("orderly.Ledger")) - 1)) & ~bytes32(uint256(0xff))
@@ -72,6 +74,12 @@ contract Ledger is ILedger, OwnableUpgradeable, LedgerDataLayout {
7274
_getLedgerStorage().ledgerImplA = _ledgerImplA;
7375
}
7476

77+
/// @notice Set the address of ledgerImplB contract
78+
function setLedgerImplB(address _ledgerImplB) external override onlyOwner nonZeroAddress(_ledgerImplB) {
79+
emit ChangeLedgerImplB(_getLedgerStorage().ledgerImplB, _ledgerImplB);
80+
_getLedgerStorage().ledgerImplB = _ledgerImplB;
81+
}
82+
7583
/// @notice Set the address of operatorManager contract
7684
/// @param _operatorManagerAddress new operatorManagerAddress
7785
function setOperatorManagerAddress(address _operatorManagerAddress)
@@ -216,83 +224,126 @@ contract Ledger is ILedger, OwnableUpgradeable, LedgerDataLayout {
216224
/// @notice The cross chain manager will call this function to notify the deposit event to the Ledger contract
217225
/// @param data account deposit data
218226
function accountDeposit(AccountTypes.AccountDeposit calldata data) external override onlyCrossChainManager {
219-
_delegatecall(abi.encodeWithSelector(ILedgerImplA.accountDeposit.selector, data));
227+
_delegatecall(
228+
abi.encodeWithSelector(ILedgerImplA.accountDeposit.selector, data), _getLedgerStorage().ledgerImplA
229+
);
220230
}
221231

222232
function executeProcessValidatedFutures(PerpTypes.FuturesTradeUpload calldata trade)
223233
external
224234
override
225235
onlyOperatorManager
226236
{
227-
_delegatecall(abi.encodeWithSelector(ILedgerImplA.executeProcessValidatedFutures.selector, trade));
237+
_delegatecall(
238+
abi.encodeWithSelector(ILedgerImplA.executeProcessValidatedFutures.selector, trade),
239+
_getLedgerStorage().ledgerImplA
240+
);
241+
}
242+
243+
function executeProcessValidatedFuturesBatch(PerpTypes.FuturesTradeUpload[] calldata trades)
244+
external
245+
override
246+
onlyOperatorManager
247+
{
248+
_delegatecall(
249+
abi.encodeWithSelector(ILedgerImplB.executeProcessValidatedFuturesBatch.selector, trades),
250+
_getLedgerStorage().ledgerImplB
251+
);
228252
}
229253

230254
function executeWithdrawAction(EventTypes.WithdrawData calldata withdraw, uint64 eventId)
231255
external
232256
override
233257
onlyOperatorManager
234258
{
235-
_delegatecall(abi.encodeWithSelector(ILedgerImplA.executeWithdrawAction.selector, withdraw, eventId));
259+
_delegatecall(
260+
abi.encodeWithSelector(ILedgerImplA.executeWithdrawAction.selector, withdraw, eventId),
261+
_getLedgerStorage().ledgerImplA
262+
);
236263
}
237264

238265
function accountWithdrawFail(AccountTypes.AccountWithdraw memory withdraw) external override onlyOwner {
239-
_delegatecall(abi.encodeWithSelector(ILedgerImplA.accountWithdrawFail.selector, withdraw));
266+
_delegatecall(
267+
abi.encodeWithSelector(ILedgerImplA.accountWithdrawFail.selector, withdraw), _getLedgerStorage().ledgerImplA
268+
);
240269
}
241270

242271
function accountWithDrawFinish(AccountTypes.AccountWithdraw calldata withdraw)
243272
external
244273
override
245274
onlyCrossChainManager
246275
{
247-
_delegatecall(abi.encodeWithSelector(ILedgerImplA.accountWithDrawFinish.selector, withdraw));
276+
_delegatecall(
277+
abi.encodeWithSelector(ILedgerImplA.accountWithDrawFinish.selector, withdraw),
278+
_getLedgerStorage().ledgerImplA
279+
);
248280
}
249281

250282
function executeSettlement(EventTypes.Settlement calldata settlement, uint64 eventId)
251283
external
252284
override
253285
onlyOperatorManager
254286
{
255-
_delegatecall(abi.encodeWithSelector(ILedgerImplA.executeSettlement.selector, settlement, eventId));
287+
_delegatecall(
288+
abi.encodeWithSelector(ILedgerImplA.executeSettlement.selector, settlement, eventId),
289+
_getLedgerStorage().ledgerImplA
290+
);
256291
}
257292

258293
function executeLiquidation(EventTypes.Liquidation calldata liquidation, uint64 eventId)
259294
external
260295
override
261296
onlyOperatorManager
262297
{
263-
_delegatecall(abi.encodeWithSelector(ILedgerImplA.executeLiquidation.selector, liquidation, eventId));
298+
_delegatecall(
299+
abi.encodeWithSelector(ILedgerImplA.executeLiquidation.selector, liquidation, eventId),
300+
_getLedgerStorage().ledgerImplA
301+
);
264302
}
265303

266304
function executeLiquidationV2(EventTypes.LiquidationV2 calldata liquidation, uint64 eventId)
267305
external
268306
override
269307
onlyOperatorManager
270308
{
271-
_delegatecall(abi.encodeWithSelector(ILedgerImplA.executeLiquidationV2.selector, liquidation, eventId));
309+
_delegatecall(
310+
abi.encodeWithSelector(ILedgerImplA.executeLiquidationV2.selector, liquidation, eventId),
311+
_getLedgerStorage().ledgerImplA
312+
);
272313
}
273314

274315
function executeAdl(EventTypes.Adl calldata adl, uint64 eventId) external override onlyOperatorManager {
275-
_delegatecall(abi.encodeWithSelector(ILedgerImplA.executeAdl.selector, adl, eventId));
316+
_delegatecall(
317+
abi.encodeWithSelector(ILedgerImplA.executeAdl.selector, adl, eventId), _getLedgerStorage().ledgerImplA
318+
);
276319
}
277320

278321
function executeAdlV2(EventTypes.AdlV2 calldata adl, uint64 eventId) external override onlyOperatorManager {
279-
_delegatecall(abi.encodeWithSelector(ILedgerImplA.executeAdlV2.selector, adl, eventId));
322+
_delegatecall(
323+
abi.encodeWithSelector(ILedgerImplA.executeAdlV2.selector, adl, eventId), _getLedgerStorage().ledgerImplA
324+
);
280325
}
281326

282327
function executeFeeDistribution(EventTypes.FeeDistribution calldata feeDistribution, uint64 eventId)
283328
external
284329
override
285330
onlyOperatorManager
286331
{
287-
_delegatecall(abi.encodeWithSelector(ILedgerImplA.executeFeeDistribution.selector, feeDistribution, eventId));
332+
_delegatecall(
333+
abi.encodeWithSelector(ILedgerImplA.executeFeeDistribution.selector, feeDistribution, eventId),
334+
_getLedgerStorage().ledgerImplA
335+
);
288336
}
289337

290338
function executeDelegateSigner(EventTypes.DelegateSigner calldata delegateSigner, uint64 eventId)
291339
external
292340
override
293341
onlyOperatorManager
294342
{
295-
_delegatecall(abi.encodeWithSelector(ILedgerImplA.executeDelegateSigner.selector, delegateSigner, eventId));
343+
_delegatecall(
344+
abi.encodeWithSelector(ILedgerImplA.executeDelegateSigner.selector, delegateSigner, eventId),
345+
_getLedgerStorage().ledgerImplA
346+
);
296347
}
297348

298349
function executeDelegateWithdrawAction(EventTypes.WithdrawData calldata delegateWithdraw, uint64 eventId)
@@ -301,7 +352,8 @@ contract Ledger is ILedger, OwnableUpgradeable, LedgerDataLayout {
301352
onlyOperatorManager
302353
{
303354
_delegatecall(
304-
abi.encodeWithSelector(ILedgerImplA.executeDelegateWithdrawAction.selector, delegateWithdraw, eventId)
355+
abi.encodeWithSelector(ILedgerImplA.executeDelegateWithdrawAction.selector, delegateWithdraw, eventId),
356+
_getLedgerStorage().ledgerImplA
305357
);
306358
}
307359

@@ -364,8 +416,8 @@ contract Ledger is ILedger, OwnableUpgradeable, LedgerDataLayout {
364416
}
365417

366418
// inner function for delegatecall
367-
function _delegatecall(bytes memory data) private {
368-
(bool success, bytes memory returnData) = _getLedgerStorage().ledgerImplA.delegatecall(data);
419+
function _delegatecall(bytes memory data, address impl) private {
420+
(bool success, bytes memory returnData) = impl.delegatecall(data);
369421
if (!success) {
370422
if (returnData.length > 0) {
371423
assembly {

0 commit comments

Comments
 (0)