@@ -36,6 +36,10 @@ func TransferSignatureValidate(c context.Context, ctx *Context) error {
3636 return ErrInvalidInputs
3737 }
3838
39+ // Cache verifiers within this transaction to avoid redundant verifyProof() calls
40+ // for inputs with the same owner identity
41+ verifierCache := make (map [string ]driver.Verifier )
42+
3943 var isRedeem bool
4044 var inputToken []* token.Token
4145 for i , in := range ctx .TransferAction .Inputs {
@@ -44,10 +48,19 @@ func TransferSignatureValidate(c context.Context, ctx *Context) error {
4448
4549 // check sender signature
4650 ctx .Logger .Debugf ("check sender [%d][%s]" , i , driver .Identity (tok .Owner ).UniqueID ())
47- verifier , err := ctx .Deserializer .GetOwnerVerifier (c , tok .Owner )
48- if err != nil {
49- return errors .Wrapf (err , "failed deserializing owner [%d][%v][%s]" , i , in , driver .Identity (tok .Owner ))
51+
52+ // Check cache first to avoid redundant expensive verifyProof() calls
53+ ownerKey := driver .Identity (tok .Owner ).UniqueID ()
54+ verifier , cached := verifierCache [ownerKey ]
55+ if ! cached {
56+ var err error
57+ verifier , err = ctx .Deserializer .GetOwnerVerifier (c , tok .Owner )
58+ if err != nil {
59+ return errors .Wrapf (err , "failed deserializing owner [%d][%v][%s]" , i , in , driver .Identity (tok .Owner ))
60+ }
61+ verifierCache [ownerKey ] = verifier
5062 }
63+
5164 ctx .Logger .Debugf ("signature verification [%d][%v][%s]" , i , in , driver .Identity (tok .Owner ).UniqueID ())
5265 sigma , err := ctx .SignatureProvider .HasBeenSignedBy (c , tok .Owner , verifier )
5366 if err != nil {
@@ -132,10 +145,12 @@ func TransferZKProofValidate(c context.Context, ctx *Context) error {
132145 in [i ] = tok .Data
133146 }
134147
135- if err := transfer .NewVerifier (
148+ err := transfer .NewVerifier (
136149 in ,
137150 ctx .TransferAction .GetOutputCommitments (),
138- ctx .PP ).Verify (ctx .TransferAction .GetProof ()); err != nil {
151+ ctx .PP ).Verify (ctx .TransferAction .GetProof ())
152+
153+ if err != nil {
139154 return errors .Join (err , ErrInvalidZKP )
140155 }
141156
0 commit comments