/
rosetta.go
58 lines (51 loc) · 2.36 KB
/
rosetta.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package server
import (
"fmt"
"strings"
"github.com/cosmos/cosmos-sdk/client/flags"
"github.com/cosmos/cosmos-sdk/codec"
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
"github.com/cosmos/cosmos-sdk/server/rosetta"
"github.com/spf13/cobra"
fxtypes "github.com/functionx/fx-core/v4/types"
)
// RosettaCommand builds the rosetta root command given
// a protocol buffers serializer/deserializer
func RosettaCommand(ir codectypes.InterfaceRegistry, cdc codec.Codec) *cobra.Command {
cmd := &cobra.Command{
Use: "rosetta",
Short: "spin up a rosetta server",
RunE: func(cmd *cobra.Command, args []string) error {
conf, err := rosetta.FromFlags(cmd.Flags())
if err != nil {
return err
}
grpcFlag := cmd.Flag(rosetta.FlagGRPCEndpoint)
if grpcFlag.DefValue != grpcFlag.Value.String() && strings.HasPrefix(grpcFlag.Value.String(), "map") {
conf.GRPCEndpoint = grpcFlag.DefValue
}
protoCodec, ok := cdc.(*codec.ProtoCodec)
if !ok {
return fmt.Errorf("exoected *codec.ProtoCodec, got: %T", cdc)
}
conf.WithCodec(ir, protoCodec)
rosettaSrv, err := rosetta.ServerFromConfig(conf)
if err != nil {
return err
}
return rosettaSrv.Start()
},
}
cmd.Flags().String(rosetta.FlagBlockchain, rosetta.DefaultBlockchain, "the blockchain type")
cmd.Flags().String(rosetta.FlagNetwork, rosetta.DefaultNetwork, "the network name")
cmd.Flags().String(rosetta.FlagTendermintEndpoint, rosetta.DefaultTendermintEndpoint, "the tendermint rpc endpoint, without tcp://")
cmd.Flags().String(rosetta.FlagGRPCEndpoint, rosetta.DefaultGRPCEndpoint, "the app gRPC endpoint")
cmd.Flags().String(rosetta.FlagAddr, rosetta.DefaultAddr, "the address rosetta will bind to")
cmd.Flags().Int(rosetta.FlagRetries, rosetta.DefaultRetries, "the number of retries that will be done before quitting")
cmd.Flags().Bool(rosetta.FlagOffline, rosetta.DefaultOffline, "run rosetta only with construction API")
cmd.Flags().Bool(rosetta.FlagEnableFeeSuggestion, rosetta.DefaultEnableFeeSuggestion, "enable default fee suggestion")
cmd.Flags().Int(rosetta.FlagGasToSuggest, flags.DefaultGasLimit, "default gas for fee suggestion")
cmd.Flags().String(rosetta.FlagDenomToSuggest, fxtypes.GetDefaultNodeHome(), "default denom for fee suggestion")
cmd.Flags().String(rosetta.FlagPricesToSuggest, fxtypes.GetDefGasPrice().String(), "default prices for fee suggestion")
return cmd
}