Skip to content
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
31 changes: 31 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: CI

on:
pull_request:
push:
branches:
- main

permissions:
contents: read

jobs:
test:
runs-on: ubuntu-24.04
timeout-minutes: 30

steps:
- name: Check out source
uses: actions/checkout@v4

- name: Set up Go
uses: actions/setup-go@v5
with:
go-version-file: go.mod
cache: true

- name: Run tests
run: go test ./...

- name: Build
run: go build -mod=readonly -trimpath -o /tmp/fairyringclient .
5 changes: 4 additions & 1 deletion .github/workflows/release-linux-amd64.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ on:
tag:
description: Existing GitHub release tag
required: true
default: v1.0.0
default: v1.0.1
type: string

permissions:
Expand Down Expand Up @@ -60,6 +60,9 @@ jobs:
echo "Building tag ${ACTUAL_TAG}"
git rev-parse HEAD

- name: Run tests
run: go test ./...

- name: Build fairyringclient
run: |
set -euo pipefail
Expand Down
3 changes: 2 additions & 1 deletion cmd/config_show.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,10 @@ var configShowCmd = &cobra.Command{
FairyRing Node Endpoint: %s
Chain ID: %s
Chain Denom: %s
Gas Price: %s
InvalidSharePauseThreshold: %d
MetricsPort: %d
SubmitBlockwiseKeyshares: %t
`, cfg.GetGRPCEndpoint(), cfg.GetFairyRingNodeURI(), cfg.FairyRingNode.ChainID, cfg.FairyRingNode.Denom, cfg.InvalidSharePauseThreshold, cfg.MetricsPort, cfg.SubmitBlockwiseKeyshares)
`, cfg.GetGRPCEndpoint(), cfg.GetFairyRingNodeURI(), cfg.FairyRingNode.ChainID, cfg.FairyRingNode.Denom, cfg.FairyRingNode.GasPrice, cfg.InvalidSharePauseThreshold, cfg.MetricsPort, cfg.SubmitBlockwiseKeyshares)
},
}
4 changes: 4 additions & 0 deletions cmd/config_update.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package cmd
import (
"fairyringclient/config"
"fmt"

"github.com/spf13/cobra"
)

