mirror of
https://github.com/luxfi/chains.git
synced 2026-09-24 00:26:00 +00:00
B-Chain does NOT do threshold custody keygen/signing. Custody is M-Chain's job: dealerless CGGMP21/FROST distributed keygen via luxfi/threshold (cmp.Keygen/frost.Keygen — multi-round protocols over a message router; no trusted dealer, the group secret is never assembled by any validator). B-Chain requests keygen/reshare/sign from M-Chain over Warp (CrossChainMPCRequest) and only VERIFIES the resulting CMP threshold signatures (block.Verify → mpcConfig, accel_verify.go). bridgevm carried a SECOND, parallel MPC subsystem — a BLS MPCKeyManager that did its own in-VM keygen (until this session, via a trusted dealer) feeding BridgeSigner/DeliveryConfirmationSigner/BridgeMessageValidator. It duplicated custody, used the wrong scheme (BLS vs the live CMP path), and was never in block.Verify. Deleted entirely — one and one way. Removed: - mpc.go (MPCKeyManager, SigningSession) - bridge_signing.go (BridgeSigner, DeliveryConfirmationSigner, BridgeMessageValidator, MPCCoordinator, BridgeMessage/DeliveryConfirmation) - vm_mpc_integration.go (InitializeMPCKeys, TriggerKeygen, ProcessBridgeMessage) - vm.go: the 5 BLS fields + their init block (no key material is generated on B-Chain now) - feegate.go: gateUserBridgeMessage (BLS-message fee gate) → replaced by gateUserBridgeFee(uint64) on the live path (LP-0130 §8) Relocated / repointed: - ErrInvalidBridgeSignature → accel_verify.go (the live CMP verify path) - rpc.go MPCReady/MPCPublicKey → vm.mpcGroupPublicKey() (reads the CMP custody group point from mpcConfig, i.e. M-Chain's key), never a B-Chain-held secret Build + vet + full bridgevm tests green. Co-authored-by: Hanzo Dev <[email protected]>