EOS 在不同语言下 ECC 签名示例和速度对比

  • 约351字
  • 技术
  • 2019年6月10日

为了提高服务器端的 EOS 签名效率,对不同语言的椭圆曲线签名速度做了测试,分别测试 100 次和 10 次,结果如下:

公众号JavaScriptDartGoLang
100 次 (print)19255 ms8801 ms671 ms
100 次13761 ms6333 ms148 ms
10 次 (print)1971 ms883 ms70 ms
10 次1415 ms880 ms29 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")
}
标签 :

相关文章

用AI编程一个月,我后悔了吗?

一个月深度使用Cursor编程,作者从最初的兴奋到后来的反思,总结出AI IDE的正确使用方式与常见误区,对想尝试或正在使用的开发者有参考价值。

查看更多

如何用RAG技术实现高效智能问答系统?

检索增强生成(RAG)结合了信息检索和大模型的生成能力,能够实时获取外部知识库中的信息,生成更加准确的回答,广泛应用于问答系统和知识管理等场景。

查看更多

时间管理的奇迹:开发者的高效工作秘诀

作为开发者,我们常面临繁重任务和高强度工作。本文结合《时间管理的奇迹》和实际经验,探讨如何合理规划时间,提升工作效率。

查看更多