From 3ab99fe411765376333dbf1e8e30e1ccd39661e7 Mon Sep 17 00:00:00 2001 From: Cassandra Heart Date: Mon, 16 Feb 2026 02:19:04 -0600 Subject: [PATCH] additional error logging for merge-related signatures --- .../intrinsics/global/global_prover_join.go | 23 +++++++++++++++- .../global/global_prover_seniority_merge.go | 26 +++++++++++++++---- 2 files changed, 43 insertions(+), 6 deletions(-) diff --git a/node/execution/intrinsics/global/global_prover_join.go b/node/execution/intrinsics/global/global_prover_join.go index af804c2..bc8769e 100644 --- a/node/execution/intrinsics/global/global_prover_join.go +++ b/node/execution/intrinsics/global/global_prover_join.go @@ -567,6 +567,23 @@ func (p *ProverJoin) Prove(frameNumber uint64) error { if err != nil { return errors.Wrap(err, "prove") } + + // Self-verify: catch key material issues before publishing + valid, verifyErr := p.keyManager.ValidateSignature( + mt.KeyType, + mt.PublicKey, + blsPublicKey, + mt.Signature, + []byte("PROVER_JOIN_MERGE"), + ) + if verifyErr != nil || !valid { + return fmt.Errorf( + "prove: merge target self-verify failed "+ + "(key_type=%d, pub_key_len=%d, sig_len=%d, bls_pub_len=%d, err=%v)", + mt.KeyType, len(mt.PublicKey), len(mt.Signature), + len(blsPublicKey), verifyErr, + ) + } } } @@ -805,7 +822,11 @@ func (p *ProverJoin) Verify(frameNumber uint64) (valid bool, err error) { ) if err != nil || !valid { return false, errors.Wrap( - errors.New("invalid merge target signature"), + fmt.Errorf( + "invalid merge target signature (key_type=%d, pub_key_len=%d, sig_len=%d, bls_pub_len=%d)", + mt.KeyType, len(mt.PublicKey), len(mt.Signature), + len(p.PublicKeySignatureBLS48581.PublicKey), + ), "verify: invalid prover join", ) } diff --git a/node/execution/intrinsics/global/global_prover_seniority_merge.go b/node/execution/intrinsics/global/global_prover_seniority_merge.go index 6e40c08..77261bd 100644 --- a/node/execution/intrinsics/global/global_prover_seniority_merge.go +++ b/node/execution/intrinsics/global/global_prover_seniority_merge.go @@ -2,6 +2,7 @@ package global import ( "encoding/binary" + "fmt" "math/big" "slices" @@ -235,23 +236,38 @@ func (p *ProverSeniorityMerge) Prove(frameNumber uint64) error { } // Sign merge target signatures + blsPublicKey := signingKey.Public().([]byte) for _, mt := range p.MergeTargets { if mt.signer != nil { mt.Signature, err = mt.signer.SignWithDomain( - signingKey.Public().([]byte), + blsPublicKey, []byte("PROVER_SENIORITY_MERGE"), ) if err != nil { return errors.Wrap(err, "prove") } + + // Self-verify: catch key material issues before publishing + valid, verifyErr := p.keyManager.ValidateSignature( + mt.KeyType, + mt.PublicKey, + blsPublicKey, + mt.Signature, + []byte("PROVER_SENIORITY_MERGE"), + ) + if verifyErr != nil || !valid { + return fmt.Errorf( + "prove: merge target self-verify failed "+ + "(key_type=%d, pub_key_len=%d, sig_len=%d, bls_pub_len=%d, err=%v)", + mt.KeyType, len(mt.PublicKey), len(mt.Signature), + len(blsPublicKey), verifyErr, + ) + } } } - // Get the public key - pubKey := signingKey.Public() - // Compute address from public key - addressBI, err := poseidon.HashBytes(pubKey.([]byte)) + addressBI, err := poseidon.HashBytes(blsPublicKey) if err != nil { return errors.Wrap(err, "prove") }