Commit a3a612d8 authored by Ubuntu's avatar Ubuntu

add tps

parent 44089981
This diff is collapsed.
This diff is collapsed.
...@@ -3,9 +3,12 @@ package benchmark_test ...@@ -3,9 +3,12 @@ package benchmark_test
import ( import (
"fmt" "fmt"
"math" "math"
"math/big"
"sort" "sort"
"testing" "testing"
"github.com/ethereum/go-ethereum/crypto"
) )
//date && go test -v -run BenchmarkHello -bench=BenchmarkHello -benchtime=3s -benchmem && date //date && go test -v -run BenchmarkHello -bench=BenchmarkHello -benchtime=3s -benchmem && date
...@@ -18,25 +21,38 @@ func BenchmarkHello(b *testing.B) { ...@@ -18,25 +21,38 @@ func BenchmarkHello(b *testing.B) {
// //b.Logf("begin time: %s \n", time.Now()) // //b.Logf("begin time: %s \n", time.Now())
// b.ResetTimer() // b.ResetTimer()
// for i := 0; i < b.N; i++ {
// //b.Logf("idx %d time: %s \n", i, time.Now())
// fmt.Sprintf("hello")
// }
//b.StopTimer() local, _ := crypto.HexToECDSA("FD5CC6F5E7E2805E920AC5DC83D5AF1106F9C92F0C04F9D5E1FD4261B4B4464A")
//b.Logf("end time: %s \n", time.Now()) // publicKey := local.Public()
// publicKeyECDSA, _ := publicKey.(*ecdsa.PublicKey)
//fromAddr := crypto.PubkeyToAddress(*publicKeyECDSA)
var compares int64 remote, _ := crypto.GenerateKey()
tx, err := pricedTransaction(crypto.PubkeyToAddress(remote.PublicKey), 0, 100000, big.NewInt(1), local)
if err != nil {
b.Fatal(err)
}
for i := 0; i < b.N; i++ { for i := 0; i < b.N; i++ {
s := []int{5, 4, 3, 2, 1} //b.Logf("idx %d time: %s \n", i, time.Now())
sort.Slice(s, func(i, j int) bool { fmt.Sprintf("%v", tx)
compares++
return s[i] < s[j]
})
} }
//b.StopTimer()
//b.Logf("end time: %s \n", time.Now())
// var compares int64
// for i := 0; i < b.N; i++ {
// s := []int{5, 4, 3, 2, 1}
// sort.Slice(s, func(i, j int) bool {
// compares++
// return s[i] < s[j]
// })
// }
// This metric is per-operation, so divide by b.N and // This metric is per-operation, so divide by b.N and
// report it as a "/op" unit. // report it as a "/op" unit.
b.ReportMetric(float64(compares)/float64(b.N), "compares/op") // b.ReportMetric(float64(compares)/float64(b.N), "compares/op")
} }
func BenchmarkCalculate(b *testing.B) { func BenchmarkCalculate(b *testing.B) {
......
...@@ -21,57 +21,71 @@ ...@@ -21,57 +21,71 @@
<tbody> <tbody>
<tr><th><th colspan='2' class='metric'>time/op<th>delta <tr><th><th colspan='2' class='metric'>time/op<th>delta
<tr class='worse'><td>Repeated/input_size_100-8<td>208µs ± 3%<td>213µs ± 3%<td class='delta'>+2.21%<td class='note'> <tr class='worse'><td>Repeated/input_size_100-8<td>211µs ± 4%<td>214µs ± 5%<td class='delta'>+1.35%<td class='note'>
<tr class='worse'><td>Repeated/input_size_200-8<td>273µs ± 2%<td>280µs ± 6%<td class='delta'>+2.53%<td class='note'> <tr class='worse'><td>Repeated/input_size_200-8<td>284µs ± 3%<td>284µs ± 4%<td class='delta'>+0.15%<td class='note'>
<tr class='worse'><td>Repeated/input_size_500-8<td>490µs ± 2%<td>513µs ± 2%<td class='delta'>+4.75%<td class='note'> <tr class='worse'><td>Repeated/input_size_500-8<td>521µs ± 3%<td>524µs ± 4%<td class='delta'>+0.48%<td class='note'>
<tr class='worse'><td>Repeated/input_size_1000-8<td>841µs ± 2%<td>883µs ± 2%<td class='delta'>+5.02%<td class='note'> <tr class='worse'><td>Repeated/input_size_1000-8<td>1.00ms ±11%<td>1.04ms ± 4%<td class='delta'>+3.93%<td class='note'>
<tr class='worse'><td>Repeated/input_size_2000-8<td>1.55ms ± 1%<td>1.64ms ± 2%<td class='delta'>+5.26%<td class='note'> <tr class='worse'><td>Repeated/input_size_2000-8<td>1.78ms ±14%<td>1.95ms ± 2%<td class='delta'>+9.25%<td class='note'>
<tr class='worse'><td>Repeated/input_size_5000-8<td>3.65ms ± 1%<td>3.87ms ± 1%<td class='delta'>+5.83%<td class='note'> <tr class='worse'><td>Repeated/input_size_5000-8<td>3.99ms ± 3%<td>4.58ms ± 2%<td class='delta'>+14.91%<td class='note'>
<tr class='worse'><td>Repeated/input_size_10000-8<td>7.05ms ± 1%<td>7.51ms ± 1%<td class='delta'>+6.53%<td class='note'> <tr class='worse'><td>Repeated/input_size_10000-8<td>7.72ms ± 2%<td>8.86ms ± 3%<td class='delta'>+14.69%<td class='note'>
<tr class='worse'><td>Repeated/input_size_20000-8<td>13.7ms ± 2%<td>14.5ms ± 1%<td class='delta'>+5.94%<td class='note'> <tr class='worse'><td>Repeated/input_size_20000-8<td>14.9ms ± 4%<td>17.0ms ± 2%<td class='delta'>+13.45%<td class='note'>
<tr class='unchanged'><td>[Geo mean]<td>1.38ms <td>1.44ms <td class='delta'>+4.75%<td class='note'> <tr class='unchanged'><td>[Geo mean]<td>1.50ms <td>1.61ms <td class='delta'>+7.10%<td class='note'>
<tr><td>&nbsp; <tr><td>&nbsp;
</tbody> </tbody>
<tbody> <tbody>
<tr><th><th colspan='2' class='metric'>speed<th>delta <tr><th><th colspan='2' class='metric'>speed<th>delta
<tr class='worse'><td>Repeated/input_size_100-8<td>42.3MB/s ± 3%<td>41.4MB/s ± 3%<td class='delta'>−2.15%<td class='note'> <tr class='worse'><td>Repeated/input_size_100-8<td>64.2MB/s ± 4%<td>63.3MB/s ± 5%<td class='delta'>−1.31%<td class='note'>
<tr class='worse'><td>Repeated/input_size_200-8<td>64.5MB/s ± 2%<td>62.9MB/s ± 5%<td class='delta'>−2.41%<td class='note'> <tr class='worse'><td>Repeated/input_size_200-8<td>95.3MB/s ± 3%<td>95.2MB/s ± 4%<td class='delta'>−0.15%<td class='note'>
<tr class='worse'><td>Repeated/input_size_500-8<td>89.8MB/s ± 2%<td>85.7MB/s ± 2%<td class='delta'>−4.54%<td class='note'> <tr class='worse'><td>Repeated/input_size_500-8<td>130MB/s ± 3%<td>129MB/s ± 3%<td class='delta'>−0.45%<td class='note'>
<tr class='worse'><td>Repeated/input_size_1000-8<td>105MB/s ± 2%<td>100MB/s ± 2%<td class='delta'>−4.79%<td class='note'> <tr class='worse'><td>Repeated/input_size_1000-8<td>136MB/s ±12%<td>130MB/s ± 4%<td class='delta'>−4.15%<td class='note'>
<tr class='worse'><td>Repeated/input_size_2000-8<td>113MB/s ± 1%<td>108MB/s ± 2%<td class='delta'>−4.99%<td class='note'> <tr class='worse'><td>Repeated/input_size_2000-8<td>153MB/s ±13%<td>139MB/s ± 2%<td class='delta'>−8.97%<td class='note'>
<tr class='worse'><td>Repeated/input_size_5000-8<td>120MB/s ± 1%<td>114MB/s ± 1%<td class='delta'>−5.51%<td class='note'> <tr class='worse'><td>Repeated/input_size_5000-8<td>169MB/s ± 2%<td>147MB/s ± 3%<td class='delta'>−13.15%<td class='note'>
<tr class='worse'><td>Repeated/input_size_10000-8<td>125MB/s ± 1%<td>117MB/s ± 1%<td class='delta'>−6.13%<td class='note'> <tr class='worse'><td>Repeated/input_size_10000-8<td>175MB/s ± 4%<td>152MB/s ± 3%<td class='delta'>−12.70%<td class='note'>
<tr class='worse'><td>Repeated/input_size_20000-8<td>129MB/s ± 2%<td>122MB/s ± 1%<td class='delta'>−5.62%<td class='note'> <tr class='worse'><td>Repeated/input_size_20000-8<td>179MB/s ±10%<td>159MB/s ± 2%<td class='delta'>−11.06%<td class='note'>
<tr class='unchanged'><td>[Geo mean]<td>93.1MB/s <td>88.9MB/s <td class='delta'>−4.53%<td class='note'> <tr class='unchanged'><td>[Geo mean]<td>131MB/s <td>122MB/s <td class='delta'>−6.64%<td class='note'>
<tr><td>&nbsp;
</tbody>
<tbody>
<tr><th><th colspan='2' class='metric'>tps<th>delta
<tr class='better'><td>Repeated/input_size_100-8<td>4.74k ± 4%<td>4.68k ± 5%<td class='delta'>−1.32%<td class='note'>
<tr class='better'><td>Repeated/input_size_200-8<td>3.52k ± 3%<td>3.52k ± 4%<td class='delta'>−0.15%<td class='note'>
<tr class='better'><td>Repeated/input_size_500-8<td>1.92k ± 3%<td>1.91k ± 3%<td class='delta'>−0.48%<td class='note'>
<tr class='better'><td>Repeated/input_size_1000-8<td>1.00k ±12%<td>0.96k ± 4%<td class='delta'>−4.15%<td class='note'>
<tr class='better'><td>Repeated/input_size_2000-8<td>565 ±13%<td>514 ± 2%<td class='delta'>−8.97%<td class='note'>
<tr class='better'><td>Repeated/input_size_5000-8<td>251 ± 2%<td>218 ± 3%<td class='delta'>−13.15%<td class='note'>
<tr class='better'><td>Repeated/input_size_10000-8<td>129 ± 4%<td>113 ± 3%<td class='delta'>−12.69%<td class='note'>
<tr class='better'><td>Repeated/input_size_20000-8<td>66.4 ±10%<td>59.0 ± 2%<td class='delta'>−11.09%<td class='note'>
<tr class='unchanged'><td>[Geo mean]<td>667 <td>623 <td class='delta'>−6.64%<td class='note'>
<tr><td>&nbsp; <tr><td>&nbsp;
</tbody> </tbody>
<tbody> <tbody>
<tr><th><th colspan='2' class='metric'>alloc/op<th>delta <tr><th><th colspan='2' class='metric'>alloc/op<th>delta
<tr class='worse'><td>Repeated/input_size_100-8<td>226kB ± 0%<td>240kB ± 0%<td class='delta'>+6.07%<td class='note'> <tr class='worse'><td>Repeated/input_size_100-8<td>254kB ± 0%<td>254kB ± 0%<td class='delta'>+0.00%<td class='note'>
<tr class='worse'><td>Repeated/input_size_200-8<td>310kB ± 0%<td>337kB ± 0%<td class='delta'>+8.84%<td class='note'> <tr class='worse'><td>Repeated/input_size_200-8<td>365kB ± 0%<td>365kB ± 0%<td class='delta'>+0.00%<td class='note'>
<tr class='worse'><td>Repeated/input_size_500-8<td>554kB ± 0%<td>627kB ± 0%<td class='delta'>+13.35%<td class='note'> <tr class='worse'><td>Repeated/input_size_500-8<td>702kB ± 0%<td>702kB ± 0%<td class='delta'>+0.00%<td class='note'>
<tr class='worse'><td>Repeated/input_size_1000-8<td>947kB ± 0%<td>1087kB ± 0%<td class='delta'>+14.72%<td class='note'> <tr class='better'><td>Repeated/input_size_1000-8<td>1.23MB ± 0%<td>1.23MB ± 0%<td class='delta'>−0.00%<td class='note'>
<tr class='worse'><td>Repeated/input_size_2000-8<td>1.74MB ± 0%<td>2.01MB ± 0%<td class='delta'>+15.59%<td class='note'> <tr class='worse'><td>Repeated/input_size_2000-8<td>2.28MB ± 0%<td>2.28MB ± 0%<td class='delta'>+0.00%<td class='note'>
<tr class='worse'><td>Repeated/input_size_5000-8<td>4.11MB ± 0%<td>4.80MB ± 0%<td class='delta'>+16.54%<td class='note'> <tr class='worse'><td>Repeated/input_size_5000-8<td>5.48MB ± 0%<td>5.48MB ± 0%<td class='delta'>+0.00%<td class='note'>
<tr class='worse'><td>Repeated/input_size_10000-8<td>8.07MB ± 0%<td>9.42MB ± 0%<td class='delta'>+16.76%<td class='note'> <tr class='worse'><td>Repeated/input_size_10000-8<td>10.8MB ± 0%<td>10.8MB ± 0%<td class='delta'>+0.00%<td class='note'>
<tr class='worse'><td>Repeated/input_size_20000-8<td>16.0MB ± 0%<td>18.7MB ± 0%<td class='delta'>+16.92%<td class='note'> <tr class='worse'><td>Repeated/input_size_20000-8<td>21.4MB ± 0%<td>21.4MB ± 0%<td class='delta'>+0.00%<td class='note'>
<tr class='unchanged'><td>[Geo mean]<td>1.55MB <td>1.76MB <td class='delta'>+13.53%<td class='note'> <tr class='unchanged'><td>[Geo mean]<td>1.97MB <td>1.97MB <td class='delta'>+0.00%<td class='note'>
<tr><td>&nbsp; <tr><td>&nbsp;
</tbody> </tbody>
<tbody> <tbody>
<tr><th><th colspan='2' class='metric'>allocs/op<th>delta <tr><th><th colspan='2' class='metric'>allocs/op<th>delta
<tr class='worse'><td>Repeated/input_size_100-8<td>2.11k ± 0%<td>2.11k ± 0%<td class='delta'>+0.11%<td class='note'> <tr class='unchanged'><td>Repeated/input_size_100-8<td>2.12k ± 0%<td>2.12k ± 0%<td class='delta'>0.00%<td class='note'>
<tr class='worse'><td>Repeated/input_size_200-8<td>3.61k ± 0%<td>3.61k ± 0%<td class='delta'>+0.08%<td class='note'> <tr class='unchanged'><td>Repeated/input_size_200-8<td>3.62k ± 0%<td>3.62k ± 0%<td class='delta'>0.00%<td class='note'>
<tr class='worse'><td>Repeated/input_size_500-8<td>8.13k ± 0%<td>8.13k ± 0%<td class='delta'>+0.05%<td class='note'> <tr class='unchanged'><td>Repeated/input_size_500-8<td>8.14k ± 0%<td>8.14k ± 0%<td class='delta'>0.00%<td class='note'>
<tr class='worse'><td>Repeated/input_size_1000-8<td>15.6k ± 0%<td>15.6k ± 0%<td class='delta'>+0.03%<td class='note'> <tr class='better'><td>Repeated/input_size_1000-8<td>15.6k ± 0%<td>15.6k ± 0%<td class='delta'>−0.00%<td class='note'>
<tr class='worse'><td>Repeated/input_size_2000-8<td>30.7k ± 0%<td>30.7k ± 0%<td class='delta'>+0.01%<td class='note'> <tr class='better'><td>Repeated/input_size_2000-8<td>30.7k ± 0%<td>30.7k ± 0%<td class='delta'>−0.00%<td class='note'>
<tr class='worse'><td>Repeated/input_size_5000-8<td>75.7k ± 0%<td>75.7k ± 0%<td class='delta'>+0.01%<td class='note'> <tr class='worse'><td>Repeated/input_size_5000-8<td>75.7k ± 0%<td>75.7k ± 0%<td class='delta'>+0.00%<td class='note'>
<tr class='worse'><td>Repeated/input_size_10000-8<td>151k ± 0%<td>151k ± 0%<td class='delta'>+0.00%<td class='note'> <tr class='worse'><td>Repeated/input_size_10000-8<td>151k ± 0%<td>151k ± 0%<td class='delta'>+0.00%<td class='note'>
<tr class='worse'><td>Repeated/input_size_20000-8<td>301k ± 0%<td>301k ± 0%<td class='delta'>+0.00%<td class='note'> <tr class='worse'><td>Repeated/input_size_20000-8<td>301k ± 0%<td>301k ± 0%<td class='delta'>+0.00%<td class='note'>
<tr class='unchanged'><td>[Geo mean]<td>23.8k <td>23.8k <td class='delta'>+0.04%<td class='note'> <tr class='unchanged'><td>[Geo mean]<td>23.8k <td>23.8k <td class='delta'>+0.00%<td class='note'>
<tr><td>&nbsp; <tr><td>&nbsp;
</tbody> </tbody>
......
...@@ -4,6 +4,7 @@ import ( ...@@ -4,6 +4,7 @@ import (
"context" "context"
"crypto/ecdsa" "crypto/ecdsa"
"fmt" "fmt"
"testing" "testing"
"time" "time"
...@@ -14,6 +15,10 @@ import ( ...@@ -14,6 +15,10 @@ import (
"github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/crypto"
"google.golang.org/grpc" "google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure" "google.golang.org/grpc/credentials/insecure"
//"google.golang.org/grpc/encoding/proto"
//"github.com/protocolbuffers/protobuf-go/proto"
"google.golang.org/protobuf/proto"
"google.golang.org/protobuf/types/known/anypb" "google.golang.org/protobuf/types/known/anypb"
) )
...@@ -56,6 +61,7 @@ func RepeatedEthTx(txl int, b *testing.B) { ...@@ -56,6 +61,7 @@ func RepeatedEthTx(txl int, b *testing.B) {
b.Fatal(err) b.Fatal(err)
} }
beginTime := time.Now()
b.ResetTimer() b.ResetTimer()
b.RunParallel(func(pb *testing.PB) { b.RunParallel(func(pb *testing.PB) {
...@@ -100,9 +106,17 @@ func RepeatedEthTx(txl int, b *testing.B) { ...@@ -100,9 +106,17 @@ func RepeatedEthTx(txl int, b *testing.B) {
txs = append(txs, &base.TransactionEth{Tx: &base.EthTx{Inner: &inner}}) txs = append(txs, &base.TransactionEth{Tx: &base.EthTx{Inner: &inner}})
} }
b.SetBytes(88 * int64(txl)) req := &base.RepeatedEthTx{Txs: txs}
res, err := c.SendRepeatedEthTx(ctx, &base.RepeatedEthTx{Txs: txs}) out, err := proto.Marshal(req)
if err != nil {
b.Fatal(err)
}
b.SetBytes(int64(len(out)))
res, err := c.SendRepeatedEthTx(ctx, req)
if err != nil { if err != nil {
b.Fatal(err) b.Fatal(err)
...@@ -119,6 +133,8 @@ func RepeatedEthTx(txl int, b *testing.B) { ...@@ -119,6 +133,8 @@ func RepeatedEthTx(txl int, b *testing.B) {
// }) // })
} }
}) })
b.ReportMetric(float64(b.N)/float64(time.Since(beginTime).Seconds()), "tps")
} }
func RepeatedTxEthAsAny(txl int, b *testing.B) { func RepeatedTxEthAsAny(txl int, b *testing.B) {
...@@ -140,6 +156,8 @@ func RepeatedTxEthAsAny(txl int, b *testing.B) { ...@@ -140,6 +156,8 @@ func RepeatedTxEthAsAny(txl int, b *testing.B) {
//} //}
// once.Do(onceFunc) // once.Do(onceFunc)
beginTime := time.Now()
b.ResetTimer() b.ResetTimer()
// The loop body is executed b.N times total across all goroutines. // The loop body is executed b.N times total across all goroutines.
...@@ -185,14 +203,22 @@ func RepeatedTxEthAsAny(txl int, b *testing.B) { ...@@ -185,14 +203,22 @@ func RepeatedTxEthAsAny(txl int, b *testing.B) {
txs = append(txs, &base.TransactionEth{Tx: &base.EthTx{Inner: &inner}}) txs = append(txs, &base.TransactionEth{Tx: &base.EthTx{Inner: &inner}})
} }
b.SetBytes(88 * int64(txl))
ethTxAsAny, err := anypb.New(&base.RepeatedEthTx{Txs: txs}) ethTxAsAny, err := anypb.New(&base.RepeatedEthTx{Txs: txs})
if err != nil { if err != nil {
b.Fatal(err) b.Fatal(err)
} }
res, err := c.SendTxAsAny(ctx, &base.Transaction{Tx: ethTxAsAny}) req := &base.Transaction{Tx: ethTxAsAny}
out, err := proto.Marshal(req)
if err != nil {
b.Fatal(err)
}
b.SetBytes(int64(len(out)))
res, err := c.SendTxAsAny(ctx, req)
if err != nil { if err != nil {
b.Fatal(err) b.Fatal(err)
...@@ -210,6 +236,9 @@ func RepeatedTxEthAsAny(txl int, b *testing.B) { ...@@ -210,6 +236,9 @@ func RepeatedTxEthAsAny(txl int, b *testing.B) {
} }
}) })
b.ReportMetric(float64(b.N)/float64(time.Since(beginTime).Seconds()), "tps")
} }
// go test -v -run BenchmarkAnyTxEth -bench BenchmarkRepeated -benchmem -count 5 | tee old.txt // go test -v -run BenchmarkAnyTxEth -bench BenchmarkRepeated -benchmem -count 5 | tee old.txt
...@@ -228,10 +257,11 @@ benchstat -geomean -delta-test none -html RepeatedEthTx.txt RepeatedTxEthAsAny.t ...@@ -228,10 +257,11 @@ benchstat -geomean -delta-test none -html RepeatedEthTx.txt RepeatedTxEthAsAny.t
func BenchmarkRepeated(b *testing.B) { func BenchmarkRepeated(b *testing.B) {
for _, v := range tableTx { for _, v := range tableTx {
b.Run(fmt.Sprintf("input_size_%d", v.input), func(b *testing.B) { b.Run(fmt.Sprintf("input_size_%d", v.input), func(b *testing.B) {
//go test -v -run BenchmarkAnyTxEth -bench BenchmarkRepeated -benchmem -count 10 | tee RepeatedEthTx.txt //go test -v -run BenchmarkAnyTxEth -bench BenchmarkRepeated -benchmem -count 30 | tee RepeatedEthTx.txt
//RepeatedEthTx(v.input, b) //RepeatedEthTx(v.input, b)
//go test -v -run BenchmarkAnyTxEth -bench BenchmarkRepeated -benchmem -count 10 | tee RepeatedTxEthAsAny.txt //go test -v -run BenchmarkAnyTxEth -bench BenchmarkRepeated -benchmem -count 30 | tee RepeatedTxEthAsAny.txt
RepeatedTxEthAsAny(v.input, b) RepeatedTxEthAsAny(v.input, b)
}) })
} }
} }
......
package benchmark_test package benchmark_test
import ( import (
"bytes"
"context" "context"
"crypto/ecdsa" "crypto/ecdsa"
"encoding/gob"
"errors" "errors"
"fmt" "fmt"
"time" "time"
...@@ -14,6 +16,7 @@ import ( ...@@ -14,6 +16,7 @@ import (
"google.golang.org/grpc" "google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure" "google.golang.org/grpc/credentials/insecure"
"google.golang.org/protobuf/proto"
"google.golang.org/protobuf/types/known/anypb" "google.golang.org/protobuf/types/known/anypb"
"google.golang.org/protobuf/types/known/emptypb" "google.golang.org/protobuf/types/known/emptypb"
...@@ -311,9 +314,9 @@ func TestAnyTx(t *testing.T) { ...@@ -311,9 +314,9 @@ func TestAnyTx(t *testing.T) {
func TestSizeOf(t *testing.T) { func TestSizeOf(t *testing.T) {
local, _ := crypto.HexToECDSA("FD5CC6F5E7E2805E920AC5DC83D5AF1106F9C92F0C04F9D5E1FD4261B4B4464A") local, _ := crypto.HexToECDSA("FD5CC6F5E7E2805E920AC5DC83D5AF1106F9C92F0C04F9D5E1FD4261B4B4464A")
//publicKey := local.Public() publicKey := local.Public()
//publicKeyECDSA, _ := publicKey.(*ecdsa.PublicKey) publicKeyECDSA, _ := publicKey.(*ecdsa.PublicKey)
//fromAddr := crypto.PubkeyToAddress(*publicKeyECDSA) fromAddr := crypto.PubkeyToAddress(*publicKeyECDSA)
remote, _ := crypto.GenerateKey() remote, _ := crypto.GenerateKey()
...@@ -323,8 +326,79 @@ func TestSizeOf(t *testing.T) { ...@@ -323,8 +326,79 @@ func TestSizeOf(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
fmt.Printf("%T \n", unsafe.Sizeof(*tx)) inner := base.EthTxData{
AccountNonce: tx.Nonce(),
Price: tx.GasPrice().Bytes(),
GasLimit: tx.Gas(),
Payload: tx.Data(),
}
v, r, sigs := tx.RawSignatureValues()
inner.V = v.Bytes()
inner.R = r.Bytes()
inner.S = sigs.Bytes()
inner.Amount = tx.Value().Bytes()
fmt.Println(unsafe.Sizeof(*tx)) addr := base.Address{Address: tx.To().Bytes()}
inner.Recipient = &addr
inner.From = fromAddr.Bytes()
out, err := proto.Marshal(&base.TransactionEth{Tx: &base.EthTx{Inner: &inner}})
if err != nil {
t.Fatal(err)
}
fmt.Printf("TransactionEth proto buff encoding: %d \n", len(out))
//fmt.Printf("%T \n", unsafe.Sizeof(tx.Nonce()))
sss, err := getRealSizeOf(tx)
if err != nil {
t.Fatal(err)
}
fmt.Println("getRealSizeOf tx ", sss)
ssss, err := getRealSizeOf(base.TransactionEth{Tx: &base.EthTx{Inner: &inner}})
if err != nil {
t.Fatal(err)
}
fmt.Println("getRealSizeOf TransactionEth", ssss)
fmt.Println("unsafe.Sizeof", unsafe.Sizeof(*tx))
fmt.Println("unsafe.Sizeof v", unsafe.Sizeof(*v))
fmt.Println("unsafe.Sizeof r", unsafe.Sizeof(*r))
fmt.Println("unsafe.Sizeof sigs", unsafe.Sizeof(*sigs))
fmt.Println("tx size", tx.Size())
// v, r, sigs
}
// type ASDF struct {
// A uint64
// B uint64
// C uint64
// D uint64
// E uint64
// F string
// }
// func (s *ASDF) size() int {
// size := int(unsafe.Sizeof(*s))
// size += len(s.F)
// return size
// }
func getRealSizeOf(v interface{}) (int, error) {
b := new(bytes.Buffer)
if err := gob.NewEncoder(b).Encode(v); err != nil {
return 0, err
}
return b.Len(), nil
} }
This diff is collapsed.
This diff is collapsed.
...@@ -4,7 +4,7 @@ go 1.18 ...@@ -4,7 +4,7 @@ go 1.18
require ( require (
github.com/ethereum/go-ethereum v1.10.26 github.com/ethereum/go-ethereum v1.10.26
google.golang.org/grpc v1.50.1 google.golang.org/grpc v1.51.0
google.golang.org/protobuf v1.28.1 google.golang.org/protobuf v1.28.1
) )
...@@ -15,11 +15,11 @@ require ( ...@@ -15,11 +15,11 @@ require (
github.com/golang/protobuf v1.5.2 // indirect github.com/golang/protobuf v1.5.2 // indirect
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 // indirect golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 // indirect
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect
golang.org/x/net v0.2.0 // indirect golang.org/x/net v0.3.0 // indirect
golang.org/x/sys v0.2.0 // indirect golang.org/x/sys v0.3.0 // indirect
golang.org/x/text v0.4.0 // indirect golang.org/x/text v0.5.0 // indirect
golang.org/x/tools v0.1.12 // indirect golang.org/x/tools v0.1.12 // indirect
golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df // indirect golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df // indirect
google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6 // indirect google.golang.org/genproto v0.0.0-20221205194025-8222ab48f5fc // indirect
google.golang.org/grpc/examples v0.0.0-20221202020918-001d234e1f2d // indirect google.golang.org/grpc/examples v0.0.0-20221202020918-001d234e1f2d // indirect
) )
...@@ -75,6 +75,8 @@ golang.org/x/net v0.0.0-20220607020251-c690dde0001d h1:4SFsTMi4UahlKoloni7L4eYzh ...@@ -75,6 +75,8 @@ golang.org/x/net v0.0.0-20220607020251-c690dde0001d h1:4SFsTMi4UahlKoloni7L4eYzh
golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.2.0 h1:sZfSu1wtKLGlWI4ZZayP0ck9Y73K1ynO6gqzTdBVdPU= golang.org/x/net v0.2.0 h1:sZfSu1wtKLGlWI4ZZayP0ck9Y73K1ynO6gqzTdBVdPU=
golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
golang.org/x/net v0.3.0 h1:VWL6FNY2bEEmsGVKabSlHu5Irp34xmMRoqb/9lF9lxk=
golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
...@@ -90,6 +92,8 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a h1:dGzPydgVsqGcTRVwiLJ1jVbuf ...@@ -90,6 +92,8 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a h1:dGzPydgVsqGcTRVwiLJ1jVbuf
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.2.0 h1:ljd4t30dBnAvMZaQCevtY0xLLD0A+bRZXbgLMLU1F/A= golang.org/x/sys v0.2.0 h1:ljd4t30dBnAvMZaQCevtY0xLLD0A+bRZXbgLMLU1F/A=
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ=
golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
...@@ -97,6 +101,8 @@ golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= ...@@ -97,6 +101,8 @@ golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg=
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.5.0 h1:OLmvp0KP+FVG99Ct/qFiL/Fhk4zp4QQnZ7b2U+5piUM=
golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
...@@ -122,11 +128,15 @@ google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 h1:+kGHl1aib/qcwaR ...@@ -122,11 +128,15 @@ google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 h1:+kGHl1aib/qcwaR
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6 h1:a2S6M0+660BgMNl++4JPlcAO/CjkqYItDEZwkoDQK7c= google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6 h1:a2S6M0+660BgMNl++4JPlcAO/CjkqYItDEZwkoDQK7c=
google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg=
google.golang.org/genproto v0.0.0-20221205194025-8222ab48f5fc h1:nUKKji0AarrQKh6XpFEpG3p1TNztxhe7C8TcUvDgXqw=
google.golang.org/genproto v0.0.0-20221205194025-8222ab48f5fc/go.mod h1:1dOng4TWOomJrDGhpXjfCD35wQC6jnC7HpRmOFRqEV0=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.50.1 h1:DS/BukOZWp8s6p4Dt/tOaJaTQyPyOoCcrjroHuCeLzY= google.golang.org/grpc v1.50.1 h1:DS/BukOZWp8s6p4Dt/tOaJaTQyPyOoCcrjroHuCeLzY=
google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=
google.golang.org/grpc v1.51.0 h1:E1eGv1FTqoLIdnBCZufiSHgKjlqG6fKFf6pPWtMTh8U=
google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww=
google.golang.org/grpc/examples v0.0.0-20221202020918-001d234e1f2d h1:IbYdIWUmlXSfKNxxWYJLWpwekZh/7ZvFdmbAcSo8ygA= google.golang.org/grpc/examples v0.0.0-20221202020918-001d234e1f2d h1:IbYdIWUmlXSfKNxxWYJLWpwekZh/7ZvFdmbAcSo8ygA=
google.golang.org/grpc/examples v0.0.0-20221202020918-001d234e1f2d/go.mod h1:jMMKnsR3nPEOSsgT/Le2GxpknJOBOQms0nWb0JRgeUM= google.golang.org/grpc/examples v0.0.0-20221202020918-001d234e1f2d/go.mod h1:jMMKnsR3nPEOSsgT/Le2GxpknJOBOQms0nWb0JRgeUM=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment