Skip to content

Commit 947d6be

Browse files
feat: add zksync (aave-dao#24)
* feat: add zksync * chore: fix comment
1 parent 0731cd5 commit 947d6be

File tree

9 files changed

+64
-14
lines changed

9 files changed

+64
-14
lines changed

Makefile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,5 @@ git-diff :
3131
deploy-ledger :; FOUNDRY_PROFILE=${chain} forge script $(if $(filter zksync,${chain}),--zksync) ${contract} --rpc-url ${chain} $(if ${dry},--sender 0x25F2226B597E8F9514B3F68F00f494cF4f286491 -vvvv, --ledger --mnemonic-indexes ${MNEMONIC_INDEX} --sender ${LEDGER_SENDER} --verify -vvvv --slow --broadcast)
3232
deploy-pk :; FOUNDRY_PROFILE=${chain} forge script $(if $(filter zksync,${chain}),--zksync) ${contract} --rpc-url ${chain} $(if ${dry},--sender 0x25F2226B597E8F9514B3F68F00f494cF4f286491 -vvvv, --private-key ${PRIVATE_KEY} --verify -vvvv --slow --broadcast)
3333

34-
run-script:; FOUNDRY_PROFILE=${network} forge script ${contract} --rpc-url ${network} --sig "run(bool, bool, bool)" ${broadcast} ${generate_diff} ${skip_timelock} -vv
34+
35+
run-script:; FOUNDRY_PROFILE=${network} forge script $(if $(filter zksync,${network}),--zksync) ${contract} --rpc-url ${network} --sig "run(bool, bool, bool)" ${broadcast} ${generate_diff} ${skip_timelock} -vv

foundry.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ evm_version = 'shanghai'
2424
[profile.zksync.zksync]
2525
compile = true
2626
fallback_oz = true
27-
mode = '3'
28-
zksolc = '1.5.3'
27+
optimizer_mode = 'z'
28+
zksolc = '1.5.7'
2929

3030
[rpc_endpoints]
3131
mainnet = "${RPC_MAINNET}"

generator/generator.ts

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,10 @@ async function askBeforeWrite(options: Options, path: string, content: string) {
6969
export async function writeFiles(options: Options, {jsonConfig, payloads}: Files) {
7070
const baseName = generateFolderName(options);
7171
const baseFolder = path.join(process.cwd(), 'src/contracts/updates/', baseName);
72+
const zkSyncBaseFolder = path.join(process.cwd(), 'zksync/src/contracts/updates', baseName);
73+
const isZkSync = options.pools.includes('AaveV3ZkSync');
7274

73-
if (fs.existsSync(baseFolder)) {
75+
if (fs.existsSync(baseFolder) || (isZkSync && fs.existsSync(zkSyncBaseFolder))) {
7476
if (!options.force && fs.existsSync(baseFolder)) {
7577
const force = await confirm({
7678
message: 'A proposal already exists at that location, do you want to continue?',
@@ -79,16 +81,25 @@ export async function writeFiles(options: Options, {jsonConfig, payloads}: Files
7981
if (!force) return;
8082
}
8183
} else {
82-
fs.mkdirSync(baseFolder, {recursive: true});
84+
if (isZkSync) {
85+
fs.mkdirSync(zkSyncBaseFolder, {recursive: true});
86+
}
87+
if (!isZkSync || options.pools.length > 1) {
88+
fs.mkdirSync(baseFolder, {recursive: true});
89+
}
8390
}
8491

8592
// write config
86-
await askBeforeWrite(options, path.join(baseFolder, 'config.ts'), jsonConfig);
93+
await askBeforeWrite(
94+
options,
95+
path.join(isZkSync ? zkSyncBaseFolder : baseFolder, 'config.ts'),
96+
jsonConfig
97+
);
8798

88-
for (const {payload, contractName} of payloads) {
99+
for (const {pool, payload, contractName} of payloads) {
89100
await askBeforeWrite(
90101
options,
91-
path.join(baseFolder, `${contractName}.sol`),
102+
path.join(pool === 'AaveV3ZkSync' ? zkSyncBaseFolder : baseFolder, `${contractName}.sol`),
92103
payload,
93104
);
94105
}

generator/templates/proposal.template.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ export const proposalTemplate = (
2424
* @title ${title || 'TODO'}
2525
* @author ${author || 'TODO'}
2626
* - discussion: ${discussion || 'TODO'}
27-
* - deploy-command: make run-script contract=src/contracts/updates/${folderName}/${contractName}.sol:${contractName} network=${getChainAlias(
27+
* - deploy-command: make run-script contract=${chain == 'ZkSync' ? 'zksync/' : ''}src/contracts/updates/${folderName}/${contractName}.sol:${contractName} network=${getChainAlias(
2828
chain
2929
)} broadcast=false generate_diff=true skip_timelock=false
3030
*/

generator/types.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ export const V3_POOLS = [
1919
'AaveV3Base',
2020
'AaveV3Gnosis',
2121
'AaveV3Scroll',
22-
'AaveV3BNB'
22+
'AaveV3BNB',
23+
'AaveV3ZkSync'
2324
] as const satisfies readonly (keyof typeof addressBook)[];
2425

2526
export const POOLS = [

generator/utils/importsResolver.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ function generateRiskStewardImport(code: string) {
4141
const match = code.match(/RiskStewards(\w+)/);
4242

4343
if (match) {
44-
imports = `import {RiskStewards${match[1]}} from '../../../../scripts/networks/RiskStewards${match[1]}.s.sol';\n`;
44+
imports = `import {RiskStewards${match[1]}} from '${match[1] == 'ZkSync' ? '../' : ''}../../../../scripts/networks/RiskStewards${match[1]}.s.sol';\n`;
4545
if (findMatch(code, 'IRiskSteward')) {
4646
imports += `import {IRiskSteward${findMatch(code, 'IPriceCapAdapter') ? ', IPriceCapAdapter': ''}} from '../../../interfaces/IRiskSteward.sol';\n`;
4747
}

scripts/RiskStewardsBase.s.sol

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -125,9 +125,8 @@ abstract contract RiskStewardsBase is ProtocolV3TestBase {
125125
vm.warp(block.timestamp + uint256(maxTimelock) + 1);
126126
}
127127

128-
bool rateUpdatesPresent = rateUpdates.length != 0;
129128
if (generateDiffReport)
130-
createConfigurationSnapshot(pre, POOL, true, rateUpdatesPresent, false, false);
129+
createConfigurationSnapshot(pre, POOL, true, true, false, false);
131130

132131
if (capUpdates.length != 0) {
133132
callDatas[txCount] = abi.encodeWithSelector(IRiskSteward.updateCaps.selector, capUpdates);
@@ -175,7 +174,7 @@ abstract contract RiskStewardsBase is ProtocolV3TestBase {
175174
}
176175

177176
if (generateDiffReport) {
178-
createConfigurationSnapshot(post, POOL, true, rateUpdatesPresent, false, false);
177+
createConfigurationSnapshot(post, POOL, true, true, false, false);
179178
diffReports(pre, post);
180179
}
181180

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity ^0.8.0;
3+
4+
import {AaveV3ZkSync} from 'aave-address-book/AaveV3ZkSync.sol';
5+
import {RiskStewardsBase} from '../RiskStewardsBase.s.sol';
6+
7+
abstract contract RiskStewardsZkSync is RiskStewardsBase {
8+
constructor()
9+
RiskStewardsBase(address(AaveV3ZkSync.POOL), AaveV3ZkSync.RISK_STEWARD)
10+
{}
11+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity ^0.8.0;
3+
4+
import {AaveV3ZkSyncAssets} from 'aave-address-book/AaveV3ZkSync.sol';
5+
import {IAaveV3ConfigEngine as IEngine} from 'aave-v3-origin/src/contracts/extensions/v3-config-engine/IAaveV3ConfigEngine.sol';
6+
import {EngineFlags} from 'aave-v3-origin/src/contracts/extensions/v3-config-engine/EngineFlags.sol';
7+
import {RiskStewardsZkSync} from '../../../../scripts/networks/RiskStewardsZkSync.s.sol';
8+
9+
// make run-script network=zksync contract=zksync/src/contracts/examples/ZkSyncExample.sol broadcast=false generate_diff=true skip_timelock=false
10+
contract ZkSyncExample is RiskStewardsZkSync {
11+
/**
12+
* @return string name identifier used for the diff
13+
*/
14+
function name() public pure override returns (string memory) {
15+
return 'zksync_example';
16+
}
17+
18+
function capsUpdates() public pure override returns (IEngine.CapsUpdate[] memory) {
19+
IEngine.CapsUpdate[] memory capUpdates = new IEngine.CapsUpdate[](1);
20+
capUpdates[0] = IEngine.CapsUpdate({
21+
asset: AaveV3ZkSyncAssets.USDC_UNDERLYING,
22+
supplyCap: 2_500_000,
23+
borrowCap: EngineFlags.KEEP_CURRENT
24+
});
25+
return capUpdates;
26+
}
27+
}

0 commit comments

Comments
 (0)