From 28f6a20a989a4853f899fc8123bddeef4f2ab71d Mon Sep 17 00:00:00 2001 From: Ethan Frey Date: Mon, 30 Jan 2017 15:16:51 +0100 Subject: [PATCH 1/5] Moved all commands into a subdir, for easier importing --- cmd/basecoin/cmd.go | 226 --------------------------- cmd/basecoin/{ => commands}/flags.go | 2 +- cmd/basecoin/{ => commands}/ibc.go | 94 ++++++++++- cmd/basecoin/{ => commands}/query.go | 54 ++++++- cmd/basecoin/{ => commands}/start.go | 20 ++- cmd/basecoin/{ => commands}/tx.go | 65 +++++++- cmd/basecoin/{ => commands}/utils.go | 2 +- cmd/basecoin/main.go | 17 +- 8 files changed, 240 insertions(+), 240 deletions(-) delete mode 100644 cmd/basecoin/cmd.go rename cmd/basecoin/{ => commands}/flags.go (99%) rename cmd/basecoin/{ => commands}/ibc.go (70%) rename cmd/basecoin/{ => commands}/query.go (79%) rename cmd/basecoin/{ => commands}/start.go (89%) rename cmd/basecoin/{ => commands}/tx.go (82%) rename cmd/basecoin/{ => commands}/utils.go (99%) diff --git a/cmd/basecoin/cmd.go b/cmd/basecoin/cmd.go deleted file mode 100644 index 750b44b174..0000000000 --- a/cmd/basecoin/cmd.go +++ /dev/null @@ -1,226 +0,0 @@ -package main - -import ( - "github.com/urfave/cli" -) - -var ( - startCmd = cli.Command{ - Name: "start", - Usage: "Start basecoin", - ArgsUsage: "", - Action: func(c *cli.Context) error { - return cmdStart(c) - }, - Flags: []cli.Flag{ - addrFlag, - eyesFlag, - dirFlag, - inProcTMFlag, - chainIDFlag, - ibcPluginFlag, - counterPluginFlag, - }, - } - - sendTxCmd = cli.Command{ - Name: "sendtx", - Usage: "Broadcast a basecoin SendTx", - ArgsUsage: "", - Action: func(c *cli.Context) error { - return cmdSendTx(c) - }, - Flags: []cli.Flag{ - nodeFlag, - chainIDFlag, - - fromFlag, - - amountFlag, - coinFlag, - gasFlag, - feeFlag, - seqFlag, - - toFlag, - }, - } - - appTxCmd = cli.Command{ - Name: "apptx", - Usage: "Broadcast a basecoin AppTx", - ArgsUsage: "", - Action: func(c *cli.Context) error { - return cmdAppTx(c) - }, - Flags: []cli.Flag{ - nodeFlag, - chainIDFlag, - - fromFlag, - - amountFlag, - coinFlag, - gasFlag, - feeFlag, - seqFlag, - - nameFlag, - dataFlag, - }, - Subcommands: []cli.Command{ - counterTxCmd, - }, - } - - counterTxCmd = cli.Command{ - Name: "counter", - Usage: "Craft a transaction to the counter plugin", - Action: func(c *cli.Context) error { - return cmdCounterTx(c) - }, - Flags: []cli.Flag{ - validFlag, - }, - } - - ibcCmd = cli.Command{ - Name: "ibc", - Usage: "Send a transaction to the interblockchain (ibc) plugin", - Flags: []cli.Flag{ - nodeFlag, - chainIDFlag, - - fromFlag, - - amountFlag, - coinFlag, - gasFlag, - feeFlag, - seqFlag, - - nameFlag, - dataFlag, - }, - Subcommands: []cli.Command{ - ibcRegisterTxCmd, - ibcUpdateTxCmd, - ibcPacketTxCmd, - }, - } - - ibcRegisterTxCmd = cli.Command{ - Name: "register", - Usage: "Register a blockchain via IBC", - Action: func(c *cli.Context) error { - return cmdIBCRegisterTx(c) - }, - Flags: []cli.Flag{ - ibcChainIDFlag, - ibcGenesisFlag, - }, - } - - ibcUpdateTxCmd = cli.Command{ - Name: "update", - Usage: "Update the latest state of a blockchain via IBC", - Action: func(c *cli.Context) error { - return cmdIBCUpdateTx(c) - }, - Flags: []cli.Flag{ - ibcHeaderFlag, - ibcCommitFlag, - }, - } - - ibcPacketTxCmd = cli.Command{ - Name: "packet", - Usage: "Send a new packet via IBC", - Flags: []cli.Flag{ - // - }, - Subcommands: []cli.Command{ - ibcPacketCreateTx, - ibcPacketPostTx, - }, - } - - ibcPacketCreateTx = cli.Command{ - Name: "create", - Usage: "Create an egress IBC packet", - Action: func(c *cli.Context) error { - return cmdIBCPacketCreateTx(c) - }, - Flags: []cli.Flag{ - ibcFromFlag, - ibcToFlag, - ibcTypeFlag, - ibcPayloadFlag, - ibcSequenceFlag, - }, - } - - ibcPacketPostTx = cli.Command{ - Name: "post", - Usage: "Deliver an IBC packet to another chain", - Action: func(c *cli.Context) error { - return cmdIBCPacketPostTx(c) - }, - Flags: []cli.Flag{ - ibcFromFlag, - ibcHeightFlag, - ibcPacketFlag, - ibcProofFlag, - }, - } - - queryCmd = cli.Command{ - Name: "query", - Usage: "Query the merkle tree", - ArgsUsage: "", - Action: func(c *cli.Context) error { - return cmdQuery(c) - }, - Flags: []cli.Flag{ - nodeFlag, - }, - } - - accountCmd = cli.Command{ - Name: "account", - Usage: "Get details of an account", - ArgsUsage: "
", - Action: func(c *cli.Context) error { - return cmdAccount(c) - }, - Flags: []cli.Flag{ - nodeFlag, - }, - } - - blockCmd = cli.Command{ - Name: "block", - Usage: "Get the header and commit of a block", - ArgsUsage: "", - Action: func(c *cli.Context) error { - return cmdBlock(c) - }, - Flags: []cli.Flag{ - nodeFlag, - }, - } - - verifyCmd = cli.Command{ - Name: "verify", - Usage: "Verify the IAVL proof", - Action: func(c *cli.Context) error { - return cmdVerify(c) - }, - Flags: []cli.Flag{ - proofFlag, - keyFlag, - valueFlag, - rootFlag, - }, - } -) diff --git a/cmd/basecoin/flags.go b/cmd/basecoin/commands/flags.go similarity index 99% rename from cmd/basecoin/flags.go rename to cmd/basecoin/commands/flags.go index c724d8be48..622aa61b9e 100644 --- a/cmd/basecoin/flags.go +++ b/cmd/basecoin/commands/flags.go @@ -1,4 +1,4 @@ -package main +package commands import ( "github.com/urfave/cli" diff --git a/cmd/basecoin/ibc.go b/cmd/basecoin/commands/ibc.go similarity index 70% rename from cmd/basecoin/ibc.go rename to cmd/basecoin/commands/ibc.go index 83d27d0bfd..23511c5151 100644 --- a/cmd/basecoin/ibc.go +++ b/cmd/basecoin/commands/ibc.go @@ -1,4 +1,4 @@ -package main +package commands import ( "encoding/hex" @@ -16,6 +16,98 @@ import ( tmtypes "github.com/tendermint/tendermint/types" ) +var ( + IbcCmd = cli.Command{ + Name: "ibc", + Usage: "Send a transaction to the interblockchain (ibc) plugin", + Flags: []cli.Flag{ + nodeFlag, + chainIDFlag, + + fromFlag, + + amountFlag, + coinFlag, + gasFlag, + feeFlag, + seqFlag, + + nameFlag, + dataFlag, + }, + Subcommands: []cli.Command{ + IbcRegisterTxCmd, + IbcUpdateTxCmd, + IbcPacketTxCmd, + }, + } + + IbcRegisterTxCmd = cli.Command{ + Name: "register", + Usage: "Register a blockchain via IBC", + Action: func(c *cli.Context) error { + return cmdIBCRegisterTx(c) + }, + Flags: []cli.Flag{ + ibcChainIDFlag, + ibcGenesisFlag, + }, + } + + IbcUpdateTxCmd = cli.Command{ + Name: "update", + Usage: "Update the latest state of a blockchain via IBC", + Action: func(c *cli.Context) error { + return cmdIBCUpdateTx(c) + }, + Flags: []cli.Flag{ + ibcHeaderFlag, + ibcCommitFlag, + }, + } + + IbcPacketTxCmd = cli.Command{ + Name: "packet", + Usage: "Send a new packet via IBC", + Flags: []cli.Flag{ + // + }, + Subcommands: []cli.Command{ + IbcPacketCreateTx, + IbcPacketPostTx, + }, + } + + IbcPacketCreateTx = cli.Command{ + Name: "create", + Usage: "Create an egress IBC packet", + Action: func(c *cli.Context) error { + return cmdIBCPacketCreateTx(c) + }, + Flags: []cli.Flag{ + ibcFromFlag, + ibcToFlag, + ibcTypeFlag, + ibcPayloadFlag, + ibcSequenceFlag, + }, + } + + IbcPacketPostTx = cli.Command{ + Name: "post", + Usage: "Deliver an IBC packet to another chain", + Action: func(c *cli.Context) error { + return cmdIBCPacketPostTx(c) + }, + Flags: []cli.Flag{ + ibcFromFlag, + ibcHeightFlag, + ibcPacketFlag, + ibcProofFlag, + }, + } +) + func cmdIBCRegisterTx(c *cli.Context) error { chainID := c.String("chain_id") genesisFile := c.String("genesis") diff --git a/cmd/basecoin/query.go b/cmd/basecoin/commands/query.go similarity index 79% rename from cmd/basecoin/query.go rename to cmd/basecoin/commands/query.go index 01b293d118..a2b22a0f37 100644 --- a/cmd/basecoin/query.go +++ b/cmd/basecoin/commands/query.go @@ -1,4 +1,4 @@ -package main +package commands import ( "encoding/hex" @@ -14,6 +14,58 @@ import ( tmtypes "github.com/tendermint/tendermint/types" ) +var ( + QueryCmd = cli.Command{ + Name: "query", + Usage: "Query the merkle tree", + ArgsUsage: "", + Action: func(c *cli.Context) error { + return cmdQuery(c) + }, + Flags: []cli.Flag{ + nodeFlag, + }, + } + + AccountCmd = cli.Command{ + Name: "account", + Usage: "Get details of an account", + ArgsUsage: "
", + Action: func(c *cli.Context) error { + return cmdAccount(c) + }, + Flags: []cli.Flag{ + nodeFlag, + }, + } + + BlockCmd = cli.Command{ + Name: "block", + Usage: "Get the header and commit of a block", + ArgsUsage: "", + Action: func(c *cli.Context) error { + return cmdBlock(c) + }, + Flags: []cli.Flag{ + nodeFlag, + }, + } + + VerifyCmd = cli.Command{ + Name: "verify", + Usage: "Verify the IAVL proof", + Action: func(c *cli.Context) error { + return cmdVerify(c) + }, + Flags: []cli.Flag{ + proofFlag, + keyFlag, + valueFlag, + rootFlag, + }, + } +) + func cmdQuery(c *cli.Context) error { if len(c.Args()) != 1 { return errors.New("query command requires an argument ([key])") diff --git a/cmd/basecoin/start.go b/cmd/basecoin/commands/start.go similarity index 89% rename from cmd/basecoin/start.go rename to cmd/basecoin/commands/start.go index 4a68a0c175..f442557a7a 100644 --- a/cmd/basecoin/start.go +++ b/cmd/basecoin/commands/start.go @@ -1,4 +1,4 @@ -package main +package commands import ( "errors" @@ -27,6 +27,24 @@ var config cfg.Config const EyesCacheSize = 10000 +var StartCmd = cli.Command{ + Name: "start", + Usage: "Start basecoin", + ArgsUsage: "", + Action: func(c *cli.Context) error { + return cmdStart(c) + }, + Flags: []cli.Flag{ + addrFlag, + eyesFlag, + dirFlag, + inProcTMFlag, + chainIDFlag, + ibcPluginFlag, + counterPluginFlag, + }, +} + func cmdStart(c *cli.Context) error { // Connect to MerkleEyes diff --git a/cmd/basecoin/tx.go b/cmd/basecoin/commands/tx.go similarity index 82% rename from cmd/basecoin/tx.go rename to cmd/basecoin/commands/tx.go index 3057572086..5c37ecaee2 100644 --- a/cmd/basecoin/tx.go +++ b/cmd/basecoin/commands/tx.go @@ -1,4 +1,4 @@ -package main +package commands import ( "encoding/hex" @@ -17,6 +17,69 @@ import ( tmtypes "github.com/tendermint/tendermint/types" ) +var ( + SendTxCmd = cli.Command{ + Name: "sendtx", + Usage: "Broadcast a basecoin SendTx", + ArgsUsage: "", + Action: func(c *cli.Context) error { + return cmdSendTx(c) + }, + Flags: []cli.Flag{ + nodeFlag, + chainIDFlag, + + fromFlag, + + amountFlag, + coinFlag, + gasFlag, + feeFlag, + seqFlag, + + toFlag, + }, + } + + AppTxCmd = cli.Command{ + Name: "apptx", + Usage: "Broadcast a basecoin AppTx", + ArgsUsage: "", + Action: func(c *cli.Context) error { + return cmdAppTx(c) + }, + Flags: []cli.Flag{ + nodeFlag, + chainIDFlag, + + fromFlag, + + amountFlag, + coinFlag, + gasFlag, + feeFlag, + seqFlag, + + nameFlag, + dataFlag, + }, + Subcommands: []cli.Command{ + CounterTxCmd, + }, + } + + CounterTxCmd = cli.Command{ + Name: "counter", + Usage: "Craft a transaction to the counter plugin", + Action: func(c *cli.Context) error { + return cmdCounterTx(c) + }, + Flags: []cli.Flag{ + validFlag, + }, + } +) + func cmdSendTx(c *cli.Context) error { toHex := c.String("to") fromFile := c.String("from") diff --git a/cmd/basecoin/utils.go b/cmd/basecoin/commands/utils.go similarity index 99% rename from cmd/basecoin/utils.go rename to cmd/basecoin/commands/utils.go index b005f3306c..db9f2821c4 100644 --- a/cmd/basecoin/utils.go +++ b/cmd/basecoin/commands/utils.go @@ -1,4 +1,4 @@ -package main +package commands import ( "encoding/hex" diff --git a/cmd/basecoin/main.go b/cmd/basecoin/main.go index 31dcb83525..536dc61879 100644 --- a/cmd/basecoin/main.go +++ b/cmd/basecoin/main.go @@ -3,6 +3,7 @@ package main import ( "os" + "github.com/tendermint/basecoin/cmd/basecoin/commands" "github.com/urfave/cli" ) @@ -12,14 +13,14 @@ func main() { app.Usage = "basecoin [command] [args...]" app.Version = "0.1.0" app.Commands = []cli.Command{ - startCmd, - sendTxCmd, - appTxCmd, - ibcCmd, - queryCmd, - verifyCmd, - blockCmd, - accountCmd, + commands.StartCmd, + commands.SendTxCmd, + commands.AppTxCmd, + commands.IbcCmd, + commands.QueryCmd, + commands.VerifyCmd, + commands.BlockCmd, + commands.AccountCmd, } app.Run(os.Args) } From cb4f6a4bca54d20e9e5b1efdf9959a4313f1243c Mon Sep 17 00:00:00 2001 From: Ethan Frey Date: Mon, 30 Jan 2017 15:27:02 +0100 Subject: [PATCH 2/5] Made all flag names public --- cmd/basecoin/commands/flags.go | 68 +++++++++++++++++----------------- cmd/basecoin/commands/ibc.go | 46 +++++++++++------------ cmd/basecoin/commands/query.go | 14 +++---- cmd/basecoin/commands/start.go | 14 +++---- cmd/basecoin/commands/tx.go | 40 ++++++++++---------- 5 files changed, 91 insertions(+), 91 deletions(-) diff --git a/cmd/basecoin/commands/flags.go b/cmd/basecoin/commands/flags.go index 622aa61b9e..6bbf69e7bb 100644 --- a/cmd/basecoin/commands/flags.go +++ b/cmd/basecoin/commands/flags.go @@ -6,13 +6,13 @@ import ( // start flags var ( - addrFlag = cli.StringFlag{ + AddrFlag = cli.StringFlag{ Name: "address", Value: "tcp://0.0.0.0:46658", Usage: "Listen address", } - eyesFlag = cli.StringFlag{ + EyesFlag = cli.StringFlag{ Name: "eyes", Value: "local", Usage: "MerkleEyes address, or 'local' for embedded", @@ -21,23 +21,23 @@ var ( // TODO: move to config file // eyesCacheSizePtr := flag.Int("eyes-cache-size", 10000, "MerkleEyes db cache size, for embedded") - dirFlag = cli.StringFlag{ + DirFlag = cli.StringFlag{ Name: "dir", Value: ".", Usage: "Root directory", } - inProcTMFlag = cli.BoolFlag{ + InProcTMFlag = cli.BoolFlag{ Name: "in-proc", Usage: "Run Tendermint in-process with the App", } - ibcPluginFlag = cli.BoolFlag{ + IbcPluginFlag = cli.BoolFlag{ Name: "ibc-plugin", Usage: "Enable the ibc plugin", } - counterPluginFlag = cli.BoolFlag{ + CounterPluginFlag = cli.BoolFlag{ Name: "counter-plugin", Usage: "Enable the counter plugin", } @@ -46,73 +46,73 @@ var ( // tx flags var ( - nodeFlag = cli.StringFlag{ + NodeFlag = cli.StringFlag{ Name: "node", Value: "tcp://localhost:46657", Usage: "Tendermint RPC address", } - toFlag = cli.StringFlag{ + ToFlag = cli.StringFlag{ Name: "to", Value: "", Usage: "Destination address for the transaction", } - amountFlag = cli.IntFlag{ + AmountFlag = cli.IntFlag{ Name: "amount", Value: 0, Usage: "Amount of coins to send in the transaction", } - fromFlag = cli.StringFlag{ + FromFlag = cli.StringFlag{ Name: "from", Value: "priv_validator.json", Usage: "Path to a private key to sign the transaction", } - seqFlag = cli.IntFlag{ + SeqFlag = cli.IntFlag{ Name: "sequence", Value: 0, Usage: "Sequence number for the account", } - coinFlag = cli.StringFlag{ + CoinFlag = cli.StringFlag{ Name: "coin", Value: "blank", Usage: "Specify a coin denomination", } - gasFlag = cli.IntFlag{ + GasFlag = cli.IntFlag{ Name: "gas", Value: 0, Usage: "The amount of gas for the transaction", } - feeFlag = cli.IntFlag{ + FeeFlag = cli.IntFlag{ Name: "fee", Value: 0, Usage: "The transaction fee", } - dataFlag = cli.StringFlag{ + DataFlag = cli.StringFlag{ Name: "data", Value: "", Usage: "Data to send with the transaction", } - nameFlag = cli.StringFlag{ + NameFlag = cli.StringFlag{ Name: "name", Value: "", Usage: "Plugin to send the transaction to", } - chainIDFlag = cli.StringFlag{ + ChainIDFlag = cli.StringFlag{ Name: "chain_id", Value: "test_chain_id", Usage: "ID of the chain for replay protection", } - validFlag = cli.BoolFlag{ + ValidFlag = cli.BoolFlag{ Name: "valid", Usage: "Set valid field in CounterTx", } @@ -120,73 +120,73 @@ var ( // ibc flags var ( - ibcChainIDFlag = cli.StringFlag{ + IbcChainIDFlag = cli.StringFlag{ Name: "chain_id", Usage: "ChainID for the new blockchain", Value: "", } - ibcGenesisFlag = cli.StringFlag{ + IbcGenesisFlag = cli.StringFlag{ Name: "genesis", Usage: "Genesis file for the new blockchain", Value: "", } - ibcHeaderFlag = cli.StringFlag{ + IbcHeaderFlag = cli.StringFlag{ Name: "header", Usage: "Block header for an ibc update", Value: "", } - ibcCommitFlag = cli.StringFlag{ + IbcCommitFlag = cli.StringFlag{ Name: "commit", Usage: "Block commit for an ibc update", Value: "", } - ibcFromFlag = cli.StringFlag{ + IbcFromFlag = cli.StringFlag{ Name: "from", Usage: "Source ChainID", Value: "", } - ibcToFlag = cli.StringFlag{ + IbcToFlag = cli.StringFlag{ Name: "to", Usage: "Destination ChainID", Value: "", } - ibcTypeFlag = cli.StringFlag{ + IbcTypeFlag = cli.StringFlag{ Name: "type", Usage: "IBC packet type (eg. coin)", Value: "", } - ibcPayloadFlag = cli.StringFlag{ + IbcPayloadFlag = cli.StringFlag{ Name: "payload", Usage: "IBC packet payload", Value: "", } - ibcPacketFlag = cli.StringFlag{ + IbcPacketFlag = cli.StringFlag{ Name: "packet", Usage: "hex-encoded IBC packet", Value: "", } - ibcProofFlag = cli.StringFlag{ + IbcProofFlag = cli.StringFlag{ Name: "proof", Usage: "hex-encoded proof of IBC packet from source chain", Value: "", } - ibcSequenceFlag = cli.IntFlag{ + IbcSequenceFlag = cli.IntFlag{ Name: "sequence", Usage: "sequence number for IBC packet", Value: 0, } - ibcHeightFlag = cli.IntFlag{ + IbcHeightFlag = cli.IntFlag{ Name: "height", Usage: "Height the packet became egress in source chain", Value: 0, @@ -195,25 +195,25 @@ var ( // proof flags var ( - proofFlag = cli.StringFlag{ + ProofFlag = cli.StringFlag{ Name: "proof", Usage: "hex-encoded IAVL proof", Value: "", } - keyFlag = cli.StringFlag{ + KeyFlag = cli.StringFlag{ Name: "key", Usage: "key to the IAVL tree", Value: "", } - valueFlag = cli.StringFlag{ + ValueFlag = cli.StringFlag{ Name: "value", Usage: "value in the IAVL tree", Value: "", } - rootFlag = cli.StringFlag{ + RootFlag = cli.StringFlag{ Name: "root", Usage: "root hash of the IAVL tree", Value: "", diff --git a/cmd/basecoin/commands/ibc.go b/cmd/basecoin/commands/ibc.go index 23511c5151..68ad4feba9 100644 --- a/cmd/basecoin/commands/ibc.go +++ b/cmd/basecoin/commands/ibc.go @@ -21,19 +21,19 @@ var ( Name: "ibc", Usage: "Send a transaction to the interblockchain (ibc) plugin", Flags: []cli.Flag{ - nodeFlag, - chainIDFlag, + NodeFlag, + ChainIDFlag, - fromFlag, + FromFlag, - amountFlag, - coinFlag, - gasFlag, - feeFlag, - seqFlag, + AmountFlag, + CoinFlag, + GasFlag, + FeeFlag, + SeqFlag, - nameFlag, - dataFlag, + NameFlag, + DataFlag, }, Subcommands: []cli.Command{ IbcRegisterTxCmd, @@ -49,8 +49,8 @@ var ( return cmdIBCRegisterTx(c) }, Flags: []cli.Flag{ - ibcChainIDFlag, - ibcGenesisFlag, + IbcChainIDFlag, + IbcGenesisFlag, }, } @@ -61,8 +61,8 @@ var ( return cmdIBCUpdateTx(c) }, Flags: []cli.Flag{ - ibcHeaderFlag, - ibcCommitFlag, + IbcHeaderFlag, + IbcCommitFlag, }, } @@ -85,11 +85,11 @@ var ( return cmdIBCPacketCreateTx(c) }, Flags: []cli.Flag{ - ibcFromFlag, - ibcToFlag, - ibcTypeFlag, - ibcPayloadFlag, - ibcSequenceFlag, + IbcFromFlag, + IbcToFlag, + IbcTypeFlag, + IbcPayloadFlag, + IbcSequenceFlag, }, } @@ -100,10 +100,10 @@ var ( return cmdIBCPacketPostTx(c) }, Flags: []cli.Flag{ - ibcFromFlag, - ibcHeightFlag, - ibcPacketFlag, - ibcProofFlag, + IbcFromFlag, + IbcHeightFlag, + IbcPacketFlag, + IbcProofFlag, }, } ) diff --git a/cmd/basecoin/commands/query.go b/cmd/basecoin/commands/query.go index a2b22a0f37..3c12e04107 100644 --- a/cmd/basecoin/commands/query.go +++ b/cmd/basecoin/commands/query.go @@ -23,7 +23,7 @@ var ( return cmdQuery(c) }, Flags: []cli.Flag{ - nodeFlag, + NodeFlag, }, } @@ -35,7 +35,7 @@ var ( return cmdAccount(c) }, Flags: []cli.Flag{ - nodeFlag, + NodeFlag, }, } @@ -47,7 +47,7 @@ var ( return cmdBlock(c) }, Flags: []cli.Flag{ - nodeFlag, + NodeFlag, }, } @@ -58,10 +58,10 @@ var ( return cmdVerify(c) }, Flags: []cli.Flag{ - proofFlag, - keyFlag, - valueFlag, - rootFlag, + ProofFlag, + KeyFlag, + ValueFlag, + RootFlag, }, } ) diff --git a/cmd/basecoin/commands/start.go b/cmd/basecoin/commands/start.go index f442557a7a..52238f797e 100644 --- a/cmd/basecoin/commands/start.go +++ b/cmd/basecoin/commands/start.go @@ -35,13 +35,13 @@ var StartCmd = cli.Command{ return cmdStart(c) }, Flags: []cli.Flag{ - addrFlag, - eyesFlag, - dirFlag, - inProcTMFlag, - chainIDFlag, - ibcPluginFlag, - counterPluginFlag, + AddrFlag, + EyesFlag, + DirFlag, + InProcTMFlag, + ChainIDFlag, + IbcPluginFlag, + CounterPluginFlag, }, } diff --git a/cmd/basecoin/commands/tx.go b/cmd/basecoin/commands/tx.go index 5c37ecaee2..239d2c842d 100644 --- a/cmd/basecoin/commands/tx.go +++ b/cmd/basecoin/commands/tx.go @@ -26,18 +26,18 @@ var ( return cmdSendTx(c) }, Flags: []cli.Flag{ - nodeFlag, - chainIDFlag, + NodeFlag, + ChainIDFlag, - fromFlag, + FromFlag, - amountFlag, - coinFlag, - gasFlag, - feeFlag, - seqFlag, + AmountFlag, + CoinFlag, + GasFlag, + FeeFlag, + SeqFlag, - toFlag, + ToFlag, }, } @@ -49,19 +49,19 @@ var ( return cmdAppTx(c) }, Flags: []cli.Flag{ - nodeFlag, - chainIDFlag, + NodeFlag, + ChainIDFlag, - fromFlag, + FromFlag, - amountFlag, - coinFlag, - gasFlag, - feeFlag, - seqFlag, + AmountFlag, + CoinFlag, + GasFlag, + FeeFlag, + SeqFlag, - nameFlag, - dataFlag, + NameFlag, + DataFlag, }, Subcommands: []cli.Command{ CounterTxCmd, @@ -75,7 +75,7 @@ var ( return cmdCounterTx(c) }, Flags: []cli.Flag{ - validFlag, + ValidFlag, }, } ) From 3fbd282f2ed2c1091750ada28f9ace52e4a0e8c6 Mon Sep 17 00:00:00 2001 From: Ethan Frey Date: Mon, 30 Jan 2017 15:56:47 +0100 Subject: [PATCH 3/5] Allow registering plugin subcommand to apptx --- cmd/basecoin/commands/counter.go | 49 ++++++++++++++++++++++++++++++++ cmd/basecoin/commands/ibc.go | 8 +++--- cmd/basecoin/commands/tx.go | 49 +++++++------------------------- 3 files changed, 63 insertions(+), 43 deletions(-) create mode 100644 cmd/basecoin/commands/counter.go diff --git a/cmd/basecoin/commands/counter.go b/cmd/basecoin/commands/counter.go new file mode 100644 index 0000000000..d05d08c424 --- /dev/null +++ b/cmd/basecoin/commands/counter.go @@ -0,0 +1,49 @@ +package commands + +import ( + "fmt" + + "github.com/tendermint/basecoin/plugins/counter" + "github.com/tendermint/basecoin/types" + wire "github.com/tendermint/go-wire" + "github.com/urfave/cli" +) + +var ( + CounterTxCmd = cli.Command{ + Name: "counter", + Usage: "Craft a transaction to the counter plugin", + Action: func(c *cli.Context) error { + return cmdCounterTx(c) + }, + Flags: []cli.Flag{ + ValidFlag, + }, + } +) + +func init() { + RegisterPlugin(CounterTxCmd) +} + +func cmdCounterTx(c *cli.Context) error { + valid := c.Bool("valid") + parent := c.Parent() + + counterTx := counter.CounterTx{ + Valid: valid, + Fee: types.Coins{ + { + Denom: parent.String("coin"), + Amount: int64(parent.Int("fee")), + }, + }, + } + + fmt.Println("CounterTx:", string(wire.JSONBytes(counterTx))) + + data := wire.BinaryBytes(counterTx) + name := "counter" + + return AppTx(parent, name, data) +} diff --git a/cmd/basecoin/commands/ibc.go b/cmd/basecoin/commands/ibc.go index 68ad4feba9..bdb7ccc0e7 100644 --- a/cmd/basecoin/commands/ibc.go +++ b/cmd/basecoin/commands/ibc.go @@ -132,7 +132,7 @@ func cmdIBCRegisterTx(c *cli.Context) error { }{ibcTx})) name := "IBC" - return appTx(parent, name, data) + return AppTx(parent, name, data) } func cmdIBCUpdateTx(c *cli.Context) error { @@ -167,7 +167,7 @@ func cmdIBCUpdateTx(c *cli.Context) error { }{ibcTx})) name := "IBC" - return appTx(c.Parent(), name, data) + return AppTx(c.Parent(), name, data) } func cmdIBCPacketCreateTx(c *cli.Context) error { @@ -200,7 +200,7 @@ func cmdIBCPacketCreateTx(c *cli.Context) error { ibc.IBCTx `json:"unwrap"` }{ibcTx})) - return appTx(c.Parent().Parent(), "IBC", data) + return AppTx(c.Parent().Parent(), "IBC", data) } func cmdIBCPacketPostTx(c *cli.Context) error { @@ -238,7 +238,7 @@ func cmdIBCPacketPostTx(c *cli.Context) error { ibc.IBCTx `json:"unwrap"` }{ibcTx})) - return appTx(c.Parent().Parent(), "IBC", data) + return AppTx(c.Parent().Parent(), "IBC", data) } func getIBCSequence(c *cli.Context) (uint64, error) { diff --git a/cmd/basecoin/commands/tx.go b/cmd/basecoin/commands/tx.go index 239d2c842d..745c450323 100644 --- a/cmd/basecoin/commands/tx.go +++ b/cmd/basecoin/commands/tx.go @@ -7,7 +7,6 @@ import ( "github.com/urfave/cli" - "github.com/tendermint/basecoin/plugins/counter" "github.com/tendermint/basecoin/types" cmn "github.com/tendermint/go-common" @@ -63,23 +62,17 @@ var ( NameFlag, DataFlag, }, - Subcommands: []cli.Command{ - CounterTxCmd, - }, - } - - CounterTxCmd = cli.Command{ - Name: "counter", - Usage: "Craft a transaction to the counter plugin", - Action: func(c *cli.Context) error { - return cmdCounterTx(c) - }, - Flags: []cli.Flag{ - ValidFlag, - }, + // Subcommands are dynamically registered with plugins as needed + Subcommands: []cli.Command{}, } ) +// RegisterPlugin is used to add another subcommand and create a custom +// apptx encoding. Look at counter.go for an example +func RegisterPlugin(cmd cli.Command) { + AppTxCmd.Subcommands = append(AppTxCmd.Subcommands, cmd) +} + func cmdSendTx(c *cli.Context) error { toHex := c.String("to") fromFile := c.String("from") @@ -136,10 +129,10 @@ func cmdAppTx(c *cli.Context) error { data, _ = hex.DecodeString(dataString) } name := c.String("name") - return appTx(c, name, data) + return AppTx(c, name, data) } -func appTx(c *cli.Context, name string, data []byte) error { +func AppTx(c *cli.Context, name string, data []byte) error { fromFile := c.String("from") amount := int64(c.Int("amount")) coin := c.String("coin") @@ -174,28 +167,6 @@ func appTx(c *cli.Context, name string, data []byte) error { return nil } -func cmdCounterTx(c *cli.Context) error { - valid := c.Bool("valid") - parent := c.Parent() - - counterTx := counter.CounterTx{ - Valid: valid, - Fee: types.Coins{ - { - Denom: parent.String("coin"), - Amount: int64(parent.Int("fee")), - }, - }, - } - - fmt.Println("CounterTx:", string(wire.JSONBytes(counterTx))) - - data := wire.BinaryBytes(counterTx) - name := "counter" - - return appTx(parent, name, data) -} - // broadcast the transaction to tendermint func broadcastTx(c *cli.Context, tx types.Tx) ([]byte, error) { tmResult := new(ctypes.TMResult) From 53786ab4ce1fbe36d09cdedc82808b91b772cc3e Mon Sep 17 00:00:00 2001 From: Ethan Frey Date: Mon, 30 Jan 2017 15:57:37 +0100 Subject: [PATCH 4/5] Remove obsolete paytovote cmd --- cmd/paytovote/main.go | 53 ------------------------------------------- 1 file changed, 53 deletions(-) delete mode 100644 cmd/paytovote/main.go diff --git a/cmd/paytovote/main.go b/cmd/paytovote/main.go deleted file mode 100644 index 7c7715d992..0000000000 --- a/cmd/paytovote/main.go +++ /dev/null @@ -1,53 +0,0 @@ -package main - -import ( - "flag" - - "github.com/tendermint/abci/server" - "github.com/tendermint/basecoin/app" - "github.com/tendermint/basecoin/plugins/counter" - cmn "github.com/tendermint/go-common" - eyes "github.com/tendermint/merkleeyes/client" -) - -func main() { - addrPtr := flag.String("address", "tcp://0.0.0.0:46658", "Listen address") - eyesPtr := flag.String("eyes", "local", "MerkleEyes address, or 'local' for embedded") - genFilePath := flag.String("genesis", "", "Genesis file, if any") - flag.Parse() - - // Connect to MerkleEyes - eyesCli, err := eyes.NewClient(*eyesPtr) - if err != nil { - cmn.Exit("connect to MerkleEyes: " + err.Error()) - } - - // Create Basecoin app - app := app.NewBasecoin(eyesCli) - - // add plugins - // TODO: add some more, like the cool voting app - counter := counter.New("counter") - app.RegisterPlugin(counter) - - // If genesis file was specified, set key-value options - if *genFilePath != "" { - err := app.LoadGenesis(*genFilePath) - if err != nil { - cmn.Exit(cmn.Fmt("%+v", err)) - } - } - - // Start the listener - svr, err := server.NewServer(*addrPtr, "socket", app) - if err != nil { - cmn.Exit("create listener: " + err.Error()) - } - - // Wait forever - cmn.TrapSignal(func() { - // Cleanup - svr.Stop() - }) - -} From 15904ea7a72ab5288db8e7b6dc6b50d033f54685 Mon Sep 17 00:00:00 2001 From: Ethan Frey Date: Mon, 30 Jan 2017 17:16:00 +0100 Subject: [PATCH 5/5] cmd start allows plugin registration --- cmd/basecoin/commands/counter.go | 9 ++++++++- cmd/basecoin/commands/flags.go | 5 ----- cmd/basecoin/commands/ibc.go | 10 +++++----- cmd/basecoin/commands/query.go | 12 ++++++------ cmd/basecoin/commands/start.go | 28 +++++++++++++++++++++------- cmd/basecoin/commands/tx.go | 6 +++--- cmd/basecoin/commands/utils.go | 2 +- 7 files changed, 44 insertions(+), 28 deletions(-) diff --git a/cmd/basecoin/commands/counter.go b/cmd/basecoin/commands/counter.go index d05d08c424..83f98218cf 100644 --- a/cmd/basecoin/commands/counter.go +++ b/cmd/basecoin/commands/counter.go @@ -20,10 +20,17 @@ var ( ValidFlag, }, } + + CounterPluginFlag = cli.BoolFlag{ + Name: "counter-plugin", + Usage: "Enable the counter plugin", + } ) func init() { - RegisterPlugin(CounterTxCmd) + RegisterTxPlugin(CounterTxCmd) + RegisterStartPlugin(CounterPluginFlag, + func() types.Plugin { return counter.New("counter") }) } func cmdCounterTx(c *cli.Context) error { diff --git a/cmd/basecoin/commands/flags.go b/cmd/basecoin/commands/flags.go index 6bbf69e7bb..0ca74962ce 100644 --- a/cmd/basecoin/commands/flags.go +++ b/cmd/basecoin/commands/flags.go @@ -36,11 +36,6 @@ var ( Name: "ibc-plugin", Usage: "Enable the ibc plugin", } - - CounterPluginFlag = cli.BoolFlag{ - Name: "counter-plugin", - Usage: "Enable the counter plugin", - } ) // tx flags diff --git a/cmd/basecoin/commands/ibc.go b/cmd/basecoin/commands/ibc.go index bdb7ccc0e7..39f5aef8d4 100644 --- a/cmd/basecoin/commands/ibc.go +++ b/cmd/basecoin/commands/ibc.go @@ -136,11 +136,11 @@ func cmdIBCRegisterTx(c *cli.Context) error { } func cmdIBCUpdateTx(c *cli.Context) error { - headerBytes, err := hex.DecodeString(stripHex(c.String("header"))) + headerBytes, err := hex.DecodeString(StripHex(c.String("header"))) if err != nil { return errors.New(cmn.Fmt("Header (%v) is invalid hex: %v", c.String("header"), err)) } - commitBytes, err := hex.DecodeString(stripHex(c.String("commit"))) + commitBytes, err := hex.DecodeString(StripHex(c.String("commit"))) if err != nil { return errors.New(cmn.Fmt("Commit (%v) is invalid hex: %v", c.String("commit"), err)) } @@ -174,7 +174,7 @@ func cmdIBCPacketCreateTx(c *cli.Context) error { fromChain, toChain := c.String("from"), c.String("to") packetType := c.String("type") - payloadBytes, err := hex.DecodeString(stripHex(c.String("payload"))) + payloadBytes, err := hex.DecodeString(StripHex(c.String("payload"))) if err != nil { return errors.New(cmn.Fmt("Payload (%v) is invalid hex: %v", c.String("payload"), err)) } @@ -206,11 +206,11 @@ func cmdIBCPacketCreateTx(c *cli.Context) error { func cmdIBCPacketPostTx(c *cli.Context) error { fromChain, fromHeight := c.String("from"), c.Int("height") - packetBytes, err := hex.DecodeString(stripHex(c.String("packet"))) + packetBytes, err := hex.DecodeString(StripHex(c.String("packet"))) if err != nil { return errors.New(cmn.Fmt("Packet (%v) is invalid hex: %v", c.String("packet"), err)) } - proofBytes, err := hex.DecodeString(stripHex(c.String("proof"))) + proofBytes, err := hex.DecodeString(StripHex(c.String("proof"))) if err != nil { return errors.New(cmn.Fmt("Proof (%v) is invalid hex: %v", c.String("proof"), err)) } diff --git a/cmd/basecoin/commands/query.go b/cmd/basecoin/commands/query.go index 3c12e04107..4237075267 100644 --- a/cmd/basecoin/commands/query.go +++ b/cmd/basecoin/commands/query.go @@ -75,7 +75,7 @@ func cmdQuery(c *cli.Context) error { if isHex(keyString) { // convert key to bytes var err error - key, err = hex.DecodeString(stripHex(keyString)) + key, err = hex.DecodeString(StripHex(keyString)) if err != nil { return errors.New(cmn.Fmt("Query key (%v) is invalid hex: %v", keyString, err)) } @@ -107,7 +107,7 @@ func cmdAccount(c *cli.Context) error { if len(c.Args()) != 1 { return errors.New("account command requires an argument ([address])") } - addrHex := stripHex(c.Args()[0]) + addrHex := StripHex(c.Args()[0]) // convert destination address to bytes addr, err := hex.DecodeString(addrHex) @@ -175,7 +175,7 @@ func cmdVerify(c *cli.Context) error { var err error key := []byte(keyString) if isHex(keyString) { - key, err = hex.DecodeString(stripHex(keyString)) + key, err = hex.DecodeString(StripHex(keyString)) if err != nil { return errors.New(cmn.Fmt("Key (%v) is invalid hex: %v", keyString, err)) } @@ -183,18 +183,18 @@ func cmdVerify(c *cli.Context) error { value := []byte(valueString) if isHex(valueString) { - value, err = hex.DecodeString(stripHex(valueString)) + value, err = hex.DecodeString(StripHex(valueString)) if err != nil { return errors.New(cmn.Fmt("Value (%v) is invalid hex: %v", valueString, err)) } } - root, err := hex.DecodeString(stripHex(c.String("root"))) + root, err := hex.DecodeString(StripHex(c.String("root"))) if err != nil { return errors.New(cmn.Fmt("Root (%v) is invalid hex: %v", c.String("root"), err)) } - proofBytes, err := hex.DecodeString(stripHex(c.String("proof"))) + proofBytes, err := hex.DecodeString(StripHex(c.String("proof"))) if err != nil { return errors.New(cmn.Fmt("Proof (%v) is invalid hex: %v", c.String("proof"), err)) } diff --git a/cmd/basecoin/commands/start.go b/cmd/basecoin/commands/start.go index 52238f797e..90e701afd8 100644 --- a/cmd/basecoin/commands/start.go +++ b/cmd/basecoin/commands/start.go @@ -19,8 +19,8 @@ import ( tmtypes "github.com/tendermint/tendermint/types" "github.com/tendermint/basecoin/app" - "github.com/tendermint/basecoin/plugins/counter" "github.com/tendermint/basecoin/plugins/ibc" + "github.com/tendermint/basecoin/types" ) var config cfg.Config @@ -41,10 +41,23 @@ var StartCmd = cli.Command{ InProcTMFlag, ChainIDFlag, IbcPluginFlag, - CounterPluginFlag, + // CounterPluginFlag, }, } +type plugin struct { + name string + init func() types.Plugin +} + +var plugins = []plugin{} + +// RegisterStartPlugin is used to add another +func RegisterStartPlugin(flag cli.BoolFlag, init func() types.Plugin) { + StartCmd.Flags = append(StartCmd.Flags, flag) + plugins = append(plugins, plugin{name: flag.GetName(), init: init}) +} + func cmdStart(c *cli.Context) error { // Connect to MerkleEyes @@ -61,14 +74,15 @@ func cmdStart(c *cli.Context) error { // Create Basecoin app basecoinApp := app.NewBasecoin(eyesCli) - - if c.Bool("counter-plugin") { - basecoinApp.RegisterPlugin(counter.New("counter")) - } - if c.Bool("ibc-plugin") { basecoinApp.RegisterPlugin(ibc.New()) + } + // loop through all registered plugins and enable if desired + for _, p := range plugins { + if c.Bool(p.name) { + basecoinApp.RegisterPlugin(p.init()) + } } // If genesis file exists, set key-value options diff --git a/cmd/basecoin/commands/tx.go b/cmd/basecoin/commands/tx.go index 745c450323..43d36c81d7 100644 --- a/cmd/basecoin/commands/tx.go +++ b/cmd/basecoin/commands/tx.go @@ -67,9 +67,9 @@ var ( } ) -// RegisterPlugin is used to add another subcommand and create a custom +// RegisterTxPlugin is used to add another subcommand and create a custom // apptx encoding. Look at counter.go for an example -func RegisterPlugin(cmd cli.Command) { +func RegisterTxPlugin(cmd cli.Command) { AppTxCmd.Subcommands = append(AppTxCmd.Subcommands, cmd) } @@ -82,7 +82,7 @@ func cmdSendTx(c *cli.Context) error { chainID := c.String("chain_id") // convert destination address to bytes - to, err := hex.DecodeString(stripHex(toHex)) + to, err := hex.DecodeString(StripHex(toHex)) if err != nil { return errors.New("To address is invalid hex: " + err.Error()) } diff --git a/cmd/basecoin/commands/utils.go b/cmd/basecoin/commands/utils.go index db9f2821c4..04ac83ae26 100644 --- a/cmd/basecoin/commands/utils.go +++ b/cmd/basecoin/commands/utils.go @@ -28,7 +28,7 @@ func isHex(s string) bool { return false } -func stripHex(s string) string { +func StripHex(s string) string { if isHex(s) { return s[2:] }