Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | 1x 1x 1x 1x 1x 1x 1x 2x 2x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 2x 2x 2x 1x 2x 2x 2x 1x 1x 2x 2x 1x 1x 1x 1x | import { ContractConfig, ProjectConfig } from "../types";
export class DeployScriptGen {
constructor() { }
gen(projectConfig: ProjectConfig): string {
// Start building the script
let script = `// SPDX-License-Identifier: UNLICENSED\n`;
script += `pragma solidity ^0.8.13;\n\n`;
script += `import "forge-std/Script.sol";\n`;
script += `import "forge-std/console.sol";\n`;
console.log(Object.keys(projectConfig.contracts));
Object.values(projectConfig.contracts).forEach((value: string | ContractConfig) => {
if (typeof value === "string") {
script += `import "./${value.replace(".json", ".sol")}";\n`;
}
});
script += `import "@patchwork/PatchworkProtocol.sol";\n`;
// Assuming the first contract in the config is the main deployer contract
const mainContractName = projectConfig.name.replace(/\s/g, "");
script += `\ncontract ${mainContractName}Deploy is Script {\n`;
script += ` function run() external {\n`;
script += ` address ownerAddress = vm.envAddress("OWNER");\n`;
script += ` address ppAddress = vm.envAddress("PATCHWORK_PROTOCOL");\n`
script += ` console.log("Deployer starting");\n`;
script += ` console.log("owner: ", ownerAddress);\n`;
script += ` console.log("patchwork protocol: ", ppAddress);\n\n`;
script += ` vm.startBroadcast();\n`;
script += ` PatchworkProtocol pp = PatchworkProtocol(ppAddress);\n`;
// Iterate through each scope in the project configuration
for (const scopeConfig of projectConfig.scopes) {
script += ` pp.claimScope("${scopeConfig.name}");\n`;
script += ` pp.setScopeRules("${scopeConfig.name}", false, false, true);\n`;
}
// deploy each contract
Object.entries(projectConfig.contracts).forEach(([key, value]) => {
const contractName = key;
if (typeof value === "string") {
script += ` ${contractName} ${contractName.toLowerCase()} = new ${contractName}(ppAddress, ownerAddress);\n`;
} else E{
// Handle ContractConfig logic here
}
});
// register fragments
Object.entries(projectConfig.contracts).forEach(([key, value]) => {
const contractName = key;
if (projectConfig.contractRelations !== undefined) {
for (const fragment of projectConfig.contractRelations[key]?.fragments || []) {
script += ` ${contractName.toLowerCase()}.registerFragment(${fragment.toLowerCase()});\n`;
}
}
});
// whitelist
Object.entries(projectConfig.contracts).forEach(([key, value]) => {
const contractName = key;
// TODO FIX - load contract config to get scope name
// Additional logic for whitelisting if applicable
//if (scopeConfig.whitelist) {
script += ` pp.addWhitelist("${projectConfig.scopes[0].name}", address(${contractName.toLowerCase()}));\n`;
//}
});
script += ` vm.stopBroadcast();\n`;
script += ` }\n`;
script += `}\n`;
return script;
}
} |