Skip to content

Commit

Permalink
Split ethereum and fabric deploy commands into separate sub commands
Browse files Browse the repository at this point in the history
Signed-off-by: Nicko Guyer <nicko.guyer@kaleido.io>
  • Loading branch information
nguyer committed Mar 23, 2022
1 parent 1b173ac commit cc00944
Show file tree
Hide file tree
Showing 8 changed files with 122 additions and 66 deletions.
62 changes: 2 additions & 60 deletions cmd/deploy.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,72 +17,14 @@
package cmd

import (
"fmt"

"github.com/hyperledger/firefly-cli/internal/docker"
"github.com/hyperledger/firefly-cli/internal/stacks"
"github.com/spf13/cobra"
)

// deployCmd represents the deploy command
var deployCmd = &cobra.Command{
Use: "deploy <stack_name> <filename> [extra_args]",
Short: "Deploy a compiled smart contract to the blockchain used by a FireFly stack",
Use: "deploy",
Short: "Deploy a compiled smart contract",
Long: `Deploy a compiled smart contract to the blockchain used by a FireFly stack`,
RunE: func(cmd *cobra.Command, args []string) error {

if err := docker.CheckDockerConfig(); err != nil {
return err
}

stackManager := stacks.NewStackManager(logger)
if len(args) == 0 {
return fmt.Errorf("no stack specified")
}
stackName := args[0]
if len(args) < 2 {
return fmt.Errorf("no filename specified")
}
filename := args[1]

if exists, err := stacks.CheckExists(stackName); err != nil {
return err
} else if !exists {
return fmt.Errorf("stack '%s' does not exist", stackName)
}

if err := stackManager.LoadStack(stackName, verbose); err != nil {
return err
}

contractNames, err := stackManager.GetContracts(filename, args[2:])
if err != nil {
return err
}
if len(contractNames) < 1 {
return fmt.Errorf("no contracts found in file: '%s'", filename)
}
selectedContractName := contractNames[0]
if len(contractNames) > 1 {
selectedContractName, err = selectMenu("select the contract to deploy", contractNames)
fmt.Print("\n")
if err != nil {
return err
}
}

fmt.Printf("deploying %s... ", selectedContractName)
contractAddress, err := stackManager.DeployContract(filename, selectedContractName, 0, args[2:])
if err != nil {
return err
}

fmt.Print("done\n\n")
fmt.Printf("contract address: %s\n", contractAddress)
fmt.Print("\n")

return nil
},
}

