# 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. ![image](https://hackmd.io/_uploads/HyzF-134R.png) The transport layer consists of 2 independent channel modes. Each of the transports enable users to interact with the 1155 collection in different ways. ![image](https://hackmd.io/_uploads/SJZlmJ3NR.png) 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. ![image](https://hackmd.io/_uploads/ry6eBkn4A.png) 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. ![image](https://hackmd.io/_uploads/r1_JU12EC.png) 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. ![image](https://hackmd.io/_uploads/SyBfDkhEC.png)