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 }