Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(cmd/paratime/denom): Add cmd denomination set, set-native and remove #242

Merged
merged 1 commit into from
May 29, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions cmd/paratime/denomination/denomination.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
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)
Cmd.AddCommand(removeDenomCmd)
}
51 changes: 51 additions & 0 deletions cmd/paratime/denomination/remove.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package denomination

import (
"fmt"
"strings"

"github.com/spf13/cobra"

"github.com/oasisprotocol/oasis-sdk/client-sdk/go/config"

cliConfig "github.com/oasisprotocol/cli/config"
)

var removeDenomCmd = &cobra.Command{
Use: "remove <network> <paratime> <denomination>",
Short: "Remove denomination",
Args: cobra.ExactArgs(3),
Run: func(cmd *cobra.Command, args []string) {
cfg := cliConfig.Global()
networkArg, ptArg, denomArg := args[0], args[1], args[2]

if denomArg == config.NativeDenominationKey {
cobra.CheckErr(fmt.Errorf("you cannot delete native denomination"))
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
}

denomArg = strings.ToLower(denomArg)
_, ok := pt.Denominations[denomArg]
if ok {
delete(pt.Denominations, denomArg)
} else {
cobra.CheckErr(fmt.Errorf("denomination '%s' does not exist", denomArg))
return
}

err := cfg.Save()
cobra.CheckErr(err)
},
}
49 changes: 49 additions & 0 deletions cmd/paratime/denomination/set-native.go
Original file line number Diff line number Diff line change
@@ -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 <network> <paratime> <symbol> <number_of_decimals>",
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' cannot 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[config.NativeDenominationKey] = denomInfo

err = cfg.Save()
cobra.CheckErr(err)
},
}
64 changes: 64 additions & 0 deletions cmd/paratime/denomination/set.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
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 <network> <paratime> <denomination> <number_of_decimals> [--symbol <symbol>]",
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
}

decimalsInt, err := strconv.Atoi(decimalsArg)
if err != nil {
cobra.CheckErr(fmt.Errorf("number of decimals '%s' cannot 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)
}
3 changes: 3 additions & 0 deletions cmd/paratime/paratime.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ package paratime

import (
"github.com/spf13/cobra"

"github.com/oasisprotocol/cli/cmd/paratime/denomination"
)

var Cmd = &cobra.Command{
Expand All @@ -18,4 +20,5 @@ func init() {
Cmd.AddCommand(setDefaultCmd)
Cmd.AddCommand(showCmd)
Cmd.AddCommand(statsCmd)
Cmd.AddCommand(denomination.Cmd)
}
29 changes: 29 additions & 0 deletions docs/paratime.md
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,35 @@ encrypted:

![code](../examples/paratime-show/show-tx-encrypted.out.static)

## Set information about a denomination {#denom-set}

To set information about a denomination on the specific network and paratime use
`paratime denom set <network> <paratime> <denomination> <number_of_decimals>
--symbol <symbol>`. To use this command a denomination must already exist in the
actual paratime.

![code shell](../examples/paratime-denom/00-denom-set.in)

## Set information about the native denomination {#denom-set-native}

To set information about the native denomination on the specific network and
paratime use `paratime denom set-native <network> <paratime> <denomination>
<number_of_decimals>`.

The native denomination is already mandatory in the [`paratime add`](#add)
command.

![code shell](../examples/paratime-denom/01-denom-set-native.in)

## Remove denomination {#denom-remove}

To remove an existing denomination on the specific network and paratime use
`paratime denom remove <network> <paratime> <denomination>`.

The native denomination cannot be removed.

![code shell](../examples/paratime-denom/02-denom-remove.in)

## Advanced

### Register a New ParaTime {#register}
Expand Down
1 change: 1 addition & 0 deletions examples/paratime-denom/00-denom-set.in
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
oasis paratime denom set mainnet sapphire TESTTEST 16
Empty file.
1 change: 1 addition & 0 deletions examples/paratime-denom/01-denom-set-native.in
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
oasis paratime denom set-native testnet cipher TEST 9
Empty file.
1 change: 1 addition & 0 deletions examples/paratime-denom/02-denom-remove.in
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
oasis paratime denom remove mainnet sapphire TESTTEST
Empty file.
Loading