import {
  ProjectCategory,
  ProjectContent,
  ProjectInterface,
  ProjectStatus,
} from "@/lib/types"

const content: ProjectContent = {
  en: {
    tldr: "PSE Research project that enables the use of the Circom language to develop MPC applications.",
    description: `Circom-MPC is a set of projects designed to compile and run arithmetic and boolean MPC circuits written in Circom.
In this project, we envisioned MPC as a broader paradigm, where MPC serves as an umbrella for generic techniques such as Zero-Knowledge Proof, Garbled Circuit, Secret-Sharing, or Fully Homomorphic Encryption.

Throughout this research the team produced some valuable resources and insights, including:
- Implementation of [circom-2-arithc](https://github.com/namnc/circom-2-arithc), a fork of the Circom compiler that targets arithmetic circuits, which can be fed into any MPC backend
- Example integration of circom-2-arithc with the popular Secret-Sharing based backend MP-SPDZ in [circom-MP-SPDZ](https://github.com/namnc/circom-mp-spdz). 
- Proof of concept application using [MPC-ML](https://hackmd.io/YsWhryEtQ0WwKyerSL8oCw#Circomlib-ML-Patches-and-Benchmarks) with [keras-2-circom-MP-SPDZ](https://github.com/namnc/circom-mp-spdz/blob/main/ML-TESTS.md) which extends keras-2-circom-ZK to [keras-2-circom-MPC](https://github.com/namnc/keras2circom). 
- [Modular Layer benchmarks](https://github.com/namnc/circom-mp-spdz/blob/main/BENCHMARK.md) for the keras model.

We decided to sunset the project for a few reasons: 
- The overwhelming amount of effort to fully implement it. 
- The low current traction of users (could be due to Circom). Hence an [MPC-Framework](https://pse.dev/en/projects/mpc-framework) variant may be of more public interest.
- The existence of competitors such as [Sharemind MPC into Carbyne Stack](https://cyber.ee/uploads/Sharemind_MPC_CS_integration_a01ca476a7.pdf). 

Therefore, we will leave it as a paradigm, and hope that any interested party will pick it up and continue its development.
    `,
  },
}

export const circomMpc: ProjectInterface = {
  id: "circom-mpc",
  category: ProjectCategory.RESEARCH,
  projectStatus: ProjectStatus.INACTIVE,
  section: "pse",
  content,
  image: "",
  imageAlt: "Circom-MPC",
  name: "Circom-MPC",
  links: {
    github: "https://github.com/namnc/circom-2-arithc",
  },
  tags: {
    keywords: ["mpc", "circom", "mp-spdz"],
    themes: ["research"],
  },
}
