1 package integrationTest
10 dbm "github.com/tendermint/tmlibs/db"
12 "github.com/bytom/blockchain/account"
13 "github.com/bytom/blockchain/pseudohsm"
14 "github.com/bytom/blockchain/txbuilder"
15 "github.com/bytom/blockchain/txdb"
16 "github.com/bytom/consensus"
17 "github.com/bytom/crypto/ed25519/chainkd"
18 "github.com/bytom/protocol"
19 "github.com/bytom/protocol/bc"
20 "github.com/bytom/protocol/bc/legacy"
21 "github.com/bytom/protocol/validation"
22 "github.com/bytom/protocol/vm"
25 func TestP2PKH(t *testing.T) {
26 dirPath, err := ioutil.TempDir(".", "")
30 defer os.RemoveAll(dirPath)
32 testDB := dbm.NewDB("testdb", "leveldb", "temp")
33 defer os.RemoveAll("temp")
35 chain, err := mockChain(testDB)
40 accountManager := account.NewManager(testDB, chain)
41 hsm, err := pseudohsm.New(dirPath)
46 xpub, err := hsm.XCreate("test_pub", "password")
51 testAccount, err := accountManager.Create(nil, []chainkd.XPub{xpub.XPub}, 1, "testAccount", nil, "")
56 controlProg, err := accountManager.CreateP2PKH(nil, testAccount.Signer.ID, false, time.Now())
61 utxo := &account.UTXO{}
62 utxo.OutputID = bc.Hash{V0: 1}
63 utxo.SourceID = bc.Hash{V0: 2}
64 utxo.AssetID = *consensus.BTMAssetID
65 utxo.Amount = 1000000000
67 utxo.ControlProgram = controlProg.ControlProgram
68 utxo.AccountID = controlProg.AccountID
69 utxo.Address = controlProg.Address
70 utxo.ControlProgramIndex = controlProg.KeyIndex
71 txInput, sigInst, err := account.UtxoToInputs(testAccount.Signer, utxo, nil)
76 b := txbuilder.NewBuilder(time.Now())
77 b.AddInput(txInput, sigInst)
78 out := legacy.NewTxOutput(*consensus.BTMAssetID, 100, []byte{byte(vm.OP_FAIL)}, nil)
80 tpl, tx, err := b.Build()
85 err = txbuilder.Sign(nil, tpl, nil, "password", func(_ context.Context, xpub chainkd.XPub, path [][]byte, data [32]byte, password string) ([]byte, error) {
86 sigBytes, err := hsm.XSign(xpub, path, data[:], password)
97 BlockHeader: &bc.BlockHeader{Height: 1},
99 if _, err = validation.ValidateTx(legacy.MapTx(tx), bcBlock); err != nil {
104 func mockChain(testDB dbm.DB) (*protocol.Chain, error) {
105 store := txdb.NewStore(testDB)
106 txPool := protocol.NewTxPool()
107 chain, err := protocol.NewChain(bc.Hash{}, store, txPool)