diff --git a/client/cmd/crossMint.go b/client/cmd/crossMint.go new file mode 100644 index 0000000..f2cf665 --- /dev/null +++ b/client/cmd/crossMint.go @@ -0,0 +1,209 @@ +package cmd + +import ( + "encoding/base64" + "encoding/hex" + "encoding/json" + "fmt" + "os" + "path/filepath" + "strings" + + "github.com/cloudflare/circl/sign/ed448" + libP2pCrypto "github.com/libp2p/go-libp2p/core/crypto" + "github.com/pkg/errors" + "github.com/spf13/cobra" + "go.uber.org/zap" + "source.quilibrium.com/quilibrium/monorepo/node/config" + "source.quilibrium.com/quilibrium/monorepo/node/keys" +) + +var crossMintCmd = &cobra.Command{ + Use: "cross-mint", + Short: "Signs a payload from the Quilibrium bridge to mint tokens on Ethereum L1 and prints the result to stdout", + Long: `Signs a payload from the Quilibrium bridge to mint tokens on Ethereum L1 and prints the result to stdout": + + cross-mint + + Payload – the hex-encoded payload from the Quilibrium bridge with optional 0x-prefix, must be specified + `, + Run: func(cmd *cobra.Command, args []string) { + if len(args) != 1 { + fmt.Printf("missing payload") + os.Exit(1) + } + + _, err := os.Stat(configDirectory) + if os.IsNotExist(err) { + fmt.Printf("config directory doesn't exist: %s", configDirectory) + os.Exit(1) + } + + config, err := config.LoadConfig(configDirectory, "") + if err != nil { + fmt.Printf("invalid config directory: %s", configDirectory) + os.Exit(1) + } + + rawPeerKey, err := hex.DecodeString(config.P2P.PeerPrivKey) + if err != nil { + panic(errors.Wrap(err, "cross mint")) + } + + peerKey, err := libP2pCrypto.UnmarshalEd448PrivateKey(rawPeerKey) + if err != nil { + panic(errors.Wrap(err, "cross mint")) + } + + rawPeerKey, err = peerKey.Raw() + if err != nil { + panic(errors.Wrap(err, "cross mint")) + } + + // TODO: support other key managers + // Get the proving key + // `config.Key.KeyStoreFile.Path` defaults to `.config/keys.yml`. + // We do our best here to make sure the configuration value is taken into + // account if it was changed. + if !filepath.IsAbs(config.Key.KeyStoreFile.Path) { + config.Key.KeyStoreFile.Path = filepath.Join( + configDirectory, + filepath.Base(config.Key.KeyStoreFile.Path), + ) + } + + logger, err := zap.NewProduction() + if err != nil { + panic(errors.Wrap(err, "cross mint")) + } + + fileKeyManager := keys.NewFileKeyManager(config.Key, logger) + provingKey, err := fileKeyManager.GetSigningKey(config.Engine.ProvingKeyId) + if err != nil { + panic(errors.Wrap(err, "cross mint")) + } + // Sign the payload + result, err := CrossMint(&CrossMintArgs{ + Payload: args[0], + PeerKey: rawPeerKey, + ProvingKey: provingKey.(ed448.PrivateKey), + }) + if err != nil { + panic(errors.Wrap(err, "error cross minting")) + } + // Print the result + jsonResult, err := json.Marshal(result) + if err != nil { + panic(errors.Wrap(err, "error marshaling result to json")) + } + fmt.Println(string(jsonResult)) + }, +} + +func init() { + rootCmd.AddCommand(crossMintCmd) +} + +// CrossMintArgs Arguments for the cross mint operation +type CrossMintArgs struct { + // Hex encoded payload with optional 0x prefix + Payload string + // The node's ed448 peer key + PeerKey ed448.PrivateKey + // The node's ed448 proving key + ProvingKey ed448.PrivateKey +} + +// CrossMintResult Result of the cross mint operation +type CrossMintResult struct { + // Base64 encoded peer public key + PeerPublicKey string `json:"peerPublicKey"` + // Base64 encoded signature of the payload with the peer private key + PeerSignature string `json:"peerSignature"` + // Base64 encoded prover public key + ProverPublicKey string `json:"proverPublicKey"` + // Base64 encoded signature of the payload with the prover private key + ProverSignature string `json:"proverSignature"` +} + +func CrossMint(args *CrossMintArgs) (*CrossMintResult, error) { + rawPayload, err := decodeHexString(args.Payload) + if err != nil { + return nil, errors.Wrap(err, "cross mint") + } + + peerSignature := ed448.Sign(args.PeerKey, rawPayload, "") + peerPubKey, ok := args.PeerKey.Public().(ed448.PublicKey) + if !ok { + return nil, errors.Wrap( + errors.New("error casting peer public key to ed448 public key"), + "cross mint", + ) + } + + provingSignature := ed448.Sign( + args.ProvingKey, + rawPayload, + "", + ) + provingPubKey, ok := args.ProvingKey.Public().(ed448.PublicKey) + if !ok { + return nil, errors.Wrap( + errors.New("error casting proving public key to ed448 public key"), + "cross mint", + ) + } + return &CrossMintResult{ + PeerPublicKey: base64.StdEncoding.EncodeToString(peerPubKey), + PeerSignature: base64.StdEncoding.EncodeToString(peerSignature), + ProverPublicKey: base64.StdEncoding.EncodeToString(provingPubKey), + ProverSignature: base64.StdEncoding.EncodeToString(provingSignature), + }, nil +} + +// VerifyCrossMint Verify a cross-mint message. Returns true if both signatures +// verify with the given public keys. +func VerifyCrossMint(payload string, result *CrossMintResult) (bool, error) { + payloadBytes, err := decodeHexString(payload) + if err != nil { + return false, err + } + peerPubKeyBytes, err := base64.StdEncoding.DecodeString(result.PeerPublicKey) + if err != nil { + return false, err + } + peerPubKey := ed448.PublicKey(peerPubKeyBytes) + peerSignature, err := base64.StdEncoding.DecodeString(result.PeerSignature) + if err != nil { + return false, err + } + proverPubKeyBytes, err := base64.StdEncoding.DecodeString( + result.ProverPublicKey, + ) + if err != nil { + return false, err + } + proverPubKey := ed448.PublicKey(proverPubKeyBytes) + proverSignature, err := base64.StdEncoding.DecodeString( + result.ProverSignature, + ) + if err != nil { + return false, err + } + peerSigOk := ed448.Verify(peerPubKey, payloadBytes, peerSignature, "") + proverSigOk := ed448.Verify(proverPubKey, payloadBytes, proverSignature, "") + return peerSigOk && proverSigOk, nil +} + +func decodeHexString(hexStr string) ([]byte, error) { + // Check if the string starts with '0x' and remove it + if strings.HasPrefix(hexStr, "0x") { + hexStr = hexStr[2:] + } + // Decode the hex string into bytes + data, err := hex.DecodeString(hexStr) + if err != nil { + return nil, errors.Wrap(err, "error decoding hex string") + } + return data, nil +} diff --git a/client/cmd/crossMint_test.go b/client/cmd/crossMint_test.go new file mode 100644 index 0000000..c0ffb77 --- /dev/null +++ b/client/cmd/crossMint_test.go @@ -0,0 +1,102 @@ +package cmd_test + +import ( + "crypto/rand" + "encoding/hex" + "encoding/json" + "testing" + + "github.com/stretchr/testify/assert" + "source.quilibrium.com/quilibrium/monorepo/client/cmd" +) + +var peerPrivKeyStr = "b14b843edf61a58870d3f96fe7dc8c6d0479af10aa16c45b102ddae75b278e8ef302edca36c71c1b4beb60e88088826c4da71ab0b5bf60cc92fc35078fa499f8a4accd51776ecc1fb520fdb20408133366077dadf4ff8a337fb42a19ff846e3609516a3f61c92ea4b9c2298a64b8bfae3780" +var provingPrivKeyStr = "690a5f08a2b3a0b787a8301c5fded376f7a070f5d89f66bf537d67fa1ed71a2b22ce166733b7d73ccf10a20ef0f04f163aae13883ff8270f93fed723c513e24e7f93d317b3257731887411bf820e169a0180c0cbf625efa67ff54cc22f1d97a2bd3f721705eeb4c2bf022f793954a798f700" + +func TestCrossMintRoundtrip(t *testing.T) { + peerPrivKey, err := hex.DecodeString(peerPrivKeyStr) + if err != nil { + t.Fatal(err) + } + provingPrivKey, err := hex.DecodeString(provingPrivKeyStr) + if err != nil { + t.Fatal(err) + } + payloadBytes := make([]byte, 32) + n, err := rand.Read(payloadBytes) + if err != nil { + t.Fatal(err) + } + if n != 32 { + t.Fatal("not enough bytes read") + } + payload := hex.EncodeToString(payloadBytes) + args := &cmd.CrossMintArgs{ + Payload: payload, + PeerKey: peerPrivKey, + ProvingKey: provingPrivKey, + } + result, err := cmd.CrossMint(args) + if err != nil { + t.Fatal(err) + } + verified, err := cmd.VerifyCrossMint(payload, result) + assert.True(t, verified, "cross mint verification failed") + // Switch the public keys to induce failure + tmp := result.PeerPublicKey + result.PeerPublicKey = result.ProverPublicKey + result.ProverPublicKey = tmp + verified, err = cmd.VerifyCrossMint(payload, result) + assert.False(t, verified, "cross mint verification should have failed") +} + +func TestCrossMint0xHex(t *testing.T) { + peerPrivKey, err := hex.DecodeString(peerPrivKeyStr) + if err != nil { + t.Fatal(err) + } + provingPrivKey, err := hex.DecodeString(provingPrivKeyStr) + if err != nil { + t.Fatal(err) + } + + payload := "0x1234" + args := &cmd.CrossMintArgs{ + Payload: payload, + PeerKey: peerPrivKey, + ProvingKey: provingPrivKey, + } + result, err := cmd.CrossMint(args) + if err != nil { + t.Fatal(err) + } + verified, err := cmd.VerifyCrossMint(payload, result) + assert.True(t, verified, "cross mint verification failed") +} + +func TestCrossMintFixture(t *testing.T) { + // Generated by running the `cross-mint` on the config of a newly started node with payload "1234" + rawJson := `{ + "peerPublicKey": "LLP/9tYlqIsV8AgTkyIpK9zjN+OfXNmYMDhmDeEagCMAhjfpPPWDyWDq9w6uMl9hGyDKYB10EV0A", + "peerSignature": "2ybumA9Vu5rnr5nYPcjehGo/PK6uNl4iVa0WXkEGms5ChqPFgOJX6Z5eng8U6VSHy85zbeZBukiANE3j2EBxrk4TAf4Z+5uuNMCQ6DasKpkgsxuIOGWKhOcBal2CDicinuMqafU3YOrXH9cck/OkjywA", + "proverPublicKey": "CAk3inpisW2Bpcar/z5/3dwjRSgFMRbhYhtCWdQThZZqDvOWFGgoMXLyKHw3B4+yEsmYIVaQZ/iA", + "proverSignature": "NZb7D2xNbCLlYGMUN1BiwBJL9Z6LbdRiMT1FpltBVpRNuoUNmncN++TWgJD6ngIv+VxEnWB0fhcAfAvrIlwNL0z8Ppur8mGMwedzJIm3pB22nAjUTDvNOvvczZWNbPZPyXcWco8SIC/aVaNmvsg//SgA" + }` + // load RawJson into a CrossMintResult + result := &cmd.CrossMintResult{} + err := json.Unmarshal([]byte(rawJson), result) + if err != nil { + t.Fatal(err) + } + ok, err := cmd.VerifyCrossMint("1234", result) + if err != nil { + t.Fatal(err) + } + assert.True(t, ok, "cross mint verification failed") + + bad, err := cmd.VerifyCrossMint("2234", result) + if err != nil { + t.Fatal(err) + } + assert.False(t, bad, "cross mint verification succeeded when it should have failed") +} diff --git a/client/go.mod b/client/go.mod index 99e242f..12c019d 100644 --- a/client/go.mod +++ b/client/go.mod @@ -2,9 +2,41 @@ module source.quilibrium.com/quilibrium/monorepo/client go 1.20 +replace github.com/libp2p/go-libp2p => ../go-libp2p + +replace source.quilibrium.com/quilibrium/monorepo/node => ../node + +replace source.quilibrium.com/quilibrium/monorepo/nekryptology => ../nekryptology + +require github.com/stretchr/testify v1.8.4 + 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 + filippo.io/edwards25519 v1.0.0-rc.1 // indirect + github.com/btcsuite/btcd v0.21.0-beta.0.20201114000516-e9c7a5ac6401 // indirect + github.com/bwesterb/go-ristretto v1.2.3 // indirect + github.com/consensys/gnark-crypto v0.5.3 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/klauspost/cpuid/v2 v2.2.5 // indirect + github.com/minio/sha256-simd v1.0.1 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + go.uber.org/multierr v1.11.0 // indirect + golang.org/x/crypto v0.18.0 // indirect + golang.org/x/sys v0.17.0 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + source.quilibrium.com/quilibrium/monorepo/nekryptology v0.0.0-00010101000000-000000000000 // indirect +) + +require ( + github.com/cloudflare/circl v1.3.8 + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/libp2p/go-libp2p v0.33.2 + github.com/pkg/errors v0.9.1 + github.com/shopspring/decimal v1.4.0 + github.com/spf13/cobra v1.8.0 + github.com/spf13/pflag v1.0.5 // indirect + go.uber.org/zap v1.27.0 + google.golang.org/protobuf v1.32.0 // indirect + source.quilibrium.com/quilibrium/monorepo/node v1.14.17 ) diff --git a/client/go.sum b/client/go.sum index e9f7d52..bf2ddfd 100644 --- a/client/go.sum +++ b/client/go.sum @@ -1,12 +1,122 @@ +filippo.io/edwards25519 v1.0.0-rc.1 h1:m0VOOB23frXZvAOK44usCgLWvtsxIoMCTBGJZlpmGfU= +filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= +github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= +github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= +github.com/btcsuite/btcd v0.21.0-beta.0.20201114000516-e9c7a5ac6401 h1:0tjUthKCaF8zwF9Qg7lfnep0xdo4n8WiFUfQPaMHX6g= +github.com/btcsuite/btcd v0.21.0-beta.0.20201114000516-e9c7a5ac6401/go.mod h1:Sv4JPQ3/M+teHz9Bo5jBpkNcP0x6r7rdihlNL/7tTAs= +github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= +github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= +github.com/btcsuite/btcutil v1.0.2/go.mod h1:j9HUFwoQRsZL3V4n+qG+CUnEGHOarIxfC3Le2Yhbcts= +github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= +github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= +github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= +github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= +github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= +github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= +github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= +github.com/bwesterb/go-ristretto v1.2.3 h1:1w53tCkGhCQ5djbat3+MH0BAQ5Kfgbt56UZQ/JMzngw= +github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= +github.com/cloudflare/circl v1.3.8 h1:j+V8jJt09PoeMFIu2uh5JUyEaIHTXVOHslFoLNAKqwI= +github.com/cloudflare/circl v1.3.8/go.mod h1:PDRU+oXvdD7KCtgKxW95M5Z8BpSCJXQORiZFnBQS5QU= +github.com/consensys/bavard v0.1.8-0.20210915155054-088da2f7f54a/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= +github.com/consensys/gnark-crypto v0.5.3 h1:4xLFGZR3NWEH2zy+YzvzHicpToQR8FXFbfLNvpGB+rE= +github.com/consensys/gnark-crypto v0.5.3/go.mod h1:hOdPlWQV1gDLp7faZVeg8Y0iEPFaOUnCc4XeCCk96p0= github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= +github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/ipfs/go-cid v0.4.1 h1:A/T3qGvxi4kpKWWcPC/PgbvDA2bjVLO7n4UeVwnbs/s= +github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= +github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= +github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg= +github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c= +github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= +github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= +github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= +github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= +github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= +github.com/multiformats/go-base32 v0.1.0 h1:pVx9xoSPqEIQG8o+UbAe7DNi51oej1NtK+aGkbLYxPE= +github.com/multiformats/go-base36 v0.2.0 h1:lFsAbNOGeKtuKozrtBsAkSVhv1p9D0/qedU9rQyccr0= +github.com/multiformats/go-multiaddr v0.11.0 h1:XqGyJ8ufbCE0HmTDwx2kPdsrQ36AGPZNZX6s6xfJH10= +github.com/multiformats/go-multibase v0.2.0 h1:isdYCVLvksgWlMW9OZRYJEa9pZETFivncJHmHnnd87g= +github.com/multiformats/go-multicodec v0.9.0 h1:pb/dlPnzee/Sxv/j4PmkDRxCOi3hXTz3IbPKOXWJkmg= +github.com/multiformats/go-multihash v0.2.3 h1:7Lyc8XfX/IY2jWb/gI7JP+o7JEq9hOa7BFvVU9RSh+U= +github.com/multiformats/go-varint v0.0.7 h1:sWSGR+f/eu5ABZA2ZpYKBILXTTs9JWpdEM/nEGOHFS8= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= 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/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= 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= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= +go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= +golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.18.0 h1:PGVlW0xEltQnzFZ55hkuX5+KLyrMYhHld1YHO4AKcdc= +golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= +golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63 h1:m64FZMko/V45gv0bNmrNYoDEq8U5YUhetc9cBWKS1TQ= +golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210420205809-ac73e9fd8988/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y= +golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= +google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I= +google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +lukechampine.com/blake3 v1.2.1 h1:YuqqRuaqsGV71BV/nm9xlI0MKUv4QC54jQnBChWbGnI= +rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA= diff --git a/client/main.go b/client/main.go index 199d220..02403b3 100644 --- a/client/main.go +++ b/client/main.go @@ -1,12 +1,9 @@ package main import ( - "fmt" - "source.quilibrium.com/quilibrium/monorepo/client/cmd" ) func main() { - fmt.Println("Quilibrium RPC Client – Simulation Mode") cmd.Execute() } diff --git a/node/config/version.go b/node/config/version.go index b98b164..874a5e8 100644 --- a/node/config/version.go +++ b/node/config/version.go @@ -14,7 +14,7 @@ func GetMinimumVersion() []byte { } func GetVersion() []byte { - return []byte{0x01, 0x04, 0x10} + return []byte{0x01, 0x04, 0x11} } func GetVersionString() string { diff --git a/node/main.go b/node/main.go index e65c239..4f90cf1 100644 --- a/node/main.go +++ b/node/main.go @@ -592,13 +592,13 @@ func printLogo() { fmt.Println(" ########### ########## &###########") fmt.Println(" ########### ############## ###########") fmt.Println(" ########### ############## ##########&") - fmt.Println(" ########## ############## ##########") - fmt.Println("%########## ########## ##########") - fmt.Println("########## ##########") - fmt.Println("########## &#########") - fmt.Println("########## ####### ####### ##########") - fmt.Println("%######### &######################### ##########") - fmt.Println(" ########## ##############% ############## &##########") + fmt.Println(" ' ' ############## ##########") + fmt.Println("' ' ########## ##########") + fmt.Println("' ' ##########") + fmt.Println("' ' &#########") + fmt.Println("' ' ####### ####### ##########") + fmt.Println("' ' &######################### ##########") + fmt.Println(" ' ' ##############% ############## &##########") fmt.Println(" ' ' &############## ############### ##########") fmt.Println(" ' ' ############### ##############% ###########") fmt.Println(" ' '. ########## ############### ########") @@ -616,5 +616,5 @@ func printLogo() { func printVersion() { fmt.Println(" ") - fmt.Println(" Quilibrium Node - v" + config.GetVersionString() + " – Sunset") + fmt.Println(" Quilibrium Node - v" + config.GetVersionString() + " – Aurora") } diff --git a/node/node-1.4.17-darwin-arm64.dgst b/node/node-1.4.17-darwin-arm64.dgst new file mode 100644 index 0000000..6ff184c --- /dev/null +++ b/node/node-1.4.17-darwin-arm64.dgst @@ -0,0 +1 @@ +SHA3-256(node-1.4.17-darwin-arm64.bin)= c9eee4d66e1a98a9d63dbe54cbe043e1d7fc4014bcf7e78e46d56b33b4b7c9da diff --git a/node/node-1.4.17-darwin-arm64.dgst.sig.1 b/node/node-1.4.17-darwin-arm64.dgst.sig.1 new file mode 100644 index 0000000..6919072 Binary files /dev/null and b/node/node-1.4.17-darwin-arm64.dgst.sig.1 differ diff --git a/node/node-1.4.17-darwin-arm64.dgst.sig.11 b/node/node-1.4.17-darwin-arm64.dgst.sig.11 new file mode 100644 index 0000000..e210296 Binary files /dev/null and b/node/node-1.4.17-darwin-arm64.dgst.sig.11 differ diff --git a/node/node-1.4.17-darwin-arm64.dgst.sig.12 b/node/node-1.4.17-darwin-arm64.dgst.sig.12 new file mode 100644 index 0000000..d515303 Binary files /dev/null and b/node/node-1.4.17-darwin-arm64.dgst.sig.12 differ diff --git a/node/node-1.4.17-darwin-arm64.dgst.sig.13 b/node/node-1.4.17-darwin-arm64.dgst.sig.13 new file mode 100644 index 0000000..a123f5b Binary files /dev/null and b/node/node-1.4.17-darwin-arm64.dgst.sig.13 differ diff --git a/node/node-1.4.17-darwin-arm64.dgst.sig.14 b/node/node-1.4.17-darwin-arm64.dgst.sig.14 new file mode 100644 index 0000000..36efaef Binary files /dev/null and b/node/node-1.4.17-darwin-arm64.dgst.sig.14 differ diff --git a/node/node-1.4.17-darwin-arm64.dgst.sig.15 b/node/node-1.4.17-darwin-arm64.dgst.sig.15 new file mode 100644 index 0000000..92e8a15 Binary files /dev/null and b/node/node-1.4.17-darwin-arm64.dgst.sig.15 differ diff --git a/node/node-1.4.17-darwin-arm64.dgst.sig.16 b/node/node-1.4.17-darwin-arm64.dgst.sig.16 new file mode 100644 index 0000000..8da1070 Binary files /dev/null and b/node/node-1.4.17-darwin-arm64.dgst.sig.16 differ diff --git a/node/node-1.4.17-darwin-arm64.dgst.sig.3 b/node/node-1.4.17-darwin-arm64.dgst.sig.3 new file mode 100644 index 0000000..42363ab Binary files /dev/null and b/node/node-1.4.17-darwin-arm64.dgst.sig.3 differ diff --git a/node/node-1.4.17-darwin-arm64.dgst.sig.4 b/node/node-1.4.17-darwin-arm64.dgst.sig.4 new file mode 100644 index 0000000..6337ff1 Binary files /dev/null and b/node/node-1.4.17-darwin-arm64.dgst.sig.4 differ diff --git a/node/node-1.4.17-darwin-arm64.dgst.sig.6 b/node/node-1.4.17-darwin-arm64.dgst.sig.6 new file mode 100644 index 0000000..8789ad1 Binary files /dev/null and b/node/node-1.4.17-darwin-arm64.dgst.sig.6 differ diff --git a/node/node-1.4.17-darwin-arm64.dgst.sig.8 b/node/node-1.4.17-darwin-arm64.dgst.sig.8 new file mode 100644 index 0000000..4cd524f Binary files /dev/null and b/node/node-1.4.17-darwin-arm64.dgst.sig.8 differ diff --git a/node/node-1.4.17-linux-amd64.dgst b/node/node-1.4.17-linux-amd64.dgst new file mode 100644 index 0000000..425b932 --- /dev/null +++ b/node/node-1.4.17-linux-amd64.dgst @@ -0,0 +1 @@ +SHA3-256(node-1.4.17-linux-amd64.bin)= 06a2ab7dc4e5f2b6ea48e4f056774b5bfadbf4bb261058279ef1f4e6982e1a8f diff --git a/node/node-1.4.17-linux-amd64.dgst.sig.1 b/node/node-1.4.17-linux-amd64.dgst.sig.1 new file mode 100644 index 0000000..83c4927 Binary files /dev/null and b/node/node-1.4.17-linux-amd64.dgst.sig.1 differ diff --git a/node/node-1.4.17-linux-amd64.dgst.sig.11 b/node/node-1.4.17-linux-amd64.dgst.sig.11 new file mode 100644 index 0000000..1d9fc8f Binary files /dev/null and b/node/node-1.4.17-linux-amd64.dgst.sig.11 differ diff --git a/node/node-1.4.17-linux-amd64.dgst.sig.12 b/node/node-1.4.17-linux-amd64.dgst.sig.12 new file mode 100644 index 0000000..1c78e30 Binary files /dev/null and b/node/node-1.4.17-linux-amd64.dgst.sig.12 differ diff --git a/node/node-1.4.17-linux-amd64.dgst.sig.13 b/node/node-1.4.17-linux-amd64.dgst.sig.13 new file mode 100644 index 0000000..86c462f Binary files /dev/null and b/node/node-1.4.17-linux-amd64.dgst.sig.13 differ diff --git a/node/node-1.4.17-linux-amd64.dgst.sig.14 b/node/node-1.4.17-linux-amd64.dgst.sig.14 new file mode 100644 index 0000000..a5ad292 Binary files /dev/null and b/node/node-1.4.17-linux-amd64.dgst.sig.14 differ diff --git a/node/node-1.4.17-linux-amd64.dgst.sig.15 b/node/node-1.4.17-linux-amd64.dgst.sig.15 new file mode 100644 index 0000000..c1131dc Binary files /dev/null and b/node/node-1.4.17-linux-amd64.dgst.sig.15 differ diff --git a/node/node-1.4.17-linux-amd64.dgst.sig.16 b/node/node-1.4.17-linux-amd64.dgst.sig.16 new file mode 100644 index 0000000..b1ba48a Binary files /dev/null and b/node/node-1.4.17-linux-amd64.dgst.sig.16 differ diff --git a/node/node-1.4.17-linux-amd64.dgst.sig.3 b/node/node-1.4.17-linux-amd64.dgst.sig.3 new file mode 100644 index 0000000..0cd377c Binary files /dev/null and b/node/node-1.4.17-linux-amd64.dgst.sig.3 differ diff --git a/node/node-1.4.17-linux-amd64.dgst.sig.4 b/node/node-1.4.17-linux-amd64.dgst.sig.4 new file mode 100644 index 0000000..36eeb73 Binary files /dev/null and b/node/node-1.4.17-linux-amd64.dgst.sig.4 differ diff --git a/node/node-1.4.17-linux-amd64.dgst.sig.6 b/node/node-1.4.17-linux-amd64.dgst.sig.6 new file mode 100644 index 0000000..21938e7 Binary files /dev/null and b/node/node-1.4.17-linux-amd64.dgst.sig.6 differ diff --git a/node/node-1.4.17-linux-amd64.dgst.sig.8 b/node/node-1.4.17-linux-amd64.dgst.sig.8 new file mode 100644 index 0000000..746a080 Binary files /dev/null and b/node/node-1.4.17-linux-amd64.dgst.sig.8 differ diff --git a/node/node-1.4.17-linux-arm64.dgst b/node/node-1.4.17-linux-arm64.dgst new file mode 100644 index 0000000..edd4f93 --- /dev/null +++ b/node/node-1.4.17-linux-arm64.dgst @@ -0,0 +1 @@ +SHA3-256(node-1.4.17-linux-arm64.bin)= ea90251db54105278ef4085d5bd71912b8aa9dae0b79a2c0bfdfdf33180513d3 diff --git a/node/node-1.4.17-linux-arm64.dgst.sig.1 b/node/node-1.4.17-linux-arm64.dgst.sig.1 new file mode 100644 index 0000000..4094546 Binary files /dev/null and b/node/node-1.4.17-linux-arm64.dgst.sig.1 differ diff --git a/node/node-1.4.17-linux-arm64.dgst.sig.11 b/node/node-1.4.17-linux-arm64.dgst.sig.11 new file mode 100644 index 0000000..f7fe60e Binary files /dev/null and b/node/node-1.4.17-linux-arm64.dgst.sig.11 differ diff --git a/node/node-1.4.17-linux-arm64.dgst.sig.12 b/node/node-1.4.17-linux-arm64.dgst.sig.12 new file mode 100644 index 0000000..a054677 Binary files /dev/null and b/node/node-1.4.17-linux-arm64.dgst.sig.12 differ diff --git a/node/node-1.4.17-linux-arm64.dgst.sig.13 b/node/node-1.4.17-linux-arm64.dgst.sig.13 new file mode 100644 index 0000000..d0ac292 Binary files /dev/null and b/node/node-1.4.17-linux-arm64.dgst.sig.13 differ diff --git a/node/node-1.4.17-linux-arm64.dgst.sig.14 b/node/node-1.4.17-linux-arm64.dgst.sig.14 new file mode 100644 index 0000000..cc80d24 Binary files /dev/null and b/node/node-1.4.17-linux-arm64.dgst.sig.14 differ diff --git a/node/node-1.4.17-linux-arm64.dgst.sig.15 b/node/node-1.4.17-linux-arm64.dgst.sig.15 new file mode 100644 index 0000000..a0833d1 Binary files /dev/null and b/node/node-1.4.17-linux-arm64.dgst.sig.15 differ diff --git a/node/node-1.4.17-linux-arm64.dgst.sig.16 b/node/node-1.4.17-linux-arm64.dgst.sig.16 new file mode 100644 index 0000000..85fb52e Binary files /dev/null and b/node/node-1.4.17-linux-arm64.dgst.sig.16 differ diff --git a/node/node-1.4.17-linux-arm64.dgst.sig.3 b/node/node-1.4.17-linux-arm64.dgst.sig.3 new file mode 100644 index 0000000..11cf43a Binary files /dev/null and b/node/node-1.4.17-linux-arm64.dgst.sig.3 differ diff --git a/node/node-1.4.17-linux-arm64.dgst.sig.4 b/node/node-1.4.17-linux-arm64.dgst.sig.4 new file mode 100644 index 0000000..112929f Binary files /dev/null and b/node/node-1.4.17-linux-arm64.dgst.sig.4 differ diff --git a/node/node-1.4.17-linux-arm64.dgst.sig.6 b/node/node-1.4.17-linux-arm64.dgst.sig.6 new file mode 100644 index 0000000..d2963fc Binary files /dev/null and b/node/node-1.4.17-linux-arm64.dgst.sig.6 differ diff --git a/node/node-1.4.17-linux-arm64.dgst.sig.8 b/node/node-1.4.17-linux-arm64.dgst.sig.8 new file mode 100644 index 0000000..487654e Binary files /dev/null and b/node/node-1.4.17-linux-arm64.dgst.sig.8 differ