docs: add documentation for LabContract.sol
This commit is contained in:
parent
903336d829
commit
c7bb9c63d1
77
docs/LabContract.md
Normal file
77
docs/LabContract.md
Normal file
@ -0,0 +1,77 @@
|
||||
## Overview
|
||||
`LabContract` is a sophisticated smart contract designed to manage scientific experiments on the blockchain. It provides a robust framework for creating, tracking, and managing experimental configurations with integrated funding and status tracking mechanisms.
|
||||
|
||||
## Interface
|
||||
| Function | Parameters | Returns | Description |
|
||||
|----------|------------|---------|-------------|
|
||||
| `createExperiment` | `fundingAmount`, `configHash` | `bytes32` | Create a new experiment with initial funding |
|
||||
| `updateExperimentStatus` | `experimentId`, `newStatus` | `void` | Toggle experiment active status |
|
||||
| `getExperimentDetails` | `experimentId` | `ExperimentConfig` | Retrieve full experiment configuration |
|
||||
| `withdrawFunds` | `experimentId`, `amount` | `void` | Withdraw funds from an active experiment |
|
||||
|
||||
## Events
|
||||
- `ExperimentCreated`: Emitted when a new experiment is initialized
|
||||
- `experimentId`: Unique identifier
|
||||
- `creator`: Experiment creator's address
|
||||
- `fundingAmount`: Initial funding amount
|
||||
|
||||
- `ExperimentUpdated`: Emitted when experiment status changes
|
||||
- `experimentId`: Unique identifier
|
||||
- `isActive`: New active status
|
||||
|
||||
## Storage Layout
|
||||
- `experiments`: Mapping of experiment IDs to `ExperimentConfig`
|
||||
- `creatorExperiments`: Mapping tracking experiments per creator
|
||||
- `ExperimentConfig` struct contains:
|
||||
- `creator`: Experiment initiator
|
||||
- `startTimestamp`: Experiment creation time
|
||||
- `fundingAmount`: Available experiment funds
|
||||
- `isActive`: Current experiment status
|
||||
- `configHash`: Experiment configuration identifier
|
||||
|
||||
## Access Control
|
||||
- Uses OpenZeppelin's `Ownable` for contract-level administration
|
||||
- Experiment creators have exclusive rights to:
|
||||
- Update experiment status
|
||||
- Withdraw experiment funds
|
||||
|
||||
## Security Considerations
|
||||
- `nonReentrant` modifier prevents recursive calls
|
||||
- Strict access controls on critical functions
|
||||
- Validates input parameters
|
||||
- Checks experiment creator before allowing modifications
|
||||
- Requires positive funding amounts
|
||||
- Validates experiment existence before operations
|
||||
|
||||
## Deployment
|
||||
### ChunkNet Deployment Parameters
|
||||
- **RPC URL**: https://rpc.chunknet.org
|
||||
- **Chain ID**: 214562
|
||||
- **Required Constructor Parameters**:
|
||||
1. `_registryAddress`: LabRegistry contract address
|
||||
2. `_helperAddress`: LabHelper contract address
|
||||
|
||||
### Deployment Script Example
|
||||
bash
|
||||
forge create LabContract \
|
||||
--rpc-url https://rpc.chunknet.org \
|
||||
--constructor-args $LAB_REGISTRY_ADDRESS $LAB_HELPER_ADDRESS
|
||||
|
||||
|
||||
## Testing
|
||||
### Recommended Test Scenarios
|
||||
- Experiment creation with valid parameters
|
||||
- Status update permissions
|
||||
- Fund withdrawal mechanics
|
||||
- Edge case handling:
|
||||
- Zero funding amount
|
||||
- Invalid experiment ID
|
||||
- Unauthorized status modifications
|
||||
- Verify event emissions
|
||||
- Validate access control mechanisms
|
||||
|
||||
### Test Coverage
|
||||
- Unit tests for each function
|
||||
- Integration tests with registry interactions
|
||||
- Fuzz testing for input validation
|
||||
- Simulation of various experiment lifecycle stages
|
||||
Loading…
Reference in New Issue
Block a user