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 }