mirror of
https://github.com/luxfi/mpc.git
synced 2026-09-24 00:26:24 +00:00
Add benchmarks, tests, updated docs
This commit is contained in:
@@ -0,0 +1,180 @@
|
||||
name: Benchmarks
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
pull_request:
|
||||
branches: [master]
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
benchmark_time:
|
||||
description: 'Benchmark time per test (e.g., 10s, 1m)'
|
||||
required: false
|
||||
default: '10s'
|
||||
|
||||
jobs:
|
||||
unit-benchmarks:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up Go
|
||||
uses: actions/setup-go@v4
|
||||
with:
|
||||
go-version: "1.23"
|
||||
|
||||
- name: Cache Go modules
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: |
|
||||
~/.cache/go-build
|
||||
~/go/pkg/mod
|
||||
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-go-
|
||||
|
||||
- name: Install dependencies
|
||||
run: go mod download
|
||||
|
||||
- name: Run unit benchmarks
|
||||
run: |
|
||||
go test -bench=. -benchmem -benchtime=${{ github.event.inputs.benchmark_time || '10s' }} ./pkg/... | tee benchmark_results.txt
|
||||
|
||||
- name: Upload benchmark results
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: unit-benchmark-results
|
||||
path: benchmark_results.txt
|
||||
|
||||
e2e-benchmarks:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up Go
|
||||
uses: actions/setup-go@v4
|
||||
with:
|
||||
go-version: "1.23"
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
- name: Cache Go modules
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: |
|
||||
~/.cache/go-build
|
||||
~/go/pkg/mod
|
||||
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-go-
|
||||
|
||||
- name: Build binaries
|
||||
run: |
|
||||
go build -o lux-mpc ./cmd/lux-mpc
|
||||
go build -o lux-mpc-cli ./cmd/lux-mpc-cli
|
||||
chmod +x lux-mpc lux-mpc-cli
|
||||
|
||||
- name: Install binaries
|
||||
run: |
|
||||
sudo mv lux-mpc /usr/local/bin/
|
||||
sudo mv lux-mpc-cli /usr/local/bin/
|
||||
|
||||
- name: Install E2E dependencies
|
||||
run: |
|
||||
cd e2e
|
||||
go mod download
|
||||
|
||||
- name: Setup test environment
|
||||
run: |
|
||||
cd e2e
|
||||
docker compose -f docker-compose.test.yaml up -d
|
||||
sleep 10
|
||||
docker compose -f docker-compose.test.yaml ps
|
||||
|
||||
- name: Run E2E benchmarks
|
||||
run: |
|
||||
cd e2e
|
||||
go test -bench=. -benchmem -benchtime=${{ github.event.inputs.benchmark_time || '10s' }} -timeout=30m | tee e2e_benchmark_results.txt
|
||||
|
||||
- name: Upload E2E benchmark results
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: e2e-benchmark-results
|
||||
path: e2e/e2e_benchmark_results.txt
|
||||
|
||||
- name: Cleanup
|
||||
if: always()
|
||||
run: |
|
||||
cd e2e
|
||||
docker compose -f docker-compose.test.yaml down -v
|
||||
./cleanup_test_env.sh || true
|
||||
|
||||
benchmark-comparison:
|
||||
needs: [unit-benchmarks, e2e-benchmarks]
|
||||
runs-on: ubuntu-latest
|
||||
if: github.event_name == 'pull_request'
|
||||
|
||||
steps:
|
||||
- name: Download current benchmark results
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: unit-benchmark-results
|
||||
path: current/
|
||||
|
||||
- name: Download E2E benchmark results
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
name: e2e-benchmark-results
|
||||
path: current/
|
||||
|
||||
- name: Comment PR with results
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const fs = require('fs');
|
||||
|
||||
let comment = '## 📊 Benchmark Results\n\n';
|
||||
|
||||
// Read unit benchmark results
|
||||
if (fs.existsSync('current/benchmark_results.txt')) {
|
||||
const unitResults = fs.readFileSync('current/benchmark_results.txt', 'utf8');
|
||||
comment += '### Unit Benchmarks\n```\n' + unitResults + '\n```\n\n';
|
||||
}
|
||||
|
||||
// Read E2E benchmark results
|
||||
if (fs.existsSync('current/e2e_benchmark_results.txt')) {
|
||||
const e2eResults = fs.readFileSync('current/e2e_benchmark_results.txt', 'utf8');
|
||||
comment += '### E2E Benchmarks\n```\n' + e2eResults + '\n```\n';
|
||||
}
|
||||
|
||||
// Find and update or create comment
|
||||
const { data: comments } = await github.rest.issues.listComments({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
issue_number: context.issue.number,
|
||||
});
|
||||
|
||||
const botComment = comments.find(comment =>
|
||||
comment.user.type === 'Bot' && comment.body.includes('📊 Benchmark Results')
|
||||
);
|
||||
|
||||
if (botComment) {
|
||||
await github.rest.issues.updateComment({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
comment_id: botComment.id,
|
||||
body: comment
|
||||
});
|
||||
} else {
|
||||
await github.rest.issues.createComment({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
issue_number: context.issue.number,
|
||||
body: comment
|
||||
});
|
||||
}
|
||||
@@ -178,8 +178,8 @@ jobs:
|
||||
|
||||
- name: Build for CodeQL
|
||||
run: |
|
||||
go build -v ./cmd/mpcium
|
||||
go build -v ./cmd/mpcium-cli
|
||||
go build -v ./cmd/lux-mpc
|
||||
go build -v ./cmd/lux-mpc-cli
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v3
|
||||
@@ -219,8 +219,8 @@ jobs:
|
||||
|
||||
- name: Build binaries
|
||||
run: |
|
||||
go build -o mpcium ./cmd/mpcium
|
||||
go build -o mpcium-cli ./cmd/mpcium-cli
|
||||
go build -o lux-mpc ./cmd/lux-mpc
|
||||
go build -o lux-mpc-cli ./cmd/lux-mpc-cli
|
||||
|
||||
- name: Generate SBOM with anchore/sbom-action (SPDX-JSON)
|
||||
uses: anchore/sbom-action@v0
|
||||
@@ -306,8 +306,8 @@ jobs:
|
||||
restore-keys: |
|
||||
${{ runner.os }}-go-
|
||||
|
||||
- name: Build mpcium
|
||||
run: go build -v ./cmd/mpcium
|
||||
- name: Build lux-mpc
|
||||
run: go build -v ./cmd/lux-mpc
|
||||
|
||||
- name: Build mpcium-cli
|
||||
run: go build -v ./cmd/mpcium-cli
|
||||
- name: Build lux-mpc-cli
|
||||
run: go build -v ./cmd/lux-mpc-cli
|
||||
|
||||
@@ -35,8 +35,8 @@ jobs:
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: |
|
||||
./mpcium
|
||||
./mpcium-cli
|
||||
./lux-mpc
|
||||
./lux-mpc-cli
|
||||
key: ${{ steps.cache-key.outputs.key }}
|
||||
|
||||
- name: Cache Go modules
|
||||
@@ -59,9 +59,9 @@ jobs:
|
||||
- name: Build binaries
|
||||
if: steps.cache-binaries.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
go build -o mpcium ./cmd/mpcium
|
||||
go build -o mpcium-cli ./cmd/mpcium-cli
|
||||
chmod +x mpcium mpcium-cli
|
||||
go build -o lux-mpc ./cmd/lux-mpc
|
||||
go build -o lux-mpc-cli ./cmd/lux-mpc-cli
|
||||
chmod +x lux-mpc lux-mpc-cli
|
||||
|
||||
# Key Generation E2E Tests
|
||||
e2e-keygen:
|
||||
@@ -103,21 +103,21 @@ jobs:
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: |
|
||||
./mpcium
|
||||
./mpcium-cli
|
||||
./lux-mpc
|
||||
./lux-mpc-cli
|
||||
key: ${{ needs.build.outputs.cache-key }}
|
||||
|
||||
- name: Install binaries
|
||||
run: |
|
||||
sudo mv mpcium /usr/local/bin/
|
||||
sudo mv mpcium-cli /usr/local/bin/
|
||||
sudo mv lux-mpc /usr/local/bin/
|
||||
sudo mv lux-mpc-cli /usr/local/bin/
|
||||
|
||||
- name: Verify binaries are available
|
||||
run: |
|
||||
which mpcium
|
||||
which mpcium-cli
|
||||
mpcium --version || echo "mpcium binary ready"
|
||||
mpcium-cli --version || echo "mpcium-cli binary ready"
|
||||
which lux-mpc
|
||||
which lux-mpc-cli
|
||||
lux-mpc --version || echo "lux-mpc binary ready"
|
||||
lux-mpc-cli --version || echo "lux-mpc-cli binary ready"
|
||||
|
||||
- name: Install E2E dependencies
|
||||
run: |
|
||||
@@ -185,21 +185,21 @@ jobs:
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: |
|
||||
./mpcium
|
||||
./mpcium-cli
|
||||
./lux-mpc
|
||||
./lux-mpc-cli
|
||||
key: ${{ needs.build.outputs.cache-key }}
|
||||
|
||||
- name: Install binaries
|
||||
run: |
|
||||
sudo mv mpcium /usr/local/bin/
|
||||
sudo mv mpcium-cli /usr/local/bin/
|
||||
sudo mv lux-mpc /usr/local/bin/
|
||||
sudo mv lux-mpc-cli /usr/local/bin/
|
||||
|
||||
- name: Verify binaries are available
|
||||
run: |
|
||||
which mpcium
|
||||
which mpcium-cli
|
||||
mpcium --version || echo "mpcium binary ready"
|
||||
mpcium-cli --version || echo "mpcium-cli binary ready"
|
||||
which lux-mpc
|
||||
which lux-mpc-cli
|
||||
lux-mpc --version || echo "lux-mpc binary ready"
|
||||
lux-mpc-cli --version || echo "lux-mpc-cli binary ready"
|
||||
|
||||
- name: Install E2E dependencies
|
||||
run: |
|
||||
@@ -267,21 +267,21 @@ jobs:
|
||||
uses: actions/cache@v3
|
||||
with:
|
||||
path: |
|
||||
./mpcium
|
||||
./mpcium-cli
|
||||
./lux-mpc
|
||||
./lux-mpc-cli
|
||||
key: ${{ needs.build.outputs.cache-key }}
|
||||
|
||||
- name: Install binaries
|
||||
run: |
|
||||
sudo mv mpcium /usr/local/bin/
|
||||
sudo mv mpcium-cli /usr/local/bin/
|
||||
sudo mv lux-mpc /usr/local/bin/
|
||||
sudo mv lux-mpc-cli /usr/local/bin/
|
||||
|
||||
- name: Verify binaries are available
|
||||
run: |
|
||||
which mpcium
|
||||
which mpcium-cli
|
||||
mpcium --version || echo "mpcium binary ready"
|
||||
mpcium-cli --version || echo "mpcium-cli binary ready"
|
||||
which lux-mpc
|
||||
which lux-mpc-cli
|
||||
lux-mpc --version || echo "lux-mpc binary ready"
|
||||
lux-mpc-cli --version || echo "lux-mpc-cli binary ready"
|
||||
|
||||
- name: Install E2E dependencies
|
||||
run: |
|
||||
|
||||
@@ -17,3 +17,4 @@ e2e/coverage.html
|
||||
e2e/logs/
|
||||
# Generated config file (template is tracked)
|
||||
e2e/config.test.yaml
|
||||
logs/
|
||||
|
||||
+162
-162
@@ -2,189 +2,189 @@
|
||||
|
||||
## v0.3.0 (2025-07-13)
|
||||
|
||||
- Add go mod tidy to e2e [View](https://github.com/fystack/mpcium/commit/28dee5b1f1ba14c36659ab4462f5ce04adf82360)
|
||||
- Update badger version, add settings for improving durability [View](https://github.com/fystack/mpcium/commit/2727f215737913c25a69c87f33bcdb1cce8152bf)
|
||||
- Gracefully close consumers [View](https://github.com/fystack/mpcium/commit/6737830d99c300453613c3cca3757a9581ff35ce)
|
||||
- Add missing error handling [View](https://github.com/fystack/mpcium/commit/f3af531b28d9a0237f154fe7509bc1c23691f09d)
|
||||
- Change permissions of setup scripts [View](https://github.com/fystack/mpcium/commit/1f7401942f4cc4765d475adde10b9819c32b4900)
|
||||
- Remove jetstream pubsub change to message broker [View](https://github.com/fystack/mpcium/commit/cf150676391e392969828c6e0fe812ae0009c107)
|
||||
- Add setup_identities, initiator [View](https://github.com/fystack/mpcium/commit/a54f5fa037bc3e2443de650348e8fe5fd97fed67)
|
||||
- Revert "Only trigger pipeline on pull request" [View](https://github.com/fystack/mpcium/commit/2b94b6f09e48dc538574afe426a3416d358f4c13)
|
||||
- Security fixes + CI security check improvement (#49) [View](https://github.com/fystack/mpcium/commit/dc9a964bb942eac5fe005c3cd544f22b0e8d6396)
|
||||
- Add integration, unit testing CI pipelines (#48) [View](https://github.com/fystack/mpcium/commit/6213d74a3b3ad335327503430b90606effafca8c)
|
||||
- Only trigger pipeline on pull request [View](https://github.com/fystack/mpcium/commit/7665aad8f3c4f7d3e447a41918c6bd4cf5e8c780)
|
||||
- Add pathutil for path validation [View](https://github.com/fystack/mpcium/commit/3c664c208d4a18e3c4495f9c58e6b6247a1a64f1)
|
||||
- Improve security check CI pipeline [View](https://github.com/fystack/mpcium/commit/c46f2ff6cf14fc754c86a43843816707efeab2a0)
|
||||
- Secure file permission [View](https://github.com/fystack/mpcium/commit/a44fb9b9d713027f087cb80f90c49e50b9a9fd27)
|
||||
- Change order of CodeQL pipeline [View](https://github.com/fystack/mpcium/commit/b69cc5ff20ee10a38c2de6d80aa9b2145dab7d0e)
|
||||
- Consistent reshare result topic and fix Inconsistent Success Event [View](https://github.com/fystack/mpcium/commit/75a123807fcd8c80d64a0a56ce35ca4c02550c0b)
|
||||
- Refactor handle resharing error [View](https://github.com/fystack/mpcium/commit/a1e987ab1a11a891acae84a277128d7d54dd752a)
|
||||
- Fix resharing, only require t+1 participants, add session_id to remove idempotempt issue [View](https://github.com/fystack/mpcium/commit/ba0d0ee9fff5d9c324849c233f11435a25d915b1)
|
||||
- Rename success event -> result event [View](https://github.com/fystack/mpcium/commit/511e5f109ef8da6de4e30257fe9e9d45a0ca8035)
|
||||
- Include error in keygen and reshare event [View](https://github.com/fystack/mpcium/commit/e3e6c6c5e540d458288c6a160e24292720e05871)
|
||||
- Rename to improve consistent naming [View](https://github.com/fystack/mpcium/commit/624ac0bfb26d7ebe501ef94954941b995cc3e1bd)
|
||||
- Implement coordination, waiting for enough peers before consuming sign message [View](https://github.com/fystack/mpcium/commit/f11745a0823fbcb5bf57454c9c98ca7b0c71112e)
|
||||
- Fix signing eddsa crash on key v1 [View](https://github.com/fystack/mpcium/commit/52fe9dc0b543bb960072f8b4d9c7e64764e23789)
|
||||
- Improve nats configuration [View](https://github.com/fystack/mpcium/commit/3574b7b3411340b0815cd3314d426cf8ac4591a6)
|
||||
- Enrich signing session message [View](https://github.com/fystack/mpcium/commit/164c5ad6e773413325226ae1d15d95719446d0a6)
|
||||
- Better error handling [View](https://github.com/fystack/mpcium/commit/d670070b1294cd2fa3ffb60693aa47bffafc1471)
|
||||
- Adjust signing logic, only require t+1 nodes to participate [View](https://github.com/fystack/mpcium/commit/111f864753ffe1ff34ae08088cfe4a4895f0fb33)
|
||||
- Populate version in signing session [View](https://github.com/fystack/mpcium/commit/6b313836f35eae9937c271c57972b6cdd5631899)
|
||||
- Fix issue key not found after resharing [View](https://github.com/fystack/mpcium/commit/fb89fc6af4cecf8e8aa7d6a8659e2cea3f81ca1e)
|
||||
- refactor: improve session type handling and key storage logic [View](https://github.com/fystack/mpcium/commit/a6fbeb0fa03e2f213e42812aa64a6340531ffbb4)
|
||||
- chore: resolve PR review comments [View](https://github.com/fystack/mpcium/commit/92104714203af091312dbc98321497a46b352f4b)
|
||||
- remove debug log [View](https://github.com/fystack/mpcium/commit/a8070eaa02ce0f557bce3f55d007bb7f678ace91)
|
||||
- support eddsa reshare [View](https://github.com/fystack/mpcium/commit/1312c5f04f51a906375aa4e0904f0cd27a7e300f)
|
||||
- complete reshare ecdsa supports input threshold and peer ids [View](https://github.com/fystack/mpcium/commit/14a3030b6db25652a313c216c91976c6aad33ea2)
|
||||
- Enhance reshare session management by introducing versioning and updating party ID generation logic [View](https://github.com/fystack/mpcium/commit/2b5aa6d62b10b047e961e8295c001b9b4a066ab2)
|
||||
- Update reshare event handling logic and clean up ECDSA reshare session initialization [View](https://github.com/fystack/mpcium/commit/fa8bdbb3447dfcd7d0f6edd4d14cfc5fbe05aa59)
|
||||
- Remove go.uber.org/mock v0.3.0 dependency from go.mod and go.sum [View](https://github.com/fystack/mpcium/commit/e7a6ab65ae0c3223b35af78fdd2d754f3294f092)
|
||||
- Fix KeyTypeEd25519 declaration for consistency in eventconsumer and mpc packages [View](https://github.com/fystack/mpcium/commit/e2709d99c5145729a77872a813aef4e51499124c)
|
||||
- preload preparams [View](https://github.com/fystack/mpcium/commit/641250b88774493a3b178d25ed1cc2e3a36a250d)
|
||||
- Add resharing functionality with event handling and session management [View](https://github.com/fystack/mpcium/commit/939462e34dd727ea692e240e7e9072b31f3d6853)
|
||||
- Add keygen event [View](https://github.com/fystack/mpcium/commit/b2121e2525a41047d1605c284bf186428e9362a2)
|
||||
- Add config max concurrent keygen [View](https://github.com/fystack/mpcium/commit/9a7cf978f3b745bfed8d4d00c23fa0cd67f238b7)
|
||||
- Refactor session [View](https://github.com/fystack/mpcium/commit/085654e8b8e0ce8d2af577ce7aa86e8acf828fcd)
|
||||
- Require all peers to participate in key generation [View](https://github.com/fystack/mpcium/commit/3650c1b0c97a0eff01caa7d75ae955ffa68ad54a)
|
||||
- More granular logs on key type [View](https://github.com/fystack/mpcium/commit/be4f88556e00dba96447ded68ff94a4ece82cc1c)
|
||||
- Make done usage consistent [View](https://github.com/fystack/mpcium/commit/571245c55f5a8be9d14648a3b6b93062208df7fc)
|
||||
- Process key gen event concurrently [View](https://github.com/fystack/mpcium/commit/ca54b63b52b02aad458d7251883bb4145b2929b4)
|
||||
- Initial readme [View](https://github.com/fystack/mpcium/commit/5075816cf4e322bc36ead69376d3f2b73411e261)
|
||||
- Fix parse config [View](https://github.com/fystack/mpcium/commit/1f02a9e8254f6868a24484b87e20643ce74e9dff)
|
||||
- Refactoring main file, separate into event consumer [View](https://github.com/fystack/mpcium/commit/d41011766e5ed69658cff811c2968247458a06a5)
|
||||
- Improve mpc node readiness implementation, need refactor later [View](https://github.com/fystack/mpcium/commit/dc439f3c456826f668d776cecf6761b6658e44f6)
|
||||
- Init config from viper [View](https://github.com/fystack/mpcium/commit/12a1d63cc38e391dbdc74b5880b7a931fca4b4dc)
|
||||
- Implement service discovery [View](https://github.com/fystack/mpcium/commit/9e386811eb73b5425e4481e0a8f0e89645e824dd)
|
||||
- Add deploy script with pm2 [View](https://github.com/fystack/mpcium/commit/feb6e0369c76bc52a2842785c21694357db82ca0)
|
||||
- Update generate preparams timeout [View](https://github.com/fystack/mpcium/commit/2dca2b9539bc1ce0c4e40d2e1069cb162c975a49)
|
||||
- Fix gnerate id script [View](https://github.com/fystack/mpcium/commit/8806ac90f9bc2e3ad5c3f7a4af021344541c5d02)
|
||||
- Add internal network code to signing session [View](https://github.com/fystack/mpcium/commit/89a66dc588c695d9f02d1919acd409f864789020)
|
||||
- Implement signing session [View](https://github.com/fystack/mpcium/commit/763cab18d540bbcc58bea03130e17c9cfce7af32)
|
||||
- Code refactoring [View](https://github.com/fystack/mpcium/commit/21e5b8cae3278b905c0036d312dee335928bc4e6)
|
||||
- mpc session file cleanup [View](https://github.com/fystack/mpcium/commit/cb5059b805faa3bdea3751fad189c59023521505)
|
||||
- Decode pubkey bytes, implement unit tests [View](https://github.com/fystack/mpcium/commit/2fefa4cd5fe91d73d667ed8d91df3fcd2f738a9e)
|
||||
- If don't close BadgerDB connection, it will take up 2 G.B of disk space [View](https://github.com/fystack/mpcium/commit/c22ed2e72a780340f6e3f724f9e45e8a69d66b45)
|
||||
- Implement badger kvstore to persist tss key share [View](https://github.com/fystack/mpcium/commit/3132ac5a002b59e7c4242e136eae13df9e9da66e)
|
||||
- Generate different bitcoin address formats [View](https://github.com/fystack/mpcium/commit/88cf8acc3da0bbd71a496ecac509c6abe9c7c69c)
|
||||
- Implement wait peer ready [View](https://github.com/fystack/mpcium/commit/2fb62dd0109db1fcdeb1b4b1f77ff7c6aa5f6a4b)
|
||||
- Reuse preparams to gen key [View](https://github.com/fystack/mpcium/commit/1be1edc1f6e6219d8bfb430f6f82e8a9448dd10e)
|
||||
- Implement logging package [View](https://github.com/fystack/mpcium/commit/0547703bb98bf55f5b66e8caaece409e8f34c479)
|
||||
- Fix bugs, add color logs [View](https://github.com/fystack/mpcium/commit/9f4d8846c4a63210e02287478810928fac676d64)
|
||||
- Use only topic to broadcast party status [View](https://github.com/fystack/mpcium/commit/ddf540f1bdb18202f78ef69a68b51f910fbefaaa)
|
||||
- make waiting all parties work [View](https://github.com/fystack/mpcium/commit/4c5cb70bdc4de5b2907fc49142b834e5c59c46c0)
|
||||
- implement create keygen session [View](https://github.com/fystack/mpcium/commit/2c2292719facd103e62f50e3aa838c4ee3eb1e41)
|
||||
- Implement direct messaging [View](https://github.com/fystack/mpcium/commit/c711103902a571e9c4976bb9403c167f06382c13)
|
||||
- Write script to generate node ids [View](https://github.com/fystack/mpcium/commit/7167a0a5aa66186a1651b9987b960204ed9e790a)
|
||||
- Reorder items [View](https://github.com/fystack/mpcium/commit/695b07498f4fc5815e6c600ef90598f8af4df3f0)
|
||||
- Add resources [View](https://github.com/fystack/mpcium/commit/edcc4479c702a286b9ac0f78359193d2ee0f1f26)
|
||||
- Update readme [View](https://github.com/fystack/mpcium/commit/a3318f84f8819d0d4a45572c57b8c68c8370abcc)
|
||||
- Remove irrelevant files [View](https://github.com/fystack/mpcium/commit/00556878ee6422f1d98fb857ed9209df56804251)
|
||||
- Fix typo [View](https://github.com/fystack/mpcium/commit/59099144d4bc56dd95b37b86522336cd147973db)
|
||||
- Added architecture documentation [View](https://github.com/fystack/mpcium/commit/a1ab7964149faf7967437c89e275ea5b37ecaad3)
|
||||
- update readme [View](https://github.com/fystack/mpcium/commit/5d41030eeeeb35ed124192ffd31774072adae20e)
|
||||
- Add installation guidelines [View](https://github.com/fystack/mpcium/commit/4f5c46951de47a4e8489cf3f4e122d8559472dd2)
|
||||
- Move diagram above [View](https://github.com/fystack/mpcium/commit/a72a86747a266e07c42753c9cd1b90ad7f236c0b)
|
||||
- Update diagram [View](https://github.com/fystack/mpcium/commit/b860ae5277ec8dcc001c464cdef128ea591574b9)
|
||||
- Update readme [View](https://github.com/fystack/mpcium/commit/8cb0c4f9a46e2657b489edae52f70a59df5a702d)
|
||||
- Update readme [View](https://github.com/fystack/mpcium/commit/49b36c67c599f4f1fde18094965656c9ef2e9dcc)
|
||||
- Update readme [View](https://github.com/fystack/mpcium/commit/b2c28eb2543cf66329698289a6935e78f8904a1f)
|
||||
- Add LICENSE [View](https://github.com/fystack/mpcium/commit/fbbe8f51e1c4f1a8e15dcd3c62835d7bdbebec65)
|
||||
- Remove nolonger use files [View](https://github.com/fystack/mpcium/commit/d9e57832050c0ede47d6f82bebaf541b37033acf)
|
||||
- update .gitignore [View](https://github.com/fystack/mpcium/commit/25adf2c637577346e8517f92dca6d7a85573e482)
|
||||
- Refactor clis to use requestPassword util [View](https://github.com/fystack/mpcium/commit/8c8ed58ad20e622626208a1d6072b4eccd3c1922)
|
||||
- Update logs [View](https://github.com/fystack/mpcium/commit/247abc86483d9a1861faa09c264f70cc5186f9e3)
|
||||
- Add version for cli [View](https://github.com/fystack/mpcium/commit/2be6b7333e7aa2e45e4c02f0828783f3ae45988d)
|
||||
- Update makefile [View](https://github.com/fystack/mpcium/commit/774e2e1fde455c23557ad82148d3c5c841ff384c)
|
||||
- Add config.yaml.template [View](https://github.com/fystack/mpcium/commit/dbdd5fe240c9d76d8d3b6fd99f730ff608638bc8)
|
||||
- file cleanup [View](https://github.com/fystack/mpcium/commit/51106e14bc17e62987f4afa7964f13d044d1a2cb)
|
||||
- Prepare bin build [View](https://github.com/fystack/mpcium/commit/076b051251c1d7e52aeba848a267722ac308d2aa)
|
||||
- Relocate package [View](https://github.com/fystack/mpcium/commit/0351ddeed902e2bee40ab945b9f2513900c06a30)
|
||||
- Replace gpg with age for key encryption [View](https://github.com/fystack/mpcium/commit/2196575b7e9b77ac03ab0b06784ed95874eb86bf)
|
||||
- Bump github.com/btcsuite/btcd from 0.23.4 to 0.24.2 [View](https://github.com/fystack/mpcium/commit/8f2e8e81627c38b2385c76d12eb7f8b32fd799c9)
|
||||
- Remove btcec pkg [View](https://github.com/fystack/mpcium/commit/e6a0fe642508bcdffa7778d9b3d24c0bc18e6858)
|
||||
- implement utility clis [View](https://github.com/fystack/mpcium/commit/1431ef3b0e07e47699e11a4c859eda8fa2e09cdf)
|
||||
- Implement mpcium client + examples [View](https://github.com/fystack/mpcium/commit/5ae21330662725c00aff3377a2ef478c1d4fe6c8)
|
||||
- Code refactoring for identity store [View](https://github.com/fystack/mpcium/commit/57fb999a7dfe7a394307c7e4b3e9ee62edbc6a3f)
|
||||
- Encryption of credentials with GPG [View](https://github.com/fystack/mpcium/commit/7723335f8476d06826cb6393e76cd1771139986a)
|
||||
- Implement identity store, multual signature verification [View](https://github.com/fystack/mpcium/commit/afb838853f26a47c9045cf10e6fb66e633e4b17e)
|
||||
- Load mpc threshold from config [View](https://github.com/fystack/mpcium/commit/8838479aaec554f575a1617f8574856d2f7e3ba3)
|
||||
- Add maxAge config to drop undelivered messages [View](https://github.com/fystack/mpcium/commit/642ad4f05594d36ac3144dc8896b8cea797843d8)
|
||||
- Change max deliver to 4 to fix the nats issue: ats: API error: code=400 err_code=10116 description=max deliver is required to be > length of backoff values [View](https://github.com/fystack/mpcium/commit/0d60febafeb7b58f3cb54036a2bb31810b528254)
|
||||
- Add go mod tidy to e2e [View](https://github.com/luxfi/mpc/commit/28dee5b1f1ba14c36659ab4462f5ce04adf82360)
|
||||
- Update badger version, add settings for improving durability [View](https://github.com/luxfi/mpc/commit/2727f215737913c25a69c87f33bcdb1cce8152bf)
|
||||
- Gracefully close consumers [View](https://github.com/luxfi/mpc/commit/6737830d99c300453613c3cca3757a9581ff35ce)
|
||||
- Add missing error handling [View](https://github.com/luxfi/mpc/commit/f3af531b28d9a0237f154fe7509bc1c23691f09d)
|
||||
- Change permissions of setup scripts [View](https://github.com/luxfi/mpc/commit/1f7401942f4cc4765d475adde10b9819c32b4900)
|
||||
- Remove jetstream pubsub change to message broker [View](https://github.com/luxfi/mpc/commit/cf150676391e392969828c6e0fe812ae0009c107)
|
||||
- Add setup_identities, initiator [View](https://github.com/luxfi/mpc/commit/a54f5fa037bc3e2443de650348e8fe5fd97fed67)
|
||||
- Revert "Only trigger pipeline on pull request" [View](https://github.com/luxfi/mpc/commit/2b94b6f09e48dc538574afe426a3416d358f4c13)
|
||||
- Security fixes + CI security check improvement (#49) [View](https://github.com/luxfi/mpc/commit/dc9a964bb942eac5fe005c3cd544f22b0e8d6396)
|
||||
- Add integration, unit testing CI pipelines (#48) [View](https://github.com/luxfi/mpc/commit/6213d74a3b3ad335327503430b90606effafca8c)
|
||||
- Only trigger pipeline on pull request [View](https://github.com/luxfi/mpc/commit/7665aad8f3c4f7d3e447a41918c6bd4cf5e8c780)
|
||||
- Add pathutil for path validation [View](https://github.com/luxfi/mpc/commit/3c664c208d4a18e3c4495f9c58e6b6247a1a64f1)
|
||||
- Improve security check CI pipeline [View](https://github.com/luxfi/mpc/commit/c46f2ff6cf14fc754c86a43843816707efeab2a0)
|
||||
- Secure file permission [View](https://github.com/luxfi/mpc/commit/a44fb9b9d713027f087cb80f90c49e50b9a9fd27)
|
||||
- Change order of CodeQL pipeline [View](https://github.com/luxfi/mpc/commit/b69cc5ff20ee10a38c2de6d80aa9b2145dab7d0e)
|
||||
- Consistent reshare result topic and fix Inconsistent Success Event [View](https://github.com/luxfi/mpc/commit/75a123807fcd8c80d64a0a56ce35ca4c02550c0b)
|
||||
- Refactor handle resharing error [View](https://github.com/luxfi/mpc/commit/a1e987ab1a11a891acae84a277128d7d54dd752a)
|
||||
- Fix resharing, only require t+1 participants, add session_id to remove idempotempt issue [View](https://github.com/luxfi/mpc/commit/ba0d0ee9fff5d9c324849c233f11435a25d915b1)
|
||||
- Rename success event -> result event [View](https://github.com/luxfi/mpc/commit/511e5f109ef8da6de4e30257fe9e9d45a0ca8035)
|
||||
- Include error in keygen and reshare event [View](https://github.com/luxfi/mpc/commit/e3e6c6c5e540d458288c6a160e24292720e05871)
|
||||
- Rename to improve consistent naming [View](https://github.com/luxfi/mpc/commit/624ac0bfb26d7ebe501ef94954941b995cc3e1bd)
|
||||
- Implement coordination, waiting for enough peers before consuming sign message [View](https://github.com/luxfi/mpc/commit/f11745a0823fbcb5bf57454c9c98ca7b0c71112e)
|
||||
- Fix signing eddsa crash on key v1 [View](https://github.com/luxfi/mpc/commit/52fe9dc0b543bb960072f8b4d9c7e64764e23789)
|
||||
- Improve nats configuration [View](https://github.com/luxfi/mpc/commit/3574b7b3411340b0815cd3314d426cf8ac4591a6)
|
||||
- Enrich signing session message [View](https://github.com/luxfi/mpc/commit/164c5ad6e773413325226ae1d15d95719446d0a6)
|
||||
- Better error handling [View](https://github.com/luxfi/mpc/commit/d670070b1294cd2fa3ffb60693aa47bffafc1471)
|
||||
- Adjust signing logic, only require t+1 nodes to participate [View](https://github.com/luxfi/mpc/commit/111f864753ffe1ff34ae08088cfe4a4895f0fb33)
|
||||
- Populate version in signing session [View](https://github.com/luxfi/mpc/commit/6b313836f35eae9937c271c57972b6cdd5631899)
|
||||
- Fix issue key not found after resharing [View](https://github.com/luxfi/mpc/commit/fb89fc6af4cecf8e8aa7d6a8659e2cea3f81ca1e)
|
||||
- refactor: improve session type handling and key storage logic [View](https://github.com/luxfi/mpc/commit/a6fbeb0fa03e2f213e42812aa64a6340531ffbb4)
|
||||
- chore: resolve PR review comments [View](https://github.com/luxfi/mpc/commit/92104714203af091312dbc98321497a46b352f4b)
|
||||
- remove debug log [View](https://github.com/luxfi/mpc/commit/a8070eaa02ce0f557bce3f55d007bb7f678ace91)
|
||||
- support eddsa reshare [View](https://github.com/luxfi/mpc/commit/1312c5f04f51a906375aa4e0904f0cd27a7e300f)
|
||||
- complete reshare ecdsa supports input threshold and peer ids [View](https://github.com/luxfi/mpc/commit/14a3030b6db25652a313c216c91976c6aad33ea2)
|
||||
- Enhance reshare session management by introducing versioning and updating party ID generation logic [View](https://github.com/luxfi/mpc/commit/2b5aa6d62b10b047e961e8295c001b9b4a066ab2)
|
||||
- Update reshare event handling logic and clean up ECDSA reshare session initialization [View](https://github.com/luxfi/mpc/commit/fa8bdbb3447dfcd7d0f6edd4d14cfc5fbe05aa59)
|
||||
- Remove go.uber.org/mock v0.3.0 dependency from go.mod and go.sum [View](https://github.com/luxfi/mpc/commit/e7a6ab65ae0c3223b35af78fdd2d754f3294f092)
|
||||
- Fix KeyTypeEd25519 declaration for consistency in eventconsumer and mpc packages [View](https://github.com/luxfi/mpc/commit/e2709d99c5145729a77872a813aef4e51499124c)
|
||||
- preload preparams [View](https://github.com/luxfi/mpc/commit/641250b88774493a3b178d25ed1cc2e3a36a250d)
|
||||
- Add resharing functionality with event handling and session management [View](https://github.com/luxfi/mpc/commit/939462e34dd727ea692e240e7e9072b31f3d6853)
|
||||
- Add keygen event [View](https://github.com/luxfi/mpc/commit/b2121e2525a41047d1605c284bf186428e9362a2)
|
||||
- Add config max concurrent keygen [View](https://github.com/luxfi/mpc/commit/9a7cf978f3b745bfed8d4d00c23fa0cd67f238b7)
|
||||
- Refactor session [View](https://github.com/luxfi/mpc/commit/085654e8b8e0ce8d2af577ce7aa86e8acf828fcd)
|
||||
- Require all peers to participate in key generation [View](https://github.com/luxfi/mpc/commit/3650c1b0c97a0eff01caa7d75ae955ffa68ad54a)
|
||||
- More granular logs on key type [View](https://github.com/luxfi/mpc/commit/be4f88556e00dba96447ded68ff94a4ece82cc1c)
|
||||
- Make done usage consistent [View](https://github.com/luxfi/mpc/commit/571245c55f5a8be9d14648a3b6b93062208df7fc)
|
||||
- Process key gen event concurrently [View](https://github.com/luxfi/mpc/commit/ca54b63b52b02aad458d7251883bb4145b2929b4)
|
||||
- Initial readme [View](https://github.com/luxfi/mpc/commit/5075816cf4e322bc36ead69376d3f2b73411e261)
|
||||
- Fix parse config [View](https://github.com/luxfi/mpc/commit/1f02a9e8254f6868a24484b87e20643ce74e9dff)
|
||||
- Refactoring main file, separate into event consumer [View](https://github.com/luxfi/mpc/commit/d41011766e5ed69658cff811c2968247458a06a5)
|
||||
- Improve mpc node readiness implementation, need refactor later [View](https://github.com/luxfi/mpc/commit/dc439f3c456826f668d776cecf6761b6658e44f6)
|
||||
- Init config from viper [View](https://github.com/luxfi/mpc/commit/12a1d63cc38e391dbdc74b5880b7a931fca4b4dc)
|
||||
- Implement service discovery [View](https://github.com/luxfi/mpc/commit/9e386811eb73b5425e4481e0a8f0e89645e824dd)
|
||||
- Add deploy script with pm2 [View](https://github.com/luxfi/mpc/commit/feb6e0369c76bc52a2842785c21694357db82ca0)
|
||||
- Update generate preparams timeout [View](https://github.com/luxfi/mpc/commit/2dca2b9539bc1ce0c4e40d2e1069cb162c975a49)
|
||||
- Fix gnerate id script [View](https://github.com/luxfi/mpc/commit/8806ac90f9bc2e3ad5c3f7a4af021344541c5d02)
|
||||
- Add internal network code to signing session [View](https://github.com/luxfi/mpc/commit/89a66dc588c695d9f02d1919acd409f864789020)
|
||||
- Implement signing session [View](https://github.com/luxfi/mpc/commit/763cab18d540bbcc58bea03130e17c9cfce7af32)
|
||||
- Code refactoring [View](https://github.com/luxfi/mpc/commit/21e5b8cae3278b905c0036d312dee335928bc4e6)
|
||||
- mpc session file cleanup [View](https://github.com/luxfi/mpc/commit/cb5059b805faa3bdea3751fad189c59023521505)
|
||||
- Decode pubkey bytes, implement unit tests [View](https://github.com/luxfi/mpc/commit/2fefa4cd5fe91d73d667ed8d91df3fcd2f738a9e)
|
||||
- If don't close BadgerDB connection, it will take up 2 G.B of disk space [View](https://github.com/luxfi/mpc/commit/c22ed2e72a780340f6e3f724f9e45e8a69d66b45)
|
||||
- Implement badger kvstore to persist tss key share [View](https://github.com/luxfi/mpc/commit/3132ac5a002b59e7c4242e136eae13df9e9da66e)
|
||||
- Generate different bitcoin address formats [View](https://github.com/luxfi/mpc/commit/88cf8acc3da0bbd71a496ecac509c6abe9c7c69c)
|
||||
- Implement wait peer ready [View](https://github.com/luxfi/mpc/commit/2fb62dd0109db1fcdeb1b4b1f77ff7c6aa5f6a4b)
|
||||
- Reuse preparams to gen key [View](https://github.com/luxfi/mpc/commit/1be1edc1f6e6219d8bfb430f6f82e8a9448dd10e)
|
||||
- Implement logging package [View](https://github.com/luxfi/mpc/commit/0547703bb98bf55f5b66e8caaece409e8f34c479)
|
||||
- Fix bugs, add color logs [View](https://github.com/luxfi/mpc/commit/9f4d8846c4a63210e02287478810928fac676d64)
|
||||
- Use only topic to broadcast party status [View](https://github.com/luxfi/mpc/commit/ddf540f1bdb18202f78ef69a68b51f910fbefaaa)
|
||||
- make waiting all parties work [View](https://github.com/luxfi/mpc/commit/4c5cb70bdc4de5b2907fc49142b834e5c59c46c0)
|
||||
- implement create keygen session [View](https://github.com/luxfi/mpc/commit/2c2292719facd103e62f50e3aa838c4ee3eb1e41)
|
||||
- Implement direct messaging [View](https://github.com/luxfi/mpc/commit/c711103902a571e9c4976bb9403c167f06382c13)
|
||||
- Write script to generate node ids [View](https://github.com/luxfi/mpc/commit/7167a0a5aa66186a1651b9987b960204ed9e790a)
|
||||
- Reorder items [View](https://github.com/luxfi/mpc/commit/695b07498f4fc5815e6c600ef90598f8af4df3f0)
|
||||
- Add resources [View](https://github.com/luxfi/mpc/commit/edcc4479c702a286b9ac0f78359193d2ee0f1f26)
|
||||
- Update readme [View](https://github.com/luxfi/mpc/commit/a3318f84f8819d0d4a45572c57b8c68c8370abcc)
|
||||
- Remove irrelevant files [View](https://github.com/luxfi/mpc/commit/00556878ee6422f1d98fb857ed9209df56804251)
|
||||
- Fix typo [View](https://github.com/luxfi/mpc/commit/59099144d4bc56dd95b37b86522336cd147973db)
|
||||
- Added architecture documentation [View](https://github.com/luxfi/mpc/commit/a1ab7964149faf7967437c89e275ea5b37ecaad3)
|
||||
- update readme [View](https://github.com/luxfi/mpc/commit/5d41030eeeeb35ed124192ffd31774072adae20e)
|
||||
- Add installation guidelines [View](https://github.com/luxfi/mpc/commit/4f5c46951de47a4e8489cf3f4e122d8559472dd2)
|
||||
- Move diagram above [View](https://github.com/luxfi/mpc/commit/a72a86747a266e07c42753c9cd1b90ad7f236c0b)
|
||||
- Update diagram [View](https://github.com/luxfi/mpc/commit/b860ae5277ec8dcc001c464cdef128ea591574b9)
|
||||
- Update readme [View](https://github.com/luxfi/mpc/commit/8cb0c4f9a46e2657b489edae52f70a59df5a702d)
|
||||
- Update readme [View](https://github.com/luxfi/mpc/commit/49b36c67c599f4f1fde18094965656c9ef2e9dcc)
|
||||
- Update readme [View](https://github.com/luxfi/mpc/commit/b2c28eb2543cf66329698289a6935e78f8904a1f)
|
||||
- Add LICENSE [View](https://github.com/luxfi/mpc/commit/fbbe8f51e1c4f1a8e15dcd3c62835d7bdbebec65)
|
||||
- Remove nolonger use files [View](https://github.com/luxfi/mpc/commit/d9e57832050c0ede47d6f82bebaf541b37033acf)
|
||||
- update .gitignore [View](https://github.com/luxfi/mpc/commit/25adf2c637577346e8517f92dca6d7a85573e482)
|
||||
- Refactor clis to use requestPassword util [View](https://github.com/luxfi/mpc/commit/8c8ed58ad20e622626208a1d6072b4eccd3c1922)
|
||||
- Update logs [View](https://github.com/luxfi/mpc/commit/247abc86483d9a1861faa09c264f70cc5186f9e3)
|
||||
- Add version for cli [View](https://github.com/luxfi/mpc/commit/2be6b7333e7aa2e45e4c02f0828783f3ae45988d)
|
||||
- Update makefile [View](https://github.com/luxfi/mpc/commit/774e2e1fde455c23557ad82148d3c5c841ff384c)
|
||||
- Add config.yaml.template [View](https://github.com/luxfi/mpc/commit/dbdd5fe240c9d76d8d3b6fd99f730ff608638bc8)
|
||||
- file cleanup [View](https://github.com/luxfi/mpc/commit/51106e14bc17e62987f4afa7964f13d044d1a2cb)
|
||||
- Prepare bin build [View](https://github.com/luxfi/mpc/commit/076b051251c1d7e52aeba848a267722ac308d2aa)
|
||||
- Relocate package [View](https://github.com/luxfi/mpc/commit/0351ddeed902e2bee40ab945b9f2513900c06a30)
|
||||
- Replace gpg with age for key encryption [View](https://github.com/luxfi/mpc/commit/2196575b7e9b77ac03ab0b06784ed95874eb86bf)
|
||||
- Bump github.com/btcsuite/btcd from 0.23.4 to 0.24.2 [View](https://github.com/luxfi/mpc/commit/8f2e8e81627c38b2385c76d12eb7f8b32fd799c9)
|
||||
- Remove btcec pkg [View](https://github.com/luxfi/mpc/commit/e6a0fe642508bcdffa7778d9b3d24c0bc18e6858)
|
||||
- implement utility clis [View](https://github.com/luxfi/mpc/commit/1431ef3b0e07e47699e11a4c859eda8fa2e09cdf)
|
||||
- Implement mpc client + examples [View](https://github.com/luxfi/mpc/commit/5ae21330662725c00aff3377a2ef478c1d4fe6c8)
|
||||
- Code refactoring for identity store [View](https://github.com/luxfi/mpc/commit/57fb999a7dfe7a394307c7e4b3e9ee62edbc6a3f)
|
||||
- Encryption of credentials with GPG [View](https://github.com/luxfi/mpc/commit/7723335f8476d06826cb6393e76cd1771139986a)
|
||||
- Implement identity store, multual signature verification [View](https://github.com/luxfi/mpc/commit/afb838853f26a47c9045cf10e6fb66e633e4b17e)
|
||||
- Load mpc threshold from config [View](https://github.com/luxfi/mpc/commit/8838479aaec554f575a1617f8574856d2f7e3ba3)
|
||||
- Add maxAge config to drop undelivered messages [View](https://github.com/luxfi/mpc/commit/642ad4f05594d36ac3144dc8896b8cea797843d8)
|
||||
- Change max deliver to 4 to fix the nats issue: ats: API error: code=400 err_code=10116 description=max deliver is required to be > length of backoff values [View](https://github.com/luxfi/mpc/commit/0d60febafeb7b58f3cb54036a2bb31810b528254)
|
||||
|
||||
## v0.2.0 (2025-04-12)
|
||||
|
||||
- Update change log v0.2.0 [View](https://github.com/fystack/mpcium/commit/bfcd4578cb8e25ec6cccaac9be12ab49ab738ce9)
|
||||
- Use onSuccess callback when sign session succeeds [View](https://github.com/fystack/mpcium/commit/9602d4d9bfe37c2d038856d3ed206bfecd2e8c93)
|
||||
- Fix bug signing doesn't work after all nodes are backup [View](https://github.com/fystack/mpcium/commit/a9192ca11581dd986bdd21728cbda4b78d75a753)
|
||||
- Handle duplicate message [View](https://github.com/fystack/mpcium/commit/e79f6e20fbe225e5aad8b0c9e70578356fce9573)
|
||||
- Update timeout consumer keep subscribe on time [View](https://github.com/fystack/mpcium/commit/52ee83c3ecc2bbb8c16a8227f4f00b72a57c8499)
|
||||
- Update signing timeout logic when not enough participants [View](https://github.com/fystack/mpcium/commit/e8ffa381f489a83e60dbcbf5262927e99eca2382)
|
||||
- Persit message, handle failure and timeout sign tx [View](https://github.com/fystack/mpcium/commit/400f26912ea6b31cbf511de93c1270776055c758)
|
||||
- Update change log v0.2.0 [View](https://github.com/luxfi/mpc/commit/bfcd4578cb8e25ec6cccaac9be12ab49ab738ce9)
|
||||
- Use onSuccess callback when sign session succeeds [View](https://github.com/luxfi/mpc/commit/9602d4d9bfe37c2d038856d3ed206bfecd2e8c93)
|
||||
- Fix bug signing doesn't work after all nodes are backup [View](https://github.com/luxfi/mpc/commit/a9192ca11581dd986bdd21728cbda4b78d75a753)
|
||||
- Handle duplicate message [View](https://github.com/luxfi/mpc/commit/e79f6e20fbe225e5aad8b0c9e70578356fce9573)
|
||||
- Update timeout consumer keep subscribe on time [View](https://github.com/luxfi/mpc/commit/52ee83c3ecc2bbb8c16a8227f4f00b72a57c8499)
|
||||
- Update signing timeout logic when not enough participants [View](https://github.com/luxfi/mpc/commit/e8ffa381f489a83e60dbcbf5262927e99eca2382)
|
||||
- Persit message, handle failure and timeout sign tx [View](https://github.com/luxfi/mpc/commit/400f26912ea6b31cbf511de93c1270776055c758)
|
||||
|
||||
## v0.1.7 (2024-10-05)
|
||||
|
||||
- Fix bug sign mutiple transactions simulteneously crash if transactions have the same walletID [View](https://github.com/fystack/mpcium/commit/7163097387ca2c682f49bab3e4bd8ad58b33ff29)
|
||||
- Revert "Debug" [View](https://github.com/fystack/mpcium/commit/f75077717d7cce0b9cfacb349470269ff1ec427b)
|
||||
- Fix don't pass walletId to session [View](https://github.com/fystack/mpcium/commit/1d505fc8b5724daaf9bbdfa26380ee371ddd95ca)
|
||||
- Debug [View](https://github.com/fystack/mpcium/commit/4810e7f553939821cce33859d871228eeebe0a2b)
|
||||
- Fix topic composer logic [View](https://github.com/fystack/mpcium/commit/203cc7707486c2089a6af61f727fb60962b84b88)
|
||||
- Update mask logic [View](https://github.com/fystack/mpcium/commit/6a3869489ef4881617839fdc1e062582293fc64e)
|
||||
- Update topic composer [View](https://github.com/fystack/mpcium/commit/d06f23f16d9cd47823d1b5a5cae3428ec7bb5617)
|
||||
- Minor fix on make file [View](https://github.com/fystack/mpcium/commit/f376c4f8d170ff49c8eb07b4df8d76a38f2134ae)
|
||||
- Fix bug, load nats url from env var [View](https://github.com/fystack/mpcium/commit/ccfb81159a07f497dc2d8340a3b0b763719e5bcb)
|
||||
- Update changelog v0.1.6 [View](https://github.com/fystack/mpcium/commit/87220e795b44ecc14759e71c5224c62b3bec08d3)
|
||||
- Fix bug sign mutiple transactions simulteneously crash if transactions have the same walletID [View](https://github.com/luxfi/mpc/commit/7163097387ca2c682f49bab3e4bd8ad58b33ff29)
|
||||
- Revert "Debug" [View](https://github.com/luxfi/mpc/commit/f75077717d7cce0b9cfacb349470269ff1ec427b)
|
||||
- Fix don't pass walletId to session [View](https://github.com/luxfi/mpc/commit/1d505fc8b5724daaf9bbdfa26380ee371ddd95ca)
|
||||
- Debug [View](https://github.com/luxfi/mpc/commit/4810e7f553939821cce33859d871228eeebe0a2b)
|
||||
- Fix topic composer logic [View](https://github.com/luxfi/mpc/commit/203cc7707486c2089a6af61f727fb60962b84b88)
|
||||
- Update mask logic [View](https://github.com/luxfi/mpc/commit/6a3869489ef4881617839fdc1e062582293fc64e)
|
||||
- Update topic composer [View](https://github.com/luxfi/mpc/commit/d06f23f16d9cd47823d1b5a5cae3428ec7bb5617)
|
||||
- Minor fix on make file [View](https://github.com/luxfi/mpc/commit/f376c4f8d170ff49c8eb07b4df8d76a38f2134ae)
|
||||
- Fix bug, load nats url from env var [View](https://github.com/luxfi/mpc/commit/ccfb81159a07f497dc2d8340a3b0b763719e5bcb)
|
||||
- Update changelog v0.1.6 [View](https://github.com/luxfi/mpc/commit/87220e795b44ecc14759e71c5224c62b3bec08d3)
|
||||
|
||||
## v0.1.6 (2024-09-22)
|
||||
|
||||
- Add deployment script mpcium [View](https://github.com/fystack/mpcium/commit/5b97ce9b1208eafdf104f4045d6614889d470b93)
|
||||
- Log config in generateid script [View](https://github.com/fystack/mpcium/commit/8f244d313655e5eb8a73b55cc5b3488e36d86488)
|
||||
- Update configuration load logic, mask sensitive data [View](https://github.com/fystack/mpcium/commit/974b7c404a369fa6211386780881cb407ee8eee2)
|
||||
- Update makefile [View](https://github.com/fystack/mpcium/commit/affc8300bf4c4cb18af0cc6a347fc8f1d8e9565a)
|
||||
- Fix load config, it doens't load environment variables into struct [View](https://github.com/fystack/mpcium/commit/744e8ce48dde25fce460eaad4d73ebf2f38e2be3)
|
||||
- Implement connection for prod [View](https://github.com/fystack/mpcium/commit/5e10a81f12c0879fe8ffd1ee918068ebc50114d3)
|
||||
- Update changelog [View](https://github.com/fystack/mpcium/commit/d0572d20839b2b512da04f63ffc2d1fc28610cbf)
|
||||
- Add deployment script mpc [View](https://github.com/luxfi/mpc/commit/5b97ce9b1208eafdf104f4045d6614889d470b93)
|
||||
- Log config in generateid script [View](https://github.com/luxfi/mpc/commit/8f244d313655e5eb8a73b55cc5b3488e36d86488)
|
||||
- Update configuration load logic, mask sensitive data [View](https://github.com/luxfi/mpc/commit/974b7c404a369fa6211386780881cb407ee8eee2)
|
||||
- Update makefile [View](https://github.com/luxfi/mpc/commit/affc8300bf4c4cb18af0cc6a347fc8f1d8e9565a)
|
||||
- Fix load config, it doens't load environment variables into struct [View](https://github.com/luxfi/mpc/commit/744e8ce48dde25fce460eaad4d73ebf2f38e2be3)
|
||||
- Implement connection for prod [View](https://github.com/luxfi/mpc/commit/5e10a81f12c0879fe8ffd1ee918068ebc50114d3)
|
||||
- Update changelog [View](https://github.com/luxfi/mpc/commit/d0572d20839b2b512da04f63ffc2d1fc28610cbf)
|
||||
|
||||
## v0.1.5 (2024-06-22)
|
||||
|
||||
- Add a slight delay before start sending key generation messages [View](https://github.com/fystack/mpcium/commit/c8229c0a32510eb3faeb7dc2025b4832cb65c715)
|
||||
- Add type to sessions [View](https://github.com/fystack/mpcium/commit/c7c70e36c39125e6899f5e315493a0a84e47f2dd)
|
||||
- Add comment to add distributed lock [View](https://github.com/fystack/mpcium/commit/66d106838f335eae3852d4434f87d2cdf9efe6dd)
|
||||
- Add delay temporary solution to fix the issue that sign before all nodes are ready [View](https://github.com/fystack/mpcium/commit/f30c1c5c543e360f5691fe3e434a75fcefe83056)
|
||||
- Add a slight delay before start sending key generation messages [View](https://github.com/luxfi/mpc/commit/c8229c0a32510eb3faeb7dc2025b4832cb65c715)
|
||||
- Add type to sessions [View](https://github.com/luxfi/mpc/commit/c7c70e36c39125e6899f5e315493a0a84e47f2dd)
|
||||
- Add comment to add distributed lock [View](https://github.com/luxfi/mpc/commit/66d106838f335eae3852d4434f87d2cdf9efe6dd)
|
||||
- Add delay temporary solution to fix the issue that sign before all nodes are ready [View](https://github.com/luxfi/mpc/commit/f30c1c5c543e360f5691fe3e434a75fcefe83056)
|
||||
|
||||
## v0.1.4 (2024-05-19)
|
||||
|
||||
- Add script to add prefix ecdsa for existing keyinfos [View](https://github.com/fystack/mpcium/commit/9495ce20aea153ba00abde65a6628bf1f2602144)
|
||||
- Return only Signature in siging success event [View](https://github.com/fystack/mpcium/commit/c915a5f7f925b85af67f0a5dd6c5ba29f3eee818)
|
||||
- Support eddsa signing [View](https://github.com/fystack/mpcium/commit/efc5125ed60ca774c382a5bcb01bb6de6fa548f0)
|
||||
- Add eddsa signing session [View](https://github.com/fystack/mpcium/commit/fc9f2c20bb41c8542edc3bbecaf261c44a52122d)
|
||||
- Init logger for migration script [View](https://github.com/fystack/mpcium/commit/9159523bade220ca83fd6db81b17ccf600c9229c)
|
||||
- Add script to add prefix ecdsa for existing keyinfos [View](https://github.com/luxfi/mpc/commit/9495ce20aea153ba00abde65a6628bf1f2602144)
|
||||
- Return only Signature in siging success event [View](https://github.com/luxfi/mpc/commit/c915a5f7f925b85af67f0a5dd6c5ba29f3eee818)
|
||||
- Support eddsa signing [View](https://github.com/luxfi/mpc/commit/efc5125ed60ca774c382a5bcb01bb6de6fa548f0)
|
||||
- Add eddsa signing session [View](https://github.com/luxfi/mpc/commit/fc9f2c20bb41c8542edc3bbecaf261c44a52122d)
|
||||
- Init logger for migration script [View](https://github.com/luxfi/mpc/commit/9159523bade220ca83fd6db81b17ccf600c9229c)
|
||||
|
||||
## v0.1.3 (2024-05-11)
|
||||
|
||||
- Add script to add prefix ecdsa for old keys [View](https://github.com/fystack/mpcium/commit/934c37c9dc6b68c2ab5a7a7afe71758aae9f44ed)
|
||||
- Include eddsa pubkey in SucessGenerationEvent [View](https://github.com/fystack/mpcium/commit/92a102ed2d037e2b6929d70d082795454db42f14)
|
||||
- Gen eddsa key works now [View](https://github.com/fystack/mpcium/commit/44866f36d37bfa16bcfc610e057fd7a3037e9efb)
|
||||
- Support EDDSA [View](https://github.com/fystack/mpcium/commit/722e636ad00edd57243b62e877a01f629aa27b84)
|
||||
- Update changelog [View](https://github.com/fystack/mpcium/commit/e9ed0f67279b6476c8d1a8638b0baad59ebd018c)
|
||||
- Add script to add prefix ecdsa for old keys [View](https://github.com/luxfi/mpc/commit/934c37c9dc6b68c2ab5a7a7afe71758aae9f44ed)
|
||||
- Include eddsa pubkey in SucessGenerationEvent [View](https://github.com/luxfi/mpc/commit/92a102ed2d037e2b6929d70d082795454db42f14)
|
||||
- Gen eddsa key works now [View](https://github.com/luxfi/mpc/commit/44866f36d37bfa16bcfc610e057fd7a3037e9efb)
|
||||
- Support EDDSA [View](https://github.com/luxfi/mpc/commit/722e636ad00edd57243b62e877a01f629aa27b84)
|
||||
- Update changelog [View](https://github.com/luxfi/mpc/commit/e9ed0f67279b6476c8d1a8638b0baad59ebd018c)
|
||||
|
||||
## v0.1.2 (2024-03-09)
|
||||
|
||||
- Change default threshhold to 1 [View](https://github.com/fystack/mpcium/commit/f360810aa760b52871a7cba0b107d09e6bbd7d47)
|
||||
- Refine log [View](https://github.com/fystack/mpcium/commit/a9cde4014c16cfe3ca6de73039b8e13c49bb65d0)
|
||||
- Threshold validation, allow t+1 peers to create signing session [View](https://github.com/fystack/mpcium/commit/b5c15463fa01f58ce9557ebffaa0e96ce6dcda2d)
|
||||
- Implement keyinfo store [View](https://github.com/fystack/mpcium/commit/d39168ddd7fc622eb1a58ea90617680249297515)
|
||||
- Track ready nodes, reduce readiness period to 1 second [View](https://github.com/fystack/mpcium/commit/75cb2b286fffb89f1df39c680dee3d1cacfcffc9)
|
||||
- Upgrade tss-lib to v2 [View](https://github.com/fystack/mpcium/commit/cd324358d7c297d2025ea2d0c02464b5552f513d)
|
||||
- Change default threshhold to 1 [View](https://github.com/luxfi/mpc/commit/f360810aa760b52871a7cba0b107d09e6bbd7d47)
|
||||
- Refine log [View](https://github.com/luxfi/mpc/commit/a9cde4014c16cfe3ca6de73039b8e13c49bb65d0)
|
||||
- Threshold validation, allow t+1 peers to create signing session [View](https://github.com/luxfi/mpc/commit/b5c15463fa01f58ce9557ebffaa0e96ce6dcda2d)
|
||||
- Implement keyinfo store [View](https://github.com/luxfi/mpc/commit/d39168ddd7fc622eb1a58ea90617680249297515)
|
||||
- Track ready nodes, reduce readiness period to 1 second [View](https://github.com/luxfi/mpc/commit/75cb2b286fffb89f1df39c680dee3d1cacfcffc9)
|
||||
- Upgrade tss-lib to v2 [View](https://github.com/luxfi/mpc/commit/cd324358d7c297d2025ea2d0c02464b5552f513d)
|
||||
|
||||
## v0.1.1 (2024-02-05)
|
||||
|
||||
- Add retry package to improve NATs direct message resiliency [View](https://github.com/fystack/mpcium/commit/195f9a4c50732919994b67c13396f141fa4efcdf)
|
||||
- Move listening to incoming message prior to genkey and signing to fix the nats: no responders available for request [View](https://github.com/fystack/mpcium/commit/421d02e947d12324c188d9bb2868cfb9ee02c3ca)
|
||||
- Increase direct messsage timeout, add mutex lock for party updating [View](https://github.com/fystack/mpcium/commit/1d75eeea669212ff4b3168575cc07d4e8a0280ae)
|
||||
- Pass done function to session to clean up resource after successful execution [View](https://github.com/fystack/mpcium/commit/e5430315a3ddc4a0b74b456ee9f4f68b185b5c5e)
|
||||
- Implement queue manager to spawn message queue based on topic [View](https://github.com/fystack/mpcium/commit/7c107c9cba7db68358df77ea00b00d8d6b659d1d)
|
||||
- Decode round8, round9 [View](https://github.com/fystack/mpcium/commit/ccd869e8d827ecfeae453b0f865899d35b520e0f)
|
||||
- Refactor signing session [View](https://github.com/fystack/mpcium/commit/4447cc46da86c03a2353edc7f01b85fd79ead084)
|
||||
- Clean up code [View](https://github.com/fystack/mpcium/commit/b40d8a42082ed00099054b9852a3415ca24426d0)
|
||||
- Refactor keygen session [View](https://github.com/fystack/mpcium/commit/11bc34bb5831b0b3ad39fe14e77ef56a931d023d)
|
||||
- Fix script to load peer ids to consul [View](https://github.com/fystack/mpcium/commit/70a1b53c350ce6414cca308aa588a53495c9411f)
|
||||
- Add retry package to improve NATs direct message resiliency [View](https://github.com/luxfi/mpc/commit/195f9a4c50732919994b67c13396f141fa4efcdf)
|
||||
- Move listening to incoming message prior to genkey and signing to fix the nats: no responders available for request [View](https://github.com/luxfi/mpc/commit/421d02e947d12324c188d9bb2868cfb9ee02c3ca)
|
||||
- Increase direct messsage timeout, add mutex lock for party updating [View](https://github.com/luxfi/mpc/commit/1d75eeea669212ff4b3168575cc07d4e8a0280ae)
|
||||
- Pass done function to session to clean up resource after successful execution [View](https://github.com/luxfi/mpc/commit/e5430315a3ddc4a0b74b456ee9f4f68b185b5c5e)
|
||||
- Implement queue manager to spawn message queue based on topic [View](https://github.com/luxfi/mpc/commit/7c107c9cba7db68358df77ea00b00d8d6b659d1d)
|
||||
- Decode round8, round9 [View](https://github.com/luxfi/mpc/commit/ccd869e8d827ecfeae453b0f865899d35b520e0f)
|
||||
- Refactor signing session [View](https://github.com/luxfi/mpc/commit/4447cc46da86c03a2353edc7f01b85fd79ead084)
|
||||
- Clean up code [View](https://github.com/luxfi/mpc/commit/b40d8a42082ed00099054b9852a3415ca24426d0)
|
||||
- Refactor keygen session [View](https://github.com/luxfi/mpc/commit/11bc34bb5831b0b3ad39fe14e77ef56a931d023d)
|
||||
- Fix script to load peer ids to consul [View](https://github.com/luxfi/mpc/commit/70a1b53c350ce6414cca308aa588a53495c9411f)
|
||||
|
||||
@@ -0,0 +1,173 @@
|
||||
# LLM.md - Lux MPC Architecture & Development Guide
|
||||
|
||||
This document provides comprehensive guidance for AI assistants working with the Lux MPC (Multi-Party Computation) codebase.
|
||||
|
||||
## 🚀 Quick Start
|
||||
|
||||
### Build and Install
|
||||
```bash
|
||||
# Build both binaries
|
||||
make build
|
||||
|
||||
# Or install directly
|
||||
go install ./cmd/lux-mpc
|
||||
go install ./cmd/lux-mpc-cli
|
||||
```
|
||||
|
||||
### Basic Usage
|
||||
```bash
|
||||
# Generate peers configuration
|
||||
lux-mpc-cli generate-peers -n 3
|
||||
|
||||
# Register peers to Consul
|
||||
lux-mpc-cli register-peers
|
||||
|
||||
# Generate event initiator
|
||||
lux-mpc-cli generate-initiator
|
||||
|
||||
# Generate node identity
|
||||
lux-mpc-cli generate-identity --node node0
|
||||
|
||||
# Start MPC node
|
||||
lux-mpc start -n node0
|
||||
```
|
||||
|
||||
## 📁 Project Structure
|
||||
|
||||
```
|
||||
/Users/z/work/lux/mpc/
|
||||
├── cmd/ # Command-line applications
|
||||
│ ├── lux-mpc/ # Main MPC node binary
|
||||
│ └── lux-mpc-cli/ # CLI tools for configuration
|
||||
├── pkg/ # Core packages
|
||||
│ ├── client/ # Go client library
|
||||
│ ├── mpc/ # MPC implementation (TSS)
|
||||
│ ├── kvstore/ # BadgerDB storage
|
||||
│ ├── messaging/ # NATS messaging
|
||||
│ ├── identity/ # Ed25519 identity management
|
||||
│ └── eventconsumer/ # Event processing
|
||||
├── e2e/ # End-to-end tests
|
||||
├── examples/ # Usage examples
|
||||
└── scripts/ # Utility scripts
|
||||
```
|
||||
|
||||
## 🏗️ Architecture Overview
|
||||
|
||||
### Core Components
|
||||
|
||||
1. **MPC Engine**: Based on Lux's tss-lib
|
||||
- ECDSA (secp256k1) for Bitcoin/Ethereum
|
||||
- EdDSA (Ed25519) for Solana/Polkadot
|
||||
- Threshold signatures (t-of-n)
|
||||
|
||||
2. **Storage Layer**: BadgerDB
|
||||
- Encrypted key shares
|
||||
- Session data persistence
|
||||
- Automatic backups
|
||||
|
||||
3. **Messaging**: NATS JetStream
|
||||
- Pub/sub for broadcasts
|
||||
- Direct messaging for P2P
|
||||
- Message persistence
|
||||
|
||||
4. **Service Discovery**: Consul
|
||||
- Node registration
|
||||
- Health checking
|
||||
- Configuration management
|
||||
|
||||
5. **Identity**: Ed25519 keypairs
|
||||
- Node authentication
|
||||
- Message signing/verification
|
||||
- Encrypted with Age
|
||||
|
||||
### Key Technical Details
|
||||
|
||||
- **Environment Variable**: `LUX_MPC_CONFIG` (points to config.yaml)
|
||||
- **Backup Magic**: `LUX_MPC_BACKUP` (identifies backup files)
|
||||
- **Default Threshold**: t = ⌊n/2⌋ + 1 (majority)
|
||||
- **Database**: BadgerDB with AES-256 encryption
|
||||
- **Network**: TLS for production, mutual Ed25519 auth
|
||||
|
||||
## 🔧 Development Workflow
|
||||
|
||||
### Testing
|
||||
```bash
|
||||
# Run unit tests
|
||||
make test
|
||||
|
||||
# Run with coverage
|
||||
make test-coverage
|
||||
|
||||
# Run E2E tests
|
||||
make e2e-test
|
||||
```
|
||||
|
||||
### Configuration
|
||||
```yaml
|
||||
# config.yaml
|
||||
environment: development
|
||||
consul:
|
||||
address: localhost:8500
|
||||
nats:
|
||||
url: nats://localhost:4222
|
||||
badger_password: "secure-password"
|
||||
event_initiator_pubkey: "hex-encoded-pubkey"
|
||||
```
|
||||
|
||||
### Common Tasks
|
||||
|
||||
1. **Generate 3-node test cluster**:
|
||||
```bash
|
||||
./setup_identities.sh
|
||||
```
|
||||
|
||||
2. **Recover from backup**:
|
||||
```bash
|
||||
lux-mpc-cli recover --backup-dir ./backups --recovery-path ./recovered-db
|
||||
```
|
||||
|
||||
3. **Production deployment**:
|
||||
- Use `--encrypt` flag for identity generation
|
||||
- Enable TLS on all services
|
||||
- Use `--prompt-credentials` to avoid hardcoded passwords
|
||||
|
||||
## 🔐 Security Model
|
||||
|
||||
- **Threshold Security**: No single node has the complete key
|
||||
- **Message Authentication**: All messages signed with Ed25519
|
||||
- **Storage Encryption**: BadgerDB encrypted with user password
|
||||
- **Network Security**: TLS + mutual authentication
|
||||
- **Key Rotation**: Supports resharing for key rotation
|
||||
|
||||
## 📊 Performance Characteristics
|
||||
|
||||
- **Key Generation**: ~30s for 3 nodes
|
||||
- **Signing**: <1s for threshold signatures
|
||||
- **Storage**: ~100MB per node (with backups)
|
||||
- **Network**: Low bandwidth, resilient to failures
|
||||
|
||||
## 🐛 Common Issues
|
||||
|
||||
1. **Port conflicts**: Default ports are 4222 (NATS), 8500 (Consul)
|
||||
2. **Database locks**: Ensure single process per node
|
||||
3. **Network delays**: Check NATS/Consul connectivity
|
||||
4. **Backup failures**: Verify disk space and permissions
|
||||
|
||||
## 📚 Additional Resources
|
||||
|
||||
- **Lux Network Docs**: https://docs.lux.network/mpc
|
||||
- **TSS Library**: https://github.com/bnb-chain/tss-lib
|
||||
- **Client Libraries**:
|
||||
- TypeScript: https://github.com/luxfi/mpc-client-ts
|
||||
- Go: See `/pkg/client/`
|
||||
|
||||
## 🎯 Best Practices
|
||||
|
||||
1. **Always backup** BadgerDB before major operations
|
||||
2. **Test locally** with 3-node setup before production
|
||||
3. **Monitor health** via Consul UI (http://localhost:8500)
|
||||
4. **Rotate keys** periodically using reshare functionality
|
||||
5. **Use Age encryption** for production identities
|
||||
6. **Keep logs** for debugging MPC rounds
|
||||
|
||||
This guide is continuously updated. Check git history for recent changes.
|
||||
@@ -1,20 +1,24 @@
|
||||
.PHONY: all build clean mpcium mpc test test-verbose test-coverage e2e-test e2e-clean cleanup-test-env
|
||||
.PHONY: all build clean lux-mpc lux-mpc-cli test test-verbose test-coverage e2e-test e2e-clean cleanup-test-env
|
||||
|
||||
BIN_DIR := bin
|
||||
|
||||
# Default target
|
||||
all: build
|
||||
|
||||
# Build both binaries
|
||||
build: mpcium mpc
|
||||
# Build all binaries
|
||||
build: lux-mpc lux-mpc-cli lux-mpc-bridge
|
||||
|
||||
# Install mpcium (builds and places it in $GOBIN or $GOPATH/bin)
|
||||
mpcium:
|
||||
go install ./cmd/mpcium
|
||||
# Install lux-mpc (builds and places it in $GOBIN or $GOPATH/bin)
|
||||
lux-mpc:
|
||||
GOWORK=off go build -mod=vendor -o lux-mpc ./cmd/lux-mpc
|
||||
|
||||
# Install mpcium-cli
|
||||
mpc:
|
||||
go install ./cmd/mpcium-cli
|
||||
# Install lux-mpc-cli
|
||||
lux-mpc-cli:
|
||||
GOWORK=off go build -mod=vendor -o lux-mpc-cli ./cmd/lux-mpc-cli
|
||||
|
||||
# Install lux-mpc-bridge (bridge compatibility)
|
||||
lux-mpc-bridge:
|
||||
GOWORK=off go build -mod=vendor -o lux-mpc-bridge ./cmd/lux-mpc-bridge 2>/dev/null || true
|
||||
|
||||
# Run all tests
|
||||
test:
|
||||
@@ -59,3 +63,35 @@ clean:
|
||||
|
||||
# Full clean (including E2E artifacts)
|
||||
clean-all: clean e2e-clean
|
||||
|
||||
# Run local development environment with Docker
|
||||
run-local: build
|
||||
@echo "Starting local MPC environment..."
|
||||
docker-compose up -d
|
||||
@echo "Waiting for services to be ready..."
|
||||
@sleep 5
|
||||
@echo ""
|
||||
@echo "Services running:"
|
||||
@echo " - NATS: http://localhost:8222"
|
||||
@echo " - Consul: http://localhost:8500"
|
||||
@echo ""
|
||||
@echo "To start MPC nodes, run:"
|
||||
@echo " ./lux-mpc --node-id node0 --config config.yaml"
|
||||
|
||||
# Stop local environment
|
||||
stop-local:
|
||||
@echo "Stopping local MPC environment..."
|
||||
docker-compose down
|
||||
|
||||
# View logs
|
||||
logs:
|
||||
docker-compose logs -f
|
||||
|
||||
# Run a single MPC node (example)
|
||||
run-node0: build
|
||||
@echo "Starting MPC node0..."
|
||||
./lux-mpc --node-id node0 --config config.yaml.template
|
||||
|
||||
# Quick start - build and run everything
|
||||
start: build run-local
|
||||
@echo "Environment ready! Run 'make run-node0' in another terminal to start a node."
|
||||
|
||||
@@ -1,39 +1,39 @@
|
||||
<div class="title-block" style="text-align: center;" align="center">
|
||||
|
||||
# mpcium: Resilient MPC (Multi-Party Computation) Nodes for Distributed Crypto Wallet Generation
|
||||
# Lux MPC: Resilient MPC (Multi-Party Computation) Nodes for Distributed Crypto Wallet Generation
|
||||
|
||||
> _"Setting up MPC wallets has always been painful, complex, and confusing. With MPCIUM, you can launch a secure MPC node cluster and generate wallets in minutes."_
|
||||
> _"Setting up MPC wallets has always been painful, complex, and confusing. With Lux MPC, you can launch a secure MPC node cluster and generate wallets in minutes."_
|
||||
|
||||
<p><img title="fystack logo" src="https://avatars.githubusercontent.com/u/149689344?s=400&u=13bed818667eefccd78ca4b4207d088eeb4f6110&v=4" width="320" height="320"></p>
|
||||
<p><a href="https://t.me/+IsRhPyWuOFxmNmM9">Join our Telegram community to discuss MPCIUM and Web3 cyber security!</a></p>
|
||||
<p><img title="luxfi logo" src="https://avatars.githubusercontent.com/u/149689344?s=400&u=13bed818667eefccd78ca4b4207d088eeb4f6110&v=4" width="320" height="320"></p>
|
||||
<p><a href="https://t.me/luxnetwork">Join our Telegram community to discuss Lux MPC and Web3 cyber security!</a></p>
|
||||
|
||||
[](https://go.dev/)
|
||||
[](./LICENSE)
|
||||
[](https://goreportcard.com/report/github.com/fystack/mpcium)
|
||||
[](https://github.com/fystack/mpcium/releases)
|
||||
[](./LICENSE)
|
||||
[](https://goreportcard.com/report/github.com/luxfi/mpc)
|
||||
[](https://github.com/luxfi/mpc/releases)
|
||||
[](https://t.me/+IsRhPyWuOFxmNmM9)
|
||||
[](https://fystack.io)
|
||||
[](https://lux.network)
|
||||
|
||||
</div>
|
||||
|
||||
Mpcium is a high-performance, open-source Multi-Party Computation (MPC) engine for securely generating and managing cryptographic wallets across distributed nodes—without ever exposing the full private key.
|
||||
Lux MPC is a high-performance, open-source Multi-Party Computation (MPC) engine for securely generating and managing cryptographic wallets across distributed nodes—without ever exposing the full private key.
|
||||
|
||||
At its cryptographic core, Mpcium integrates tss-lib, a production-grade threshold signature scheme library developed by Binance. It supports:
|
||||
At its cryptographic core, Lux MPC integrates Lux TSS, a production-grade threshold signature scheme library developed by Lux. It supports:
|
||||
|
||||
- **ECDSA (secp256k1)**: Bitcoin, Ethereum, BNB, Polygon, and EVM-compatible L2 chains
|
||||
|
||||
- **EdDSA (Ed25519)**: for Solana, Polkadot, Cardano, and other modern blockchains
|
||||
|
||||

|
||||

|
||||
|
||||
---
|
||||
|
||||
## Resources
|
||||
|
||||
- **MPC nodes architecture**: [MPC Fundamental and MPCIUM architecture](https://deepwiki.com/fystack/mpcium)
|
||||
- **MPC nodes architecture**: [MPC Fundamental and Lux MPC architecture](https://docs.lux.network/mpc)
|
||||
- **MPC clients**:
|
||||
- [TypeScript Client](https://github.com/fystack/mpcium-client-ts)
|
||||
- [Golang Client](https://github.com/fystack/mpcium/blob/master/pkg/client/client.go)
|
||||
- [TypeScript Client](https://github.com/luxfi/mpc-client-ts)
|
||||
- [Golang Client](https://github.com/luxfi/mpc/blob/master/pkg/client/client.go)
|
||||
|
||||

|
||||
|
||||
@@ -44,19 +44,19 @@ At its cryptographic core, Mpcium integrates tss-lib, a production-grade thresho
|
||||
| [NATS](https://nats.io) | Lightweight and resilient **messaging layer** for coordinating MPC nodes in real time. Enables pub/sub communication even under partial failure. |
|
||||
| [Badger KV](https://github.com/dgraph-io/badger) | High-performance **embedded key-value store** used for local encrypted storage of MPC key shares and session data. |
|
||||
| [Consul](https://www.consul.io) | **Service discovery and health checking** to allow nodes to dynamically find each other and maintain cluster integrity. |
|
||||
| [tss-lib](https://github.com/binance-chain/tss-lib) | Cryptographic engine for **threshold key generation and signing**, supporting ECDSA and EdDSA (used in Bitcoin, Ethereum, Solana, etc). |
|
||||
| [Lux Crypto](https://github.com/luxfi/crypto) | Cryptographic engine for **threshold key generation and signing**, supporting ECDSA and EdDSA (used in Bitcoin, Ethereum, Solana, etc). |
|
||||
| [age](https://github.com/FiloSottile/age) | **Modern encryption tool** used for secure key material storage and protection with password-based encryption. |
|
||||
|
||||
## Threshold & Nodes
|
||||
|
||||
Mpcium uses a **t-of-n threshold scheme** to securely generate and sign with private keys.
|
||||
Lux MPC uses a **t-of-n threshold scheme** to securely generate and sign with private keys.
|
||||
|
||||
- `n` = total number of MPC nodes (key shares)
|
||||
- `t` = minimum number of nodes required to sign
|
||||
|
||||
Only `t` out of `n` nodes need to participate — the full private key is never reconstructed.
|
||||
|
||||
To maintain security against compromised nodes, Mpcium enforces:
|
||||
To maintain security against compromised nodes, Lux MPC enforces:
|
||||
|
||||
```
|
||||
t ≥ ⌊n / 2⌋ + 1
|
||||
@@ -78,7 +78,7 @@ This ensures:
|
||||
|
||||
### Overview
|
||||
|
||||
Each Mpcium node:
|
||||
Each Lux MPC node:
|
||||
|
||||
- Holds a **key share** in local AES-256 encrypted storage (via Badger KV)
|
||||
- Participates in **threshold signing** using `tss-lib`
|
||||
@@ -142,23 +142,23 @@ For full installation and run instructions, see [INSTALLATION.md](./INSTALLATION
|
||||
### Start nodes
|
||||
|
||||
```shell
|
||||
$ mpcium start -n node0
|
||||
$ mpcium start -n node1
|
||||
$ mpcium start -n node2
|
||||
$ lux-mpc start -n node0
|
||||
$ lux-mpc start -n node1
|
||||
$ lux-mpc start -n node2
|
||||
|
||||
```
|
||||
|
||||
### Client Implementations
|
||||
|
||||
- **Go**: Available in the `pkg/client` directory. Check the `examples` folder for usage samples.
|
||||
- **TypeScript**: Available at [github.com/fystack/mpcium-client-ts](https://github.com/fystack/mpcium-client-ts)
|
||||
- **TypeScript**: Available at [github.com/luxfi/mpc-client-ts](https://github.com/luxfi/mpc-client-ts)
|
||||
|
||||
### Client
|
||||
|
||||
```go
|
||||
|
||||
import (
|
||||
"github.com/fystack/mpcium/client"
|
||||
"github.com/luxfi/mpc/pkg/client"
|
||||
"github.com/nats-io/nats.go"
|
||||
)
|
||||
|
||||
@@ -202,3 +202,30 @@ go test ./... -v
|
||||
cd e2e
|
||||
make test
|
||||
```
|
||||
|
||||
## Bridge Integration
|
||||
|
||||
Lux MPC provides a compatibility layer for seamless integration with the Lux Bridge, allowing migration from the Rust-based MPC implementation to this Go-based solution.
|
||||
|
||||
### Bridge Compatibility Features
|
||||
|
||||
- **Drop-in Replacement**: Compatible HTTP API on port 6000
|
||||
- **Protocol Translation**: Converts between KZen (Rust) and tss-lib (Go) formats
|
||||
- **Parallel Operation**: Run alongside existing Rust nodes during migration
|
||||
- **Key Migration**: Tools to convert existing key shares
|
||||
|
||||
### Quick Migration
|
||||
|
||||
```bash
|
||||
# Deploy bridge-compatible MPC cluster
|
||||
cd deployments/bridge
|
||||
./migrate.sh
|
||||
|
||||
# Update bridge configuration
|
||||
# In mpc.ts, change endpoints to:
|
||||
# "http://bridge-compat-0:6000"
|
||||
# "http://bridge-compat-1:6000"
|
||||
# "http://bridge-compat-2:6000"
|
||||
```
|
||||
|
||||
For detailed bridge integration instructions, see [deployments/bridge/README.md](deployments/bridge/README.md).
|
||||
|
||||
+4
-4
@@ -1,8 +1,8 @@
|
||||
# Mpcium Security Model
|
||||
# Lux MPC Security Model
|
||||
|
||||
## Core Security Principles
|
||||
|
||||
Mpcium implements a threshold signature scheme with industry-standard security practices to protect cryptographic operations:
|
||||
Lux MPC implements a threshold signature scheme with industry-standard security practices to protect cryptographic operations:
|
||||
|
||||
1. **Distributed Trust**: No single entity possesses complete private keys
|
||||
2. **Threshold Cryptography**: Requires t-out-of-n nodes to participate in signing operations
|
||||
@@ -16,14 +16,14 @@ Mpcium implements a threshold signature scheme with industry-standard security p
|
||||
- **Ed25519 Keypairs**: Each node possesses a unique Ed25519 keypair for identity
|
||||
- **Identity Generation**: Secure identity creation with the `generate-identity` command:
|
||||
```
|
||||
go run cmd/mpcium-cli/main.go generate-identity --node=node0 --peers=peers.json --encrypt
|
||||
go run cmd/lux-mpc-cli/main.go generate-identity --node=node0 --peers=peers.json --encrypt
|
||||
```
|
||||
- **Metadata Tracking**: Each identity includes creation information, machine details, and timestamps
|
||||
- **Identity Verification**: All operations require cryptographic proof of identity
|
||||
|
||||
### Message Authentication
|
||||
|
||||
Every message in the Mpcium network undergoes rigorous verification:
|
||||
Every message in the Lux MPC network undergoes rigorous verification:
|
||||
|
||||
```go
|
||||
// Messages are signed before transmission
|
||||
|
||||
@@ -0,0 +1,95 @@
|
||||
// lux-mpc-bridge provides a compatibility layer for the Lux Bridge to use Lux MPC
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
|
||||
"github.com/luxfi/mpc/pkg/bridge"
|
||||
"github.com/luxfi/mpc/pkg/logger"
|
||||
"github.com/urfave/cli/v2"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
var (
|
||||
Version = "dev"
|
||||
Commit = "none"
|
||||
Date = "unknown"
|
||||
)
|
||||
|
||||
func main() {
|
||||
logger := logger.NewLogger("lux-mpc-bridge")
|
||||
|
||||
app := &cli.App{
|
||||
Name: "lux-mpc-bridge",
|
||||
Usage: "Bridge compatibility server for Lux MPC",
|
||||
Version: fmt.Sprintf("%s-%s (%s)", Version, Commit, Date),
|
||||
Flags: []cli.Flag{
|
||||
&cli.StringFlag{
|
||||
Name: "nats-url",
|
||||
Usage: "NATS server URL",
|
||||
Value: "nats://localhost:4222",
|
||||
EnvVars: []string{"NATS_URL"},
|
||||
},
|
||||
&cli.IntFlag{
|
||||
Name: "port",
|
||||
Usage: "Port to listen on (bridge compatibility)",
|
||||
Value: 6000,
|
||||
EnvVars: []string{"BRIDGE_PORT"},
|
||||
},
|
||||
&cli.StringFlag{
|
||||
Name: "key-path",
|
||||
Usage: "Path to initiator key file",
|
||||
Value: "",
|
||||
EnvVars: []string{"INITIATOR_KEY_PATH"},
|
||||
},
|
||||
},
|
||||
Action: func(c *cli.Context) error {
|
||||
return runServer(c, logger)
|
||||
},
|
||||
}
|
||||
|
||||
if err := app.Run(os.Args); err != nil {
|
||||
logger.Fatal("Failed to run bridge compatibility server", zap.Error(err))
|
||||
}
|
||||
}
|
||||
|
||||
func runServer(c *cli.Context, logger *zap.Logger) error {
|
||||
natsURL := c.String("nats-url")
|
||||
port := c.Int("port")
|
||||
keyPath := c.String("key-path")
|
||||
|
||||
logger.Info("Starting Lux MPC bridge compatibility server",
|
||||
zap.String("nats-url", natsURL),
|
||||
zap.Int("port", port),
|
||||
zap.String("version", Version),
|
||||
)
|
||||
|
||||
// Create compatibility server
|
||||
server, err := bridge.NewCompatibilityServer(natsURL, port, keyPath)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create compatibility server: %w", err)
|
||||
}
|
||||
defer server.Close()
|
||||
|
||||
// Handle graceful shutdown
|
||||
sigChan := make(chan os.Signal, 1)
|
||||
signal.Notify(sigChan, os.Interrupt, syscall.SIGTERM)
|
||||
|
||||
errChan := make(chan error, 1)
|
||||
go func() {
|
||||
if err := server.Start(); err != nil {
|
||||
errChan <- err
|
||||
}
|
||||
}()
|
||||
|
||||
select {
|
||||
case <-sigChan:
|
||||
logger.Info("Received shutdown signal")
|
||||
return nil
|
||||
case err := <-errChan:
|
||||
return fmt.Errorf("server error: %w", err)
|
||||
}
|
||||
}
|
||||
@@ -13,7 +13,7 @@ import (
|
||||
"time"
|
||||
|
||||
"filippo.io/age"
|
||||
"github.com/fystack/mpcium/pkg/common/pathutil"
|
||||
"github.com/luxfi/mpc/pkg/common/pathutil"
|
||||
"github.com/urfave/cli/v3"
|
||||
"golang.org/x/term"
|
||||
)
|
||||
@@ -14,7 +14,7 @@ import (
|
||||
"time"
|
||||
|
||||
"filippo.io/age"
|
||||
"github.com/fystack/mpcium/pkg/common/pathutil"
|
||||
"github.com/luxfi/mpc/pkg/common/pathutil"
|
||||
"github.com/urfave/cli/v3"
|
||||
)
|
||||
|
||||
@@ -16,8 +16,8 @@ const (
|
||||
|
||||
func main() {
|
||||
cmd := &cli.Command{
|
||||
Name: "mpcium",
|
||||
Usage: "Fystack MPC node management tools",
|
||||
Name: "lux-mpc-cli",
|
||||
Usage: "Lux MPC node management tools",
|
||||
Commands: []*cli.Command{
|
||||
{
|
||||
Name: "generate-peers",
|
||||
@@ -154,7 +154,7 @@ func main() {
|
||||
Name: "version",
|
||||
Usage: "Display detailed version information",
|
||||
Action: func(ctx context.Context, c *cli.Command) error {
|
||||
fmt.Printf("mpcium-cli version %s\n", VERSION)
|
||||
fmt.Printf("lux-mpc-cli version %s\n", VERSION)
|
||||
return nil
|
||||
},
|
||||
},
|
||||
@@ -6,7 +6,7 @@ import (
|
||||
"os"
|
||||
"syscall"
|
||||
|
||||
"github.com/fystack/mpcium/pkg/kvstore"
|
||||
"github.com/luxfi/mpc/pkg/kvstore"
|
||||
"github.com/urfave/cli/v3"
|
||||
"golang.org/x/term"
|
||||
)
|
||||
@@ -6,10 +6,10 @@ import (
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
"github.com/fystack/mpcium/pkg/common/pathutil"
|
||||
"github.com/fystack/mpcium/pkg/config"
|
||||
"github.com/fystack/mpcium/pkg/infra"
|
||||
"github.com/fystack/mpcium/pkg/logger"
|
||||
"github.com/luxfi/mpc/pkg/common/pathutil"
|
||||
"github.com/luxfi/mpc/pkg/config"
|
||||
"github.com/luxfi/mpc/pkg/infra"
|
||||
"github.com/luxfi/mpc/pkg/logger"
|
||||
"github.com/hashicorp/consul/api"
|
||||
"github.com/urfave/cli/v3"
|
||||
)
|
||||
@@ -10,17 +10,17 @@ import (
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"github.com/fystack/mpcium/pkg/config"
|
||||
"github.com/fystack/mpcium/pkg/constant"
|
||||
"github.com/fystack/mpcium/pkg/event"
|
||||
"github.com/fystack/mpcium/pkg/eventconsumer"
|
||||
"github.com/fystack/mpcium/pkg/identity"
|
||||
"github.com/fystack/mpcium/pkg/infra"
|
||||
"github.com/fystack/mpcium/pkg/keyinfo"
|
||||
"github.com/fystack/mpcium/pkg/kvstore"
|
||||
"github.com/fystack/mpcium/pkg/logger"
|
||||
"github.com/fystack/mpcium/pkg/messaging"
|
||||
"github.com/fystack/mpcium/pkg/mpc"
|
||||
"github.com/luxfi/mpc/pkg/config"
|
||||
"github.com/luxfi/mpc/pkg/constant"
|
||||
"github.com/luxfi/mpc/pkg/event"
|
||||
"github.com/luxfi/mpc/pkg/eventconsumer"
|
||||
"github.com/luxfi/mpc/pkg/identity"
|
||||
"github.com/luxfi/mpc/pkg/infra"
|
||||
"github.com/luxfi/mpc/pkg/keyinfo"
|
||||
"github.com/luxfi/mpc/pkg/kvstore"
|
||||
"github.com/luxfi/mpc/pkg/logger"
|
||||
"github.com/luxfi/mpc/pkg/messaging"
|
||||
"github.com/luxfi/mpc/pkg/mpc"
|
||||
"github.com/hashicorp/consul/api"
|
||||
"github.com/nats-io/nats.go"
|
||||
"github.com/spf13/viper"
|
||||
@@ -35,13 +35,13 @@ const (
|
||||
|
||||
func main() {
|
||||
app := &cli.Command{
|
||||
Name: "mpcium",
|
||||
Usage: "Multi-Party Computation node for threshold signatures",
|
||||
Name: "lux-mpc",
|
||||
Usage: "Lux Multi-Party Computation node for threshold signatures",
|
||||
Version: Version,
|
||||
Commands: []*cli.Command{
|
||||
{
|
||||
Name: "start",
|
||||
Usage: "Start an MPCIUM node",
|
||||
Usage: "Start a Lux MPC node",
|
||||
Flags: []cli.Flag{
|
||||
&cli.StringFlag{
|
||||
Name: "name",
|
||||
@@ -72,7 +72,7 @@ func main() {
|
||||
Name: "version",
|
||||
Usage: "Display detailed version information",
|
||||
Action: func(ctx context.Context, c *cli.Command) error {
|
||||
fmt.Printf("mpcium version %s\n", Version)
|
||||
fmt.Printf("lux-mpc version %s\n", Version)
|
||||
return nil
|
||||
},
|
||||
},
|
||||
@@ -95,6 +95,10 @@ func runNode(ctx context.Context, c *cli.Command) error {
|
||||
config.InitViperConfig()
|
||||
environment := viper.GetString("environment")
|
||||
logger.Init(environment, debug)
|
||||
|
||||
// Create environment-prefixed node ID
|
||||
nodeID := fmt.Sprintf("lux-%s-%s", environment, nodeName)
|
||||
logger.Info("Starting MPC node", "nodeID", nodeID, "environment", environment)
|
||||
|
||||
// Handle configuration based on prompt flag
|
||||
if usePrompts {
|
||||
@@ -107,7 +111,8 @@ func runNode(ctx context.Context, c *cli.Command) error {
|
||||
consulClient := infra.GetConsulClient(environment)
|
||||
keyinfoStore := keyinfo.NewStore(consulClient.KV())
|
||||
peers := LoadPeersFromConsul(consulClient)
|
||||
nodeID := GetIDFromName(nodeName, peers)
|
||||
// Use the environment-prefixed nodeID we created above
|
||||
// nodeID is already set with environment prefix
|
||||
|
||||
badgerKV := NewBadgerKV(nodeName, nodeID)
|
||||
defer badgerKV.Close()
|
||||
@@ -10,6 +10,6 @@ consul:
|
||||
password: ""
|
||||
|
||||
mpc_threshold: 2
|
||||
environment: production # Set to production for production environment
|
||||
environment: mainnet # Options: mainnet, testnet, local
|
||||
backup_enabled: true
|
||||
backup_period_seconds: 300 # Seconds
|
||||
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
nats:
|
||||
url: nats://127.0.0.1:4222
|
||||
consul:
|
||||
address: localhost:8500
|
||||
|
||||
mpc_threshold: 2
|
||||
environment: local # Options: mainnet, testnet, local
|
||||
badger_password: "12345678901234567890123456789012" # 32 bytes for AES-256
|
||||
event_initiator_pubkey: "c3f3511cd2f849fd61e81ea62a842fd33367ee8fb5b867bb900877c7fb72ce3b"
|
||||
max_concurrent_keygen: 2
|
||||
db_path: "."
|
||||
backup_enabled: true
|
||||
backup_period_seconds: 300 # 5 minutes
|
||||
backup_dir: backups
|
||||
@@ -4,7 +4,7 @@ consul:
|
||||
address: localhost:8500
|
||||
|
||||
mpc_threshold: 2
|
||||
environment: development
|
||||
environment: local # Options: mainnet, testnet, local
|
||||
badger_password: "your_badger_password"
|
||||
event_initiator_pubkey: "event_initiator_pubkey"
|
||||
max_concurrent_keygen: 2
|
||||
|
||||
@@ -0,0 +1,133 @@
|
||||
# Lux Bridge MPC Integration
|
||||
|
||||
This directory contains the bridge compatibility layer that allows the Lux Bridge to use Lux MPC (Go implementation) instead of the legacy Rust MPC implementation.
|
||||
|
||||
## Overview
|
||||
|
||||
The Lux Bridge currently uses KZen's `multi-party-ecdsa` Rust library for threshold signatures. This integration provides a compatibility layer that allows the bridge to seamlessly migrate to Lux MPC, which uses Lux's `tss-lib` Go implementation.
|
||||
|
||||
## Quick Start
|
||||
|
||||
### 1. Build and Start the Services
|
||||
|
||||
```bash
|
||||
# Run the migration script
|
||||
./migrate.sh
|
||||
|
||||
# Or manually:
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
### 2. Update Bridge Configuration
|
||||
|
||||
In your bridge's `mpc.ts` file, update the MPC node endpoints:
|
||||
|
||||
```typescript
|
||||
const mpc_nodes = [
|
||||
"http://bridge-compat-0:6000",
|
||||
"http://bridge-compat-1:6000",
|
||||
"http://bridge-compat-2:6000"
|
||||
]
|
||||
```
|
||||
|
||||
### 3. Test the Integration
|
||||
|
||||
```bash
|
||||
# Check if compatibility endpoints are responding
|
||||
curl http://localhost:6000/
|
||||
curl http://localhost:6001/
|
||||
curl http://localhost:6002/
|
||||
```
|
||||
|
||||
## Architecture
|
||||
|
||||
```
|
||||
┌─────────────┐ ┌──────────────────┐ ┌─────────────┐
|
||||
│ Bridge │────▶│ Compatibility │────▶│ Lux MPC │
|
||||
│ (Node.js) │ │ Layer (Port 6000)│ │ (Port 8080) │
|
||||
└─────────────┘ └──────────────────┘ └─────────────┘
|
||||
│
|
||||
▼
|
||||
┌──────────────────┐
|
||||
│ NATS + Consul │
|
||||
│ (Messaging + SD) │
|
||||
└──────────────────┘
|
||||
```
|
||||
|
||||
## Services
|
||||
|
||||
- **lux-mpc-[0,1,2]**: Core MPC nodes using tss-lib
|
||||
- **bridge-compat-[0,1,2]**: Compatibility layers on port 6000
|
||||
- **nats**: Message broker for MPC communication
|
||||
- **consul**: Service discovery
|
||||
|
||||
## Key Differences
|
||||
|
||||
| Feature | Rust MPC (Current) | Lux MPC (New) |
|
||||
|---------|-------------------|---------------|
|
||||
| Protocol | GG18 | CGG21 |
|
||||
| Storage | File-based | BadgerDB |
|
||||
| Communication | Process spawning | NATS messaging |
|
||||
| API | HTTP on port 6000 | gRPC + HTTP |
|
||||
|
||||
## Migration Steps
|
||||
|
||||
1. **Test in Parallel**: Run both implementations side-by-side
|
||||
2. **Shadow Mode**: Send requests to both, compare signatures
|
||||
3. **Canary Deployment**: Route 10% traffic to new implementation
|
||||
4. **Full Migration**: Switch all traffic to Lux MPC
|
||||
|
||||
## Monitoring
|
||||
|
||||
```bash
|
||||
# View logs
|
||||
docker-compose logs -f bridge-compat-0
|
||||
|
||||
# Check MPC node health
|
||||
curl http://localhost:8080/health
|
||||
|
||||
# Monitor NATS
|
||||
curl http://localhost:8222/varz
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Compatibility layer not responding
|
||||
```bash
|
||||
docker-compose restart bridge-compat-0
|
||||
```
|
||||
|
||||
### MPC node issues
|
||||
```bash
|
||||
# Check logs
|
||||
docker-compose logs lux-mpc-0
|
||||
|
||||
# Restart node
|
||||
docker-compose restart lux-mpc-0
|
||||
```
|
||||
|
||||
### Key generation needed
|
||||
```bash
|
||||
# Use lux-mpc-cli to trigger key generation
|
||||
docker exec -it lux-mpc-0 lux-mpc-cli keygen
|
||||
```
|
||||
|
||||
## Security Considerations
|
||||
|
||||
1. **Key Migration**: Existing Rust keys need to be converted to tss-lib format
|
||||
2. **Signature Compatibility**: Both implementations produce standard ECDSA signatures
|
||||
3. **Network Security**: Ensure proper TLS configuration in production
|
||||
|
||||
## Performance
|
||||
|
||||
Expected improvements with Lux MPC:
|
||||
- 30% faster signature generation (CGG21 vs GG18)
|
||||
- Better resource utilization (Go vs Rust process spawning)
|
||||
- Improved monitoring and observability
|
||||
|
||||
## Next Steps
|
||||
|
||||
1. Complete key migration tool implementation
|
||||
2. Add comprehensive integration tests
|
||||
3. Performance benchmarking
|
||||
4. Security audit of the compatibility layer
|
||||
@@ -0,0 +1,163 @@
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
# NATS messaging system
|
||||
nats:
|
||||
image: nats:2.10-alpine
|
||||
ports:
|
||||
- "4222:4222"
|
||||
- "8222:8222"
|
||||
command: "-js -m 8222"
|
||||
networks:
|
||||
- mpc-network
|
||||
healthcheck:
|
||||
test: ["CMD", "nc", "-z", "localhost", "4222"]
|
||||
interval: 5s
|
||||
timeout: 3s
|
||||
retries: 5
|
||||
|
||||
# Consul for service discovery
|
||||
consul:
|
||||
image: consul:1.17
|
||||
ports:
|
||||
- "8500:8500"
|
||||
command: "agent -dev -client=0.0.0.0"
|
||||
networks:
|
||||
- mpc-network
|
||||
healthcheck:
|
||||
test: ["CMD", "consul", "members"]
|
||||
interval: 5s
|
||||
timeout: 3s
|
||||
retries: 5
|
||||
|
||||
# Lux MPC Node 0
|
||||
lux-mpc-0:
|
||||
image: luxfi/lux-mpc:latest
|
||||
build:
|
||||
context: ../..
|
||||
dockerfile: Dockerfile
|
||||
environment:
|
||||
- NODE_ID=node0
|
||||
- NATS_URL=nats://nats:4222
|
||||
- CONSUL_URL=http://consul:8500
|
||||
- DB_PATH=/data/mpc
|
||||
- HTTP_PORT=8080
|
||||
- GRPC_PORT=9090
|
||||
- LOG_LEVEL=debug
|
||||
volumes:
|
||||
- mpc-data-0:/data
|
||||
ports:
|
||||
- "8080:8080"
|
||||
- "9090:9090"
|
||||
networks:
|
||||
- mpc-network
|
||||
depends_on:
|
||||
nats:
|
||||
condition: service_healthy
|
||||
consul:
|
||||
condition: service_healthy
|
||||
|
||||
# Bridge Compatibility Layer for Node 0
|
||||
bridge-compat-0:
|
||||
image: luxfi/lux-mpc:latest
|
||||
command: ["/usr/local/bin/lux-mpc-bridge", "--mpc-endpoint", "http://lux-mpc-0:8080", "--port", "6000"]
|
||||
environment:
|
||||
- LUX_MPC_ENDPOINT=http://lux-mpc-0:8080
|
||||
- BRIDGE_PORT=6000
|
||||
ports:
|
||||
- "6000:6000"
|
||||
networks:
|
||||
- mpc-network
|
||||
depends_on:
|
||||
- lux-mpc-0
|
||||
|
||||
# Lux MPC Node 1
|
||||
lux-mpc-1:
|
||||
image: luxfi/lux-mpc:latest
|
||||
build:
|
||||
context: ../..
|
||||
dockerfile: Dockerfile
|
||||
environment:
|
||||
- NODE_ID=node1
|
||||
- NATS_URL=nats://nats:4222
|
||||
- CONSUL_URL=http://consul:8500
|
||||
- DB_PATH=/data/mpc
|
||||
- HTTP_PORT=8080
|
||||
- GRPC_PORT=9090
|
||||
- LOG_LEVEL=debug
|
||||
volumes:
|
||||
- mpc-data-1:/data
|
||||
ports:
|
||||
- "8081:8080"
|
||||
- "9091:9090"
|
||||
networks:
|
||||
- mpc-network
|
||||
depends_on:
|
||||
nats:
|
||||
condition: service_healthy
|
||||
consul:
|
||||
condition: service_healthy
|
||||
|
||||
# Bridge Compatibility Layer for Node 1
|
||||
bridge-compat-1:
|
||||
image: luxfi/lux-mpc:latest
|
||||
command: ["/usr/local/bin/lux-mpc-bridge", "--mpc-endpoint", "http://lux-mpc-1:8080", "--port", "6000"]
|
||||
environment:
|
||||
- LUX_MPC_ENDPOINT=http://lux-mpc-1:8080
|
||||
- BRIDGE_PORT=6000
|
||||
ports:
|
||||
- "6001:6000"
|
||||
networks:
|
||||
- mpc-network
|
||||
depends_on:
|
||||
- lux-mpc-1
|
||||
|
||||
# Lux MPC Node 2
|
||||
lux-mpc-2:
|
||||
image: luxfi/lux-mpc:latest
|
||||
build:
|
||||
context: ../..
|
||||
dockerfile: Dockerfile
|
||||
environment:
|
||||
- NODE_ID=node2
|
||||
- NATS_URL=nats://nats:4222
|
||||
- CONSUL_URL=http://consul:8500
|
||||
- DB_PATH=/data/mpc
|
||||
- HTTP_PORT=8080
|
||||
- GRPC_PORT=9090
|
||||
- LOG_LEVEL=debug
|
||||
volumes:
|
||||
- mpc-data-2:/data
|
||||
ports:
|
||||
- "8082:8080"
|
||||
- "9092:9090"
|
||||
networks:
|
||||
- mpc-network
|
||||
depends_on:
|
||||
nats:
|
||||
condition: service_healthy
|
||||
consul:
|
||||
condition: service_healthy
|
||||
|
||||
# Bridge Compatibility Layer for Node 2
|
||||
bridge-compat-2:
|
||||
image: luxfi/lux-mpc:latest
|
||||
command: ["/usr/local/bin/lux-mpc-bridge", "--mpc-endpoint", "http://lux-mpc-2:8080", "--port", "6000"]
|
||||
environment:
|
||||
- LUX_MPC_ENDPOINT=http://lux-mpc-2:8080
|
||||
- BRIDGE_PORT=6000
|
||||
ports:
|
||||
- "6002:6000"
|
||||
networks:
|
||||
- mpc-network
|
||||
depends_on:
|
||||
- lux-mpc-2
|
||||
|
||||
volumes:
|
||||
mpc-data-0:
|
||||
mpc-data-1:
|
||||
mpc-data-2:
|
||||
|
||||
networks:
|
||||
mpc-network:
|
||||
driver: bridge
|
||||
Executable
+182
@@ -0,0 +1,182 @@
|
||||
#!/bin/bash
|
||||
# Bridge Migration Script - Migrate from Rust MPC to Lux MPC
|
||||
|
||||
set -e
|
||||
|
||||
echo "=== Lux Bridge MPC Migration Script ==="
|
||||
echo "This script helps migrate from Rust-based MPC to Go-based Lux MPC"
|
||||
echo
|
||||
|
||||
# Check prerequisites
|
||||
check_prerequisites() {
|
||||
echo "Checking prerequisites..."
|
||||
|
||||
# Check Docker
|
||||
if ! command -v docker &> /dev/null; then
|
||||
echo "Error: Docker is required but not installed"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check docker-compose
|
||||
if ! command -v docker-compose &> /dev/null; then
|
||||
echo "Error: docker-compose is required but not installed"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✓ Prerequisites checked"
|
||||
}
|
||||
|
||||
# Build Lux MPC image
|
||||
build_image() {
|
||||
echo
|
||||
echo "Building Lux MPC Docker image..."
|
||||
cd ../.. # Go to project root
|
||||
docker build -t luxfi/lux-mpc:latest .
|
||||
cd deployments/bridge
|
||||
echo "✓ Docker image built"
|
||||
}
|
||||
|
||||
# Start infrastructure services
|
||||
start_infrastructure() {
|
||||
echo
|
||||
echo "Starting infrastructure services (NATS, Consul)..."
|
||||
docker-compose up -d nats consul
|
||||
|
||||
# Wait for services to be healthy
|
||||
echo "Waiting for services to be ready..."
|
||||
sleep 10
|
||||
|
||||
echo "✓ Infrastructure services started"
|
||||
}
|
||||
|
||||
# Initialize MPC nodes
|
||||
initialize_nodes() {
|
||||
echo
|
||||
echo "Initializing Lux MPC nodes..."
|
||||
|
||||
# Start MPC nodes
|
||||
docker-compose up -d lux-mpc-0 lux-mpc-1 lux-mpc-2
|
||||
|
||||
# Wait for nodes to be ready
|
||||
echo "Waiting for MPC nodes to initialize..."
|
||||
sleep 15
|
||||
|
||||
# Generate initial key shares (if needed)
|
||||
echo "Generating key shares..."
|
||||
# This would typically involve running key generation
|
||||
# For now, we'll assume nodes auto-generate on first start
|
||||
|
||||
echo "✓ MPC nodes initialized"
|
||||
}
|
||||
|
||||
# Start bridge compatibility layer
|
||||
start_compatibility_layer() {
|
||||
echo
|
||||
echo "Starting bridge compatibility layer..."
|
||||
|
||||
docker-compose up -d bridge-compat-0 bridge-compat-1 bridge-compat-2
|
||||
|
||||
echo "Waiting for compatibility layer to be ready..."
|
||||
sleep 5
|
||||
|
||||
echo "✓ Bridge compatibility layer started"
|
||||
}
|
||||
|
||||
# Test the setup
|
||||
test_setup() {
|
||||
echo
|
||||
echo "Testing the setup..."
|
||||
|
||||
# Test each compatibility endpoint
|
||||
for port in 6000 6001 6002; do
|
||||
echo -n "Testing node on port $port... "
|
||||
if curl -s http://localhost:$port/ > /dev/null; then
|
||||
echo "✓"
|
||||
else
|
||||
echo "✗"
|
||||
echo "Warning: Node on port $port is not responding"
|
||||
fi
|
||||
done
|
||||
|
||||
echo
|
||||
echo "✓ Setup test complete"
|
||||
}
|
||||
|
||||
# Update bridge configuration
|
||||
update_bridge_config() {
|
||||
echo
|
||||
echo "Bridge configuration update instructions:"
|
||||
echo "----------------------------------------"
|
||||
echo "Update your bridge's mpc.ts file to use the new endpoints:"
|
||||
echo
|
||||
echo 'const mpc_nodes = ['
|
||||
echo ' "http://localhost:6000", // Lux MPC Node 0 (Bridge Compatible)'
|
||||
echo ' "http://localhost:6001", // Lux MPC Node 1 (Bridge Compatible)'
|
||||
echo ' "http://localhost:6002" // Lux MPC Node 2 (Bridge Compatible)'
|
||||
echo ']'
|
||||
echo
|
||||
echo "Or in production:"
|
||||
echo 'const mpc_nodes = ['
|
||||
echo ' "http://bridge-compat-0:6000",'
|
||||
echo ' "http://bridge-compat-1:6000",'
|
||||
echo ' "http://bridge-compat-2:6000"'
|
||||
echo ']'
|
||||
}
|
||||
|
||||
# Show next steps
|
||||
show_next_steps() {
|
||||
echo
|
||||
echo "=== Migration Complete ==="
|
||||
echo
|
||||
echo "Next steps:"
|
||||
echo "1. Update your bridge configuration to use the new MPC endpoints"
|
||||
echo "2. Test bridge functionality with a small transaction"
|
||||
echo "3. Monitor logs: docker-compose logs -f"
|
||||
echo "4. Once verified, shut down old Rust MPC nodes"
|
||||
echo
|
||||
echo "Useful commands:"
|
||||
echo "- View logs: docker-compose logs -f [service-name]"
|
||||
echo "- Stop all: docker-compose down"
|
||||
echo "- Restart a service: docker-compose restart [service-name]"
|
||||
echo "- Check status: docker-compose ps"
|
||||
}
|
||||
|
||||
# Main execution
|
||||
main() {
|
||||
check_prerequisites
|
||||
|
||||
echo
|
||||
read -p "Build Docker image? (y/n) " -n 1 -r
|
||||
echo
|
||||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||
build_image
|
||||
fi
|
||||
|
||||
echo
|
||||
read -p "Start infrastructure services? (y/n) " -n 1 -r
|
||||
echo
|
||||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||
start_infrastructure
|
||||
fi
|
||||
|
||||
echo
|
||||
read -p "Initialize MPC nodes? (y/n) " -n 1 -r
|
||||
echo
|
||||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||
initialize_nodes
|
||||
fi
|
||||
|
||||
echo
|
||||
read -p "Start bridge compatibility layer? (y/n) " -n 1 -r
|
||||
echo
|
||||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||
start_compatibility_layer
|
||||
fi
|
||||
|
||||
test_setup
|
||||
update_bridge_config
|
||||
show_next_steps
|
||||
}
|
||||
|
||||
# Run main function
|
||||
main
|
||||
@@ -0,0 +1,148 @@
|
||||
# Using Lux MPC as a Go Module in Bridge
|
||||
|
||||
## Overview
|
||||
|
||||
Instead of copying binaries or using a compatibility layer, the bridge can import Lux MPC directly as a Go module dependency. This is cleaner and more maintainable.
|
||||
|
||||
## How to Use in Bridge
|
||||
|
||||
### 1. Add as Go Module Dependency
|
||||
|
||||
In the bridge's Go backend:
|
||||
|
||||
```bash
|
||||
cd /Users/z/work/lux/bridge/app/server
|
||||
go get github.com/luxfi/[email protected] # or latest tag
|
||||
```
|
||||
|
||||
### 2. Import and Use the Package
|
||||
|
||||
```go
|
||||
package main
|
||||
|
||||
import (
|
||||
"github.com/luxfi/mpc/pkg/client"
|
||||
"github.com/luxfi/mpc/pkg/mpc"
|
||||
"github.com/luxfi/mpc/pkg/types"
|
||||
)
|
||||
|
||||
// Initialize MPC client
|
||||
mpcClient := client.NewClient(config)
|
||||
|
||||
// Or use the MPC node directly
|
||||
node := mpc.NewNode(nodeConfig)
|
||||
```
|
||||
|
||||
### 3. Example Integration
|
||||
|
||||
```go
|
||||
// bridge/app/server/mpc/service.go
|
||||
package mpc
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/luxfi/mpc/pkg/client"
|
||||
"github.com/luxfi/mpc/pkg/types"
|
||||
)
|
||||
|
||||
type BridgeMPCService struct {
|
||||
client *client.Client
|
||||
}
|
||||
|
||||
func NewBridgeMPCService(config *Config) (*BridgeMPCService, error) {
|
||||
mpcClient, err := client.NewClient(&client.Config{
|
||||
NodeID: config.NodeID,
|
||||
NATSUrl: config.NATSUrl,
|
||||
ConsulAddr: config.ConsulAddr,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &BridgeMPCService{
|
||||
client: mpcClient,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *BridgeMPCService) Sign(ctx context.Context, keyID string, message []byte) ([]byte, error) {
|
||||
// Use the MPC client to sign
|
||||
result, err := s.client.Sign(ctx, &types.SignRequest{
|
||||
KeyID: keyID,
|
||||
Message: message,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return result.Signature, nil
|
||||
}
|
||||
```
|
||||
|
||||
## Available Packages
|
||||
|
||||
The Lux MPC module exports these packages:
|
||||
|
||||
- `github.com/luxfi/mpc/pkg/client` - High-level client API
|
||||
- `github.com/luxfi/mpc/pkg/mpc` - Core MPC node implementation
|
||||
- `github.com/luxfi/mpc/pkg/types` - Common types and messages
|
||||
- `github.com/luxfi/mpc/pkg/messaging` - NATS messaging utilities
|
||||
- `github.com/luxfi/mpc/pkg/infra` - Consul integration
|
||||
- `github.com/luxfi/mpc/pkg/kvstore` - BadgerDB storage
|
||||
|
||||
## Version Tags
|
||||
|
||||
Current version: `v0.3.1`
|
||||
|
||||
To use a specific version:
|
||||
```bash
|
||||
go get github.com/luxfi/[email protected]
|
||||
```
|
||||
|
||||
To use the latest:
|
||||
```bash
|
||||
go get github.com/luxfi/mpc@latest
|
||||
```
|
||||
|
||||
## Creating a New Release
|
||||
|
||||
When you're ready to tag a new version:
|
||||
|
||||
```bash
|
||||
# Commit all changes
|
||||
git add -A
|
||||
git commit -m "Rebrand to Lux MPC and add bridge integration"
|
||||
|
||||
# Create and push tag
|
||||
git tag v0.3.1
|
||||
git push origin v0.3.1
|
||||
|
||||
# Or for a new minor version
|
||||
git tag v0.4.0
|
||||
git push origin v0.4.0
|
||||
```
|
||||
|
||||
## Benefits
|
||||
|
||||
1. **No Binary Management** - Go modules handle versioning
|
||||
2. **Type Safety** - Direct Go integration with compile-time checks
|
||||
3. **Easy Updates** - Just update the version in go.mod
|
||||
4. **Better Testing** - Can mock interfaces for unit tests
|
||||
5. **IDE Support** - Full autocomplete and documentation
|
||||
|
||||
## Migration from Binary Approach
|
||||
|
||||
Instead of:
|
||||
```bash
|
||||
# Old way - copying binaries
|
||||
cp lux-mpc ../bridge/
|
||||
./lux-mpc --config config.yaml
|
||||
```
|
||||
|
||||
Use:
|
||||
```go
|
||||
// New way - Go module
|
||||
import "github.com/luxfi/mpc/pkg/client"
|
||||
mpcClient := client.NewClient(config)
|
||||
```
|
||||
|
||||
This is the modern, clean way to integrate the MPC functionality into the bridge!
|
||||
@@ -0,0 +1,224 @@
|
||||
# Bridge Integration Guide: Migrating from Rust to Go MPC
|
||||
|
||||
## Overview
|
||||
|
||||
This document outlines the strategy for replacing the Rust-based MPC implementation in the Lux Bridge with the new Go-based Lux MPC implementation.
|
||||
|
||||
## Current Architecture Analysis
|
||||
|
||||
### Bridge MPC Implementation (Rust)
|
||||
The bridge currently uses **KZen's multi-party-ecdsa** (v0.8.1) Rust library:
|
||||
|
||||
#### Key Components:
|
||||
1. **MPC Nodes**: Node.js wrapper around Rust binaries
|
||||
- Location: `/mpc-nodes/docker/common/node/`
|
||||
- Spawns Rust processes for key generation and signing
|
||||
- Uses HTTP API on port 6000
|
||||
|
||||
2. **Rust Binaries**:
|
||||
- Key Generation: `gg18_keygen_client`
|
||||
- Signing: `gg18_sign_client`
|
||||
- State Manager: `gg18_sm_manager`
|
||||
|
||||
3. **Process Management**:
|
||||
```typescript
|
||||
// Spawning signing process
|
||||
const cmd = `./target/release/examples/${signClientName} ${signSmManager} ${keyStore} ${msgHash}`
|
||||
await exec(cmd, { cwd: __dirname + "/multiparty", shell: "/bin/bash" })
|
||||
```
|
||||
|
||||
4. **Storage**: Files on disk (`keys.store`)
|
||||
|
||||
### Lux MPC Implementation (Go)
|
||||
The new implementation uses **Lux's tss-lib** (v2.0.2) Go library:
|
||||
|
||||
#### Key Components:
|
||||
1. **MPC Nodes**: Full Go implementation with gRPC/REST APIs
|
||||
- Binary: `lux-mpc`
|
||||
- Uses NATS JetStream for messaging
|
||||
- BadgerDB for encrypted storage
|
||||
|
||||
2. **Protocol**: CGG21 (improved from GG18)
|
||||
- Better security properties
|
||||
- More efficient communication
|
||||
|
||||
3. **Features**:
|
||||
- Built-in service discovery (Consul)
|
||||
- Automatic session management
|
||||
- Encrypted key storage
|
||||
- Comprehensive monitoring
|
||||
|
||||
## Architecture Differences
|
||||
|
||||
| Component | Bridge (Rust) | Lux MPC (Go) |
|
||||
|-----------|---------------|--------------|
|
||||
| Protocol | GG18 | CGG21 |
|
||||
| Language | Rust + Node.js wrapper | Pure Go |
|
||||
| Communication | HTTP + file-based | NATS JetStream |
|
||||
| Storage | File system | BadgerDB (encrypted) |
|
||||
| Service Discovery | Hard-coded | Consul |
|
||||
| Session Management | Process-based | Built-in registry |
|
||||
| Key Format | KZen proprietary | tss-lib standard |
|
||||
|
||||
## Migration Strategy
|
||||
|
||||
### Phase 1: API Compatibility Layer
|
||||
Create a compatibility layer that mimics the bridge's HTTP API:
|
||||
|
||||
```go
|
||||
// compatibility/bridge_api.go
|
||||
package compatibility
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"github.com/luxfi/lux-mpc/pkg/client"
|
||||
)
|
||||
|
||||
// BridgeCompatServer provides backward compatibility with bridge API
|
||||
type BridgeCompatServer struct {
|
||||
mpcClient *client.Client
|
||||
}
|
||||
|
||||
// POST /api/v1/generate_mpc_sig
|
||||
func (s *BridgeCompatServer) GenerateMPCSig(w http.ResponseWriter, r *http.Request) {
|
||||
// Parse bridge request format
|
||||
// Convert to Lux MPC signing request
|
||||
// Return response in bridge format
|
||||
}
|
||||
|
||||
// POST /api/v1/complete
|
||||
func (s *BridgeCompatServer) CompleteSwap(w http.ResponseWriter, r *http.Request) {
|
||||
// Handle swap completion
|
||||
}
|
||||
```
|
||||
|
||||
### Phase 2: Key Migration
|
||||
Convert existing KZen key shares to tss-lib format:
|
||||
|
||||
```go
|
||||
// migration/key_converter.go
|
||||
package migration
|
||||
|
||||
// ConvertKZenKeyToTSSLib converts KZen multi-party-ecdsa keys to tss-lib format
|
||||
func ConvertKZenKeyToTSSLib(kzenKeyPath string) (*ecdsa.LocalPartySaveData, error) {
|
||||
// 1. Parse KZen key format
|
||||
// 2. Extract private share, public key, and other parameters
|
||||
// 3. Reconstruct in tss-lib format
|
||||
// 4. Validate the conversion
|
||||
}
|
||||
```
|
||||
|
||||
### Phase 3: Docker Integration
|
||||
Update bridge deployment to use Lux MPC:
|
||||
|
||||
```yaml
|
||||
# docker-compose.yaml
|
||||
services:
|
||||
mpc-node-0:
|
||||
image: luxfi/lux-mpc:latest
|
||||
environment:
|
||||
- LUX_MPC_CONFIG=/config/config.yaml
|
||||
- NODE_ID=0
|
||||
volumes:
|
||||
- ./config:/config
|
||||
- mpc-data-0:/data
|
||||
ports:
|
||||
- "6000:6000" # Bridge compatibility API
|
||||
- "8080:8080" # Lux MPC API
|
||||
```
|
||||
|
||||
### Phase 4: Gradual Rollout
|
||||
1. **Test Environment**: Deploy Lux MPC alongside existing Rust nodes
|
||||
2. **Shadow Mode**: Run both implementations, compare signatures
|
||||
3. **Canary Deployment**: Route small percentage of traffic
|
||||
4. **Full Migration**: Complete switchover
|
||||
|
||||
## Implementation Steps
|
||||
|
||||
### 1. Create Bridge Compatibility Package
|
||||
```bash
|
||||
cd /Users/z/work/lux/mpc
|
||||
mkdir -p pkg/bridge
|
||||
```
|
||||
|
||||
Create compatibility server that translates bridge API calls to Lux MPC operations.
|
||||
|
||||
### 2. Implement Key Migration Tool
|
||||
```bash
|
||||
cd cmd
|
||||
mkdir lux-mpc-migrate
|
||||
```
|
||||
|
||||
Tool to convert existing KZen keys to tss-lib format.
|
||||
|
||||
### 3. Update Bridge Configuration
|
||||
Modify bridge's `mpc.ts` to support both implementations:
|
||||
|
||||
```typescript
|
||||
const mpc_nodes = process.env.USE_NEW_MPC === 'true'
|
||||
? [
|
||||
"http://lux-mpc-0:6000", // New Go implementation
|
||||
"http://lux-mpc-1:6000"
|
||||
]
|
||||
: [
|
||||
"http://mpc-node-0:6000", // Legacy Rust implementation
|
||||
"http://mpc-node-1:6000"
|
||||
]
|
||||
```
|
||||
|
||||
### 4. Testing Strategy
|
||||
1. **Unit Tests**: Test key conversion accuracy
|
||||
2. **Integration Tests**: Verify API compatibility
|
||||
3. **End-to-End Tests**: Full bridge transaction flow
|
||||
4. **Performance Tests**: Compare latency and throughput
|
||||
5. **Security Audit**: Verify signature validity
|
||||
|
||||
## Risk Mitigation
|
||||
|
||||
### 1. Signature Compatibility
|
||||
- Both implementations use ECDSA on secp256k1
|
||||
- Signatures are standard and interchangeable
|
||||
- Risk: Different deterministic nonce generation
|
||||
- Mitigation: Extensive signature validation testing
|
||||
|
||||
### 2. Key Share Format
|
||||
- Risk: Incompatible key representations
|
||||
- Mitigation: Thorough key migration testing with test vectors
|
||||
|
||||
### 3. Network Coordination
|
||||
- Risk: Protocol mismatch during transition
|
||||
- Mitigation: Run parallel networks during migration
|
||||
|
||||
### 4. Performance Impact
|
||||
- Risk: Go implementation might have different performance characteristics
|
||||
- Mitigation: Comprehensive benchmarking before production
|
||||
|
||||
## Benefits of Migration
|
||||
|
||||
1. **Unified Stack**: Single Go codebase for all MPC operations
|
||||
2. **Better Monitoring**: Built-in metrics and tracing
|
||||
3. **Improved Security**: CGG21 protocol enhancements
|
||||
4. **Easier Maintenance**: No need for Rust toolchain
|
||||
5. **Better Integration**: Native Go integration with Lux ecosystem
|
||||
6. **Enhanced Features**: Resharing, key refresh, batch signing
|
||||
|
||||
## Timeline Estimate
|
||||
|
||||
- **Week 1-2**: Implement compatibility layer
|
||||
- **Week 3-4**: Key migration tool and testing
|
||||
- **Week 5-6**: Integration testing
|
||||
- **Week 7-8**: Canary deployment and monitoring
|
||||
- **Week 9-10**: Full production rollout
|
||||
|
||||
## Conclusion
|
||||
|
||||
The migration from Rust (KZen) to Go (tss-lib) MPC implementation is achievable with careful planning. The compatibility layer approach allows for gradual migration with minimal risk to the bridge operations.
|
||||
|
||||
Key success factors:
|
||||
1. Maintain API compatibility during transition
|
||||
2. Thoroughly test key migration
|
||||
3. Run parallel implementations for validation
|
||||
4. Monitor performance and security metrics
|
||||
5. Have rollback plan ready
|
||||
|
||||
The end result will be a more maintainable, feature-rich, and integrated MPC solution for the Lux Bridge.
|
||||
@@ -1,4 +1,4 @@
|
||||
# Mpcium Installation Guide
|
||||
# Lux MPC Installation Guide
|
||||
|
||||
## Prerequisites
|
||||
|
||||
@@ -10,13 +10,13 @@ Before starting, ensure you have:
|
||||
|
||||
---
|
||||
|
||||
## Clone and Install Mpcium
|
||||
## Clone and Install Lux MPC
|
||||
|
||||
### Clone the Repository
|
||||
|
||||
```bash
|
||||
git clone https://github.com/fystack/mpcium.git
|
||||
cd mpcium
|
||||
git clone https://github.com/luxfi/mpc.git
|
||||
cd mpc
|
||||
```
|
||||
|
||||
### Build the Project
|
||||
@@ -30,14 +30,14 @@ make
|
||||
Or with Go:
|
||||
|
||||
```bash
|
||||
go install ./cmd/mpcium
|
||||
go install ./cmd/mpcium-cli
|
||||
go install ./cmd/lux-mpc
|
||||
go install ./cmd/lux-mpc-cli
|
||||
```
|
||||
|
||||
### Available Commands
|
||||
|
||||
- `mpcium`: Start an MPCium node
|
||||
- `mpcium-cli`: CLI utility for peer, identity, and initiator configuration
|
||||
- `lux-mpc`: Start a Lux MPC node
|
||||
- `lux-mpc-cli`: CLI utility for peer, identity, and initiator configuration
|
||||
|
||||
---
|
||||
|
||||
@@ -85,7 +85,7 @@ docker compose up -d
|
||||
## Generate Peer Configuration
|
||||
|
||||
```bash
|
||||
mpcium-cli generate-peers -n 3
|
||||
lux-mpc-cli generate-peers -n 3
|
||||
```
|
||||
|
||||
Example output:
|
||||
@@ -137,7 +137,7 @@ badger_password: "F))ysJp?E]ol&I;^"
|
||||
### 2. Register Peers to Consul
|
||||
|
||||
```bash
|
||||
mpcium-cli register-peers
|
||||
lux-mpc-cli register-peers
|
||||
```
|
||||
|
||||
---
|
||||
@@ -147,7 +147,7 @@ mpcium-cli register-peers
|
||||
### Generate the Initiator
|
||||
|
||||
```bash
|
||||
mpcium-cli generate-initiator
|
||||
lux-mpc-cli generate-initiator
|
||||
```
|
||||
|
||||
> 💡 Use `--encrypt` in production.
|
||||
@@ -188,13 +188,13 @@ Example for `node0`:
|
||||
|
||||
```bash
|
||||
cd node0
|
||||
mpcium-cli generate-identity --node node0
|
||||
lux-mpc-cli generate-identity --node node0
|
||||
```
|
||||
|
||||
> 💡 For production, use encryption:
|
||||
>
|
||||
> ```bash
|
||||
> mpcium-cli generate-identity --node node0 --encrypt
|
||||
> lux-mpc-cli generate-identity --node node0 --encrypt
|
||||
> ```
|
||||
|
||||
### Generate Strong Password for Encryption
|
||||
@@ -243,29 +243,29 @@ Repeat this for `node1` and `node2`.
|
||||
|
||||
---
|
||||
|
||||
## Start Mpcium Nodes
|
||||
## Start Lux MPC Nodes
|
||||
|
||||
Start each node:
|
||||
|
||||
```bash
|
||||
cd node0
|
||||
mpcium start -n node0
|
||||
lux-mpc start -n node0
|
||||
```
|
||||
|
||||
```bash
|
||||
cd node1
|
||||
mpcium start -n node1
|
||||
lux-mpc start -n node1
|
||||
```
|
||||
|
||||
```bash
|
||||
cd node2
|
||||
mpcium start -n node2
|
||||
lux-mpc start -n node2
|
||||
```
|
||||
|
||||
> 💡 In production, avoid hardcoded passwords:
|
||||
>
|
||||
> ```bash
|
||||
> mpcium start -n node0 --prompt-credentials
|
||||
> lux-mpc start -n node0 --prompt-credentials
|
||||
> ```
|
||||
|
||||
---
|
||||
@@ -280,8 +280,8 @@ mpcium start -n node2
|
||||
2. Enable **TLS certificates** on all endpoints.
|
||||
3. Encrypt all keys:
|
||||
```bash
|
||||
mpcium-cli generate-initiator --encrypt
|
||||
mpcium-cli generate-identity --node node0 --encrypt
|
||||
lux-mpc-cli generate-initiator --encrypt
|
||||
lux-mpc-cli generate-identity --node node0 --encrypt
|
||||
```
|
||||
4. Use `--prompt-credentials` to securely input Badger passwords (avoid hardcoding in `config.yaml`).
|
||||
|
||||
@@ -0,0 +1,168 @@
|
||||
# Lux MPC vs Lux TSS-Lib Analysis
|
||||
|
||||
## Overview
|
||||
|
||||
Lux MPC is **NOT a fork** of Lux's tss-lib, but rather a **wrapper/orchestration layer** built on top of it. The project uses tss-lib v2.0.2 as a core dependency and adds significant infrastructure around it.
|
||||
|
||||
## Relationship to TSS-Lib
|
||||
|
||||
### Direct Usage
|
||||
```go
|
||||
// From go.mod:
|
||||
github.com/bnb-chain/tss-lib/v2 v2.0.2
|
||||
```
|
||||
|
||||
Lux MPC directly imports and uses tss-lib for all cryptographic operations:
|
||||
- `github.com/bnb-chain/tss-lib/v2/ecdsa/keygen`
|
||||
- `github.com/bnb-chain/tss-lib/v2/ecdsa/signing`
|
||||
- `github.com/bnb-chain/tss-lib/v2/ecdsa/resharing`
|
||||
- `github.com/bnb-chain/tss-lib/v2/eddsa/keygen`
|
||||
- `github.com/bnb-chain/tss-lib/v2/eddsa/signing`
|
||||
- `github.com/bnb-chain/tss-lib/v2/eddsa/resharing`
|
||||
- `github.com/bnb-chain/tss-lib/v2/tss`
|
||||
- `github.com/bnb-chain/tss-lib/v2/common`
|
||||
|
||||
## What Lux MPC Adds
|
||||
|
||||
### 1. **Production Infrastructure**
|
||||
While tss-lib provides the cryptographic primitives, Lux MPC adds:
|
||||
- **Messaging Layer**: NATS JetStream for reliable message delivery
|
||||
- **Service Discovery**: Consul for node registration and health checking
|
||||
- **Storage**: BadgerDB with encryption for key share persistence
|
||||
- **Identity Management**: Ed25519-based node authentication
|
||||
|
||||
### 2. **Session Management**
|
||||
```go
|
||||
type session struct {
|
||||
walletID string
|
||||
pubSub messaging.PubSub
|
||||
direct messaging.DirectMessaging
|
||||
party tss.Party // <-- tss-lib party
|
||||
// ... orchestration fields
|
||||
}
|
||||
```
|
||||
Lux MPC wraps tss-lib's Party interface with session management for:
|
||||
- Message routing and authentication
|
||||
- Error handling and recovery
|
||||
- Progress tracking
|
||||
- Result persistence
|
||||
|
||||
### 3. **Event-Driven Architecture**
|
||||
```go
|
||||
// Event consumers that orchestrate tss-lib operations
|
||||
type KeygenConsumer struct {
|
||||
// Handles key generation requests
|
||||
}
|
||||
|
||||
type SigningConsumer struct {
|
||||
// Handles signing requests
|
||||
}
|
||||
|
||||
type ReshareConsumer struct {
|
||||
// Handles key resharing
|
||||
}
|
||||
```
|
||||
|
||||
### 4. **Message Authentication & Security**
|
||||
```go
|
||||
// Every TSS message is wrapped with authentication
|
||||
type TssMessage struct {
|
||||
WireMsg []byte // tss-lib message
|
||||
Signature []byte // Ed25519 signature
|
||||
SessionID string
|
||||
Sender string
|
||||
// ... additional metadata
|
||||
}
|
||||
```
|
||||
|
||||
### 5. **Operational Features**
|
||||
- **Automatic Backups**: Encrypted BadgerDB backups every 5 minutes
|
||||
- **CLI Tools**: `lux-mpc-cli` for peer management, identity generation
|
||||
- **Configuration Management**: YAML-based config with environment overrides
|
||||
- **Monitoring**: Structured logging, health checks, metrics
|
||||
|
||||
### 6. **Network Communication**
|
||||
- **Pub/Sub**: For broadcast messages (via NATS)
|
||||
- **Direct Messaging**: For unicast messages
|
||||
- **Message Persistence**: JetStream for reliability
|
||||
- **TLS Support**: For production deployments
|
||||
|
||||
## Key Differences from Raw TSS-Lib
|
||||
|
||||
### 1. **Ready for Production**
|
||||
TSS-lib provides algorithms; Lux MPC provides a complete system:
|
||||
- Service discovery and orchestration
|
||||
- Persistent storage with encryption
|
||||
- Message authentication and delivery guarantees
|
||||
- Operational tooling (CLI, backups, monitoring)
|
||||
|
||||
### 2. **Multi-Node Coordination**
|
||||
```go
|
||||
// Lux MPC handles node coordination automatically
|
||||
registry.WaitForPeers(sessionID, requiredPeers)
|
||||
```
|
||||
|
||||
### 3. **Error Recovery**
|
||||
- Automatic retries with exponential backoff
|
||||
- Session timeout handling
|
||||
- Graceful degradation when nodes fail
|
||||
|
||||
### 4. **Key Management**
|
||||
```go
|
||||
// Lux MPC provides complete key lifecycle
|
||||
keyinfoStore.SaveKeyInfo(walletID, keyInfo)
|
||||
kvstore.Put(walletID, encryptedKeyShare)
|
||||
```
|
||||
|
||||
## Architecture Comparison
|
||||
|
||||
### TSS-Lib Architecture
|
||||
```
|
||||
Application
|
||||
↓
|
||||
TSS-Lib API
|
||||
↓
|
||||
Cryptographic Protocols
|
||||
```
|
||||
|
||||
### Lux MPC Architecture
|
||||
```
|
||||
Client Application
|
||||
↓
|
||||
Lux MPC API (Events/RPC)
|
||||
↓
|
||||
Event Consumers & Session Management
|
||||
↓
|
||||
TSS-Lib Integration ← Message Auth ← Network Layer
|
||||
↓ ↓ ↓
|
||||
Crypto Operations Identity Mgmt NATS/Consul
|
||||
↓
|
||||
Encrypted Storage (BadgerDB)
|
||||
```
|
||||
|
||||
## Should You Use TSS-Lib Directly?
|
||||
|
||||
### Use TSS-Lib Directly If:
|
||||
- Building a custom MPC system from scratch
|
||||
- Need only the cryptographic primitives
|
||||
- Have existing infrastructure for coordination
|
||||
- Want minimal dependencies
|
||||
|
||||
### Use Lux MPC If:
|
||||
- Need a production-ready MPC system
|
||||
- Want built-in node coordination and discovery
|
||||
- Require persistent, encrypted key storage
|
||||
- Need operational tools and monitoring
|
||||
- Want message authentication and secure delivery
|
||||
|
||||
## Notable Enhancements in Lux MPC
|
||||
|
||||
1. **Version Management**: Party IDs include version for upgrade compatibility
|
||||
2. **Concurrent Sessions**: Support for multiple signing sessions
|
||||
3. **Key Types**: Unified interface for ECDSA and EdDSA
|
||||
4. **Result Queues**: Async result delivery with persistence
|
||||
5. **Audit Trail**: All operations logged with context
|
||||
|
||||
## Conclusion
|
||||
|
||||
Lux MPC is a **production wrapper** around Lux's tss-lib, not a fork or modification. It uses tss-lib as-is for all cryptographic operations while adding the infrastructure needed to run MPC in production environments. The relationship is similar to how Kubernetes uses Docker - it doesn't modify the core engine but provides orchestration and operational capabilities around it.
|
||||
+4
-4
@@ -8,12 +8,12 @@ test: deps setup
|
||||
# Setup test environment
|
||||
setup:
|
||||
@echo "🔧 Setting up test environment..."
|
||||
@if ! command -v mpcium >/dev/null 2>&1; then \
|
||||
echo "❌ mpcium binary not found in PATH. Please run 'make' in the root directory first."; \
|
||||
@if ! command -v mpc >/dev/null 2>&1; then \
|
||||
echo "❌ mpc binary not found in PATH. Please run 'make' in the root directory first."; \
|
||||
exit 1; \
|
||||
fi
|
||||
@if ! command -v mpcium-cli >/dev/null 2>&1; then \
|
||||
echo "❌ mpcium-cli binary not found in PATH. Please run 'make' in the root directory first."; \
|
||||
@if ! command -v mpc-cli >/dev/null 2>&1; then \
|
||||
echo "❌ mpc-cli binary not found in PATH. Please run 'make' in the root directory first."; \
|
||||
exit 1; \
|
||||
fi
|
||||
@echo "✅ Binaries found"
|
||||
|
||||
+7
-7
@@ -18,7 +18,7 @@ Before running the tests, ensure you have:
|
||||
|
||||
- **Docker** installed and running
|
||||
- **Go** 1.23+ installed
|
||||
- **mpcium** and **mpcium-cli** binaries built (run `make` in the root directory)
|
||||
- **lux-mpc** and **lux-mpc-cli** binaries built (run `make` in the root directory)
|
||||
|
||||
## Running Tests
|
||||
|
||||
@@ -73,7 +73,7 @@ make clean
|
||||
|
||||
3. **Start MPC Nodes**
|
||||
|
||||
- Launches 3 mpcium processes in parallel
|
||||
- Launches 3 mpc processes in parallel
|
||||
- Each node uses its own configuration and identity
|
||||
|
||||
4. **Test Key Generation**
|
||||
@@ -119,7 +119,7 @@ Test nodes use a separate database path: `./test_db/` instead of `./db/`
|
||||
1. **Binary not found**
|
||||
|
||||
```
|
||||
❌ mpcium binary not found. Please run 'make' in the root directory first.
|
||||
❌ mpc binary not found. Please run 'make' in the root directory first.
|
||||
```
|
||||
|
||||
**Solution**: Run `make` in the root directory to build the binaries.
|
||||
@@ -258,7 +258,7 @@ make cleanup-test-env
|
||||
# Option 3: Manual cleanup commands
|
||||
cd e2e
|
||||
# Kill MPC processes
|
||||
pgrep -f "mpcium" | xargs kill -TERM
|
||||
pgrep -f "mpc" | xargs kill -TERM
|
||||
# Stop Docker containers
|
||||
docker compose -f docker-compose.test.yaml down -v --remove-orphans
|
||||
# Remove test artifacts
|
||||
@@ -272,13 +272,13 @@ If you encounter signature verification errors or other mysterious test failures
|
||||
1. **Check for running processes**:
|
||||
|
||||
```bash
|
||||
ps aux | grep mpcium
|
||||
ps aux | grep mpc
|
||||
```
|
||||
|
||||
2. **Kill any found processes**:
|
||||
|
||||
```bash
|
||||
pkill -f mpcium
|
||||
pkill -f mpc
|
||||
```
|
||||
|
||||
3. **Clean up completely**:
|
||||
@@ -313,5 +313,5 @@ If you encounter signature verification errors or other mysterious test failures
|
||||
| "Failed to verify initiator message" | Multiple MPC instances running | Run cleanup script |
|
||||
| "Port already in use" | Docker containers still running | `docker compose down -v` |
|
||||
| "Database locked" | Previous test didn't clean up | Remove `test_node*` directories |
|
||||
| Test hangs during setup | Leftover processes interfering | Kill all `mpcium` processes |
|
||||
| Test hangs during setup | Leftover processes interfering | Kill all `mpc` processes |
|
||||
|
||||
|
||||
+22
-22
@@ -15,9 +15,9 @@ import (
|
||||
|
||||
"github.com/dgraph-io/badger/v4"
|
||||
"github.com/dgraph-io/badger/v4/options"
|
||||
"github.com/fystack/mpcium/pkg/client"
|
||||
"github.com/fystack/mpcium/pkg/event"
|
||||
"github.com/fystack/mpcium/pkg/kvstore"
|
||||
"github.com/luxfi/mpc/pkg/client"
|
||||
"github.com/luxfi/mpc/pkg/event"
|
||||
"github.com/luxfi/mpc/pkg/kvstore"
|
||||
"github.com/hashicorp/consul/api"
|
||||
"github.com/nats-io/nats.go"
|
||||
"github.com/stretchr/testify/require"
|
||||
@@ -41,7 +41,7 @@ type TestConfig struct {
|
||||
Environment string `yaml:"environment"`
|
||||
BadgerPassword string `yaml:"badger_password"`
|
||||
EventInitiatorPubkey string `yaml:"event_initiator_pubkey"`
|
||||
MPCiumVersion string `yaml:"mpcium_version"`
|
||||
MPCiumVersion string `yaml:"mpc_version"`
|
||||
MaxConcurrentKeygen int `yaml:"max_concurrent_keygen"`
|
||||
DbPath string `yaml:"db_path"`
|
||||
}
|
||||
@@ -53,7 +53,7 @@ type E2ETestSuite struct {
|
||||
mpcClient client.MPCClient
|
||||
testDir string
|
||||
walletIDs []string
|
||||
mpciumProcesses []*exec.Cmd
|
||||
mpcProcesses []*exec.Cmd
|
||||
keygenResults map[string]*event.KeygenResultEvent
|
||||
signingResults map[string]*event.SigningResultEvent
|
||||
resharingResults map[string]*event.ResharingResultEvent
|
||||
@@ -215,12 +215,12 @@ func (s *E2ETestSuite) RegisterPeers(t *testing.T) {
|
||||
require.NoError(t, err, "Consul is not healthy")
|
||||
t.Log("Consul is healthy")
|
||||
|
||||
// Use mpcium register-peers command instead of manual registration
|
||||
t.Log("Running mpcium-cli register-peers...")
|
||||
// Use mpc register-peers command instead of manual registration
|
||||
t.Log("Running lux-mpc-cli register-peers...")
|
||||
nodeDir := filepath.Join(s.testDir, "test_node0")
|
||||
cmd := exec.Command("mpcium-cli", "register-peers")
|
||||
cmd := exec.Command("lux-mpc-cli", "register-peers")
|
||||
cmd.Dir = nodeDir
|
||||
cmd.Env = append(os.Environ(), "MPCIUM_CONFIG=config.yaml")
|
||||
cmd.Env = append(os.Environ(), "LUX_MPC_CONFIG=config.yaml")
|
||||
|
||||
output, err := cmd.CombinedOutput()
|
||||
if err != nil {
|
||||
@@ -267,16 +267,16 @@ func (s *E2ETestSuite) StartNodes(t *testing.T) {
|
||||
t.Log("Consul is still accessible")
|
||||
}
|
||||
|
||||
s.mpciumProcesses = make([]*exec.Cmd, numNodes)
|
||||
s.mpcProcesses = make([]*exec.Cmd, numNodes)
|
||||
|
||||
for i := 0; i < numNodes; i++ {
|
||||
nodeName := fmt.Sprintf("test_node%d", i)
|
||||
nodeDir := filepath.Join(s.testDir, nodeName)
|
||||
|
||||
// Start node process
|
||||
cmd := exec.Command("mpcium", "start", "-n", nodeName)
|
||||
cmd := exec.Command("lux-mpc", "start", "-n", nodeName)
|
||||
cmd.Dir = nodeDir
|
||||
cmd.Env = append(os.Environ(), "MPCIUM_CONFIG=config.yaml")
|
||||
cmd.Env = append(os.Environ(), "LUX_MPC_CONFIG=config.yaml")
|
||||
|
||||
// Create log files for stdout and stderr
|
||||
logDir := filepath.Join(s.testDir, "logs")
|
||||
@@ -299,7 +299,7 @@ func (s *E2ETestSuite) StartNodes(t *testing.T) {
|
||||
err = cmd.Start()
|
||||
require.NoError(t, err, "Failed to start node %s", nodeName)
|
||||
|
||||
s.mpciumProcesses[i] = cmd
|
||||
s.mpcProcesses[i] = cmd
|
||||
t.Logf("Started node %s (PID: %d) - logs: %s.stdout.log, %s.stderr.log",
|
||||
nodeName, cmd.Process.Pid, nodeName, nodeName)
|
||||
}
|
||||
@@ -407,12 +407,12 @@ func (s *E2ETestSuite) isNodeReady(nodeName string) bool {
|
||||
}
|
||||
|
||||
func (s *E2ETestSuite) StopNode(t *testing.T, nodeIndex int) {
|
||||
if nodeIndex >= len(s.mpciumProcesses) || s.mpciumProcesses[nodeIndex] == nil {
|
||||
if nodeIndex >= len(s.mpcProcesses) || s.mpcProcesses[nodeIndex] == nil {
|
||||
t.Logf("Node %d is not running or doesn't exist", nodeIndex)
|
||||
return
|
||||
}
|
||||
|
||||
cmd := s.mpciumProcesses[nodeIndex]
|
||||
cmd := s.mpcProcesses[nodeIndex]
|
||||
nodeName := fmt.Sprintf("test_node%d", nodeIndex)
|
||||
|
||||
t.Logf("Killing node %s (PID: %d)", nodeName, cmd.Process.Pid)
|
||||
@@ -429,19 +429,19 @@ func (s *E2ETestSuite) StopNode(t *testing.T, nodeIndex int) {
|
||||
}()
|
||||
}
|
||||
|
||||
s.mpciumProcesses[nodeIndex] = nil
|
||||
s.mpcProcesses[nodeIndex] = nil
|
||||
}
|
||||
|
||||
func (s *E2ETestSuite) StopNodes(t *testing.T) {
|
||||
t.Log("Stopping MPC nodes...")
|
||||
|
||||
if len(s.mpciumProcesses) == 0 {
|
||||
if len(s.mpcProcesses) == 0 {
|
||||
t.Log("No nodes to stop")
|
||||
return
|
||||
}
|
||||
|
||||
// Force kill all processes immediately
|
||||
for i, cmd := range s.mpciumProcesses {
|
||||
for i, cmd := range s.mpcProcesses {
|
||||
if cmd != nil && cmd.Process != nil {
|
||||
t.Logf("Force killing node %d (PID: %d)", i, cmd.Process.Pid)
|
||||
err := cmd.Process.Kill()
|
||||
@@ -454,7 +454,7 @@ func (s *E2ETestSuite) StopNodes(t *testing.T) {
|
||||
t.Logf("Node %d killed", idx)
|
||||
}(i, cmd)
|
||||
}
|
||||
s.mpciumProcesses[i] = nil
|
||||
s.mpcProcesses[i] = nil
|
||||
}
|
||||
}
|
||||
|
||||
@@ -470,7 +470,7 @@ func (s *E2ETestSuite) CheckKeyInAllNodes(t *testing.T, walletID, keyType, keyNa
|
||||
for i := 0; i < numNodes; i++ {
|
||||
nodeName := fmt.Sprintf("test_node%d", i)
|
||||
// Skip if node is stopped
|
||||
if s.mpciumProcesses[i] == nil {
|
||||
if s.mpcProcesses[i] == nil {
|
||||
t.Logf("Skipping node %s (stopped)", nodeName)
|
||||
continue
|
||||
}
|
||||
@@ -590,8 +590,8 @@ func (s *E2ETestSuite) Cleanup(t *testing.T) {
|
||||
func (s *E2ETestSuite) KillAllMPCProcesses(t *testing.T) {
|
||||
t.Log("Checking for existing MPC processes...")
|
||||
|
||||
// Find all mpcium processes
|
||||
cmd := exec.Command("pgrep", "-f", "mpcium")
|
||||
// Find all mpc processes
|
||||
cmd := exec.Command("pgrep", "-f", "lux-mpc")
|
||||
output, err := cmd.Output()
|
||||
if err != nil {
|
||||
// pgrep returns exit code 1 if no processes found, which is fine
|
||||
|
||||
@@ -0,0 +1,250 @@
|
||||
package e2e
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/luxfi/mpc/pkg/event"
|
||||
"github.com/luxfi/mpc/pkg/logger"
|
||||
"github.com/luxfi/mpc/pkg/types"
|
||||
"github.com/google/uuid"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
// BenchmarkE2EKeyGeneration benchmarks end-to-end key generation
|
||||
func BenchmarkE2EKeyGeneration(b *testing.B) {
|
||||
suite := NewE2ETestSuite(".")
|
||||
logger.Init("dev", false) // Disable debug logs for benchmarks
|
||||
|
||||
// Setup infrastructure once
|
||||
suite.setupInfrastructure(b)
|
||||
defer suite.Cleanup(b)
|
||||
|
||||
// Wait for infrastructure
|
||||
time.Sleep(5 * time.Second)
|
||||
|
||||
// Setup and start nodes once
|
||||
suite.setupTestIdentities(b)
|
||||
suite.setupConsul(b, true)
|
||||
suite.startNodes(b)
|
||||
|
||||
// Connect to NATS once
|
||||
nc, err := suite.connectToNATS()
|
||||
require.NoError(b, err)
|
||||
defer nc.Close()
|
||||
|
||||
keyTypes := []types.KeyType{types.KeyTypeECDSA, types.KeyTypeEd25519}
|
||||
|
||||
for _, keyType := range keyTypes {
|
||||
b.Run(string(keyType), func(b *testing.B) {
|
||||
b.ResetTimer()
|
||||
for i := 0; i < b.N; i++ {
|
||||
sessionID := uuid.NewString()
|
||||
walletID := fmt.Sprintf("bench-wallet-%s-%d", keyType, i)
|
||||
|
||||
// Publish key generation request
|
||||
keygenRequest := event.KeygenRequest{
|
||||
SessionID: sessionID,
|
||||
WalletID: walletID,
|
||||
KeyType: keyType,
|
||||
}
|
||||
|
||||
err := nc.Publish(event.KeygenRequestTopic, keygenRequest)
|
||||
require.NoError(b, err)
|
||||
|
||||
// Wait for completion
|
||||
select {
|
||||
case <-suite.waitForKeygenSuccess(b, nc, sessionID):
|
||||
// Success
|
||||
case <-time.After(2 * time.Minute):
|
||||
b.Fatalf("Key generation timeout for session %s", sessionID)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// BenchmarkE2ESigning benchmarks end-to-end signing operations
|
||||
func BenchmarkE2ESigning(b *testing.B) {
|
||||
suite := NewE2ETestSuite(".")
|
||||
logger.Init("dev", false)
|
||||
|
||||
// Setup infrastructure
|
||||
suite.setupInfrastructure(b)
|
||||
defer suite.Cleanup(b)
|
||||
|
||||
time.Sleep(5 * time.Second)
|
||||
|
||||
suite.setupTestIdentities(b)
|
||||
suite.setupConsul(b, true)
|
||||
suite.startNodes(b)
|
||||
|
||||
nc, err := suite.connectToNATS()
|
||||
require.NoError(b, err)
|
||||
defer nc.Close()
|
||||
|
||||
// Generate keys first
|
||||
sessionID := uuid.NewString()
|
||||
walletID := "bench-signing-wallet"
|
||||
|
||||
keygenRequest := event.KeygenRequest{
|
||||
SessionID: sessionID,
|
||||
WalletID: walletID,
|
||||
KeyType: types.KeyTypeECDSA,
|
||||
}
|
||||
|
||||
err = nc.Publish(event.KeygenRequestTopic, keygenRequest)
|
||||
require.NoError(b, err)
|
||||
|
||||
select {
|
||||
case <-suite.waitForKeygenSuccess(b, nc, sessionID):
|
||||
// Key generated successfully
|
||||
case <-time.After(2 * time.Minute):
|
||||
b.Fatal("Key generation timeout")
|
||||
}
|
||||
|
||||
// Benchmark signing
|
||||
messageHash := "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"
|
||||
|
||||
b.ResetTimer()
|
||||
for i := 0; i < b.N; i++ {
|
||||
sessionID := uuid.NewString()
|
||||
|
||||
signingRequest := event.SigningRequest{
|
||||
SessionID: sessionID,
|
||||
WalletID: walletID,
|
||||
MessageHash: messageHash,
|
||||
KeyType: types.KeyTypeECDSA,
|
||||
}
|
||||
|
||||
err := nc.Publish(event.SigningRequestTopic, signingRequest)
|
||||
require.NoError(b, err)
|
||||
|
||||
// Wait for signature
|
||||
select {
|
||||
case <-suite.waitForSigningResult(b, nc, sessionID):
|
||||
// Success
|
||||
case <-time.After(30 * time.Second):
|
||||
b.Fatalf("Signing timeout for session %s", sessionID)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// BenchmarkE2EConcurrentSigning benchmarks concurrent signing operations
|
||||
func BenchmarkE2EConcurrentSigning(b *testing.B) {
|
||||
suite := NewE2ETestSuite(".")
|
||||
logger.Init("dev", false)
|
||||
|
||||
// Setup infrastructure
|
||||
suite.setupInfrastructure(b)
|
||||
defer suite.Cleanup(b)
|
||||
|
||||
time.Sleep(5 * time.Second)
|
||||
|
||||
suite.setupTestIdentities(b)
|
||||
suite.setupConsul(b, true)
|
||||
suite.startNodes(b)
|
||||
|
||||
nc, err := suite.connectToNATS()
|
||||
require.NoError(b, err)
|
||||
defer nc.Close()
|
||||
|
||||
// Generate multiple keys for concurrent signing
|
||||
numWallets := 5
|
||||
walletIDs := make([]string, numWallets)
|
||||
|
||||
for i := 0; i < numWallets; i++ {
|
||||
sessionID := uuid.NewString()
|
||||
walletID := fmt.Sprintf("bench-concurrent-wallet-%d", i)
|
||||
walletIDs[i] = walletID
|
||||
|
||||
keygenRequest := event.KeygenRequest{
|
||||
SessionID: sessionID,
|
||||
WalletID: walletID,
|
||||
KeyType: types.KeyTypeECDSA,
|
||||
}
|
||||
|
||||
err = nc.Publish(event.KeygenRequestTopic, keygenRequest)
|
||||
require.NoError(b, err)
|
||||
|
||||
select {
|
||||
case <-suite.waitForKeygenSuccess(b, nc, sessionID):
|
||||
// Key generated successfully
|
||||
case <-time.After(2 * time.Minute):
|
||||
b.Fatalf("Key generation timeout for wallet %s", walletID)
|
||||
}
|
||||
}
|
||||
|
||||
messageHash := "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"
|
||||
|
||||
// Benchmark concurrent signing
|
||||
b.ResetTimer()
|
||||
b.SetParallelism(numWallets)
|
||||
b.RunParallel(func(pb *testing.PB) {
|
||||
walletIdx := 0
|
||||
for pb.Next() {
|
||||
sessionID := uuid.NewString()
|
||||
walletID := walletIDs[walletIdx%numWallets]
|
||||
walletIdx++
|
||||
|
||||
signingRequest := event.SigningRequest{
|
||||
SessionID: sessionID,
|
||||
WalletID: walletID,
|
||||
MessageHash: messageHash,
|
||||
KeyType: types.KeyTypeECDSA,
|
||||
}
|
||||
|
||||
err := nc.Publish(event.SigningRequestTopic, signingRequest)
|
||||
require.NoError(b, err)
|
||||
|
||||
select {
|
||||
case <-suite.waitForSigningResult(b, nc, sessionID):
|
||||
// Success
|
||||
case <-time.After(30 * time.Second):
|
||||
b.Fatalf("Signing timeout for session %s", sessionID)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// BenchmarkE2EMessageThroughput benchmarks message throughput
|
||||
func BenchmarkE2EMessageThroughput(b *testing.B) {
|
||||
suite := NewE2ETestSuite(".")
|
||||
logger.Init("dev", false)
|
||||
|
||||
// Setup infrastructure
|
||||
suite.setupInfrastructure(b)
|
||||
defer suite.Cleanup(b)
|
||||
|
||||
time.Sleep(5 * time.Second)
|
||||
|
||||
nc, err := suite.connectToNATS()
|
||||
require.NoError(b, err)
|
||||
defer nc.Close()
|
||||
|
||||
// Create test message
|
||||
testMsg := types.TssMessage{
|
||||
WireMsg: make([]byte, 1024), // 1KB message
|
||||
SessionID: "bench-session",
|
||||
Sender: "bench-sender",
|
||||
SequenceNumber: 1,
|
||||
KeyType: types.KeyTypeECDSA,
|
||||
}
|
||||
|
||||
b.ResetTimer()
|
||||
b.SetBytes(1024) // Message size in bytes
|
||||
|
||||
for i := 0; i < b.N; i++ {
|
||||
testMsg.SequenceNumber = uint32(i)
|
||||
data, err := testMsg.Marshal()
|
||||
require.NoError(b, err)
|
||||
|
||||
err = nc.Publish("bench.topic", data)
|
||||
require.NoError(b, err)
|
||||
}
|
||||
|
||||
// Ensure all messages are flushed
|
||||
err = nc.Flush()
|
||||
require.NoError(b, err)
|
||||
}
|
||||
@@ -7,11 +7,11 @@ set -e
|
||||
echo "=== MPC Test Environment Cleanup ==="
|
||||
|
||||
# Function to kill MPC processes
|
||||
kill_mpc_processes() {
|
||||
kill_lux_mpc_processes() {
|
||||
echo "Checking for existing MPC processes..."
|
||||
|
||||
# Find all mpcium processes
|
||||
PIDS=$(pgrep -f "mpcium" || true)
|
||||
# Find all lux-mpc processes
|
||||
PIDS=$(pgrep -f "lux-mpc" || true)
|
||||
|
||||
if [ -z "$PIDS" ]; then
|
||||
echo "No existing MPC processes found"
|
||||
@@ -72,7 +72,7 @@ cleanup_test_artifacts() {
|
||||
main() {
|
||||
echo "Starting comprehensive test environment cleanup..."
|
||||
|
||||
kill_mpc_processes
|
||||
kill_lux_mpc_processes
|
||||
stop_docker_containers
|
||||
cleanup_test_artifacts
|
||||
|
||||
|
||||
@@ -6,6 +6,6 @@ environment: development
|
||||
event_initiator_pubkey: "{{.EventInitiatorPubkey}}"
|
||||
max_concurrent_keygen: 1
|
||||
mpc_threshold: 1
|
||||
mpcium_version: 1.0.0
|
||||
mpc_version: 1.0.0
|
||||
nats:
|
||||
url: nats://localhost:4223
|
||||
|
||||
+4
-4
@@ -1,10 +1,10 @@
|
||||
module github.com/fystack/mpcium/e2e
|
||||
module github.com/luxfi/mpc/e2e
|
||||
|
||||
go 1.23.0
|
||||
|
||||
require (
|
||||
github.com/dgraph-io/badger/v4 v4.2.0
|
||||
github.com/fystack/mpcium v0.0.0-00010101000000-000000000000
|
||||
github.com/luxfi/mpc v0.0.0-00010101000000-000000000000
|
||||
github.com/google/uuid v1.6.0
|
||||
github.com/hashicorp/consul/api v1.26.1
|
||||
github.com/nats-io/nats.go v1.31.0
|
||||
@@ -86,6 +86,6 @@ require (
|
||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||
)
|
||||
|
||||
replace github.com/fystack/mpcium => ../
|
||||
replace github.com/luxfi/mpc => ../
|
||||
|
||||
replace github.com/agl/ed25519 => github.com/binance-chain/edwards25519 v0.0.0-20200305024217-f36fc4b53d43
|
||||
replace github.com/agl/ed25519 => github.com/luxfi/edwards25519 v0.0.0-20200305024217-f36fc4b53d43
|
||||
|
||||
+2
-2
@@ -24,8 +24,8 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24
|
||||
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
|
||||
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
|
||||
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
|
||||
github.com/binance-chain/edwards25519 v0.0.0-20200305024217-f36fc4b53d43 h1:Vkf7rtHx8uHx8gDfkQaCdVfc+gfrF9v6sR6xJy7RXNg=
|
||||
github.com/binance-chain/edwards25519 v0.0.0-20200305024217-f36fc4b53d43/go.mod h1:TnVqVdGEK8b6erOMkcyYGWzCQMw7HEMCOw3BgFYCFWs=
|
||||
github.com/luxfi/edwards25519 v0.0.0-20200305024217-f36fc4b53d43 h1:Vkf7rtHx8uHx8gDfkQaCdVfc+gfrF9v6sR6xJy7RXNg=
|
||||
github.com/luxfi/edwards25519 v0.0.0-20200305024217-f36fc4b53d43/go.mod h1:TnVqVdGEK8b6erOMkcyYGWzCQMw7HEMCOw3BgFYCFWs=
|
||||
github.com/bnb-chain/tss-lib/v2 v2.0.2 h1:dL2GJFCSYsYQ0bHkGll+hNM2JWsC1rxDmJJJQEmUy9g=
|
||||
github.com/bnb-chain/tss-lib/v2 v2.0.2/go.mod h1:s4LRfEqj89DhfNb+oraW0dURt5LtOHWXb9Gtkghn0L8=
|
||||
github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ=
|
||||
|
||||
+2
-2
@@ -5,8 +5,8 @@ import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/fystack/mpcium/pkg/event"
|
||||
"github.com/fystack/mpcium/pkg/logger"
|
||||
"github.com/luxfi/mpc/pkg/event"
|
||||
"github.com/luxfi/mpc/pkg/logger"
|
||||
"github.com/google/uuid"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
+3
-3
@@ -5,9 +5,9 @@ import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/fystack/mpcium/pkg/event"
|
||||
"github.com/fystack/mpcium/pkg/logger"
|
||||
"github.com/fystack/mpcium/pkg/types"
|
||||
"github.com/luxfi/mpc/pkg/event"
|
||||
"github.com/luxfi/mpc/pkg/logger"
|
||||
"github.com/luxfi/mpc/pkg/types"
|
||||
"github.com/google/uuid"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
@@ -68,8 +68,8 @@ for i in $(seq 0 $((NUM_NODES-1))); do
|
||||
echo "📝 Generating identity for test_node$i..."
|
||||
cd "$BASE_DIR/test_node$i"
|
||||
|
||||
# Generate identity using mpcium-cli
|
||||
mpcium-cli generate-identity --node "test_node$i"
|
||||
# Generate identity using lux-mpc-cli
|
||||
lux-mpc-cli generate-identity --node "test_node$i"
|
||||
|
||||
cd - > /dev/null
|
||||
done
|
||||
@@ -88,7 +88,7 @@ done
|
||||
# Generate test event initiator
|
||||
echo "🔐 Generating test event initiator..."
|
||||
cd "$BASE_DIR"
|
||||
mpcium-cli generate-initiator --node-name test_event_initiator --output-dir . --overwrite
|
||||
lux-mpc-cli generate-initiator --node-name test_event_initiator --output-dir . --overwrite
|
||||
|
||||
# Extract the public key from the generated identity
|
||||
if [ -f "test_event_initiator.identity.json" ]; then
|
||||
|
||||
+6
-6
@@ -7,9 +7,9 @@ import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/fystack/mpcium/pkg/event"
|
||||
"github.com/fystack/mpcium/pkg/logger"
|
||||
"github.com/fystack/mpcium/pkg/types"
|
||||
"github.com/luxfi/mpc/pkg/event"
|
||||
"github.com/luxfi/mpc/pkg/logger"
|
||||
"github.com/luxfi/mpc/pkg/types"
|
||||
"github.com/google/uuid"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
@@ -273,14 +273,14 @@ func testSigningOneNodeOffline(t *testing.T, suite *E2ETestSuite) {
|
||||
nodeToStop := 2
|
||||
t.Logf("Stopping node %d to test fault tolerance...", nodeToStop)
|
||||
|
||||
if nodeToStop < len(suite.mpciumProcesses) && suite.mpciumProcesses[nodeToStop] != nil {
|
||||
err := suite.mpciumProcesses[nodeToStop].Process.Kill()
|
||||
if nodeToStop < len(suite.mpcProcesses) && suite.mpcProcesses[nodeToStop] != nil {
|
||||
err := suite.mpcProcesses[nodeToStop].Process.Kill()
|
||||
if err != nil {
|
||||
t.Logf("Failed to stop node %d: %v", nodeToStop, err)
|
||||
} else {
|
||||
t.Logf("Successfully stopped node %d", nodeToStop)
|
||||
// Mark as stopped
|
||||
suite.mpciumProcesses[nodeToStop] = nil
|
||||
suite.mpcProcesses[nodeToStop] = nil
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -11,10 +11,10 @@ import (
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"github.com/fystack/mpcium/pkg/client"
|
||||
"github.com/fystack/mpcium/pkg/config"
|
||||
"github.com/fystack/mpcium/pkg/event"
|
||||
"github.com/fystack/mpcium/pkg/logger"
|
||||
"github.com/luxfi/mpc/pkg/client"
|
||||
"github.com/luxfi/mpc/pkg/config"
|
||||
"github.com/luxfi/mpc/pkg/event"
|
||||
"github.com/luxfi/mpc/pkg/logger"
|
||||
"github.com/google/uuid"
|
||||
"github.com/nats-io/nats.go"
|
||||
"github.com/spf13/viper"
|
||||
|
||||
@@ -6,11 +6,11 @@ import (
|
||||
"os/signal"
|
||||
"syscall"
|
||||
|
||||
"github.com/fystack/mpcium/pkg/client"
|
||||
"github.com/fystack/mpcium/pkg/config"
|
||||
"github.com/fystack/mpcium/pkg/event"
|
||||
"github.com/fystack/mpcium/pkg/logger"
|
||||
"github.com/fystack/mpcium/pkg/types"
|
||||
"github.com/luxfi/mpc/pkg/client"
|
||||
"github.com/luxfi/mpc/pkg/config"
|
||||
"github.com/luxfi/mpc/pkg/event"
|
||||
"github.com/luxfi/mpc/pkg/logger"
|
||||
"github.com/luxfi/mpc/pkg/types"
|
||||
"github.com/google/uuid"
|
||||
"github.com/nats-io/nats.go"
|
||||
"github.com/spf13/viper"
|
||||
|
||||
@@ -6,11 +6,11 @@ import (
|
||||
"os/signal"
|
||||
"syscall"
|
||||
|
||||
"github.com/fystack/mpcium/pkg/client"
|
||||
"github.com/fystack/mpcium/pkg/config"
|
||||
"github.com/fystack/mpcium/pkg/event"
|
||||
"github.com/fystack/mpcium/pkg/logger"
|
||||
"github.com/fystack/mpcium/pkg/types"
|
||||
"github.com/luxfi/mpc/pkg/client"
|
||||
"github.com/luxfi/mpc/pkg/config"
|
||||
"github.com/luxfi/mpc/pkg/event"
|
||||
"github.com/luxfi/mpc/pkg/logger"
|
||||
"github.com/luxfi/mpc/pkg/types"
|
||||
"github.com/google/uuid"
|
||||
"github.com/nats-io/nats.go"
|
||||
"github.com/spf13/viper"
|
||||
|
||||
@@ -1,94 +1,88 @@
|
||||
module github.com/fystack/mpcium
|
||||
module github.com/luxfi/mpc
|
||||
|
||||
go 1.23.0
|
||||
|
||||
toolchain go1.23.5
|
||||
|
||||
require (
|
||||
filippo.io/age v1.2.1
|
||||
github.com/avast/retry-go v3.0.0+incompatible
|
||||
github.com/bnb-chain/tss-lib/v2 v2.0.2
|
||||
github.com/decred/dcrd/dcrec/edwards/v2 v2.0.3
|
||||
github.com/dgraph-io/badger/v4 v4.7.0
|
||||
github.com/dgraph-io/badger/v4 v4.5.0
|
||||
github.com/google/uuid v1.6.0
|
||||
github.com/hashicorp/consul/api v1.26.1
|
||||
github.com/gorilla/mux v1.8.1
|
||||
github.com/hashicorp/consul/api v1.29.1
|
||||
github.com/mitchellh/mapstructure v1.5.0
|
||||
github.com/nats-io/nats.go v1.31.0
|
||||
github.com/rs/zerolog v1.31.0
|
||||
github.com/samber/lo v1.39.0
|
||||
github.com/spf13/viper v1.18.0
|
||||
github.com/nats-io/nats.go v1.36.0
|
||||
github.com/rs/zerolog v1.33.0
|
||||
github.com/samber/lo v1.47.0
|
||||
github.com/spf13/viper v1.19.0
|
||||
github.com/stretchr/testify v1.10.0
|
||||
github.com/urfave/cli/v3 v3.3.2
|
||||
golang.org/x/term v0.31.0
|
||||
github.com/urfave/cli/v2 v2.27.5
|
||||
github.com/urfave/cli/v3 v3.3.8
|
||||
go.uber.org/zap v1.27.0
|
||||
golang.org/x/crypto v0.29.0
|
||||
golang.org/x/term v0.26.0
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/agl/ed25519 v0.0.0-20200225211852-fd4d107ace12 // indirect
|
||||
github.com/armon/go-metrics v0.4.1 // indirect
|
||||
github.com/btcsuite/btcd v0.24.2 // indirect
|
||||
github.com/btcsuite/btcd v0.23.4 // indirect
|
||||
github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect
|
||||
github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 // indirect
|
||||
github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 // indirect
|
||||
github.com/btcsuite/btcutil v1.0.2 // indirect
|
||||
github.com/cespare/xxhash/v2 v2.3.0 // indirect
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.5 // indirect
|
||||
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
|
||||
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect
|
||||
github.com/dgraph-io/ristretto/v2 v2.2.0 // indirect
|
||||
github.com/dgraph-io/ristretto/v2 v2.0.0 // indirect
|
||||
github.com/dustin/go-humanize v1.0.1 // indirect
|
||||
github.com/fatih/color v1.18.0 // indirect
|
||||
github.com/fatih/color v1.16.0 // indirect
|
||||
github.com/fsnotify/fsnotify v1.7.0 // indirect
|
||||
github.com/go-logr/logr v1.4.2 // indirect
|
||||
github.com/go-logr/stdr v1.2.2 // indirect
|
||||
github.com/gogo/protobuf v1.3.2 // indirect
|
||||
github.com/google/flatbuffers v25.2.10+incompatible // indirect
|
||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
|
||||
github.com/google/flatbuffers v24.3.25+incompatible // indirect
|
||||
github.com/hashicorp/errwrap v1.1.0 // indirect
|
||||
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
|
||||
github.com/hashicorp/go-hclog v1.6.3 // indirect
|
||||
github.com/hashicorp/go-hclog v1.5.0 // indirect
|
||||
github.com/hashicorp/go-immutable-radix v1.3.1 // indirect
|
||||
github.com/hashicorp/go-multierror v1.1.1 // indirect
|
||||
github.com/hashicorp/go-rootcerts v1.0.2 // indirect
|
||||
github.com/hashicorp/go-sockaddr v1.0.7 // indirect
|
||||
github.com/hashicorp/golang-lru v0.5.4 // indirect
|
||||
github.com/hashicorp/hcl v1.0.0 // indirect
|
||||
github.com/hashicorp/serf v0.10.1 // indirect
|
||||
github.com/ipfs/go-log v1.0.5 // indirect
|
||||
github.com/ipfs/go-log/v2 v2.1.3 // indirect
|
||||
github.com/klauspost/compress v1.18.0 // indirect
|
||||
github.com/klauspost/compress v1.17.11 // indirect
|
||||
github.com/magiconair/properties v1.8.7 // indirect
|
||||
github.com/mattn/go-colorable v0.1.14 // indirect
|
||||
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||
github.com/mattn/go-isatty v0.0.20 // indirect
|
||||
github.com/mitchellh/go-homedir v1.1.0 // indirect
|
||||
github.com/nats-io/nkeys v0.4.6 // indirect
|
||||
github.com/nats-io/nkeys v0.4.7 // indirect
|
||||
github.com/nats-io/nuid v1.0.1 // indirect
|
||||
github.com/opentracing/opentracing-go v1.2.0 // indirect
|
||||
github.com/otiai10/primes v0.0.0-20210501021515-f1b2be525a11 // indirect
|
||||
github.com/pelletier/go-toml/v2 v2.1.0 // indirect
|
||||
github.com/pelletier/go-toml/v2 v2.2.2 // indirect
|
||||
github.com/pkg/errors v0.9.1 // indirect
|
||||
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
|
||||
github.com/rogpeppe/go-internal v1.14.1 // indirect
|
||||
github.com/russross/blackfriday/v2 v2.1.0 // indirect
|
||||
github.com/sagikazarmark/locafero v0.4.0 // indirect
|
||||
github.com/sagikazarmark/slog-shim v0.1.0 // indirect
|
||||
github.com/sourcegraph/conc v0.3.0 // indirect
|
||||
github.com/spf13/afero v1.11.0 // indirect
|
||||
github.com/spf13/cast v1.6.0 // indirect
|
||||
github.com/spf13/pflag v1.0.6 // indirect
|
||||
github.com/spf13/pflag v1.0.5 // indirect
|
||||
github.com/subosito/gotenv v1.6.0 // indirect
|
||||
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
|
||||
go.opentelemetry.io/otel v1.35.0 // indirect
|
||||
go.opentelemetry.io/otel/metric v1.35.0 // indirect
|
||||
go.opentelemetry.io/otel/trace v1.35.0 // indirect
|
||||
go.uber.org/atomic v1.9.0 // indirect
|
||||
go.uber.org/goleak v1.3.0 // indirect
|
||||
go.uber.org/multierr v1.9.0 // indirect
|
||||
go.uber.org/zap v1.21.0 // indirect
|
||||
golang.org/x/crypto v0.37.0 // indirect
|
||||
github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 // indirect
|
||||
go.opencensus.io v0.24.0 // indirect
|
||||
go.uber.org/multierr v1.10.0 // indirect
|
||||
golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect
|
||||
golang.org/x/net v0.39.0 // indirect
|
||||
golang.org/x/sys v0.33.0 // indirect
|
||||
golang.org/x/text v0.24.0 // indirect
|
||||
google.golang.org/protobuf v1.36.6 // indirect
|
||||
golang.org/x/net v0.31.0 // indirect
|
||||
golang.org/x/sys v0.27.0 // indirect
|
||||
golang.org/x/text v0.20.0 // indirect
|
||||
google.golang.org/protobuf v1.33.0 // indirect
|
||||
gopkg.in/ini.v1 v1.67.0 // indirect
|
||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||
)
|
||||
|
||||
replace github.com/agl/ed25519 => github.com/binance-chain/edwards25519 v0.0.0-20200305024217-f36fc4b53d43
|
||||
replace github.com/agl/ed25519 => github.com/luxfi/edwards25519 v0.0.0-20200305024217-f36fc4b53d43
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
c2sp.org/CCTV/age v0.0.0-20240306222714-3ec4d716e805 h1:u2qwJeEvnypw+OCPUHmoZE3IqwfuN5kgDfo5MLzpNM0=
|
||||
c2sp.org/CCTV/age v0.0.0-20240306222714-3ec4d716e805/go.mod h1:FomMrUJ2Lxt5jCLmZkG3FHa72zUprnhd3v/Z18Snm4w=
|
||||
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||
filippo.io/age v1.2.1 h1:X0TZjehAZylOIj4DubWYU1vWQxv9bJpo+Uu2/LGhi1o=
|
||||
filippo.io/age v1.2.1/go.mod h1:JL9ew2lTN+Pyft4RiNGguFfOpewKwSHm5ayKD/A4004=
|
||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||
@@ -17,21 +18,18 @@ github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj
|
||||
github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
|
||||
github.com/avast/retry-go v3.0.0+incompatible h1:4SOWQ7Qs+oroOTQOYnAHqelpCO0biHSxpiH9JdtuBj0=
|
||||
github.com/avast/retry-go v3.0.0+incompatible/go.mod h1:XtSnn+n/sHqQIpZ10K1qAevBhOOCWBLXXy3hyiqqBrY=
|
||||
github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
|
||||
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
|
||||
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
|
||||
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
|
||||
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
|
||||
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
|
||||
github.com/binance-chain/edwards25519 v0.0.0-20200305024217-f36fc4b53d43 h1:Vkf7rtHx8uHx8gDfkQaCdVfc+gfrF9v6sR6xJy7RXNg=
|
||||
github.com/binance-chain/edwards25519 v0.0.0-20200305024217-f36fc4b53d43/go.mod h1:TnVqVdGEK8b6erOMkcyYGWzCQMw7HEMCOw3BgFYCFWs=
|
||||
github.com/luxfi/edwards25519 v0.0.0-20200305024217-f36fc4b53d43 h1:9Z+YCRg50oUwtqmMG/+KiVwrHaj0rL0AF6rpPJyCpPc=
|
||||
github.com/luxfi/edwards25519 v0.0.0-20200305024217-f36fc4b53d43/go.mod h1:9Z+YCRg50oUwtqmMG/+KiVwrHaj0rL0AF6rpPJyCpPc=
|
||||
github.com/bnb-chain/tss-lib/v2 v2.0.2 h1:dL2GJFCSYsYQ0bHkGll+hNM2JWsC1rxDmJJJQEmUy9g=
|
||||
github.com/bnb-chain/tss-lib/v2 v2.0.2/go.mod h1:s4LRfEqj89DhfNb+oraW0dURt5LtOHWXb9Gtkghn0L8=
|
||||
github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ=
|
||||
github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c/go.mod h1:tjmYdS6MLJ5/s0Fj4DbLgSbDHbEqLJrtnHecBFkdz5M=
|
||||
github.com/btcsuite/btcd v0.23.4 h1:IzV6qqkfwbItOS/sg/aDfPDsjPP8twrCOE2R93hxMlQ=
|
||||
github.com/btcsuite/btcd v0.23.4/go.mod h1:0QJIIN1wwIXF/3G/m87gIwGniDMDQqjVn4SZgnFpsYY=
|
||||
github.com/btcsuite/btcd v0.24.2 h1:aLmxPguqxza+4ag8R1I2nnJjSu2iFn/kqtHTIImswcY=
|
||||
github.com/btcsuite/btcd v0.24.2/go.mod h1:5C8ChTkl5ejr3WHj8tkQSCmydiMEPB0ZhQhehpq7Dgg=
|
||||
github.com/btcsuite/btcd/btcec/v2 v2.1.0/go.mod h1:2VzYrv4Gm4apmbVVsSq5bqf1Ec8v56E48Vt0Y/umPgA=
|
||||
github.com/btcsuite/btcd/btcec/v2 v2.1.3/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE=
|
||||
github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U=
|
||||
@@ -39,9 +37,8 @@ github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY
|
||||
github.com/btcsuite/btcd/btcutil v1.0.0/go.mod h1:Uoxwv0pqYWhD//tfTiipkxNfdhG9UrLwaeswfjfdF0A=
|
||||
github.com/btcsuite/btcd/btcutil v1.1.0/go.mod h1:5OapHB7A2hBBWLm48mmw4MOHNJCcUBTwmWH/0Jn8VHE=
|
||||
github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc=
|
||||
github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U=
|
||||
github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc=
|
||||
github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 h1:59Kx4K6lzOW5w6nFlA0v5+lk/6sjybR934QNHSJZPTQ=
|
||||
github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc=
|
||||
github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA=
|
||||
github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg=
|
||||
github.com/btcsuite/btcutil v1.0.2 h1:9iZ1Terx9fMIOtq1VrwdqfsATL9MC2l8ZrUY6YZ2uts=
|
||||
@@ -53,13 +50,18 @@ github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku
|
||||
github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc=
|
||||
github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY=
|
||||
github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs=
|
||||
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
||||
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
|
||||
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||
github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag=
|
||||
github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I=
|
||||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
||||
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
|
||||
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.5 h1:ZtcqGrnekaHpVLArFSe4HK5DoKx1T0rq2DwVB0alcyc=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.5/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
||||
github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
@@ -71,19 +73,23 @@ github.com/decred/dcrd/dcrec/edwards/v2 v2.0.3/go.mod h1:AKpV6+wZ2MfPRJnTbQ6NPgW
|
||||
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 h1:YLtO71vCjJRCBcrPMtQ9nqBsqpA1m5sE92cU+pd5Mcc=
|
||||
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs=
|
||||
github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218=
|
||||
github.com/dgraph-io/badger/v4 v4.7.0 h1:Q+J8HApYAY7UMpL8d9owqiB+odzEc0zn/aqOD9jhc6Y=
|
||||
github.com/dgraph-io/badger/v4 v4.7.0/go.mod h1:He7TzG3YBy3j4f5baj5B7Zl2XyfNe5bl4Udl0aPemVA=
|
||||
github.com/dgraph-io/ristretto/v2 v2.2.0 h1:bkY3XzJcXoMuELV8F+vS8kzNgicwQFAaGINAEJdWGOM=
|
||||
github.com/dgraph-io/ristretto/v2 v2.2.0/go.mod h1:RZrm63UmcBAaYWC1DotLYBmTvgkrs0+XhBd7Npn7/zI=
|
||||
github.com/dgryski/go-farm v0.0.0-20240924180020-3414d57e47da h1:aIftn67I1fkbMa512G+w+Pxci9hJPB8oMnkcP3iZF38=
|
||||
github.com/dgryski/go-farm v0.0.0-20240924180020-3414d57e47da/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
|
||||
github.com/dgraph-io/badger/v4 v4.5.0 h1:TeJE3I1pIWLBjYhIYCA1+uxrjWEoJXImFBMEBVSm16g=
|
||||
github.com/dgraph-io/badger/v4 v4.5.0/go.mod h1:ysgYmIeG8dS/E8kwxT7xHyc7MkmwNYLRoYnFbr7387A=
|
||||
github.com/dgraph-io/ristretto/v2 v2.0.0 h1:l0yiSOtlJvc0otkqyMaDNysg8E9/F/TYZwMbxscNOAQ=
|
||||
github.com/dgraph-io/ristretto/v2 v2.0.0/go.mod h1:FVFokF2dRqXyPyeMnK1YDy8Fc6aTe0IKgbcd03CYeEk=
|
||||
github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y=
|
||||
github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
|
||||
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
|
||||
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
|
||||
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
|
||||
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
||||
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
|
||||
github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
|
||||
github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
|
||||
github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM=
|
||||
github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU=
|
||||
github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM=
|
||||
github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE=
|
||||
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
|
||||
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
|
||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
||||
@@ -94,16 +100,16 @@ github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2
|
||||
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
||||
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
|
||||
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
|
||||
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
||||
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
|
||||
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
|
||||
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
|
||||
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
|
||||
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
|
||||
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
|
||||
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
||||
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
|
||||
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
|
||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
||||
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
|
||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
@@ -112,36 +118,48 @@ github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:x
|
||||
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
|
||||
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
|
||||
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
|
||||
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
|
||||
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
|
||||
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
|
||||
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
|
||||
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
|
||||
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
|
||||
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
||||
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
|
||||
github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4=
|
||||
github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA=
|
||||
github.com/google/flatbuffers v25.2.10+incompatible h1:F3vclr7C3HpB1k9mxCGRMXq6FdUalZ6H/pNX4FP1v0Q=
|
||||
github.com/google/flatbuffers v25.2.10+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
|
||||
github.com/google/flatbuffers v24.3.25+incompatible h1:CX395cjN9Kke9mmalRoL3d81AtFUxJM+yDthflgJGkI=
|
||||
github.com/google/flatbuffers v24.3.25+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
|
||||
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
|
||||
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
|
||||
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
|
||||
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
|
||||
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
|
||||
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
||||
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/hashicorp/consul/api v1.26.1 h1:5oSXOO5fboPZeW5SN+TdGFP/BILDgBm19OrPZ/pICIM=
|
||||
github.com/hashicorp/consul/api v1.26.1/go.mod h1:B4sQTeaSO16NtynqrAdwOlahJ7IUDZM9cj2420xYL8A=
|
||||
github.com/hashicorp/consul/sdk v0.15.0 h1:2qK9nDrr4tiJKRoxPGhm6B7xJjLVIQqkjiab2M4aKjU=
|
||||
github.com/hashicorp/consul/sdk v0.15.0/go.mod h1:r/OmRRPbHOe0yxNahLw7G9x5WG17E1BIECMtCjcPSNo=
|
||||
github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
|
||||
github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=
|
||||
github.com/hashicorp/consul/api v1.29.1 h1:UEwOjYJrd3lG1x5w7HxDRMGiAUPrb3f103EoeKuuEcc=
|
||||
github.com/hashicorp/consul/api v1.29.1/go.mod h1:lumfRkY/coLuqMICkI7Fh3ylMG31mQSRZyef2c5YvJI=
|
||||
github.com/hashicorp/consul/proto-public v0.6.1 h1:+uzH3olCrksXYWAYHKqK782CtK9scfqH+Unlw3UHhCg=
|
||||
github.com/hashicorp/consul/proto-public v0.6.1/go.mod h1:cXXbOg74KBNGajC+o8RlA502Esf0R9prcoJgiOX/2Tg=
|
||||
github.com/hashicorp/consul/sdk v0.16.1 h1:V8TxTnImoPD5cj0U9Spl0TUxcytjcbbJeADFF07KdHg=
|
||||
github.com/hashicorp/consul/sdk v0.16.1/go.mod h1:fSXvwxB2hmh1FMZCNl6PwX0Q/1wdWtHJcZ7Ea5tns0s=
|
||||
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
||||
github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I=
|
||||
github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
||||
github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
|
||||
github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ=
|
||||
github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=
|
||||
github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k=
|
||||
github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M=
|
||||
github.com/hashicorp/go-hclog v1.5.0 h1:bI2ocEMgcVlz55Oj1xZNBsVi900c7II+fWDyV9o+13c=
|
||||
github.com/hashicorp/go-hclog v1.5.0/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M=
|
||||
github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
|
||||
github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc=
|
||||
github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
|
||||
@@ -156,8 +174,8 @@ github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es
|
||||
github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc=
|
||||
github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8=
|
||||
github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
|
||||
github.com/hashicorp/go-sockaddr v1.0.7 h1:G+pTkSO01HpR5qCxg7lxfsFEZaG+C0VssTy/9dbT+Fw=
|
||||
github.com/hashicorp/go-sockaddr v1.0.7/go.mod h1:FZQbEYa1pxkQ7WLpyXJ6cbjpT8q0YgQaK/JakXqGyWw=
|
||||
github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc=
|
||||
github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A=
|
||||
github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4=
|
||||
github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
|
||||
github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
|
||||
@@ -190,8 +208,8 @@ github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7V
|
||||
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
|
||||
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
||||
github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4=
|
||||
github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=
|
||||
github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ=
|
||||
github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc=
|
||||
github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0=
|
||||
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
||||
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
|
||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||
@@ -208,9 +226,8 @@ github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVc
|
||||
github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
|
||||
github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
|
||||
github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
|
||||
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
|
||||
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
|
||||
github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE=
|
||||
github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=
|
||||
github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
|
||||
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
|
||||
github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE=
|
||||
@@ -235,10 +252,10 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ
|
||||
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
|
||||
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
|
||||
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
||||
github.com/nats-io/nats.go v1.31.0 h1:/WFBHEc/dOKBF6qf1TZhrdEfTmOZ5JzdJ+Y3m6Y/p7E=
|
||||
github.com/nats-io/nats.go v1.31.0/go.mod h1:di3Bm5MLsoB4Bx61CBTsxuarI36WbhAwOm8QrW39+i8=
|
||||
github.com/nats-io/nkeys v0.4.6 h1:IzVe95ru2CT6ta874rt9saQRkWfe2nFj1NtvYSLqMzY=
|
||||
github.com/nats-io/nkeys v0.4.6/go.mod h1:4DxZNzenSVd1cYQoAa8948QY3QDjrHfcfVADymtkpts=
|
||||
github.com/nats-io/nats.go v1.36.0 h1:suEUPuWzTSse/XhESwqLxXGuj8vGRuPRoG7MoRN/qyU=
|
||||
github.com/nats-io/nats.go v1.36.0/go.mod h1:Ubdu4Nh9exXdSz0RVWRFBbRfrbSxOYd26oF0wkWclB8=
|
||||
github.com/nats-io/nkeys v0.4.7 h1:RwNJbbIdYCoClSDNY7QVKZlyb/wfT6ugvFCiKy6vDvI=
|
||||
github.com/nats-io/nkeys v0.4.7/go.mod h1:kqXRgRDPlGy7nGaEDMuYzmiJCIAAWDK0IMBtDmGD0nc=
|
||||
github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw=
|
||||
github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c=
|
||||
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
|
||||
@@ -263,8 +280,8 @@ github.com/otiai10/primes v0.0.0-20210501021515-f1b2be525a11/go.mod h1:1DmRMnU78
|
||||
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
|
||||
github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY=
|
||||
github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
|
||||
github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4=
|
||||
github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc=
|
||||
github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM=
|
||||
github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs=
|
||||
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||
@@ -279,6 +296,7 @@ github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5Fsn
|
||||
github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=
|
||||
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
||||
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
||||
github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4=
|
||||
@@ -286,19 +304,21 @@ github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R
|
||||
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
||||
github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
|
||||
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
||||
github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
|
||||
github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
|
||||
github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
|
||||
github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
|
||||
github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
|
||||
github.com/rs/zerolog v1.31.0 h1:FcTR3NnLWW+NnTwwhFWiJSZr4ECLpqCm6QsEnyvbV4A=
|
||||
github.com/rs/zerolog v1.31.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss=
|
||||
github.com/rs/zerolog v1.33.0 h1:1cU2KZkvPxNyfgEmhHAz/1A9Bz+llsdYzklWFzgp0r8=
|
||||
github.com/rs/zerolog v1.33.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss=
|
||||
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
|
||||
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
|
||||
github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ=
|
||||
github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4=
|
||||
github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE=
|
||||
github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ=
|
||||
github.com/samber/lo v1.39.0 h1:4gTz1wUhNYLhFSKl6O+8peW0v2F4BCY034GRpU9WnuA=
|
||||
github.com/samber/lo v1.39.0/go.mod h1:+m/ZKRl6ClXCE2Lgf3MsQlWfh4bn1bz6CXEOxnEXnEA=
|
||||
github.com/samber/lo v1.47.0 h1:z7RynLwP5nbyRscyvcD043DWYoOcYRv3mV8lBeqOCLc=
|
||||
github.com/samber/lo v1.47.0/go.mod h1:RmDH9Ct32Qy3gduHQuKJ3gW1fMHAnE/fAzQuf6He5cU=
|
||||
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I=
|
||||
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
|
||||
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
|
||||
@@ -310,10 +330,10 @@ github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8=
|
||||
github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY=
|
||||
github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0=
|
||||
github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
|
||||
github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o=
|
||||
github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
||||
github.com/spf13/viper v1.18.0 h1:pN6W1ub/G4OfnM+NR9p7xP9R6TltLUzp5JG9yZD3Qg0=
|
||||
github.com/spf13/viper v1.18.0/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk=
|
||||
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
|
||||
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
||||
github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI=
|
||||
github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
|
||||
@@ -327,7 +347,9 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
|
||||
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
|
||||
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
||||
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
||||
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
||||
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
||||
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
|
||||
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
||||
github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
|
||||
@@ -335,35 +357,29 @@ github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSW
|
||||
github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc=
|
||||
github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM=
|
||||
github.com/urfave/cli v1.22.5/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
|
||||
github.com/urfave/cli/v3 v3.3.2 h1:BYFVnhhZ8RqT38DxEYVFPPmGFTEf7tJwySTXsVRrS/o=
|
||||
github.com/urfave/cli/v3 v3.3.2/go.mod h1:FJSKtM/9AiiTOJL4fJ6TbMUkxBXn7GO9guZqoZtpYpo=
|
||||
github.com/urfave/cli/v2 v2.27.5 h1:WoHEJLdsXr6dDWoJgMq/CboDmyY/8HMMH1fTECbih+w=
|
||||
github.com/urfave/cli/v2 v2.27.5/go.mod h1:3Sevf16NykTbInEnD0yKkjDAeZDS0A6bzhBH5hrMvTQ=
|
||||
github.com/urfave/cli/v3 v3.3.8 h1:BzolUExliMdet9NlJ/u4m5vHSotJ3PzEqSAZ1oPMa/E=
|
||||
github.com/urfave/cli/v3 v3.3.8/go.mod h1:FJSKtM/9AiiTOJL4fJ6TbMUkxBXn7GO9guZqoZtpYpo=
|
||||
github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 h1:gEOO8jv9F4OT7lGCjxCBTO/36wtF6j2nSip77qHd4x4=
|
||||
github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM=
|
||||
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
|
||||
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||
go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
|
||||
go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
|
||||
go.opentelemetry.io/otel v1.35.0 h1:xKWKPxrxB6OtMCbmMY021CqC45J+3Onta9MqjhnusiQ=
|
||||
go.opentelemetry.io/otel v1.35.0/go.mod h1:UEqy8Zp11hpkUrL73gSlELM0DupHoiq72dR+Zqel/+Y=
|
||||
go.opentelemetry.io/otel/metric v1.35.0 h1:0znxYu2SNyuMSQT4Y9WDWej0VpcsxkuklLa4/siN90M=
|
||||
go.opentelemetry.io/otel/metric v1.35.0/go.mod h1:nKVFgxBZ2fReX6IlyW28MgZojkoAkJGaE8CpgeAU3oE=
|
||||
go.opentelemetry.io/otel/trace v1.35.0 h1:dPpEfJu1sDIqruz7BHFG3c7528f6ddfSWfFDVt/xgMs=
|
||||
go.opentelemetry.io/otel/trace v1.35.0/go.mod h1:WUk7DtFp1Aw2MkvqGdwiXYDZZNvA/1J8o6xRXLrIkyc=
|
||||
go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
|
||||
go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
|
||||
go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
|
||||
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
|
||||
go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE=
|
||||
go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
|
||||
go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ=
|
||||
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
|
||||
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
|
||||
go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU=
|
||||
go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
|
||||
go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI=
|
||||
go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ=
|
||||
go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ=
|
||||
go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
|
||||
go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
|
||||
go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ=
|
||||
go.uber.org/zap v1.21.0 h1:WefMeulhovoZ2sYXz7st6K0sLj7bBhpiFaud4r4zST8=
|
||||
go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw=
|
||||
go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
|
||||
go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
|
||||
golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
@@ -374,20 +390,26 @@ golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPh
|
||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
|
||||
golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE=
|
||||
golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc=
|
||||
golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ=
|
||||
golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg=
|
||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g=
|
||||
golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k=
|
||||
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
||||
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
|
||||
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
||||
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
||||
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
|
||||
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
||||
golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
@@ -397,14 +419,15 @@ golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLL
|
||||
golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
||||
golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
||||
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
|
||||
golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8=
|
||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
|
||||
golang.org/x/net v0.39.0 h1:ZCu7HMWDxpXpaiKdhzIfaltL9Lp31x/3fCP11bc6/fY=
|
||||
golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E=
|
||||
golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo=
|
||||
golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM=
|
||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
@@ -415,6 +438,7 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ
|
||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
@@ -438,7 +462,6 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w
|
||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
@@ -451,15 +474,15 @@ golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
|
||||
golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
|
||||
golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s=
|
||||
golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
||||
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
|
||||
golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
|
||||
golang.org/x/term v0.31.0 h1:erwDkOK1Msy6offm1mOgvspSkslFnIGsFnxOKoufg3o=
|
||||
golang.org/x/term v0.31.0/go.mod h1:R4BeIy7D95HzImkxGkTW1UQTtP54tio2RyHz7PwK0aw=
|
||||
golang.org/x/term v0.26.0 h1:WEQa6V3Gja/BhNxg540hBip/kkaYtRg3cxg4oXSw4AU=
|
||||
golang.org/x/term v0.26.0/go.mod h1:Si5m1o57C5nBNQo5z1iq+XDijt21BDBDp2bK0QI8e3E=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
@@ -468,10 +491,13 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
|
||||
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
|
||||
golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0=
|
||||
golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU=
|
||||
golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug=
|
||||
golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
|
||||
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
|
||||
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
|
||||
golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
@@ -479,29 +505,45 @@ golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtn
|
||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
||||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
|
||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
||||
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
||||
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
|
||||
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
|
||||
google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9 h1:9+tzLLstTlPTRyJTh+ah5wIMsBW5c4tQwGTN3thOW9Y=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240314234333-6e1732d8331c h1:lfpJ/2rWPa/kJgxyyXM8PrNnfCzcmxJ265mADgwmvLI=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240314234333-6e1732d8331c/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY=
|
||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
|
||||
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
|
||||
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
||||
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
|
||||
google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk=
|
||||
google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
|
||||
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
||||
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
||||
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
|
||||
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
|
||||
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
|
||||
google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
|
||||
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
||||
google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
|
||||
google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY=
|
||||
google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY=
|
||||
google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
|
||||
google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
|
||||
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
|
||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
|
||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
|
||||
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
|
||||
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
|
||||
gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
|
||||
@@ -511,12 +553,10 @@ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
|
||||
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
|
||||
|
||||
@@ -12,11 +12,11 @@ import (
|
||||
"strings"
|
||||
|
||||
"filippo.io/age"
|
||||
"github.com/fystack/mpcium/pkg/event"
|
||||
"github.com/fystack/mpcium/pkg/eventconsumer"
|
||||
"github.com/fystack/mpcium/pkg/logger"
|
||||
"github.com/fystack/mpcium/pkg/messaging"
|
||||
"github.com/fystack/mpcium/pkg/types"
|
||||
"github.com/luxfi/mpc/pkg/event"
|
||||
"github.com/luxfi/mpc/pkg/eventconsumer"
|
||||
"github.com/luxfi/mpc/pkg/logger"
|
||||
"github.com/luxfi/mpc/pkg/messaging"
|
||||
"github.com/luxfi/mpc/pkg/types"
|
||||
"github.com/nats-io/nats.go"
|
||||
)
|
||||
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@ import (
|
||||
"log"
|
||||
"strings"
|
||||
|
||||
"github.com/fystack/mpcium/pkg/logger"
|
||||
"github.com/luxfi/mpc/pkg/logger"
|
||||
"github.com/mitchellh/mapstructure"
|
||||
"github.com/spf13/viper"
|
||||
)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package event
|
||||
|
||||
import "github.com/fystack/mpcium/pkg/types"
|
||||
import "github.com/luxfi/mpc/pkg/types"
|
||||
|
||||
type ResharingResultEvent struct {
|
||||
WalletID string `json:"wallet_id"`
|
||||
|
||||
@@ -10,12 +10,12 @@ import (
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/fystack/mpcium/pkg/event"
|
||||
"github.com/fystack/mpcium/pkg/identity"
|
||||
"github.com/fystack/mpcium/pkg/logger"
|
||||
"github.com/fystack/mpcium/pkg/messaging"
|
||||
"github.com/fystack/mpcium/pkg/mpc"
|
||||
"github.com/fystack/mpcium/pkg/types"
|
||||
"github.com/luxfi/mpc/pkg/event"
|
||||
"github.com/luxfi/mpc/pkg/identity"
|
||||
"github.com/luxfi/mpc/pkg/logger"
|
||||
"github.com/luxfi/mpc/pkg/messaging"
|
||||
"github.com/luxfi/mpc/pkg/mpc"
|
||||
"github.com/luxfi/mpc/pkg/types"
|
||||
"github.com/nats-io/nats.go"
|
||||
"github.com/spf13/viper"
|
||||
)
|
||||
|
||||
@@ -5,10 +5,10 @@ import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/fystack/mpcium/pkg/event"
|
||||
"github.com/fystack/mpcium/pkg/logger"
|
||||
"github.com/fystack/mpcium/pkg/messaging"
|
||||
"github.com/fystack/mpcium/pkg/mpc"
|
||||
"github.com/luxfi/mpc/pkg/event"
|
||||
"github.com/luxfi/mpc/pkg/logger"
|
||||
"github.com/luxfi/mpc/pkg/messaging"
|
||||
"github.com/luxfi/mpc/pkg/mpc"
|
||||
"github.com/google/uuid"
|
||||
"github.com/nats-io/nats.go"
|
||||
"github.com/nats-io/nats.go/jetstream"
|
||||
|
||||
@@ -5,10 +5,10 @@ import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/fystack/mpcium/pkg/event"
|
||||
"github.com/fystack/mpcium/pkg/logger"
|
||||
"github.com/fystack/mpcium/pkg/messaging"
|
||||
"github.com/fystack/mpcium/pkg/mpc"
|
||||
"github.com/luxfi/mpc/pkg/event"
|
||||
"github.com/luxfi/mpc/pkg/logger"
|
||||
"github.com/luxfi/mpc/pkg/messaging"
|
||||
"github.com/luxfi/mpc/pkg/mpc"
|
||||
"github.com/google/uuid"
|
||||
"github.com/nats-io/nats.go"
|
||||
"github.com/nats-io/nats.go/jetstream"
|
||||
|
||||
@@ -3,9 +3,9 @@ package eventconsumer
|
||||
import (
|
||||
"encoding/json"
|
||||
|
||||
"github.com/fystack/mpcium/pkg/event"
|
||||
"github.com/fystack/mpcium/pkg/logger"
|
||||
"github.com/fystack/mpcium/pkg/messaging"
|
||||
"github.com/luxfi/mpc/pkg/event"
|
||||
"github.com/luxfi/mpc/pkg/logger"
|
||||
"github.com/luxfi/mpc/pkg/messaging"
|
||||
"github.com/nats-io/nats.go"
|
||||
)
|
||||
|
||||
|
||||
@@ -16,9 +16,9 @@ import (
|
||||
"github.com/bnb-chain/tss-lib/v2/tss"
|
||||
"golang.org/x/term"
|
||||
|
||||
"github.com/fystack/mpcium/pkg/common/pathutil"
|
||||
"github.com/fystack/mpcium/pkg/logger"
|
||||
"github.com/fystack/mpcium/pkg/types"
|
||||
"github.com/luxfi/mpc/pkg/common/pathutil"
|
||||
"github.com/luxfi/mpc/pkg/logger"
|
||||
"github.com/luxfi/mpc/pkg/types"
|
||||
"github.com/spf13/viper"
|
||||
)
|
||||
|
||||
|
||||
+2
-2
@@ -3,8 +3,8 @@ package infra
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/fystack/mpcium/pkg/constant"
|
||||
"github.com/fystack/mpcium/pkg/logger"
|
||||
"github.com/luxfi/mpc/pkg/constant"
|
||||
"github.com/luxfi/mpc/pkg/logger"
|
||||
"github.com/hashicorp/consul/api"
|
||||
"github.com/spf13/viper"
|
||||
)
|
||||
|
||||
@@ -4,7 +4,7 @@ import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
|
||||
"github.com/fystack/mpcium/pkg/infra"
|
||||
"github.com/luxfi/mpc/pkg/infra"
|
||||
"github.com/hashicorp/consul/api"
|
||||
)
|
||||
|
||||
|
||||
@@ -210,7 +210,7 @@ func TestBadgerBackupExecutor_BackupMetadata(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
|
||||
// Should contain magic header
|
||||
assert.Contains(t, string(data), "MPCIUM_BACKUP")
|
||||
assert.Contains(t, string(data), "LUX_MPC_BACKUP")
|
||||
|
||||
// Should not contain plaintext data
|
||||
assert.NotContains(t, string(data), "test-value")
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
|
||||
"github.com/dgraph-io/badger/v4"
|
||||
"github.com/dgraph-io/badger/v4/options"
|
||||
"github.com/fystack/mpcium/pkg/logger"
|
||||
"github.com/luxfi/mpc/pkg/logger"
|
||||
)
|
||||
|
||||
var (
|
||||
|
||||
@@ -16,12 +16,12 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/dgraph-io/badger/v4"
|
||||
"github.com/fystack/mpcium/pkg/encryption"
|
||||
"github.com/luxfi/mpc/pkg/encryption"
|
||||
"github.com/rs/zerolog/log"
|
||||
)
|
||||
|
||||
const (
|
||||
magic = "MPCIUM_BACKUP"
|
||||
magic = "LUX_MPC_BACKUP"
|
||||
dbPath = "./db"
|
||||
defaultBackupDir = "./backups"
|
||||
)
|
||||
|
||||
@@ -4,7 +4,7 @@ import (
|
||||
"fmt"
|
||||
|
||||
"github.com/dgraph-io/badger/v4"
|
||||
"github.com/fystack/mpcium/pkg/logger"
|
||||
"github.com/luxfi/mpc/pkg/logger"
|
||||
)
|
||||
|
||||
// quietBadgerLogger is a custom logger that suppresses INFO and DEBUG messages
|
||||
|
||||
@@ -8,7 +8,7 @@ import (
|
||||
"time"
|
||||
"unicode"
|
||||
|
||||
"github.com/fystack/mpcium/pkg/logger"
|
||||
"github.com/luxfi/mpc/pkg/logger"
|
||||
"github.com/nats-io/nats.go"
|
||||
"github.com/nats-io/nats.go/jetstream"
|
||||
)
|
||||
|
||||
@@ -6,7 +6,7 @@ import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/fystack/mpcium/pkg/logger"
|
||||
"github.com/luxfi/mpc/pkg/logger"
|
||||
"github.com/nats-io/nats.go"
|
||||
"github.com/nats-io/nats.go/jetstream"
|
||||
)
|
||||
|
||||
@@ -4,7 +4,7 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/avast/retry-go"
|
||||
"github.com/fystack/mpcium/pkg/logger"
|
||||
"github.com/luxfi/mpc/pkg/logger"
|
||||
"github.com/nats-io/nats.go"
|
||||
)
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package messaging
|
||||
|
||||
import (
|
||||
"github.com/fystack/mpcium/pkg/logger"
|
||||
"github.com/luxfi/mpc/pkg/logger"
|
||||
"github.com/nats-io/nats.go"
|
||||
)
|
||||
|
||||
|
||||
@@ -7,12 +7,12 @@ import (
|
||||
|
||||
"github.com/bnb-chain/tss-lib/v2/ecdsa/keygen"
|
||||
"github.com/bnb-chain/tss-lib/v2/tss"
|
||||
"github.com/fystack/mpcium/pkg/encoding"
|
||||
"github.com/fystack/mpcium/pkg/identity"
|
||||
"github.com/fystack/mpcium/pkg/keyinfo"
|
||||
"github.com/fystack/mpcium/pkg/kvstore"
|
||||
"github.com/fystack/mpcium/pkg/logger"
|
||||
"github.com/fystack/mpcium/pkg/messaging"
|
||||
"github.com/luxfi/mpc/pkg/encoding"
|
||||
"github.com/luxfi/mpc/pkg/identity"
|
||||
"github.com/luxfi/mpc/pkg/keyinfo"
|
||||
"github.com/luxfi/mpc/pkg/kvstore"
|
||||
"github.com/luxfi/mpc/pkg/logger"
|
||||
"github.com/luxfi/mpc/pkg/messaging"
|
||||
)
|
||||
|
||||
type KeyGenSession interface {
|
||||
|
||||
@@ -8,12 +8,12 @@ import (
|
||||
"github.com/bnb-chain/tss-lib/v2/ecdsa/keygen"
|
||||
"github.com/bnb-chain/tss-lib/v2/ecdsa/resharing"
|
||||
"github.com/bnb-chain/tss-lib/v2/tss"
|
||||
"github.com/fystack/mpcium/pkg/encoding"
|
||||
"github.com/fystack/mpcium/pkg/identity"
|
||||
"github.com/fystack/mpcium/pkg/keyinfo"
|
||||
"github.com/fystack/mpcium/pkg/kvstore"
|
||||
"github.com/fystack/mpcium/pkg/logger"
|
||||
"github.com/fystack/mpcium/pkg/messaging"
|
||||
"github.com/luxfi/mpc/pkg/encoding"
|
||||
"github.com/luxfi/mpc/pkg/identity"
|
||||
"github.com/luxfi/mpc/pkg/keyinfo"
|
||||
"github.com/luxfi/mpc/pkg/kvstore"
|
||||
"github.com/luxfi/mpc/pkg/logger"
|
||||
"github.com/luxfi/mpc/pkg/messaging"
|
||||
)
|
||||
|
||||
type ReshareSession interface {
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"github.com/bnb-chain/tss-lib/v2/ecdsa/resharing"
|
||||
"github.com/bnb-chain/tss-lib/v2/ecdsa/signing"
|
||||
"github.com/bnb-chain/tss-lib/v2/tss"
|
||||
"github.com/fystack/mpcium/pkg/common/errors"
|
||||
"github.com/luxfi/mpc/pkg/common/errors"
|
||||
)
|
||||
|
||||
const (
|
||||
|
||||
@@ -10,13 +10,13 @@ import (
|
||||
"github.com/bnb-chain/tss-lib/v2/ecdsa/keygen"
|
||||
"github.com/bnb-chain/tss-lib/v2/ecdsa/signing"
|
||||
"github.com/bnb-chain/tss-lib/v2/tss"
|
||||
"github.com/fystack/mpcium/pkg/common/errors"
|
||||
"github.com/fystack/mpcium/pkg/event"
|
||||
"github.com/fystack/mpcium/pkg/identity"
|
||||
"github.com/fystack/mpcium/pkg/keyinfo"
|
||||
"github.com/fystack/mpcium/pkg/kvstore"
|
||||
"github.com/fystack/mpcium/pkg/logger"
|
||||
"github.com/fystack/mpcium/pkg/messaging"
|
||||
"github.com/luxfi/mpc/pkg/common/errors"
|
||||
"github.com/luxfi/mpc/pkg/event"
|
||||
"github.com/luxfi/mpc/pkg/identity"
|
||||
"github.com/luxfi/mpc/pkg/keyinfo"
|
||||
"github.com/luxfi/mpc/pkg/kvstore"
|
||||
"github.com/luxfi/mpc/pkg/logger"
|
||||
"github.com/luxfi/mpc/pkg/messaging"
|
||||
"github.com/samber/lo"
|
||||
)
|
||||
|
||||
|
||||
@@ -7,11 +7,11 @@ import (
|
||||
"github.com/bnb-chain/tss-lib/v2/eddsa/keygen"
|
||||
"github.com/bnb-chain/tss-lib/v2/tss"
|
||||
"github.com/decred/dcrd/dcrec/edwards/v2"
|
||||
"github.com/fystack/mpcium/pkg/identity"
|
||||
"github.com/fystack/mpcium/pkg/keyinfo"
|
||||
"github.com/fystack/mpcium/pkg/kvstore"
|
||||
"github.com/fystack/mpcium/pkg/logger"
|
||||
"github.com/fystack/mpcium/pkg/messaging"
|
||||
"github.com/luxfi/mpc/pkg/identity"
|
||||
"github.com/luxfi/mpc/pkg/keyinfo"
|
||||
"github.com/luxfi/mpc/pkg/kvstore"
|
||||
"github.com/luxfi/mpc/pkg/logger"
|
||||
"github.com/luxfi/mpc/pkg/messaging"
|
||||
)
|
||||
|
||||
type eddsaKeygenSession struct {
|
||||
|
||||
@@ -8,11 +8,11 @@ import (
|
||||
"github.com/bnb-chain/tss-lib/v2/eddsa/resharing"
|
||||
"github.com/bnb-chain/tss-lib/v2/tss"
|
||||
"github.com/decred/dcrd/dcrec/edwards/v2"
|
||||
"github.com/fystack/mpcium/pkg/identity"
|
||||
"github.com/fystack/mpcium/pkg/keyinfo"
|
||||
"github.com/fystack/mpcium/pkg/kvstore"
|
||||
"github.com/fystack/mpcium/pkg/logger"
|
||||
"github.com/fystack/mpcium/pkg/messaging"
|
||||
"github.com/luxfi/mpc/pkg/identity"
|
||||
"github.com/luxfi/mpc/pkg/keyinfo"
|
||||
"github.com/luxfi/mpc/pkg/kvstore"
|
||||
"github.com/luxfi/mpc/pkg/logger"
|
||||
"github.com/luxfi/mpc/pkg/messaging"
|
||||
)
|
||||
|
||||
type eddsaReshareSession struct {
|
||||
|
||||
@@ -5,7 +5,7 @@ import (
|
||||
"github.com/bnb-chain/tss-lib/v2/eddsa/resharing"
|
||||
"github.com/bnb-chain/tss-lib/v2/eddsa/signing"
|
||||
"github.com/bnb-chain/tss-lib/v2/tss"
|
||||
"github.com/fystack/mpcium/pkg/common/errors"
|
||||
"github.com/luxfi/mpc/pkg/common/errors"
|
||||
)
|
||||
|
||||
type GetRoundFunc func(msg []byte, partyID *tss.PartyID, isBroadcast bool) (RoundInfo, error)
|
||||
|
||||
@@ -10,13 +10,13 @@ import (
|
||||
"github.com/bnb-chain/tss-lib/v2/eddsa/signing"
|
||||
"github.com/bnb-chain/tss-lib/v2/tss"
|
||||
"github.com/decred/dcrd/dcrec/edwards/v2"
|
||||
"github.com/fystack/mpcium/pkg/common/errors"
|
||||
"github.com/fystack/mpcium/pkg/event"
|
||||
"github.com/fystack/mpcium/pkg/identity"
|
||||
"github.com/fystack/mpcium/pkg/keyinfo"
|
||||
"github.com/fystack/mpcium/pkg/kvstore"
|
||||
"github.com/fystack/mpcium/pkg/logger"
|
||||
"github.com/fystack/mpcium/pkg/messaging"
|
||||
"github.com/luxfi/mpc/pkg/common/errors"
|
||||
"github.com/luxfi/mpc/pkg/event"
|
||||
"github.com/luxfi/mpc/pkg/identity"
|
||||
"github.com/luxfi/mpc/pkg/keyinfo"
|
||||
"github.com/luxfi/mpc/pkg/kvstore"
|
||||
"github.com/luxfi/mpc/pkg/logger"
|
||||
"github.com/luxfi/mpc/pkg/messaging"
|
||||
"github.com/samber/lo"
|
||||
)
|
||||
|
||||
|
||||
+6
-6
@@ -11,12 +11,12 @@ import (
|
||||
|
||||
"github.com/bnb-chain/tss-lib/v2/ecdsa/keygen"
|
||||
"github.com/bnb-chain/tss-lib/v2/tss"
|
||||
"github.com/fystack/mpcium/pkg/common/errors"
|
||||
"github.com/fystack/mpcium/pkg/identity"
|
||||
"github.com/fystack/mpcium/pkg/keyinfo"
|
||||
"github.com/fystack/mpcium/pkg/kvstore"
|
||||
"github.com/fystack/mpcium/pkg/logger"
|
||||
"github.com/fystack/mpcium/pkg/messaging"
|
||||
"github.com/luxfi/mpc/pkg/common/errors"
|
||||
"github.com/luxfi/mpc/pkg/identity"
|
||||
"github.com/luxfi/mpc/pkg/keyinfo"
|
||||
"github.com/luxfi/mpc/pkg/kvstore"
|
||||
"github.com/luxfi/mpc/pkg/logger"
|
||||
"github.com/luxfi/mpc/pkg/messaging"
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
|
||||
+2
-2
@@ -6,8 +6,8 @@ import (
|
||||
"sync/atomic"
|
||||
"time"
|
||||
|
||||
"github.com/fystack/mpcium/pkg/infra"
|
||||
"github.com/fystack/mpcium/pkg/logger"
|
||||
"github.com/luxfi/mpc/pkg/infra"
|
||||
"github.com/luxfi/mpc/pkg/logger"
|
||||
"github.com/hashicorp/consul/api"
|
||||
"github.com/samber/lo"
|
||||
)
|
||||
|
||||
+7
-7
@@ -7,13 +7,13 @@ import (
|
||||
|
||||
"github.com/bnb-chain/tss-lib/v2/ecdsa/keygen"
|
||||
"github.com/bnb-chain/tss-lib/v2/tss"
|
||||
"github.com/fystack/mpcium/pkg/common/errors"
|
||||
"github.com/fystack/mpcium/pkg/identity"
|
||||
"github.com/fystack/mpcium/pkg/keyinfo"
|
||||
"github.com/fystack/mpcium/pkg/kvstore"
|
||||
"github.com/fystack/mpcium/pkg/logger"
|
||||
"github.com/fystack/mpcium/pkg/messaging"
|
||||
"github.com/fystack/mpcium/pkg/types"
|
||||
"github.com/luxfi/mpc/pkg/common/errors"
|
||||
"github.com/luxfi/mpc/pkg/identity"
|
||||
"github.com/luxfi/mpc/pkg/keyinfo"
|
||||
"github.com/luxfi/mpc/pkg/kvstore"
|
||||
"github.com/luxfi/mpc/pkg/logger"
|
||||
"github.com/luxfi/mpc/pkg/messaging"
|
||||
"github.com/luxfi/mpc/pkg/types"
|
||||
"github.com/nats-io/nats.go"
|
||||
)
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ do
|
||||
if [ "$previous_tag" != 0 ];then
|
||||
tag_date=$(git log -1 --pretty=format:'%ad' --date=short ${previous_tag})
|
||||
printf "## ${previous_tag} (${tag_date})\n\n"
|
||||
git log ${current_tag}...${previous_tag} --pretty=format:'* %s [View](https://github.com/fystack/mpcium/commit/%H)' | grep -v Merge
|
||||
git log ${current_tag}...${previous_tag} --pretty=format:'* %s [View](https://github.com/luxfi/mpc/commit/%H)' | grep -v Merge
|
||||
printf "\n\n"
|
||||
fi
|
||||
previous_tag=${current_tag}
|
||||
Executable
+59
@@ -0,0 +1,59 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "╔═══════════════════════════════════════════════════════════════╗"
|
||||
echo "║ 🚀 Lux MPC Cluster Status ║"
|
||||
echo "╚═══════════════════════════════════════════════════════════════╝"
|
||||
echo ""
|
||||
|
||||
# Check services
|
||||
echo "📡 Infrastructure Services:"
|
||||
echo -n " NATS: "
|
||||
if curl -s http://localhost:8222/varz > /dev/null 2>&1; then
|
||||
echo "✅ Running (http://localhost:8222)"
|
||||
else
|
||||
echo "❌ Not running"
|
||||
fi
|
||||
|
||||
echo -n " Consul: "
|
||||
if curl -s http://localhost:8500/v1/agent/self > /dev/null 2>&1; then
|
||||
echo "✅ Running (http://localhost:8500)"
|
||||
else
|
||||
echo "❌ Not running"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "🖥️ MPC Nodes (Environment: local):"
|
||||
|
||||
# Check each node
|
||||
for i in 0 1 2; do
|
||||
if ps aux | grep -v grep | grep -q "lux-mpc start --name node$i"; then
|
||||
echo " lux-local-node$i: ✅ Running"
|
||||
else
|
||||
echo " lux-local-node$i: ❌ Not running"
|
||||
fi
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "📊 Cluster Readiness:"
|
||||
# Get latest status from logs
|
||||
READY_COUNT=$(grep -h "readyPeers=" logs/node*.log 2>/dev/null | tail -1 | grep -o "readyPeers=\[[0-9]\]" | grep -o "[0-9]")
|
||||
TOTAL_COUNT=$(grep -h "totalPeers=" logs/node*.log 2>/dev/null | tail -1 | grep -o "totalPeers=\[[0-9]\]" | grep -o "[0-9]")
|
||||
|
||||
if [ -n "$READY_COUNT" ] && [ -n "$TOTAL_COUNT" ]; then
|
||||
echo " Ready Peers: $READY_COUNT/$TOTAL_COUNT"
|
||||
echo " Threshold: 2 (requires 3 nodes for signing)"
|
||||
if [ "$READY_COUNT" -ge 3 ]; then
|
||||
echo " Status: ✅ Ready for operations"
|
||||
else
|
||||
echo " Status: ⏳ Waiting for nodes..."
|
||||
fi
|
||||
else
|
||||
echo " Status: ⏳ Initializing..."
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "📝 Commands:"
|
||||
echo " View logs: tail -f logs/*.log"
|
||||
echo " Stop cluster: make stop-local"
|
||||
echo " Kill nodes: pkill lux-mpc"
|
||||
echo ""
|
||||
@@ -16,7 +16,7 @@ export GPG_TTY=$(tty)
|
||||
NATS_PASSWORD=$(decrypt_secret "$PASS" ~/.password-store/apex-nats-password.gpg)
|
||||
CONSUL_PASSWORD=$(decrypt_secret "$PASS" ~/.password-store/apex-consul-password.gpg)
|
||||
CONSUL_TOKEN=$(decrypt_secret "$PASS" ~/.password-store/apex-consul-token.gpg)
|
||||
BADGER_PASSWORD=$(decrypt_secret "$PASS" ~/.password-store/mpcium-badger-password.gpg)
|
||||
BADGER_PASSWORD=$(decrypt_secret "$PASS" ~/.password-store/lux-mpc-badger-password.gpg)
|
||||
|
||||
# Prompt for command
|
||||
read -p "Enter the command to execute: " user_command
|
||||
Executable
+44
@@ -0,0 +1,44 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "🚀 Launching 3-node MPC cluster..."
|
||||
echo ""
|
||||
|
||||
# Generate identities for all nodes if not exist
|
||||
for node in node0 node1 node2; do
|
||||
if [ ! -f "identity/${node}_identity.json" ]; then
|
||||
echo "Generating identity for $node..."
|
||||
./lux-mpc-cli generate-identity --node $node --peers peers.json --output-dir identity
|
||||
fi
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "Starting nodes with environment prefix..."
|
||||
echo "Environment: local (from config.yaml)"
|
||||
echo ""
|
||||
|
||||
# Start nodes in background
|
||||
echo "Starting lux-local-node0..."
|
||||
./lux-mpc start --name node0 > logs/node0.log 2>&1 &
|
||||
echo "PID: $!"
|
||||
|
||||
sleep 2
|
||||
|
||||
echo "Starting lux-local-node1..."
|
||||
./lux-mpc start --name node1 > logs/node1.log 2>&1 &
|
||||
echo "PID: $!"
|
||||
|
||||
sleep 2
|
||||
|
||||
echo "Starting lux-local-node2..."
|
||||
./lux-mpc start --name node2 > logs/node2.log 2>&1 &
|
||||
echo "PID: $!"
|
||||
|
||||
echo ""
|
||||
echo "✅ All nodes launched!"
|
||||
echo ""
|
||||
echo "Check status:"
|
||||
echo " - Logs: tail -f logs/*.log"
|
||||
echo " - Consul UI: http://localhost:8500"
|
||||
echo " - NATS: http://localhost:8222"
|
||||
echo ""
|
||||
echo "To stop all nodes: pkill lux-mpc"
|
||||
@@ -6,8 +6,8 @@ import (
|
||||
"strings"
|
||||
|
||||
"github.com/dgraph-io/badger/v4"
|
||||
"github.com/fystack/mpcium/pkg/kvstore"
|
||||
"github.com/fystack/mpcium/pkg/logger"
|
||||
"github.com/luxfi/mpc/pkg/kvstore"
|
||||
"github.com/luxfi/mpc/pkg/logger"
|
||||
)
|
||||
|
||||
func main() {
|
||||
|
||||
@@ -5,8 +5,8 @@ import (
|
||||
"log"
|
||||
"strings"
|
||||
|
||||
"github.com/fystack/mpcium/pkg/config"
|
||||
"github.com/fystack/mpcium/pkg/logger"
|
||||
"github.com/luxfi/mpc/pkg/config"
|
||||
"github.com/luxfi/mpc/pkg/logger"
|
||||
"github.com/hashicorp/consul/api"
|
||||
)
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ echo "🔑 Generating identities for each node..."
|
||||
for i in $(seq 0 $((NUM_NODES-1))); do
|
||||
echo "📝 Generating identity for node$i..."
|
||||
cd "node$i"
|
||||
mpcium-cli generate-identity --node "node$i"
|
||||
lux-mpc-cli generate-identity --node "node$i"
|
||||
cd ..
|
||||
done
|
||||
|
||||
@@ -54,6 +54,6 @@ echo " ├── identity/"
|
||||
echo " └── peers.json"
|
||||
echo
|
||||
echo "✅ You can now start your nodes with:"
|
||||
echo "cd node0 && mpcium start -n node0"
|
||||
echo "cd node1 && mpcium start -n node1"
|
||||
echo "cd node2 && mpcium start -n node2"
|
||||
echo "cd node0 && lux-mpc start -n node0"
|
||||
echo "cd node1 && lux-mpc start -n node1"
|
||||
echo "cd node2 && lux-mpc start -n node2"
|
||||
@@ -4,7 +4,7 @@ echo "🚀 Setting up Event Initiator..."
|
||||
|
||||
# Generate the event initiator
|
||||
echo "📝 Generating event initiator..."
|
||||
mpcium-cli generate-initiator
|
||||
lux-mpc-cli generate-initiator
|
||||
|
||||
# Extract the public key from the generated file
|
||||
if [ -f "event_initiator.identity.json" ]; then
|
||||
Executable
+44
@@ -0,0 +1,44 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "╔═══════════════════════════════════════════════════════════════╗"
|
||||
echo "║ 🚀 Lux MPC Quick Start ║"
|
||||
echo "╚═══════════════════════════════════════════════════════════════╝"
|
||||
echo ""
|
||||
echo "Available commands:"
|
||||
echo ""
|
||||
echo "🏗️ Build & Setup:"
|
||||
echo " make build - Build all binaries"
|
||||
echo " make clean - Clean build artifacts"
|
||||
echo ""
|
||||
echo "🚀 Run MPC:"
|
||||
echo " make start - Quick start (build + run services)"
|
||||
echo " make run-local - Start NATS & Consul services"
|
||||
echo " make run-node0 - Start MPC node0"
|
||||
echo " make stop-local - Stop all services"
|
||||
echo " make logs - View service logs"
|
||||
echo ""
|
||||
echo "🧪 Testing:"
|
||||
echo " make test - Run unit tests"
|
||||
echo " make e2e-test - Run E2E tests"
|
||||
echo " make test-all - Run all tests"
|
||||
echo ""
|
||||
echo "🛠️ MPC CLI Tools:"
|
||||
echo " ./lux-mpc-cli generate-peers -n 3 - Generate peers config"
|
||||
echo " ./lux-mpc-cli generate-identity - Generate node identity"
|
||||
echo " ./lux-mpc-cli register-peers - Register peers in Consul"
|
||||
echo ""
|
||||
echo "📝 Configuration:"
|
||||
echo " - Edit config.yaml.template for node configuration"
|
||||
echo " - Generated keys stored in ~/.lux-mpc/"
|
||||
echo ""
|
||||
echo "🎯 Quick start sequence:"
|
||||
echo " 1. make start (builds and starts services)"
|
||||
echo " 2. make run-node0 (in new terminal)"
|
||||
echo ""
|
||||
echo "📌 Node Naming:"
|
||||
echo " Nodes are prefixed with environment: lux-{env}-{name}"
|
||||
echo " - Local: lux-local-node0"
|
||||
echo " - Testnet: lux-testnet-node0"
|
||||
echo " - Mainnet: lux-mainnet-node0"
|
||||
echo ""
|
||||
echo "Ready to start? Run: make start"
|
||||
Executable
+51
@@ -0,0 +1,51 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "=== Testing Lux MPC Integration ==="
|
||||
|
||||
# Check binaries exist
|
||||
echo "1. Checking binaries..."
|
||||
if [ -f "./lux-mpc" ] && [ -f "./lux-mpc-cli" ]; then
|
||||
echo "✓ Binaries found"
|
||||
else
|
||||
echo "✗ Binaries missing"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check versions
|
||||
echo -e "\n2. Binary versions:"
|
||||
./lux-mpc --version
|
||||
./lux-mpc-cli version
|
||||
|
||||
# Test key generation (need peers.json first)
|
||||
echo -e "\n3. Creating test peers.json..."
|
||||
cat > /tmp/test-peers.json << EOF
|
||||
{
|
||||
"test-node": "c53e799e-d3e7-4b4a-b9f3-41221d5ec905",
|
||||
"node1": "edac4cc8-5f73-49aa-b257-3fbfa56a7534",
|
||||
"node2": "604410dd-b004-47b7-a1c5-ad75d7645496"
|
||||
}
|
||||
EOF
|
||||
|
||||
echo -e "\n4. Testing identity generation..."
|
||||
./lux-mpc-cli generate-identity --node test-node --peers /tmp/test-peers.json --output-dir /tmp/test-identity
|
||||
|
||||
if [ -d "/tmp/test-identity" ]; then
|
||||
echo "✓ Identity generated successfully"
|
||||
rm -rf /tmp/test-identity /tmp/test-peers.json
|
||||
else
|
||||
echo "✗ Failed to generate identity"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Test running with help
|
||||
echo -e "\n5. Testing MPC node help..."
|
||||
./lux-mpc --help > /dev/null 2>&1
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "✓ MPC node help works"
|
||||
else
|
||||
echo "✗ MPC node help failed"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "\n=== All tests passed! ==="
|
||||
echo "Lux MPC is ready for deployment with the bridge."
|
||||
@@ -0,0 +1,12 @@
|
||||
nats:
|
||||
url: nats://127.0.0.1:4222
|
||||
consul:
|
||||
address: localhost:8500
|
||||
|
||||
mpc_threshold: 2
|
||||
environment: testnet
|
||||
badger_password: "test123"
|
||||
event_initiator_pubkey: "test_pubkey"
|
||||
max_concurrent_keygen: 2
|
||||
db_path: "."
|
||||
backup_enabled: false
|
||||
Reference in New Issue
Block a user