Skip to content

Overview of the development process

The figure below presents the development process with Open Autonomy: from the idea of an off-chain service to its deployment in production. If you have completed the quick start guide you have already navigated through a significant part of this process.

Overview of the development process with the Open Autonomy framework

This is a summary of each step:

  1. Draft the service idea. Any service that needs to execute its functionality in an autonomous, transparent and decentralized way is a good candidate. You can take a look at some use cases to get an idea of what you can build with Open Autonomy.

  2. Define the FSM specification. Describe the service business logic as a finite-state machine (FSM) in a language understood by the framework. This specification defines what are the states of the service, and how to transit from one to another.

  3. Code the FSM App skill. The actual business logic is encoded in the FSM App that lives inside each agent. Coding the FSM App involves scaffolding the "skeleton" of the classes, and complete the actual details of the actions executed in each state.

  4. Define the agent. Define the components of the agent required to execute your service, including the newly created FSM App. You can reuse already existing components publicly available on a remote registry.

  5. Define the service. This consists in defining the service configuration and declaring what agents constitute the service, together with a number of configuration parameters required.

  6. Publish and mint packages. Those are required steps to make the service publicly available in the remote registry and secure it in the Autonolas Protocol.

  7. Deploy the service. You can deploy directly your service locally for testing purposes. To deploy a production service secured in the Autonolas Protocol you first need to bring the service to the Deployed state in the protocol.

Populate the local registry for the guides

To follow the next sections, you need to populate the local registry with a number of packages shipped with the framework. To do so, edit the local registry index file (./packages/packages.json) and ensure that it has the following third_party entries:

{
    "dev": {
    },
    "third_party": {
        "service/valory/hello_world/0.1.0": "bafybeidlyc47r7xofppfsh25ciaqpca73hxcappoijtofr5dml4ktmzksi",
        "agent/valory/hello_world/0.1.0": "bafybeig6p6shyx6wmih2xlzu3h6rd7gul3fxqhpdoi77qidqmpzxf33spm",
        "connection/valory/abci/0.1.0": "bafybeifbnhe4f2bll3a5o3hqji3dqx4soov7hr266rdz5vunxgzo5hggbq",
        "connection/valory/http_client/0.23.0": "bafybeih5vzo22p2umhqo52nzluaanxx7kejvvpcpdsrdymckkyvmsim6gm",
        "connection/valory/ipfs/0.1.0": "bafybeiflaxrnepfn4hcnq5pieuc7ki7d422y3iqb54lv4tpgs7oywnuhhq",
        "connection/valory/ledger/0.19.0": "bafybeic3ft7l7ca3qgnderm4xupsfmyoihgi27ukotnz7b5hdczla2enya",
        "contract/valory/service_registry/0.1.0": "bafybeiby5x4wfdywlenmoudbykdxohpq2nifqxfep5niqgxrjyrekyahzy",
        "protocol/open_aea/signing/1.0.0": "bafybeihv62fim3wl2bayavfcg3u5e5cxu3b7brtu4cn5xoxd6lqwachasi",
        "protocol/valory/abci/0.1.0": "bafybeiaqmp7kocbfdboksayeqhkbrynvlfzsx4uy4x6nohywnmaig4an7u",
        "protocol/valory/acn/1.1.0": "bafybeidluaoeakae3exseupaea4i3yvvk5vivyt227xshjlffywwxzcxqe",
        "protocol/valory/contract_api/1.0.0": "bafybeidgu7o5llh26xp3u3ebq3yluull5lupiyeu6iooi2xyymdrgnzq5i",
        "protocol/valory/http/1.0.0": "bafybeifugzl63kfdmwrxwphrnrhj7bn6iruxieme3a4ntzejf6kmtuwmae",
        "protocol/valory/ipfs/0.1.0": "bafybeiftxi2qhreewgsc5wevogi7yc5g6hbcbo4uiuaibauhv3nhfcdtvm",
        "protocol/valory/ledger_api/1.0.0": "bafybeihdk6psr4guxmbcrc26jr2cbgzpd5aljkqvpwo64bvaz7tdti2oni",
        "protocol/valory/tendermint/0.1.0": "bafybeig4mi3vmlv5zpbjbfuzcgida6j5f2nhrpedxicmrrfjweqc5r7cra",
        "skill/valory/abstract_abci/0.1.0": "bafybeihljirk3d4rgvmx2nmz3p2mp27iwh2o5euce5gccwjwrpawyjzuaq",
        "skill/valory/abstract_round_abci/0.1.0": "bafybeigjrepaqpb3m7zunmt4hryos4vto4yyj3u6iyofdb2fotwho3bqvm",
        "skill/valory/hello_world_abci/0.1.0": "bafybeif6yvoz7tsxv5wuba26zvgcj5ndwusfgerokdubazcvy4b3khrtjy",
        "connection/valory/p2p_libp2p_client/0.1.0": "bafybeid3xg5k2ol5adflqloy75ibgljmol6xsvzvezebsg7oudxeeolz7e"
    }
}

Execute the following command after updating the packages.json file:

autonomy packages sync

The framework will fetch components from the remote registry into the local registry.

Do you already have an existing agent or service?

If you already have an existing agent (or if you want to create a service with the default hello_world agent), you can skip to Step 5.

If you already have an existing service (or if you want to test the default hello_world service), you can skip to Step 6 or Step 7.