Skip to content

Commit 568b86b

Browse files
committed
rpcserver+taprpc: add challenge to ownership RPCs
1 parent 356b874 commit 568b86b

File tree

4 files changed

+197
-124
lines changed

4 files changed

+197
-124
lines changed

rpcserver.go

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5849,6 +5849,10 @@ func (r *rpcServer) ProveAssetOwnership(ctx context.Context,
58495849
return nil, fmt.Errorf("asset ID must be 32 bytes")
58505850
}
58515851

5852+
if len(req.Challenge) != 0 && len(req.Challenge) != 32 {
5853+
return nil, fmt.Errorf("challenge must be 32 bytes")
5854+
}
5855+
58525856
var (
58535857
assetID = fn.ToArray[asset.ID](req.AssetId)
58545858
outPoint *wire.OutPoint
@@ -5903,8 +5907,16 @@ func (r *rpcServer) ProveAssetOwnership(ctx context.Context,
59035907
return nil, fmt.Errorf("error fetching commitment: %w", err)
59045908
}
59055909

5910+
var challengeOpt fn.Option[[32]byte]
5911+
5912+
if len(req.Challenge) == 32 {
5913+
var bCopy [32]byte
5914+
copy(bCopy[:], req.Challenge[:32])
5915+
challengeOpt = fn.Some[[32]byte](bCopy)
5916+
}
5917+
59065918
challengeWitness, err := r.cfg.AssetWallet.SignOwnershipProof(
5907-
inputCommitment.Asset.Copy(),
5919+
inputCommitment.Asset.Copy(), challengeOpt,
59085920
)
59095921
if err != nil {
59105922
return nil, fmt.Errorf("error signing ownership proof: %w", err)
@@ -5937,6 +5949,10 @@ func (r *rpcServer) VerifyAssetOwnership(ctx context.Context,
59375949
return nil, fmt.Errorf("a valid proof must be specified")
59385950
}
59395951

5952+
if len(req.Challenge) != 0 && len(req.Challenge) != 32 {
5953+
return nil, fmt.Errorf("challenge must be 32 bytes")
5954+
}
5955+
59405956
p, err := proof.Decode(req.ProofWithWitness)
59415957
if err != nil {
59425958
return nil, fmt.Errorf("cannot decode proof file: %w", err)
@@ -5950,9 +5966,20 @@ func (r *rpcServer) VerifyAssetOwnership(ctx context.Context,
59505966

59515967
headerVerifier := tapgarden.GenHeaderVerifier(ctx, r.cfg.ChainBridge)
59525968
groupVerifier := tapgarden.GenGroupVerifier(ctx, r.cfg.MintingStore)
5969+
5970+
var (
5971+
challengeBytes [32]byte
5972+
opts []proof.ProofVerificationOption
5973+
)
5974+
5975+
if len(req.Challenge) == 32 {
5976+
copy(challengeBytes[:], req.Challenge[:32])
5977+
opts = append(opts, proof.WithChallengeBytes(challengeBytes))
5978+
}
5979+
59535980
snapShot, err := p.Verify(
59545981
ctx, nil, headerVerifier, proof.DefaultMerkleVerifier,
5955-
groupVerifier, lookup,
5982+
groupVerifier, lookup, opts...,
59565983
)
59575984
if err != nil {
59585985
return nil, fmt.Errorf("error verifying proof: %w", err)

0 commit comments

Comments
 (0)