Flow of operations
This section will give you an overview of how the flow of operations in the construction API works. It will guide you through each of the necessary endpoints that you will have to call in order to post a valid transaction with your signature to the ICP ledger. As an example of such a transaction this guide will use a simple transfer between accounts.
It is recommended to first read through the interactions of each endpoint to acquire an understanding of how the flow of operations works. Although the example of transferring tokens is only one use case of the construction API of Rosetta, it serves as a good example on what to expect from the interaction with the Construction-API. The other functionalities that are supported by ICP Rosetta through the construction API follow a similar flow of operations.
Prerequisites
- You have a Rosetta instance running at:
http://127.0.0.1:8081
.
Key generation
For the purpose of this guide, you need to have a private key available with which you can sign messages.
The Rosetta architecture is built so that no private keys are ever sent to Rosetta. All the signing and thus handling of private keys can be done offline.
Rosetta supports multiple types of keys. The two that are used most often are Edwards2559
and Secp256k1
. If you want to use Rosetta together with dfx
you will be using ECDSA
keys with an Secp256k1
curve type. For a guide on how to create a new identity you can look at the relevant dfx
section.
For this guide we will be using the identity.pem
that is created with dfx identity new
.
Construction API endpoints
See construction API overview for a high-level overview of the transaction flow. This documentation will provide code snippets for interacting with Rosetta through regular curl
commands as well as providing you with a Rosetta-client example implementation in Python. Feel free to use these code snippets as a starting point to write your own Rosetta-client in your language of choice.
The endpoints that make up the flow of operations are the following:
- construction/derive: Derive an
accountIdentifier
from your public key. - construction/preprocess: Fetch transaction specific parameters to call the
construction/metadata
endpoint with. - construction/metadata: Fetch transaction specific metadata from the ICP ledger.
- construction/payloads: Fetch signable payloads for the requested set of operations.
- construction/combine: Combine signatures and an unsigned transaction into a signed transaction.
- construction/submit: Send signed transactions to the ICP Ledger canister.