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 应用开发入门工具简介

随着ChatGPT的出现,各种 AI 工具层出不穷。本文介绍了 LangChain、dify 和 Coze 三款热门 AI 开发工具,详细分析了它们的特点和应用场景,帮助开发者快速搭建高效的 AI 应用。

查看更多

AI结对开发节奏

当需求频繁变化、交付时间压缩时,真正拉开差距的不是“更拼”,而是“更有节奏”。本文通过一个真实感案例,拆解团队如何用AI结对、任务切片与自动化守门,把混乱的一周变成稳定输出。

查看更多

掌握Docker和k8s:利用容器技术提升开发效率

容器技术如 Docker 和 Kubernetes 已成为现代软件开发中的核心工具。通过利用这些技术,我们可以简化开发和部署流程,确保开发环境一致性,实现自动化部署,从而极大地提升开发效率。

查看更多