Skip to content

Commit

Permalink
feat(cmd/paratime/denom): Add cmd denom set, set-native and remove
Browse files Browse the repository at this point in the history
  • Loading branch information
amela committed May 29, 2024
1 parent 06baa71 commit 4dc06e2
Show file tree
Hide file tree
Showing 12 changed files with 215 additions and 0 deletions.
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 can not 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' 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[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' 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)
}
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)
}
28 changes: 28 additions & 0 deletions docs/paratime.md
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,34 @@ 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 <network> <paratime> <denomination> <number_of_decimals>
--symbol <symbol>`. To use this cmd a denomination must already exist in the
actual runtime.

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

## Set native denomination {#denom-set-native}

To set 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 command.

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

## Remove denomination {#denom-remove}

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

The native denomination can not 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.

0 comments on commit 4dc06e2

Please sign in to comment.