# Team Points Factory

### TeamPointsFactory

#### Factory Logic

**TeamPointsFactory** helps you deploy new **TeamPoints** contracts quickly:

* Deploys a new **TeamPoints** instance with desired initial settings.
* Grants the deployer `ADMIN_ROLE` on the new contract.
* Keeps an on-chain record of all deployed contracts.

#### Factory Functions

**`createTeamPoints(...) -> address`**

```solidity
function createTeamPoints(
    bool isTransferable,
    bool isOutsideTransferAllowed,
    uint256 materialWeight,
    string memory name,
    string memory symbol
) external returns (address contractAddress)
```

* **Parameters**:
  * `isTransferable`: Whether tokens in the new contract can be transferred.
  * `isOutsideTransferAllowed`: Whether transfers to addresses that haven’t previously held tokens are allowed.
  * `materialWeight`: Initial multiplier for material contributions.
  * `name`: ERC20 name for the new tokens.
  * `symbol`: ERC20 symbol for the new tokens.
* **Effects**:
  * Deploys a new **TeamPoints** instance.
  * Sets `msg.sender` as the initial admin of the new contract.
  * Emits a `TeamPointsCreated` event.

**`getTeamPointsCount() -> uint256`**

Returns the total number of **TeamPoints** contracts deployed.

**`getAllTeamPoints() -> address[]`**

Returns an array of all deployed **TeamPoints** contract addresses.
