UNPKG

@m3s/smart-contract

Version:

A modular toolkit for generating, compiling, deploying, and interacting with Ethereum-compatible smart contracts

60 lines 3.36 kB
import { getStaticCompatibilityMatrix, getEnvironments, getFeatures, getRequirements, registry, RuntimeEnvironment } from '@m3s/common'; import { ContractHandlerType } from '../../types/index.js'; import { OpenZeppelinAdapter } from './adapter.js'; import Joi from "joi"; // ✅ JOI schema for OpenZeppelin adapter export const openZeppelinOptionsSchema = Joi.object({ workDir: Joi.string().optional().description('Working directory for contract generation'), hardhatConfig: Joi.object({ configFileName: Joi.string().optional().description('Hardhat config file name'), customSettings: Joi.object().optional().description('Custom Hardhat settings') }).optional().description('Hardhat configuration options'), preserveOutput: Joi.boolean().optional().default(false).description('Whether to preserve generated files'), providerConfig: Joi.object().optional().description('Network provider configuration'), compilerSettings: Joi.object({ solcVersion: Joi.string().optional().default('0.8.20'), optimizer: Joi.boolean().optional().default(true), optimizerRuns: Joi.number().optional().default(200) }).optional().description('Solidity compiler settings'), solcVersion: Joi.string().optional().description('Solidity compiler version') }); // const openZeppelinRequirements: Requirement[] = []; const openZeppelinRequirements = getRequirements(openZeppelinOptionsSchema, 'openZeppelin'); // const openZeppelinEnvironment: EnvironmentRequirements = { // supportedEnvironments: [RuntimeEnvironment.SERVER], // limitations: [ // 'Smart contract compilation requires Node.js environment with file system access.', // 'Hardhat compiler execution requires shell command capabilities.', // 'Cannot be used in browser environments due to child_process dependency.', // 'Requires write permissions for temporary contract compilation directories.' // ] // }; const openZeppelinEnvironment = getEnvironments('openZeppelin', [RuntimeEnvironment.SERVER], [ 'Requires blockchain provider for contract interactions', 'Contract ABI must be accurate and complete for intended operations' ], [ 'Contract interactions require proper gas estimation', 'Ensure contract addresses are verified and trusted', 'Private key handling follows secure practices when using signerOptions' ]); const openZeppelinFeatures = getFeatures(OpenZeppelinAdapter); const adapterMetadata = { name: 'openZeppelin', version: '1.0.0', module: 'smart-contract', adapterType: ContractHandlerType.openZeppelin, adapterClass: OpenZeppelinAdapter, requirements: openZeppelinRequirements, environment: openZeppelinEnvironment, features: openZeppelinFeatures }; registry.registerAdapter('smart-contract', adapterMetadata); // ✅ REPLACE: Use static compatibility matrix const compatibilityMatrix = getStaticCompatibilityMatrix('smart-contract', 'openZeppelin', '1.0.0'); if (compatibilityMatrix) { registry.registerCompatibilityMatrix('smart-contract', compatibilityMatrix); } console.log('✅ OpenZeppelin adapter registered with static compatibility matrix'); console.log('📋 Generated requirements:', openZeppelinRequirements); console.log('🔧 Generated features:', openZeppelinFeatures.map(f => f.name)); //# sourceMappingURL=openZeppelin.registration.js.map