diff --git a/cmd/paratime/denomination/denomination.go b/cmd/paratime/denomination/denomination.go new file mode 100644 index 00000000..0924cbdc --- /dev/null +++ b/cmd/paratime/denomination/denomination.go @@ -0,0 +1,16 @@ +package denomination + +import ( + "github.com/spf13/cobra" +) + +var Cmd = &cobra.Command{ + Use: "denomination", + Short: "Denomination operations", + Aliases: []string{"denom"}, +} + +func init() { + Cmd.AddCommand(setDenomCmd) + Cmd.AddCommand(setNativeDenomCmd) +} diff --git a/cmd/paratime/denomination/set-native.go b/cmd/paratime/denomination/set-native.go new file mode 100644 index 00000000..798f5056 --- /dev/null +++ b/cmd/paratime/denomination/set-native.go @@ -0,0 +1,49 @@ +package denomination + +import ( + "fmt" + "strconv" + + "github.com/spf13/cobra" + + "github.com/oasisprotocol/oasis-sdk/client-sdk/go/config" + + cliConfig "github.com/oasisprotocol/cli/config" +) + +var setNativeDenomCmd = &cobra.Command{ + Use: "set-native ", + Short: "Set native denomination", + Args: cobra.ExactArgs(4), + Run: func(cmd *cobra.Command, args []string) { + cfg := cliConfig.Global() + networkArg, ptArg, symbolArg, decimalsArg := args[0], args[1], args[2], args[3] + + decimalsInt, err := strconv.Atoi(decimalsArg) + if err != nil { + cobra.CheckErr(fmt.Errorf("number of decimals '%s' can not be converted to integer", decimalsArg)) + return + } + + net := cfg.Networks.All[networkArg] + if net == nil { + cobra.CheckErr(fmt.Errorf("network '%s' does not exist", networkArg)) + return + } + + pt := net.ParaTimes.All[ptArg] + if pt == nil { + cobra.CheckErr(fmt.Errorf("pratime '%s' does not exist", ptArg)) + return + } + + denomInfo := &config.DenominationInfo{ + Symbol: symbolArg, + Decimals: uint8(decimalsInt), + } + pt.Denominations["_"] = denomInfo + + err = cfg.Save() + cobra.CheckErr(err) + }, +} diff --git a/cmd/paratime/denomination/set.go b/cmd/paratime/denomination/set.go new file mode 100644 index 00000000..988b128f --- /dev/null +++ b/cmd/paratime/denomination/set.go @@ -0,0 +1,69 @@ +package denomination + +import ( + "fmt" + "strconv" + + "github.com/spf13/cobra" + flag "github.com/spf13/pflag" + + "github.com/oasisprotocol/oasis-sdk/client-sdk/go/config" + + cliConfig "github.com/oasisprotocol/cli/config" +) + +var ( + symbol string + + setDenomCmd = &cobra.Command{ + Use: "set ", + Short: "Set denomination", + Args: cobra.ExactArgs(4), + Run: func(cmd *cobra.Command, args []string) { + cfg := cliConfig.Global() + networkArg, ptArg, denomArg, decimalsArg := args[0], args[1], args[2], args[3] + + if symbol == "" { + symbol = denomArg + } + + if symbol == config.NativeDenominationKey { + cobra.CheckErr(fmt.Errorf("use denom set-native cmd for setting paratime's native denomination")) + return + } + + decimalsInt, err := strconv.Atoi(decimalsArg) + if err != nil { + cobra.CheckErr(fmt.Errorf("number of decimals '%s' can not be converted to integer", decimalsArg)) + return + } + + net := cfg.Networks.All[networkArg] + if net == nil { + cobra.CheckErr(fmt.Errorf("network '%s' does not exist", networkArg)) + return + } + + pt := net.ParaTimes.All[ptArg] + if pt == nil { + cobra.CheckErr(fmt.Errorf("pratime '%s' does not exist", ptArg)) + return + } + + denomInfo := &config.DenominationInfo{ + Symbol: symbol, + Decimals: uint8(decimalsInt), + } + pt.Denominations[denomArg] = denomInfo + + err = cfg.Save() + cobra.CheckErr(err) + }, + } +) + +func init() { + symbolFlag := flag.NewFlagSet("", flag.ContinueOnError) + symbolFlag.StringVar(&symbol, "symbol", "", "Denomination symbol") + setDenomCmd.Flags().AddFlagSet(symbolFlag) +} diff --git a/cmd/paratime/paratime.go b/cmd/paratime/paratime.go index 73c7f3ee..8c6420f4 100644 --- a/cmd/paratime/paratime.go +++ b/cmd/paratime/paratime.go @@ -2,6 +2,8 @@ package paratime import ( "github.com/spf13/cobra" + + "github.com/oasisprotocol/cli/cmd/paratime/denomination" ) var Cmd = &cobra.Command{ @@ -18,4 +20,5 @@ func init() { Cmd.AddCommand(setDefaultCmd) Cmd.AddCommand(showCmd) Cmd.AddCommand(statsCmd) + Cmd.AddCommand(denomination.Cmd) } diff --git a/docs/paratime.md b/docs/paratime.md index cdfc9b2e..86d72e28 100644 --- a/docs/paratime.md +++ b/docs/paratime.md @@ -140,6 +140,25 @@ encrypted: ![code](../examples/paratime-show/show-tx-encrypted.out.static) +## Set denominations {#denom-set} + +To set denomination on the specific network and paratime use +`paratime denom set +--symbol `. To use this cmd a denomination must already exist in the +actual runtime. + +![code shell](../examples/paratime-denom/00-denom-set.in) + +## Set denominations {#denom-set-native} + +To set native denomination on the specific network and paratime use +`paratime denom set-native +`. + +The native denomination is already mandatory in the paratime add command. + +![code shell](../examples/paratime-denom/01-denom-set-native.in) + ## Advanced ### Register a New ParaTime {#register} diff --git a/examples/paratime-denom/00-denom-set.in b/examples/paratime-denom/00-denom-set.in new file mode 100644 index 00000000..df3007fa --- /dev/null +++ b/examples/paratime-denom/00-denom-set.in @@ -0,0 +1 @@ +oasis paratime denom set mainnet sapphire TEST 16 diff --git a/examples/paratime-denom/00-denom-set.out b/examples/paratime-denom/00-denom-set.out new file mode 100644 index 00000000..e69de29b diff --git a/examples/paratime-denom/01-denom-set-native.in b/examples/paratime-denom/01-denom-set-native.in new file mode 100644 index 00000000..900853c1 --- /dev/null +++ b/examples/paratime-denom/01-denom-set-native.in @@ -0,0 +1 @@ +oasis paratime denom set-native testnet cipher TEST 9 diff --git a/examples/paratime-denom/01-denom-set-native.out b/examples/paratime-denom/01-denom-set-native.out new file mode 100644 index 00000000..e69de29b