Skip to content

Car park skills

The AEA car-park skills demonstrate an interaction between two AEAs.

  • The carpark_detection AEA provides information on the number of car parking spaces available in a given vicinity.
  • The carpark_client AEA is interested in purchasing information on available car parking spaces in the same vicinity.

Discussion

The full Fetch.ai car park AEA demo is documented in its own repo here. This demo allows you to test the AEA functionality of the car park AEA demo without the detection logic.

It demonstrates how the AEAs trade car park information.

Communication

This diagram shows the communication between the various entities as data is successfully sold by the car park AEA to the client.

sequenceDiagram participant Search participant Car_Data_Buyer_AEA participant Car_Park_AEA participant Blockchain activate Car_Data_Buyer_AEA activate Search activate Car_Park_AEA activate Blockchain Car_Park_AEA->>Search: register_service Car_Data_Buyer_AEA->>Search: search Search-->>Car_Data_Buyer_AEA: list_of_agents Car_Data_Buyer_AEA->>Car_Park_AEA: call_for_proposal Car_Park_AEA->>Car_Data_Buyer_AEA: propose Car_Data_Buyer_AEA->>Car_Park_AEA: accept Car_Park_AEA->>Car_Data_Buyer_AEA: match_accept Car_Data_Buyer_AEA->>Blockchain: transfer_funds Car_Data_Buyer_AEA->>Car_Park_AEA: send_transaction_hash Car_Park_AEA->>Blockchain: check_transaction_status Car_Park_AEA->>Car_Data_Buyer_AEA: send_data deactivate Client_AEA deactivate Search deactivate Car_Park_AEA deactivate Blockchain


Option 1: AEA Manager approach

Follow this approach when using the AEA Manager Desktop app. Otherwise, skip and follow the CLI approach below.

Preparation instructions

Install the AEA Manager.

Demo instructions

The following steps assume you have launched the AEA Manager Desktop app.

  1. Add a new AEA called car_detector with public id fetchai/car_detector:0.30.0.

  2. Add another new AEA called car_data_buyer with public id fetchai/car_data_buyer:0.31.0.

  3. Copy the address from the car_data_buyer into your clip board. Then go to the AgentLand block explorer and request some test tokens via Get Funds.

  4. Run the car_detector AEA. Navigate to its logs and copy the multiaddress displayed.

  5. Navigate to the settings of the car_data_buyer and under components > connection > fetchai/p2p_libp2p:0.22.0 update as follows (make sure to replace the placeholder with the multiaddress):

    {
      "delegate_uri": "127.0.0.1:11001",
      "entry_peers": ["REPLACE_WITH_MULTI_ADDRESS_HERE"],
      "local_uri": "127.0.0.1:9001",
      "log_file": "libp2p_node.log",
      "public_uri": "127.0.0.1:9001"
    }
    

  6. Run the car_data_buyer.

In the AEA's logs, you should see the agent trading successfully.

Option 2: CLI approach

Follow this approach when using the aea CLI.

Preparation instructions

Dependencies

Follow the Preliminaries and Installation sections from the AEA quick start.

Demo instructions

Create car detector AEA

First, fetch the car detector AEA:

aea fetch fetchai/car_detector:0.30.0
cd car_detector
aea install
aea build

Alternatively, create from scratch.

The following steps create the car detector from scratch:

aea create car_detector
cd car_detector
aea add connection fetchai/p2p_libp2p:0.24.0
aea add connection fetchai/soef:0.25.0
aea add connection fetchai/ledger:0.18.0
aea add skill fetchai/carpark_detection:0.25.0
aea config set --type dict agent.dependencies \
'{
  "aea-ledger-fetchai": {"version": "<2.0.0,>=1.0.0"}
}'
aea config set agent.default_connection fetchai/p2p_libp2p:0.24.0
aea config set --type dict agent.default_routing \
'{
  "fetchai/ledger_api:1.0.0": "fetchai/ledger:0.18.0",
  "fetchai/oef_search:1.0.0": "fetchai/soef:0.25.0"
}'
aea install
aea build

Create car data buyer AEA

Then, fetch the car data client AEA:

aea fetch fetchai/car_data_buyer:0.31.0
cd car_data_buyer
aea install
aea build

Alternatively, create from scratch.

The following steps create the car data client from scratch:

aea create car_data_buyer
cd car_data_buyer
aea add connection fetchai/p2p_libp2p:0.24.0
aea add connection fetchai/soef:0.25.0
aea add connection fetchai/ledger:0.18.0
aea add skill fetchai/carpark_client:0.25.0
aea config set --type dict agent.dependencies \
'{
  "aea-ledger-fetchai": {"version": "<2.0.0,>=1.0.0"}
}'
aea config set agent.default_connection fetchai/p2p_libp2p:0.24.0
aea config set --type dict agent.default_routing \
'{
  "fetchai/ledger_api:1.0.0": "fetchai/ledger:0.18.0",
  "fetchai/oef_search:1.0.0": "fetchai/soef:0.25.0"
}'
aea install
aea build

Add keys for the car data seller AEA

First, create the private key for the car data seller AEA based on the network you want to transact. To generate and add a private-public key pair for Fetch.ai AgentLand use:

aea generate-key fetchai
aea add-key fetchai fetchai_private_key.txt

Next, create a private key used to secure the AEA's communications:

aea generate-key fetchai fetchai_connection_private_key.txt
aea add-key fetchai fetchai_connection_private_key.txt --connection

Finally, certify the key for use by the connections that request that:

aea issue-certificates

Add keys and generate wealth for the car data buyer AEA

The buyer needs to have some wealth to purchase the service from the seller.

First, create the private key for the car data buyer AEA based on the network you want to transact. To generate and add a private-public key pair for Fetch.ai AgentLand use:

aea generate-key fetchai
aea add-key fetchai fetchai_private_key.txt

Then, create some wealth for your car data buyer based on the network you want to transact with. On the Fetch.ai AgentLand network:

aea generate-wealth fetchai

Next, create a private key used to secure the AEA's communications:

aea generate-key fetchai fetchai_connection_private_key.txt
aea add-key fetchai fetchai_connection_private_key.txt --connection

Finally, certify the key for use by the connections that request that:

aea issue-certificates

Run the AEAs

Run both AEAs from their respective terminals.

First, run the car data seller AEA:

aea run

Once you see a message of the form To join its network use multiaddr 'SOME_ADDRESS' take note of the address. (Alternatively, use aea get-multiaddress fetchai -c -i fetchai/p2p_libp2p:0.24.0 -u public_uri to retrieve the address.) This is the entry peer address for the local agent communication network created by the car data seller.

Then, in the car data buyer, run this command (replace SOME_ADDRESS with the correct value as described above):

aea config set --type dict vendor.fetchai.connections.p2p_libp2p.config \
'{
  "delegate_uri": "127.0.0.1:11001",
  "entry_peers": ["SOME_ADDRESS"],
  "local_uri": "127.0.0.1:9001",
  "log_file": "libp2p_node.log",
  "public_uri": "127.0.0.1:9001"
}'
This allows the car data buyer to connect to the same local agent communication network as the car data seller.

Then run the buyer AEA:

aea run

You will see that the AEAs negotiate and then transact using the Fetch.ai testnet.

Cleaning up

When you're finished, delete your AEAs:

cd ..
aea delete car_detector
aea delete car_data_buyer