github.com/yinchengtsinghua/golang-Eos-dpos-Ethereum@v0.0.0-20190121132951-92cc4225ed8e/internal/guide/guide_test.go (about) 1 2 //此源码被清华学神尹成大魔王专业翻译分析并修改 3 //尹成QQ77025077 4 //尹成微信18510341407 5 //尹成所在QQ群721929980 6 //尹成邮箱 yinc13@mails.tsinghua.edu.cn 7 //尹成毕业于清华大学,微软区块链领域全球最有价值专家 8 //https://mvp.microsoft.com/zh-cn/PublicProfile/4033620 9 //版权所有2017 Go Ethereum作者 10 //此文件是Go以太坊库的一部分。 11 // 12 //Go-Ethereum库是免费软件:您可以重新分发它和/或修改 13 //根据GNU发布的较低通用公共许可证的条款 14 //自由软件基金会,或者许可证的第3版,或者 15 //(由您选择)任何更高版本。 16 // 17 //Go以太坊图书馆的发行目的是希望它会有用, 18 //但没有任何保证;甚至没有 19 //适销性或特定用途的适用性。见 20 //GNU较低的通用公共许可证,了解更多详细信息。 21 // 22 //你应该收到一份GNU较低级别的公共许可证副本 23 //以及Go以太坊图书馆。如果没有,请参见<http://www.gnu.org/licenses/>。 24 25 //此文件包含嵌入到 26 //GO测试。这样可以确保在out指南中发布的任何代码都不会中断 27 //意外地通过一些代码更新。如果一些API仍然发生变化,那么需要 28 //修改此文件,请将任何修改导入到开发人员的 29 //也可以浏览维基网页! 30 31 package guide 32 33 import ( 34 "io/ioutil" 35 "math/big" 36 "os" 37 "path/filepath" 38 "testing" 39 "time" 40 41 "github.com/ethereum/go-ethereum/accounts/keystore" 42 "github.com/ethereum/go-ethereum/core/types" 43 ) 44 45 //测试帐户管理片段是否正常工作。 46 func TestAccountManagement(t *testing.T) { 47 //创建要使用的临时文件夹 48 workdir, err := ioutil.TempDir("", "") 49 if err != nil { 50 t.Fatalf("Failed to create temporary work dir: %v", err) 51 } 52 defer os.RemoveAll(workdir) 53 54 //使用标准加密参数创建加密密钥库 55 ks := keystore.NewKeyStore(filepath.Join(workdir, "keystore"), keystore.StandardScryptN, keystore.StandardScryptP) 56 57 //使用指定的加密密码创建新帐户 58 newAcc, err := ks.NewAccount("Creation password") 59 if err != nil { 60 t.Fatalf("Failed to create new account: %v", err) 61 } 62 //使用其他密码短语导出新创建的帐户。归还的人 63 //此方法调用的数据是一个JSON编码的加密密钥文件 64 jsonAcc, err := ks.Export(newAcc, "Creation password", "Export password") 65 if err != nil { 66 t.Fatalf("Failed to export account: %v", err) 67 } 68 //在本地密钥库中更新上面创建的帐户的密码短语 69 if err := ks.Update(newAcc, "Creation password", "Update password"); err != nil { 70 t.Fatalf("Failed to update account: %v", err) 71 } 72 //从本地密钥库中删除上面更新的帐户 73 if err := ks.Delete(newAcc, "Update password"); err != nil { 74 t.Fatalf("Failed to delete account: %v", err) 75 } 76 //导入回我们在上面导出(然后删除)的帐户 77 //又是一个新的密码 78 if _, err := ks.Import(jsonAcc, "Export password", "Import password"); err != nil { 79 t.Fatalf("Failed to import account: %v", err) 80 } 81 //创建用于签署交易记录的新帐户 82 signer, err := ks.NewAccount("Signer password") 83 if err != nil { 84 t.Fatalf("Failed to create signer account: %v", err) 85 } 86 tx, chain := new(types.Transaction), big.NewInt(1) 87 88 //用单一授权签署交易 89 if _, err := ks.SignTxWithPassphrase(signer, "Signer password", tx, chain); err != nil { 90 t.Fatalf("Failed to sign with passphrase: %v", err) 91 } 92 //使用多个手动取消的授权签署交易 93 if err := ks.Unlock(signer, "Signer password"); err != nil { 94 t.Fatalf("Failed to unlock account: %v", err) 95 } 96 if _, err := ks.SignTx(signer, tx, chain); err != nil { 97 t.Fatalf("Failed to sign with unlocked account: %v", err) 98 } 99 if err := ks.Lock(signer.Address); err != nil { 100 t.Fatalf("Failed to lock account: %v", err) 101 } 102 //使用多个自动取消的授权签署交易 103 if err := ks.TimedUnlock(signer, "Signer password", time.Second); err != nil { 104 t.Fatalf("Failed to time unlock account: %v", err) 105 } 106 if _, err := ks.SignTx(signer, tx, chain); err != nil { 107 t.Fatalf("Failed to sign with time unlocked account: %v", err) 108 } 109 }