<!-- < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < ☺ v ✰ Thanks for creating a PR! ✰ v Before smashing the submit button please review the checkboxes. v If a checkbox is n/a - please still include it but + a little note why ☺ > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > --> ## Description <!-- Add a description of the changes that this PR introduces and the files that are the most critical to review. --> This pull request is a follow-up pull request for #9246 that adds documentation for the `simd testnet` command. --- Before we can merge this PR, please make sure that all the following items have been checked off. If any of the checklist items are not applicable, please leave them but write a little note why. - [x] Targeted PR against correct branch (see [CONTRIBUTING.md](https://github.com/cosmos/cosmos-sdk/blob/master/CONTRIBUTING.md#pr-targeting)) - [x] Linked to Github issue with discussion and accepted design OR link to spec that describes this work. - [ ] Code follows the [module structure standards](https://github.com/cosmos/cosmos-sdk/blob/master/docs/building-modules/structure.md). - [ ] Wrote unit and integration [tests](https://github.com/cosmos/cosmos-sdk/blob/master/CONTRIBUTING.md#testing) - [x] Updated relevant documentation (`docs/`) or specification (`x/<module>/spec/`) - [ ] Added relevant `godoc` [comments](https://blog.golang.org/godoc-documenting-go-code). - [ ] Added a relevant changelog entry to the `Unreleased` section in `CHANGELOG.md` - [x] Re-reviewed `Files changed` in the Github PR explorer - [x] Review `Codecov Report` in the comment section below once CI passes
87 lines
2.7 KiB
Markdown
87 lines
2.7 KiB
Markdown
<!--
|
|
order: 6
|
|
-->
|
|
|
|
# Rosetta
|
|
|
|
Package rosetta implements the rosetta API for the current cosmos sdk release series.
|
|
|
|
## 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:
|
|
|
|
```go
|
|
package custom_client
|
|
import (
|
|
|
|
"context"
|
|
"github.com/coinbase/rosetta-sdk-go/types"
|
|
"github.com/cosmos/cosmos-sdk/server/rosetta/lib"
|
|
)
|
|
|
|
// CustomClient embeds the standard cosmos client
|
|
// which means that it implements the cosmos-rosetta-gateway Client
|
|
// interface while at the same time allowing to customize certain methods
|
|
type CustomClient struct {
|
|
*rosetta.Client
|
|
}
|
|
|
|
func (c *CustomClient) ConstructionPayload(_ context.Context, request *types.ConstructionPayloadsRequest) (resp *types.ConstructionPayloadsResponse, err error) {
|
|
// provide custom signature bytes
|
|
panic("implement me")
|
|
}
|
|
```
|
|
|
|
### 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:
|
|
|
|
```go
|
|
package custom_errors
|
|
import crgerrs "github.com/cosmos/cosmos-sdk/server/rosetta/lib/errors"
|
|
|
|
var customErrRetriable = true
|
|
var CustomError = crgerrs.RegisterError(100, "custom message", customErrRetriable, "description")
|
|
```
|
|
|
|
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:
|
|
|
|
```go
|
|
package app
|
|
import (
|
|
|
|
"github.com/cosmos/cosmos-sdk/server"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
func buildAppCommand(rootCmd *cobra.Command) {
|
|
// more app.go init stuff
|
|
// ...
|
|
// add rosetta command
|
|
rootCmd.AddCommand(server.RosettaCommand(encodingConfig.InterfaceRegistry, encodingConfig.Marshaler))
|
|
}
|
|
```
|
|
|
|
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.
|