Introduction
Welcome to StoffelMPC!
StoffelMPC is a framework for enabling blockchain developers to build MPC as a sidechain applications. StoffelMPC is currently a work in progress. If you want to contribute, please take a look at our github repo.
Sections
StoffelVM: Specification on how the StoffelVM for multiparty computation works
Stoffel Language: DSL for programming confidential applications
Multiparty Computation: How MPC works and what protocols StoffelMPC supports
Network: The networking stack for StoffelMPC
Consensus: The consensus mechanisms used to enable MPC nodes to agree on various kinds of states
Smart Contracts: The smart contracts used to enable developers to integrate StoffelMPC programs into their on-chain applications
MPC Protocols
StoffelMPC aims to support robust general purpose MPC protocols in order to provide developers with a minimal set of reasonable MPC protocols for use with blockchains. StoffelMPC does not make any assumptions about how the MPC nodes are determined and this is up to the developer of the MPC sidechain in question to decide.
Supported MPC Protocols
Robustness
Crash Recovery
HoneyBadgerMPC
StoffelVM
Opcodes
StoffelLang
Types
Control Flow
Functions
Compiler
Consensus
Networking
This document describes the various aspects of networking of StoffelMPC.
User Communication: How a user interacts with a StoffelMPC application
MPC Network Communication: How the nodes in the MPC network communicate together
MPC and Blockchain Interaction: How the nodes in the MPC network interact with the blockchains
User Communication
MPC Node Communication
MPC Network and Blockchain Interaction
Smart Contracts
In order to for the MPC sidechain to retrieve public user inputs and coordinate the computation, they need to interact with a set of smart contracts. These smart contracts are meant to be integrated directly into the blockchain environment that you will be using. At the time of this writing, we only support Solidity.
Collecting Public User Inputs
When a Stoffel lang program is compiled, the compiler will provide a set of smart contracts that developers can use as libraries within their contracts. For functionality that requires getting public inputs from users, the smart contract collecting these inputs will have functions that users will call. These functions will emit events in order to facilitate the collection of public inputs for the MPC nodes.
contract MPCInputs {
TODO
}
Coordinating MPC nodes
In order for the MPC nodes to know when to do the computation, and what public inputs the computation needs, they coordinate through the use of a smart contract. This smart contract also contains information about the identities of the MPC nodes in addition to basic parameters that are dependent on the MPC protocol in use.
contract MPCCoordination {
TODO
}