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  }