mirror of https://github.com/poanetwork/gecko.git
70 lines
1.4 KiB
Go
70 lines
1.4 KiB
Go
package spchainvm
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/ava-labs/gecko/snow"
|
|
"github.com/ava-labs/gecko/utils/crypto"
|
|
)
|
|
|
|
func genTxs(numTxs int, offset uint64, b *testing.B) []*Tx {
|
|
ctx := snow.DefaultContextTest()
|
|
builder := Builder{
|
|
NetworkID: ctx.NetworkID,
|
|
ChainID: ctx.ChainID,
|
|
}
|
|
factory := crypto.FactorySECP256K1R{}
|
|
|
|
destKey, err := factory.NewPrivateKey()
|
|
if err != nil {
|
|
b.Fatal(err)
|
|
}
|
|
dest := destKey.PublicKey().Address()
|
|
|
|
txs := make([]*Tx, numTxs)[:0]
|
|
for i := 1; i <= numTxs; i++ {
|
|
keyIntf, err := factory.NewPrivateKey()
|
|
if err != nil {
|
|
b.Fatal(err)
|
|
}
|
|
sk := keyIntf.(*crypto.PrivateKeySECP256K1R)
|
|
|
|
tx, err := builder.NewTx(sk, uint64(i)+offset, uint64(i)+offset, dest)
|
|
if err != nil {
|
|
b.Fatal(err)
|
|
}
|
|
txs = append(txs, tx)
|
|
}
|
|
return txs
|
|
}
|
|
|
|
func verifyTxs(txs []*Tx, b *testing.B) {
|
|
ctx := snow.DefaultContextTest()
|
|
factory := crypto.FactorySECP256K1R{}
|
|
for _, tx := range txs {
|
|
if err := tx.verify(ctx, &factory); err != nil {
|
|
b.Fatal(err)
|
|
}
|
|
|
|
// reset the tx so that it won't be cached
|
|
tx.pubkey = nil
|
|
tx.startedVerification = false
|
|
tx.finishedVerification = false
|
|
tx.verificationErr = nil
|
|
}
|
|
}
|
|
|
|
// BenchmarkTxVerify runs the benchmark of transaction verification
|
|
func BenchmarkTxVerify(b *testing.B) {
|
|
txs := genTxs(
|
|
/*numTxs=*/ 1,
|
|
/*initialOffset=*/ 0,
|
|
/*testing=*/ b,
|
|
)
|
|
b.ResetTimer()
|
|
|
|
for n := 0; n < b.N; n++ {
|
|
verifyTxs(txs, b)
|
|
}
|
|
}
|