@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
package/docs/ROADMAP.md
ADDED
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
# Project Roadmap
|
|
2
|
+
|
|
3
|
+
## Current Status: Production Ready ✅
|
|
4
|
+
|
|
5
|
+
The Diamonds module is now complete and production-ready. This document outlines the current state, future enhancements, and maintenance roadmap.
|
|
6
|
+
|
|
7
|
+
### Testing Infrastructure
|
|
8
|
+
|
|
9
|
+
- ✅ **Unit Tests**: Complete test coverage for all components
|
|
10
|
+
- ✅ **Integration Tests**: Full Defender API mocking and workflow testing
|
|
11
|
+
- ✅ **Performance Tests**: Benchmarking for large deployments and concurrent operations
|
|
12
|
+
- ✅ **Advanced Scenarios**: Error recovery, multi-network, and edge case testing
|
|
13
|
+
|
|
14
|
+
### Documentation
|
|
15
|
+
|
|
16
|
+
- ✅ **Integration Guide**: Complete setup and configuration documentation
|
|
17
|
+
- ✅ **Testing Guide**: Comprehensive testing instructions and best practices
|
|
18
|
+
- ✅ **Monitoring & Troubleshooting**: Detailed operational procedures
|
|
19
|
+
- ✅ **API Documentation**: Full code documentation and examples
|
|
20
|
+
|
|
21
|
+
### Tooling
|
|
22
|
+
|
|
23
|
+
- ✅ **CLI Tool**: Command-line interface for deployment operations
|
|
24
|
+
- ✅ **Example Projects**: Working example with contracts and scripts
|
|
25
|
+
- ✅ **Configuration Templates**: Environment and network configuration examples
|
|
26
|
+
- ✅ **Hardhat Integration**: Seamless integration with Hardhat toolchain
|
|
27
|
+
|
|
28
|
+
## 🚀 Future Enhancements (Roadmap)
|
|
29
|
+
|
|
30
|
+
### Phase 1: Advanced Defender Features
|
|
31
|
+
|
|
32
|
+
>> DEFENDER is phasing out so focus will be on switching to the open source equivalents.
|
|
33
|
+
|
|
34
|
+
- [ ] **Sentinel Integration**: Automated monitoring and alerting
|
|
35
|
+
- [ ] **Autotask Support**: Custom automation scripts for diamond operations
|
|
36
|
+
- [ ] **Timelock Integration**: Support for timelock controllers
|
|
37
|
+
- [ ] **Advanced Multi-sig**: Support for complex multi-sig workflows
|
|
38
|
+
|
|
39
|
+
### Phase 2: Developer Experience
|
|
40
|
+
|
|
41
|
+
- [ ] **Visual Dashboard**: Web-based dashboard for diamond management
|
|
42
|
+
- [ ] **GraphQL API**: Rich API for diamond state queries
|
|
43
|
+
- [ ] **IDE Extensions**: VS Code extension for diamond development
|
|
44
|
+
- [ ] **Template Generator**: Interactive project template generator
|
|
45
|
+
|
|
46
|
+
### Phase 3: Enterprise Features
|
|
47
|
+
|
|
48
|
+
- [ ] **Role-based Access**: Granular permission system
|
|
49
|
+
- [ ] **Audit Trail**: Comprehensive operation logging
|
|
50
|
+
- [ ] **Compliance Tools**: SOX/SOC2 compliance features
|
|
51
|
+
- [ ] **Multi-tenant Support**: Organization and team management
|
|
52
|
+
|
|
53
|
+
### Phase 4: Ecosystem Integration
|
|
54
|
+
|
|
55
|
+
- [ ] **DeFi Protocol Integration**: Pre-built DeFi protocol diamonds
|
|
56
|
+
- [ ] **NFT Marketplace Support**: NFT-specific diamond patterns
|
|
57
|
+
- [ ] **Cross-chain Support**: Multi-chain deployment coordination
|
|
58
|
+
- [ ] **Governance Integration**: DAO governance for diamond upgrades
|
|
59
|
+
|
|
60
|
+
## 📋 Maintenance Schedule
|
|
61
|
+
|
|
62
|
+
### Regular Maintenance
|
|
63
|
+
|
|
64
|
+
- **Weekly**: Dependency updates and security patches
|
|
65
|
+
- **Monthly**: Performance optimization and bug fixes
|
|
66
|
+
- **Quarterly**: Major feature releases and documentation updates
|
|
67
|
+
- **Annually**: Comprehensive security audit and architecture review
|
|
68
|
+
|
|
69
|
+
### Monitoring
|
|
70
|
+
|
|
71
|
+
- **Continuous**: Automated testing and CI/CD pipeline
|
|
72
|
+
- **Daily**: Usage metrics and error rate monitoring
|
|
73
|
+
- **Weekly**: Performance benchmarks and optimization opportunities
|
|
74
|
+
- **Monthly**: User feedback review and prioritization
|
|
75
|
+
|
|
76
|
+
## 🔧 Technical Debt and Improvements
|
|
77
|
+
|
|
78
|
+
### High Priority
|
|
79
|
+
|
|
80
|
+
- [ ] **Type Safety**: Enhanced TypeScript types for better developer experience
|
|
81
|
+
- [ ] **Error Handling**: More granular error types and recovery mechanisms
|
|
82
|
+
- [ ] **Performance**: Optimization for very large diamond deployments (100+ facets)
|
|
83
|
+
- [ ] **Memory Usage**: Optimization for large deployment metadata handling
|
|
84
|
+
|
|
85
|
+
### Medium Priority
|
|
86
|
+
|
|
87
|
+
- [ ] **Caching**: Intelligent caching for Defender API responses
|
|
88
|
+
- [ ] **Retry Logic**: Enhanced retry mechanisms with exponential backoff
|
|
89
|
+
- [ ] **Logging**: Structured logging with configurable levels
|
|
90
|
+
- [ ] **Metrics**: Built-in metrics collection and reporting
|
|
91
|
+
|
|
92
|
+
### Low Priority
|
|
93
|
+
|
|
94
|
+
- [ ] **Code Generation**: Automatic TypeScript interface generation from diamonds
|
|
95
|
+
- [ ] **Documentation**: Interactive documentation with live examples
|
|
96
|
+
- [ ] **Localization**: Multi-language support for CLI and documentation
|
|
97
|
+
- [ ] **Themes**: Customizable CLI themes and output formatting
|
|
98
|
+
|
|
99
|
+
## 🏗️ Architecture Evolution
|
|
100
|
+
|
|
101
|
+
### Current Architecture
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
Diamond Module
|
|
105
|
+
├── Core (Diamond, DeploymentManager, DiamondDeployer)
|
|
106
|
+
├── Strategies (Base, Local, OZDefender)
|
|
107
|
+
├── Repositories (File, Database)
|
|
108
|
+
├── Schemas (Zod validation)
|
|
109
|
+
├── Utils (Common, Loupe, Diffing)
|
|
110
|
+
└── Types (Config, Deployments)
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Future Architecture (v2.0)
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
Diamond Platform
|
|
117
|
+
├── Core Engine
|
|
118
|
+
│ ├── Diamond Runtime
|
|
119
|
+
│ ├── Strategy Engine
|
|
120
|
+
│ └── State Manager
|
|
121
|
+
├── API Layer
|
|
122
|
+
│ ├── GraphQL API
|
|
123
|
+
│ ├── REST API
|
|
124
|
+
│ └── WebSocket Events
|
|
125
|
+
├── Integration Layer
|
|
126
|
+
│ ├── Defender SDK
|
|
127
|
+
│ ├── Multi-chain Support
|
|
128
|
+
│ └── External Tools
|
|
129
|
+
├── UI Layer
|
|
130
|
+
│ ├── Web Dashboard
|
|
131
|
+
│ ├── CLI Tools
|
|
132
|
+
│ └── IDE Extensions
|
|
133
|
+
└── Storage Layer
|
|
134
|
+
├── Database
|
|
135
|
+
├── IPFS
|
|
136
|
+
└── File System
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
## 📊 Success Metrics
|
|
140
|
+
|
|
141
|
+
### Development Metrics
|
|
142
|
+
|
|
143
|
+
- **Test Coverage**: Maintain >95% code coverage
|
|
144
|
+
- **Documentation Coverage**: 100% public API documentation
|
|
145
|
+
- **Performance**: <30s deployment time for 10 facets
|
|
146
|
+
- **Reliability**: <0.1% deployment failure rate
|
|
147
|
+
|
|
148
|
+
### Adoption Metrics
|
|
149
|
+
|
|
150
|
+
- **Downloads**: Track npm package downloads
|
|
151
|
+
- **GitHub Stars**: Monitor community interest
|
|
152
|
+
- **Issues/PRs**: Active community contribution
|
|
153
|
+
- **Usage**: Number of diamonds deployed via Defender
|
|
154
|
+
|
|
155
|
+
### Quality Metrics
|
|
156
|
+
|
|
157
|
+
- **Bug Rate**: <1 critical bug per month
|
|
158
|
+
- **Response Time**: <24h for critical issues
|
|
159
|
+
- **User Satisfaction**: >4.5/5 developer satisfaction score
|
|
160
|
+
- **Performance**: 99.9% uptime for deployment operations
|
|
161
|
+
|
|
162
|
+
## 🤝 Community and Contribution
|
|
163
|
+
|
|
164
|
+
### Community Channels
|
|
165
|
+
|
|
166
|
+
- **GitHub**: Primary development and issue tracking
|
|
167
|
+
- **Discord**: Real-time community support
|
|
168
|
+
- **Forum**: Long-form discussions and announcements
|
|
169
|
+
- **Documentation**: Wiki-style collaborative documentation
|
|
170
|
+
|
|
171
|
+
### Contribution Guidelines
|
|
172
|
+
|
|
173
|
+
- **Code**: TypeScript, comprehensive tests, documentation
|
|
174
|
+
- **Issues**: Detailed bug reports with reproduction steps
|
|
175
|
+
- **Features**: RFC process for major features
|
|
176
|
+
- **Documentation**: Examples and tutorials welcome
|
|
177
|
+
|
|
178
|
+
### Core Team
|
|
179
|
+
|
|
180
|
+
- **Maintainers**: 2-3 core maintainers for code review
|
|
181
|
+
- **Contributors**: Open source community contributors
|
|
182
|
+
- **Advisors**: OpenZeppelin team consultation
|
|
183
|
+
- **Users**: Enterprise and individual users providing feedback
|
|
184
|
+
|
|
185
|
+
## 🔮 Long-term Vision
|
|
186
|
+
|
|
187
|
+
### 2025 Goals
|
|
188
|
+
|
|
189
|
+
- **Industry Standard**: Become the standard for diamond deployment
|
|
190
|
+
- **Enterprise Adoption**: 100+ enterprise customers
|
|
191
|
+
- **Developer Tools**: Comprehensive development environment
|
|
192
|
+
- **Ecosystem**: Rich ecosystem of diamond-based protocols
|
|
193
|
+
|
|
194
|
+
### 2026+ Vision
|
|
195
|
+
|
|
196
|
+
- **Multi-chain**: Seamless multi-chain diamond management
|
|
197
|
+
- **AI Integration**: AI-powered deployment optimization
|
|
198
|
+
- **Governance**: Decentralized governance for protocol evolution
|
|
199
|
+
- **Standards**: Contribute to new EIP standards for diamonds
|
|
200
|
+
|
|
201
|
+
## 📝 Implementation Notes
|
|
202
|
+
|
|
203
|
+
### Current Version: 1.0.0
|
|
204
|
+
|
|
205
|
+
- Production-ready OpenZeppelin Defender integration
|
|
206
|
+
- Complete test suite and documentation
|
|
207
|
+
- CLI tools and example projects
|
|
208
|
+
- Performance optimization for enterprise use
|
|
209
|
+
|
|
210
|
+
### Next Version: 1.1.0 (Target: Q3 2025)
|
|
211
|
+
|
|
212
|
+
- Sentinel and Autotask integration
|
|
213
|
+
- Enhanced multi-sig workflows
|
|
214
|
+
- Performance improvements
|
|
215
|
+
- Additional example projects
|
|
216
|
+
|
|
217
|
+
### Version 2.0.0 (Target: Q4 2025)
|
|
218
|
+
|
|
219
|
+
- Major architecture refactor
|
|
220
|
+
- Web dashboard and visual tools
|
|
221
|
+
- Enterprise features
|
|
222
|
+
- Multi-chain support
|
|
223
|
+
|
|
224
|
+
## 🆘 Support and Contact
|
|
225
|
+
|
|
226
|
+
### Getting Help
|
|
227
|
+
|
|
228
|
+
- **Documentation**: Start with the comprehensive docs
|
|
229
|
+
- **GitHub Issues**: Bug reports and feature requests
|
|
230
|
+
- **Community Discord**: Real-time community support
|
|
231
|
+
- **Enterprise Support**: Contact for enterprise support plans
|
|
232
|
+
|
|
233
|
+
### Reporting Issues
|
|
234
|
+
|
|
235
|
+
1. Check existing issues first
|
|
236
|
+
2. Provide detailed reproduction steps
|
|
237
|
+
3. Include environment information
|
|
238
|
+
4. Tag with appropriate labels
|
|
239
|
+
|
|
240
|
+
### Contributing
|
|
241
|
+
|
|
242
|
+
1. Fork the repository
|
|
243
|
+
2. Create feature branch
|
|
244
|
+
3. Add tests and documentation
|
|
245
|
+
4. Submit pull request
|
|
246
|
+
5. Participate in code review
|
|
247
|
+
|
|
248
|
+
---
|
|
249
|
+
|
|
250
|
+
*This roadmap is a living document and will be updated regularly based on community feedback and development progress.*
|
|
Binary file
|
|
@@ -0,0 +1,451 @@
|
|
|
1
|
+
# OpenZeppelin Defender Integration for Diamonds Module
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
The Diamonds module provides comprehensive integration with OpenZeppelin Defender, enabling enterprise-grade deployment and management of ERC-2535 Diamond Proxy contracts. This integration offers:
|
|
6
|
+
|
|
7
|
+
- **Secure Deployments**: Deploy contracts through Defender's secure infrastructure
|
|
8
|
+
- **Multi-signature Support**: Integrate with Gnosis Safe and other multi-sig wallets
|
|
9
|
+
- **Automated Execution**: Optional auto-approval for streamlined deployments
|
|
10
|
+
- **Transaction Monitoring**: Track deployment status and execution through Defender dashboard
|
|
11
|
+
- **Contract Verification**: Automatic contract verification through Defender
|
|
12
|
+
- **Robust Error Handling**: Comprehensive retry logic and error recovery
|
|
13
|
+
|
|
14
|
+
## Benefits of Using Defender
|
|
15
|
+
|
|
16
|
+
### Security
|
|
17
|
+
|
|
18
|
+
- Private key management through Defender's secure infrastructure
|
|
19
|
+
- Multi-signature approval workflows for critical operations
|
|
20
|
+
- Automated security scanning and monitoring
|
|
21
|
+
- Role-based access controls
|
|
22
|
+
|
|
23
|
+
### Reliability
|
|
24
|
+
|
|
25
|
+
- Built-in retry mechanisms for failed transactions
|
|
26
|
+
- Gas price optimization
|
|
27
|
+
- Network congestion handling
|
|
28
|
+
- Transaction monitoring and confirmation
|
|
29
|
+
|
|
30
|
+
### Transparency
|
|
31
|
+
|
|
32
|
+
- Complete audit trail of all deployment operations
|
|
33
|
+
- Real-time status updates through Defender dashboard
|
|
34
|
+
- Integration with monitoring and alerting systems
|
|
35
|
+
- Detailed transaction logs and analytics
|
|
36
|
+
|
|
37
|
+
## Setup and Configuration
|
|
38
|
+
|
|
39
|
+
### 1. Defender Account Setup
|
|
40
|
+
|
|
41
|
+
1. **Create Defender Account**
|
|
42
|
+
- Visit [OpenZeppelin Defender](https://defender.openzeppelin.com/)
|
|
43
|
+
- Sign up or log in to your account
|
|
44
|
+
- Navigate to the API section
|
|
45
|
+
|
|
46
|
+
2. **Generate API Credentials**
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
# In Defender dashboard:
|
|
50
|
+
# 1. Go to "API Keys" section
|
|
51
|
+
# 2. Click "Create API Key"
|
|
52
|
+
# 3. Select appropriate permissions:
|
|
53
|
+
# - Deploy (for contract deployments)
|
|
54
|
+
# - Admin (for proposal management)
|
|
55
|
+
# 4. Copy API Key and Secret
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
3. **Setup Relayer (Optional)**
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
# For automated transaction execution:
|
|
62
|
+
# 1. Go to "Relay" section
|
|
63
|
+
# 2. Create new Relayer
|
|
64
|
+
# 3. Fund relayer with appropriate gas tokens
|
|
65
|
+
# 4. Copy relayer address
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
4. **Setup Multi-sig (Recommended)**
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
# For production deployments:
|
|
72
|
+
# 1. Deploy or import existing Gnosis Safe
|
|
73
|
+
# 2. Configure signers and threshold
|
|
74
|
+
# 3. Add Safe address to Defender
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### 2. Environment Configuration
|
|
78
|
+
|
|
79
|
+
Create a `.env` file in your project root:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
# OpenZeppelin Defender Configuration
|
|
83
|
+
DEFENDER_API_KEY=your_api_key_here
|
|
84
|
+
DEFENDER_API_SECRET=your_api_secret_here
|
|
85
|
+
DEFENDER_RELAYER_ADDRESS=0x1234567890123456789012345678901234567890
|
|
86
|
+
DEFENDER_SAFE_ADDRESS=0x0987654321098765432109876543210987654321
|
|
87
|
+
|
|
88
|
+
# Network Configuration
|
|
89
|
+
SEPOLIA_RPC_URL=https://sepolia.infura.io/v3/YOUR_INFURA_KEY
|
|
90
|
+
MAINNET_RPC_URL=https://mainnet.infura.io/v3/YOUR_INFURA_KEY
|
|
91
|
+
|
|
92
|
+
# Deployment Settings
|
|
93
|
+
AUTO_APPROVE_DEFENDER_PROPOSALS=false
|
|
94
|
+
AUTO_VERIFY_CONTRACTS=true
|
|
95
|
+
VERBOSE_DEPLOYMENT=true
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### 3. Project Configuration
|
|
99
|
+
|
|
100
|
+
Update your `hardhat.config.ts`:
|
|
101
|
+
|
|
102
|
+
```typescript
|
|
103
|
+
import { HardhatUserConfig } from "hardhat/config";
|
|
104
|
+
import "@nomiclabs/hardhat-waffle";
|
|
105
|
+
import "@nomiclabs/hardhat-ethers";
|
|
106
|
+
import dotenv from "dotenv";
|
|
107
|
+
|
|
108
|
+
dotenv.config();
|
|
109
|
+
|
|
110
|
+
const config: HardhatUserConfig = {
|
|
111
|
+
networks: {
|
|
112
|
+
sepolia: {
|
|
113
|
+
url: process.env.SEPOLIA_RPC_URL,
|
|
114
|
+
accounts: process.env.DEPLOYER_PRIVATE_KEY ? [process.env.DEPLOYER_PRIVATE_KEY] : []
|
|
115
|
+
},
|
|
116
|
+
mainnet: {
|
|
117
|
+
url: process.env.MAINNET_RPC_URL,
|
|
118
|
+
accounts: process.env.DEPLOYER_PRIVATE_KEY ? [process.env.DEPLOYER_PRIVATE_KEY] : []
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
// ... other configuration
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
export default config;
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## Deployment Workflow
|
|
128
|
+
|
|
129
|
+
### Basic Deployment
|
|
130
|
+
|
|
131
|
+
```typescript
|
|
132
|
+
import { ethers } from 'hardhat';
|
|
133
|
+
import { Diamond, DiamondDeployer, FileDeploymentRepository } from '@diamonds/core';
|
|
134
|
+
import { OZDefenderDeploymentStrategy } from '@diamonds/strategies';
|
|
135
|
+
|
|
136
|
+
async function deployWithDefender() {
|
|
137
|
+
// Setup configuration
|
|
138
|
+
const config = {
|
|
139
|
+
diamondName: 'MyDiamond',
|
|
140
|
+
networkName: 'sepolia',
|
|
141
|
+
chainId: 11155111,
|
|
142
|
+
deploymentsPath: './deployments',
|
|
143
|
+
contractsPath: './contracts',
|
|
144
|
+
// ... other config
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
// Create repository and diamond
|
|
148
|
+
const repository = new FileDeploymentRepository(config);
|
|
149
|
+
const diamond = new Diamond(config, repository);
|
|
150
|
+
|
|
151
|
+
// Setup provider and signer
|
|
152
|
+
diamond.setProvider(ethers.provider);
|
|
153
|
+
diamond.setSigner(await ethers.getSigners()[0]);
|
|
154
|
+
|
|
155
|
+
// Create Defender strategy
|
|
156
|
+
const strategy = new OZDefenderDeploymentStrategy(
|
|
157
|
+
process.env.DEFENDER_API_KEY!,
|
|
158
|
+
process.env.DEFENDER_API_SECRET!,
|
|
159
|
+
process.env.DEFENDER_RELAYER_ADDRESS!,
|
|
160
|
+
process.env.AUTO_APPROVE_DEFENDER_PROPOSALS === 'true',
|
|
161
|
+
process.env.DEFENDER_SAFE_ADDRESS!,
|
|
162
|
+
'Safe'
|
|
163
|
+
);
|
|
164
|
+
|
|
165
|
+
// Deploy diamond
|
|
166
|
+
const deployer = new DiamondDeployer(diamond, strategy);
|
|
167
|
+
await deployer.deployDiamond();
|
|
168
|
+
|
|
169
|
+
console.log('✅ Diamond deployed successfully through Defender!');
|
|
170
|
+
}
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### Advanced Configuration
|
|
174
|
+
|
|
175
|
+
```typescript
|
|
176
|
+
// Custom polling configuration
|
|
177
|
+
const strategy = new OZDefenderDeploymentStrategy(
|
|
178
|
+
apiKey,
|
|
179
|
+
apiSecret,
|
|
180
|
+
relayerAddress,
|
|
181
|
+
false, // Manual approval
|
|
182
|
+
safeAddress,
|
|
183
|
+
'Safe',
|
|
184
|
+
true // Verbose logging
|
|
185
|
+
);
|
|
186
|
+
|
|
187
|
+
// Deploy with custom timeout
|
|
188
|
+
const deployer = new DiamondDeployer(diamond, strategy);
|
|
189
|
+
await deployer.deployDiamond();
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
## Upgrade Process
|
|
193
|
+
|
|
194
|
+
The upgrade process automatically detects existing deployments and only deploys changed facets:
|
|
195
|
+
|
|
196
|
+
```typescript
|
|
197
|
+
// Update your diamond configuration
|
|
198
|
+
const config = repository.loadDeployConfig();
|
|
199
|
+
config.protocolVersion = 2.0;
|
|
200
|
+
config.facets['MyFacet'].versions['2.0'] = {
|
|
201
|
+
deployInit: "initialize()",
|
|
202
|
+
upgradeInit: "upgradeToV2()",
|
|
203
|
+
callbacks: ["postUpgradeCallback"]
|
|
204
|
+
};
|
|
205
|
+
|
|
206
|
+
// Save configuration
|
|
207
|
+
await repository.saveDeployConfig(config);
|
|
208
|
+
|
|
209
|
+
// Deploy upgrade (automatically detected)
|
|
210
|
+
await deployer.deployDiamond();
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
### Upgrade Features
|
|
214
|
+
|
|
215
|
+
- **Selective Deployment**: Only modified facets are redeployed
|
|
216
|
+
- **Version Management**: Automatic version detection and management
|
|
217
|
+
- **State Migration**: Support for upgrade initialization functions
|
|
218
|
+
- **Rollback Support**: Maintain deployment history for rollback scenarios
|
|
219
|
+
|
|
220
|
+
## Multi-Signature Integration
|
|
221
|
+
|
|
222
|
+
### Gnosis Safe Configuration
|
|
223
|
+
|
|
224
|
+
```typescript
|
|
225
|
+
const strategy = new OZDefenderDeploymentStrategy(
|
|
226
|
+
apiKey,
|
|
227
|
+
apiSecret,
|
|
228
|
+
relayerAddress,
|
|
229
|
+
false, // Disable auto-approval for multi-sig
|
|
230
|
+
safeAddress,
|
|
231
|
+
'Safe'
|
|
232
|
+
);
|
|
233
|
+
|
|
234
|
+
// Deployment will create proposals requiring Safe approval
|
|
235
|
+
await deployer.deployDiamond();
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
### Approval Workflow
|
|
239
|
+
|
|
240
|
+
1. **Proposal Creation**: Defender creates proposal for diamond cut
|
|
241
|
+
2. **Multi-sig Review**: Safe owners review and approve proposal
|
|
242
|
+
3. **Execution**: Once threshold met, proposal executes automatically
|
|
243
|
+
4. **Confirmation**: Deployment status updated in local state
|
|
244
|
+
|
|
245
|
+
## Monitoring and Status
|
|
246
|
+
|
|
247
|
+
### Deployment Status Tracking
|
|
248
|
+
|
|
249
|
+
```typescript
|
|
250
|
+
// Check deployment status
|
|
251
|
+
const deployedData = diamond.getDeployedDiamondData();
|
|
252
|
+
console.log('Diamond Address:', deployedData.DiamondAddress);
|
|
253
|
+
console.log('Deployed Facets:', Object.keys(deployedData.DeployedFacets || {}));
|
|
254
|
+
|
|
255
|
+
// Check Defender store
|
|
256
|
+
const store = new DefenderDeploymentStore(
|
|
257
|
+
diamond.diamondName,
|
|
258
|
+
`${diamond.diamondName}-${networkName}-${chainId}`
|
|
259
|
+
);
|
|
260
|
+
|
|
261
|
+
const steps = store.list();
|
|
262
|
+
steps.forEach(step => {
|
|
263
|
+
console.log(`${step.stepName}: ${step.status}`);
|
|
264
|
+
});
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
### Real-time Monitoring
|
|
268
|
+
|
|
269
|
+
Access the Defender dashboard to monitor:
|
|
270
|
+
|
|
271
|
+
- Deployment progress in real-time
|
|
272
|
+
- Transaction status and confirmations
|
|
273
|
+
- Gas usage and optimization recommendations
|
|
274
|
+
- Error logs and debugging information
|
|
275
|
+
|
|
276
|
+
## Error Handling and Recovery
|
|
277
|
+
|
|
278
|
+
### Automatic Retry Logic
|
|
279
|
+
|
|
280
|
+
The Defender strategy includes comprehensive error handling:
|
|
281
|
+
|
|
282
|
+
```typescript
|
|
283
|
+
// Built-in retry with exponential backoff
|
|
284
|
+
const pollOptions = {
|
|
285
|
+
maxAttempts: 10,
|
|
286
|
+
initialDelayMs: 8000,
|
|
287
|
+
maxDelayMs: 60000,
|
|
288
|
+
jitter: true
|
|
289
|
+
};
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
### Common Error Scenarios
|
|
293
|
+
|
|
294
|
+
1. **Network Congestion**
|
|
295
|
+
- Automatic retry with increased gas prices
|
|
296
|
+
- Exponential backoff for polling
|
|
297
|
+
|
|
298
|
+
2. **Deployment Failures**
|
|
299
|
+
- Detailed error reporting
|
|
300
|
+
- State preservation for resumption
|
|
301
|
+
|
|
302
|
+
3. **Proposal Failures**
|
|
303
|
+
- Clear error messages
|
|
304
|
+
- Manual intervention guidance
|
|
305
|
+
|
|
306
|
+
### Recovery Procedures
|
|
307
|
+
|
|
308
|
+
```typescript
|
|
309
|
+
// Resume failed deployment
|
|
310
|
+
const strategy = new OZDefenderDeploymentStrategy(/* config */);
|
|
311
|
+
|
|
312
|
+
// Check existing state
|
|
313
|
+
const deployedData = diamond.getDeployedDiamondData();
|
|
314
|
+
if (deployedData.DiamondAddress) {
|
|
315
|
+
console.log('Resuming from existing deployment...');
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
// Continue deployment
|
|
319
|
+
await deployer.deployDiamond();
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
## Security Considerations
|
|
323
|
+
|
|
324
|
+
### Production Best Practices
|
|
325
|
+
|
|
326
|
+
1. **API Key Management**
|
|
327
|
+
- Store API keys in secure environment variables
|
|
328
|
+
- Use different keys for different environments
|
|
329
|
+
- Regularly rotate API credentials
|
|
330
|
+
|
|
331
|
+
2. **Multi-signature Setup**
|
|
332
|
+
- Always use multi-sig for mainnet deployments
|
|
333
|
+
- Set appropriate signing thresholds
|
|
334
|
+
- Regularly audit signer access
|
|
335
|
+
|
|
336
|
+
3. **Network Security**
|
|
337
|
+
- Use secure RPC endpoints
|
|
338
|
+
- Enable transaction monitoring
|
|
339
|
+
- Set up alerting for unusual activity
|
|
340
|
+
|
|
341
|
+
4. **Contract Verification**
|
|
342
|
+
- Enable automatic verification
|
|
343
|
+
- Verify source code matches deployed bytecode
|
|
344
|
+
- Maintain verification records
|
|
345
|
+
|
|
346
|
+
### Access Controls
|
|
347
|
+
|
|
348
|
+
```typescript
|
|
349
|
+
// Role-based deployment configuration
|
|
350
|
+
const productionStrategy = new OZDefenderDeploymentStrategy(
|
|
351
|
+
process.env.PROD_DEFENDER_API_KEY!,
|
|
352
|
+
process.env.PROD_DEFENDER_API_SECRET!,
|
|
353
|
+
process.env.PROD_RELAYER_ADDRESS!,
|
|
354
|
+
false, // Never auto-approve in production
|
|
355
|
+
process.env.PROD_SAFE_ADDRESS!,
|
|
356
|
+
'Safe'
|
|
357
|
+
);
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
## Troubleshooting
|
|
361
|
+
|
|
362
|
+
### Common Issues
|
|
363
|
+
|
|
364
|
+
1. **API Authentication Errors**
|
|
365
|
+
|
|
366
|
+
```bash
|
|
367
|
+
Error: Invalid API credentials
|
|
368
|
+
Solution: Verify DEFENDER_API_KEY and DEFENDER_API_SECRET
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
2. **Network Connection Issues**
|
|
372
|
+
|
|
373
|
+
```bash
|
|
374
|
+
Error: Request timeout
|
|
375
|
+
Solution: Check network connectivity and RPC endpoint
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
3. **Insufficient Gas**
|
|
379
|
+
|
|
380
|
+
```bash
|
|
381
|
+
Error: Transaction underpriced
|
|
382
|
+
Solution: Increase gas price or use gas optimization
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
4. **Multi-sig Threshold Not Met**
|
|
386
|
+
|
|
387
|
+
```bash
|
|
388
|
+
Warning: Proposal awaiting approval
|
|
389
|
+
Solution: Additional Safe signers need to approve
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
### Debugging Steps
|
|
393
|
+
|
|
394
|
+
1. **Enable Verbose Logging**
|
|
395
|
+
|
|
396
|
+
```typescript
|
|
397
|
+
const strategy = new OZDefenderDeploymentStrategy(
|
|
398
|
+
// ... config
|
|
399
|
+
true // Enable verbose logging
|
|
400
|
+
);
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
2. **Check Defender Dashboard**
|
|
404
|
+
- Review deployment status
|
|
405
|
+
- Check transaction logs
|
|
406
|
+
- Verify proposal status
|
|
407
|
+
|
|
408
|
+
3. **Validate Configuration**
|
|
409
|
+
|
|
410
|
+
```typescript
|
|
411
|
+
// Verify network settings
|
|
412
|
+
console.log('Network:', diamond.getDiamondConfig().networkName);
|
|
413
|
+
console.log('Chain ID:', diamond.getDiamondConfig().chainId);
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
## Performance Optimization
|
|
417
|
+
|
|
418
|
+
### Gas Optimization
|
|
419
|
+
|
|
420
|
+
- Use appropriate gas limits
|
|
421
|
+
- Monitor gas prices
|
|
422
|
+
- Implement batch operations where possible
|
|
423
|
+
|
|
424
|
+
### Network Efficiency
|
|
425
|
+
|
|
426
|
+
- Minimize redundant API calls
|
|
427
|
+
- Use connection pooling
|
|
428
|
+
- Implement request caching
|
|
429
|
+
|
|
430
|
+
### Deployment Speed
|
|
431
|
+
|
|
432
|
+
- Parallel facet deployments where safe
|
|
433
|
+
- Optimized polling intervals
|
|
434
|
+
- Efficient state management
|
|
435
|
+
|
|
436
|
+
## Integration Examples
|
|
437
|
+
|
|
438
|
+
See the `examples/defender-deployment/` directory for complete working examples including:
|
|
439
|
+
|
|
440
|
+
- Basic diamond deployment
|
|
441
|
+
- Multi-facet upgrade scenarios
|
|
442
|
+
- Multi-signature workflow
|
|
443
|
+
- Error handling patterns
|
|
444
|
+
- Production deployment scripts
|
|
445
|
+
|
|
446
|
+
## Support and Resources
|
|
447
|
+
|
|
448
|
+
- [OpenZeppelin Defender Documentation](https://docs.openzeppelin.com/defender/)
|
|
449
|
+
- [ERC-2535 Diamond Standard](https://eips.ethereum.org/EIPS/eip-2535)
|
|
450
|
+
- [Diamonds Module GitHub](https://github.com/your-org/diamonds)
|
|
451
|
+
- [Community Discord](https://discord.gg/your-server)
|