github.com/avahowell/sia@v0.5.1-beta.0.20160524050156-83dcc3d37c94/types/validtransaction_bench_test.go (about)

     1  package types
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/NebulousLabs/Sia/crypto"
     7  	"github.com/NebulousLabs/Sia/encoding"
     8  )
     9  
    10  // BenchmarkStandaloneValid times how long it takes to verify a single
    11  // large transaction, with a certain number of signatures
    12  func BenchmarkStandaloneValid(b *testing.B) {
    13  	numSigs := 7
    14  	// make a transaction numSigs with valid inputs with valid signatures
    15  	b.ReportAllocs()
    16  	txn := Transaction{}
    17  	sk := make([]crypto.SecretKey, numSigs)
    18  	pk := make([]crypto.PublicKey, numSigs)
    19  	for i := 0; i < numSigs; i++ {
    20  		s, p, err := crypto.GenerateKeyPair()
    21  		if err != nil {
    22  			b.Fatal(err)
    23  		}
    24  		sk[i] = s
    25  		pk[i] = p
    26  
    27  		uc := UnlockConditions{
    28  			PublicKeys: []SiaPublicKey{
    29  				{Algorithm: SignatureEd25519, Key: pk[i][:]},
    30  			},
    31  			SignaturesRequired: 1,
    32  		}
    33  		txn.SiacoinInputs = append(txn.SiacoinInputs, SiacoinInput{
    34  			UnlockConditions: uc,
    35  		})
    36  		copy(txn.SiacoinInputs[i].ParentID[:], encoding.Marshal(i))
    37  		txn.TransactionSignatures = append(txn.TransactionSignatures, TransactionSignature{
    38  			CoveredFields: CoveredFields{WholeTransaction: true},
    39  		})
    40  		copy(txn.TransactionSignatures[i].ParentID[:], encoding.Marshal(i))
    41  	}
    42  	// Transaction must be constructed before signing
    43  	for i := 0; i < numSigs; i++ {
    44  		sigHash := txn.SigHash(i)
    45  		sig0, err := crypto.SignHash(sigHash, sk[i])
    46  		if err != nil {
    47  			b.Fatal(err)
    48  		}
    49  		txn.TransactionSignatures[i].Signature = sig0[:]
    50  	}
    51  
    52  	b.ResetTimer()
    53  	for i := 0; i < b.N; i++ {
    54  		err := txn.StandaloneValid(10)
    55  		if err != nil {
    56  			b.Fatal(err)
    57  		}
    58  	}
    59  }