github.com/linapex/ethereum-dpos-chinese@v0.0.0-20190316121959-b78b3a4a1ece/cmd/ethkey/utils.go (about) 1 2 //<developer> 3 // <name>linapex 曹一峰</name> 4 // <email>linapex@163.com</email> 5 // <wx>superexc</wx> 6 // <qqgroup>128148617</qqgroup> 7 // <url>https://jsq.ink</url> 8 // <role>pku engineer</role> 9 // <date>2019-03-16 12:09:27</date> 10 //</624342589700575232> 11 12 13 package main 14 15 import ( 16 "encoding/json" 17 "fmt" 18 "io/ioutil" 19 "strings" 20 21 "github.com/ethereum/go-ethereum/cmd/utils" 22 "github.com/ethereum/go-ethereum/console" 23 "github.com/ethereum/go-ethereum/crypto" 24 "gopkg.in/urfave/cli.v1" 25 ) 26 27 //promptppassphrase提示用户输入密码短语。将确认设置为真 28 //要求用户确认密码短语。 29 func promptPassphrase(confirmation bool) string { 30 passphrase, err := console.Stdin.PromptPassword("Passphrase: ") 31 if err != nil { 32 utils.Fatalf("Failed to read passphrase: %v", err) 33 } 34 35 if confirmation { 36 confirm, err := console.Stdin.PromptPassword("Repeat passphrase: ") 37 if err != nil { 38 utils.Fatalf("Failed to read passphrase confirmation: %v", err) 39 } 40 if passphrase != confirm { 41 utils.Fatalf("Passphrases do not match") 42 } 43 } 44 45 return passphrase 46 } 47 48 //getpassphrase获取用户给定的密码。它首先检查 49 //--passfile命令行标志,并最终提示用户 50 //口令。 51 func getPassphrase(ctx *cli.Context) string { 52 //查找--passwordfile标志。 53 passphraseFile := ctx.String(passphraseFlag.Name) 54 if passphraseFile != "" { 55 content, err := ioutil.ReadFile(passphraseFile) 56 if err != nil { 57 utils.Fatalf("Failed to read passphrase file '%s': %v", 58 passphraseFile, err) 59 } 60 return strings.TrimRight(string(content), "\r\n") 61 } 62 63 //否则提示用户输入密码短语。 64 return promptPassphrase(false) 65 } 66 67 //signhash是一个帮助函数,用于计算给定消息的哈希值 68 //可以安全地用于计算签名。 69 // 70 //哈希被计算为 71 //keccak256(“\x19ethereum签名消息:\n”$消息长度$消息)。 72 // 73 //这将为已签名的消息提供上下文,并防止对事务进行签名。 74 func signHash(data []byte) []byte { 75 msg := fmt.Sprintf("\x19Ethereum Signed Message:\n%d%s", len(data), data) 76 return crypto.Keccak256([]byte(msg)) 77 } 78 79 //mustprintjson打印给定对象的json编码,以及 80 //在封送失败时退出程序并显示错误消息。 81 func mustPrintJSON(jsonObject interface{}) { 82 str, err := json.MarshalIndent(jsonObject, "", " ") 83 if err != nil { 84 utils.Fatalf("Failed to marshal JSON object: %v", err) 85 } 86 fmt.Println(string(str)) 87 } 88