func init() {
Expand Down
66 changes: 66 additions & 0 deletions cmd/ethereum.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
/*
Copyright © 2022 NAME HERE <EMAIL ADDRESS>
*/
package cmd

import (
"fmt"

"github.com/hyperledger/firefly-cli/internal/docker"
"github.com/hyperledger/firefly-cli/internal/stacks"
"github.com/spf13/cobra"
)

// ethereumCmd represents the ethereum command
var ethereumCmd = &cobra.Command{
Use: "ethereum <stack_name> <contract_json_file>",
Short: "Deploy a compiled solidity contract",
Long: `Deploy a solidity contract compiled with solc to the blockchain used by a FireFly stack
To compile a .sol file to a .json file run:
solc --combined-json abi,bin contract.sol > contract.json
`,
Args: cobra.ExactArgs(2),
PreRunE: func(cmd *cobra.Command, args []string) error {
return docker.CheckDockerConfig()
},
RunE: func(cmd *cobra.Command, args []string) error {
stackName := args[0]
filename := args[1]
stackManager := stacks.NewStackManager(logger)
if err := stackManager.LoadStack(stackName, verbose); err != nil {
return err
}
contractNames, err := stackManager.GetContracts(filename, args[2:])
if err != nil {
return err
}
if len(contractNames) < 1 {
return fmt.Errorf("no contracts found in file: '%s'", filename)
}
selectedContractName := contractNames[0]
if len(contractNames) > 1 {
selectedContractName, err = selectMenu("select the contract to deploy", contractNames)
fmt.Print("\n")
if err != nil {
return err
}
}
fmt.Printf("deploying %s... ", selectedContractName)
contractAddress, err := stackManager.DeployContract(filename, selectedContractName, 0)
if err != nil {
return err
}

fmt.Print("done\n\n")
fmt.Printf("contract address: %s\n", contractAddress)
fmt.Print("\n")
return nil
},
}

func init() {
deployCmd.AddCommand(ethereumCmd)
}
48 changes: 48 additions & 0 deletions cmd/fabric.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
/*
Copyright © 2022 NAME HERE <EMAIL ADDRESS>
*/
package cmd

import (
"fmt"

"github.com/hyperledger/firefly-cli/internal/docker"
"github.com/hyperledger/firefly-cli/internal/stacks"
"github.com/spf13/cobra"
)

// fabricCmd represents the fabric command
var fabricCmd = &cobra.Command{
Use: "fabric <stack_name> <chaincode_package> <channel> <chaincodeName> <version>",
Short: "Deploy fabric chaincode",
Long: `Deploy a packaged chaincode to the Fabric network used by a FireFly stack`,
Args: cobra.ExactArgs(5),
PreRunE: func(cmd *cobra.Command, args []string) error {
return docker.CheckDockerConfig()
},
RunE: func(cmd *cobra.Command, args []string) error {
stackName := args[0]
filename := args[1]
channel := args[2]
chaincode := args[3]
version := args[4]
stackManager := stacks.NewStackManager(logger)
if err := stackManager.LoadStack(stackName, verbose); err != nil {
return err
}
fmt.Printf("deploying %s... ", filename)
contractAddress, err := stackManager.DeployContract(filename, filename, 0, channel, chaincode, version)
if err != nil {
return err
}
fmt.Print("done\n\n")
fmt.Printf("deployed to: %s\n", contractAddress)
fmt.Print("\n")
return nil
},
}

func init() {
deployCmd.AddCommand(fabricCmd)
}
2 changes: 1 addition & 1 deletion internal/blockchain/blockchain_provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,5 +32,5 @@ type IBlockchainProvider interface {
GetFireflyConfig(m *types.Member) (blockchainConfig *core.BlockchainConfig, coreConfig *core.OrgConfig)
Reset() error
GetContracts(filename string, extraArgs []string) ([]string, error)
DeployContract(filename, contractName string, member types.Member, extraArgs []string) (string, error)
DeployContract(filename, contractName string, member types.Member, extraArgs ...string) (string, error)
}
2 changes: 1 addition & 1 deletion internal/blockchain/ethereum/besu/besu_provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -300,7 +300,7 @@ func (p *BesuProvider) GetContracts(filename string, extraArgs []string) ([]stri
return contractNames, err
}

func (p *BesuProvider) DeployContract(filename, contractName string, member types.Member, extraArgs []string) (string, error) {
func (p *BesuProvider) DeployContract(filename, contractName string, member types.Member, extraArgs ...string) (string, error) {
return ethconnect.DeployCustomContract(p.getEthconnectURL(&member), member.Address, filename, contractName)
}

Expand Down
2 changes: 1 addition & 1 deletion internal/blockchain/ethereum/geth/geth_provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,7 @@ func (p *GethProvider) GetContracts(filename string, extraArgs []string) ([]stri
return contractNames, err
}

func (p *GethProvider) DeployContract(filename, contractName string, member types.Member, extraArgs []string) (string, error) {
func (p *GethProvider) DeployContract(filename, contractName string, member types.Member, extraArgs ...string) (string, error) {
return ethconnect.DeployCustomContract(fmt.Sprintf("http://127.0.0.1:%v", member.ExposedConnectorPort), member.Address, filename, contractName)
}

Expand Down
2 changes: 1 addition & 1 deletion internal/blockchain/fabric/fabric_provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -422,7 +422,7 @@ func (p *FabricProvider) GetContracts(filename string, extraArgs []string) ([]st
return []string{filename}, nil
}

func (p *FabricProvider) DeployContract(filename, contractName string, member types.Member, extraArgs []string) (string, error) {
func (p *FabricProvider) DeployContract(filename, contractName string, member types.Member, extraArgs ...string) (string, error) {
filename, err := filepath.Abs(filename)
if err != nil {
return "", err
Expand Down
4 changes: 2 additions & 2 deletions internal/stacks/stack_manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -772,8 +772,8 @@ func (s *StackManager) GetContracts(filename string, extraArgs []string) ([]stri
return s.blockchainProvider.GetContracts(filename, extraArgs)
}

func (s *StackManager) DeployContract(filename, contractName string, memberIndex int, extraArgs []string) (string, error) {
return s.blockchainProvider.DeployContract(filename, contractName, *s.Stack.Members[memberIndex], extraArgs)
func (s *StackManager) DeployContract(filename, contractName string, memberIndex int, extraArgs ...string) (string, error) {
return s.blockchainProvider.DeployContract(filename, contractName, *s.Stack.Members[memberIndex], extraArgs...)
}

func (s *StackManager) getBlockchainProvider(verbose bool) blockchain.IBlockchainProvider {
Expand Down

0 comments on commit cc00944

Please sign in to comment.