mirror of
https://source.quilibrium.com/quilibrium/ceremonyclient.git
synced 2024-11-20 15:15:18 +00:00
add preliminary command stubs, kill offline bootstrappers (#164)
This commit is contained in:
parent
6b5ce992cf
commit
a9fac688d0
2
client/Makefile
Normal file
2
client/Makefile
Normal file
@ -0,0 +1,2 @@
|
||||
all:
|
||||
go build -o qclient ./main.go
|
38
client/cmd/accept.go
Normal file
38
client/cmd/accept.go
Normal file
@ -0,0 +1,38 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math/big"
|
||||
"os"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
var acceptCmd = &cobra.Command{
|
||||
Use: "accept",
|
||||
Short: "Accepts a pending transfer",
|
||||
Long: `Accepts a pending transfer:
|
||||
|
||||
accept <PendingTransaction>
|
||||
|
||||
PendingTransaction - the address of the pending transfer
|
||||
`,
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
if len(args) == 1 {
|
||||
fmt.Println("invalid command")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
_, ok := new(big.Int).SetString(args[0], 0)
|
||||
if !ok {
|
||||
fmt.Println("invalid PendingTransaction")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
fmt.Println("25 QUIL (Coin 0x2688997f2776ab5993894ed04fcdac05577cf2494ddfedf356ebf8bd3de464ab)")
|
||||
},
|
||||
}
|
||||
|
||||
func init() {
|
||||
tokenCmd.AddCommand(acceptCmd)
|
||||
}
|
19
client/cmd/all.go
Normal file
19
client/cmd/all.go
Normal file
@ -0,0 +1,19 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
var allCmd = &cobra.Command{
|
||||
Use: "all",
|
||||
Short: "Mints all available token rewards",
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
fmt.Println("1520.381923 QUIL (Coin 0x162ad88c319060b4f5ea6dbf9a0c2cd82d3d70dfc22d5fc99ca5371083d68416)")
|
||||
},
|
||||
}
|
||||
|
||||
func init() {
|
||||
mintCmd.AddCommand(allCmd)
|
||||
}
|
19
client/cmd/balance.go
Normal file
19
client/cmd/balance.go
Normal file
@ -0,0 +1,19 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
var balanceCmd = &cobra.Command{
|
||||
Use: "balance",
|
||||
Short: "Lists the total balance of tokens in the managing account",
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
fmt.Println("1545.381923 QUIL")
|
||||
},
|
||||
}
|
||||
|
||||
func init() {
|
||||
tokenCmd.AddCommand(balanceCmd)
|
||||
}
|
20
client/cmd/coins.go
Normal file
20
client/cmd/coins.go
Normal file
@ -0,0 +1,20 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
var coinsCmd = &cobra.Command{
|
||||
Use: "coins",
|
||||
Short: "Lists all coins under control of the managing account",
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
fmt.Println("25.0 QUIL (Coin 0x1148092cdce78c721835601ef39f9c2cd8b48b7787cbea032dd3913a4106a58d)")
|
||||
fmt.Println("1520.381923 QUIL (Coin 0x162ad88c319060b4f5ea6dbf9a0c2cd82d3d70dfc22d5fc99ca5371083d68416)")
|
||||
},
|
||||
}
|
||||
|
||||
func init() {
|
||||
tokenCmd.AddCommand(coinsCmd)
|
||||
}
|
45
client/cmd/merge.go
Normal file
45
client/cmd/merge.go
Normal file
@ -0,0 +1,45 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math/big"
|
||||
"os"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
var mergeCmd = &cobra.Command{
|
||||
Use: "merge",
|
||||
Short: "Merges two coins",
|
||||
Long: `Merges two coins:
|
||||
|
||||
merge <LeftCoin> <RightCoin>
|
||||
|
||||
LeftCoin - the first coin address
|
||||
RightCoin - the second coin address
|
||||
`,
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
if len(args) != 2 {
|
||||
fmt.Println("invalid command")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
_, ok := new(big.Int).SetString(args[0], 0)
|
||||
if !ok {
|
||||
fmt.Println("invalid LeftCoin")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
_, ok = new(big.Int).SetString(args[1], 0)
|
||||
if !ok {
|
||||
fmt.Println("invalid Rightcoin")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
fmt.Println("1545.381923 QUIL (Coin 0x151f4ae225e20759077e1724e4c5d0feae26c477fd10d728dfea962eec79b83f)")
|
||||
},
|
||||
}
|
||||
|
||||
func init() {
|
||||
tokenCmd.AddCommand(mergeCmd)
|
||||
}
|
14
client/cmd/mint.go
Normal file
14
client/cmd/mint.go
Normal file
@ -0,0 +1,14 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
var mintCmd = &cobra.Command{
|
||||
Use: "mint",
|
||||
Short: "Performs a mint operation",
|
||||
}
|
||||
|
||||
func init() {
|
||||
tokenCmd.AddCommand(mintCmd)
|
||||
}
|
43
client/cmd/mutualReceive.go
Normal file
43
client/cmd/mutualReceive.go
Normal file
@ -0,0 +1,43 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"github.com/shopspring/decimal"
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
var mutualReceiveCmd = &cobra.Command{
|
||||
Use: "mutual-receive",
|
||||
Short: "Initiates a mutual receive",
|
||||
Long: `Initiates a mutual receive:
|
||||
|
||||
mutual-receive <ExpectedAmount>
|
||||
|
||||
ExpectedAmount - the amount expected in the transfer
|
||||
`,
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
if len(args) != 1 {
|
||||
fmt.Println("invalid command")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
amount := args[len(args)-1]
|
||||
_, err := decimal.NewFromString(amount)
|
||||
if err != nil {
|
||||
fmt.Println("invalid ExpectedAmount")
|
||||
os.Exit(1)
|
||||
}
|
||||
fmt.Println("Rendezvous: 0x2ad567e4fc1ac335a8d3d6077de2ee998aff996b51936da04ee1b0f5dc196a4f")
|
||||
fmt.Printf("Awaiting sender... ")
|
||||
time.Sleep(2 * time.Second)
|
||||
fmt.Println("OK")
|
||||
fmt.Println(amount + " QUIL (Coin 0x0525c76ecdc6ef21c2eb75df628b52396adcf402ba26a518ac395db8f5874a82)")
|
||||
},
|
||||
}
|
||||
|
||||
func init() {
|
||||
tokenCmd.AddCommand(mutualReceiveCmd)
|
||||
}
|
39
client/cmd/mutualTransfer.go
Normal file
39
client/cmd/mutualTransfer.go
Normal file
@ -0,0 +1,39 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
var mutualTransferCmd = &cobra.Command{
|
||||
Use: "mutual-transfer",
|
||||
Short: "Initiates a mutual transfer",
|
||||
Long: `Initiates a mutual transfer:
|
||||
|
||||
mutual-transfer <Rendezvous> (<Amount>|<OfCoin>)
|
||||
|
||||
Rendezvous - the rendezvous point to connect to the recipient
|
||||
Amount – the amount to send, splitting/merging and sending as needed
|
||||
OfCoin – the address of the coin to send in whole
|
||||
|
||||
Either Amount or OfCoin must be specified
|
||||
`,
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
if len(args) != 2 {
|
||||
fmt.Println("invalid command")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
fmt.Printf("Confirming rendezvous... ")
|
||||
time.Sleep(500 * time.Millisecond)
|
||||
fmt.Println("OK")
|
||||
fmt.Println("50 QUIL (Coin [private])")
|
||||
},
|
||||
}
|
||||
|
||||
func init() {
|
||||
tokenCmd.AddCommand(mutualTransferCmd)
|
||||
}
|
38
client/cmd/reject.go
Normal file
38
client/cmd/reject.go
Normal file
@ -0,0 +1,38 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math/big"
|
||||
"os"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
var rejectCmd = &cobra.Command{
|
||||
Use: "reject",
|
||||
Short: "Rejects the pending transaction",
|
||||
Long: `Rejects a pending transfer:
|
||||
|
||||
reject <PendingTransaction>
|
||||
|
||||
PendingTransaction - the address of the pending transfer
|
||||
`,
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
if len(args) == 1 {
|
||||
fmt.Println("invalid command")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
_, ok := new(big.Int).SetString(args[0], 0)
|
||||
if !ok {
|
||||
fmt.Println("invalid PendingTransaction")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
fmt.Println("25 QUIL (PendingTransaction 0x27fff099dee515ece193d2af09b164864e4bb60c19eb6719b5bc981f92151009)")
|
||||
},
|
||||
}
|
||||
|
||||
func init() {
|
||||
tokenCmd.AddCommand(rejectCmd)
|
||||
}
|
31
client/cmd/root.go
Normal file
31
client/cmd/root.go
Normal file
@ -0,0 +1,31 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"os"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
var configDirectory string
|
||||
var simulateFail bool
|
||||
|
||||
var rootCmd = &cobra.Command{
|
||||
Use: "qclient",
|
||||
Short: "Quilibrium RPC Client",
|
||||
}
|
||||
|
||||
func Execute() {
|
||||
err := rootCmd.Execute()
|
||||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
func init() {
|
||||
rootCmd.PersistentFlags().StringVar(
|
||||
&configDirectory,
|
||||
"config",
|
||||
"../node/.config/",
|
||||
"config directory (default is ../node/.config/)",
|
||||
)
|
||||
}
|
55
client/cmd/split.go
Normal file
55
client/cmd/split.go
Normal file
@ -0,0 +1,55 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math/big"
|
||||
"os"
|
||||
|
||||
"github.com/shopspring/decimal"
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
var splitCmd = &cobra.Command{
|
||||
Use: "split",
|
||||
Short: "Splits a coin into two coins",
|
||||
Long: `Splits a coin into two coins:
|
||||
|
||||
split <OfCoin> <LeftAmount> <RightAmount>
|
||||
|
||||
OfCoin - the address of the coin to split
|
||||
LeftAmount - the first half of the split amount
|
||||
RightAmount - the second half of the split amount
|
||||
`,
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
if len(args) != 3 {
|
||||
fmt.Println("invalid command")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
_, ok := new(big.Int).SetString(args[0], 0)
|
||||
if !ok {
|
||||
fmt.Println("invalid OfCoin")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
leftAmount := args[1]
|
||||
_, err := decimal.NewFromString(leftAmount)
|
||||
if err != nil {
|
||||
fmt.Println("invalid LeftAmount")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
rightAmount := args[2]
|
||||
_, err = decimal.NewFromString(rightAmount)
|
||||
if err != nil {
|
||||
fmt.Println("invalid RightAmount")
|
||||
os.Exit(1)
|
||||
}
|
||||
fmt.Println(leftAmount + " QUIL (Coin 0x024479f49f03dc53fd702198cd9b548c9e96004e19ef6a4e9c5211a9795ba34d)")
|
||||
fmt.Println(rightAmount + " QUIL (Coin 0x0140e01731256793bba03914f3844d645fbece26553acdea8ac4de4d84f91690)")
|
||||
},
|
||||
}
|
||||
|
||||
func init() {
|
||||
tokenCmd.AddCommand(splitCmd)
|
||||
}
|
14
client/cmd/token.go
Normal file
14
client/cmd/token.go
Normal file
@ -0,0 +1,14 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
var tokenCmd = &cobra.Command{
|
||||
Use: "token",
|
||||
Short: "Performs a token operation",
|
||||
}
|
||||
|
||||
func init() {
|
||||
rootCmd.AddCommand(tokenCmd)
|
||||
}
|
93
client/cmd/transfer.go
Normal file
93
client/cmd/transfer.go
Normal file
@ -0,0 +1,93 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math/big"
|
||||
"os"
|
||||
"strconv"
|
||||
|
||||
"github.com/shopspring/decimal"
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
var transferCmd = &cobra.Command{
|
||||
Use: "transfer",
|
||||
Short: "Creates a pending transfer of coin",
|
||||
Long: `Creates a pending transfer of coin:
|
||||
|
||||
transfer <ToAccount> [<RefundAccount>] [<Expiry>] (<Amount>|<OfCoin>)
|
||||
|
||||
ToAccount – account address, must be specified
|
||||
RefundAccount - account address to receive coin if rejected (if omitted, uses sender address)
|
||||
Expiry – unix epoch time in seconds where the ToAccount can no longer claim (if omitted, does not expire)
|
||||
Amount – the amount to send, splitting/merging and sending as needed
|
||||
OfCoin – the address of the coin to send in whole
|
||||
|
||||
Either Amount or OfCoin must be specified
|
||||
`,
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
if len(args) < 2 {
|
||||
fmt.Println("invalid command")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
_, ok := new(big.Int).SetString(args[0], 0)
|
||||
if !ok {
|
||||
fmt.Println("invalid ToAccount")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
refundAccount := "0x23c0f371e9faa7be4ffedd616361e0c9aeb776ae4d7f3a37605ecbfa40a55a90"
|
||||
// expiry := int64(9999999999)
|
||||
var err error
|
||||
|
||||
if len(args) >= 3 {
|
||||
if len(args[len(args)-2]) != 66 {
|
||||
_, err = strconv.ParseInt(args[len(args)-2], 10, 0)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
os.Exit(1)
|
||||
}
|
||||
} else {
|
||||
refundAccount = args[1]
|
||||
}
|
||||
}
|
||||
|
||||
if refundAccount[0] != '0' || refundAccount[1] != 'x' {
|
||||
_, ok := new(big.Int).SetString(refundAccount, 0)
|
||||
if !ok {
|
||||
fmt.Println("invalid refund account")
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
ofCoin := ""
|
||||
amount := ""
|
||||
if len(args[len(args)-1]) == 66 {
|
||||
ofCoin = args[len(args)-1]
|
||||
_, ok := new(big.Int).SetString(ofCoin, 0)
|
||||
if !ok {
|
||||
fmt.Println("invalid OfCoin")
|
||||
os.Exit(1)
|
||||
}
|
||||
switch ofCoin {
|
||||
case "0x1148092cdce78c721835601ef39f9c2cd8b48b7787cbea032dd3913a4106a58d":
|
||||
fmt.Println("25.0 QUIL (Pending Transaction 0x0382e4da0c7c0133a1b53453b05096272b80c1575c6828d0211c4e371f7c81bb)")
|
||||
case "0x162ad88c319060b4f5ea6dbf9a0c2cd82d3d70dfc22d5fc99ca5371083d68416":
|
||||
fmt.Println("1520.381923 QUIL (Pending Transaction 0x0382e4da0c7c0133a1b53453b05096272b80c1575c6828d0211c4e371f7c81bb)")
|
||||
}
|
||||
} else {
|
||||
amount = args[len(args)-1]
|
||||
_, err := decimal.NewFromString(amount)
|
||||
if err != nil {
|
||||
fmt.Println("invalid Amount")
|
||||
os.Exit(1)
|
||||
}
|
||||
fmt.Println(amount + " QUIL (Pending Transaction 0x0382e4da0c7c0133a1b53453b05096272b80c1575c6828d0211c4e371f7c81bb)")
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
func init() {
|
||||
tokenCmd.AddCommand(transferCmd)
|
||||
}
|
10
client/go.mod
Normal file
10
client/go.mod
Normal file
@ -0,0 +1,10 @@
|
||||
module source.quilibrium.com/quilibrium/monorepo/client
|
||||
|
||||
go 1.20
|
||||
|
||||
require (
|
||||
github.com/inconshreveable/mousetrap v1.1.0 // indirect
|
||||
github.com/shopspring/decimal v1.4.0 // indirect
|
||||
github.com/spf13/cobra v1.8.0 // indirect
|
||||
github.com/spf13/pflag v1.0.5 // indirect
|
||||
)
|
12
client/go.sum
Normal file
12
client/go.sum
Normal file
@ -0,0 +1,12 @@
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
||||
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
|
||||
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
|
||||
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||
github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k=
|
||||
github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME=
|
||||
github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0=
|
||||
github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho=
|
||||
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
|
||||
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
12
client/main.go
Normal file
12
client/main.go
Normal file
@ -0,0 +1,12 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"source.quilibrium.com/quilibrium/monorepo/client/cmd"
|
||||
)
|
||||
|
||||
func main() {
|
||||
fmt.Println("Quilibrium RPC Client – Simulation Mode")
|
||||
cmd.Execute()
|
||||
}
|
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user