# Transmissions
### Background
*Transmissions* is a protocol that provides flexible infrastructure for community publishing under a managed ERC1155 collection ("channel").
### Audit
Contracts audited by [rvierdiiev](https://code4rena.com/@rvierdiiev). Report can be found [here](https://github.com/calabara-hq/transmissions/blob/main/packages/protocol/audits/transmissions_rvierdiiev_06_07_24.md).
### Terminology
* Channel - ERC1155 contract
* Transport Layer - Implementations that inherit the base Channel.sol contract which can support different functionality by overriding 3 virtual functions.
### Architecture
Channels are created by calling the channel factory contract. The factory creates a new ERC1967Proxy to one of the channel type implementations (Infinite or Finite). Anyone can create a channel by interacting with the factory.

The transport layer consists of 2 independent channel modes. Each of the transports enable users to interact with the 1155 collection in different ways.

Finite Channels accept new tokens, and mints of those tokens, for a fixed period. Finite channels are meant to operate as a contest, in which rewards are escrowed by the admins on initialization and distributed after the contest ends by calling a settle function.
Infinite Channels are much simpler. They accept new tokens indefinitely and don't escrow any rewards.
At a high level, admins and managers are assumed to be trusted parties which define the rules of engagement for the channel. Users visit the channel and either create or mint tokens.

Channel.sol inherits from 3 main contracts:
**Rewards.sol** - handles escrow and minting rewards for channels.
**ChannelStorage.sol** - main storage layout for channels.
**ManagedChannel.sol** - Contract module which provides access control, reentrancy, and upgradeablity mechanisms.

In addition, Channel.sol calls to 2 external contracts to manage mint fees and interaction logic.
**Fee Contract** - Custom incentive structure which allows admins / managers to define how mint fees (if any) are distributed to different parties. Mint fees can be set in ETH or ERC20.
**Logic Contract** - Logic which governs the interaction power (num creations / num mints) allotted to users in a channel based on results of external calls to other contracts at runtime.
