# Smart Contracts Deep-dive

<figure><img src="https://742781353-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1RpcbvTSHzzPwOSUvgKU%2Fuploads%2FCnuXpd82O6ifzSBw9Pp1%2FFL_Alliance_v3.png?alt=media&#x26;token=9955b273-7ec2-45ff-aaed-b67f467e0066" alt=""><figcaption><p>FL Alliance Smart Contract Interactions.</p></figcaption></figure>

## Core Contracts

### `FlockTaskManager.sol`

**Role:** Factory and lifecycle controller for all `FlockTask` instances.

* **Task Creation**: Deploys new `FlockTask` contracts, passing in initial parameters like `_totalNumberOfRounds`, `_minStakeThreshold`, `_initialRewardPoolSize`, etc.
* **Task Management**: Maintains a list (via `EnumerableSet`) of active or unfinished `FlockTask` addresses.
* **Finish Task**: The owner can mark a task as `finished` if necessary (`finishTask(...)`), removing it from the active set.

### `FlockTask.sol`

**Role:** This contract implements a decentralized and scalable model for round-based federated learning (“FL tasks”).

* **Staking & Roles**: Participants stake tokens to become eligible to join rounds, where they are randomly assigned roles (proposers, voters).
* **Proposal & Voting Rounds**: Each round, selected proposers submit model updates, and voters commit/reveal votes that determine the most popular model via stake-weighted voting.
* **Rewards & Slashing**: Well-behaved participants (correct contributions/votes) receive rewards; dishonest behaviors can be “slashed,” losing a percentage of their stake.

## Libraries

### `LibABDKMathQuad.sol`

**Role**: Quadruple-precision (128-bit) math operations.

* Implements IEEE 754–style floating-point arithmetic for `bytes16` values.
* Provides precision far beyond typical fixed-point or 256-bit integer math.
* Useful for advanced computations like logarithms, exponentials, or rational approximations.

### `LibFlockTask.sol`

Role: Provides specialized numeric and utility functions for federated-learning tasks. Key Functions include:

* **`mulDiv`(uint256 x, uint256 y, uint256 z)**
  * Combines multiplication and division with quadruple precision by leveraging `LibABDKMathQuad`.
* `rand`()
  * Generates a pseudo-random number by hashing block and transaction properties.
