// Copyright (c) 2018-2019 The Decred developers // Use of this source code is governed by an ISC // license that can be found in the LICENSE file. package txscript import ( "bytes" "fmt" "io/ioutil" "testing" "github.com/btcsuite/btcd/wire" ) var ( // manyInputsBenchTx is a transaction that contains a lot of inputs which is // useful for benchmarking signature hash calculation. manyInputsBenchTx wire.MsgTx // A mock previous output script to use in the signing benchmark. prevOutScript = hexToBytes("a914f5916158e3e2c4551c1796708db8367207ed13bb87") ) func init() { // tx 620f57c92cf05a7f7e7f7d28255d5f7089437bc48e34dcfebf7751d08b7fb8f5 txHex, err := ioutil.ReadFile("data/many_inputs_tx.hex") if err != nil { panic(fmt.Sprintf("unable to read benchmark tx file: %v", err)) } txBytes := hexToBytes(string(txHex)) err = manyInputsBenchTx.Deserialize(bytes.NewReader(txBytes)) if err != nil { panic(err) } } // BenchmarkCalcSigHash benchmarks how long it takes to calculate the signature // hashes for all inputs of a transaction with many inputs. func BenchmarkCalcSigHash(b *testing.B) { b.ReportAllocs() for i := 0; i < b.N; i++ { for j := 0; j < len(manyInputsBenchTx.TxIn); j++ { _, err := CalcSignatureHash(prevOutScript, SigHashAll, &manyInputsBenchTx, j) if err != nil { b.Fatalf("failed to calc signature hash: %v", err) } } } }