diff --git a/main.go b/main.go index f43ffb8..1e4fe98 100644 --- a/main.go +++ b/main.go @@ -6,13 +6,14 @@ import ( "encoding/hex" "flag" "fmt" - "golang.org/x/exp/slices" "io" "log" "os" "os/exec" "strings" + "golang.org/x/exp/slices" + "github.com/decred/dcrd/hdkeychain/v3" "github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/accounts/usbwallet" @@ -54,12 +55,15 @@ func main() { log.Fatalf("One (and only one) of --private-key, --ledger, --mnemonic must be set") } - s, err := createSigner(privateKey, mnemonic, hdPath) - if err != nil { - log.Fatalf("Error creating signer: %v", err) + // signer creation error is handled later, allowing the command that generates the signable + // data to run without a key / ledger, which is useful for simulation purposes + s, signerErr := createSigner(privateKey, mnemonic, hdPath) + if signerErr != nil { + log.Printf("Warning: signer creation failed: %v", signerErr) } var input []byte + var err error if flag.NArg() == 0 { input, err = io.ReadAll(os.Stdin) if err != nil { @@ -67,7 +71,7 @@ func main() { } } else { args := flag.Args() - if !skipSender && args[0] == "forge" && args[1] == "script" && !slices.Contains(args, "--sender") { + if !skipSender && args[0] == "forge" && args[1] == "script" && !slices.Contains(args, "--sender") && s != nil { args = append(args, "--sender", s.address().String()) } fmt.Printf("Running '%s\n", strings.Join(args, " ")) @@ -96,6 +100,10 @@ func main() { fmt.Printf("Domain hash: 0x%s\n", hex.EncodeToString(domainHash)) fmt.Printf("Message hash: 0x%s\n", hex.EncodeToString(messageHash)) + if signerErr != nil { + log.Fatalf("Error creating signer: %v", signerErr) + } + if ledger { fmt.Printf("Data sent to ledger, awaiting signature...") }