-
Notifications
You must be signed in to change notification settings - Fork 533
Description
Summary
We’re seeing ACA‑Py Present‑Proof v2 (DIF) fail to match a W3C LDP VC that is clearly present in the holder wallet. /present-proof-2.0/records/{pres_ex_id}/credentials returns [], and even when we force dif.record_ids using the wallet record_id or issuance cred_id_stored, the holder still sends an empty Verifiable Presentation (verifiableCredential: [], descriptor_map: []) and the verifier ends in state=done, verified=false. We previously considered dropping schema matching but that will result in issue #4006 , so we currently have no workable workaround.
Environment
- ACA‑Py: 1.4.0
- Wallet: Askar
- Protocols: issue‑credential v2 (ld‑proof) + present‑proof v2 (DIF)
- Two internal ACA‑Py agents (holder + verifier), same Docker Compose stack
- --auto-respond-presentation-request disabled; we call send-presentation explicitly
Credential (from /credentials/w3c)
Example record (sanitized):
record_id: 941fd068c88645a5a1594c32116af550expanded_types:https://www.w3.org/2018/credentials#VerifiableCredentialhttps://schema.affinidi.io/AyraBusinessCardV1R0.jsonld
proof_types:Ed25519Signature2020credentialSchema.id: https://schema.affinidi.io/AyraBusinessCardV1R0.jsontype:["VerifiableCredential","AyraBusinessCard"]schema_ids:[]
Presentation Definition (verifier request)
{
"name": "Ayra Business Card LDP",
"purpose": "Present an Ayra Business Card signed as a Linked Data Proof VC",
"format": { "ldp_vp": { "proof_type": ["Ed25519Signature2020"] } },
"input_descriptors": [{
"id": "ayra-business-card",
"purpose": "Must be an Ayra Business Card with Ed25519Signature2020",
"schema": [
{ "uri": "https://schema.affinidi.io/AyraBusinessCardV1R0.jsonld#AyraBusinessCard" },
{ "uri": "https://schema.affinidi.io/AyraBusinessCardV1R0.jsonld" },
{ "uri": "https://schema.affinidi.io/AyraBusinessCardV1R0.json" },
{ "uri": "https://www.w3.org/2018/credentials#VerifiableCredential" }
],
"constraints": {
"fields": [
{ "path": ["$.type","$.vc.type","$.credential.type"], "filter": { "type": "array", "contains": { "const": "AyraBusinessCard" } } },
{ "path": ["$.proof.type","$.proof[0].type"], "filter": { "type": "string", "const": "Ed25519Signature2020" } }
]
}
}]
}
Steps to Reproduce
- Issue a W3C LDP VC (issue‑credential v2) to the holder.
- Confirm VC exists in holder wallet via
/credentials/w3c(record shown above). - Verifier sends present‑proof v2 request with Presentation Definition above (DIF).
- Holder checks
/present-proof-2.0/records/{pres_ex_id}/credentials→ returns[]. - Holder calls
/present-proof-2.0/records/{pres_ex_id}/send-presentationwith:{ "auto_remove": false, "dif": { "record_ids": { "ayra-business-card": ["<wallet record_id>"] } } } - Verifier calls
verify‑presentation.
Observed
- Holder sends VP with
verifiableCredential:[]anddescriptor_map:[]. - Verifier record ends in
state=done,verified=false. - This is consistent whether we use:
- wallet
record_idfrom/credentials/w3c, or cred_id_storedfromissue‑credential v2 record.
- wallet
Expected
- ACA‑Py should match the wallet credential to the PD.
/present-proof-2.0/records/{pres_ex_id}/credentialsshould return candidates.- VP should contain the VC and verifier should return
verified=true.
Attempts / Workarounds
- Disabled holder auto‑respond; explicit send‑presentation with record_ids.
- Used wallet
record_idand issuancecred_id_storedas record_ids. - Adjusted schema URIs (fragment/no‑fragment, JSON/JSON‑LD).
- Restrict proof_type to single suite (
Ed25519Signature2020). - Tried VC v1 context experiment; still
verified=false. - Dropping schema matching might allow selection, but is impacted by present-proof v2 (DIF) crashes when input_descriptor.schema is omitted (NoneType uri_groups) #4006 (schema requirements) → no stable workaround.
Questions / Guidance Needed
- For DIF present‑proof v2, which ID should
dif.record_idsuse for W3C LDP credentials: walletrecord_id,cred_id_stored, or something else? - How does ACA‑Py populate
schema_idsfor W3C LDP? Our records showschema_ids:[]even though credentialSchema.id is present. - Should
input_descriptors.schemabe compared againstcredentialSchema.id,expanded_types, or something else? - Is there a known issue where
/present-proof-2.0/records/{id}/credentialsreturns empty for LDP VCs? - Any recommended config or endpoint for DIF + LDP selection that avoids empty VP?