11 dbm "github.com/tendermint/tmlibs/db"
13 "github.com/bytom/blockchain/account"
14 "github.com/bytom/blockchain/asset"
15 "github.com/bytom/blockchain/pseudohsm"
16 "github.com/bytom/blockchain/txbuilder"
17 "github.com/bytom/blockchain/txdb"
18 cfg "github.com/bytom/config"
19 "github.com/bytom/crypto/ed25519/chainkd"
20 "github.com/bytom/protocol"
21 "github.com/bytom/protocol/bc"
24 const dirPath = "pseudohsm/testdata/pseudo"
26 func TestHSM(t *testing.T) {
27 ctx := context.Background()
30 defer os.RemoveAll(dir)
32 config := cfg.DefaultConfig()
33 tc := dbm.NewDB("txdb", config.DBBackend, dir)
34 store := txdb.NewStore(tc)
36 var accounts *account.Manager
37 var assets *asset.Registry
39 txPool := protocol.NewTxPool()
40 chain, err := protocol.NewChain(bc.Hash{}, store, txPool)
45 walletDB := dbm.NewDB("wallet", config.DBBackend, dir)
46 accounts = account.NewManager(walletDB, chain)
47 assets = asset.NewRegistry(walletDB, chain)
49 hsm, err := pseudohsm.New(dirPath)
53 xpub1, err := hsm.XCreate("xpub1", "password")
57 xpub2, err := hsm.XCreate("xpub2", "password")
62 acct1, err := accounts.Create(ctx, []chainkd.XPub{xpub1.XPub}, 1, "acc1", nil)
66 acct2, err := accounts.Create(ctx, []chainkd.XPub{xpub2.XPub}, 1, "acc2", nil)
71 assetDef1 := map[string]interface{}{"foo": 1}
72 assetDef2 := map[string]interface{}{"foo": 2}
74 asset1, err := assets.Define([]chainkd.XPub{xpub1.XPub}, 1, assetDef1, "foo1", nil)
78 asset2, err := assets.Define([]chainkd.XPub{xpub2.XPub}, 1, assetDef2, "foo2", nil)
83 issue1 := txbuilder.Action(assets.NewIssueAction(bc.AssetAmount{AssetId: &asset1.AssetID, Amount: 100}, nil))
84 issue2 := txbuilder.Action(assets.NewIssueAction(bc.AssetAmount{AssetId: &asset2.AssetID, Amount: 200}, nil))
85 spend1 := accounts.NewControlAction(bc.AssetAmount{AssetId: &asset1.AssetID, Amount: 100}, acct1.ID, nil)
86 spend2 := accounts.NewControlAction(bc.AssetAmount{AssetId: &asset2.AssetID, Amount: 200}, acct2.ID, nil)
88 tmpl, err := txbuilder.Build(ctx, nil, []txbuilder.Action{issue1, issue2, spend1, spend2}, time.Now().Add(time.Minute))
92 //go accounts.ProcessBlocks(ctx)
94 err = txbuilder.Sign(ctx, tmpl, nil, []string{"password"}, func(_ context.Context, xpub chainkd.XPub, path [][]byte, data [32]byte, password string) ([]byte, error) {
95 sigBytes, err := hsm.XSign(xpub, path, data[:], password)
102 fmt.Printf("###data: %v#####", *tmpl)
103 err = hsm.XDelete(xpub1.XPub, "password")
107 err = hsm.XDelete(xpub2.XPub, "password")
113 func tmpManager(t *testing.T) string {
114 d, err := ioutil.TempDir("", "bytom-keystore-test")