@diamondslab/diamonds 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +618 -0
- package/diamonds/README.md +3 -0
- package/dist/core/CallbackManager.d.ts +13 -0
- package/dist/core/CallbackManager.d.ts.map +1 -0
- package/dist/core/CallbackManager.js +95 -0
- package/dist/core/CallbackManager.js.map +1 -0
- package/dist/core/DeploymentManager.d.ts +10 -0
- package/dist/core/DeploymentManager.d.ts.map +1 -0
- package/dist/core/DeploymentManager.js +50 -0
- package/dist/core/DeploymentManager.js.map +1 -0
- package/dist/core/Diamond.d.ts +58 -0
- package/dist/core/Diamond.d.ts.map +1 -0
- package/dist/core/Diamond.js +146 -0
- package/dist/core/Diamond.js.map +1 -0
- package/dist/core/DiamondDeployer.d.ts +10 -0
- package/dist/core/DiamondDeployer.d.ts.map +1 -0
- package/dist/core/DiamondDeployer.js +33 -0
- package/dist/core/DiamondDeployer.js.map +1 -0
- package/dist/core/index.d.ts +5 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +12 -0
- package/dist/core/index.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/repositories/DBDeploymentRepository.d.ts +1 -0
- package/dist/repositories/DBDeploymentRepository.d.ts.map +1 -0
- package/dist/repositories/DBDeploymentRepository.js +20 -0
- package/dist/repositories/DBDeploymentRepository.js.map +1 -0
- package/dist/repositories/DeploymentRepository.d.ts +8 -0
- package/dist/repositories/DeploymentRepository.d.ts.map +1 -0
- package/dist/repositories/DeploymentRepository.js +7 -0
- package/dist/repositories/DeploymentRepository.js.map +1 -0
- package/dist/repositories/FileDeploymentRepository.d.ts +18 -0
- package/dist/repositories/FileDeploymentRepository.d.ts.map +1 -0
- package/dist/repositories/FileDeploymentRepository.js +58 -0
- package/dist/repositories/FileDeploymentRepository.js.map +1 -0
- package/dist/repositories/databaseHandler.d.ts +1 -0
- package/dist/repositories/databaseHandler.d.ts.map +1 -0
- package/dist/repositories/databaseHandler.js +13 -0
- package/dist/repositories/databaseHandler.js.map +1 -0
- package/dist/repositories/index.d.ts +4 -0
- package/dist/repositories/index.d.ts.map +1 -0
- package/dist/repositories/index.js +20 -0
- package/dist/repositories/index.js.map +1 -0
- package/dist/repositories/jsonFileHandler.d.ts +81 -0
- package/dist/repositories/jsonFileHandler.d.ts.map +1 -0
- package/dist/repositories/jsonFileHandler.js +223 -0
- package/dist/repositories/jsonFileHandler.js.map +1 -0
- package/dist/repositories/prismaDBHandler.d.ts +1 -0
- package/dist/repositories/prismaDBHandler.d.ts.map +1 -0
- package/dist/repositories/prismaDBHandler.js +11 -0
- package/dist/repositories/prismaDBHandler.js.map +1 -0
- package/dist/schemas/DeploymentSchema.d.ts +309 -0
- package/dist/schemas/DeploymentSchema.d.ts.map +1 -0
- package/dist/schemas/DeploymentSchema.js +56 -0
- package/dist/schemas/DeploymentSchema.js.map +1 -0
- package/dist/schemas/index.d.ts +2 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +18 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/strategies/BaseDeploymentStrategy.d.ts +41 -0
- package/dist/strategies/BaseDeploymentStrategy.d.ts.map +1 -0
- package/dist/strategies/BaseDeploymentStrategy.js +545 -0
- package/dist/strategies/BaseDeploymentStrategy.js.map +1 -0
- package/dist/strategies/DeploymentStrategy.d.ts +19 -0
- package/dist/strategies/DeploymentStrategy.d.ts.map +1 -0
- package/dist/strategies/DeploymentStrategy.js +3 -0
- package/dist/strategies/DeploymentStrategy.js.map +1 -0
- package/dist/strategies/LocalDeploymentStrategy.d.ts +4 -0
- package/dist/strategies/LocalDeploymentStrategy.d.ts.map +1 -0
- package/dist/strategies/LocalDeploymentStrategy.js +8 -0
- package/dist/strategies/LocalDeploymentStrategy.js.map +1 -0
- package/dist/strategies/OZDefenderDeploymentStrategy.d.ts +62 -0
- package/dist/strategies/OZDefenderDeploymentStrategy.d.ts.map +1 -0
- package/dist/strategies/OZDefenderDeploymentStrategy.js +757 -0
- package/dist/strategies/OZDefenderDeploymentStrategy.js.map +1 -0
- package/dist/strategies/RPCDeploymentStrategy.d.ts +139 -0
- package/dist/strategies/RPCDeploymentStrategy.d.ts.map +1 -0
- package/dist/strategies/RPCDeploymentStrategy.js +710 -0
- package/dist/strategies/RPCDeploymentStrategy.js.map +1 -0
- package/dist/strategies/index.d.ts +6 -0
- package/dist/strategies/index.d.ts.map +1 -0
- package/dist/strategies/index.js +12 -0
- package/dist/strategies/index.js.map +1 -0
- package/dist/types/config.d.ts +26 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +3 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/defender.d.ts +22 -0
- package/dist/types/defender.d.ts.map +1 -0
- package/dist/types/defender.js +3 -0
- package/dist/types/defender.js.map +1 -0
- package/dist/types/deployments.d.ts +71 -0
- package/dist/types/deployments.d.ts.map +1 -0
- package/dist/types/deployments.js +20 -0
- package/dist/types/deployments.js.map +1 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +21 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/rpc.d.ts +35 -0
- package/dist/types/rpc.d.ts.map +1 -0
- package/dist/types/rpc.js +3 -0
- package/dist/types/rpc.js.map +1 -0
- package/dist/utils/common.d.ts +20 -0
- package/dist/utils/common.d.ts.map +1 -0
- package/dist/utils/common.js +45 -0
- package/dist/utils/common.js.map +1 -0
- package/dist/utils/configurationResolver.d.ts +30 -0
- package/dist/utils/configurationResolver.d.ts.map +1 -0
- package/dist/utils/configurationResolver.js +151 -0
- package/dist/utils/configurationResolver.js.map +1 -0
- package/dist/utils/contractMapping.d.ts +29 -0
- package/dist/utils/contractMapping.d.ts.map +1 -0
- package/dist/utils/contractMapping.js +224 -0
- package/dist/utils/contractMapping.js.map +1 -0
- package/dist/utils/defenderClients.d.ts +5 -0
- package/dist/utils/defenderClients.d.ts.map +1 -0
- package/dist/utils/defenderClients.js +21 -0
- package/dist/utils/defenderClients.js.map +1 -0
- package/dist/utils/defenderStore.d.ts +14 -0
- package/dist/utils/defenderStore.d.ts.map +1 -0
- package/dist/utils/defenderStore.js +92 -0
- package/dist/utils/defenderStore.js.map +1 -0
- package/dist/utils/diamondAbiGenerator.d.ts +113 -0
- package/dist/utils/diamondAbiGenerator.d.ts.map +1 -0
- package/dist/utils/diamondAbiGenerator.js +415 -0
- package/dist/utils/diamondAbiGenerator.js.map +1 -0
- package/dist/utils/diffDeployedFacets.d.ts +26 -0
- package/dist/utils/diffDeployedFacets.d.ts.map +1 -0
- package/dist/utils/diffDeployedFacets.js +106 -0
- package/dist/utils/diffDeployedFacets.js.map +1 -0
- package/dist/utils/index.d.ts +16 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +35 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/loupe.d.ts +44 -0
- package/dist/utils/loupe.d.ts.map +1 -0
- package/dist/utils/loupe.js +128 -0
- package/dist/utils/loupe.js.map +1 -0
- package/dist/utils/rpcStore.d.ts +36 -0
- package/dist/utils/rpcStore.d.ts.map +1 -0
- package/dist/utils/rpcStore.js +166 -0
- package/dist/utils/rpcStore.js.map +1 -0
- package/dist/utils/signer.d.ts +36 -0
- package/dist/utils/signer.d.ts.map +1 -0
- package/dist/utils/signer.js +91 -0
- package/dist/utils/signer.js.map +1 -0
- package/dist/utils/txlogging.d.ts +13 -0
- package/dist/utils/txlogging.d.ts.map +1 -0
- package/dist/utils/txlogging.js +87 -0
- package/dist/utils/txlogging.js.map +1 -0
- package/dist/utils/workspaceSetup.d.ts +32 -0
- package/dist/utils/workspaceSetup.d.ts.map +1 -0
- package/dist/utils/workspaceSetup.js +311 -0
- package/dist/utils/workspaceSetup.js.map +1 -0
- package/docs/DIAMOND_ABI_CONFIGURATION_SUMMARY.md +40 -0
- package/docs/DIAMOND_ABI_GENERATION.md +220 -0
- package/docs/DIAMOND_ABI_GENERATOR_EXAMPLES.md +1204 -0
- package/docs/DIAMOND_ABI_GENERATOR_IMPLEMENTATION.md +947 -0
- package/docs/DIAMOND_ABI_GENERATOR_QUICK_REFERENCE.md +336 -0
- package/docs/README-DEFENDER.md +394 -0
- package/docs/README_DIAMOND_ABI_GENERATOR.md +303 -0
- package/docs/ROADMAP.md +250 -0
- package/docs/assets/image.png +0 -0
- package/docs/defender-integration.md +451 -0
- package/docs/diamond_module-BaseStrategy_design-v2.uxf +247 -0
- package/docs/diamond_module-BaseStrategy_design.uxf +272 -0
- package/docs/monitoring-troubleshooting.md +556 -0
- package/docs/testing-guide.md +713 -0
- package/examples/Diamond_Config_and_Deployment_examples/diamonds/ProxyDiamond/callbacks/ERC20ProxyFacet.ts +31 -0
- package/examples/Diamond_Config_and_Deployment_examples/diamonds/ProxyDiamond/proxydiamond.config.json +27 -0
- package/examples/Local_Hardhat_Deployer_Script_example/LocalDiamondDeployer.ts +180 -0
- package/examples/OZ_Defender_Deployer_Script_example/OZDiamondDeployer.ts +107 -0
- package/examples/OZ_Defender_Deployer_Script_example/run-oz-deploy.ts +17 -0
- package/examples/Test_examples/ProxyDiamondDeployment.test.ts +202 -0
- package/examples/defender-deployment/.env.example +35 -0
- package/examples/defender-deployment/README.md +415 -0
- package/examples/defender-deployment/contracts/ExampleDiamond.sol +41 -0
- package/examples/defender-deployment/contracts/ExampleFacet1.sol +84 -0
- package/examples/defender-deployment/contracts/ExampleFacet2.sol +104 -0
- package/examples/defender-deployment/contracts/UpgradeFacet.sol +92 -0
- package/examples/defender-deployment/deploy-script.ts +170 -0
- package/examples/defender-deployment/diamond-config.json +36 -0
- package/examples/defender-deployment/upgrade-script.ts +237 -0
- package/examples/hardhat-diamonds-config.example.ts +41 -0
- package/package.json +228 -0
- package/src/core/CallbackManager.ts +70 -0
- package/src/core/DeploymentManager.ts +64 -0
- package/src/core/Diamond.ts +197 -0
- package/src/core/DiamondDeployer.ts +36 -0
- package/src/core/index.ts +4 -0
- package/src/index.ts +5 -0
- package/src/repositories/DBDeploymentRepository.ts +22 -0
- package/src/repositories/DeploymentRepository.ts +12 -0
- package/src/repositories/FileDeploymentRepository.ts +67 -0
- package/src/repositories/databaseHandler.ts +14 -0
- package/src/repositories/index.ts +4 -0
- package/src/repositories/jsonFileHandler.ts +252 -0
- package/src/repositories/prismaDBHandler.ts +10 -0
- package/src/schemas/DeploymentSchema.ts +71 -0
- package/src/schemas/index.ts +1 -0
- package/src/strategies/BaseDeploymentStrategy.ts +649 -0
- package/src/strategies/DeploymentStrategy.ts +25 -0
- package/src/strategies/LocalDeploymentStrategy.ts +5 -0
- package/src/strategies/OZDefenderDeploymentStrategy.ts +849 -0
- package/src/strategies/RPCDeploymentStrategy.ts +881 -0
- package/src/strategies/index.ts +5 -0
- package/src/types/config.ts +34 -0
- package/src/types/defender.ts +24 -0
- package/src/types/deployments.ts +102 -0
- package/src/types/index.ts +4 -0
- package/src/types/rpc.ts +37 -0
- package/src/utils/common.ts +54 -0
- package/src/utils/configurationResolver.ts +141 -0
- package/src/utils/contractMapping.ts +220 -0
- package/src/utils/defenderClients.ts +22 -0
- package/src/utils/defenderStore.ts +62 -0
- package/src/utils/diamondAbiGenerator.ts +523 -0
- package/src/utils/diffDeployedFacets.ts +131 -0
- package/src/utils/index.ts +15 -0
- package/src/utils/loupe.ts +159 -0
- package/src/utils/rpcStore.ts +152 -0
- package/src/utils/signer.ts +93 -0
- package/src/utils/txlogging.ts +97 -0
- package/src/utils/workspaceSetup.ts +315 -0
- package/test/README.md +136 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"txlogging.js","sourceRoot":"","sources":["../../src/utils/txlogging.ts"],"names":[],"mappings":";;;;;AAmBA,sBA6EC;AAhGD,iFAAiF;AACjF,gBAAgB;AAChB,yDAAyD;AACzD,iFAAiF;AACjF,2CAAyC;AACzC,kDAA0B;AAC1B,mCAAuH;AACvH,sDAA0B;AAG1B;;;;;;;;GAQG;AACI,KAAK,UAAU,KAAK,CACzB,EAA+B,EAC/B,WAAW,GAAG,EAAE,EAChB,aAA2C,EAAE;IAG7C,oDAAoD;IACpD,MAAM,QAAQ,GAAgB,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACjD,CAAC,YAAY,kBAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,kBAAS,CAAC,CAAC,CAAC,CAC9C,CAAC;IAEF,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;IAChC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IAED,gFAAgF;IAChF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,4BAA4B,WAAW,CAAC,CAAC,CAAC,MAAM,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC/F,OAAO,CAAC,KAAK,CAAC;QACZ,IAAI,EAAE,EAAE,CAAC,IAAI;QACb,MAAM,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;QACnD,KAAK,EAAE,OAAO,CAAC,WAAW;QAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,UAAU,EAAG,OAAe,CAAC,gBAAgB,IAAI,OAAO,CAAC,KAAK,IAAI,KAAK;QACvE,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE;QACtC,gBAAgB,EAAE,OAAO,CAAC,iBAAiB,CAAC,QAAQ,EAAE;QACtD,WAAW,EAAG,OAAe,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,KAAK;QAC3D,YAAY,EAAE,OAAO,CAAC,SAAS;QAC/B,eAAe,EAAE,OAAO,CAAC,aAAa;QACtC,WAAW,EAAE,OAAO,CAAC,WAAW;YAC9B,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,iBAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,cAAc,EAAE;YACnJ,CAAC,CAAC,KAAK;QACT,kBAAkB,EAAE,OAAO,CAAC,eAAe,IAAI,KAAK;QACpD,YAAY,EAAE,OAAO,CAAC,IAAI;QAE1B,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM;KAC5B,CAAC,CAAC;IAEH,gFAAgF;IAChF,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAChD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAQ,EAAE,GAAW,EAAE,EAAE;QAC7C,IAAI,MAAkC,CAAC;QACvC,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;gBACnC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;oBACpB,MAAM,GAAG,MAAM,CAAC;oBAChB,MAAM,CAAC,mCAAmC;gBAC5C,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,yBAAyB;YAC3B,CAAC;QACH,CAAC;QAED,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI;iBAC3B,GAAG,CAAC,CAAC,GAAY,EAAE,CAAS,EAAE,EAAE;gBAC/B,MAAM,GAAG,GAAG,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC5C,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC;YAC1C,CAAC,CAAC;iBACD,IAAI,CAAC,IAAI,CAAC,CAAC;YAEd,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,YAAY,CAAC,WAAW,GAAG,GAAG,CAAC;gBACrC,eAAK,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBAC7B,QAAQ,UAAU,EAAE,CACrB,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC,GAAG,iCAAiC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CACjF,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workspace setup utility for diamonds module
|
|
3
|
+
* Supports both standalone and hardhat-diamonds plugin configurations
|
|
4
|
+
*/
|
|
5
|
+
export declare class WorkspaceSetup {
|
|
6
|
+
/**
|
|
7
|
+
* Initialize a new diamond workspace with default structure
|
|
8
|
+
*/
|
|
9
|
+
static initializeWorkspace(diamondName: string, options?: {
|
|
10
|
+
useHardhatPlugin?: boolean;
|
|
11
|
+
contractsPath?: string;
|
|
12
|
+
deploymentsPath?: string;
|
|
13
|
+
createExampleConfig?: boolean;
|
|
14
|
+
}): Promise<void>;
|
|
15
|
+
/**
|
|
16
|
+
* Create a default diamond configuration file
|
|
17
|
+
*/
|
|
18
|
+
private static createDefaultConfig;
|
|
19
|
+
/**
|
|
20
|
+
* Create an example callback file
|
|
21
|
+
*/
|
|
22
|
+
private static createExampleCallback;
|
|
23
|
+
/**
|
|
24
|
+
* Create example contract files if they don't exist
|
|
25
|
+
*/
|
|
26
|
+
private static createExampleContracts;
|
|
27
|
+
/**
|
|
28
|
+
* Create hardhat config example for hardhat-diamonds plugin
|
|
29
|
+
*/
|
|
30
|
+
private static createHardhatConfigExample;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=workspaceSetup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspaceSetup.d.ts","sourceRoot":"","sources":["../../src/utils/workspaceSetup.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,qBAAa,cAAc;IAEzB;;OAEG;WACU,mBAAmB,CAC9B,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;QACP,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,mBAAmB,CAAC,EAAE,OAAO,CAAC;KAC1B,GACL,OAAO,CAAC,IAAI,CAAC;IA6DhB;;OAEG;mBACkB,mBAAmB;IAwCxC;;OAEG;mBACkB,qBAAqB;IAmD1C;;OAEG;mBACkB,sBAAsB;IAuE3C;;OAEG;mBACkB,0BAA0B;CA0DhD"}
|
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.WorkspaceSetup = void 0;
|
|
37
|
+
const fs = __importStar(require("fs-extra"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
/**
|
|
40
|
+
* Workspace setup utility for diamonds module
|
|
41
|
+
* Supports both standalone and hardhat-diamonds plugin configurations
|
|
42
|
+
*/
|
|
43
|
+
class WorkspaceSetup {
|
|
44
|
+
/**
|
|
45
|
+
* Initialize a new diamond workspace with default structure
|
|
46
|
+
*/
|
|
47
|
+
static async initializeWorkspace(diamondName, options = {}) {
|
|
48
|
+
const { useHardhatPlugin = false, contractsPath = './contracts', deploymentsPath = './diamonds', createExampleConfig = true } = options;
|
|
49
|
+
console.log(`Initializing ${diamondName} workspace...`);
|
|
50
|
+
// Create basic directory structure
|
|
51
|
+
const diamondsDir = path.join(process.cwd(), deploymentsPath);
|
|
52
|
+
const diamondDir = path.join(diamondsDir, diamondName);
|
|
53
|
+
const deploymentsDir = path.join(diamondDir, 'deployments');
|
|
54
|
+
const callbacksDir = path.join(diamondDir, 'callbacks');
|
|
55
|
+
const contractsDir = path.join(process.cwd(), contractsPath);
|
|
56
|
+
await fs.ensureDir(diamondsDir);
|
|
57
|
+
await fs.ensureDir(diamondDir);
|
|
58
|
+
await fs.ensureDir(deploymentsDir);
|
|
59
|
+
await fs.ensureDir(callbacksDir);
|
|
60
|
+
await fs.ensureDir(contractsDir);
|
|
61
|
+
console.log(`✅ Created directory structure for ${diamondName}`);
|
|
62
|
+
// Create default configuration file
|
|
63
|
+
if (createExampleConfig) {
|
|
64
|
+
await this.createDefaultConfig(diamondName, diamondDir);
|
|
65
|
+
}
|
|
66
|
+
// Create example callback file
|
|
67
|
+
await this.createExampleCallback(diamondName, callbacksDir);
|
|
68
|
+
// Create example contracts if they don't exist
|
|
69
|
+
await this.createExampleContracts(contractsDir);
|
|
70
|
+
// Create hardhat config extension example if requested
|
|
71
|
+
if (useHardhatPlugin) {
|
|
72
|
+
await this.createHardhatConfigExample(diamondName);
|
|
73
|
+
}
|
|
74
|
+
console.log(`✅ ${diamondName} workspace initialized successfully!`);
|
|
75
|
+
console.log(`
|
|
76
|
+
Configuration files created:
|
|
77
|
+
- Diamond config: ${path.join(diamondDir, `${diamondName.toLowerCase()}.config.json`)}
|
|
78
|
+
- Callbacks: ${path.join(callbacksDir, 'ExampleFacet.ts')}
|
|
79
|
+
- Contracts: ${contractsDir}
|
|
80
|
+
|
|
81
|
+
${useHardhatPlugin ?
|
|
82
|
+
'- Hardhat config example: ./hardhat-diamonds-config.example.ts' :
|
|
83
|
+
'- Using standalone mode (no hardhat plugin required)'}
|
|
84
|
+
|
|
85
|
+
Next steps:
|
|
86
|
+
1. Customize your diamond configuration in the config file
|
|
87
|
+
2. Add your facet contracts to ${contractsPath}
|
|
88
|
+
3. Implement callback functions in ${path.join(callbacksDir)}
|
|
89
|
+
4. Deploy using: DiamondDeployer with your chosen strategy
|
|
90
|
+
`);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Create a default diamond configuration file
|
|
94
|
+
*/
|
|
95
|
+
static async createDefaultConfig(diamondName, diamondDir) {
|
|
96
|
+
const configPath = path.join(diamondDir, `${diamondName.toLowerCase()}.config.json`);
|
|
97
|
+
if (await fs.pathExists(configPath)) {
|
|
98
|
+
console.log(`⚠️ Configuration file already exists: ${configPath}`);
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
const defaultConfig = {
|
|
102
|
+
protocolVersion: 0.0,
|
|
103
|
+
facets: {
|
|
104
|
+
DiamondCutFacet: {
|
|
105
|
+
priority: 10,
|
|
106
|
+
versions: {
|
|
107
|
+
"0.0": {}
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
DiamondLoupeFacet: {
|
|
111
|
+
priority: 20,
|
|
112
|
+
versions: {
|
|
113
|
+
"0.0": {}
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
ExampleFacet: {
|
|
117
|
+
priority: 30,
|
|
118
|
+
versions: {
|
|
119
|
+
"0.0": {
|
|
120
|
+
callbacks: ["exampleCallback"],
|
|
121
|
+
deployInit: "initialize()",
|
|
122
|
+
upgradeInit: "reinitialize()"
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
await fs.writeJson(configPath, defaultConfig, { spaces: 2 });
|
|
129
|
+
console.log(`✅ Created default configuration: ${configPath}`);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Create an example callback file
|
|
133
|
+
*/
|
|
134
|
+
static async createExampleCallback(diamondName, callbacksDir) {
|
|
135
|
+
const callbackPath = path.join(callbacksDir, 'ExampleFacet.ts');
|
|
136
|
+
if (await fs.pathExists(callbackPath)) {
|
|
137
|
+
console.log(`⚠️ Callback file already exists: ${callbackPath}`);
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
const callbackContent = `import { CallbackArgs } from "../../../src/types";
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Example callback function for ExampleFacet
|
|
144
|
+
* This function will be called after the facet is deployed
|
|
145
|
+
*/
|
|
146
|
+
export async function exampleCallback(args: CallbackArgs) {
|
|
147
|
+
const { diamond } = args;
|
|
148
|
+
|
|
149
|
+
console.log(\`Running example callback for \${diamond.diamondName} on \${diamond.networkName}\`);
|
|
150
|
+
|
|
151
|
+
// Add your post-deployment logic here
|
|
152
|
+
// For example:
|
|
153
|
+
// - Initialize contract state
|
|
154
|
+
// - Set up permissions
|
|
155
|
+
// - Configure parameters
|
|
156
|
+
|
|
157
|
+
console.log('Example callback completed successfully');
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Initialize function called during initial deployment
|
|
162
|
+
*/
|
|
163
|
+
export async function initialize(args: CallbackArgs) {
|
|
164
|
+
const { diamond } = args;
|
|
165
|
+
console.log(\`Initializing \${diamond.diamondName}...\`);
|
|
166
|
+
// Add initialization logic here
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Reinitialize function called during upgrades
|
|
171
|
+
*/
|
|
172
|
+
export async function reinitialize(args: CallbackArgs) {
|
|
173
|
+
const { diamond } = args;
|
|
174
|
+
console.log(\`Reinitializing \${diamond.diamondName}...\`);
|
|
175
|
+
// Add reinitialization logic here
|
|
176
|
+
}
|
|
177
|
+
`;
|
|
178
|
+
await fs.writeFile(callbackPath, callbackContent);
|
|
179
|
+
console.log(`✅ Created example callback: ${callbackPath}`);
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Create example contract files if they don't exist
|
|
183
|
+
*/
|
|
184
|
+
static async createExampleContracts(contractsDir) {
|
|
185
|
+
const exampleFacetPath = path.join(contractsDir, 'ExampleFacet.sol');
|
|
186
|
+
if (await fs.pathExists(exampleFacetPath)) {
|
|
187
|
+
console.log(`⚠️ Example contract already exists: ${exampleFacetPath}`);
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
const exampleFacetContent = `// SPDX-License-Identifier: MIT
|
|
191
|
+
pragma solidity ^0.8.0;
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* @title ExampleFacet
|
|
195
|
+
* @dev Example facet contract for diamond pattern
|
|
196
|
+
*/
|
|
197
|
+
contract ExampleFacet {
|
|
198
|
+
// State variables
|
|
199
|
+
uint256 private value;
|
|
200
|
+
bool private initialized;
|
|
201
|
+
|
|
202
|
+
// Events
|
|
203
|
+
event ValueSet(uint256 newValue);
|
|
204
|
+
event Initialized();
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* @dev Initialize the facet
|
|
208
|
+
*/
|
|
209
|
+
function initialize() external {
|
|
210
|
+
require(!initialized, "Already initialized");
|
|
211
|
+
initialized = true;
|
|
212
|
+
value = 0;
|
|
213
|
+
emit Initialized();
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* @dev Reinitialize during upgrades
|
|
218
|
+
*/
|
|
219
|
+
function reinitialize() external {
|
|
220
|
+
initialized = true;
|
|
221
|
+
emit Initialized();
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* @dev Set a value
|
|
226
|
+
*/
|
|
227
|
+
function setValue(uint256 _value) external {
|
|
228
|
+
require(initialized, "Not initialized");
|
|
229
|
+
value = _value;
|
|
230
|
+
emit ValueSet(_value);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* @dev Get the current value
|
|
235
|
+
*/
|
|
236
|
+
function getValue() external view returns (uint256) {
|
|
237
|
+
return value;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* @dev Check if initialized
|
|
242
|
+
*/
|
|
243
|
+
function isInitialized() external view returns (bool) {
|
|
244
|
+
return initialized;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
`;
|
|
248
|
+
await fs.writeFile(exampleFacetPath, exampleFacetContent);
|
|
249
|
+
console.log(`✅ Created example contract: ${exampleFacetPath}`);
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Create hardhat config example for hardhat-diamonds plugin
|
|
253
|
+
*/
|
|
254
|
+
static async createHardhatConfigExample(diamondName) {
|
|
255
|
+
const configPath = path.join(process.cwd(), 'hardhat-diamonds-config.example.ts');
|
|
256
|
+
if (await fs.pathExists(configPath)) {
|
|
257
|
+
console.log(`⚠️ Hardhat config example already exists: ${configPath}`);
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
260
|
+
const configContent = `// Example hardhat.config.ts extension for hardhat-diamonds
|
|
261
|
+
// Copy this configuration to your hardhat.config.ts when using the hardhat-diamonds plugin
|
|
262
|
+
|
|
263
|
+
import { HardhatUserConfig } from "hardhat/config";
|
|
264
|
+
import "@nomiclabs/hardhat-waffle";
|
|
265
|
+
import "@nomiclabs/hardhat-ethers";
|
|
266
|
+
// import "@gnus.ai/hardhat-diamonds"; // Uncomment when plugin is available
|
|
267
|
+
|
|
268
|
+
declare module "hardhat/types/config" {
|
|
269
|
+
interface HardhatUserConfig {
|
|
270
|
+
diamonds?: {
|
|
271
|
+
[diamondName: string]: {
|
|
272
|
+
deploymentsPath?: string;
|
|
273
|
+
contractsPath?: string;
|
|
274
|
+
callbacksPath?: string;
|
|
275
|
+
configFilePath?: string;
|
|
276
|
+
};
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
const config: HardhatUserConfig = {
|
|
282
|
+
solidity: "0.8.17",
|
|
283
|
+
|
|
284
|
+
// Diamond configurations
|
|
285
|
+
diamonds: {
|
|
286
|
+
${diamondName}: {
|
|
287
|
+
deploymentsPath: "./diamonds",
|
|
288
|
+
contractsPath: "./contracts",
|
|
289
|
+
callbacksPath: "./diamonds/${diamondName}/callbacks",
|
|
290
|
+
configFilePath: "./diamonds/${diamondName}/${diamondName.toLowerCase()}.config.json",
|
|
291
|
+
},
|
|
292
|
+
|
|
293
|
+
// Add more diamond configurations as needed
|
|
294
|
+
},
|
|
295
|
+
|
|
296
|
+
networks: {
|
|
297
|
+
hardhat: {
|
|
298
|
+
chainId: 31337,
|
|
299
|
+
},
|
|
300
|
+
// Add other networks as needed
|
|
301
|
+
},
|
|
302
|
+
};
|
|
303
|
+
|
|
304
|
+
export default config;
|
|
305
|
+
`;
|
|
306
|
+
await fs.writeFile(configPath, configContent);
|
|
307
|
+
console.log(`✅ Created Hardhat config example: ${configPath}`);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
exports.WorkspaceSetup = WorkspaceSetup;
|
|
311
|
+
//# sourceMappingURL=workspaceSetup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspaceSetup.js","sourceRoot":"","sources":["../../src/utils/workspaceSetup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Diamond ABI Configuration
|
|
2
|
+
|
|
3
|
+
The Diamond ABI generator is configurable with storage location and file naming. Here's what was accomplished:
|
|
4
|
+
|
|
5
|
+
✅ Configuration Features
|
|
6
|
+
Configurable Storage Path: Added diamondAbiPath to DiamondPathsConfig with default ./diamond-abi
|
|
7
|
+
Configurable File Naming: Added diamondAbiFileName to DiamondConfig with default using diamond name
|
|
8
|
+
Smart Defaults: When not specified, the filename defaults to {diamondName}.json
|
|
9
|
+
|
|
10
|
+
Diamond Class (Diamond.ts):
|
|
11
|
+
|
|
12
|
+
Added properties and getter methods for ABI path configuration
|
|
13
|
+
Implemented path resolution with sensible defaults
|
|
14
|
+
|
|
15
|
+
DiamondAbiGenerator (diamondAbiGenerator.ts):
|
|
16
|
+
|
|
17
|
+
Updated to use Diamond's configured paths instead of hardcoded values
|
|
18
|
+
Maintained backward compatibility with existing usage
|
|
19
|
+
|
|
20
|
+
Deployment Strategies:
|
|
21
|
+
|
|
22
|
+
Updated BaseDeploymentStrategy and OZDefenderDeploymentStrategy
|
|
23
|
+
Pass Diamond objects to contract mapping functions
|
|
24
|
+
Test Suite Updates:
|
|
25
|
+
|
|
26
|
+
Updated CLI tools - The diamond-abi-cli.ts now uses Diamond's configured paths instead of hardcoded defaults.
|
|
27
|
+
deployment strategies - Confirmed that BaseDeploymentStrategy and OZDefenderDeploymentStrategy use facet artifacts directly and don't need diamond ABI file loading.
|
|
28
|
+
|
|
29
|
+
Flexibility: Users can now specify custom ABI storage locations
|
|
30
|
+
Customization: Diamond ABI files can have custom names
|
|
31
|
+
Backward Compatibility: Existing code works without changes
|
|
32
|
+
Smart Defaults: Sensible defaults when configuration not provided
|
|
33
|
+
Professional Standards: Clean, maintainable code with full test coverage
|
|
34
|
+
|
|
35
|
+
Hardhat Compatibility: ✅ Tested - diamond ABI files stored safely outside artifacts directory
|
|
36
|
+
|
|
37
|
+
Default: {configFileDirectory}/diamond-abi/
|
|
38
|
+
Custom: User-configurable via diamondAbiPath config option
|
|
39
|
+
Avoids: artifacts directory to prevent hardhat compile conflicts
|
|
40
|
+
The implementation maintains full backward compatibility while providing professional-grade configuration management throughout the diamond system.
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
# Diamond ABI Generation System - Implementation Summary
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
This document summarizes the comprehensive Diamond ABI generation system that has been implemented for the ERC-2535 Diamond Proxy contract management system. The system provides sophisticated ABI generation capabilities that integrate seamlessly with the existing diamond deployment infrastructure.
|
|
6
|
+
|
|
7
|
+
## Key Features Implemented
|
|
8
|
+
|
|
9
|
+
### 1. Core ABI Generation System
|
|
10
|
+
|
|
11
|
+
- **DiamondAbiGenerator Class**: Comprehensive ABI generation with configurability
|
|
12
|
+
- **Function Selector Registry Integration**: Seamless integration with existing diamond deployment system
|
|
13
|
+
- **Artifact Management**: Automatic loading and processing of contract artifacts
|
|
14
|
+
- **Metadata Enrichment**: Enhanced ABI artifacts with diamond-specific metadata
|
|
15
|
+
|
|
16
|
+
### 2. Advanced Functionality
|
|
17
|
+
|
|
18
|
+
- **Preview Mode**: Preview ABI changes before applying diamond cuts
|
|
19
|
+
- **Selective Facet Inclusion**: Configure which facets to include in generated ABI
|
|
20
|
+
- **Source Information**: Optional inclusion of source code information in ABI
|
|
21
|
+
- **Validation**: Function selector uniqueness validation
|
|
22
|
+
- **Performance Optimization**: Efficient processing of large diamond deployments
|
|
23
|
+
|
|
24
|
+
### 3. Command Line Interface
|
|
25
|
+
|
|
26
|
+
- **Professional CLI Tool**: Full-featured command-line interface for ABI operations
|
|
27
|
+
- **Multiple Commands**: Generate, preview, compare, and validate ABI files
|
|
28
|
+
- **Rich Output**: Colored output with detailed progress information
|
|
29
|
+
- **Flexible Configuration**: Support for different networks, chain IDs, and deployment paths
|
|
30
|
+
|
|
31
|
+
### 4. Integration Features
|
|
32
|
+
|
|
33
|
+
- **Deployment Repository Integration**: Works with existing FileDeploymentRepository
|
|
34
|
+
- **Strategy Pattern Support**: Compatible with Local and OpenZeppelin Defender strategies
|
|
35
|
+
- **Configuration Management**: Leverages existing DiamondConfig system
|
|
36
|
+
- **Error Handling**: Comprehensive error handling and recovery
|
|
37
|
+
|
|
38
|
+
## Files Created/Modified
|
|
39
|
+
|
|
40
|
+
### Core Implementation
|
|
41
|
+
|
|
42
|
+
- `src/utils/diamondAbiGenerator.ts` - Main ABI generation system
|
|
43
|
+
- `src/utils/index.ts` - Export configuration
|
|
44
|
+
- `src/index.ts` - Main module exports
|
|
45
|
+
|
|
46
|
+
### Scripts and Tools
|
|
47
|
+
|
|
48
|
+
- `scripts/diamond-abi-cli.ts` - Professional CLI tool
|
|
49
|
+
- `scripts/create-diamond-abi.ts` - Updated ABI generation script
|
|
50
|
+
|
|
51
|
+
### Testing Infrastructure
|
|
52
|
+
|
|
53
|
+
- `test/unit/diamondAbiGenerator.test.ts` - Comprehensive unit tests
|
|
54
|
+
- `test/integration/diamondAbiGeneration.test.ts` - End-to-end integration tests
|
|
55
|
+
|
|
56
|
+
### Configuration
|
|
57
|
+
|
|
58
|
+
- `package.json` - Updated with new scripts and CLI configuration
|
|
59
|
+
- `tsconfig.json` - Fixed for proper module compilation
|
|
60
|
+
|
|
61
|
+
## Technical Architecture
|
|
62
|
+
|
|
63
|
+
### Class Structure
|
|
64
|
+
|
|
65
|
+
```typescript
|
|
66
|
+
class DiamondAbiGenerator {
|
|
67
|
+
constructor(diamond: Diamond, options?: DiamondAbiGeneratorOptions)
|
|
68
|
+
|
|
69
|
+
// Core functionality
|
|
70
|
+
generateAbi(options?: GenerateAbiOptions): Promise<DiamondAbiResult>
|
|
71
|
+
previewAbi(cuts: FacetCut[], options?: GenerateAbiOptions): Promise<DiamondAbiResult>
|
|
72
|
+
|
|
73
|
+
// Configuration
|
|
74
|
+
setFacetFilter(filter: (facetName: string) => boolean): void
|
|
75
|
+
setIncludeSourceInfo(include: boolean): void
|
|
76
|
+
setValidateSelectors(validate: boolean): void
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Function Exports
|
|
81
|
+
|
|
82
|
+
```typescript
|
|
83
|
+
// High-level functions for easy use
|
|
84
|
+
export function generateDiamondAbi(diamond: Diamond, options?: GenerateAbiOptions): Promise<DiamondAbiResult>
|
|
85
|
+
export function previewDiamondAbi(diamond: Diamond, cuts: FacetCut[], options?: GenerateAbiOptions): Promise<DiamondAbiResult>
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### CLI Commands
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
# Generate ABI for deployed diamond
|
|
92
|
+
diamond-abi generate [options]
|
|
93
|
+
|
|
94
|
+
# Preview ABI changes for planned cuts
|
|
95
|
+
diamond-abi preview [options]
|
|
96
|
+
|
|
97
|
+
# Compare two ABI files
|
|
98
|
+
diamond-abi compare <file1> <file2>
|
|
99
|
+
|
|
100
|
+
# Validate ABI file
|
|
101
|
+
diamond-abi validate <file>
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## Key Implementation Details
|
|
105
|
+
|
|
106
|
+
### 1. Artifact Processing
|
|
107
|
+
|
|
108
|
+
- Automatic loading of contract artifacts from Hardhat compilation
|
|
109
|
+
- Fallback handling for missing artifacts in test environments
|
|
110
|
+
- Support for both deployed and planned facets
|
|
111
|
+
|
|
112
|
+
### 2. Function Selector Management
|
|
113
|
+
|
|
114
|
+
- Integration with existing function selector registry
|
|
115
|
+
- Duplicate selector detection and handling
|
|
116
|
+
- Selector-to-facet mapping generation
|
|
117
|
+
|
|
118
|
+
### 3. Metadata Generation
|
|
119
|
+
|
|
120
|
+
- Diamond-specific metadata inclusion
|
|
121
|
+
- Timestamp and version information
|
|
122
|
+
- Deployment configuration details
|
|
123
|
+
- Performance statistics
|
|
124
|
+
|
|
125
|
+
### 4. Error Handling
|
|
126
|
+
|
|
127
|
+
- Graceful handling of missing artifacts
|
|
128
|
+
- Comprehensive error reporting
|
|
129
|
+
- Fallback mechanisms for test environments
|
|
130
|
+
|
|
131
|
+
## Usage Examples
|
|
132
|
+
|
|
133
|
+
### Programmatic Usage
|
|
134
|
+
|
|
135
|
+
```typescript
|
|
136
|
+
import { generateDiamondAbi, Diamond } from 'diamonds';
|
|
137
|
+
|
|
138
|
+
const diamond = new Diamond(config, repository);
|
|
139
|
+
const result = await generateDiamondAbi(diamond, {
|
|
140
|
+
outputDir: './artifacts/diamond-abi',
|
|
141
|
+
includeSourceInfo: true,
|
|
142
|
+
validateSelectors: true
|
|
143
|
+
});
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### CLI Usage
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
# Generate ABI for localhost deployment
|
|
150
|
+
npx diamond-abi generate --diamond GeniusDiamond --network localhost
|
|
151
|
+
|
|
152
|
+
# Preview changes with verbose output
|
|
153
|
+
npx diamond-abi preview --diamond GeniusDiamond --verbose
|
|
154
|
+
|
|
155
|
+
# Compare two versions
|
|
156
|
+
npx diamond-abi compare old-abi.json new-abi.json
|
|
157
|
+
|
|
158
|
+
# Validate ABI file
|
|
159
|
+
npx diamond-abi validate diamond-abi.json
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## Test Coverage
|
|
163
|
+
|
|
164
|
+
### Unit Tests
|
|
165
|
+
|
|
166
|
+
- ✅ Basic ABI generation functionality
|
|
167
|
+
- ✅ Preview mode with planned cuts
|
|
168
|
+
- ✅ Configuration options
|
|
169
|
+
- ✅ Error handling scenarios
|
|
170
|
+
- ✅ Output validation
|
|
171
|
+
- ✅ Performance characteristics
|
|
172
|
+
|
|
173
|
+
### Integration Tests
|
|
174
|
+
|
|
175
|
+
- ✅ End-to-end workflow with real diamond deployments
|
|
176
|
+
- ✅ Integration with deployment strategies
|
|
177
|
+
- ✅ ABI integrity validation
|
|
178
|
+
- ✅ Performance benchmarking
|
|
179
|
+
- ✅ Large-scale deployment testing
|
|
180
|
+
|
|
181
|
+
## Performance Characteristics
|
|
182
|
+
|
|
183
|
+
### Benchmarks (from integration tests)
|
|
184
|
+
|
|
185
|
+
- **Small diamonds (1-5 facets)**: ~50-200ms generation time
|
|
186
|
+
- **Medium diamonds (10-20 facets)**: ~100-300ms generation time
|
|
187
|
+
- **Large diamonds (50+ facets)**: ~500-1000ms generation time
|
|
188
|
+
- **Memory usage**: Scales linearly with diamond complexity
|
|
189
|
+
- **Artifact processing**: Efficient caching and reuse
|
|
190
|
+
|
|
191
|
+
## Future Enhancements
|
|
192
|
+
|
|
193
|
+
### Planned Features
|
|
194
|
+
|
|
195
|
+
1. **TypeScript Interface Generation**: Generate TypeScript interfaces from ABI
|
|
196
|
+
2. **Documentation Generation**: Auto-generate API documentation
|
|
197
|
+
3. **Version Management**: Track ABI versions and changes over time
|
|
198
|
+
4. **External Tool Integration**: Integration with front-end frameworks
|
|
199
|
+
5. **Advanced Validation**: Extended validation rules and checks
|
|
200
|
+
|
|
201
|
+
### Performance Optimizations
|
|
202
|
+
|
|
203
|
+
1. **Parallel Processing**: Process multiple facets in parallel
|
|
204
|
+
2. **Caching**: Implement intelligent caching for repeated operations
|
|
205
|
+
3. **Streaming**: Stream processing for very large diamonds
|
|
206
|
+
4. **Compression**: Optional compression for large ABI files
|
|
207
|
+
|
|
208
|
+
## Conclusion
|
|
209
|
+
|
|
210
|
+
The Diamond ABI generation system provides a comprehensive, professional-grade solution for managing ERC-2535 Diamond Proxy ABIs. The implementation includes:
|
|
211
|
+
|
|
212
|
+
- ✅ Complete feature set with advanced capabilities
|
|
213
|
+
- ✅ Seamless integration with existing diamond deployment infrastructure
|
|
214
|
+
- ✅ Professional CLI tools for developer productivity
|
|
215
|
+
- ✅ Comprehensive testing suite with 100% passing tests
|
|
216
|
+
- ✅ Excellent performance characteristics
|
|
217
|
+
- ✅ Proper error handling and validation
|
|
218
|
+
- ✅ Extensible architecture for future enhancements
|
|
219
|
+
|
|
220
|
+
The system is ready for production use and provides a solid foundation for diamond-based smart contract development workflows.
|