# Aries Framework Go Interop status: DID-Exchange with Aries Cloudagent Python
Aries interop has in many ways been a shifting target, as work within and between projects has advanced the design of RFCs and specs, with AIP2.0 being as-yet a work in progress. While ACA-Py supports AIP1.0 and is targeting AIP2.0, AFGO targets AIP2.0 only, meaning afgo interop with ACA-Py is a moving target, as ACA-Py introduces features, options etc to support AIP2.0. To allow work to proceed in afgo on both AIP2.0 and interop, afgo targets AIP2.0 by default, and has a build flag (or in go terms, a build tag) to instead target interop with ACA-Py.
The build flag is necessary as AIP1.0 and AIP2.0 are not generally compatible - so as ACA-Py moves towards AIP2.0, it presents a moving target for afgo, with clean alignment with AIP2.0 in some parts, and requiring afgo temporarily step away from AIP2.0 in others. The latter cases sit behind the build flag.
## Behaviour Changes Behind Interop Build Flag
With the build flag `ACAPyInterop` enabled, afgo:
- Does not expect `did` fields in didcomm messages to be DIDs, so it can accept "naked" Sovrin DID method-specific identifiers in the messages sent by ACA-Py.
- Stephen: Fix in ACA-Py to make these DIDs, triggered by the AIP20 flag. I believe these will be did:key DIDs (vs. Sovrin DID method-specific)
- Similarly, chops the DIDs it puts in messages sent to ACA-Py, so those 'DIDs' match the format of a Sovrin method-specific identifier.
- Stephen: These should be did:key DIDs from AF-Go, correct? If not, what DID method would are they? Regardless, ACA-Py needs to be update to accept the current "naked keys" and DIDs of any (known) flavour, handled by the ACA-Py DID resolver. Do we need to raise an issue for this Ian?
- Uses did:sov for private, local 'peer-like' DIDs, which contravenes the [Sovrin DID Method Spec](https://sovrin-foundation.github.io/sovrin/spec/did-method-spec-template.html).
- Stephen: That's just wrong!! :-) Definitely needs to be fixed, perhaps based on the `--aip20` flag if that has worked in the path.
- Accepts did documents that match the DID Spec's v0.11 JSON-LD vocabulary, but not the v1 JSON-LD vocabulary, despite using the v1 namespace.
- Stephen: Another bad one. Definitely needs to be fixed, perhaps based on the `--aip20` flag if that has worked in the past.
- Uses IndyAgent service type instead of following [RFC0067](https://github.com/hyperledger/aries-rfcs/tree/master/features/0067-didcomm-diddoc-conventions/README.md).
- Stephen: This is a change needed based on the `--aip20` flag.
- Uses raw (base58) recipient and routing keys in service, instead of following [RFC0067](https://github.com/hyperledger/aries-rfcs/tree/master/features/0067-didcomm-diddoc-conventions/README.md) in accordance with [RFC0360](https://github.com/hyperledger/aries-rfcs/blob/master/features/0360-use-did-key/README.md).
- Stephen: This is a changed needed based on the `--aip20` flag.
- Signs `did_doc~attach` attachment contents, in keeping with older revisions of RFC0023, before [a recent change](https://github.com/hyperledger/aries-rfcs/commit/d9d072832353a6a11e7dae28ca313fde3474cc63#diff-1db1c2a11b3ff24b00b257fa3f000fd596cc70bcba3e228e22a45c0f0ffaec07) (which is part of the [AIP2.0 version of DID-Exchange](https://github.com/hyperledger/aries-rfcs/tree/d50fe1e38c9720344123146c31fbf7ad8e78b345/features/0023-did-exchange)).
- Stephen: This can be just changed in ACA-Py (without the `-aaip20` flag) as DID Exchange is only used in `--aip20`.
As ACA-Py continues moving towards AIP2.0, these 'hacks' behind the interop flag will be removed bit-by-bit from afgo, until both projects are achieving interop without needing to deviate from AIP2.0 to do so.
## Test Suite
Instead of using the `afgo-master` agent in the Aries Agent Test Harness, use `afgo-interop`.
### Results
<details>
<summary>AFGO - AFGO</summary>
```
$ ./manage run -d afgo-master -t @RFC0023 -t ~@wip
Acme - afgo-master
Bob - afgo-master
...
Failing scenarios:
features/0023-did-exchange.feature:69 ... with an implicit invitation
features/0023-did-exchange.feature:84 ... with an implicit invitation with role reversal
5 scenarios passed, 2 failed
```
```
$ ./manage run -d afgo-interop -t @RFC0023 -t ~@wip
Acme - afgo-interop
Bob - afgo-interop
Failing scenarios:
features/0023-did-exchange.feature:69 ... with an implicit invitation
features/0023-did-exchange.feature:84 ... with an implicit invitation with role reversal
5 scenarios passed, 2 failed
```
</details>
Implicit invitation fails in all cases, as the afgo backchannel does not support the `has a resolvable DID` operation.
<details>
<summary>AFGO - ACA-Py, with the interop build flag enabled</summary>
```
$ ./manage run -d afgo-interop -b acapy -t @RFC0023 -t ~@wip
Acme - afgo-interop
Bob - acapy
...
Failing scenarios:
features/0023-did-exchange.feature:39 ... with an explicit invitation with a public DID
features/0023-did-exchange.feature:69 ... with an implicit invitation
features/0023-did-exchange.feature:84 ... with an implicit invitation with role reversal
4 scenarios passed, 3 failed
```
```
$ ./manage run -d afgo-interop -a acapy -t @RFC0023 -t ~@wip
Acme - acapy
Bob - afgo-interop
...
Failing scenarios:
features/0023-did-exchange.feature:54 ... with an explicit invitation with a public DID with role reversal
features/0023-did-exchange.feature:69 ... with an implicit invitation
features/0023-did-exchange.feature:84 ... with an implicit invitation with role reversal
4 scenarios passed, 3 failed
```
</details>
Explicit invitation with public DID fails if aca-py sends the invitation, as afgo fails to resolve the aca-py agent's public sov DID. This is not an aca-py issue, the test harness afgo agent is simply not configured to connect to the test harness sovrin network.
<details>
<summary>AFGO - ACA-Py, without the interop build flag enabled</summary>
```
$ ./manage run -d afgo-master -a acapy -t @RFC0023 -t ~@wip
Acme - acapy
Bob - afgo-master
...
0 scenarios passed, 7 failed
$ ./manage run -d afgo-master -b acapy -t @RFC0023 -t ~@wip
Acme - afgo-master
Bob - acapy
...
0 scenarios passed, 7 failed
```
</details>