# Rosetta
The rosetta
package implements Coinbase's Rosetta API (opens new window). This document provides instructions on how to use the Rosetta API integration. For information about the motivation and design choices, refer to ADR 035.
# Add Rosetta Command
The Rosetta API server is a stand-alone server that connects to a node of a chain developed with Cosmos SDK.
To enable Rosetta API support, it's required to add the RosettaCommand
to your application's root command file (e.g. appd/cmd/root.go
).
Import the server
package:
Find the following line:
After that line, add the following:
The RosettaCommand
function builds the rosetta
root command and is defined in the server
package within Cosmos SDK.
Since we’ve updated the Cosmos SDK to work with the Rosetta API, updating the application's root command file is all you need to do.
An implementation example can be found in simapp
package.
# Use Rosetta Command
To run Rosetta in your application CLI, use the following command:
To test and run Rosetta API endpoints for applications that are running and exposed, use the following command:
# Extension
There are two ways in which you can customize and extend the implementation with your custom settings.
# Message extension
In order to make an sdk.Msg
understandable by rosetta the only thing which is required is adding the methods to your message that satisfy the rosetta.Msg
interface.
Examples on how to do so can be found in the staking types such as MsgDelegate
, or in bank types such as MsgSend
.
# Client interface override
In case more customization is required, it's possible to embed the Client type and override the methods which require customizations.
Example:
# Error extension
Since rosetta requires to provide 'returned' errors to network options. In order to declare a new rosetta error, we use the errors
package in cosmos-rosetta-gateway.
Example:
Note: errors must be registered before cosmos-rosetta-gateway's Server
.Start
method is called. Otherwise the registration will be ignored. Errors with same code will be ignored too.
# Integration in app.go
To integrate rosetta as a command in your application, in app.go, in your root command simply use the server.RosettaCommand
method.
Example:
A full implementation example can be found in simapp
package.
NOTE: when using a customized client, the command cannot be used as the constructors required may differ, so it's required to create a new one. We intend to provide a way to init a customized client without writing extra code in the future.