gitlab.com/SiaPrime/SiaPrime@v1.4.1/types/validtransaction_bench_test.go (about)

     1  package types
     2  
     3  import (
     4  	"testing"
     5  
     6  	"gitlab.com/SiaPrime/SiaPrime/crypto"
     7  	"gitlab.com/SiaPrime/SiaPrime/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 := crypto.GenerateKeyPair()
    21  		sk[i] = s
    22  		pk[i] = p
    23  
    24  		uc := UnlockConditions{
    25  			PublicKeys: []SiaPublicKey{
    26  				{Algorithm: SignatureEd25519, Key: pk[i][:]},
    27  			},
    28  			SignaturesRequired: 1,
    29  		}
    30  		txn.SiacoinInputs = append(txn.SiacoinInputs, SiacoinInput{
    31  			UnlockConditions: uc,
    32  		})
    33  		copy(txn.SiacoinInputs[i].ParentID[:], encoding.Marshal(i))
    34  		txn.TransactionSignatures = append(txn.TransactionSignatures, TransactionSignature{
    35  			CoveredFields: CoveredFields{WholeTransaction: true},
    36  		})
    37  		copy(txn.TransactionSignatures[i].ParentID[:], encoding.Marshal(i))
    38  	}
    39  	// Transaction must be constructed before signing
    40  	for i := 0; i < numSigs; i++ {
    41  		sigHash := txn.SigHash(i, 0)
    42  		sig0 := crypto.SignHash(sigHash, sk[i])
    43  		txn.TransactionSignatures[i].Signature = sig0[:]
    44  	}
    45  
    46  	b.ResetTimer()
    47  	for i := 0; i < b.N; i++ {
    48  		err := txn.StandaloneValid(10)
    49  		if err != nil {
    50  			b.Fatal(err)
    51  		}
    52  	}
    53  }