mirror of
https://github.com/aljazceru/nigiri.git
synced 2026-02-06 07:14:41 +01:00
78 lines
1.8 KiB
Go
78 lines
1.8 KiB
Go
package cmd
|
|
|
|
import (
|
|
"os"
|
|
"os/exec"
|
|
|
|
"github.com/spf13/cobra"
|
|
"github.com/vulpemventures/nigiri/cli/constants"
|
|
"github.com/vulpemventures/nigiri/cli/controller"
|
|
)
|
|
|
|
var RpcCmd = &cobra.Command{
|
|
Use: "rpc <command>",
|
|
Short: "Invoke the bitcoin-cli or elements-cli",
|
|
RunE: rpc,
|
|
PreRunE: rpcChecks,
|
|
}
|
|
|
|
func rpcChecks(cmd *cobra.Command, args []string) error {
|
|
datadir, _ := cmd.Flags().GetString("datadir")
|
|
isLiquidService, _ := cmd.Flags().GetBool("liquid")
|
|
|
|
ctl, err := controller.NewController()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := ctl.ParseDatadir(datadir); err != nil {
|
|
return err
|
|
}
|
|
|
|
if isRunning, err := ctl.IsNigiriRunning(); err != nil {
|
|
return err
|
|
} else if !isRunning {
|
|
return constants.ErrNigiriNotRunning
|
|
}
|
|
|
|
if err := ctl.ReadConfigFile(datadir); err != nil {
|
|
return err
|
|
}
|
|
|
|
if isLiquidService && isLiquidService != ctl.GetConfigBoolField(constants.AttachLiquid) {
|
|
return constants.ErrNigiriLiquidNotEnabled
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func rpc(cmd *cobra.Command, args []string) error {
|
|
datadir, _ := cmd.Flags().GetString("datadir")
|
|
isLiquidService, _ := cmd.Flags().GetBool("liquid")
|
|
rpcWallet, _ := cmd.Flags().GetString("rpcwallet")
|
|
|
|
ctl, err := controller.NewController()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
envPath := ctl.GetResourcePath(datadir, "env")
|
|
env := ctl.LoadComposeEnvironment(envPath)
|
|
|
|
rpcArgs := []string{"exec", "bitcoin", "bitcoin-cli", "-datadir=config", "-rpcwallet=" + rpcWallet}
|
|
if isLiquidService {
|
|
rpcArgs = []string{"exec", "liquid", "elements-cli", "-datadir=config", "-rpcwallet=" + rpcWallet}
|
|
}
|
|
cmdArgs := append(rpcArgs, args...)
|
|
bashCmd := exec.Command("docker", cmdArgs...)
|
|
bashCmd.Stdout = os.Stdout
|
|
bashCmd.Stderr = os.Stderr
|
|
bashCmd.Env = env
|
|
|
|
if err := bashCmd.Run(); err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|