The VideoCoin protocol is implemented by two smart contracts: StreamManager and Stream. The StreamManager is unique, i.e. deployed once, while one Stream contract is deployed for each streaming job.
In the system we have different roles which have different purposes.
Manager: an account owning the StreamManager contract. It is responsible for approving stream creation requests, providing ids for input chunks and for maintaining the validator list.
Client: regular account; can request and create streams.
Miner/Transcoder: responsible for video transcoding work; register proofs and transcoded video chunks ids.
Validator: validates the proofs submitted by miners.
StreamManager smart contract is responsible for managing validator list, manages Stream approval and creation and manages refund permissions.
Stream smart contract represents a video transcode job which is created by a client.The video is split in chunks; miners submit proofs for each chunk for each profile and validators approve miner proofs.