fix: signature validation cache for messages with Delegated signatures. (#9916)

This commit is contained in:
raulk 2022-12-20 22:49:53 +00:00 committed by GitHub
parent 28e61691d8
commit d9c13f19b0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 6 additions and 31 deletions

View File

@ -3,7 +3,6 @@ package messagepool
import ( import (
"bytes" "bytes"
"context" "context"
"encoding/hex"
"errors" "errors"
"fmt" "fmt"
"math" "math"
@ -285,7 +284,7 @@ func (ms *msgSet) add(m *types.SignedMessage, mp *MessagePool, strict, untrusted
} }
ms.requiredFunds.Sub(ms.requiredFunds, exms.Message.RequiredFunds().Int) ms.requiredFunds.Sub(ms.requiredFunds, exms.Message.RequiredFunds().Int)
//ms.requiredFunds.Sub(ms.requiredFunds, exms.Message.Value.Int) // ms.requiredFunds.Sub(ms.requiredFunds, exms.Message.Value.Int)
} }
if !has && strict && len(ms.msgs) >= maxActorPendingMessages { if !has && strict && len(ms.msgs) >= maxActorPendingMessages {
@ -301,7 +300,7 @@ func (ms *msgSet) add(m *types.SignedMessage, mp *MessagePool, strict, untrusted
ms.nextNonce = nextNonce ms.nextNonce = nextNonce
ms.msgs[m.Message.Nonce] = m ms.msgs[m.Message.Nonce] = m
ms.requiredFunds.Add(ms.requiredFunds, m.Message.RequiredFunds().Int) ms.requiredFunds.Add(ms.requiredFunds, m.Message.RequiredFunds().Int)
//ms.requiredFunds.Add(ms.requiredFunds, m.Message.Value.Int) // ms.requiredFunds.Add(ms.requiredFunds, m.Message.Value.Int)
return !has, nil return !has, nil
} }
@ -321,7 +320,7 @@ func (ms *msgSet) rm(nonce uint64, applied bool) {
} }
ms.requiredFunds.Sub(ms.requiredFunds, m.Message.RequiredFunds().Int) ms.requiredFunds.Sub(ms.requiredFunds, m.Message.RequiredFunds().Int)
//ms.requiredFunds.Sub(ms.requiredFunds, m.Message.Value.Int) // ms.requiredFunds.Sub(ms.requiredFunds, m.Message.Value.Int)
delete(ms.msgs, nonce) delete(ms.msgs, nonce)
// adjust next nonce // adjust next nonce
@ -347,7 +346,7 @@ func (ms *msgSet) getRequiredFunds(nonce uint64) types.BigInt {
m, has := ms.msgs[nonce] m, has := ms.msgs[nonce]
if has { if has {
requiredFunds.Sub(requiredFunds, m.Message.RequiredFunds().Int) requiredFunds.Sub(requiredFunds, m.Message.RequiredFunds().Int)
//requiredFunds.Sub(requiredFunds, m.Message.Value.Int) // requiredFunds.Sub(requiredFunds, m.Message.Value.Int)
} }
return types.BigInt{Int: requiredFunds} return types.BigInt{Int: requiredFunds}
@ -771,22 +770,10 @@ func sigCacheKey(m *types.SignedMessage) (string, error) {
if len(m.Signature.Data) != ffi.SignatureBytes { if len(m.Signature.Data) != ffi.SignatureBytes {
return "", fmt.Errorf("bls signature incorrectly sized") return "", fmt.Errorf("bls signature incorrectly sized")
} }
hashCache := blake2b.Sum256(append(m.Cid().Bytes(), m.Signature.Data...)) hashCache := blake2b.Sum256(append(m.Cid().Bytes(), m.Signature.Data...))
return string(hashCache[:]), nil return string(hashCache[:]), nil
case crypto.SigTypeSecp256k1: case crypto.SigTypeSecp256k1, crypto.SigTypeDelegated:
return string(m.Cid().Bytes()), nil return string(m.Cid().Bytes()), nil
case crypto.SigTypeDelegated:
txArgs, err := ethtypes.NewEthTxArgsFromMessage(&m.Message)
if err != nil {
return "", err
}
msg, err := txArgs.HashedOriginalRlpMsg()
if err != nil {
return "", err
}
return hex.EncodeToString(msg), nil
default: default:
return "", xerrors.Errorf("unrecognized signature type: %d", m.Signature.Type) return "", xerrors.Errorf("unrecognized signature type: %d", m.Signature.Type)
} }
@ -837,7 +824,7 @@ func (mp *MessagePool) checkBalance(ctx context.Context, m *types.SignedMessage,
} }
// add Value for soft failure check // add Value for soft failure check
//requiredFunds = types.BigAdd(requiredFunds, m.Message.Value) // requiredFunds = types.BigAdd(requiredFunds, m.Message.Value)
mset, ok, err := mp.getPendingMset(ctx, m.Message.From) mset, ok, err := mp.getPendingMset(ctx, m.Message.From)
if err != nil { if err != nil {

View File

@ -183,18 +183,6 @@ func (tx *EthTxArgs) ToSignedMessage() (*types.SignedMessage, error) {
} }
func (tx *EthTxArgs) HashedOriginalRlpMsg() ([]byte, error) {
msg, err := tx.OriginalRlpMsg()
if err != nil {
return nil, err
}
hasher := sha3.NewLegacyKeccak256()
hasher.Write(msg)
hash := hasher.Sum(nil)
return hash, nil
}
func (tx *EthTxArgs) OriginalRlpMsg() ([]byte, error) { func (tx *EthTxArgs) OriginalRlpMsg() ([]byte, error) {
chainId, err := formatInt(tx.ChainID) chainId, err := formatInt(tx.ChainID)
if err != nil { if err != nil {