-
Notifications
You must be signed in to change notification settings - Fork 326
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'main' into rp/fix-event-signer
- Loading branch information
Showing
8 changed files
with
226 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,128 @@ | ||
package cmd | ||
|
||
import ( | ||
"crypto/sha256" | ||
"encoding/hex" | ||
"fmt" | ||
"io" | ||
"net/http" | ||
"os" | ||
|
||
"github.com/cosmos/cosmos-sdk/server" | ||
"github.com/spf13/cobra" | ||
) | ||
|
||
var chainIDToSha256 = map[string]string{ | ||
"celestia": "9727aac9bbfb021ce7fc695a92f901986421283a891b89e0af97bc9fad187793", | ||
"mocha-4": "0846b99099271b240b638a94e17a6301423b5e4047f6558df543d6e91db7e575", | ||
"arabica-10": "fad0a187669f7a2c11bb07f9dc27140d66d2448b7193e186312713856f28e3e1", | ||
} | ||
|
||
func downloadGenesisCommand() *cobra.Command { | ||
cmd := &cobra.Command{ | ||
Use: "download-genesis [chain-id]", | ||
Short: "Download genesis file from https://github.com/celestiaorg/networks", | ||
Long: "Download genesis file from https://github.com/celestiaorg/networks.\n" + | ||
"The first argument should be a known chain-id. Ex. celestia, mocha-4, or arabica-10.\n" + | ||
"If no argument is provided, defaults to celestia.\n", | ||
Args: cobra.MaximumNArgs(1), | ||
RunE: func(cmd *cobra.Command, args []string) error { | ||
chainID := getChainIDOrDefault(args) | ||
if !isKnownChainID(chainID) { | ||
return fmt.Errorf("unknown chain-id: %s. Must be: celestia, mocha-4, or arabica-10", chainID) | ||
} | ||
outputFile := server.GetServerContextFromCmd(cmd).Config.GenesisFile() | ||
fmt.Printf("Downloading genesis file for %s to %s\n", chainID, outputFile) | ||
|
||
url := fmt.Sprintf("https://raw.githubusercontent.com/celestiaorg/networks/master/%s/genesis.json", chainID) | ||
if err := downloadFile(outputFile, url); err != nil { | ||
return fmt.Errorf("error downloading / persisting the genesis file: %s", err) | ||
} | ||
fmt.Printf("Downloaded genesis file for %s to %s\n", chainID, outputFile) | ||
|
||
// Compute SHA-256 hash of the downloaded file | ||
hash, err := computeSha256(outputFile) | ||
if err != nil { | ||
return fmt.Errorf("error computing sha256 hash: %s", err) | ||
} | ||
|
||
// Compare computed hash against known hash | ||
knownHash, ok := chainIDToSha256[chainID] | ||
if !ok { | ||
return fmt.Errorf("unknown chain-id: %s", chainID) | ||
} | ||
|
||
if hash != knownHash { | ||
return fmt.Errorf("sha256 hash mismatch: got %s, expected %s", hash, knownHash) | ||
} | ||
|
||
fmt.Printf("SHA-256 hash verified for %s\n", chainID) | ||
return nil | ||
}, | ||
} | ||
|
||
return cmd | ||
} | ||
|
||
// getChainIDOrDefault returns the chainID from the command line arguments. If | ||
// none is provided, defaults to celestia (mainnet). | ||
func getChainIDOrDefault(args []string) string { | ||
if len(args) == 1 { | ||
return args[0] | ||
} | ||
return "celestia" | ||
} | ||
|
||
// isKnownChainID returns true if the chainID is known. | ||
func isKnownChainID(chainID string) bool { | ||
knownChainIDs := []string{ | ||
"arabica-10", // testnet | ||
"mocha-4", // testnet | ||
"celestia", // mainnet | ||
} | ||
return contains(knownChainIDs, chainID) | ||
} | ||
|
||
// contains checks if a string is present in a slice. | ||
func contains(slice []string, s string) bool { | ||
for _, v := range slice { | ||
if v == s { | ||
return true | ||
} | ||
} | ||
return false | ||
} | ||
|
||
// downloadFile will download a URL to a local file. | ||
func downloadFile(filepath string, url string) error { | ||
resp, err := http.Get(url) | ||
if err != nil { | ||
return err | ||
} | ||
defer resp.Body.Close() | ||
|
||
out, err := os.Create(filepath) | ||
if err != nil { | ||
return err | ||
} | ||
defer out.Close() | ||
|
||
_, err = io.Copy(out, resp.Body) | ||
return err | ||
} | ||
|
||
// computeSha256 computes the SHA-256 hash of a file. | ||
func computeSha256(filepath string) (string, error) { | ||
f, err := os.Open(filepath) | ||
if err != nil { | ||
return "", err | ||
} | ||
defer f.Close() | ||
|
||
hasher := sha256.New() | ||
if _, err := io.Copy(hasher, f); err != nil { | ||
return "", err | ||
} | ||
|
||
return hex.EncodeToString(hasher.Sum(nil)), nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
#!/usr/bin/env bash | ||
set -e | ||
|
||
echo "Running fuzz tests..." | ||
# manually specify the tests to fuzz since go toolchain doesn't support | ||
# fuzzing multiple packages with multiple fuzz tests | ||
go test -fuzz=FuzzNewInfoByte -fuzztime 1m ./pkg/shares | ||
go test -fuzz=FuzzValidSequenceLen -fuzztime 1m ./pkg/shares | ||
go test -fuzz=FuzzSquare -fuzztime 5m ./pkg/square | ||
go test -fuzz=FuzzPFBGasEstimation -fuzztime 3m ./x/blob/types |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
package ledger | ||
|
||
import ( | ||
"bytes" | ||
"os" | ||
"os/exec" | ||
"testing" | ||
|
||
"github.com/stretchr/testify/assert" | ||
"github.com/stretchr/testify/require" | ||
) | ||
|
||
func TestLedgerSupport(t *testing.T) { | ||
if testing.Short() { | ||
t.Skip("skipping ledger support test in short mode.") | ||
} | ||
|
||
type testCase struct { | ||
name string | ||
ledger bool | ||
want string | ||
} | ||
|
||
testCases := []testCase{ | ||
{ | ||
name: "ledger support enabled", | ||
ledger: true, | ||
want: "Error: failed to generate ledger key: failed to retrieve device: ledger nano S: LedgerHID device (idx 0) not found. Ledger LOCKED OR Other Program/Web Browser may have control of device.\n", | ||
}, | ||
{ | ||
name: "ledger support disabled", | ||
ledger: false, | ||
want: "Error: failed to generate ledger key: failed to retrieve device: ledger nano S: support for ledger devices is not available in this executable\n", | ||
}, | ||
} | ||
|
||
for _, tc := range testCases { | ||
t.Run(tc.name, func(t *testing.T) { | ||
var cmd *exec.Cmd | ||
if tc.ledger { | ||
// Generate the binary with Ledger support | ||
cmd = exec.Command("go", "build", "-tags", "ledger", "-o", "celestia-appd", "../../cmd/celestia-appd") | ||
} else { | ||
// Generate the binary without Ledger support | ||
cmd = exec.Command("go", "build", "-o", "celestia-appd", "../../cmd/celestia-appd") | ||
} | ||
err := cmd.Run() | ||
require.NoError(t, err) | ||
|
||
// Clean up the binary | ||
defer os.Remove("celestia-appd") | ||
|
||
// Run the binary | ||
cmd = exec.Command("./celestia-appd", "keys", "add", "test-key-name", "--ledger") | ||
var out bytes.Buffer | ||
cmd.Stderr = &out | ||
err = cmd.Run() | ||
require.Error(t, err) | ||
assert.Equal(t, tc.want, out.String()) | ||
}) | ||
} | ||
} |