mirror of
https://github.com/luxfi/mpc.git
synced 2026-09-24 00:26:24 +00:00
MPC and KMS are protocols, not products. The Go module path github.com/luxfi/mpc remains canonical (location), but user-facing strings (--help, README, comments, banners) are brand-neutral. 'Lux MPC' → 'MPC', 'Lux KMS' → 'KMS', 'Hanzo MPC' → 'MPC'.
5.1 KiB
5.1 KiB
MPC Installation Guide
Prerequisites
Before starting, ensure you have:
- Go 1.23+ installed: Install Go here
- NATS server running
- Consul server running
Clone and Install MPC
Clone the Repository
git clone https://github.com/luxfi/mpc.git
cd mpc
Build the Project
With Make:
make
Or with Go:
go install ./cmd/lux-mpc
go install ./cmd/mpc
Available Commands
lux-mpc: Start a MPC nodempc: CLI utility for peer, identity, and initiator configuration
Running NATS and Consul (Development Only)
⚠️ This setup is insecure and should only be used for development. For production, use a secure cluster environment with TLS certificates.
Docker Compose Configuration
Create a docker-compose.yaml file:
version: "3"
services:
nats-server:
image: nats:latest
container_name: nats-server
command: -js --http_port 8222
ports:
- "4222:4222"
- "8222:8222"
- "6222:6222"
tty: true
restart: always
consul:
image: consul:1.15.4
container_name: consul
ports:
- "8500:8500"
- "8601:8600/udp"
command: "agent -server -ui -node=server-1 -bootstrap-expect=1 -client=0.0.0.0"
restart: always
Start the Services
docker compose up -d
Generate Peer Configuration
mpc generate-peers -n 3
Example output:
{
"node0": "12345678-1234-1234-1234-123456789abc",
"node1": "23456789-2345-2345-2345-23456789abcd",
"node2": "34567890-3456-3456-3456-3456789abcde"
}
Cluster Configuration
1. Create and Update config.yaml
cp config.yaml.template config.yaml
Edit config.yaml:
nats:
url: nats://127.0.0.1:4222
consul:
address: localhost:8500
mpc_threshold: 2
environment: development
badger_password: "your_badger_password"
event_initiator_pubkey: "your_event_initiator_pubkey"
Generate a Strong Password (Recommended)
< /dev/urandom tr -dc 'A-Za-z0-9!@#$^&*()-_=+[]{}|;:,.<>?/~' | head -c 16; echo
Example:
badger_password: "F))ysJp?E]ol&I;^"
2. Register Peers to Consul
mpc register-peers
Event Initiator Setup
Generate the Initiator
mpc generate-initiator
💡 Use
--encryptin production.
Add Public Key to config.yaml
From event_initiator.identity.json:
{
"public_key": "09be5d070816aadaa1b6638cad33e819a8aed7101626f6bf1e0b427412c3408a"
}
Update config.yaml:
event_initiator_pubkey: "09be5d070816aadaa1b6638cad33e819a8aed7101626f6bf1e0b427412c3408a"
Configure Node Identities
1. Create Node Folders
mkdir node{0..2}
for dir in node{0..2}; do
cp config.yaml peers.json "$dir/"
mkdir -p "$dir/identity"
done
2. Generate Identity for Each Node
Example for node0:
cd node0
mpc generate-identity --node node0
💡 For production, use encryption:
mpc generate-identity --node node0 --encrypt
Generate Strong Password for Encryption
< /dev/urandom tr -dc 'A-Za-z0-9!@#$^&*()-_=+[]{}|;:,.<>?/~' | head -c 16; echo
3. Distribute Identity Files to All Nodes
cp identity/node0_identity.json ../node1/identity/node0_identity.json
cp identity/node0_identity.json ../node2/identity/node0_identity.json
Repeat this for node1 and node2.
Folder Structure Example
├── node0
│ ├── config.yaml
│ ├── identity
│ │ ├── node0_identity.json
│ │ ├── node0_private.key
│ │ ├── node1_identity.json
│ │ └── node2_identity.json
│ └── peers.json
├── node1
│ ├── config.yaml
│ ├── identity
│ │ ├── node0_identity.json
│ │ ├── node1_identity.json
│ │ ├── node1_private.key
│ │ └── node2_identity.json
│ └── peers.json
├── node2
│ ├── config.yaml
│ ├── identity
│ │ ├── node0_identity.json
│ │ ├── node1_identity.json
│ │ ├── node2_identity.json
│ │ └── node2_private.key
│ └── peers.json
Start MPC Nodes
Start each node:
cd node0
lux-mpc start -n node0
cd node1
lux-mpc start -n node1
cd node2
lux-mpc start -n node2
💡 In production, avoid hardcoded passwords:
lux-mpc start -n node0 --prompt-credentials
Production Deployment (High Security)
- Use production-grade NATS and Consul clusters.
- Enable TLS certificates on all endpoints.
- Encrypt all keys:
mpc generate-initiator --encrypt mpc generate-identity --node node0 --encrypt - Use
--prompt-credentialsto securely input Badger passwords (avoid hardcoding inconfig.yaml).
Appendix
Decrypt initiator private key with age
age --decrypt -o event_initiator.key event_initiator.key.age
