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.


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



Crash Recovery






Control Flow





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 {

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 {