From 9b9dc296dff47b22c5c617c0e4377b7f4c1a622e Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
New images for the release are automatically published by the GitHubAction - Workflows: publish.yml and publish-indy.yml. The actions are triggered + Workflows: publish.yml and publish-indy.yml. The actions are triggered when a release is tagged, so no manual action is needed. The images are published in the Hyperledger Package Repository under aries-cloudagent-python and a link to the packages added to the repositories main page (under "Packages").
Additional information about the container image publication process can be found in the document Container Images and Github Actions.
To auto-generate the module documentation locally run:
sphinx-build -b html -a -E -c ./ ./ ./_build
diff --git a/v0.12.1/aca-py.org/index.html b/v0.12.1/aca-py.org/index.html
index b133039a..5769bbe1 100644
--- a/v0.12.1/aca-py.org/index.html
+++ b/v0.12.1/aca-py.org/index.html
@@ -84,7 +84,7 @@
Code Internals DocumentationAries Cloud
+(non-test) modules in the codebase. Check it out on the Aries Cloud
Agent-Python ReadTheDocs site.
As with this site, the ReadTheDocs documentation is version specific.
Got questions?
diff --git a/v0.12.1/assets/index.html b/v0.12.1/assets/index.html
index 78a186fd..1815ab69 100644
--- a/v0.12.1/assets/index.html
+++ b/v0.12.1/assets/index.html
@@ -82,7 +82,7 @@
Install ngrok and jqhere
Expose services publicly using ngrok¶
Note that this is only required when running docker on your local machine. When you run on PWD a public endpoint for your agent is exposed automatically.
-Since the mobile agent will need some way to communicate with the agent running on your local machine in docker, we will need to create a publicly accesible url for some services on your machine. The easiest way to do this is with ngrok. Once ngrok is installed, create a tunnel to your local machine:
+Since the mobile agent will need some way to communicate with the agent running on your local machine in docker, we will need to create a publicly accessible url for some services on your machine. The easiest way to do this is with ngrok. Once ngrok is installed, create a tunnel to your local machine:
This service is used for your local aca-py agent - it is the endpoint that is advertised for other Aries agents to connect to.
@@ -2341,7 +2341,7 @@ Issue a CredentialFaber | Credential revocation ID: 1
Faber | Credential: state = done, cred_ex_id = ba3089d6-92da-4cb7-9062-7f24066b2a2a
@@ -2232,7 +2232,7 @@
diff --git a/v0.12.1/demo/AliceGetsAPhone/index.html b/v0.12.1/demo/AliceGetsAPhone/index.html
index 86b76a33..aa028359 100644
--- a/v0.12.1/demo/AliceGetsAPhone/index.html
+++ b/v0.12.1/demo/AliceGetsAPhone/index.html
@@ -86,7 +86,7 @@
diff --git a/v0.12.1/demo/AcmeDemoWorkshop/index.html b/v0.12.1/demo/AcmeDemoWorkshop/index.html
index 57c26630..949de05e 100644
--- a/v0.12.1/demo/AcmeDemoWorkshop/index.html
+++ b/v0.12.1/demo/AcmeDemoWorkshop/index.html
@@ -86,7 +86,7 @@
@@ -2246,7 +2246,7 @@
The revocation registry id and credential revocation id only appear if revocation is active. If you are doing revocation, you to need the Revocation registry id
later, so we recommend that you copy it it now and paste it into a text file or someplace that you can access later. If you don't write it down, you can get the Id from the Admin API using the GET /revocation/active-registry/{cred_def_id}
endpoint, and passing in the credential definition Id (which you can get from the GET /credential-definitions/created
endpoint).
The revocation registry id and credential revocation id only appear if revocation is active. If you are doing revocation, you to need the Revocation registry id
later, so we recommend that you copy it it now and paste it into a text file or some place that you can access later. If you don't write it down, you can get the Id from the Admin API using the GET /revocation/active-registry/{cred_def_id}
endpoint, and passing in the credential definition Id (which you can get from the GET /credential-definitions/created
endpoint).
The credential offer should automatically show up in the mobile agent. Accept the offered credential following the instructions provided by the mobile agent. That will look something like this:
Create a new postman workspace labeled "acapy-demo".
In the environment tab from the left, click the import button. You can paste this link which is the environment file in the ACA-Py repository.
+In the environment tab from the left, click the import button. You can paste this link which is the environment file in the ACA-Py repository.
Make sure you have the environment set as your active environment.
In the collections tab from the left, click the import button.
diff --git a/v0.12.1/demo/Endorser/index.html b/v0.12.1/demo/Endorser/index.html index 96407819..660f16c6 100644 --- a/v0.12.1/demo/Endorser/index.html +++ b/v0.12.1/demo/Endorser/index.html @@ -86,7 +86,7 @@This approach runs Faber as an un-privileged agent, and starts a dedicated Endorser Agent in a sub-process (an instance of ACA-Py) to endorse Faber's transactions.
Start a VON Network instance and a Tails server:
--logs
option if you want to use the same terminal for running both VON Network and the Tails server. When you are finished with VON Network, follow the Stopping And Removing a VON Network instructions.--logs
option if you want to use the same terminal for running both VON Network and the Tails server. When you are finished with VON Network, follow the Stopping And Removing a VON Network instructions.Start up Faber as Author (note the tails file size override, to allow testing of the revocation registry roll-over):
@@ -2269,12 +2269,12 @@You can run all of Faber's functions as normal - if you watch the console you will see that all ledger operations go through the endorser workflow.
-If you issue more than 5 credentials, you will see Faber creating a new revocation registry (encluding endorser operations).
+If you issue more than 5 credentials, you will see Faber creating a new revocation registry (including endorser operations).
This approach sets up the endorser roles to allow manual testing using the agents' swagger pages:
Start a VON Network and a Tails server using the instructions above.
Start up Faber as Endorser:
diff --git a/v0.12.1/demo/ReusingAConnection/index.html b/v0.12.1/demo/ReusingAConnection/index.html index c032362e..454fc2cf 100644 --- a/v0.12.1/demo/ReusingAConnection/index.html +++ b/v0.12.1/demo/ReusingAConnection/index.html @@ -86,7 +86,7 @@The Aries RFC 0434 Out of Band protocol enables the concept of reusing a -connection such that when using RFC 0023 DID Exchange to establish a +
The Aries RFC 0434 Out of Band protocol enables the concept of reusing a +connection such that when using RFC 0023 DID Exchange to establish a connection with an agent with which you already have a connection, you can reuse the existing connection instead of creating a new one. This is something you -couldn't do a with the older RFC 0160 Connection Protocol that we used in the +couldn't do a with the older RFC 0160 Connection Protocol that we used in the early days of Aries. It was a pain, and made for a lousy user experience, as on every visit to an existing contact, the invitee got a new connection.
The requirements on your invitations (such as in the example below) are:
@@ -2213,9 +2213,9 @@request
with a response
message, and the
connection is established.request
message, a new connection
would have been established.The RFC 0434 Out of Band protocol requirement enables reuse
message by the
+
The RFC 0434 Out of Band protocol requirement enables reuse
message by the
invitee (the Wallet in the flow above) is that the service
in the invitation
MUST be a resolvable DID that is the same in all of the invitations. In the
example invitation above, the DID is a did:sov
DID that is resolvable on a public
diff --git a/v0.12.1/demo/index.html b/v0.12.1/demo/index.html
index 1f4d1779..10707cb0 100644
--- a/v0.12.1/demo/index.html
+++ b/v0.12.1/demo/index.html
@@ -86,7 +86,7 @@
Running in a BrowserFollow the Script section below for further instructions.
Running the demo in docker requires having a von-network
(a Hyperledger Indy public ledger sandbox) instance running in docker locally. See the VON Network Tutorial for guidance
+
Running the demo in docker requires having a von-network
(a Hyperledger Indy public ledger sandbox) instance running in docker locally. See the VON Network Tutorial for guidance
on starting and stopping your own local Hyperledger Indy instance.
Open three bash
shells. For Windows users, git-bash
is highly recommended. bash is the default shell in Linux and Mac terminal sessions. For Mac users on the newer M½/3 Apple Silicon devices, make sure that you install Apple's Rosetta 2 software, using these installation instructions from Apple, and this even more useful guidance on how to install Rosetta 2 from the command line which amounts to running this MacOS command: softwareupdate --install-rosetta
.
In the first terminal window, start von-network
by following the Building and Starting instructions.
In the first terminal window, start von-network
by following the Building and Starting instructions.
In the second terminal, change directory into demo
directory of your clone of the Aries Cloud Agent Python repository. Start the faber
agent by issuing the following command:
While that process will include the installation of the Indy python prerequisite, you still have to build and install the libindy
code for your platform. Follow the installation instructions in the indy-sdk repo for your platform.
Start a local von-network
Hyperledger Indy network running in Docker by following the VON Network Building and Starting instructions.
Start a local von-network
Hyperledger Indy network running in Docker by following the VON Network Building and Starting instructions.
We strongly recommend you use Docker for the local Indy network until you really, really need to know the details of running an Indy Node instance on a bare machine.
Assuming you followed our advice and are using a VON Network instance of Hyperledger Indy, you can ignore this section. If you started the Indy ledger without using VON Network, this information might be helpful.
An Aries agent (or other client) connecting to an Indy ledger must know the contents of the genesis
file for the ledger. The genesis file lets the agent/client know the IP addresses of the initial nodes of the ledger, and the agent/client sends ledger requests to those IP addresses. When using the indy-sdk
ledger, look for the instructions in that repo for how to find/update the ledger genesis file, and note the path to that file on your local system.
The envrionment variable GENESIS_FILE
is used to let the Aries demo agents know the location of the genesis file. Use the path to that file as value of the GENESIS_FILE
environment variable in the instructions below. You might want to copy that file to be local to the demo so the path is shorter.
The environment variable GENESIS_FILE
is used to let the Aries demo agents know the location of the genesis file. Use the path to that file as value of the GENESIS_FILE
environment variable in the instructions below. You might want to copy that file to be local to the demo so the path is shorter.
The demo uses the postgres database the wallet persistence. Use the Docker Hub certified postgres image to start up a postgres instance to be used for the wallet storage:
docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d -p 5432:5432 postgres -c 'log_statement=all' -c 'logging_collector=on' -c 'log_destination=stderr'
@@ -2679,7 +2679,7 @@ Issuing and Proving CredentialsYou don't need to do anything with Alice's agent - her agent is implemented to automatically receive credentials and respond to proof requests.
Note there is an option "2a" to initiate a connectionless proof - you can execute this option but it will only work end-to-end when connecting to Faber from a mobile agent.
Additional Options in the Alice/Faber demo¶
-You can enable support for various ACA-Py features by providing additional command-line arguements when starting up alice
or faber
.
+You can enable support for various ACA-Py features by providing additional command-line arguments when starting up alice
or faber
.
Note that when the controller starts up the agent, it prints out the ACA-Py startup command with all parameters - you can inspect this command to see what parameters are provided in each case. For more details on the parameters, just start ACA-Py with the --help
parameter, for example:
@@ -2807,9 +2807,9 @@ Multi-tenancyNote that with multi-tenancy enabled:
- The "base" wallet will have access to this new "agency API" - the agent's admin key, if enabled, must be provided in a header
-- "Base wallet" API calls are handled here
-- The "sub-wallets" will have access to the "normal" ACA-Py admin API - to identify the sub-wallet, a JWT token must be provided, this token is created upon creation of the new wallet (see: this code here)
-- "Sub-wallet" API calls are handled here
+- "Base wallet" API calls are handled here
+- The "sub-wallets" will have access to the "normal" ACA-Py admin API - to identify the sub-wallet, a JWT token must be provided, this token is created upon creation of the new wallet (see: this code here)
+- "Sub-wallet" API calls are handled here
Documentation on ACA-Py's multi-tenancy support can be found here.
Multi-tenancy with Mediation!!!¶
@@ -2821,11 +2821,11 @@ Multi-tenancy with Mediation!!!This works exactly as the vanilla multi-tenancy, except that all connections are mediated.
Other Environment Settings¶
The agents run on a pre-defined set of ports, however occasionally your local system may already be using one of these ports. (For example MacOS recently decided to use 8021 for the ftp proxy service.)
-To overriide the default port settings:
+To override the default port settings:
(The agent requires up to 10 available ports.)
-To pass extra arguements to the agent (for example):
+To pass extra arguments to the agent (for example):
Additionally, separating the build and run functionalities in the script allows for smoother development and debugging processes. With the mounting of volumes from the host into the Docker container, code changes can be automatically reloaded without the need to repeatedly build the demo.
@@ -2837,11 +2837,11 @@ Other Environment SettingsLearning about the Alice/Faber code¶
These Alice and Faber scripts (in the demo/runners
folder) implement the controller and run the agent as a sub-process (see the documentation for aca-py
). The controller publishes a REST service to receive web hook callbacks from their agent. Note that this architecture, running the agent as a sub-process, is a variation on the documented architecture of running the controller and agent as separate processes/containers.
-The controllers for this demo can be found in the alice.py and faber.py files. Alice and Faber are instances of the agent class found in agent.py.
+The controllers for this demo can be found in the alice.py and faber.py files. Alice and Faber are instances of the agent class found in agent.py.
OpenAPI (Swagger) Demo¶
-Developing an ACA-Py controller is much like developing a web app that uses a REST API. As you develop, you will want an easy way to test out the behaviour of the API. That's where the industry-standard OpenAPI (aka Swagger) UI comes in. ACA-Py (optionally) exposes an OpenAPI UI in ACA-Py that you can use to learn the ins and outs of the API. This Aries OpenAPI demo shows how you can use the OpenAPI UI with an ACA-Py agent by walking through the connectiing, issuing a credential, and presenting a proof sequence.
+Developing an ACA-Py controller is much like developing a web app that uses a REST API. As you develop, you will want an easy way to test out the behaviour of the API. That's where the industry-standard OpenAPI (aka Swagger) UI comes in. ACA-Py (optionally) exposes an OpenAPI UI in ACA-Py that you can use to learn the ins and outs of the API. This Aries OpenAPI demo shows how you can use the OpenAPI UI with an ACA-Py agent by walking through the connecting, issuing a credential, and presenting a proof sequence.
Performance Demo¶
-Another example in the demo/runners
folder is performance.py, that is used to test out the performance of interacting agents. The script starts up agents for Alice and Faber, initializes them, and then runs through an interaction some number of times. In this case, Faber issues a credential to Alice 300 times.
+Another example in the demo/runners
folder is performance.py, that is used to test out the performance of interacting agents. The script starts up agents for Alice and Faber, initializes them, and then runs through an interaction some number of times. In this case, Faber issues a credential to Alice 300 times.
To run the demo, make sure that you shut down any running Alice/Faber agents. Then, follow the same steps to start the Alice/Faber demo, but:
- When starting the first agent, replace the agent name (e.g.
faber
) with performance
.
@@ -2852,7 +2852,7 @@ Performance Demo./run_demo performance --arg-file demo/postgres-indy-args.yml
(Obvs you need to be running a postgres database - the command to start postgres is in the yml file provided above.)
+(Obviously you need to be running a postgres database - the command to start postgres is in the yml file provided above.)
You can tweak the number of credentials issued using the --count
and --batch
parameters, and you can run against an Askar database using the --wallet-type askar
option (or run using indy-sdk using --wallet-type indy
).
An example full set of options is:
./run_demo performance --arg-file demo/postgres-indy-args.yml -c 10000 -b 10 --wallet-type askar
@@ -2867,7 +2867,7 @@ Coding Challenge: Adding ACMEacme.py file, but the code is incomplete. Using the knowledge you gained from running demo and viewing the alice.py and faber.py code, fill in the blanks for the code. When you are ready to test your work:
+
The framework for the code is in the acme.py file, but the code is incomplete. Using the knowledge you gained from running demo and viewing the alice.py and faber.py code, fill in the blanks for the code. When you are ready to test your work:
- Use the instructions above to start the Alice/Faber demo (above).
- Start another terminal session and run the same commands as for "Alice", but replace "alice" with "acme".
diff --git a/v0.12.1/deploying/AnonCredsWalletType/index.html b/v0.12.1/deploying/AnonCredsWalletType/index.html
index 6826613e..313c1ecf 100644
--- a/v0.12.1/deploying/AnonCredsWalletType/index.html
+++ b/v0.12.1/deploying/AnonCredsWalletType/index.html
@@ -86,7 +86,7 @@
DatabasesSQLite¶
-
If the wallet is configured the default way in eg. demo-args.yaml, without explicit wallet-storage, a sqlite database file is used.
+If the wallet is configured the default way in eg. demo-args.yaml, without explicit wallet-storage, a sqlite database file is used.
# demo-args.yaml
wallet-type: indy
wallet-name: wallet
diff --git a/v0.12.1/deploying/IndySDKtoAskarMigration/index.html b/v0.12.1/deploying/IndySDKtoAskarMigration/index.html
index 567e355a..29412889 100644
--- a/v0.12.1/deploying/IndySDKtoAskarMigration/index.html
+++ b/v0.12.1/deploying/IndySDKtoAskarMigration/index.html
@@ -86,7 +86,7 @@
ACA-Py Redis Plugins¶
-aries-acapy-plugin-redis-events redis_queue
¶
+aries-acapy-plugin-redis-events redis_queue
¶
It provides a mechanism to persists both inbound and outbound messages using redis, deliver messages and webhooks, and dispatch events.
-More details can be found here.
+More details can be found here.
Redis Queue configuration yaml
¶
redis_queue:
connection:
@@ -2428,10 +2428,10 @@ Redis Queue configuration yamlRedis Plugin Usage¶
Redis Plugin With Docker¶
Running the plugin with docker is simple. An
-example docker-compose.yml file is available which launches both ACA-Py with redis and an accompanying Redis cluster.
+example docker-compose.yml file is available which launches both ACA-Py with redis and an accompanying Redis cluster.
-More details can be found here.
+More details can be found here.
Without Docker¶
Installation
pip install git+https://github.com/bcgov/aries-acapy-plugin-redis-events.git
@@ -2552,12 +2552,12 @@ Without Dockerdemos are also available.
-aries-acapy-cache-redis redis_cache
¶
+aries-acapy-cache-redis redis_cache
¶
ACA-Py uses a modular cache layer to story key-value pairs of data. The purpose
of this plugin is to allow ACA-Py to use Redis as the storage medium for it's
caching needs.
-More details can be found here.
+More details can be found here.
Redis Cache Plugin configuration yaml
¶
redis_cache:
connection: "redis://default:test1234@172.28.0.103:6379"
@@ -2580,14 +2580,14 @@ Redis Cache Using Docker
-
Running the plugin with docker is simple and straight-forward. There is an
-example docker-compose.yml file in the root of the
+example docker-compose.yml file in the root of the
project that launches both ACA-Py and an accompanying Redis instance. Running
it is as simple as:
-
-
To launch ACA-Py with an accompanying redis cluster of 6 nodes (3 primaries and 3 replicas), please refer to example docker-compose.cluster.yml and run the following:
+To launch ACA-Py with an accompanying redis cluster of 6 nodes (3 primaries and 3 replicas), please refer to example docker-compose.cluster.yml and run the following:
Note: Cluster requires external docker network with specified subnet
docker network create --subnet=172.28.0.0/24 `network_name`
export REDIS_PASSWORD=" ... As specified in redis_cluster.conf ... "
diff --git a/v0.12.1/deploying/UpgradingACA-Py/index.html b/v0.12.1/deploying/UpgradingACA-Py/index.html
index 4c1016e0..81fc71b2 100644
--- a/v0.12.1/deploying/UpgradingACA-Py/index.html
+++ b/v0.12.1/deploying/UpgradingACA-Py/index.html
@@ -86,7 +86,7 @@
Upgrading ACA-Py Data¶
Some releases of ACA-Py may be improved by, or even require, an upgrade when
-moving to a new version. Such changes are documented in the CHANGELOG.md,
+moving to a new version. Such changes are documented in the CHANGELOG.md,
and those with ACA-Py deployments should take note of those upgrades. This
document summarizes the upgrade system in ACA-Py.
Version Information and Automatic Upgrades¶
-The file version.py contains the current version of a running instance of
+
The file version.py contains the current version of a running instance of
ACA-Py. In addition, a record is made in the ACA-Py secure storage (database)
about the "most recently upgraded" version. When deploying a new version of
-ACA-Py, the version.py value will be higher than the version in
+ACA-Py, the version.py value will be higher than the version in
secure storage. When that happens, an upgrade is executed, and on successful
completion, the version is updated in secure storage to match what is
-in version.py.
-Upgrades are defined in the Upgrade Definition YML file. For a given
+in version.py.
+Upgrades are defined in the Upgrade Definition YML file. For a given
version listed in the follow, the corresponding entry is what actions are
required when upgrading from a previous version. If a version is not listed
in the file, there is no upgrade defined for that version from its immediate
@@ -2376,12 +2376,12 @@
Version Information and Auto
Once an upgrade is identified as needed, the process is:
- Collect (if any) the actions to be taken to get from the version recorded in
-secure storage to the current version.py
+secure storage to the current version.py
- Execute the actions from oldest to newest.
- If the same action is collected more than once (e.g., "Resave the
Connection Records" is defined for two different versions), perform the action
only once.
-- Store the current ACA-Py version (from version.py) in the secure storage
+
- Store the current ACA-Py version (from version.py) in the secure storage
database.
Forced Offline Upgrades¶
@@ -2397,7 +2397,7 @@ Forced Offline UpgradesIssue 2201 and Pull Request 2204 for
the status of that feature.
Those deploying ACA-Py upgrades for production installations (forced offline or
-not) should check in each CHANGELOG.md release entry about what upgrades (if
+not) should check in each CHANGELOG.md release entry about what upgrades (if
any) will be run when upgrading to that version, and consider how they want
those upgrades to run in their ACA-Py installation. In most cases, simply
deploying the new version should be OK. If the number of records to be upgraded
@@ -2405,7 +2405,7 @@
Forced Offline Upgrades
Tagged upgrades¶
-Upgrades are defined in the Upgrade Definition YML file, in addition to specifying upgrade actions by version they can also be specified by named tags. Unlike version based upgrades where all applicable version based actions will be performed based upon sorted order of versions, with named tags only actions corresponding to provided tags will be performed. Note: --force-upgrade
is required when running name tags based upgrade (i.e. providing --named-tag
).
+Upgrades are defined in the Upgrade Definition YML file, in addition to specifying upgrade actions by version they can also be specified by named tags. Unlike version based upgrades where all applicable version based actions will be performed based upon sorted order of versions, with named tags only actions corresponding to provided tags will be performed. Note: --force-upgrade
is required when running name tags based upgrade (i.e. providing --named-tag
).
Tags are specified in YML file as below:
fix_issue_rev_reg:
fix_issue_rev_reg_records: true
@@ -2440,7 +2440,7 @@ No version in secure storageUpgrade Definition YML file. Thus, even if you are really
+be seen in the Upgrade Definition YML file. Thus, even if you are really
upgrading from (for example) 0.6.2, the same upgrades are needed as from 0.7.5
to a post-0.8.1 version.
Forcing an upgrade¶
diff --git a/v0.12.1/deploying/deploymentModel/index.html b/v0.12.1/deploying/deploymentModel/index.html
index 7d7acc0e..a83dc098 100644
--- a/v0.12.1/deploying/deploymentModel/index.html
+++ b/v0.12.1/deploying/deploymentModel/index.html
@@ -86,7 +86,7 @@
OverviewRFC 0809 VC-DI Attachments
-
- For presenting, use the RFC 0510 DIF Presentation Exchange Attachments
+- For presenting, use the RFC 0510 DIF Presentation Exchange Attachments
As of 2024-01-15, these pre-requisites have been met.
Impacts on ACA-Py¶
@@ -2376,8 +2376,8 @@ IssuerRFC 0809 VC-DI attachment format.
A credential's encoded attributes are not included in the issued AnonCreds W3C VC format credential. To be determined how that impacts the issuing process.
Verifier¶
-A verifier wanting a W3C VP Format presentation will send the Present Proof v2.0 request
message with an RFC 0510 DIF Presentation Exchange format attachment.
-If needed, the RFC 0510 DIF Presentation Exchange document will be clarified and possibly updated to enable its use for handling AnonCreds W3C VP format presentations.
+A verifier wanting a W3C VP Format presentation will send the Present Proof v2.0 request
message with an RFC 0510 DIF Presentation Exchange format attachment.
+If needed, the RFC 0510 DIF Presentation Exchange document will be clarified and possibly updated to enable its use for handling AnonCreds W3C VP format presentations.
An AnonCreds W3C VP format presentation does not include the encoded revealed attributes, and the encoded values must be calculated as needed. To be determined where those would be needed.
Holder¶
A holder must support RFC 0809 VC-DI attachments when receiving Issue Credential v2.0 offer
and issue
messages, and when sending request
messages.
@@ -2386,14 +2386,14 @@ HolderRFC 0510 DIF Presentation Exchange request
message, a holder must include AnonCreds verifiable credentials in the search for credentials satisfying the request, and if found and selected for use, must construct the presentation using the RFC 0510 DIF Presentation Exchange presentation format, with an embedded AnonCreds W3C VP format presentation.
+
On receiving an RFC 0510 DIF Presentation Exchange request
message, a holder must include AnonCreds verifiable credentials in the search for credentials satisfying the request, and if found and selected for use, must construct the presentation using the RFC 0510 DIF Presentation Exchange presentation format, with an embedded AnonCreds W3C VP format presentation.
Issues to consider¶
- If and how the W3C VC Format attachments for the Issue Credential V2.0 and Present Proof V2 Aries DIDComm Protocols should be used when using AnonCreds W3C VC Format credentials. Anticipated triggers:
- An Issuer Controller invokes the Admin API to trigger an Issue Credential v2.0 protocol instance such that the RFC 0809 VC-DI will be used.
- A Holder receives an Issue Credential v2.0
offer
message with an RFC 0809 VC-DI attachment.
-- A Verifier initiates a Present Proof v2.0 protocol instance with an RFC 0510 DIF Presentation Exchange that can be satisfied by AnonCreds VCs held by the holder.
-- A Holder receives a present proof
request
message with an RFC 0510 DIF Presentation Exchange format attachment that can be satisfied with AnonCreds credentials held by the holder.
+- A Verifier initiates a Present Proof v2.0 protocol instance with an RFC 0510 DIF Presentation Exchange that can be satisfied by AnonCreds VCs held by the holder.
+- A Holder receives a present proof
request
message with an RFC 0510 DIF Presentation Exchange format attachment that can be satisfied with AnonCreds credentials held by the holder.
- How are the
restrictions
and revocation
data elements conveyed?
@@ -2409,16 +2409,16 @@ Issue CredentialRFC 0809 VC-DI format attachments.
- Add support for the RFC 0809 VC-DI message attachment formats.
-- Should the attachment format be made pluggable as part of this? From the maintainers: If we did make it pluggable, this would be the point where that would take place. Since these values are hard coded, it is not pluggable currently, as noted. I've been dissatisfied with how this particular piece works for a while. I think making it pluggable, if done right, could help clean it up nicely. A plugin would then define their own implementation of V20CredFormatHandler. (@dbluhm)
+- Should the attachment format be made pluggable as part of this? From the maintainers: If we did make it pluggable, this would be the point where that would take place. Since these values are hard coded, it is not pluggable currently, as noted. I've been dissatisfied with how this particular piece works for a while. I think making it pluggable, if done right, could help clean it up nicely. A plugin would then define their own implementation of V20CredFormatHandler. (@dbluhm)
- Update the v2.0 Issue Credential protocol handler to support a "RFC 0809 VC-DI mode" such that when a protocol instance starts with that format, it continues with it until completion, supporting issuing AnonCreds credentials in the process. This includes both the sending and receiving of all protocol message types.
Present Proof¶
-- Adjust as needed the sending of a Present Proof request using the RFC 0510 DIF Presentation Exchange with support (to be defined) for requesting AnonCreds VCs.
-- Adjust as needed the processing of a Present Proof
request
message with an RFC 0510 DIF Presentation Exchange attachment so that AnonCreds VCs can found and used in the subsequent response.
+- Adjust as needed the sending of a Present Proof request using the RFC 0510 DIF Presentation Exchange with support (to be defined) for requesting AnonCreds VCs.
+- Adjust as needed the processing of a Present Proof
request
message with an RFC 0510 DIF Presentation Exchange attachment so that AnonCreds VCs can found and used in the subsequent response.
- AnonCreds VCs issued as legacy or W3C VC format credentials should be usable in AnonCreds W3C VP format presentations.
-- Update the creation of an RFC 0510 DIF Presentation Exchange presentation submission to support the use of AnonCreds VCs as the source of the VPs.
-- Update the verifier receipt of a Present Proof v2.0
presentation
message with an RFC 0510 DIF Presentation Exchange containing AnonCreds W3C VP(s) derived from AnonCreds source VCs.
+- Update the creation of an RFC 0510 DIF Presentation Exchange presentation submission to support the use of AnonCreds VCs as the source of the VPs.
+- Update the verifier receipt of a Present Proof v2.0
presentation
message with an RFC 0510 DIF Presentation Exchange containing AnonCreds W3C VP(s) derived from AnonCreds source VCs.
What are the functions we are going to wrap?¶
After thoroughly reviewing upcoming changes from anoncreds-rs PR273, the classes or AnoncredsObject
impacted by changes are as follows:
@@ -2435,7 +2435,7 @@ What are the functions we a
- instance methods (
verify
)
- bindings functions (
create_w3c_presentation
, _object_from_json
, verify_w3c_presentation
)
-They will be added to __init__.py as additional exports of AnoncredsObject.
+They will be added to __init__.py as additional exports of AnoncredsObject.
We also have to consider which classes or anoncreds objects have been modified
The classes modified according to the same PR mentioned above are:
@@ -2449,10 +2449,10 @@ What are the functions we a
- modified instance methods (
_get_entry
, add_attributes
, add_predicates
)
Creating a W3C VC credential from credential definition, and issuing and presenting it as is¶
-The issuance, presentation and verification of legacy anoncreds are implemented in this ./aries_cloudagent/anoncreds directory. Therefore, we will also start from there.
-Let us navigate these implementation examples through the respective processes of the concerning agents - Issuer and Holder as described in https://github.com/hyperledger/anoncreds-rs/blob/0.12.0/README.md.
+
The issuance, presentation and verification of legacy anoncreds are implemented in this ./aries_cloudagent/anoncreds directory. Therefore, we will also start from there.
+Let us navigate these implementation examples through the respective processes of the concerning agents - Issuer and Holder as described in https://github.com/hyperledger/anoncreds-rs/blob/0.12.1/README.md.
We will proceed through the following processes in comparison with the legacy anoncreds implementations while watching out for signature differences between the two.
-Looking at the /anoncreds/issuer.py file, from AnonCredsIssuer
class:
+Looking at the /anoncreds/issuer.py file, from AnonCredsIssuer
class:
Create VC_DI Credential Offer
According to this DI credential offer attachment format - didcomm/w3c-di-vc-offer@v0.1,
@@ -2658,7 +2658,7 @@ Format Handler for Is
@@ -2361,7 +2361,7 @@
diff --git a/v0.12.1/design/AnoncredsW3CCompatibility/index.html b/v0.12.1/design/AnoncredsW3CCompatibility/index.html
index c9ca6db1..f657e295 100644
--- a/v0.12.1/design/AnoncredsW3CCompatibility/index.html
+++ b/v0.12.1/design/AnoncredsW3CCompatibility/index.html
@@ -82,7 +82,7 @@
Doing so would allow us to be more independent in defining the schema suited for anoncreds in w3c format and once the proposal protocol can handle the w3c format, probably the rest of the flow can be easily implemented by adding vc_di
flag to the corresponding routes.
Admin API Attachments¶
-To make sure that once an endpoint has been called to trigger the Issue Credential
flow in 0809 W3C_DI attachment formats
the subsequent endpoints also follow this format, we can keep track of this ATTACHMENT_FORMAT dictionary with the proposed VC_DI
format.
+To make sure that once an endpoint has been called to trigger the Issue Credential
flow in 0809 W3C_DI attachment formats
the subsequent endpoints also follow this format, we can keep track of this ATTACHMENT_FORMAT dictionary with the proposed VC_DI
format.
# Format specifications
ATTACHMENT_FORMAT = {
CRED_20_PROPOSAL: {
@@ -2683,18 +2683,18 @@ Admin API Attachments },
}
-And this _formats_filter function takes care of keeping the attachment formats uniform across the iteration of the flow. We can see this function gets called in:
+And this _formats_filter function takes care of keeping the attachment formats uniform across the iteration of the flow. We can see this function gets called in:
-- _create_free_offer function that gets called in the handler function of
/issue-credential-2.0/send-offer
route (in addition to other offer routes)
-- credential_exchange_send_free_request handler function of
/issue-credential-2.0/send-request
route
-- credential_exchange_create handler function of
/issue-credential-2.0/create
route
-- credential_exchange_send handler function of
/issue-credential-2.0/send
route
+- _create_free_offer function that gets called in the handler function of
/issue-credential-2.0/send-offer
route (in addition to other offer routes)
+- credential_exchange_send_free_request handler function of
/issue-credential-2.0/send-request
route
+- credential_exchange_create handler function of
/issue-credential-2.0/create
route
+- credential_exchange_send handler function of
/issue-credential-2.0/send
route
-The same goes for ATTACHMENT_FORMAT of Present Proof
flow. In this case, DIF Presentation Exchange formats in these test vectors that are influenced by RFC 0510 DIF Presentation Exchange will be implemented. Here, the _formats_attach function is the key for the same purpose above. It gets called in:
+The same goes for ATTACHMENT_FORMAT of Present Proof
flow. In this case, DIF Presentation Exchange formats in these test vectors that are influenced by RFC 0510 DIF Presentation Exchange will be implemented. Here, the _formats_attach function is the key for the same purpose above. It gets called in:
-- present_proof_send_proposal handler function of
/present-proof-2.0/send-proposal
route
-- present_proof_create_request handler function of
/present-proof-2.0/create-request
route
-- present_proof_send_free_request handler function of
/present-proof-2.0/send-request
route
+- present_proof_send_proposal handler function of
/present-proof-2.0/send-proposal
route
+- present_proof_create_request handler function of
/present-proof-2.0/create-request
route
+- present_proof_send_free_request handler function of
/present-proof-2.0/send-request
route
Credential Exchange Admin Routes¶
@@ -2889,7 +2889,7 @@ Will we in
Any significant bugs in the Rust implementation may prevent our wrappers from working, which would also prevent progress (or at least confirmed test results) on the higher-level code.
If AFJ lags behind in delivering equivalent functionality, we may not be able to demonstrate compatibility with the test harness.
Where should the new issuance code go?¶
-So the vc directory contains code to verify vc's, is this a logical place to add the code for issuance?
+So the vc directory contains code to verify vc's, is this a logical place to add the code for issuance?
What do we call the new things? Flexcreds? or just W3C_xxx¶
Are we defining a concept called Flexcreds that is a credential with a proof array that you can generate more specific or limited credentials from? If so should this be included in the naming?
@@ -2899,7 +2899,7 @@
How will wallets support that in a way that is developer-friendly to wallet devs?
-- The trigger for wallets to generate a W3C VP Format presentation is that they have receive a RFC 0510 DIF Presentation Exchange that can be satisfied with an AnonCreds verifiable credential in their storage. Once we decide to use one or more AnonCreds VCs to satisfy a presentation, we'll derive such a presentation and send it using the RFC 0510 DIF Presentation Exchange for the
presentation
message of the Present Proof v2.0 protocol.
+- The trigger for wallets to generate a W3C VP Format presentation is that they have receive a RFC 0510 DIF Presentation Exchange that can be satisfied with an AnonCreds verifiable credential in their storage. Once we decide to use one or more AnonCreds VCs to satisfy a presentation, we'll derive such a presentation and send it using the RFC 0510 DIF Presentation Exchange for the
presentation
message of the Present Proof v2.0 protocol.
diff --git a/v0.12.1/features/AdminAPI/index.html b/v0.12.1/features/AdminAPI/index.html
index 1e3c070e..ce5237ac 100644
--- a/v0.12.1/features/AdminAPI/index.html
+++ b/v0.12.1/features/AdminAPI/index.html
@@ -86,7 +86,7 @@
Basic Message Received (/bas
content
: the contents of the agent message
state
: received
@@ -2445,7 +2445,7 @@
-Forward Message Received (/forward
)¶
+Forward Message Received (/forward
)¶
Enable using --monitor-forward
.
connection_id
: the identifier of the connection associated with the recipient key
diff --git a/v0.12.1/features/AnonCredsMethods/index.html b/v0.12.1/features/AnonCredsMethods/index.html
index 414ddcb2..c78db88a 100644
--- a/v0.12.1/features/AnonCredsMethods/index.html
+++ b/v0.12.1/features/AnonCredsMethods/index.html
@@ -86,7 +86,7 @@
Create a Pluginaries-acapy-plugins repository. If you think that the AnonCreds method you create should
be part of ACA-Py core, get your plugin complete and raise the question of adding it to ACA-Py. The
Maintainers will be happy to discuss the merits of the idea. No promises though.
-
Your AnonCreds plugin will have an initialization routine that will register your AnonCreds
+
Your AnonCreds plugin will have an initialization routine that will register your AnonCreds
implementation. It will be registering the identifiers that your method will be using such. It
will be the identifier constructs that will trigger the appropriate AnonCreds Registrar and
Resolver that will be called for any given AnonCreds object identifier. Check out this
-example of the registration of the "legacy" Indy AnonCreds method for more details.
+example of the registration of the "legacy" Indy AnonCreds method for more details.
The Implementation¶
The basic work involved in creating an AnonCreds method is the implementation of both a "registrar" to
write AnonCreds objects to a VDR, and a "resolver" to read AnonCreds objects from a VDR. To do
@@ -2325,22 +2325,22 @@
The Implementationhere
@@ -2311,11 +2311,11 @@
The links above are to a specific commit and the code may have been updated since. You might want to
-look at the methods in the current version of aries_cloudagent/anoncreds/base.py in the main
branch.
+look at the methods in the current version of aries_cloudagent/anoncreds/base.py in the main
branch.
The interface for those methods are very clean, and there are currently two implementations of the
-methods in the ACA-Py codebase -- the "legacy" Indy implementation, and the did:indy Indy implementation.
-There is also a did:web resolver implementation.
-Models for the API are defined here
+methods in the ACA-Py codebase -- the "legacy" Indy implementation, and the did:indy Indy implementation.
+There is also a did:web resolver implementation.
+Models for the API are defined here
Events¶
When you create your AnonCreds method registrar, make sure that your implementations call appropriate
finish_*
event (e.g., AnonCredsIssuer.finish_schema
, AnonCredsIssuer.finish_cred_def
, etc.) in
-AnonCreds Issuer. The calls are necessary to trigger the automation of AnonCreds event creation that
+AnonCreds Issuer. The calls are necessary to trigger the automation of AnonCreds event creation that
is done by ACA-Py, particularly around the handling of Revocation Registries. As you (should) know, when
an Issuer uses ACA-Py to create a Credential Definition that supports revocation, ACA-Py automatically
creates and publishes two Revocation Registries related to the Credential Definition, publishes the tails
file for each, makes one active, and sets the other to be activated as soon as the active one runs out of
credentials. Your AnonCreds method implementation doesn't have to do much to make that happen -- ACA-Py
does it automatically -- but your implementation must call the finish_*
to make trigger ACA-Py to continue
-the automation. You can see in Revocation Setup the automation setup.
+the automation. You can see in Revocation Setup the automation setup.
Questions or Comments¶
The ACA-Py maintainers welcome questions from those new to the community that
have the skills to implement a new AnonCreds method. Use the #aries-cloudagent-python
channel
diff --git a/v0.12.1/features/AnoncredsProofValidation/index.html b/v0.12.1/features/AnoncredsProofValidation/index.html
index b0426319..bf224d77 100644
--- a/v0.12.1/features/AnoncredsProofValidation/index.html
+++ b/v0.12.1/features/AnoncredsProofValidation/index.html
@@ -86,7 +86,7 @@
Anoncreds Proof Validation in ACA-Py¶
ACA-Py performs pre-validation when verifying Anoncreds presentations (proofs). Some scenarios are rejected (such as those indicative of tampering), while some attributes are removed before running the anoncreds validation (e.g., removing superfluous non-revocation timestamps). Any ACA-Py validations or presentation modifications are indicated by the "verify_msgs" attribute in the final presentation exchange object.
-The list of possible verification messages can be found here, and consists of:
+The list of possible verification messages can be found here, and consists of:
class PresVerifyMsg(str, Enum):
"""Credential verification codes."""
@@ -2316,7 +2316,7 @@ Presentation Pre-validation ErrorsThe following pre-verification checks are performed, which will cause the proof to fail (before calling anoncreds) and result in the following message:
-These validations are all performed within the Indy verifier class - to see the detailed validation, look for any occurrences of raise ValueError(...)
in the code.
+These validations are all performed within the Indy verifier class - to see the detailed validation, look for any occurrences of raise ValueError(...)
in the code.
A summary of the possible errors includes:
- Information missing in presentation exchange record
diff --git a/v0.12.1/features/DIDMethods/index.html b/v0.12.1/features/DIDMethods/index.html
index b7ced180..29700fd6 100644
--- a/v0.12.1/features/DIDMethods/index.html
+++ b/v0.12.1/features/DIDMethods/index.html
@@ -86,7 +86,7 @@
Using Resolver Plugins
@@ -2523,7 +2523,7 @@
diff --git a/v0.12.1/features/DIDResolution/index.html b/v0.12.1/features/DIDResolution/index.html
index 0074b083..f77253ea 100644
--- a/v0.12.1/features/DIDResolution/index.html
+++ b/v0.12.1/features/DIDResolution/index.html
@@ -86,7 +86,7 @@
The following is a fully functional Dockerfile encapsulating this setup:
```dockerfile=
-FROM ghcr.io/hyperledger/aries-cloudagent-python:py3.9-0.12.0
+FROM ghcr.io/hyperledger/aries-cloudagent-python:py3.9-0.12.1
RUN pip3 install git+https://github.com/dbluhm/acapy-resolver-github
CMD ["aca-py", "start", "-it", "http", "0.0.0.0", "3000", "-ot", "http", "-e", "http://localhost:3000", "--admin", "0.0.0.0", "3001", "--admin-insecure-mode", "--no-ledger", "--plugin", "acapy_resolver_github"]
To use the above dockerfile:
diff --git a/v0.12.1/features/DevReadMe/index.html b/v0.12.1/features/DevReadMe/index.html
index 68d54b6d..03917885 100644
--- a/v0.12.1/features/DevReadMe/index.html
+++ b/v0.12.1/features/DevReadMe/index.html
@@ -86,7 +86,7 @@
About ACA-Py Command Line Paramete
--outbound-transport ws \
--outbound-transport http
@@ -2712,7 +2712,7 @@
-ACA-Py ships with both inbound and outbound transport drivers for http
and ws
(websockets). Additional transport drivers can be added as pluggable implementations. See the existing implementations in the transports module for getting started on adding a new transport.
+ACA-Py ships with both inbound and outbound transport drivers for http
and ws
(websockets). Additional transport drivers can be added as pluggable implementations. See the existing implementations in the transports module for getting started on adding a new transport.
Most configuration parameters are provided to the agent at startup. Refer to the Running
sections above for details on listing the available command line parameters.
Provisioning Secure Storage¶
It is possible to provision a secure storage (sometimes called a wallet--but not
@@ -2779,7 +2779,7 @@
Development Workflowcontributing guidelines and code of conduct.
@@ -2273,7 +2273,7 @@
Publishing Releases¶
-The publishing document provides information on tagging a release and publishing the release artifacts to PyPi.
+The publishing document provides information on tagging a release and publishing the release artifacts to PyPi.
Dynamic Injection of Services¶
The Agent employs a dynamic injection system whereby providers of base classes are registered with the RequestContext
instance, currently within conductor.py
. Message handlers and services request an instance of the selected implementation using context.inject(BaseClass)
; for instance the wallet instance may be injected using wallet = context.inject(BaseWallet)
. The inject
method normally throws an exception if no implementation of the base class is provided, but can be called with required=False
for optional dependencies (in which case a value of None
may be returned).
Providers are registered with either context.injector.bind_instance(BaseClass, instance)
for previously-constructed (singleton) object instances, or context.injector.bind_provider(BaseClass, provider)
for dynamic providers. In some cases it may be desirable to write a custom provider which switches implementations based on configuration settings, such as the wallet provider.
diff --git a/v0.12.1/features/Endorser/index.html b/v0.12.1/features/Endorser/index.html
index ce003de9..0a289156 100644
--- a/v0.12.1/features/Endorser/index.html
+++ b/v0.12.1/features/Endorser/index.html
@@ -86,7 +86,7 @@
Configuring ACA-Py fo
How Aca-py Handles Endorsements¶
Internally, the Endorsement functionality is implemented as a protocol, and is implemented consistently with other protocols:
-- a routes.py file exposes the admin endpoints
-- handler files implement responses to any received Endorse protocol messages
-- a manager.py file implements common functionality that is called from both the routes.py and handler classes (as well as from other classes that need to interact with Endorser functionality)
+- a routes.py file exposes the admin endpoints
+- handler files implement responses to any received Endorse protocol messages
+- a manager.py file implements common functionality that is called from both the routes.py and handler classes (as well as from other classes that need to interact with Endorser functionality)
-The Endorser makes use of the Event Bus (links to the PR which links to a hackmd doc) to notify other protocols of any Endorser events of interest. For example, after a Credential Definition endorsement is received, the TransactionManager writes the endorsed transaction to the ledger and uses the Event Bus to notify the Credential Definition manager that it can do any required post-processing (such as writing the cred def record to the wallet, initiating the revocation registry, etc.).
+The Endorser makes use of the Event Bus (links to the PR which links to a hackmd doc) to notify other protocols of any Endorser events of interest. For example, after a Credential Definition endorsement is received, the TransactionManager writes the endorsed transaction to the ledger and uses the Event Bus to notify the Credential Definition manager that it can do any required post-processing (such as writing the cred def record to the wallet, initiating the revocation registry, etc.).
The overall architecture can be illustrated as:
Create Credential Definition and Revocation Registry¶
diff --git a/v0.12.1/features/JsonLdCredentials/index.html b/v0.12.1/features/JsonLdCredentials/index.html
index bd608539..e9a2964d 100644
--- a/v0.12.1/features/JsonLdCredentials/index.html
+++ b/v0.12.1/features/JsonLdCredentials/index.html
@@ -86,7 +86,7 @@
DID Exchange
With these changes, an existing ACA-Py installation using unqualified DIDs can upgrade to use qualified DIDs:
-- Reactively in 0.12.0, by using like DIDs from the other agent.
+- Reactively in 0.12.0 and later, by using like DIDs from the other agent.
- Proactively, by adding the
use_did
or use_did_method
parameter on the POST /out-of-band/create-invitation
, POST /didexchange/create-request
. and POST /didexchange/{conn_id}/accept_invitation
endpoints and specifying did:peer:2
or did_peer:4
.
- The other agent must be able to process the selected DID Method.
- Proactively, by updating to use DID Exchange v1.1 and having the other side
auto-accept
the connection.
diff --git a/v0.12.1/features/SelectiveDisclosureJWTs/index.html b/v0.12.1/features/SelectiveDisclosureJWTs/index.html
index d545bbbf..b73ec432 100644
--- a/v0.12.1/features/SelectiveDisclosureJWTs/index.html
+++ b/v0.12.1/features/SelectiveDisclosureJWTs/index.html
@@ -86,7 +86,7 @@
Aries AIP and RFCs Supported in Aries Cloud Agent Python¶
-This document provides a summary of the adherence of ACA-Py to the Aries Interop
+This document provides a summary of the adherence of ACA-Py to the Aries Interop
Profiles,
and an overview of the ACA-Py feature set. This document is
manually updated and as such, may not be up to date with the most recent release of
ACA-Py or the repository main
branch. Reminders (and PRs!) to update this page are
welcome! If you have any questions, please contact us on the #aries channel on
Hyperledger Discord or through an issue in this repo.
-Last Update: 2024-04-11, Release 0.12.0
+Last Update: 2024-05-01, Release 0.12.1
The checklist version of this document was created as a joint effort
between Northern Block, Animo Solutions and the Ontario government, on behalf of the Ontario government.
@@ -2652,7 +2652,7 @@ Secure Storage TypesIndy SDK
Deprecated
-Full support for the features of the "indy-wallet" secure storage capabilities found in the Indy SDK.
+To be removed in the next Major/Minor release of ACA-Py Full support for the features of the "indy-wallet" secure storage capabilities found in the Indy SDK.
@@ -2695,14 +2695,14 @@ Miscellaneous Features
-Revocable AnonCreds Credentials
+Revocable AnonCreds Credentials
Multi-Tenancy
-Documentation
+Documentation
Multi-Tenant Management
@@ -2748,7 +2748,7 @@ Miscellaneous Features
Supported RFCs¶
AIP 1.0¶
-All RFCs listed in AIP 1.0 are fully supported in ACA-Py. The following table
+
All RFCs listed in AIP 1.0 are fully supported in ACA-Py. The following table
provides notes about the implementation of specific RFCs.
@@ -2428,14 +2428,14 @@
diff --git a/v0.12.1/features/SupportedRFCs/index.html b/v0.12.1/features/SupportedRFCs/index.html
index 8843a1db..228e5e01 100644
--- a/v0.12.1/features/SupportedRFCs/index.html
+++ b/v0.12.1/features/SupportedRFCs/index.html
@@ -86,7 +86,7 @@
@@ -2306,7 +2306,7 @@
diff --git a/v0.12.1/features/QualifiedDIDs/index.html b/v0.12.1/features/QualifiedDIDs/index.html
index 170793cc..eb40f81f 100644
--- a/v0.12.1/features/QualifiedDIDs/index.html
+++ b/v0.12.1/features/QualifiedDIDs/index.html
@@ -86,7 +86,7 @@
diff --git a/v0.12.1/features/PlugIns/index.html b/v0.12.1/features/PlugIns/index.html
index cf024879..97598f1a 100644
--- a/v0.12.1/features/PlugIns/index.html
+++ b/v0.12.1/features/PlugIns/index.html
@@ -86,7 +86,7 @@
diff --git a/v0.12.1/features/Multitenancy/index.html b/v0.12.1/features/Multitenancy/index.html
index 3d7086b0..9d40c526 100644
--- a/v0.12.1/features/Multitenancy/index.html
+++ b/v0.12.1/features/Multitenancy/index.html
@@ -86,7 +86,7 @@
diff --git a/v0.12.1/features/Multiledger/index.html b/v0.12.1/features/Multiledger/index.html
index 9e459221..2853899b 100644
--- a/v0.12.1/features/Multiledger/index.html
+++ b/v0.12.1/features/Multiledger/index.html
@@ -86,7 +86,7 @@
diff --git a/v0.12.1/features/Multicredentials/index.html b/v0.12.1/features/Multicredentials/index.html
index 79c249cb..ca5853d1 100644
--- a/v0.12.1/features/Multicredentials/index.html
+++ b/v0.12.1/features/Multicredentials/index.html
@@ -86,7 +86,7 @@
diff --git a/v0.12.1/features/Mediation/index.html b/v0.12.1/features/Mediation/index.html
index 662e560c..8fdc845e 100644
--- a/v0.12.1/features/Mediation/index.html
+++ b/v0.12.1/features/Mediation/index.html
@@ -86,7 +86,7 @@
@@ -2405,11 +2405,11 @@
@@ -2357,18 +2357,18 @@
@@ -2368,10 +2368,10 @@
diff --git a/v0.12.1/deploying/RedisPlugins/index.html b/v0.12.1/deploying/RedisPlugins/index.html
index d8b7fba9..aeb296f2 100644
--- a/v0.12.1/deploying/RedisPlugins/index.html
+++ b/v0.12.1/deploying/RedisPlugins/index.html
@@ -86,7 +86,7 @@
diff --git a/v0.12.1/deploying/Poetry/index.html b/v0.12.1/deploying/Poetry/index.html
index 81399932..4a3e8145 100644
--- a/v0.12.1/deploying/Poetry/index.html
+++ b/v0.12.1/deploying/Poetry/index.html
@@ -86,7 +86,7 @@
@@ -2258,7 +2258,7 @@
diff --git a/v0.12.1/deploying/Databases/index.html b/v0.12.1/deploying/Databases/index.html
index 198ff2e5..7b668fe1 100644
--- a/v0.12.1/deploying/Databases/index.html
+++ b/v0.12.1/deploying/Databases/index.html
@@ -86,7 +86,7 @@
diff --git a/v0.12.1/deploying/ContainerImagesAndGithubActions/index.html b/v0.12.1/deploying/ContainerImagesAndGithubActions/index.html
index 78456d5f..5d7bbfb9 100644
--- a/v0.12.1/deploying/ContainerImagesAndGithubActions/index.html
+++ b/v0.12.1/deploying/ContainerImagesAndGithubActions/index.html
@@ -86,7 +86,7 @@