Agent Negotiation Verifiable Interaction Layer
An app in the Convergence Stack
ANVIL bridges Fetch.AI and Sovrin, bringing trusted agents to the Open Economic Framework.
In short, ANVIL mitigates risk in AEA negotiations with verifiable claims.
- Linux/MacOS and Docker.
The installer and install tester should be run from the root directory (the one containg this readme).
Install: ./scripts/install.sh
Start Fetch node: ./scripts/start_fetch.sh
Spin up Sovrin node pool: sudo ./scripts/start_sovrin.sh
Test install (requires a running Fetch node and Sovrin pool): ./scripts/test.sh
Stop Fetch node: ./scripts/stop_fetch.sh
Stop Sovrin node pool: ./scripts/stop_sovrin.sh
The Fetch node sits on port 3333.
The Sovrin node pool sits on ports 9701 – 9708.
ANVIL apps sit on ports 5000 – 5003.
ANVIL is written in Python, making use of Fetch.AI’s OEF Python SDK and the Python wrapper for HyperLedger Indy. As an app in the Convergence Stack, ANVIL occupies the top three layers: it handles authentication using Sovrin’s DIDs and encrypted communication channels, querying of Fetch.AI services and various Sovrin blockchain data, serves as a UX tool for developers, as well as sports a front-end application.
There are four key parties involved in an ANVIL interaction:
- Steward: an exisiting trust anchor on the Sovrin ledger used to onboard the other parties to Sovrin.
- Issuer: the issuer of the credential used by:
- Prover: the seller in a FIPA negotiation, proving they have the credential to make them trustworthy.
- Verifier: the buyer in a FIPA negotiation, verifying the Prover's credential.
Default mocked testing accounts are already set up for use without the Sovrin mainnet. If just testing, there's no need to set up the wallets section below.
For real accounts, set up your address and key as environment variables on the relevant machine and in the same session (terminal) as running the app for each actor. You only need to set up the components you are using, e.g. in the case where actor are already Sovrin-onboarded, where there is no need for a Steward.
WALLET_ID=
WALLET_KEY=
Optionally, also set SOVRIN_SEED= when initialising an actor from a seed (generally only for Steward setup).
Go to the anvil subfolder. Run the agent(s) of choice in a Python venv:
python3 steward.py
python3 issuer.py
python3 prover.py
python3 verifier.py
Example data is given in the anvil/example_data folder. This includes 2 sets of credentials and their associated proofs: an authenticated data sharing bot (Sophos) and a degree certificate. These can be pasted into the front-end apps.
Encoding used is personal preference. For Sophos, octal was chosen.
Fetch services are loaded in the front-end app using a path to the service data. An example service data struture can be found in the anvil/example_data folder.
ANVIL uses Sovrin's authenticated, encrypted, pairwise secure channels. The setup works as follows:




