chains: rename thresholdvm → mpcvm (LP-134 T-Chain retirement finished)

Under LP-0130's canonical roster, chains/thresholdvm/ hosts the M-Chain
VM (MPC threshold signing). The package name "thresholdvm" was the last
piece of T-Chain nomenclature still shipping in code — legacy from the
pre-LP-134 shared-substrate design. Renamed to mpcvm/ so the package
name matches the M-Chain letter and LP-7100 spec.

- chains/thresholdvm/ → chains/mpcvm/ (dir + inner files + package decl)
- Sed-replace thresholdvm → mpcvm across .go / .md / .yml / .json / .sh
- Fee/settlement primitive references now say mpcvm
- LLM.md canonical chain roster (LP-0130) already points at mpcvm/

F-Chain runtime pieces (fhe/, protocol/tfhe_keygen/,
runtime/f_chain_adapter.go) stay under mpcvm/ for now — they consume
the same shared threshold primitives. A follow-up extract to
chains/fhevm/ can happen once F-Chain runtime graduates.

Co-authored-by: Hanzo Dev <dev@hanzo.ai>
This commit is contained in:
zeekay
2026-07-03 01:22:30 -07:00
co-authored by Hanzo Dev
parent 28fef9c00e
commit a7e8f6c065
62 changed files with 66 additions and 66 deletions
+1 -1
View File
@@ -10,6 +10,6 @@
{"vm": "oraclevm", "image": "ghcr.io/luxfi/chains/oraclevm", "cgo": "0"},
{"vm": "quantumvm", "image": "ghcr.io/luxfi/chains/quantumvm", "cgo": "0"},
{"vm": "relayvm", "image": "ghcr.io/luxfi/chains/relayvm", "cgo": "0"},
{"vm": "thresholdvm", "image": "ghcr.io/luxfi/chains/thresholdvm", "cgo": "0"},
{"vm": "mpcvm", "image": "ghcr.io/luxfi/chains/mpcvm", "cgo": "0"},
{"vm": "zkvm", "image": "ghcr.io/luxfi/chains/zkvm", "cgo": "0"}
]
+2 -2
View File
@@ -34,8 +34,8 @@ domain-execution chain that MUST consume UTXO settlement via the
| `zkvm/` | **Z** | Rollup / private commitment + nullifier. Shielded supply is an X-escrow wrapper (LP-0130 §2, I-5) | LP-8000 |
| `aivm/` | **A** | Inference receipt + attestation. Rides B's settlement engine (LP-0130 §9) | LP-5000 |
| `bridgevm/` | **B** | Cross-chain message lifecycle. Fees deducted from bridged amount (LP-0130 §8) | LP-6000 |
| `thresholdvm/` | **M** | MPC signing / custody. Service fees paid by originating chain (LP-0130 §7); no user M-balance | LP-7100 |
| `thresholdvm/fhe/` | **F** | FHE runtime. Encrypted supply reconciles to X-escrow (LP-0130 §2, I-5) | LP-8200 |
| `mpcvm/` | **M** | MPC signing / custody. Service fees paid by originating chain (LP-0130 §7); no user M-balance | LP-7100 |
| `mpcvm/fhe/` | **F** | FHE runtime. Encrypted supply reconciles to X-escrow (LP-0130 §2, I-5) | LP-8200 |
**Service VMs** (not canonical primary chains under LP-0130):
+2 -2
View File
@@ -12,8 +12,8 @@ operator daemons (no luxd validator required), the same way `mpcd` and
|---|---|---|---|
| R-Chain (relay) | `chains/relayvm/` (shim) | `luxfi/relay/vm/` | `luxfi/relay/cmd/relayd` |
| O-Chain (oracle) | `chains/oraclevm/` (shim) | `luxfi/oracle/vm/` | `luxfi/oracle/cmd/oracled` |
| M-Chain (MPC threshold) | `luxfi/chains/thresholdvm/` (canonical, MPC mode) | (same) | n/a — runs in luxd |
| F-Chain (FHE) | `luxfi/chains/thresholdvm/` (canonical, FHE mode) | (same) | `luxfi/fhe/cmd/fhed` (standalone FHE daemon) |
| M-Chain (MPC threshold) | `luxfi/chains/mpcvm/` (canonical, MPC mode) | (same) | n/a — runs in luxd |
| F-Chain (FHE) | `luxfi/chains/mpcvm/` (canonical, FHE mode) | (same) | `luxfi/fhe/cmd/fhed` (standalone FHE daemon) |
| C-Chain (EVM) | `chains/evm/` | uses `chains/evm/cevm` (C++/GPU FFI shim) or pure-Go (default) via build tags | n/a — runs in luxd |
| A-Chain (AI) | `chains/aivm/` | `luxfi/ai` | n/a |
| I-Chain (identity) | `chains/identityvm/` | `luxfi/id` | n/a |
+2 -2
View File
@@ -39,6 +39,6 @@ Or copy binaries to `~/.lux/plugins/<vmid>`.
| relayvm | R-Chain | Cross-chain relay |
| servicenodevm | S-Chain | Service node registry |
| teleportvm | T-Chain | Unified teleport (bridge + relay + oracle) |
| thresholdvm (MPC) | M-Chain | MPC ceremonies (CGGMP21, FROST, Pulsar-general) — bridge custody for external wallets |
| thresholdvm (FHE) | F-Chain | FHE compute + TFHE bootstrap-key generation (encrypted EVM) |
| mpcvm (MPC) | M-Chain | MPC ceremonies (CGGMP21, FROST, Pulsar-general) — bridge custody for external wallets |
| mpcvm (FHE) | F-Chain | FHE compute + TFHE bootstrap-key generation (encrypted EVM) |
| zkvm | Z-Chain | Groth16 over BLS12-381 (rolls N × ML-DSA-65 sigs into 192-byte proof) |
+1 -1
View File
@@ -5,7 +5,7 @@
// signs, and wraps a single-signer Warp message.
//
// Every VM that emits a cross-chain Warp message — bridgevm reshare gossip,
// zkvm FHE task callbacks, thresholdvm decryption fulfillments — calls
// zkvm FHE task callbacks, mpcvm decryption fulfillments — calls
// BuildSigned. The build→sign→wrap sequence lives here and nowhere else, so
// there is exactly one way to turn (networkID, sourceChainID, payload) into a
// transmittable signed Warp envelope.
+2 -2
View File
@@ -11,7 +11,7 @@ flowchart LR
Stake[Validator stake + delegation]
end
subgraph Substrate["thresholdvm (library, this repo)"]
subgraph Substrate["mpcvm (library, this repo)"]
SM[Ceremony state machine]
Share[Share envelope: offset/len]
Lane[QuasarCertLane registration]
@@ -228,7 +228,7 @@ or boot-time failure, not a silent semantic bug.
Per LP-134 (Lux Chain Topology) and LP-7050 (Supersession Map), T-Chain is
fully removed. Its threshold concerns decompose onto two chains that import
this same `thresholdvm` **library** substrate in process:
this same `mpcvm` **library** substrate in process:
- **M-Chain** (`mpcvm`, LP-7100) — CGGMP21, FROST, Pulsar-general threshold
signing for bridge custody. Owns all threshold signing.
+2 -2
View File
@@ -1,4 +1,4 @@
# LLM context — `chains/thresholdvm/`
# LLM context — `chains/mpcvm/`
## What this is
@@ -16,7 +16,7 @@ shared by both chains.
- Do **not** turn this back into a chain. No `factory.go` exposed to
`chains.Manager`. No new VM ID. M-Chain and F-Chain are the chains.
- Do **not** import M-Chain or F-Chain code from this package. The
dependency graph is `mchain → thresholdvm` and `fchain → thresholdvm`;
dependency graph is `mchain → mpcvm` and `fchain → mpcvm`;
reverse edges are forbidden.
- Do **not** add a protocol implementation here. Protocol packages
expose **interfaces only**; impls live in the chain that runs the
+2 -2
View File
@@ -12,7 +12,7 @@ chains, each of which consumes this library substrate:
- **F-Chain** (`fhevm`, LP-8200) — TFHE keygen, encrypted EVM, threshold
decrypt, confidential compute. Owns *all* encrypted computation.
`chains/thresholdvm/` is the shared **library** these two chains import in
`chains/mpcvm/` is the shared **library** these two chains import in
process — it is not itself a chain and has no genesis, no validators, no
block production. There is **no** `teleportvm` and **no** "T-Chain": teleport
IS `bridgevm` (B-Chain, LP-6000). Any live identifier still naming "T-Chain",
@@ -99,7 +99,7 @@ in `runtime/`.
## Migration from T-Chain
LP-5013 is deprecated. The legacy chain at `chains/thresholdvm/` (this
LP-5013 is deprecated. The legacy chain at `chains/mpcvm/` (this
directory's `vm.go`, `block.go`, `factory.go`, `fhe/`, `cmd/`) hosts
the migration shims that route legacy `TChain*` cert lanes to the
appropriate `MChain*` / `FChain*` verifiers during the one-epoch grace
+2 -2
View File
@@ -3,7 +3,7 @@
//go:build cgo
package thresholdvm
package mpcvm
// dlopen probe for the MPCVM GPU plugin. Runs once at package init() and
// pins the resolved GPUBackend into the gpuBackend singleton. Probe order
@@ -18,7 +18,7 @@ package thresholdvm
// search path: $DYLD_LIBRARY_PATH, $LD_LIBRARY_PATH, system dirs).
//
// The probe is intentionally silent on failure: a host with no GPU still
// boots; thresholdvm just runs on the CPU reference (the existing
// boots; mpcvm just runs on the CPU reference (the existing
// protocol/, factory.go, executor.go state machine, unchanged by this
// bridge).
+1 -1
View File
@@ -1,7 +1,7 @@
// Copyright (C) 2019-2025, Lux Industries Inc. All rights reserved.
// See the file LICENSE for licensing terms.
package thresholdvm
package mpcvm
import (
"context"
@@ -15,7 +15,7 @@ import (
"errors"
"fmt"
"github.com/luxfi/chains/thresholdvm/types"
"github.com/luxfi/chains/mpcvm/types"
)
// LaneVerifier is the contract a chain implements to validate shares
@@ -7,7 +7,7 @@ import (
"strings"
"testing"
"github.com/luxfi/chains/thresholdvm/types"
"github.com/luxfi/chains/mpcvm/types"
)
type stubVerifier struct{ lane types.CertLane }
+3 -3
View File
@@ -1,7 +1,7 @@
// Copyright (C) 2019-2025, Lux Industries Inc. All rights reserved.
// See the file LICENSE for licensing terms.
package thresholdvm
package mpcvm
import (
"bytes"
@@ -15,7 +15,7 @@ import (
"time"
)
// Client provides access to thresholdvm services. Per LP-134, this serves
// Client provides access to mpcvm services. Per LP-134, this serves
// M-Chain (MPC mode) and F-Chain (FHE mode); legacy T-Chain MPC routes here.
type Client struct {
endpoint string
@@ -544,7 +544,7 @@ func (c *Client) Health(ctx context.Context) (map[string]interface{}, error) {
return result, nil
}
// IsReady checks if thresholdvm (M-Chain MPC mode per LP-134) is ready
// IsReady checks if mpcvm (M-Chain MPC mode per LP-134) is ready
func (c *Client) IsReady(ctx context.Context) (bool, error) {
info, err := c.GetInfo(ctx)
if err != nil {
@@ -9,7 +9,7 @@ import (
"os"
"github.com/luxfi/log"
"github.com/luxfi/chains/thresholdvm"
"github.com/luxfi/chains/mpcvm"
"github.com/luxfi/sys/ulimit"
"github.com/luxfi/vm/chain"
"github.com/luxfi/vm/rpc"
@@ -26,7 +26,7 @@ func main() {
os.Exit(1)
}
f := &thresholdvm.Factory{}
f := &mpcvm.Factory{}
raw, err := f.New(log.Root())
if err != nil {
fmt.Fprintf(os.Stderr, "factory error: %s\n", err)
+1 -1
View File
@@ -1,7 +1,7 @@
// Copyright (C) 2019-2025, Lux Industries Inc. All rights reserved.
// See the file LICENSE for licensing terms.
package thresholdvm
package mpcvm
import (
"github.com/luxfi/node/vms/pcodecs"
@@ -29,7 +29,7 @@ both chains' binaries.
+----------+---------------+
|
+--------v---------+
| thresholdvm |
| mpcvm |
| (this library) |
| |
| types/ |
@@ -1,7 +1,7 @@
# M-Chain Integration
This document describes how `chains/mchain/` plugs into the
`thresholdvm` substrate when running in **MPC mode** (per LP-134).
`mpcvm` substrate when running in **MPC mode** (per LP-134).
The same substrate, running in FHE mode, serves F-Chain — see
`F_CHAIN_INTEGRATION.md` for that side. The legacy "T-Chain" name is
removed entirely: teleport IS `bridgevm` (B-Chain, LP-6000), there is no `teleportvm` (LP-6332 superseded by LP-6000 per LP-7050).
@@ -1,7 +1,7 @@
// Copyright (C) 2019-2025, Lux Industries Inc. All rights reserved.
// See the file LICENSE for licensing terms.
package thresholdvm
package mpcvm
import (
"context"
+1 -1
View File
@@ -1,7 +1,7 @@
// Copyright (C) 2019-2025, Lux Industries Inc. All rights reserved.
// See the file LICENSE for licensing terms.
package thresholdvm
package mpcvm
import (
"github.com/luxfi/ids"
+1 -1
View File
@@ -1,7 +1,7 @@
// Copyright (C) 2019-2025, Lux Industries Inc. All rights reserved.
// See the file LICENSE for licensing terms.
package thresholdvm
package mpcvm
import (
"github.com/luxfi/node/vms/types/fee"
@@ -1,7 +1,7 @@
// Copyright (C) 2019-2025, Lux Industries Inc. All rights reserved.
// See the file LICENSE for licensing terms.
package thresholdvm
package mpcvm
import (
"errors"
@@ -3,14 +3,14 @@
//go:build cgo
package thresholdvm
package mpcvm
// GPU bridge — dlopen + dlsym substrate for the MPCVM state-machine kernels.
//
// This file binds Go to the host launchers exported by the per-backend GPU
// plugins in the lux GPU plugin backends/<X>/. Unlike the cevm bridge
// which links statically through pkg-config (libevm + libevm-gpu), the
// thresholdvm bridge is a runtime overlay: zero compile-time dependency on
// mpcvm bridge is a runtime overlay: zero compile-time dependency on
// the plugin, no pkg-config, no link-time resolution. Either the dlopen
// succeeds at init() and GPUBackend is populated, or it doesn't and
// callers fall back to the CPU reference (the Go state machine in
@@ -212,7 +212,7 @@ import (
// resolved at init() time. Callers check this to fall back to the CPU
// reference (the protocol/ + executor.go state machine, which is unchanged
// by this bridge).
var ErrGPUNotAvailable = errors.New("thresholdvm: GPU backend not available (no plugin dlopened)")
var ErrGPUNotAvailable = errors.New("mpcvm: GPU backend not available (no plugin dlopened)")
// GPUBackendKind is the resolved plugin family. Matches the dlopen probe
// order in backend.go: cuda → hip → metal → vulkan → webgpu.
@@ -419,7 +419,7 @@ func assertSizes() {
for _, c := range checks {
if int(c.got) != c.want {
panic(fmt.Sprintf(
"thresholdvm: GPU layout mismatch — %s sizeof=%d want=%d. "+
"mpcvm: GPU layout mismatch — %s sizeof=%d want=%d. "+
"Rebuild gpu-kernels (ops/mpcvm/cuda/mpcvm_kernels_common.cuh) "+
"or update the Go struct.", c.name, c.got, c.want))
}
@@ -507,7 +507,7 @@ func (g *GPUBackend) CeremonyApply(
return 0, ErrGPUNotAvailable
}
if desc == nil || len(ceremonies) == 0 {
return 0, fmt.Errorf("thresholdvm.CeremonyApply: nil desc or empty ceremonies")
return 0, fmt.Errorf("mpcvm.CeremonyApply: nil desc or empty ceremonies")
}
var (
ceremonyApplied uint32
@@ -543,7 +543,7 @@ func (g *GPUBackend) CeremonyApply(
runtime.KeepAlive(emptyContribOps)
runtime.KeepAlive(emptyContributions)
if rc != 0 {
return 0, fmt.Errorf("thresholdvm.CeremonyApply: launcher rc=%d", int(rc))
return 0, fmt.Errorf("mpcvm.CeremonyApply: launcher rc=%d", int(rc))
}
return ceremonyApplied, nil
}
@@ -568,7 +568,7 @@ func (g *GPUBackend) KeyShareApply(
}
if desc == nil || len(ceremonies) == 0 ||
len(keyShares) == 0 || len(contributions) == 0 {
return 0, 0, 0, fmt.Errorf("thresholdvm.KeyShareApply: nil desc or empty arena")
return 0, 0, 0, fmt.Errorf("mpcvm.KeyShareApply: nil desc or empty arena")
}
rc := C.call_ceremony_sweep(
g.fnCeremonySweep,
@@ -590,7 +590,7 @@ func (g *GPUBackend) KeyShareApply(
runtime.KeepAlive(keyShares)
runtime.KeepAlive(contributions)
if rc != 0 {
return 0, 0, 0, fmt.Errorf("thresholdvm.KeyShareApply: launcher rc=%d", int(rc))
return 0, 0, 0, fmt.Errorf("mpcvm.KeyShareApply: launcher rc=%d", int(rc))
}
return roundAdvance, finalized, failed, nil
}
@@ -611,7 +611,7 @@ func (g *GPUBackend) ContributionApply(
return 0, ErrGPUNotAvailable
}
if desc == nil || len(ceremonies) == 0 || len(contributions) == 0 {
return 0, fmt.Errorf("thresholdvm.ContributionApply: nil desc or empty arena")
return 0, fmt.Errorf("mpcvm.ContributionApply: nil desc or empty arena")
}
var (
ceremonyApplied uint32
@@ -644,7 +644,7 @@ func (g *GPUBackend) ContributionApply(
runtime.KeepAlive(ceremonies)
runtime.KeepAlive(contributions)
if rc != 0 {
return 0, fmt.Errorf("thresholdvm.ContributionApply: launcher rc=%d", int(rc))
return 0, fmt.Errorf("mpcvm.ContributionApply: launcher rc=%d", int(rc))
}
return contributionApplied, nil
}
@@ -668,12 +668,12 @@ func (g *GPUBackend) MPCTransition(
return nil, ErrGPUNotAvailable
}
if g.fnComputeLeaves == nil || g.fnComposeRoot == nil {
return nil, fmt.Errorf("thresholdvm.MPCTransition: %w (compute_leaves or compose_root missing)",
return nil, fmt.Errorf("mpcvm.MPCTransition: %w (compute_leaves or compose_root missing)",
ErrGPUNotAvailable)
}
if desc == nil || state == nil ||
len(ceremonies) == 0 || len(keyShares) == 0 || len(contributions) == 0 {
return nil, fmt.Errorf("thresholdvm.MPCTransition: nil desc/state or empty arena")
return nil, fmt.Errorf("mpcvm.MPCTransition: nil desc/state or empty arena")
}
// Scratch buffers consumed by compute_leaves and feeding compose_root.
@@ -709,7 +709,7 @@ func (g *GPUBackend) MPCTransition(
nil,
)
if rc != 0 {
return nil, fmt.Errorf("thresholdvm.MPCTransition compute_leaves: launcher rc=%d", int(rc))
return nil, fmt.Errorf("mpcvm.MPCTransition compute_leaves: launcher rc=%d", int(rc))
}
rc = C.call_compose_root(
@@ -744,7 +744,7 @@ func (g *GPUBackend) MPCTransition(
runtime.KeepAlive(shareMask)
runtime.KeepAlive(contributionMask)
if rc != 0 {
return nil, fmt.Errorf("thresholdvm.MPCTransition compose_root: launcher rc=%d", int(rc))
return nil, fmt.Errorf("mpcvm.MPCTransition compose_root: launcher rc=%d", int(rc))
}
return &result, nil
}
@@ -3,17 +3,17 @@
//go:build !cgo
package thresholdvm
package mpcvm
import "errors"
// ErrGPUNotAvailable is returned by GPUBackend methods when the build was
// produced without CGo. The thresholdvm GPU substrate is a runtime overlay
// produced without CGo. The mpcvm GPU substrate is a runtime overlay
// that requires dlopen()/dlsym() — under !cgo there is no way to reach the
// host launchers, so every method on GPUBackend short-circuits to this
// error and callers fall back to the CPU reference (the Go state machine
// in protocol/, factory.go, executor.go — unchanged).
var ErrGPUNotAvailable = errors.New("thresholdvm: GPU backend not available (built without CGo)")
var ErrGPUNotAvailable = errors.New("mpcvm: GPU backend not available (built without CGo)")
// GPUBackendKind mirrors the cgo variant so the package surface is
// identical regardless of build mode. Under nocgo every value is None.
@@ -1,7 +1,7 @@
// Copyright (C) 2026, Lux Industries Inc. All rights reserved.
// See the file LICENSE for licensing terms.
package thresholdvm
package mpcvm
import (
"errors"
@@ -12,7 +12,7 @@ package cggmp21
import (
"context"
"github.com/luxfi/chains/thresholdvm/types"
"github.com/luxfi/chains/mpcvm/types"
)
// Verifier validates a CGGMP21 share payload. It is registered into
@@ -16,7 +16,7 @@ package corona_general
import (
"context"
"github.com/luxfi/chains/thresholdvm/types"
"github.com/luxfi/chains/mpcvm/types"
)
// Verifier validates Corona-general share payloads. Registered as
@@ -11,7 +11,7 @@ package frost
import (
"context"
"github.com/luxfi/chains/thresholdvm/types"
"github.com/luxfi/chains/mpcvm/types"
)
// Verifier validates FROST share payloads. Registered as the
@@ -20,7 +20,7 @@ package tfhe_keygen
import (
"context"
"github.com/luxfi/chains/thresholdvm/types"
"github.com/luxfi/chains/mpcvm/types"
)
// Producer is implemented by M-Chain. It runs the MPC ceremony that
@@ -1,7 +1,7 @@
// Copyright (C) 2019-2025, Lux Industries Inc. All rights reserved.
// See the file LICENSE for licensing terms.
package thresholdvm
package mpcvm
import (
"context"
@@ -1,7 +1,7 @@
// Copyright (C) 2019-2025, Lux Industries Inc. All rights reserved.
// See the file LICENSE for licensing terms.
package thresholdvm
package mpcvm
import (
"context"
+1 -1
View File
@@ -1,7 +1,7 @@
// Copyright (C) 2019-2025, Lux Industries Inc. All rights reserved.
// See the file LICENSE for licensing terms.
package thresholdvm
package mpcvm
import (
"encoding/hex"
@@ -6,8 +6,8 @@ package runtime
import (
"context"
"github.com/luxfi/chains/thresholdvm/cert"
"github.com/luxfi/chains/thresholdvm/types"
"github.com/luxfi/chains/mpcvm/cert"
"github.com/luxfi/chains/mpcvm/types"
)
// FChainAdapter is the contract F-Chain implements. Same state
@@ -15,8 +15,8 @@ package runtime
import (
"context"
"github.com/luxfi/chains/thresholdvm/cert"
"github.com/luxfi/chains/thresholdvm/types"
"github.com/luxfi/chains/mpcvm/cert"
"github.com/luxfi/chains/mpcvm/types"
)
// MChainAdapter is the contract M-Chain implements. The substrate
+2 -2
View File
@@ -29,8 +29,8 @@
// ThresholdService key/decryption committees; owns FHE jobs and
// threshold-decrypt. This is F-Chain's surface (LP-8200).
//
// thresholdvm itself remains a LIBRARY: there is no T-Chain, no teleportvm.
package thresholdvm
// mpcvm itself remains a LIBRARY: there is no T-Chain, no teleportvm.
package mpcvm
import "github.com/luxfi/threshold/pkg/party"
@@ -1,7 +1,7 @@
// Copyright (C) 2019-2026, Lux Industries Inc. All rights reserved.
// See the file LICENSE for licensing terms.
package thresholdvm
package mpcvm
import "testing"
+3 -3
View File
@@ -1,14 +1,14 @@
// Copyright (C) 2019-2025, Lux Industries Inc. All rights reserved.
// See the file LICENSE for licensing terms.
// Package thresholdvm implements the shared threshold VM substrate — a LIBRARY,
// Package mpcvm implements the shared threshold VM substrate — a LIBRARY,
// not a chain — consumed by M-Chain (MPC: CGGMP21/FROST/Pulsar-general threshold
// signing for bridge custody of external wallets, LP-7100) and F-Chain (FHE:
// TFHE compute / threshold decrypt, LP-8200). Per LP-134 / LP-7050 there is NO
// T-Chain and NO teleportvm; teleport IS bridgevm (B-Chain, LP-6000). Any live
// identifier still naming "T-Chain" or "ThresholdVM-as-a-chain" is stale.
// See ../README.md.
package thresholdvm
package mpcvm
import (
"context"
@@ -250,7 +250,7 @@ func (vm *VM) Initialize(
// fee.Validate passes for the sentinel even with zero MinTxFee.
vm.feePolicy = newFeePolicy()
if err := fee.Validate(vm.feePolicy); err != nil {
return fmt.Errorf("thresholdvm: fee policy: %w", err)
return fmt.Errorf("mpcvm: fee policy: %w", err)
}
// Parse configuration