- 约351字
- 技术
- 2019年6月10日
为了提高服务器端的 EOS 签名效率,对不同语言的椭圆曲线签名速度做了测试,分别测试 100 次和 10 次,结果如下:
公众号 | JavaScript | Dart | GoLang |
---|---|---|---|
100 次 (print) | 19255 ms | 8801 ms | 671 ms |
100 次 | 13761 ms | 6333 ms | 148 ms |
10 次 (print) | 1971 ms | 883 ms | 70 ms |
10 次 | 1415 ms | 880 ms | 29 ms |
print 表示在 console 中打印出了签名结果。从上表可以看出 Go 语言速度优势明显,签名速度: JavaScript < Dart < GoLang。Dart 椭圆曲线签名速度约是 JavaScript 的 2 倍左右,GoLang 签名速度约是 JavaScript 的近 100 倍。
JavaScript ECC 签名测试代码
import 'package:eosdart_ecc/eosdart_ecc.dart';
enum Color { red, blue, green }
signStr(String str) {
EOSPrivateKey.fromString('5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3'
.signString(str)
.toString();
}
main() {
var b = DateTime.now();
for (var i = 0; i < 100; i++) {
signStr("test$i");
}
var e = DateTime.now();
var ms = e.difference(b).inMilliseconds;
print("${ms}ms");
}
Dart ECC 签名测试代码
import 'package:eosdart_ecc/eosdart_ecc.dart';
enum Color { red, blue, green }
signStr(String str) {
EOSPrivateKey.fromString('5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3'
.signString(str)
.toString();
}
main() {
var b = DateTime.now();
for (var i = 0; i < 100; i++) {
signStr("test$i");
}
var e = DateTime.now();
var ms = e.difference(b).inMilliseconds;
print("${ms}ms");
}
Go ECC 签名测试代码
package main
import (
"crypto/sha256"
"fmt"
"time"
"github.com/eoscanada/eos-go/ecc"
)
func sign(str string) {
privkey, _ := ecc.NewPrivateKey("5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3")
digest := sha256Str(str)
privkey.Sign(digest)
}
func sha256Str(str string) []byte {
h := sha256.New()
h.Write([]byte(str))
return h.Sum(nil)
}
func main() {
b := time.Now()
for i := 0; i < 100; i++ {
sign(fmt.Sprintf("test%d", i))
}
e := time.Now()
t := e.UnixNano() - b.UnixNano()
fmt.Println(t/int64(time.Millisecond), "ms")
}