Expand All @@ -20,6 +21,7 @@ var configUpdateCmd = &cobra.Command{

chainID, _ := cmd.Flags().GetString("chain-id")
chainDenom, _ := cmd.Flags().GetString("denom")
chainGasPrice, _ := cmd.Flags().GetString("gas-price")
chainIP, _ := cmd.Flags().GetString("ip")
chainProtocol, _ := cmd.Flags().GetString("protocol")
chainGrpcPort, _ := cmd.Flags().GetUint64("grpc-port")
Expand All @@ -35,6 +37,7 @@ var configUpdateCmd = &cobra.Command{
GRPCPort: chainGrpcPort,
Denom: chainDenom,
ChainID: chainID,
GasPrice: chainGasPrice,
}

cfg.InvalidSharePauseThreshold = pauseThreshold
Expand All @@ -59,6 +62,7 @@ func init() {

configUpdateCmd.Flags().String("chain-id", cfg.FairyRingNode.ChainID, "Update config chain id")
configUpdateCmd.Flags().String("denom", cfg.FairyRingNode.Denom, "Update config denom")
configUpdateCmd.Flags().String("gas-price", cfg.FairyRingNode.GasPrice, "Update config gas price in denom units per gas")
configUpdateCmd.Flags().Uint64("grpc-port", cfg.FairyRingNode.GRPCPort, "Update config grpc-port")
configUpdateCmd.Flags().String("ip", cfg.FairyRingNode.IP, "Update config node ip address")
configUpdateCmd.Flags().Uint64("port", cfg.FairyRingNode.Port, "Update config node port")
Expand Down
8 changes: 4 additions & 4 deletions cmd/delegate_add.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,10 @@ import (
"fairyringclient/config"
"fairyringclient/pkg/cosmosClient"
"fmt"
"log"

"github.com/Fairblock/fairyring/x/keyshare/types"
"github.com/spf13/cobra"
"log"
)

// delegateAdd represents the delegate add command
Expand All @@ -16,7 +17,6 @@ var delegateAdd = &cobra.Command{
Long: `Authorize an address for submitting key share`,
Args: cobra.ExactArgs(1),
Run: func(cmd *cobra.Command, args []string) {

cfg, err := config.ReadConfigFromFile()
if err != nil {
fmt.Printf("Error loading config from file: %s\n", err.Error())
Expand All @@ -33,8 +33,9 @@ var delegateAdd = &cobra.Command{
gRPCEndpoint,
cfg.PrivateKey,
cfg.FairyRingNode.ChainID,
cfg.FairyRingNode.Denom,
cfg.FairyRingNode.GasPrice,
)

if err != nil {
log.Fatalf("Error creating custom cosmos client, make sure provided account is activated: %v\n", err)
}
Expand All @@ -49,7 +50,6 @@ var delegateAdd = &cobra.Command{
}

txResp, err := eachClient.BroadcastTx(&msg, false)

if err != nil {
log.Fatalf("unable to broadcast create authorized address message, ERROR: %s\n", err.Error())
}
Expand Down
8 changes: 4 additions & 4 deletions cmd/delegate_remove.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,10 @@ import (
"fairyringclient/config"
"fairyringclient/pkg/cosmosClient"
"fmt"
"log"

"github.com/Fairblock/fairyring/x/keyshare/types"
"github.com/spf13/cobra"
"log"
)

// delegateRemove represents the delegate add command
Expand All @@ -16,7 +17,6 @@ var delegateRemove = &cobra.Command{
Long: `Remove an authorized address for submitting key share`,
Args: cobra.ExactArgs(1),
Run: func(cmd *cobra.Command, args []string) {

cfg, err := config.ReadConfigFromFile()
if err != nil {
fmt.Printf("Error loading config from file: %s\n", err.Error())
Expand All @@ -33,8 +33,9 @@ var delegateRemove = &cobra.Command{
gRPCEndpoint,
cfg.PrivateKey,
cfg.FairyRingNode.ChainID,
cfg.FairyRingNode.Denom,
cfg.FairyRingNode.GasPrice,
)

if err != nil {
log.Fatalf("Error creating custom cosmos client, make sure provided account is activated: %v\n", err)
}
Expand All @@ -49,7 +50,6 @@ var delegateRemove = &cobra.Command{
}

txResp, err := eachClient.BroadcastTx(&msg, false)

if err != nil {
log.Fatalf("unable to broadcast delete authorized address message, ERROR: %s\n", err.Error())
}
Expand Down
3 changes: 2 additions & 1 deletion cmd/version.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@ package cmd

import (
"fmt"

"github.com/spf13/cobra"
)

const ClientVersion = "v0.7.1"
const ClientVersion = "v1.0.1"

// configCmd represents the config command
var versionCmd = &cobra.Command{
Expand Down
12 changes: 8 additions & 4 deletions config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ const (
DefaultFolderName = ".fairyringclient"
DefaultChainID = "fairyring-testnet-3"
DefaultDenom = "ufair"
DefaultGasPrice = "0.025"
)

type Node struct {
Expand All @@ -26,6 +27,7 @@ type Node struct {
GRPCPort uint64
Denom string
ChainID string
GasPrice string
}

type Config struct {
Expand Down Expand Up @@ -75,7 +77,7 @@ func (c *Config) SaveConfig() error {
updateConfig(*c)

if err := viper.WriteConfig(); err != nil {
fmt.Errorf("failed to write config as : %s", err.Error())
return fmt.Errorf("failed to write config: %w", err)
}

return nil
Expand All @@ -84,7 +86,7 @@ func (c *Config) SaveConfig() error {
func (c *Config) ExportConfig() error {
homeDir, err := os.UserHomeDir()
if err != nil {
log.Fatal(err)
return err
}

if _, err := os.Stat(homeDir + "/" + DefaultFolderName); os.IsNotExist(err) {
Expand All @@ -97,7 +99,6 @@ func (c *Config) ExportConfig() error {
filePath := filepath.Join(homeDir+"/"+DefaultFolderName, "config.yml")
_, err = os.Stat(filePath)
if os.IsNotExist(err) {
// File does not exist, create it
log.Println("Initializing FairyRing Client default config...")

file, err := os.Create(filePath)
Expand All @@ -117,7 +118,7 @@ func (c *Config) ExportConfig() error {
setInitialConfig(*c)

if err = viper.WriteConfigAs(homeDir + "/" + DefaultFolderName + "/config.yml"); err != nil {
fmt.Errorf("failed to write config as : %s", err.Error())
return fmt.Errorf("failed to write config: %w", err)
}

return nil
Expand All @@ -138,6 +139,7 @@ func DefaultConfig(withCosmosKey bool) Config {
GRPCPort: 9090,
Denom: DefaultDenom,
ChainID: DefaultChainID,
GasPrice: DefaultGasPrice,
},
PrivateKey: privateKey,
TotalValidatorNum: 0,
Expand All @@ -155,6 +157,7 @@ func updateConfig(c Config) {
viper.Set("FairyRingNode.grpcPort", c.FairyRingNode.GRPCPort)
viper.Set("FairyRingNode.denom", c.FairyRingNode.Denom)
viper.Set("FairyRingNode.chainID", c.FairyRingNode.ChainID)
viper.Set("FairyRingNode.gasPrice", c.FairyRingNode.GasPrice)

viper.Set("PrivateKey", c.PrivateKey)

Expand All @@ -170,6 +173,7 @@ func setInitialConfig(c Config) {
viper.SetDefault("FairyRingNode.grpcPort", c.FairyRingNode.GRPCPort)
viper.SetDefault("FairyRingNode.denom", c.FairyRingNode.Denom)
viper.SetDefault("FairyRingNode.chainID", c.FairyRingNode.ChainID)
viper.SetDefault("FairyRingNode.gasPrice", c.FairyRingNode.GasPrice)

viper.SetDefault("PrivateKey", c.PrivateKey)

Expand Down
17 changes: 17 additions & 0 deletions config/config_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package config

import "testing"

func TestDefaultConfigIncludesMainnetFeeSettings(t *testing.T) {
cfg := DefaultConfig(false)

if cfg.FairyRingNode.Denom != DefaultDenom {
t.Fatalf("unexpected default denom: got %q want %q", cfg.FairyRingNode.Denom, DefaultDenom)
}
if cfg.FairyRingNode.GasPrice != DefaultGasPrice {
t.Fatalf("unexpected default gas price: got %q want %q", cfg.FairyRingNode.GasPrice, DefaultGasPrice)
}
if cfg.SubmitBlockwiseKeyshares {
t.Fatal("blockwise keyshare submission must default to disabled")
}
}
Loading
Loading